pax_global_header00006660000000000000000000000064121114664770014523gustar00rootroot0000000000000052 comment=97e8352ed55762f24f62ad20fbbd2046b660b237 hydrogen-0.9.6-beta3/000077500000000000000000000000001211146647700143525ustar00rootroot00000000000000hydrogen-0.9.6-beta3/.gitignore000066400000000000000000000001351211146647700163410ustar00rootroot00000000000000*~ *.o ui_*.h moc_*.cc /build /libs/hydrogen/include/hydrogen/config.h /cmake_opts /hydrogen hydrogen-0.9.6-beta3/AUTHORS000066400000000000000000000002511211146647700154200ustar00rootroot00000000000000Main coder and maintainer: Alessandro Cominu (aka Comix) Thanks to: See complete list at http://trac.assembla.com/hydrogen/wiki/people hydrogen-0.9.6-beta3/CMakeLists.txt000066400000000000000000000311121211146647700171100ustar00rootroot00000000000000# # CMAKE SETUP # CMAKE_MINIMUM_REQUIRED(VERSION 2.6) SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) # The CMake Policy mechanism is designed to help keep existing projects building as new versions of CMake introduce changes in behavior. # http://www.cmake.org/cmake/help/cmake2.6docs.html#command:cmake_policy IF(COMMAND CMAKE_POLICY) # CMAKE_POLICY(SET CMP0005 NEW) CMAKE_POLICY(SET CMP0003 NEW) # add_library CMAKE_POLICY(SET CMP0006 NEW) # bundle destination property ENDIF() # # PROJECT INFO # PROJECT(hydrogen) SET(VERSION_MAJOR "0") SET(VERSION_MINOR "9") SET(VERSION_PATCH "6") SET(VERSION_SUFFIX "beta3") SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") IF(VERSION_SUFFIX) SET(DISPLAY_VERSION "${VERSION}-${VERSION_SUFFIX}") ELSE() EXECUTE_PROCESS(COMMAND git log --pretty=format:'%h' -n 1 OUTPUT_VARIABLE GIT_REVISION ) SET(DISPLAY_VERSION "${VERSION}-${GIT_REVISION}") ENDIF(VERSION_SUFFIX) SET(LIBSNDFILE_VERSION_PREV "1.0.17") # # CONFIG OPTIONS # SET(WANT_LIBTAR TRUE) OPTION(WANT_DEBUG "build with debug information" ON) IF(APPLE) OPTION(WANT_SHARED "Build the core library shared." OFF) ELSE() OPTION(WANT_SHARED "Build the core library shared." ON) ENDIF() OPTION(WANT_LIBARCHIVE "Enable use of libarchive instead of libtar" OFF) OPTION(WANT_LADSPA "Enable use of LADSPA plugins" ON) IF(APPLE) OPTION(WANT_JACKSESSION "Enable use of Jack-Session-Handler" OFF) ELSE() OPTION(WANT_JACKSESSION "Enable use of Jack-Session-Handler" ON) ENDIF() OPTION(WANT_OSS "Include OSS (Open Sound System) support" OFF) OPTION(WANT_ALSA "Include ALSA (Advanced Linux Sound Architecture) support" ON) OPTION(WANT_JACK "Include JACK (Jack Audio Connection Kit) support" ON) OPTION(WANT_PORTAUDIO "Include PortAudio support" OFF) OPTION(WANT_PORTMIDI "Include PortMidi support" OFF) OPTION(WANT_LASH "Include LASH (Linux Audio Session Handler) support" OFF) OPTION(WANT_LRDF "Include LRDF (Lightweight Resource Description Framework with special support for LADSPA plugins) support" OFF) OPTION(WANT_RUBBERBAND "Include RUbberBand (Audio Time Stretcher Library) support" OFF) IF(APPLE) OPTION(WANT_COREAUDIO "Include CoreAudio support" ON) OPTION(WANT_COREMIDI "Include CoreMidi support" ON) OPTION(WANT_BUNDLE "Build a MAC OSX bundle application" ON) ENDIF() IF(WANT_DEBUG) SET(CMAKE_BUILD_TYPE Debug) SET(H2CORE_HAVE_DEBUG TRUE) ELSE() SET(CMAKE_BUILD_TYPE Release) SET(H2CORE_HAVE_DEBUG FALSE) ENDIF() IF(WANT_BUNDLE) SET(H2CORE_HAVE_BUNDLE TRUE) ELSE() SET(H2CORE_HAVE_BUNDLE FALSE) ENDIF() IF(WANT_SHARED) SET(H2CORE_LIBRARY_TYPE SHARED) ELSE() SET(H2CORE_LIBRARY_TYPE STATIC) ENDIF() #SET(CMAKE_CXX_FLAGS "-fno-implement-inlines -finline-small-functions -findirect-inlining -fpartial-inlining") SET(CMAKE_CXX_FLAGS "-O2 -fno-implement-inlines") SET(CMAKE_CXX_FLAGS_RELEASE "") SET(CMAKE_CXX_FLAGS_DEBUG "-g ")#-Winline") IF(APPLE) #Compile for 32bit and 64bit intel macs SET (CMAKE_OSX_ARCHITECTURES "i386;x86_64;") ENDIF() # # MANDATORY PKGS AND DEFAULT OPTIONS # INCLUDE(StatusSupportOptions) MANDATORY_PKG(QT4) MANDATORY_PKG(Threads) MANDATORY_PKG(LIBSNDFILE) # TODO remove data from path SET(SYS_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/hydrogen/data") # TODO remove data from path, could be .config/hydrogen SET(USR_DATA_PATH ".hydrogen/data") IF(WIN32) SET(WANT_JACK FALSE) SET(Threads_PATH "C:/Program Files/GnuWin32") SET(LIBARCHIVE_PATH "C:/Program Files/GnuWin32") SET(LIBSNDFILE_PATH "C:/Program Files/Mega-Nerd/libsndfile") ELSE(WIN32) IF(APPLE) LINK_DIRECTORIES("/opt/local/lib") ELSE(APPLE) SET(OSS_LIB_PATHS "/usr/lib${LIB_SUFFIX}/oss/lib" "/usr/local/lib${LIB_SUFFIX}/oss/lib" ) SET(RUBBERBAND_INCLUDE_PATHS "/usr/include/rubberband" ) ENDIF(APPLE) ENDIF(WIN32) # # HEADER LIBRARY FUNCTIONS # INCLUDE(CompileHelper) INCLUDE(FindHelper) INCLUDE(FindLadspa) INCLUDE(CheckIncludeFiles) INCLUDE(CheckLibraryExists) INCLUDE(FindZLIB) INCLUDE(FindThreads) COMPILE_HELPER(SSCANF ${CMAKE_SOURCE_DIR}/cmake/sscanf sscanf ) COMPILE_HELPER(RTCLOCK ${CMAKE_SOURCE_DIR}/cmake/rtclock rtclock ) CHECK_INCLUDE_FILES(sys/types.h HAVE_SYS_TYPES_H) CHECK_INCLUDE_FILES(sys/stat.h HAVE_SYS_STAT_H) CHECK_INCLUDE_FILES(libtar.h HAVE_LIBTAR_H) CHECK_LIBRARY_EXISTS(tar tar_open "" HAVE_LIBTAR_OPEN) CHECK_LIBRARY_EXISTS(tar tar_close "" HAVE_LIBTAR_CLOSE) CHECK_LIBRARY_EXISTS(tar tar_extract_all "" HAVE_LIBTAR_EXTRACT_ALL) IF(HAVE_LIBTAR_H AND HAVE_LIBTAR_OPEN AND HAVE_LIBTAR_CLOSE AND HAVE_LIBTAR_EXTRACT_ALL) SET(LIBTAR_OK TRUE) ELSE() SET(LIBTAR_OK FALSE) ENDIF() FIND_HELPER(LIBTAR tar tar.h tar) IF( NOT LIBTAR_FOUND OR NOT LIBTAR_OK OR NOT ZLIB_FOUND ) SET(WANT_LIBTAR FALSE) MANDATORY_PKG(LIBARCHIVE) ENDIF() FIND_HELPER(LIBARCHIVE archive archive.h archive) IF( WANT_LIBARCHIVE AND LIBARCHIVE_FOUND) SET(WANT_LIBTAR FALSE) ENDIF() FIND_HELPER(LIBSNDFILE sndfile sndfile.h sndfile) FIND_HELPER(ALSA alsa alsa/asoundlib.h asound ) FIND_LADSPA(LADSPA ladspa.h noise) FIND_HELPER(OSS oss sys/soundcard.h OSSlib ) FIND_HELPER(JACK jack jack/jack.h jack) FIND_HELPER(JACKSESSION jack jack/session.h jack) IF(APPLE) FIND_LIBRARY(AUDIOUNIT_LIBRARY AudioUnit) FIND_LIBRARY(CORESERVICES_LIBRARY CoreServices) FIND_HELPER(COREAUDIO CoreAudio-2.0 coreaudio.h coreaudio) FIND_HELPER(COREMIDI CoreMidi coremidi.h coremidi) ENDIF() FIND_HELPER(PORTAUDIO portaudio-2.0 portaudio.h portaudio) FIND_HELPER(PORTMIDI portmidi portmidi.h portmidi) FIND_HELPER(LASH lash-1.0 lash/lash.h lash) FIND_HELPER(LRDF lrdf lrdf.h lrdf) FIND_HELPER(RUBBERBAND rubberband RubberBandStretcher.h rubberband) # CHECK FOR Qt4 SET(QT_USE_QTNETWORK true) SET(QT_USE_QTXML true) SET(QT_USE_QTXMLPATTERNS true) FIND_PACKAGE(Qt4 4.3.0 REQUIRED) find_package(Doxygen) if(DOXYGEN_FOUND) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/docs COMMENT "Generating API documentation with Doxygen" VERBATIM ) endif(DOXYGEN_FOUND) # # COMPUTE H2CORE_HAVE_xxx xxx_STATUS_REPORT # SET(STATUS_LIST LIBSNDFILE LIBTAR LIBARCHIVE LADSPA ALSA OSS JACK JACKSESSION COREAUDIO COREMIDI PORTAUDIO PORTMIDI LASH LRDF RUBBERBAND ) FOREACH( _pkg ${STATUS_LIST}) COMPUTE_PKGS_FLAGS(${_pkg}) ENDFOREACH() # LIBSNDFILE CHECKS STRING( COMPARE GREATER "${LIBSNDFILE_VERSION}" "${LIBSNDFILE_VERSION_PREV}" LIBSNDFILE_VERSION_OK) IF(LIBSNDFILE_VERSION_OK) SET(LIBSNDFILE_MSG "libsndfile supports FLAC and OGG sound file formats") ELSE() SET(LIBSNDFILE_MSG "libsndfile version must be greater than ${LIBSNDFILE_VERSION_PREV} to support LFAC and OGG sound file formats") ENDIF() # RUBBERBAND information SET(LIBRUBBERBAND_MSG "The use of librubberband2 is marked as experimental. * Because the current implementation produce wrong timing! * So long this bug isn't solved, please disable this option. * If rubberband-cli is installed, the hydrogen rubberband-fuction * will work properly as expected.") # # CONFIG PROCESS SUMMARY # SET(reset "${_escape}[0m") SET(red "${_escape}[1;31m") SET(purple "${_escape}[1;35m") SET(cyan "${_escape}[1;36m") COLOR_MESSAGE("${cyan}Installation Summary${reset} -------------------- * Install Directory : ${CMAKE_INSTALL_PREFIX} * User data path : ${USR_DATA_PATH} * System data path : ${SYS_DATA_PATH} * core library build as : ${H2CORE_LIBRARY_TYPE} * debug capabilities : ${H2CORE_HAVE_DEBUG} * macosx bundle : ${H2CORE_HAVE_BUNDLE}\n" ) COLOR_MESSAGE("${cyan}Main librarires${reset} * ${purple}libQt${reset} : ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} * ${purple}libsndfile${reset} : ${LIBSNDFILE_STATUS} * ${LIBSNDFILE_MSG} * ${purple}libtar${reset} : ${LIBTAR_STATUS} * ${purple}libarchive${reset} : ${LIBARCHIVE_STATUS} * ${purple}ladspa${reset} : ${LADSPA_STATUS}\n" ) COLOR_MESSAGE("${cyan}Supported audio interfaces${reset} -------------------------- * ${purple}ALSA${reset} : ${ALSA_STATUS} * ${purple}OSS${reset} : ${OSS_STATUS} * ${purple}JACK${reset} : ${JACK_STATUS} * ${purple}JACKSESSION${reset} : ${JACKSESSION_STATUS} * ${purple}CoreAudio${reset} : ${COREAUDIO_STATUS} * ${purple}CoreMidi${reset} : ${COREMIDI_STATUS} * ${purple}PortAudio${reset} : ${PORTAUDIO_STATUS} * ${purple}PortMidi${reset} : ${PORTMIDI_STATUS}\n" ) COLOR_MESSAGE("${cyan}Usefull extensions${reset} ----------------------------------------- * ${purple}LASH${reset} : ${LASH_STATUS} * ${purple}LRDF${reset} : ${LRDF_STATUS} * ${purple}RUBBERBAND${reset} : ${RUBBERBAND_STATUS} * ${LIBRUBBERBAND_MSG}\n" ) IF(WANT_DEBUG) COLOR_MESSAGE("${cyan}Miscellaneous capabilities${reset} ----------------------------------------- * realtime clock : ${HAVE_RTCLOCK} * working sscanf : ${HAVE_SSCANF}\n" ) ENDIF() COLOR_MESSAGE("----------------------------------------------------------------- ${red}IMPORTANT:${reset} after installing missing packages, remove ${CMAKE_BINARY_DIR}/CMakeCache.txt before running cmake again! -----------------------------------------------------------------\n" ) find_path( HYDROGEN_INSTALLED NAMES hydrogen/config.h ) IF( HYDROGEN_INSTALLED ) COLOR_MESSAGE("----------------------------------------------------------------- ${red}IMPORTANT${reset}: previously installed hydrogen headers found in ${HYDROGEN_INSTALLED} you should uninstall these files before building hydrogen unless you know what you are doing. -----------------------------------------------------------------\n" ) ENDIF() # # SET BUILD INFORMATION # ADD_SUBDIRECTORY(src/core) ADD_SUBDIRECTORY(src/tests) ADD_SUBDIRECTORY(src/cli) ADD_SUBDIRECTORY(src/player) ADD_SUBDIRECTORY(src/synth) ADD_SUBDIRECTORY(src/gui) INSTALL(DIRECTORY data DESTINATION ${SYS_DATA_PATH}/.. PATTERN ".git" EXCLUDE) IF(NOT WIN32 AND NOT APPLE) INSTALL(FILES ${CMAKE_SOURCE_DIR}/linux/hydrogen.desktop DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications") ENDIF() # # CPack # INCLUDE(InstallRequiredSystemLibraries) SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Hydrogen : an advanced drum machine for GNU/Linux") SET(CPACK_PACKAGE_VENDOR "Hydrogen Developers") SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.txt") SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") SET(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}") SET(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}") SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}") IF(VERSION_SUFFIX) SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}-${VERSION_SUFFIX}") ENDIF(VERSION_SUFFIX) SET(CPACK_PACKAGE_INSTALL_DIRECTORY "Hydrogen ${VERSION}") IF(WIN32) # TODO #SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/data\\\\nsis_branding.bmp") SET(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/data\\\\hydrogen.ico") SET(CPACK_NSIS_INSTALLED_ICON_NAME "hydrogen.exe") SET(CPACK_NSIS_DISPLAY_NAME "Hydrogen (Advanced drum machine for GNU/Linux)") SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.hydrogen-music.org/") SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.hydrogen-music.org/") SET(CPACK_NSIS_CONTACT "hydrogen-devel@lists.sourceforge.net") SET(CPACK_PACKAGE_EXECUTABLES "hydrogen-gui.exe;Advanced drum machine for GNU/Linux") SET(CPACK_NSIS_MENU_LINKS "hydrogen-gui.exe;Advanced drum machine for GNU/Linux") SET(CPACK_SOURCE_GENERATOR "ZIP") ELSE(WIN32) #apple stuff was moved to src/gui/CMakeLists.txt ENDIF() SET(CPACK_SOURCE_PACKAGE_FILE_NAME "hydrogen-${VERSION}") SET(CPACK_SOURCE_IGNORE_FILES ".*~;\\\\.git;\\\\.svn;${CMAKE_BINARY_DIR}") #!The following 5 lines are copied from cmake's QtTest example # To Create a package, one can run "cpack -G DragNDrop CPackConfig.cmake" on Mac OS X # where CPackConfig.cmake is created by including CPack # And then there's ways to customize this as well set(CPACK_BINARY_DRAGNDROP ON) INCLUDE(CPack) # # CUSTOM TARGETS # ADD_CUSTOM_TARGET(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source) CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/cmake/uninstall.cmake.in" "${CMAKE_BINARY_DIR}/uninstall.cmake" IMMEDIATE @ONLY) ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_BINARY_DIR}/uninstall.cmake") hydrogen-0.9.6-beta3/COPYING000066400000000000000000000431311211146647700154070ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. hydrogen-0.9.6-beta3/ChangeLog000066400000000000000000000121141211146647700161230ustar00rootroot000000000000002011-12-05 the hydrogen team * Release 0.9.6 * new build system (cmake) * add undo for song/pattern editor * jack-session support * jack-midi support * several bug fixes * tabbed interface * several small changes to the GUI * improve ExportSong add use of TimeLineBPM, RubberbandBatch processor and different types of resample interpolation 2011-03-15 the hydrogen team * Release 0.9.5 * load playlists at startup * midi-learn works now with shift-click on some gui elements * multi-track export * LADI support * maximum number of bars is now configurable * added czech translation * fixed serveral export song failures * added ogg, flac, aiff export support * added some new commandline parameter for no_gui version * added rubberband-cli support * several improvements on sample editor * added NO_GUI_SUPPORT to build a version of hydrogen without a gui * added support for app bundles on OSX * non destructive sample editor * piano roll editor * instrument midi out * destructive midi recording * support for midi "note off" messages * virtual patterns * time line to change song tempo and add tags * director * and at least several small changes * Xml handling is now done by QtXml instead of TinyXML * improved support for non-ascii filenames / strings * remove direct dependencies to libflac 2009-09-12 the hydrogen team * Release 0.9.4 * QT4 port * Autosave * Jack port follows instrument names * Mute groups for instruments * New drumkit manager (with downloadable drumkits) * Save and load patterns * Jack transport master * Beatcounter * Playlist editor * MMC * Lead / lag (pattern editor) * Audiofilebrowser * midiAutosense * change post masterfader fx_return to pre masterfader fx_return * several new translations * new manual * switched buildsystem from autotools to scons * tons of bugfixes * soundlibrary browser 2008-02-05 Alessandro Cominu * Release 0.9.3.1 * Patch from Lubomir Kundrak - Compilation with gcc-4.3 * Compilation fix for new libFLAC++ * Added LASH support (Jaakko Sipari) 2005-07-23 Alessandro Cominu * Release 0.9.2 * New graphics * Bug fix in export song (using JACK driver) * Bug fix in export song (wrong samplerate) * Follow playhead in song editor * Automatic audio driver selection * New PortAudio and PortMidi drivers * Mac Os X port * Pattern size increased up to 4 bars * Random pitch variations * New instrument editor * Low pass filter * Insert/delete a range of patterns in song editor 2004-11-28 Alessandro Cominu * Release 0.9.1 * New ALSA driver * New french tutorial and manual page (thanks to Pierre 'AlSim' Chapuis) * Various bug fixes 2004-09-08 Alessandro Cominu * Release 0.9.0 * Multi layer support for instruments (up to 16 samples). * Multiple patterns playing at once. * Added FLAC files support for songs and drumkits. * Added pitch and gain properties per instrument. * Improved song and pattern editor (selections, copy/move, etc..). * Added a new selectable user interface (single panel). * Better jack-transport support. * Ability to set the note length in pattern editor * Export song to standard midi file 2004-03-15 Alessandro Cominu * Release 0.8.2 * Audio file preview in load instrument dialog * Jack transport improvements * 4 Ladspa FX send per instrument * Show recent used songs * QT Style selection option in Preferences Dialog * New keybindings * Bug fix in load/save song * LRDF support (optional) * Several GUI improvements * Better Midi-in support * virtual keyboard (using qwertyuiop...) * Ability to record midi-in or virtual keyboard notes in a pattern 2003-12-18 Alessandro Cominu * Release 0.8.1 * Midi and CPU activity widgets * Jack transport slave mode * Multiple jack outputs * Resizable song editor * Seek in song clicking in the song editor * New mixer * 32 instruments * Custom pattern size * Per instrument output (jack driver) * MMC/MTC support (experimental) * i18n support 2003-05-25 Alessandro Cominu * Release 0.8.0 * Delay FX * Bug fix in Alsa Midi Driver * Assignable Jack ports in preferences file * Assignable midi-in channel (1..16, ALL) * Drumkit support (load, save, import, export) * Acoustic drumkit included * various GUI improvements 2003-03-24 Alessandro Cominu * Release 0.7.6 * Bug fix in note velocity editor * Improved pattern editor * Humanize function * Swing function * New child frame interface * Stereo peak visualization in mixer * New song editor 2003-02-23 Alessandro Cominu * Release 0.7.5 * thread safe audio engine * Song loop button * Velocity bar in pattern editor * Instrument pan in mixer * Better graphical user interface * Demo songs hydrogen-0.9.6-beta3/DEVELOPERS000066400000000000000000000045061211146647700157520ustar00rootroot00000000000000DEVELOPER INFO ============== TODO FIXME DEPRECATED MAKING A RELEASE ---------------- Transitioning the code to remove some of the development hooks in order to make a release has several, easy-to-forget steps. They are: 1. Set the version a. Configure the correct verion in CMakeLists.txt b. Update linux/debian/changelog 2. Remove the 'developer warning': in data/hydrogen.default.conf change hydrogen_preferences/showDevelWarning to "false". 3. Commit your changes to trunk. 4. Make a tarball of the release (gzipped). Use gzip instead of bzip2 for the folks on Windows. Tarballs should be named: +--- Release version | | +--- Extra release version info __|__ _|_ hydrogen-0.9.4-rc2.tar.gz Example: 'tar -pczf hydrogen-0.9.5.tar.gz hydrogen-0.9.5' 5. If this is an RC release, the following steps are optional. 6. In a clean directory, test build the tarball in as many ways as you can. Call your friends. Have a party. Be sure to build packages on as many systems as possible. Be sure to install and uninstall them, too. 7. Go ahead and build binary packages. Follow the naming convention for the platform that you're building for. Linux: hydrogen_0.9.4rc2_distro_arch.pkg distro: the GNU/Linux distro (e.g. 'lenny' for Debian) arch: the processor it's built for (e.g. i686) pkg: the package management system (deb, rpm) OS X: hydrogen_0.9.4rc2_arch.dmg (arch is optional if the binary will work on both.) Windows: hydrogen_0.9.4rc2.exe 8. If the release passes these "internal" tests, tag the release. Remember, after tagging the release you may not commit changes to the tag. git tag -a 0.9.4 -m "Tagging 0.9.4" 9. If this is a major release (e.g. 0.9.4), then make a branch for maintenance patches for your release. If this is a maintenance release (e.g. 0.9.4.1) then skip this step. git branch 0.9.4 git push origin 0.9.4 10. Make announcements. CODING CONVENTIONS ------------------ Use the 'linux' indention. (i.e. Tabs) Allow extra space within parentheses, like this: while( !done ) { foo(); } hydrogen-0.9.6-beta3/Doxyfile.in000066400000000000000000001773441211146647700165050ustar00rootroot00000000000000# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "@PROJECT_NAME@" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = "@VERSION@" # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = "@DOXYFILE_OUTPUT_DIR@" # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = YES # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = NO # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = "@CMAKE_SOURCE_DIR@/src/gui/" \ "@CMAKE_SOURCE_DIR@/src/core/" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.d \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.m \ *.mm \ *.dox \ *.py \ *.C \ *.CC \ *.C++ \ *.II \ *.I++ \ *.H \ *.HH \ *.H++ \ *.CS \ *.PHP \ *.PHP3 \ *.M \ *.MM \ *.PY # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = *moc_* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = "@DOXYFILE_HTML_DIR@" # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = YES # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = @DOXYFILE_LATEX@ # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = "@DOXYFILE_LATEX_DIR@" # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = "@LATEX_COMPILER@" # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = "@MAKEINDEX_COMPILER@" # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = @DOXYFILE_PDFLATEX@ # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @DOXYFILE_DOT@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = "@DOXYGEN_DOT_PATH@" # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 1000 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = YES # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES hydrogen-0.9.6-beta3/INSTALL.txt000066400000000000000000000141001211146647700162150ustar00rootroot00000000000000------------------------------------------------------------------------------ H Y D R O G E N Drum machine ------------------------------------------------------------------------------ BUILDING AND INSTALLING HYDROGEN ================================ Contents: 1. System Requirements 2. Download 3. Binary Packages 4. Prerequisites to Build from Source 5. Build and Install from Source 1. System Requirements ---------------------- Hydrogen is supported on the following operating systems: * Linux/Unix/BSD * Mac OS X Hydrogen is *not* supported on Windows because there are currently no Windows developers on the project... and so the Windows components have fallen into disrepair. Hydrogen is known to work well on fairly old systems like this (as of 2009): Pentium III 500 MHz 198 MB RAM Consumer-Grade (cheap) audio card Keyboard and Mouse 1x1 USB MIDI Interface (optional) 2. Download ----------- Hydrogen can be downloaded as a binary package, source distribution, or you can check out the current development version with Subversion. These can be accessed on the Hydrogen home page: http://www.hydrogen-music.org/ The source code for the current development version can be checked out via git: $ git clone git://github.com/hydrogen-music/hydrogen.git 3. Binary Packages ------------------ Debian (GNU/Linux) and Ubuntu (GNU/Linux): Hydrogen can usually be installed with apt: # apt-get install hydrogen However, if you wish to have a more current version of Hydrogen, the Hydrogen dev's typically maintain a .deb package for Debian stable, testing, and some Ubuntu distributions. Note that apt takes care of any library dependencies that you have. Other GNU/Linux: Check your package management system for the package 'hydrogen.' Mac OS X: They Hydrogen home page has a binary package available for OS X. Extract the ZIP archive and it will create a hydrogen.app folder. 4. Prerequisites to Build from Source ------------------------------------- In order to build from source, you will need the following libraries installed on your system, and the development header files: REQUIRED * Qt 4 Library (>=4.4.0, 4.3.x might work, 4.2.x won't) * Qt 4 SDK (moc, uic, etc.) * GNU g++ compiler (>=4.0, 3.x might work) * cmake (>=2.6) * libsndfile >=1.0.18 * zlib and libtar -OR- libarchive OS X: You will probably need to build libarchive from source. * At least 1 audio and 1 midi driver * OS X: Xcode DRIVERS AVAILABLE * JACK Audio Connection Kit (>=0.103.0) * ALSA (Advanced Linux Sound Architecture) * OSS * PortAudio (v18, not v19) * PortMIDI * CoreAudio (OS X) * CoreMidi (OS X) OPTIONAL SUPPORT * LASH (Linux Audio Session Handler) * JACK Session need Jack Audio Connection Kit(>=0.120.0/1.9.7) * liblrdf for LADSPA plugins * librubberband2 for lib - RUBBERBAND support (experimental) currently it is recommended that you disable this config option to ensure backwards compatibility with songs created under 0.9.5 which use rubberband. install the rubberband -cli package beside librubberband2 . rubberband works properly even if this option is disabled. if available, hydrogen locate an installed rubberband-cli binary. On a single, 500MHz processor Hydrogen takes about 1.5 hours to build. 5. Build and Install from Source -------------------------------- If you wish to build a package for your operating system, skip down to the end of this section. This instructions are thought for building hydrogen on linux. We're providing a set of qmake project files for windows and mac osx builds. Please read the relevant wiki pages for more informations: http://trac.assembla.com/hydrogen/wiki/development%3AcompileOSX http://trac.assembla.com/hydrogen/wiki/coding%3Apackagingwin 5.1 build --------- After you have all the prerequisites, building and installing will look like this: $ tar xjf hydrogen-0.9.6.tar.bz2 $ cd hydrogen-0.9.6 $ mkdir build && cd build $ cmake .. $ make && sudo make install All the following cmake commands should be executed in a build directory : If you wish to configure features like LADSPA plugins, or debugging symbols, get more information like this: $ cmake -L .. For possible make targets: $ make help To change the directory where hydrogen is installed, it is done like this: $ cmake -DCMAKE_INSTALL_PREFIX=/opt/hydrogen .. $ make && sudo make install Uninstalling Hydrogen is done like this: $ sudo cmake uninstall Note that cmake is a build system and not a package manager. While we make every effort to ensure that Hydrogen uninstalls cleanly, it is not a guarantee. Cmake macros should detect the correct Qt settings and location of your libraries, but sometimes it needs a little help. If Hydrogen fails to build, some environment variables could help it. $ QTDIR=/opt/lib/qt4 OSS_PATH="/usr/lib/oss/lib" OSS_INCLUDE="/usr/lib/oss/include" cmake .. 5.2 cmake helper ---------------- Alternatively you could use the cmake helper : ./tools/cmake To remove and build hydrogen from scratch $ ./tools/cmake r m ___CREATING A BINARY PACKAGE___ If you are a package maintainer and wish for your packaging scripts to be included in the Hydrogen source tree, we would be happy to work with you. Please contact the developer mailing list (see the Hydrogen home page). The instructions below are for the package systems that have been contributed so far. ___CREATING A .DEB PACKAGE___ In order to create a .deb package for Debian or Debian-based systems (like Ubuntu), you first need the debhelper package: # apt-get install debhelper To build the Hydrogen package: $ tar xjf hydrogen-0.9.6.tar.bz2 $ cd hydrogen-0.9.6 $ cd linux $ fakeroot dpkg-buildpackage This will place the .deb package and description files in the parent directory. If you wish to change the version number for the archive, edit linux/debian/changelog to set the version. To install the newly created deb package run the following (substitute the deb package name with the version your build created): $ cd .. $ sudo dpkg -i hydrogen_0.9.6_amd64.deb hydrogen-0.9.6-beta3/README.txt000066400000000000000000000027471211146647700160620ustar00rootroot00000000000000------------------------------------------------------------------------------ H Y D R O G E N Drum machine ------------------------------------------------------------------------------ Hydrogen is an advanced drum machine for GNU/Linux and Mac. It's main goal is to bring professional yet simple and intuitive pattern-based drum programming. Features: __General__ * Very user-friendly, modular, fast and intuitive graphical interface based on QT 4. * Sample-based stereo audio engine, with import of sound samples in .wav, .au and .aiff formats. * Support of samples in compressed FLAC file. __Sequencer and mixer__ * Pattern-based sequencer, with unlimited number of patterns and ability to chain patterns into a song. * Up to 64 ticks per pattern with individual level per event and variable pattern length. * 32 instrument tracks with volume, mute, solo, pan capabilities. * Multi layer support for instruments (up to 16 samples for each instrument). * Ability to import/export song files. * Unique human velocity, human time, pitch and swing functions. * Multiple patterns playing at once. __Other__ * JACK, ALSA, PortAudio and OSS audio drivers. * ALSA MIDI and PortMidi input with assignable midi-in channel (1..16, ALL). * Import/export of drumkits. * Export song to wav file. * Export song to midi file. Installation: See the INSTALL.txt file. HomePage http://www.hydrogen-music.org Happy drumming! :^) Alessandro Cominu hydrogen-0.9.6-beta3/build.sh000077500000000000000000000060211211146647700160070ustar00rootroot00000000000000#! /bin/bash QTDIR=${QTDIR:-/usr/lib/qt} VERBOSE=${VERBOSE:-0} CMAKE_OPTIONS=" -DCMAKE_COLOR_MAKEFILE=1 \ -DWANT_DEBUG=1 \ -DWANT_JACK=1 \ -DWANT_ALSA=1 \ -DWANT_LIBARCHIVE=1 \ -DWANT_RUBBERBAND=1 \ -DWANT_OSS=1 \ -DWANT_PORTAUDIO=1 \ -DWANT_PORTMIDI=1 \ -DWANT_LASH=0 \ -DWANT_LRDF=1 \ -DWANT_COREAUDIO=1 \ -DWANT_COREMIDI=1 " MAKE_OPTS="-j 3" H2FLAGS="-V0xf" BUILD_DIR=./build [ -f cmake_opts ] && source cmake_opts function cmake_init() { echo -e " * cmake init\n" if [ ! -d $BUILD_DIR ]; then mkdir $BUILD_DIR || exit 1 fi cd $BUILD_DIR || exit 1 if [ ! -e CMakeCache.txt ]; then cmake ${CMAKE_OPTIONS} .. || exit 1 fi cd .. || exit 1 } function cmake_clean() { echo -e " * clean cmake files\n" && rm $BUILD_DIR/CMakeCache.txt 2>/dev/null } function cmake_rm() { echo -e " * rm cmake files\n" && rm -fr $BUILD_DIR 2>/dev/null } function cmake_make() { cmake_init echo -e " * cmake make\n" && cd $BUILD_DIR || exit 1 if [ $VERBOSE -eq 1 ]; then VERBOSE=1 make $MAKE_OPTS || exit 1 else make $MAKE_OPTS || exit 1 fi cp src/gui/hydrogen .. cd .. } function cmake_graph() { cmake_init echo -e " * cmake graphviz\n" && cd $BUILD_DIR && cmake --graphviz=cmake.dot .. && dot -Tpng -o cmake_dep.png cmake.dot && cd .. || exit 1 } function cmake_doc() { cmake_init echo -e " * cmake doc\n" && cd $BUILD_DIR && make doc && cd .. || exit 1 } function cmake_help() { cmake_init echo -e " * cmake help\n" && cd $BUILD_DIR && cmake .. -L && cd .. || exit 1 } function cmake_exec() { cmake_init echo -e " * execute hydrogen\n" && ./hydrogen $H2FLAGS || exit 1 } function cmake_tests() { cmake_init echo -e " * execute tests\n" && $BUILD_DIR/src/tests/tests || exit 1 } function cmake_pkg() { cmake_init echo -e " * execute hydrogen\n" && cd $BUILD_DIR && make package_source && cd .. || exit 1 } if [ $# -eq 0 ]; then echo "usage $0 [cmds list]" echo "cmds may be" echo " r[m] => all built, temp and cache files" echo " c[lean] => remove cache files" echo " m[ake] => launch the build process" echo " d[oc] => build html documentation" echo " g[raph] => draw a dependecies graph" echo " h[elp] => show the build options" echo " x|exec => execute hydrogen" echo " t[ests] => execute tests" echo " p[kg] => build source package" echo "ex: $0 r m pkg x" exit 1 fi for arg in $@; do case $arg in c|clean) cmd="cmake_clean";; r|rm) cmd="cmake_rm";; m|make) cmd="cmake_make";; g|graph) cmd="cmake_graph";; d|doc) cmd="cmake_doc";; h|help) cmd="cmake_help";; x|exec) cmd="cmake_exec";; t|test) cmd="cmake_tests";; p|pkg) cmd="cmake_pkg";; *) echo "unknown command ${arg}" && exit 1 esac $cmd done hydrogen-0.9.6-beta3/cmake/000077500000000000000000000000001211146647700154325ustar00rootroot00000000000000hydrogen-0.9.6-beta3/cmake/CompileHelper.cmake000066400000000000000000000014721211146647700211700ustar00rootroot00000000000000# # - Try to compile and run a given source file, success if returns 0 # # Once done this will define # # HAVE_${suffix} # # Copyright (c) 2009, Jérémy Zurcher, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro(COMPILE_HELPER suffix prj_dir prj_name ) try_compile( ${suffix}_COMPILES ${CMAKE_BINARY_DIR}/try/${prj_name} ${prj_dir} ${prj_name} ) SET(HAVE_${suffix} FALSE) if( ${suffix}_COMPILES ) execute_process( COMMAND ${CMAKE_BINARY_DIR}/try/${prj_name}/${prj_name} RESULT_VARIABLE ${suffix}_RUNS) if( ${suffix}_COMPILES ) SET(HAVE_${suffix} TRUE) endif() endif() MESSAGE(STATUS "Checking ${suffix} useability - ${HAVE_${suffix}}" ) endmacro() hydrogen-0.9.6-beta3/cmake/FindHelper.cmake000066400000000000000000000036221211146647700204570ustar00rootroot00000000000000# # - Try to find a library using pkg-config if available, # than portable macros FIND_PATH and FIND_LIBRARY # # Once done this will define # # ${prefix}_FOUND - system has the library # ${prefix}_INCLUDE_DIR - the library include directory # ${prefix}_LIBRARIES - Link these to library # ${prefix}_DEFINITIONS - Compiler switches required for using this libray # # Copyright (c) 2009, Jérémy Zurcher, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro(FIND_HELPER prefix pkg_name header lib) if(${prefix}_INCLUDE_DIR AND ${prefix}_LIBRARIES) set(${prefix}_FIND_QUIETLY TRUE) else() if(NOT WIN32) FIND_PACKAGE(PkgConfig) endif() if(PKG_CONFIG_FOUND) pkg_check_modules(${prefix} ${pkg_name}) #MESSAGE(STATUS " LDFLAGS ${${prefix}_LDFLAGS}" ) #MESSAGE(STATUS " CFLAGS ${${prefix}_CFLAGS}" ) #MESSAGE(STATUS " INCLUDEDIRS ${${prefix}_INCLUDE_DIRS}" ) set(${prefix}_DEFINITIONS ${prefix}_CFLAGS_OTHER ) else() MESSAGE(STATUS "Checking for module '${pkg_name}'") endif() #set(CMAKE_PREFIX_PATH ${${prefix}_PATH} ) find_path(${prefix}_INCLUDE_DIR NAMES ${header} PATHS ${${prefix}_INCLUDE_DIRS} ${${prefix}_INCLUDEDIR} ${${prefix}_INCLUDE_PATHS} ENV ${prefix}_INCLUDE ) find_library(${prefix}_LIBRARIES NAMES ${lib} PATHS ${${prefix}_LIBDIR} ${${prefix}_LIBRARY_DIRS} ${${prefix}_LIB_PATHS} ENV ${prefix}_PATH ) endif() include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(${prefix} DEFAULT_MSG ${prefix}_LIBRARIES ${prefix}_INCLUDE_DIR) mark_as_advanced(${prefix}_INCLUDE_DIR ${prefix}_LIBRARIES) endmacro() hydrogen-0.9.6-beta3/cmake/FindLadspa.cmake000066400000000000000000000030141211146647700204370ustar00rootroot00000000000000# # - Try to find a ladspa header and plugins # # Copyright (c) 2009, Jérémy Zurcher, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro(FIND_LADSPA prefix header lib) if(${prefix}_INCLUDE_DIR AND ${prefix}_LIBRARIES) set(${prefix}_FIND_QUIETLY TRUE) else() MESSAGE(STATUS "Checking for module 'LADSPA'") set(CMAKE_PREFIX_PATH ${${prefix}_PATH} ) find_path(${prefix}_INCLUDE_DIR NAMES ${header} PATHS ${${prefix}_INCLUDE_DIRS} ${${prefix}_INCLUDEDIR} ) find_program( LISTPLUGINS NAMES listplugins ) if( LISTPLUGINS ) execute_process( OUTPUT_FILE "${CMAKE_BINARY_DIR}/ladspa_listplugins" COMMAND ${LISTPLUGINS} ) file( STRINGS "${CMAKE_BINARY_DIR}/ladspa_listplugins" LADSPA_PLUGINS REGEX "ladspa/.*\\.so:" ) list( LENGTH LADSPA_PLUGINS PLUGINS_N ) if( PLUGINS_N GREATER 0 ) STRING(REGEX REPLACE ":" "" LADSPA_PLUGINS "${LADSPA_PLUGINS}") SET(${prefix}_LIBRARIES "${PLUGINS_N} plugins found" ) MESSAGE(STATUS " ${PLUGINS_N} plugins found.") endif( ) endif() endif() include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(${prefix} DEFAULT_MSG ${prefix}_LIBRARIES ${prefix}_INCLUDE_DIR) mark_as_advanced(${prefix}_INCLUDE_DIR ${prefix}_LIBRARIES) endmacro() hydrogen-0.9.6-beta3/cmake/StatusSupportOptions.cmake000066400000000000000000000033471211146647700226770ustar00rootroot00000000000000# # Copyright (c) 2009, Jérémy Zurcher, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro(MANDATORY_PKG pkg_name) set(WANT_${pkg_name} TRUE) set(${pkg_name}_FIND_REQUIRED TRUE) endmacro() string( ASCII 27 _escape) function(COLOR_MESSAGE TEXT) if(CMAKE_COLOR_MAKEFILE) MESSAGE(${TEXT}) else() string(REGEX REPLACE "${_escape}.[0123456789;]*m" "" __TEXT ${TEXT}) MESSAGE(${__TEXT}) endif() endfunction() macro(COMPUTE_PKGS_FLAGS prefix) if(${prefix}_NOT_NEEDED) if(${prefix}_FOUND) SET(${prefix}_STATUS "${_escape}[0;33m| available\${_escape}[0m but not needed ${${prefix}_VERSION} ( ${${prefix}_LIBRARIES} )") else() SET(${prefix}_STATUS "${_escape}[1;33m| not found\${_escape}[0m but not needed" ) endif() elseif(${prefix}_FOUND) if(NOT WANT_${prefix}) SET(${prefix}_STATUS "${_escape}[0;32m? available${_escape}[0m but not desired ${${prefix}_VERSION} ( ${${prefix}_LIBRARIES} )") SET(${prefix}_LIBRARIES "" ) SET(${prefix}_INCLUDE_DIR "" ) else() SET(${prefix}_STATUS "${_escape}[1;32m+ used${_escape}[0m ${${prefix}_VERSION} ( ${${prefix}_LIBRARIES} )") SET(H2CORE_HAVE_${prefix} TRUE) endif() else() SET(${prefix}_LIBRARIES "" ) SET(${prefix}_INCLUDE_DIR "" ) if(NOT WANT_${prefix}) SET(${prefix}_STATUS "${_escape}[0;31m- not found${_escape}[0m and not desired" ) else() SET(${prefix}_STATUS "${_escape}[1;31m-- not found${_escape}[0m but desired ..." ) endif() endif() endmacro() hydrogen-0.9.6-beta3/cmake/doxygen.cmake000066400000000000000000000056371211146647700201240ustar00rootroot00000000000000# - Run Doxygen # # Adds a doxygen target that runs doxygen to generate the html # and optionally the LaTeX API documentation. # The doxygen target is added to the doc target as dependency. # i.e.: the API documentation is built with: # make doc # # USAGE: GLOBAL INSTALL # # Install it with: # cmake ./ && sudo make install # Add the following to the CMakeLists.txt of your project: # include(UseDoxygen OPTIONAL) # Optionally copy Doxyfile.in in the directory of CMakeLists.txt and edit it. # # USAGE: INCLUDE IN PROJECT # # set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) # include(UseDoxygen) # Add the Doxyfile.in and UseDoxygen.cmake files to the projects source directory. # # # Variables you may define are: # DOXYFILE_OUTPUT_DIR - Path where the Doxygen output is stored. Defaults to "doc". # # DOXYFILE_LATEX_DIR - Directory where the Doxygen LaTeX output is stored. Defaults to "latex". # # DOXYFILE_HTML_DIR - Directory where the Doxygen html output is stored. Defaults to "html". # # # Copyright (c) 2009, 2010 Tobias Rautenkranz # # Redistribution and use is allowed according to the terms of the New # BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # macro(usedoxygen_set_default name value) if(NOT DEFINED "${name}") set("${name}" "${value}") endif() endmacro() find_package(Doxygen) if(DOXYGEN_FOUND) find_file(DOXYFILE_IN "Doxyfile.in" PATHS "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_ROOT}/Modules/" NO_DEFAULT_PATH) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(DOXYFILE_IN DEFAULT_MSG "DOXYFILE_IN") endif() if(DOXYGEN_FOUND AND DOXYFILE_IN_FOUND) add_custom_target(doxygen ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) usedoxygen_set_default(DOXYFILE_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doc") usedoxygen_set_default(DOXYFILE_HTML_DIR "html") set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_HTML_DIR}") set(DOXYFILE_LATEX "NO") set(DOXYFILE_PDFLATEX "NO") set(DOXYFILE_DOT "NO") if(ENABLE_LATEX) find_package(LATEX) if(LATEX_COMPILER AND MAKEINDEX_COMPILER) set(DOXYFILE_LATEX "YES") usedoxygen_set_default(DOXYFILE_LATEX_DIR "latex") set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}") if(PDFLATEX_COMPILER) set(DOXYFILE_PDFLATEX "YES") endif() if(DOXYGEN_DOT_EXECUTABLE) set(DOXYFILE_DOT "YES") endif() add_custom_command(TARGET doxygen POST_BUILD COMMAND ${CMAKE_MAKE_PROGRAM} WORKING_DIRECTORY "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}") endif() endif() configure_file(${DOXYFILE_IN} Doxyfile ESCAPE_QUOTES IMMEDIATE @ONLY) get_target_property(DOC_TARGET doc TYPE) if(NOT DOC_TARGET) add_custom_target(doc) endif() add_dependencies(doc doxygen) endif() hydrogen-0.9.6-beta3/cmake/rtclock/000077500000000000000000000000001211146647700170735ustar00rootroot00000000000000hydrogen-0.9.6-beta3/cmake/rtclock/CMakeLists.txt000066400000000000000000000002501211146647700216300ustar00rootroot00000000000000 CMAKE_MINIMUM_REQUIRED(VERSION 2.6) add_definitions() include_directories() link_directories() add_executable(rtclock rtclock.c) target_link_libraries(rtclock "rt" ) hydrogen-0.9.6-beta3/cmake/rtclock/rtclock.c000066400000000000000000000007701211146647700207040ustar00rootroot00000000000000#include #include #include int main( int argc, char** argv, char** env ) { uint64_t dt; struct timespec t0,t1; clock_gettime(CLOCK_MONOTONIC, &t0); sleep(1); clock_gettime(CLOCK_MONOTONIC, &t1); dt = ((t1.tv_sec * 1000000000) + t1.tv_nsec) - ((t0.tv_sec * 1000000000) + t0.tv_nsec); //fprintf(stdout,"delta is : %4d [ms] => %7d [us] => %10d [ns]\n",(int)(dt/1000000), (int)(dt/1000), (int)dt); return ( (int)(dt/1000000)>950 ) ? 0 : 1; } hydrogen-0.9.6-beta3/cmake/sscanf/000077500000000000000000000000001211146647700167075ustar00rootroot00000000000000hydrogen-0.9.6-beta3/cmake/sscanf/CMakeLists.txt000066400000000000000000000002411211146647700214440ustar00rootroot00000000000000 CMAKE_MINIMUM_REQUIRED(VERSION 2.6) add_definitions() include_directories() link_directories() add_executable(sscanf sscanf.c) target_link_libraries(sscanf ) hydrogen-0.9.6-beta3/cmake/sscanf/sscanf.c000066400000000000000000000005621211146647700203330ustar00rootroot00000000000000#include int main( int argc, char** argv, char** env ) { int v; int r = sscanf("0x00A","%x",&v); if(v!=10 || r!=1){ return 1; } r = sscanf("0xc9","%x",&v); if(v!=201 || r!=1){ return 2; } r = sscanf("0xF0","%x",&v); if(v!=240 || r!=1){ return 3; } r = sscanf("0xFF","%x",&v); if(v!=255 || r!=1){ return 4; } return 0; } hydrogen-0.9.6-beta3/cmake/uninstall.cmake.in000066400000000000000000000017261211146647700210600ustar00rootroot00000000000000 IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling $ENV{DESTDIR}${file}") IF(EXISTS "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove "$ENV{DESTDIR}${file}"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing "$ENV{DESTDIR}${file}"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSE(EXISTS "$ENV{DESTDIR}${file}") MESSAGE(STATUS "File "$ENV{DESTDIR}${file}" does not exist.") ENDIF(EXISTS "$ENV{DESTDIR}${file}") ENDFOREACH(file) hydrogen-0.9.6-beta3/data/000077500000000000000000000000001211146647700152635ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/DefaultSong.h2song000066400000000000000000000453531211146647700206320ustar00rootroot00000000000000 0.9.4-svn 120 0.73 0.5 Untitled Song Unknown Empty song. true pattern 0 0 0 0 GMkit Kick 1 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 kick_Dry_b.flac 0 1 1 0 1 GMkit Stick 0.69 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 stick_Woody.flac 0 1 1 0 2 GMkit Snare Jazz 1 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 sn_Jazz_c.flac 0 1 1 0 3 GMkit Hand Clap 0.88 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 clap_Dry_c.flac 0 1 1 0 4 GMkit Snare Rock 1 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 sn_Wet_b.flac 0 1 1 0 5 GMkit Tom Low 0.96 false 0.44 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 tom_Rock_lo.flac 0 1 1 0 6 GMkit Closed HH 0.89 false 1 0.78 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 hhc_Dry_a.flac 0 1 1 0 7 GMkit Tom Mid 1 false 0.8 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 tom_Rock_mid.flac 0 1 1 0 8 GMkit Pedal HH 0.89 false 1 0.78 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 hhp_Dry_a.flac 0 1 1 0 9 GMkit Tom Hi 1 false 1 0.42 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 tom_Rock_hi.flac 0 1 1 0 10 GMkit Open HH 0.8 false 1 0.84 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 hhc_Rock_b.flac 0 1 1 0 11 GMkit Cowbell 0.8 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 misc_Cowbell.flac 0 1 1 0 12 GMkit Ride Jazz 0.8 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 cym_Jazz.flac 0 1 1 0 13 GMkit Crash 0.69 false 1 0.88 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 cra_Rock_a.flac 0 1 1 0 14 GMkit Ride Rock 0.8 false 0.58 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 cym_Rock_b.flac 0 1 1 0 15 GMkit Crash Jazz 0.77 false 1 0.78 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 cra_Jazz.flac 0 1 1 0 Pattern 1 not_categorized 192 Pattern 2 not_categorized 192 Pattern 3 not_categorized 192 Pattern 4 not_categorized 192 Pattern 5 not_categorized 192 Pattern 6 not_categorized 192 Pattern 7 not_categorized 192 Pattern 8 not_categorized 192 Pattern 9 not_categorized 192 Pattern 10 not_categorized 192 Pattern 1 no plugin - false 0 no plugin - false 0 no plugin - false 0 no plugin - false 0 hydrogen-0.9.6-beta3/data/click.wav000066400000000000000000000126201211146647700170700ustar00rootroot00000000000000RIFFWAVEfmt DXvpsc  <!Ovplp data|FFR`?\V ~ezk97 iF Iiy$e^Zڜ4ٲu 6l Wc:.88;4&Sdw[se z *!'Kְ m +*k |3 v%<@P;YTpB%Jl5_% 6ϳΜ*?Fj>*D==8S%e9gW 9tGDiӽ߼NIR )JZXNF)0 %E$`#leJ!"Au9TxET.i'E`Gh[N? .Pf=kZY7bo"ߧ:~|!!jvЩ&%]4vYk{hQ.>:ZqkgJM"ܟ8ܬ+O"ڼ̞<+G:em_@Qmڙ_$kJeFnJ`=Cۇ H+<- tѭ9&-/V`k_iR-ph?66Z~n;mfUv+\Lڙf۠"/T( "ԝޔձ75nBbjmwaC>q:)"IgrgEM+-/ ͌@/)Sj2kV1Sp 4YZpSVHl- ,z#5ATyXJ=,=ɭې #r!].>())DQQL8cY-5F RMW9_$!MGMx`C 2?FhJe?(Q s5GgKp@(iڹHǓ8  ߡoոƄ$ 8C@v1 r$S9?DA1seu־hZոRxפòp1('9=5# 3O(Z*9'>+6"cո'I . (ǰ[> 0,z625n)sX,65)Fˁo!O|ҾIܦ, Gs,0B+ 1n-{,0[+ ԡ :ޜԼ# w)4) )@/! )( S5w _Y$sޯجOi $J!b /U !$!025TYcE  ?&1 f i!09dUF+!6"C.NZ7 kR\ލC[ tA K`$#v 0|JwE%S K ` }I8U -COg .l<sX \ px;ig=o P8": H5n@n k4d OQ29L T=X>  =+ 7P]Rq`bf |fOZ Xf_  z/9 = Q@ 9lE1_f:N7q- N*b jpz eMa  nf-  llpY!9_WrC  T & L$  !X3:$) C F~yRY ! vB$[f@fC& :  W~r}2$0 V , !* C.@V +Zxk$  Wzhk h5qNA F<  Q\V JzKM \" ,t/u n^|1^)h 17_q_eUO\wIalQSvHj8\!H#?+ZE>dN"ZUG+oCg/baS.:D#t~f^_5T*l2m&hDx5SFC@pR{TdL=fLv +DR{=>WV1NKyy%u7HeR?FrDYn[>WTF  o)N c:PZF >Y@Zym~L&#bn.[aRW M,m?r7uwZ9&Jn{0PHm$ a 2T>=3ZC||KA   q&?_ M:m,G8i/cZA|<AsbU*VgJbW7@-_k=B)? q*- ?2Q+Rvg-J%;-a5u|N* mm x zm7VFeX"~9"[ =;/zD7TLV9sA5RE^VZmJPx1NFgHNxau7,iu.iZo=H3eZm3sP AvN oq&?;oq Hxa1Pxa*~ .9*~"VuzgC.XszgA ..3XicL(7XgcJ" * ;RXL1;PVJ/   9EC3 "7CA1 "/5.  .1,  ""     hydrogen-0.9.6-beta3/data/demo_songs/000077500000000000000000000000001211146647700174205ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/demo_songs/GM_kit_Diddley.h2song000066400000000000000000004114061211146647700233600ustar00rootroot00000000000000 0.9.4-cvs 120 0.5 0.5 Diddley Emiliano Grilli Demo - Diddley true song 0.31 0.21 0.23 false 1 0.4 48 0 GMkit Kick 1 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 kick_Dry_b.flac 0 1 1 0 1 GMkit Stick 0.69 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 stick_Woody.flac 0 1 1 0 2 GMkit Snare Jazz 1 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 sn_Jazz_c.flac 0 1 1 0 3 GMkit Hand Clap 0.88 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 clap_Dry_c.flac 0 1 1 0 4 GMkit Snare Rock 1 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 sn_Wet_b.flac 0 1 1 0 5 GMkit Tom Low 0.96 false false 0.44 1 1 0 0 0 0 0 0 1 1000 0 -1 tom_Rock_lo.flac 0 1 1 0 6 GMkit Closed HH 0.89 false false 1 0.78 1 0 0 0 0 0 0 1 1000 0 -1 hhc_Dry_a.flac 0 1 1 0 7 GMkit Tom Mid 1 false false 0.8 1 1 0 0 0 0 0 0 1 1000 0 -1 tom_Rock_mid.flac 0 1 1 0 8 GMkit Pedal HH 0.89 false false 1 0.78 1 0 0 0 0 0 0 1 1000 0 -1 hhp_Dry_a.flac 0 1 1 0 9 GMkit Tom Hi 1 false false 1 0.42 1 0 0 0 0 0 0 1 1000 0 -1 tom_Rock_hi.flac 0 1 1 0 10 GMkit Open HH 0.8 false false 1 0.84 1 0 0 0 0 0 0 1 1000 0 -1 hhc_Rock_b.flac 0 1 1 0 11 GMkit Cowbell 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 misc_Cowbell.flac 0 1 1 0 12 GMkit Ride Jazz 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 cym_Jazz.flac 0 1 1 0 13 GMkit Crash 0.69 false false 1 0.88 1 0 0 0 0 0 0 1 1000 0 -1 cra_Rock_a.flac 0 1 1 0 14 GMkit Ride Rock 0.8 false false 0.58 1 1 0 0 0 0 0 0 1 1000 0 -1 cym_Rock_b.flac 0 1 1 0 15 GMkit Crash Jazz 0.77 false false 1 0.78 1 0 0 0 0 0 0 1 1000 0 -1 cra_Jazz.flac 0 1 1 0 16 GMkit 17 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 17 GMkit 18 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 18 GMkit 19 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 19 GMkit 20 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 20 GMkit 21 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 21 GMkit 22 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 22 GMkit 23 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 23 GMkit 24 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 24 GMkit 25 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 25 GMkit 26 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 26 GMkit 27 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 27 GMkit 28 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 28 GMkit 29 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 29 GMkit 30 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 30 GMkit 31 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 31 GMkit 32 0.8 false false 1 1 1 0 0 0 0 0 0 1 1000 0 -1 emptySample.flac 0 1 1 0 floor-tom 192 0 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 144 0.8 1 1 0 -1 0 0 0.71 1 1 0 -1 5 24 0.32 1 1 0 -1 5 48 0.53 1 1 0 -1 5 72 0.3 1 1 0 -1 5 96 0.83 1 1 0 -1 5 120 0.52 1 1 0 -1 5 144 0.63 1 1 0 -1 5 168 0.8 1 1 0 -1 5 48 0.8 1 1 0 -1 7 60 0.22 1 1 0 -1 7 84 0.5 1 1 0 -1 7 108 0.2 1 1 0 -1 7 24 0.26 1 1 0 -1 8 72 0.46 1 1 0 -1 8 120 0.3 1 1 0 -1 8 168 0.54 1 1 0 -1 8 0 0.8 1 1 0 -1 13 floor-tom-fill 192 0 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 144 0.8 1 1 0 -1 0 168 0.8 1 1 0 -1 0 180 0.8 1 1 0 -1 0 0 0.74 1 1 0 -1 5 24 0.8 1 1 0 -1 5 48 0.76 1 1 0 -1 5 72 0.3 1 1 0 -1 5 96 0.6 1 1 0 -1 5 120 0.52 1 1 0 -1 5 132 0.8 1 1 0 -1 5 159 0.8 1 1 0 -1 5 48 0.8 1 1 0 -1 7 60 0.22 1 1 0 -1 7 84 0.5 1 1 0 -1 7 108 0.2 1 1 0 -1 7 153 0.8 1 1 0 -1 7 24 0.26 1 1 0 -1 8 72 0.46 1 1 0 -1 8 120 0.3 1 1 0 -1 8 168 0.54 1 1 0 -1 8 144 0.8 1 1 0 -1 9 0 0.8 1 1 0 -1 13 diddley 192 0 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 144 0.8 1 1 0 -1 0 168 0.8 1 1 0 -1 4 0 0.8 1 1 0 -1 5 12 0.16 1 1 0 -1 5 36 0.28 1 1 0 -1 5 48 0.8 1 1 0 -1 5 72 0.8 1 1 0 -1 5 96 0.48 1 1 0 -1 5 144 0.8 1 1 0 -1 5 48 0.8 1 1 0 -1 7 120 0.76 1 1 0 -1 7 24 0.26 1 1 0 -1 8 72 0.46 1 1 0 -1 8 120 0.3 1 1 0 -1 8 168 0.54 1 1 0 -1 8 108 0.8 1 1 0 -1 9 0 0.8 1 1 0 -1 13 norm 192 0 0.8 1 1 0 -1 0 24 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 72 0.18 1 1 0 -1 4 84 0.62 1 1 0 -1 4 108 0.24 1 1 0 -1 4 144 0.8 1 1 0 -1 4 168 0.8 1 1 0 -1 5 0 0.8 1 1 0 -1 6 36 0.8 1 1 0 -1 6 48 0.8 1 1 0 -1 6 84 0.8 1 1 0 -1 6 96 0.8 1 1 0 -1 6 132 0.8 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.8 1 1 0 -1 6 156 0.8 1 1 0 -1 7 12 0.8 1 1 0 -1 8 72 0.46 1 1 0 -1 8 108 0.8 1 1 0 -1 8 168 0.54 1 1 0 -1 8 24 0.8 1 1 0 -1 10 120 0.8 1 1 0 -1 10 180 0.8 1 1 0 -1 10 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 14 24 0.8 1 1 0 -1 14 60 0.8 1 1 0 -1 14 84 0.8 1 1 0 -1 14 108 0.8 1 1 0 -1 14 144 0.8 1 1 0 -1 14 168 0.8 1 1 0 -1 14 norm-1 192 0 0.8 1 1 0 -1 0 24 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 72 0.18 1 1 0 -1 4 84 0.62 1 1 0 -1 4 108 0.24 1 1 0 -1 4 144 0.8 1 1 0 -1 4 168 0.8 1 1 0 -1 5 0 0.8 1 1 0 -1 6 36 0.8 1 1 0 -1 6 48 0.8 1 1 0 -1 6 84 0.8 1 1 0 -1 6 96 0.8 1 1 0 -1 6 132 0.8 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.8 1 1 0 -1 6 156 0.8 1 1 0 -1 7 12 0.8 1 1 0 -1 8 72 0.46 1 1 0 -1 8 108 0.8 1 1 0 -1 8 168 0.54 1 1 0 -1 8 24 0.8 1 1 0 -1 10 120 0.8 1 1 0 -1 10 180 0.8 1 1 0 -1 10 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 13 0 0.8 1 1 0 -1 14 24 0.8 1 1 0 -1 14 60 0.8 1 1 0 -1 14 84 0.8 1 1 0 -1 14 108 0.8 1 1 0 -1 14 144 0.8 1 1 0 -1 14 168 0.8 1 1 0 -1 14 norm-fill 192 0 0.8 1 1 0 -1 0 24 0.8 1 1 0 -1 0 60 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 168 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 4 48 0.8 1 1 0 -1 4 84 0.8 1 1 0 -1 4 108 0.8 1 1 0 -1 4 132 0.8 1 1 0 -1 4 168 0.8 1 1 0 -1 5 180 0.8 1 1 0 -1 5 0 0.8 1 1 0 -1 6 36 0.8 1 1 0 -1 6 48 0.8 1 1 0 -1 6 84 0.8 1 1 0 -1 6 96 0.8 1 1 0 -1 6 156 0.8 1 1 0 -1 7 12 0.8 1 1 0 -1 8 72 0.46 1 1 0 -1 8 138 0.8 1 1 0 -1 9 144 0.8 1 1 0 -1 9 24 0.8 1 1 0 -1 10 96 0.8 1 1 0 -1 10 120 0.8 1 1 0 -1 10 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 14 24 0.8 1 1 0 -1 14 60 0.8 1 1 0 -1 14 84 0.8 1 1 0 -1 14 96 0.8 1 1 0 -1 15 break 192 0 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 132 0.8 1 1 0 -1 0 156 0.8 1 1 0 -1 0 168 0.8 1 1 0 -1 0 96 0.5 1 1 0 -1 4 144 0.8 1 1 0 -1 4 168 0.5 1 1 0 -1 4 0 0.74 1 1 0 -1 5 156 0.8 1 1 0 -1 5 180 0.8 1 1 0 -1 5 108 0.8 1 1 0 -1 7 174 0.8 1 1 0 -1 7 120 0.8 1 1 0 -1 8 168 0.8 1 1 0 -1 8 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 108 0.8 1 1 0 -1 11 132 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 168 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 13 144 0.8 1 1 0 -1 14 168 0.8 1 1 0 -1 14 floor-tom floor-tom floor-tom floor-tom-fill diddley diddley diddley break norm-1 norm norm norm-fill norm-1 norm norm norm-fill diddley diddley diddley floor-tom-fill diddley diddley diddley floor-tom-fill floor-tom floor-tom floor-tom floor-tom-fill no plugin - false 0 no plugin - false 0 no plugin - false 0 no plugin - false 0 hydrogen-0.9.6-beta3/data/demo_songs/GM_kit_Jazzy.h2song000066400000000000000000001650541211146647700231160ustar00rootroot00000000000000 0.9.0 100 0.5 0.5 Jazzy Emiliano Grilli Jazzy... true song true 0.23 true 0.23 true 0.44 0 GMkit Kick 1 false 1 1 0 0 0 0 kick_Dry_b.flac 0 1 1 0 1 GMkit Stick 0.69 false 1 1 0 0 0 0 stick_Woody.flac 0 1 1 0 2 GMkit Snare Jazz 1 false 1 1 0 0 0 0 sn_Jazz_c.flac 0 1 1 0 3 GMkit Hand Clap 0.88 false 1 1 0 0 0 0 clap_Dry_c.flac 0 1 1 0 4 GMkit Snare Rock 1 false 1 1 0 0 0 0 sn_Wet_b.flac 0 1 1 0 5 GMkit Tom Low 0.96 false 0.44 1 0 0 0 0 tom_Rock_lo.flac 0 1 1 0 6 GMkit Closed HH 0.89 false 1 0.78 0 0 0 0 hhc_Dry_a.flac 0 1 1 0 7 GMkit Tom Mid 1 false 0.8 1 0 0 0 0 tom_Rock_mid.flac 0 1 1 0 8 GMkit Pedal HH 0.89 false 1 0.78 0 0 0 0 hhp_Dry_a.flac 0 1 1 0 9 GMkit Tom Hi 1 false 1 0.42 0 0 0 0 tom_Rock_hi.flac 0 1 1 0 10 GMkit Open HH 0.8 false 1 0.84 0 0 0 0 hhc_Rock_b.flac 0 1 1 0 11 GMkit Cowbell 0.8 false 1 1 0 0 0 0 misc_Cowbell.flac 0 1 1 0 12 GMkit Ride Jazz 0.8 false 1 1 0 0 0 0 cym_Jazz.flac 0 1 1 0 13 GMkit Crash 0.69 false 1 0.88 0 0 0 0 cra_Rock_a.flac 0 1 1 0 14 GMkit Ride Rock 0.8 false 0.58 1 0 0 0 0 cym_Rock_b.flac 0 1 1 0 15 GMkit Crash Jazz 0.77 false 1 0.78 0 0 0 0 cra_Jazz.flac 0 1 1 0 16 GMkit 17 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 17 GMkit 18 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 18 GMkit 19 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 19 GMkit 20 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 20 GMkit 21 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 21 GMkit 22 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 22 GMkit 23 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 23 GMkit 24 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 24 GMkit 25 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 25 GMkit 26 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 26 GMkit 27 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 27 GMkit 28 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 28 GMkit 29 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 29 GMkit 30 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 30 GMkit 31 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 31 GMkit 32 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 1 192 0 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 156 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 2 132 0.8 1 1 0 -1 2 24 0.8 1 1 0 -1 8 72 0.8 1 1 0 -1 8 120 0.8 1 1 0 -1 8 168 0.8 1 1 0 -1 8 0 0.8 1 1 0 -1 12 24 0.98 1 1 0 -1 12 36 0.42 1 1 0 -1 12 48 0.54 1 1 0 -1 12 72 0.68 1 1 0 -1 12 96 0.8 1 1 0 -1 12 108 0.5 1 1 0 -1 12 132 0.54 1 1 0 -1 12 144 0.8 1 1 0 -1 12 168 0.58 1 1 0 -1 12 180 0.8 1 1 0 -1 12 2 192 0 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 2 108 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 174 0.14 1 1 0 -1 2 180 0.8 1 1 0 -1 2 120 0.8 1 1 0 -1 5 156 0.8 1 1 0 -1 5 24 0.8 1 1 0 -1 8 72 0.8 1 1 0 -1 8 120 0.8 1 1 0 -1 8 168 0.8 1 1 0 -1 8 0 0.8 1 1 0 -1 12 24 0.38 1 1 0 -1 12 36 0.8 1 1 0 -1 12 48 0.32 1 1 0 -1 12 72 0.88 1 1 0 -1 12 96 0.8 1 1 0 -1 12 108 0.4 1 1 0 -1 12 120 0.88 1 1 0 -1 15 3 192 0 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 156 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 2 132 0.8 1 1 0 -1 2 24 0.8 1 1 0 -1 8 72 0.8 1 1 0 -1 8 120 0.8 1 1 0 -1 8 168 0.8 1 1 0 -1 8 0 0.8 1 1 0 -1 12 24 0.98 1 1 0 -1 12 36 0.42 1 1 0 -1 12 48 0.54 1 1 0 -1 12 72 0.68 1 1 0 -1 12 96 0.8 1 1 0 -1 12 108 0.5 1 1 0 -1 12 132 0.54 1 1 0 -1 12 144 0.8 1 1 0 -1 12 168 0.58 1 1 0 -1 12 180 0.8 1 1 0 -1 12 0 0.8 1 1 0 -1 13 1 1 1 2 3 1 1 2 no plugin - false 0 no plugin - false 0 no plugin - false 0 no plugin - false 0 hydrogen-0.9.6-beta3/data/demo_songs/GM_kit_demo1.h2song000066400000000000000000004547311211146647700230170ustar00rootroot00000000000000 0.9.0 115 0.5 0.5 GM kit demo #1 Artemio <artemio@artemio.net> Demo patterns for GM kit false song true 0.14 true 0.26 false 0 0 GMkit Kick 1 false 1 1 0 0 0 0 kick_Dry_b.flac 0 1 1 0 1 GMkit Stick 0.69 false 1 1 0 0 0 0 stick_Woody.flac 0 1 1 0 2 GMkit Snare Jazz 1 false 1 1 0 0 0 0 sn_Jazz_c.flac 0 1 1 0 3 GMkit Hand Clap 0.88 false 1 1 0 0 0 0 clap_Dry_c.flac 0 1 1 0 4 GMkit Snare Rock 1 false 1 1 0 0 0 0 sn_Wet_b.flac 0 1 1 0 5 GMkit Tom Low 0.96 false 0.44 1 0 0 0 0 tom_Rock_lo.flac 0 1 1 0 6 GMkit Closed HH 0.89 false 1 0.78 0 0 0 0 hhc_Dry_a.flac 0 1 1 0 7 GMkit Tom Mid 1 false 0.8 1 0 0 0 0 tom_Rock_mid.flac 0 1 1 0 8 GMkit Pedal HH 0.89 false 1 0.78 0 0 0 0 hhp_Dry_a.flac 0 1 1 0 9 GMkit Tom Hi 1 false 1 0.42 0 0 0 0 tom_Rock_hi.flac 0 1 1 0 10 GMkit Open HH 0.8 false 1 0.84 0 0 0 0 hhc_Rock_b.flac 0 1 1 0 11 GMkit Cowbell 0.8 false 1 1 0 0 0 0 misc_Cowbell.flac 0 1 1 0 12 GMkit Ride Jazz 0.8 false 1 1 0 0 0 0 cym_Jazz.flac 0 1 1 0 13 GMkit Crash 0.69 false 1 0.88 0 0 0 0 cra_Rock_a.flac 0 1 1 0 14 GMkit Ride Rock 0.8 false 0.58 1 0 0 0 0 cym_Rock_b.flac 0 1 1 0 15 GMkit Crash Jazz 0.77 false 1 0.78 0 0 0 0 cra_Jazz.flac 0 1 1 0 16 GMkit 17 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 17 GMkit 18 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 18 GMkit 19 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 19 GMkit 20 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 20 GMkit 21 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 21 GMkit 22 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 22 GMkit 23 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 23 GMkit 24 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 24 GMkit 25 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 25 GMkit 26 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 26 GMkit 27 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 27 GMkit 28 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 28 GMkit 29 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 29 GMkit 30 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 30 GMkit 31 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 31 GMkit 32 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 main 1-1 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 1 132 0.8 1 1 0 -1 1 0 0.36 1 1 0 -1 6 24 0.16 1 1 0 -1 6 36 0.42 1 1 0 -1 6 48 0.22 1 1 0 -1 6 60 0.44 1 1 0 -1 6 72 0.22 1 1 0 -1 6 84 0.4 1 1 0 -1 6 108 0.42 1 1 0 -1 6 120 0.34 1 1 0 -1 6 156 0.32 1 1 0 -1 6 168 0.24 1 1 0 -1 6 180 0.56 1 1 0 -1 6 main 1-2 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 1 144 0.7 1 1 0 -1 2 180 0.2 1 1 0 -1 2 168 0.8 1 1 0 -1 5 0 0.36 1 1 0 -1 6 24 0.16 1 1 0 -1 6 36 0.42 1 1 0 -1 6 48 0.22 1 1 0 -1 6 60 0.44 1 1 0 -1 6 72 0.22 1 1 0 -1 6 84 0.4 1 1 0 -1 6 108 0.42 1 1 0 -1 6 156 0.8 1 1 0 -1 7 132 0.8 1 1 0 -1 9 main 2-1 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.24 1 1 0 -1 6 24 0.28 1 1 0 -1 6 36 0.4 1 1 0 -1 6 48 0.22 1 1 0 -1 6 72 0.22 1 1 0 -1 6 96 0.3 1 1 0 -1 6 120 0.08 1 1 0 -1 6 132 0.36 1 1 0 -1 6 144 0.6 1 1 0 -1 6 168 0.24 1 1 0 -1 6 180 0.56 1 1 0 -1 6 24 0.38 1 1 0 -1 12 72 0.36 1 1 0 -1 12 120 0.4 1 1 0 -1 12 168 0.68 1 1 0 -1 12 0 0.8 1 1 0 -1 13 main 2-2 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 108 0.26 1 1 0 -1 2 144 0.8 1 1 0 -1 2 180 0.5 1 1 0 -1 2 0 0.24 1 1 0 -1 6 24 0.28 1 1 0 -1 6 36 0.4 1 1 0 -1 6 48 0.22 1 1 0 -1 6 72 0.22 1 1 0 -1 6 96 0.3 1 1 0 -1 6 120 0.08 1 1 0 -1 6 132 0.36 1 1 0 -1 6 144 0.6 1 1 0 -1 6 168 0.24 1 1 0 -1 6 180 0.56 1 1 0 -1 6 24 0.38 1 1 0 -1 12 72 0.36 1 1 0 -1 12 120 0.4 1 1 0 -1 12 168 0.68 1 1 0 -1 12 main 2-3 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 108 0.26 1 1 0 -1 2 144 0.8 1 1 0 -1 2 168 0.18 1 1 0 -1 2 180 0.5 1 1 0 -1 2 45 0.8 1 1 0 -1 3 141 0.8 1 1 0 -1 3 0 0.24 1 1 0 -1 6 24 0.28 1 1 0 -1 6 36 0.4 1 1 0 -1 6 48 0.22 1 1 0 -1 6 72 0.22 1 1 0 -1 6 96 0.3 1 1 0 -1 6 120 0.08 1 1 0 -1 6 132 0.36 1 1 0 -1 6 144 0.6 1 1 0 -1 6 168 0.24 1 1 0 -1 6 180 0.56 1 1 0 -1 6 24 0.38 1 1 0 -1 12 72 0.36 1 1 0 -1 12 120 0.4 1 1 0 -1 12 168 0.68 1 1 0 -1 12 main 2-4 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 156 0.1 1 1 0 -1 0 48 0.8 1 1 0 -1 2 72 0.46 1 1 0 -1 2 108 0.26 1 1 0 -1 2 144 0.8 1 1 0 -1 2 168 0.1 1 1 0 -1 2 180 0.4 1 1 0 -1 2 45 0.8 1 1 0 -1 3 141 0.8 1 1 0 -1 3 0 0.24 1 1 0 -1 6 24 0.28 1 1 0 -1 6 36 0.4 1 1 0 -1 6 48 0.22 1 1 0 -1 6 72 0.22 1 1 0 -1 6 96 0.3 1 1 0 -1 6 120 0.08 1 1 0 -1 6 132 0.36 1 1 0 -1 6 144 0.6 1 1 0 -1 6 156 0.1 1 1 0 -1 6 24 0.38 1 1 0 -1 12 72 0.36 1 1 0 -1 12 120 0.24 1 1 0 -1 12 main 3-1 192 0 0.8 1 1 0 -1 0 72 0.42 1 1 0 -1 0 96 0.8 1 1 0 -1 0 180 0.24 1 1 0 -1 0 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 0 0.14 1 1 0 -1 8 24 0.34 1 1 0 -1 8 48 0.24 1 1 0 -1 8 72 0.26 1 1 0 -1 8 96 0.32 1 1 0 -1 8 120 0.46 1 1 0 -1 8 144 0.28 1 1 0 -1 8 168 0.26 1 1 0 -1 8 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.66 1 1 0 -1 13 0 0.52 1 1 0 -1 14 48 0.8 1 1 0 -1 14 72 0.18 1 1 0 -1 14 96 0.8 1 1 0 -1 14 144 0.8 1 1 0 -1 14 168 0.2 1 1 0 -1 14 180 0.34 1 1 0 -1 14 main 3-2 192 0 0.8 1 1 0 -1 0 24 0.56 1 1 0 -1 0 60 0.56 1 1 0 -1 0 96 0.8 1 1 0 -1 0 180 0.24 1 1 0 -1 0 48 0.8 1 1 0 -1 4 108 0.36 1 1 0 -1 4 144 0.8 1 1 0 -1 4 180 0.14 1 1 0 -1 4 186 0.34 1 1 0 -1 4 0 0.14 1 1 0 -1 8 24 0.34 1 1 0 -1 8 48 0.24 1 1 0 -1 8 72 0.26 1 1 0 -1 8 96 0.32 1 1 0 -1 8 120 0.46 1 1 0 -1 8 144 0.28 1 1 0 -1 8 168 0.26 1 1 0 -1 8 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 14 48 0.8 1 1 0 -1 14 72 0.18 1 1 0 -1 14 96 0.8 1 1 0 -1 14 144 0.8 1 1 0 -1 14 168 0.2 1 1 0 -1 14 180 0.34 1 1 0 -1 14 main 3-3 192 0 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 0 72 0.42 1 1 0 -1 0 96 0.8 1 1 0 -1 0 180 0.24 1 1 0 -1 0 12 0.22 1 1 0 -1 4 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 0 0.14 1 1 0 -1 8 24 0.34 1 1 0 -1 8 72 0.26 1 1 0 -1 8 96 0.32 1 1 0 -1 8 120 0.46 1 1 0 -1 8 168 0.26 1 1 0 -1 8 48 0.8 1 1 0 -1 10 144 0.8 1 1 0 -1 10 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 14 48 0.8 1 1 0 -1 14 72 0.18 1 1 0 -1 14 96 0.8 1 1 0 -1 14 144 0.8 1 1 0 -1 14 168 0.2 1 1 0 -1 14 180 0.34 1 1 0 -1 14 main 3-4 192 0 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 0 72 0.42 1 1 0 -1 0 96 0.8 1 1 0 -1 0 12 0.22 1 1 0 -1 4 48 0.8 1 1 0 -1 4 84 0.18 1 1 0 -1 4 108 0.24 1 1 0 -1 4 120 0.52 1 1 0 -1 4 144 0.8 1 1 0 -1 4 180 0.12 1 1 0 -1 4 186 0.36 1 1 0 -1 4 168 0.8 1 1 0 -1 5 156 0.8 1 1 0 -1 7 0 0.14 1 1 0 -1 8 24 0.34 1 1 0 -1 8 72 0.26 1 1 0 -1 8 96 0.16 1 1 0 -1 8 132 0.8 1 1 0 -1 9 48 0.8 1 1 0 -1 10 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 14 48 0.32 1 1 0 -1 14 end 192 0 0.8 1 1 0 -1 15 main 1-1 main 1-2 main 2-1 main 2-2 main 2-3 main 2-4 main 3-1 main 3-2 main 3-3 main 3-4 end no plugin - false 0 no plugin - false 0 no plugin - false 0 no plugin - false 0 hydrogen-0.9.6-beta3/data/demo_songs/GM_kit_demo2.h2song000066400000000000000000007552551211146647700230250ustar00rootroot00000000000000 0.9.0 110 0.78 0.5 GM kit demo #2 Artemio <artemio@artemio.net> Demo patterns for GM kit false song true 0.19 true 0.12 true 0.13 0 GMkit Kick 1 false 1 1 0 0 0 0 kick_Dry_b.flac 0 1 1 0 1 GMkit Stick 0.69 false 1 1 0 0 0 0 stick_Woody.flac 0 1 1 0 2 GMkit Snare Jazz 1 false 1 1 0 0 0 0 sn_Jazz_c.flac 0 1 1 0 3 GMkit Hand Clap 0.88 false 1 1 0 0 0 0 clap_Dry_c.flac 0 1 1 0 4 GMkit Snare Rock 1 false 1 1 0 0 0 0 sn_Wet_b.flac 0 1 1 0 5 GMkit Tom Low 0.96 false 0.44 1 0 0 0 0 tom_Rock_lo.flac 0 1 1 0 6 GMkit Closed HH 0.89 false 1 0.78 0 0 0 0 hhc_Dry_a.flac 0 1 1 0 7 GMkit Tom Mid 1 false 0.8 1 0 0 0 0 tom_Rock_mid.flac 0 1 1 0 8 GMkit Pedal HH 0.89 false 1 0.78 0 0 0 0 hhp_Dry_a.flac 0 1 1 0 9 GMkit Tom Hi 1 false 1 0.42 0 0 0 0 tom_Rock_hi.flac 0 1 1 0 10 GMkit Open HH 0.8 false 1 0.84 0 0 0 0 hhc_Rock_b.flac 0 1 1 0 11 GMkit Cowbell 0.8 false 1 1 0 0 0 0 misc_Cowbell.flac 0 1 1 0 12 GMkit Ride Jazz 0.8 false 1 1 0 0 0 0 cym_Jazz.flac 0 1 1 0 13 GMkit Crash 0.69 false 1 0.88 0 0 0 0 cra_Rock_a.flac 0 1 1 0 14 GMkit Ride Rock 0.8 false 0.58 1 0 0 0 0 cym_Rock_b.flac 0 1 1 0 15 GMkit Crash Jazz 0.77 false 1 0.78 0 0 0 0 cra_Jazz.flac 0 1 1 0 16 GMkit 17 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 17 GMkit 18 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 18 GMkit 19 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 19 GMkit 20 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 20 GMkit 21 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 21 GMkit 22 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 22 GMkit 23 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 23 GMkit 24 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 24 GMkit 25 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 25 GMkit 26 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 26 GMkit 27 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 27 GMkit 28 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 28 GMkit 29 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 29 GMkit 30 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 30 GMkit 31 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 31 GMkit 32 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 intro 192 96 0.22 1 1 0 -1 0 132 0.38 1 1 0 -1 0 108 0.22 1 1 0 -1 4 120 0.48 1 1 0 -1 4 144 0.4 1 1 0 -1 4 168 0.1 1 1 0 -1 4 180 0.42 1 1 0 -1 4 156 0.2 1 1 0 -1 7 main 1-0 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 108 0.3 1 1 0 -1 0 120 0.56 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 0 0.26 1 1 0 -1 13 main 1-2 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 108 0.3 1 1 0 -1 0 120 0.56 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 180 0.3 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 main 1-1 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 108 0.3 1 1 0 -1 0 120 0.56 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 main 1-3 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 120 0.56 1 1 0 -1 0 48 0.8 1 1 0 -1 4 108 0.22 1 1 0 -1 4 144 0.8 1 1 0 -1 4 168 0.06 1 1 0 -1 4 174 0.16 1 1 0 -1 4 180 0.42 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 main 2-0 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 108 0.3 1 1 0 -1 0 120 0.56 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 24 0.8 1 1 0 -1 14 72 0.8 1 1 0 -1 14 120 0.8 1 1 0 -1 14 132 0.34 1 1 0 -1 14 168 0.8 1 1 0 -1 14 main 2-1 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 108 0.3 1 1 0 -1 0 120 0.56 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 180 0.18 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 24 0.8 1 1 0 -1 14 72 0.8 1 1 0 -1 14 120 0.8 1 1 0 -1 14 132 0.34 1 1 0 -1 14 168 0.8 1 1 0 -1 14 main 2-2 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 120 0.56 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 108 0.24 1 1 0 -1 4 144 0.8 1 1 0 -1 4 180 0.18 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 24 0.8 1 1 0 -1 14 72 0.8 1 1 0 -1 14 120 0.8 1 1 0 -1 14 132 0.34 1 1 0 -1 14 168 0.8 1 1 0 -1 14 main 2-3 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 108 0.3 1 1 0 -1 0 120 0.56 1 1 0 -1 0 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 156 0.22 1 1 0 -1 4 180 0.48 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 168 0.8 1 1 0 -1 7 24 0.8 1 1 0 -1 14 72 0.8 1 1 0 -1 14 120 0.8 1 1 0 -1 14 132 0.34 1 1 0 -1 14 main 3-0 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 108 0.3 1 1 0 -1 0 120 0.56 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.54 1 1 0 -1 15 main 3-3 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 108 0.3 1 1 0 -1 0 120 0.56 1 1 0 -1 0 132 0.32 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 180 0.4 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 main 3-1 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 132 0.8 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 108 0.24 1 1 0 -1 4 144 0.8 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 main 3-2 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 108 0.3 1 1 0 -1 0 120 0.56 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 main 3-5 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 108 0.3 1 1 0 -1 0 120 0.56 1 1 0 -1 0 132 0.32 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 144 0.8 1 1 0 -1 4 180 0.4 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 main 3-4 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 120 0.56 1 1 0 -1 0 132 0.32 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 96 0.34 1 1 0 -1 4 108 0.3 1 1 0 -1 4 144 0.8 1 1 0 -1 4 156 0.32 1 1 0 -1 4 180 0.4 1 1 0 -1 4 0 0.34 1 1 0 -1 6 24 0.62 1 1 0 -1 6 48 0.38 1 1 0 -1 6 72 0.6 1 1 0 -1 6 84 0.26 1 1 0 -1 6 96 0.32 1 1 0 -1 6 108 0.26 1 1 0 -1 6 120 0.46 1 1 0 -1 6 144 0.36 1 1 0 -1 6 168 0.48 1 1 0 -1 6 180 0.24 1 1 0 -1 6 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 main 4-1 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 96 0.34 1 1 0 -1 0 120 0.28 1 1 0 -1 0 132 0.54 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 108 0.36 1 1 0 -1 4 144 0.8 1 1 0 -1 4 48 0.8 1 1 0 -1 10 144 0.8 1 1 0 -1 10 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 12 24 0.8 1 1 0 -1 12 72 0.8 1 1 0 -1 12 96 0.8 1 1 0 -1 12 120 0.8 1 1 0 -1 12 168 0.8 1 1 0 -1 12 0 0.42 1 1 0 -1 15 main 4-2 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 96 0.34 1 1 0 -1 0 120 0.28 1 1 0 -1 0 132 0.54 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 108 0.36 1 1 0 -1 4 144 0.8 1 1 0 -1 4 180 0.28 1 1 0 -1 4 48 0.8 1 1 0 -1 10 144 0.8 1 1 0 -1 10 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 12 24 0.8 1 1 0 -1 12 72 0.8 1 1 0 -1 12 96 0.8 1 1 0 -1 12 120 0.8 1 1 0 -1 12 168 0.8 1 1 0 -1 12 main 4-3 192 0 0.8 1 1 0 -1 0 36 0.3 1 1 0 -1 0 84 0.62 1 1 0 -1 0 120 0.28 1 1 0 -1 0 132 0.54 1 1 0 -1 0 168 0.8 1 1 0 -1 0 12 0.26 1 1 0 -1 4 48 0.8 1 1 0 -1 4 108 0.36 1 1 0 -1 4 144 0.8 1 1 0 -1 4 180 0.28 1 1 0 -1 4 48 0.8 1 1 0 -1 10 144 0.8 1 1 0 -1 10 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 12 24 0.8 1 1 0 -1 12 72 0.8 1 1 0 -1 12 96 0.8 1 1 0 -1 12 120 0.8 1 1 0 -1 12 168 0.8 1 1 0 -1 12 main 4-4 192 0 0.8 1 1 0 -1 0 84 0.62 1 1 0 -1 0 132 0.54 1 1 0 -1 0 168 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 4 96 0.8 1 1 0 -1 4 108 0.36 1 1 0 -1 4 132 0.1 1 1 0 -1 4 138 0.14 1 1 0 -1 4 144 0.8 1 1 0 -1 4 156 0.8 1 1 0 -1 4 180 0.28 1 1 0 -1 4 120 0.8 1 1 0 -1 5 168 0.8 1 1 0 -1 9 48 0.8 1 1 0 -1 10 144 0.8 1 1 0 -1 10 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 12 24 0.8 1 1 0 -1 12 72 0.8 1 1 0 -1 12 end 192 0 0.66 1 1 0 -1 13 intro main 1-0 main 1-2 main 1-1 main 1-3 main 2-0 main 2-1 main 2-2 main 2-3 main 3-0 main 3-3 main 3-1 main 3-5 main 4-1 main 4-2 main 4-3 main 4-4 end no plugin - false 0 no plugin - false 0 no plugin - false 0 no plugin - false 0 hydrogen-0.9.6-beta3/data/demo_songs/GM_kit_demo3.h2song000066400000000000000000005367571211146647700230320ustar00rootroot00000000000000 0.9.0 115 0.64 0.5 GM kit demo #3 Artemio <artemio@artemio.net> Demo patterns for GM kit false song true 0.19 true 0.12 true 0.25 0 GMkit Kick 1 false 1 1 0 0 0 0 kick_Dry_b.flac 0 1 1 0 1 GMkit Stick 0.69 false 1 1 0 0 0 0 stick_Woody.flac 0 1 1 0 2 GMkit Snare Jazz 1 false 1 1 0 0 0 0 sn_Jazz_c.flac 0 1 1 0 3 GMkit Hand Clap 0.88 false 1 1 0 0 0 0 clap_Dry_c.flac 0 1 1 0 4 GMkit Snare Rock 1 false 1 1 0 0 0 0 sn_Wet_b.flac 0 1 1 0 5 GMkit Tom Low 0.96 false 0.44 1 0 0 0 0 tom_Rock_lo.flac 0 1 1 0 6 GMkit Closed HH 0.89 false 1 0.78 0 0 0 0 hhc_Dry_a.flac 0 1 1 0 7 GMkit Tom Mid 1 false 0.8 1 0 0 0 0 tom_Rock_mid.flac 0 1 1 0 8 GMkit Pedal HH 0.89 false 1 0.78 0 0 0 0 hhp_Dry_a.flac 0 1 1 0 9 GMkit Tom Hi 1 false 1 0.42 0 0 0 0 tom_Rock_hi.flac 0 1 1 0 10 GMkit Open HH 0.8 false 1 0.84 0 0 0 0 hhc_Rock_b.flac 0 1 1 0 11 GMkit Cowbell 0.8 false 1 1 0 0 0 0 misc_Cowbell.flac 0 1 1 0 12 GMkit Ride Jazz 0.8 false 1 1 0 0 0 0 cym_Jazz.flac 0 1 1 0 13 GMkit Crash 0.69 false 1 0.88 0 0 0 0 cra_Rock_a.flac 0 1 1 0 14 GMkit Ride Rock 0.8 false 0.58 1 0 0 0 0 cym_Rock_b.flac 0 1 1 0 15 GMkit Crash Jazz 0.77 false 1 0.78 0 0 0 0 cra_Jazz.flac 0 1 1 0 16 GMkit 17 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 17 GMkit 18 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 18 GMkit 19 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 19 GMkit 20 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 20 GMkit 21 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 21 GMkit 22 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 22 GMkit 23 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 23 GMkit 24 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 24 GMkit 25 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 25 GMkit 26 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 26 GMkit 27 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 27 GMkit 28 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 28 GMkit 29 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 29 GMkit 30 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 30 GMkit 31 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 31 GMkit 32 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 main 1-1 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 45 0.36 1 1 0 -1 3 141 0.56 1 1 0 -1 3 12 0.28 1 1 0 -1 6 24 0.3 1 1 0 -1 6 60 0.38 1 1 0 -1 6 84 0.12 1 1 0 -1 6 108 0.28 1 1 0 -1 6 156 0.36 1 1 0 -1 6 180 0.24 1 1 0 -1 6 168 0.32 1 1 0 -1 8 main 1-2 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 45 0.36 1 1 0 -1 3 141 0.56 1 1 0 -1 3 180 0.2 1 1 0 -1 3 12 0.28 1 1 0 -1 6 24 0.3 1 1 0 -1 6 60 0.38 1 1 0 -1 6 84 0.12 1 1 0 -1 6 108 0.28 1 1 0 -1 6 156 0.36 1 1 0 -1 6 180 0.24 1 1 0 -1 6 168 0.32 1 1 0 -1 8 main 1-3 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 168 0.36 1 1 0 -1 2 45 0.36 1 1 0 -1 3 141 0.56 1 1 0 -1 3 12 0.28 1 1 0 -1 6 24 0.3 1 1 0 -1 6 60 0.38 1 1 0 -1 6 84 0.12 1 1 0 -1 6 108 0.28 1 1 0 -1 6 156 0.36 1 1 0 -1 6 180 0.24 1 1 0 -1 6 168 0.32 1 1 0 -1 8 main 1-4 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 168 0.42 1 1 0 -1 0 12 0.22 1 1 0 -1 2 36 0.48 1 1 0 -1 2 96 0.56 1 1 0 -1 2 132 0.12 1 1 0 -1 2 138 0.24 1 1 0 -1 2 144 0.8 1 1 0 -1 2 156 0.22 1 1 0 -1 2 180 0.14 1 1 0 -1 2 45 0.36 1 1 0 -1 3 141 0.56 1 1 0 -1 3 12 0.28 1 1 0 -1 6 24 0.3 1 1 0 -1 6 60 0.38 1 1 0 -1 6 84 0.12 1 1 0 -1 6 108 0.28 1 1 0 -1 6 132 0.36 1 1 0 -1 6 156 0.36 1 1 0 -1 6 180 0.24 1 1 0 -1 6 120 0.38 1 1 0 -1 8 168 0.32 1 1 0 -1 8 96 0.32 1 1 0 -1 15 144 0.32 1 1 0 -1 15 main 4-1 192 0 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 45 0.36 1 1 0 -1 3 141 0.56 1 1 0 -1 3 12 0.28 1 1 0 -1 6 24 0.3 1 1 0 -1 6 60 0.38 1 1 0 -1 6 84 0.12 1 1 0 -1 6 108 0.28 1 1 0 -1 6 156 0.36 1 1 0 -1 6 180 0.24 1 1 0 -1 6 168 0.32 1 1 0 -1 8 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 12 24 0.8 1 1 0 -1 12 48 0.8 1 1 0 -1 12 72 0.8 1 1 0 -1 12 96 0.8 1 1 0 -1 12 120 0.8 1 1 0 -1 12 144 0.8 1 1 0 -1 12 168 0.8 1 1 0 -1 12 0 0.8 1 1 0 -1 13 0 0.8 1 1 0 -1 14 12 0.8 1 1 0 -1 14 36 0.8 1 1 0 -1 14 72 0.8 1 1 0 -1 14 108 0.8 1 1 0 -1 14 132 0.8 1 1 0 -1 14 168 0.8 1 1 0 -1 14 main 4-2 192 0 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 180 0.4 1 1 0 -1 2 45 0.36 1 1 0 -1 3 141 0.56 1 1 0 -1 3 12 0.28 1 1 0 -1 6 24 0.3 1 1 0 -1 6 60 0.38 1 1 0 -1 6 84 0.12 1 1 0 -1 6 108 0.28 1 1 0 -1 6 156 0.36 1 1 0 -1 6 180 0.24 1 1 0 -1 6 168 0.32 1 1 0 -1 8 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 12 24 0.8 1 1 0 -1 12 48 0.8 1 1 0 -1 12 72 0.8 1 1 0 -1 12 96 0.8 1 1 0 -1 12 120 0.8 1 1 0 -1 12 144 0.8 1 1 0 -1 12 168 0.8 1 1 0 -1 12 0 0.8 1 1 0 -1 14 12 0.8 1 1 0 -1 14 36 0.8 1 1 0 -1 14 72 0.8 1 1 0 -1 14 108 0.8 1 1 0 -1 14 132 0.8 1 1 0 -1 14 168 0.8 1 1 0 -1 14 main 4-3 192 0 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 108 0.24 1 1 0 -1 2 144 0.8 1 1 0 -1 2 45 0.36 1 1 0 -1 3 141 0.56 1 1 0 -1 3 12 0.28 1 1 0 -1 6 24 0.3 1 1 0 -1 6 60 0.38 1 1 0 -1 6 84 0.12 1 1 0 -1 6 108 0.28 1 1 0 -1 6 156 0.36 1 1 0 -1 6 180 0.24 1 1 0 -1 6 168 0.32 1 1 0 -1 8 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 12 24 0.8 1 1 0 -1 12 48 0.8 1 1 0 -1 12 72 0.8 1 1 0 -1 12 96 0.8 1 1 0 -1 12 120 0.8 1 1 0 -1 12 144 0.8 1 1 0 -1 12 168 0.8 1 1 0 -1 12 0 0.8 1 1 0 -1 14 12 0.8 1 1 0 -1 14 36 0.8 1 1 0 -1 14 72 0.8 1 1 0 -1 14 108 0.8 1 1 0 -1 14 132 0.8 1 1 0 -1 14 168 0.8 1 1 0 -1 14 main 4-4 192 0 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 132 0.26 1 1 0 -1 0 48 0.8 1 1 0 -1 2 96 0.8 1 1 0 -1 2 108 0.38 1 1 0 -1 2 144 0.8 1 1 0 -1 2 156 0.28 1 1 0 -1 2 180 0.52 1 1 0 -1 2 45 0.36 1 1 0 -1 3 120 0.8 1 1 0 -1 5 168 0.8 1 1 0 -1 5 12 0.28 1 1 0 -1 6 24 0.3 1 1 0 -1 6 60 0.38 1 1 0 -1 6 84 0.12 1 1 0 -1 6 108 0.28 1 1 0 -1 6 156 0.36 1 1 0 -1 6 180 0.24 1 1 0 -1 6 108 0.8 1 1 0 -1 7 156 0.8 1 1 0 -1 7 96 0.8 1 1 0 -1 9 144 0.8 1 1 0 -1 9 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 12 24 0.8 1 1 0 -1 12 48 0.8 1 1 0 -1 12 72 0.8 1 1 0 -1 12 0 0.8 1 1 0 -1 14 12 0.8 1 1 0 -1 14 36 0.8 1 1 0 -1 14 72 0.8 1 1 0 -1 14 96 0.8 1 1 0 -1 15 144 0.8 1 1 0 -1 15 main 4-5 192 0 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 132 0.26 1 1 0 -1 0 48 0.8 1 1 0 -1 2 96 0.8 1 1 0 -1 2 108 0.38 1 1 0 -1 2 144 0.8 1 1 0 -1 2 156 0.28 1 1 0 -1 2 180 0.52 1 1 0 -1 2 45 0.36 1 1 0 -1 3 120 0.8 1 1 0 -1 5 168 0.8 1 1 0 -1 5 12 0.28 1 1 0 -1 6 24 0.3 1 1 0 -1 6 60 0.38 1 1 0 -1 6 84 0.12 1 1 0 -1 6 108 0.28 1 1 0 -1 6 156 0.36 1 1 0 -1 6 180 0.24 1 1 0 -1 6 108 0.8 1 1 0 -1 7 156 0.8 1 1 0 -1 7 96 0.8 1 1 0 -1 9 144 0.8 1 1 0 -1 9 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 96 0.8 1 1 0 -1 11 144 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 12 24 0.8 1 1 0 -1 12 48 0.8 1 1 0 -1 12 72 0.8 1 1 0 -1 12 0 0.8 1 1 0 -1 14 12 0.8 1 1 0 -1 14 36 0.8 1 1 0 -1 14 72 0.8 1 1 0 -1 14 main 4-6 192 0 0.8 1 1 0 -1 0 36 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 132 0.26 1 1 0 -1 0 48 0.8 1 1 0 -1 2 96 0.8 1 1 0 -1 2 108 0.38 1 1 0 -1 2 144 0.8 1 1 0 -1 2 156 0.28 1 1 0 -1 2 180 0.52 1 1 0 -1 2 45 0.36 1 1 0 -1 3 120 0.8 1 1 0 -1 5 168 0.8 1 1 0 -1 5 12 0.28 1 1 0 -1 6 24 0.3 1 1 0 -1 6 60 0.38 1 1 0 -1 6 84 0.12 1 1 0 -1 6 108 0.8 1 1 0 -1 7 156 0.8 1 1 0 -1 7 96 0.8 1 1 0 -1 9 144 0.8 1 1 0 -1 9 0 0.8 1 1 0 -1 11 48 0.8 1 1 0 -1 11 0 0.8 1 1 0 -1 12 24 0.8 1 1 0 -1 12 48 0.8 1 1 0 -1 12 72 0.8 1 1 0 -1 12 0 0.8 1 1 0 -1 14 12 0.8 1 1 0 -1 14 36 0.8 1 1 0 -1 14 72 0.8 1 1 0 -1 14 main 4-7 192 0 0.8 1 1 0 -1 0 36 0.46 1 1 0 -1 0 72 0.24 1 1 0 -1 0 48 0.8 1 1 0 -1 2 45 0.36 1 1 0 -1 3 12 0.28 1 1 0 -1 6 24 0.3 1 1 0 -1 6 0 0.8 1 1 0 -1 12 36 0.4 1 1 0 -1 12 72 0.28 1 1 0 -1 12 main 1-1 main 1-2 main 1-3 main 1-4 main 4-1 main 4-2 main 4-3 main 4-4 main 4-5 main 4-6 main 4-7 no plugin - false 0 no plugin - false 0 no plugin - false 0 no plugin - false 0 hydrogen-0.9.6-beta3/data/demo_songs/TR808kit-demo.h2song000066400000000000000000001331411211146647700227640ustar00rootroot00000000000000 0.9.4-svn 125 0.71 0.5 TR-808 Emulation Kit demo ArtemioLabs Demo patterns for the TR-808 Emulation Kit. true song 0 0 0 0 TR808EmulationKit Kick Long 1 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Kick_Long.flac 0 1 1 0 1 TR808EmulationKit Kick Short 1 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Kick_Short.flac 0 1 1 0 2 TR808EmulationKit Snare 1 1 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Snare_1.flac 0 1 1 0 3 TR808EmulationKit Snare 2 1 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Snare_2.flac 0 1 1 0 4 TR808EmulationKit Clap 1 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Clap.flac 0 1 1 0 5 TR808EmulationKit Tom Low 0.77 false 1 0.52 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Tom_Low.flac 0 1 1 0 6 TR808EmulationKit Tom Mid 0.79 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Tom_Mid.flac 0 1 1 0 7 TR808EmulationKit Tom Hi 0.79 false 0.48 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Tom_Hi.flac 0 1 1 0 8 TR808EmulationKit Closed Hat 1 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Hat_Closed.flac 0 1 1 0 9 TR808EmulationKit Pedal Hat 1 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Hat_Pedal.flac 0 1 1 0 10 TR808EmulationKit Open Hat 1 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Hat_Open.flac 0 1 1 0 11 TR808EmulationKit Cymbal 0.82 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Cymbal.flac 0 1 1 0 12 TR808EmulationKit Shaker 0.84 false 1 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Shaker.flac 0 1 1 0 13 TR808EmulationKit Conga 0.88 false 0.9 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Conga.flac 0 1 1 0 14 TR808EmulationKit Clave 0.84 false 0.96 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Clave.flac 0 1 1 0 15 TR808EmulationKit Cowbell 0.85 false 0.96 1 1 false 1 0 0 0 0 0 0 0 1 1000 0 -1 808_Cowbell.flac 0 1 1 0 Pattern 1 192 0 0.8 0.5 0.5 0 C0 -1 1 0 0.8 0.5 0.5 0 C0 -1 9 24 0.62 0.5 0.5 0 C0 -1 1 24 0.8 0.5 0.5 0 C0 -1 8 24 0.2 0.5 0.5 0 C0 -1 12 24 0.14 0.5 0.5 0 C0 -1 14 48 0.8 0.5 0.5 0 C0 -1 3 48 0.8 0.5 0.5 0 C0 -1 9 63 0.16 0.5 0.5 0 C0 -1 14 72 0.8 0.5 0.5 0 C0 -1 8 72 0.17 0.5 0.5 0 C0 -1 12 84 0.8 0.5 0.5 0 C0 -1 1 87 0.09 0.5 0.5 0 C0 -1 12 96 0.8 0.5 0.5 0 C0 -1 9 96 0.18 0.5 0.5 0 C0 -1 14 111 0.8 0.5 0.5 0 C0 -1 1 120 0.8 0.5 0.5 0 C0 -1 1 120 0.8 0.5 0.5 0 C0 -1 8 120 0.2 0.5 0.5 0 C0 -1 12 135 0.8 0.5 0.5 0 C0 -1 1 135 0.14 0.5 0.5 0 C0 -1 14 144 0.8 0.5 0.5 0 C0 -1 3 144 0.8 0.5 0.5 0 C0 -1 9 144 0.12 0.5 0.5 0 C0 -1 15 168 0.8 0.5 0.5 0 C0 -1 10 168 0.12 0.5 0.5 0 C0 -1 12 183 0.12 0.5 0.5 0 C0 -1 12 183 0.27 0.5 0.5 0 C0 -1 15 Pattern 2 192 0 0.8 0.5 0.5 0 C0 -1 0 0 0.8 0.5 0.5 0 C0 -1 8 0 0.35 0.5 0.5 0 C0 -1 11 24 0.8 0.5 0.5 0 C0 -1 8 36 0.8 0.5 0.5 0 C0 -1 8 48 0.8 0.5 0.5 0 C0 -1 3 48 0.8 0.5 0.5 0 C0 -1 8 72 0.8 0.5 0.5 0 C0 -1 0 72 0.8 0.5 0.5 0 C0 -1 8 72 0.3 0.5 0.5 0 C0 -1 11 84 0.8 0.5 0.5 0 C0 -1 8 96 0.8 0.5 0.5 0 C0 -1 8 120 0.8 0.5 0.5 0 C0 -1 1 120 0.8 0.5 0.5 0 C0 -1 8 132 0.8 0.5 0.5 0 C0 -1 8 144 0.8 0.5 0.5 0 C0 -1 3 144 0.8 0.5 0.5 0 C0 -1 8 156 0.8 0.5 0.5 0 C0 -1 1 156 0.8 0.5 0.5 0 C0 -1 8 168 0.8 0.5 0.5 0 C0 -1 8 180 0.8 0.5 0.5 0 C0 -1 8 Pattern 3 192 0 0.8 0.5 0.5 0 C0 -1 1 0 0.8 0.5 0.5 0 C0 -1 8 24 0.8 0.5 0.5 0 C0 -1 9 24 0.28 0.5 0.5 0 C0 -1 13 48 0.8 0.5 0.5 0 C0 -1 2 48 0.8 0.5 0.5 0 C0 -1 8 72 0.44 0.5 0.5 0 C0 -1 1 72 0.8 0.5 0.5 0 C0 -1 9 87 0.35 0.5 0.5 0 C0 -1 8 87 0.22 0.5 0.5 0 C0 -1 13 96 0.8 0.5 0.5 0 C0 -1 1 96 0.8 0.5 0.5 0 C0 -1 8 120 0.8 0.5 0.5 0 C0 -1 9 120 0.2 0.5 0.5 0 C0 -1 13 144 0.8 0.5 0.5 0 C0 -1 2 144 0.8 0.5 0.5 0 C0 -1 7 144 0.8 0.5 0.5 0 C0 -1 8 159 0.8 0.5 0.5 0 C0 -1 6 168 0.8 0.5 0.5 0 C0 -1 1 168 0.8 0.5 0.5 0 C0 -1 5 168 0.8 0.5 0.5 0 C0 -1 9 183 0.21 0.5 0.5 0 C0 -1 1 183 0.45 0.5 0.5 0 C0 -1 8 Pattern 4 192 Pattern 5 192 Pattern 6 192 Pattern 7 192 Pattern 8 192 Pattern 9 192 Pattern 10 192 Pattern 1 Pattern 1 Pattern 1 Pattern 1 Pattern 2 Pattern 2 Pattern 2 Pattern 2 Pattern 3 Pattern 3 Pattern 3 Pattern 3 no plugin - false 0 no plugin - false 0 no plugin - false 0 no plugin - false 0 hydrogen-0.9.6-beta3/data/demo_songs/tutorial_georgyporgy.h2song000066400000000000000000012737641211146647700250660ustar00rootroot00000000000000 0.9.0 98 0.5 0.5 Georgy porgy Toto Drummer: Jeff Porcaro false song true 0.1 true 0.1 false 0.04 0 GMkit Kick 1 false 1 1 0 0 0 0 kick_Dry_b.flac 0 1 1 0 1 GMkit Stick 0.69 false 1 1 0 0 0 0 stick_Woody.flac 0 1 1 0 2 GMkit Snare Jazz 1 false 1 1 0 0 0 0 sn_Jazz_c.flac 0 1 1 0 3 GMkit Hand Clap 0.88 false 1 1 0 0 0 0 clap_Dry_c.flac 0 1 1 0 4 GMkit Snare Rock 1 false 1 1 0 0 0 0 sn_Wet_b.flac 0 1 1 0 5 GMkit Tom Low 0.96 false 0.44 1 0 0 0 0 tom_Rock_lo.flac 0 1 1 0 6 GMkit Closed HH 0.89 false 1 0.78 0 0 0 0 hhc_Dry_a.flac 0 1 1 0 7 GMkit Tom Mid 1 false 0.8 1 0 0 0 0 tom_Rock_mid.flac 0 1 1 0 8 GMkit Pedal HH 0.89 false 1 0.78 0 0 0 0 hhp_Dry_a.flac 0 1 1 0 9 GMkit Tom Hi 1 false 1 0.42 0 0 0 0 tom_Rock_hi.flac 0 1 1 0 10 GMkit Open HH 0.8 false 1 0.84 0 0 0 0 hhc_Rock_b.flac 0 1 1 0 11 GMkit Cowbell 0.8 false 1 1 0 0 0 0 misc_Cowbell.flac 0 1 1 0 12 GMkit Ride Jazz 0.8 false 1 1 0 0 0 0 cym_Jazz.flac 0 1 1 0 13 GMkit Crash 0.69 false 1 0.88 0 0 0 0 cra_Rock_a.flac 0 1 1 0 14 GMkit Ride Rock 0.8 false 0.58 1 0 0 0 0 cym_Rock_b.flac 0 1 1 0 15 GMkit Crash Jazz 0.77 false 1 0.78 0 0 0 0 cra_Jazz.flac 0 1 1 0 16 GMkit 17 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 17 GMkit 18 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 18 GMkit 19 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 19 GMkit 20 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 20 GMkit 21 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 21 GMkit 22 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 22 GMkit 23 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 23 GMkit 24 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 24 GMkit 25 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 25 GMkit 26 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 26 GMkit 27 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 27 GMkit 28 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 28 GMkit 29 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 29 GMkit 30 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 30 GMkit 31 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 31 GMkit 32 0.8 false 1 1 0 0 0 0 emptySample.flac 0 1 1 0 Intro_a 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.78 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 Intro_b 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.78 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.8 1 1 0 -1 10 174 0.2 1 1 0 -1 10 180 0.2 1 1 0 -1 10 186 0.2 1 1 0 -1 10 A-B-C_1 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 0 0.8 1 1 0 -1 13 A-B-C_2+5+6 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 A-B-C_3+4+7 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 A-B-C_8 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 132 0.1 1 1 0 -1 2 138 0.24 1 1 0 -1 2 144 0.78 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 156 0.18 1 1 0 -1 7 168 0.18 1 1 0 -1 7 Bridge1_4 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 168 0.8 1 1 0 -1 2 180 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 Verse2_5 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 0 0.8 1 1 0 -1 13 A-B-C_8a 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 132 0.1 1 1 0 -1 2 138 0.24 1 1 0 -1 2 144 0.78 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 156 0.18 1 1 0 -1 7 168 0.18 1 1 0 -1 7 180 0.8 1 1 0 -1 9 Riff_1a 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 Riff_1b 192 24 0.8 1 1 0 -1 0 144 0.8 1 1 0 -1 0 24 0.8 1 1 0 -1 5 144 0.8 1 1 0 -1 5 Riff_1c 192 24 0.8 1 1 0 -1 0 144 0.8 1 1 0 -1 2 156 0.8 1 1 0 -1 2 24 0.8 1 1 0 -1 5 180 0.76 1 1 0 -1 10 186 0.2 1 1 0 -1 10 A-B-C_4a 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 168 0.8 1 1 0 -1 5 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 A-B-C_1_hh 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 168 0.8 1 1 0 -1 10 174 0.2 1 1 0 -1 10 0 0.8 1 1 0 -1 13 A-B-C_2_hh 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 168 0.8 1 1 0 -1 10 174 0.2 1 1 0 -1 10 A-B-C_3_hh 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.78 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.78 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 120 0.8 1 1 0 -1 10 126 0.22 1 1 0 -1 10 A-B-C_4_hh 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 168 0.8 1 1 0 -1 2 180 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 144 0.8 1 1 0 -1 10 150 0.2 1 1 0 -1 10 A-B-C_4a_hh 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 180 0.8 1 1 0 -1 5 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 168 0.8 1 1 0 -1 7 156 0.8 1 1 0 -1 9 A-B-C_3a_hh 192 0 0.8 1 1 0 -1 0 72 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 120 0.8 1 1 0 -1 10 126 0.22 1 1 0 -1 10 0 0.8 1 1 0 -1 13 A-B-C_1_stick 192 0 0.8 1 1 0 -1 0 84 0.5 1 1 0 -1 0 96 0.5 1 1 0 -1 0 48 0.8 1 1 0 -1 1 144 0.8 1 1 0 -1 1 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 0 0.8 1 1 0 -1 13 A-B-C_2_stick 192 0 0.8 1 1 0 -1 0 84 0.5 1 1 0 -1 0 96 0.5 1 1 0 -1 0 48 0.8 1 1 0 -1 1 144 0.8 1 1 0 -1 1 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 A-B-C_3_stick 192 0 0.8 1 1 0 -1 0 84 0.5 1 1 0 -1 0 96 0.5 1 1 0 -1 0 48 0.8 1 1 0 -1 1 144 0.8 1 1 0 -1 1 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 A-B-C_4_stick 192 0 0.8 1 1 0 -1 0 84 0.5 1 1 0 -1 0 96 0.5 1 1 0 -1 0 48 0.8 1 1 0 -1 1 144 0.8 1 1 0 -1 1 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 144 0.8 1 1 0 -1 10 150 0.2 1 1 0 -1 10 A-B-C_4a_stick 192 0 0.8 1 1 0 -1 0 84 0.5 1 1 0 -1 0 96 0.5 1 1 0 -1 0 48 0.8 1 1 0 -1 1 144 0.8 1 1 0 -1 2 156 0.8 1 1 0 -1 2 168 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 C3_4 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 132 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 168 0.8 1 1 0 -1 10 174 0.2 1 1 0 -1 10 C3_6+7&C4_3 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 120 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 C3a_1+2 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 156 0.5 1 1 0 -1 6 168 0.5 1 1 0 -1 6 180 0.5 1 1 0 -1 6 168 0.8 1 1 0 -1 10 174 0.2 1 1 0 -1 10 0 0.8 1 1 0 -1 13 C3a_4 192 0 0.8 1 1 0 -1 0 84 0.8 1 1 0 -1 0 96 0.8 1 1 0 -1 0 48 0.8 1 1 0 -1 2 144 0.8 1 1 0 -1 2 168 0.8 1 1 0 -1 2 180 0.8 1 1 0 -1 2 0 0.8 1 1 0 -1 6 12 0.5 1 1 0 -1 6 24 0.5 1 1 0 -1 6 36 0.5 1 1 0 -1 6 48 0.8 1 1 0 -1 6 60 0.5 1 1 0 -1 6 72 0.5 1 1 0 -1 6 84 0.5 1 1 0 -1 6 96 0.8 1 1 0 -1 6 108 0.5 1 1 0 -1 6 120 0.5 1 1 0 -1 6 132 0.5 1 1 0 -1 6 144 0.8 1 1 0 -1 6 Riff_1d 192 0 0.8 1 1 0 -1 2 12 0.8 1 1 0 -1 2 24 0.8 1 1 0 -1 2 36 0.8 1 1 0 -1 2 60 0.8 1 1 0 -1 2 84 0.8 1 1 0 -1 2 108 0.8 1 1 0 -1 2 132 0.8 1 1 0 -1 2 156 0.8 1 1 0 -1 2 180 0.8 1 1 0 -1 2 Riff_1e 192 24 0.8 1 1 0 -1 0 24 0.8 1 1 0 -1 5 Intro_a Intro_a Intro_a Intro_b A-B-C_1 A-B-C_2+5+6 A-B-C_3+4+7 A-B-C_3+4+7 A-B-C_2+5+6 A-B-C_2+5+6 A-B-C_3+4+7 A-B-C_8 A-B-C_1 A-B-C_2+5+6 A-B-C_3+4+7 Bridge1_4 A-B-C_2+5+6 A-B-C_2+5+6 A-B-C_3+4+7 A-B-C_8 A-B-C_1 A-B-C_2+5+6 A-B-C_3+4+7 A-B-C_3+4+7 Verse2_5 A-B-C_2+5+6 A-B-C_3+4+7 A-B-C_8 A-B-C_1 A-B-C_2+5+6 A-B-C_3+4+7 A-B-C_8 A-B-C_2+5+6 A-B-C_2+5+6 A-B-C_3+4+7 A-B-C_8 A-B-C_1 A-B-C_2+5+6 A-B-C_3+4+7 A-B-C_8 A-B-C_2+5+6 A-B-C_2+5+6 A-B-C_3+4+7 A-B-C_8a Riff_1a Riff_1b Riff_1a Riff_1c A-B-C_1 A-B-C_2+5+6 A-B-C_3+4+7 A-B-C_4a A-B-C_1_hh A-B-C_2_hh A-B-C_3_hh A-B-C_4_hh A-B-C_1_hh A-B-C_2_hh A-B-C_3_hh A-B-C_4a_hh A-B-C_1_hh A-B-C_2_hh A-B-C_3_hh A-B-C_4_hh A-B-C_1_hh A-B-C_2_hh A-B-C_3_hh A-B-C_4_hh A-B-C_1_hh A-B-C_2_hh A-B-C_3a_hh A-B-C_4_hh A-B-C_1_stick A-B-C_2_stick A-B-C_3_stick A-B-C_4_stick A-B-C_1_stick A-B-C_2_stick A-B-C_3_stick A-B-C_4a_stick A-B-C_1 A-B-C_1 A-B-C_3+4+7 C3_4 C3a_1+2 C3_6+7&C4_3 C3_6+7&C4_3 C3a_4 A-B-C_1 A-B-C_1 C3_6+7&C4_3 C3_4 A-B-C_1 A-B-C_1 A-B-C_3+4+7 A-B-C_3+4+7 Riff_1a Riff_1b Riff_1d Riff_1e no plugin - false 0 no plugin - false 0 no plugin - false 0 no plugin - false 0 hydrogen-0.9.6-beta3/data/doc/000077500000000000000000000000001211146647700160305ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/doc/Makefile000066400000000000000000000033461211146647700174760ustar00rootroot00000000000000### ### must have the following commandline tools: ### ### xml2po (Debian package: poxml) ### po2xml (Debian package: poxml) ### xmlto (Debian package: xmlto) ### xmllint (Debian package: libxml2-utils) ### MANUAL_MASTER = manual.docbook TUTORIAL_MASTER = tutorial.docbook ALL_MASTERS = $(MANUAL_MASTER) $(TUTORIAL_MASTER) ALL_MANUALS = manual_en.html \ manual_es.html \ manual_fr.html \ manual_it.html \ manual_ca.html \ manual_nl.html ALL_TUTORIALS = tutorial_en.html \ tutorial_fr.html \ tutorial_it.html ALL_POT_FILES = manual_en.pot tutorial_en.pot XMLTO_OPTS = --stringparam section.autolabel=1 \ --stringparam toc.max.depth=2 \ --stringparam xref.with.number.and.title=0 XML2POT = xml2pot XMLTO = xmlto XMLLINT = xmllint PO2XML = po2xml all: all_manuals all_tutorials all_pot_files all_manuals: $(ALL_MANUALS) all_tutorials: $(ALL_TUTORIALS) ## Explicit build to avoid circular dependency all_pot_files: $(ALL_MASTERS) $(XML2POT) manual.docbook > manual.pot $(XML2POT) tutorial.docbook > tutorial.pot clean: -rm -f $(ALL_MANUALS) $(ALL_TUTORIALS) *_{en,es,it,fr,nl,ca}.docbook *.docbook_validated %.html: %.docbook %.docbook_validated LL=$$(echo -n $< | sed 's/.*_\(..\)\.docbook/\1/') ; \ $(XMLTO) html-nochunks $(XMLTO_OPTS) \ --stringparam l10n.gentext.language=$$LL \ $< %.docbook_validated: %.docbook $(XMLLINT) --noout --valid $^ touch $@ ## Special rule for master manual and tutorial %_en.docbook: %.docbook cp -f $^ $@ manual_%.docbook: manual_%.po $(MANUAL_MASTER) $(PO2XML) $(MANUAL_MASTER) $< > $@ #manual_%.po: $(MANUAL_MASTER) # $(XML2POT) -u $@ $^ tutorial_%.docbook: tutorial_%.po $(TUTORIAL_MASTER) $(PO2XML) $(TUTORIAL_MASTER) $< > $@ #tutorial_%.po: $(TUTORIAL_MASTER) # $(XML2POT) -u $@ $^ hydrogen-0.9.6-beta3/data/doc/MidiInstrumentMapping.ods000066400000000000000000000403421211146647700230310ustar00rootroot00000000000000PK@l9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPK@ content.xml]r)XުhH[;d=d䒂DHb$X$e4~rbH$ʂ)sHݍn7?@cy8hg/~9o`ieq@T0kwtg82xI7$Mi"zuanF+Ot1Thԗ)gao7&΢-T}d;?&>`|փ ~<i5dr>ixhFvwp.~ԧXb1kД'BqУԐi5i›pq0}0Fp4G$Yx*MW*M H:ڠߎqofn?,pDۥ^$-fgYŞk5-# ZO^m>Ơy}3΂IL郀|H6tqnw ȢIJB %F,N37\[֜QM;k:])gip3wKu<\Y9p=VɼT_A>i,5``uJ>ٔtӘh95USa'>tA<8[YO Nъ9qv5{k*1YH.՛V/ko!Gθ5;> D,h_x$6M4N)8 .Ig֜ؔ l^#MbJ=g#NOM g~T\͹bo8xvKSx%g|ӦGCxa%w ( oj9>*Rʭ&bEu9jS=}$u(9}ȯdb~iv#K"5@u0 l,\KKa[o4X$kځ`U1aPyr-"GSz5&̃X8e`媺75n3C\C؄vw-S6~"׈8'WWC ,w-k6-q ]bV&] -a$61nᨶLm*[a%#k9&v_h\&V Lm+ yɛ:]&N BMQW-&ۑ-:h;|6pl4e*%dbR& f>3;vϬʼn@&nd ~ɮ\8ޓ^N],2mwؽav زq,KWU6l!@*z F #7:*r1D r%ׯLJ?:I)'Bڢ#S^߲pjh[.>lrdX{Arbd܎SfÇ>piN92|yXS%pWЪ)nWmf;'Y.^{"ƪNPxM4؜"Mܜt/Ð Ё/ᦺ;xMܜs8פG:0y$ȷ$&}5(Q|IfF,N_$oR;<-od Z}R:-od yjw~_/Nbϼ} dnvy$S>y5tqjx/[S'dYdk z$SEkĩ5Z ࠷O2S[T,- if3s{$1SWڿv$<*3+_#rʹŭW|ñrȍ6 S4JVAMUؖ.ـڱǩ 6>UA2?~ij+ډ+Ul:rEzjpTR0#D$ !r،(<5>m= Z"u9PSU_tru=̀ۥ2nfX{s]l/mQ ZLަE79uZv"V>7QQPED#̢q]" p!OZMZF\:de,꣺W>zASC(9^qȀYu7}Ѹ(sˢ:z1ؗڮh@pC)d!dεCHpDDLnQ3Iz? 8Qv:˛zOING*e QP9`՛F_?BOp C:IEbBCavcMnk:H)Xbhyj9x Y0 0V~v K%UaMܬVuЗʧWjnn_=t PKcNe&FPK@ˮimeta.xml tvanseve 2012-04-13T12:29:232012-04-13T22:13:44tvanseve PT00H22M44S3OpenOffice.org/3.2$Unix OpenOffice.org_project/320m12$Build-9483PK@Thumbnails/thumbnail.pnguYuT 4wZ\ 4hBBqw+N)NqwCp)p9w{'Y'7{완()`aȂ$U`߽ppp/88_@5GԱ{/zVpA*,⮂uM9NE,jrS5S66MZNYrmo6GHFGޏ5r7$1d!dvz`>E@eqmfd i"jQӌ"*5 RHl*bW?(m]Ѓ9} UΈU~xyL#+!ړCͪ6vYlM]5i+Uy#Wʺ3즇Wx;:Ffn=}$.92)߁{ˊ7|&*ʻ8m{#6t-M˅H劘pFw+D^Ƿv,R1e]v[ tv:S#ZZ`ׅĬKQ2$i{ Y'eS`?v*HowJstm~U7ȧuW&'l0-ȶ)HW뵠%Ѽ:}~eV&D<@ھ;oW^B"RoFmTЄ'[?OBUŰ=sרФuVo"c8We/?9IE= yYynmn:r/}Y*q$ljo{ptqLÀW/n'ߝ$!mYF.R%|isZQAY'k 6Mx̟^#[@58tNC[uAc+tk_nK]}GroDҩW-?{ -k#8Zf˹V,c1d2jq˿3;}d# ,oᏥGE6l|O)Rqo`qK'X@f#2`b8AZoC_Tmod}1ϟH}/YDxWM&QQk^v#q4r;V9Vn6 (Bk;#S-%/9n$r79x˻l-;+ʵQb@PҦvS!Ǚ^fA!!R'Rla=avR M{[o>Ɩ'_퐲y*J#pKXk4a|}mY%'[t >CSba^;tjŽN}j}m˱$-?㮧Ond<ۏc|9E\ogkǣ0BZnۼY4 8 N(8 53Ǹc&וV#A;.)z ۽U=q>r{QĶsgDWb׋m멓Dq fl[*wv*s% .Q}MdyX "tEnqTbjSCZLpBrO0OʫnJZ:=ڂVcƏk=B&7 oj&?;.**n|g3㘞4~zRoI=ni9}z۽vUZİV[˃'}PLN/4N\DmƇq=][X 7t _*TI4 u襼rQ#vjhERD.r;1rռd<䤆b#<ɏ%c>''*%+;O8 B.*$zڜW$ݫ))U겤J1Mk`S#*P.PJڢK/&hdۗ7L@cIw[B}?Neli>;{YRXT^5i0=e*=j姩έouH4rSz 9>ULp:y[OJNuh2Kbq:oPdxѦ<;>2%Dz~7 & ܘAGG.Z;N:\0@xu"<p!O)|CTE*FX+3qd)PzUVcsAP3lEj !ޑV>JˍPvCiS#zOeVܶ8"zJZM$P;u~G.nj1rڷ0JiNϨK`:4x%A*7 K@x9ΐov~]8: >.8t<;wz^c0:AB5Te1`+82#Y2rI; * zT C`Q9yZy8m\hH;Vq:?$ͿVwQSOc)_0 b3P'7ɷ>Wş T8jP!E0ə.+ǁ;h{QN~yr9Kխi kB.$ڈrX/9Waq|vDm*`|'}ruL]S$!%jRSJa=o1}8=@Os'zTnZ-6+*#0ih /~N菷:Gfa,;̊[3XMyȰ F՝j)yl;< >}BeGOC }@-n*XdL}mAԯ 6ՎKӵ7jYiod-Ůu%GVWh v{vP4RI5&"e0=7v'f:\<0P+}M#N}ڠiy~t##$Gz RFǠkQA|>5vh9MIgЁ$ GO{{K_+7D l]UfvUlv M6=Go\k I#E|O/឵1ܫZsK׃R_A項o,^Y}ɜ YIφp tPT(S[4_ַɓbƙ 0(߸8BW/BҞI݇xR{}AIC%?WV21*Z||Q>a"0%.PY,&~Gd6X>B]T$֬7t wztC}&Ać}VqgjUfS|chA7CE=uk&m5Mow|vZf "*̙BM:;LH2xUjwtg[ۋ(~l}71/mf$Ɵ/C:Tl2s1 "+j֧mS"Gg.=nlq'BM¼M*Si{Q!,^pGA%dH MDy6Z_Žfzäv-`?)a 7;E#{2߰Uejϴ u6_u"-_NSJЉ )nRDej1@/7效1q#tmʫpՏH1ѿ|Kک%ojn,qpg=zLC|LtH Hg2bzxU5ۂl5ϧ1Coh \ d:~A]O݆|bdMAwsl_B&a3|Ca\&1g)YC^bV| u ZZ>T]eYT9N1M 1:K6?5l;sp"wg@Wʧ]d ~BV:z}CML4 y+8h.V=ĉʘBiTLVЪFaѵ~؄8 Ng.K}4xͻ +nr~,^SQf-lGk ܉ GXD*d/cB֏]߫6Oա1?i  ]D)$5\(sw$,\_4γy;G{;Vh~q?Ruq60xXzR-c15}/YyzʋcNMF{{^rYR<SKR.?h '5Nm,6| !!PM\C~{-:GTM}\Zm2aMM OV;#zW4(!/qpzݛGs(~ B6~PEI5zcT`Cd<[2MH}%Q$r5c^L; 2](#ICiiy6kIt>/E.ư ̴ߚ( #}A?F:i2\5(,ܪQp@3%'{b $^ כ3$[ 5γDŽP91CRfh9$B 8ebCm$@hz:AN_3UyM5`OhMsjWˆ;őVm4(Vue$jXe>IE#(`q眝#M;ŢUl6h3OҪM[1WTcVBsOAd#%4 lq-9`@O=r;$MFOeN~-;.Qnl!2JfyXvGUwX , .ڽ UߋЗ7!`CyߗrvB|]y, Z0p |,+{`cDŽYW(WD|vWn7VB^e(4 DBV f3s|) +H9.l ?٬~%)#֬ EVZ7=#+(Y&nPK8PK@'Configurations2/accelerator/current.xmlPKPK@Configurations2/progressbar/PK@Configurations2/floater/PK@Configurations2/popupmenu/PK@Configurations2/menubar/PK@Configurations2/toolbar/PK@Configurations2/images/Bitmaps/PK@Configurations2/statusbar/PK@ settings.xmlZ]s:};!J'!tz{6$xZ$__نN؉1V:.ݣ2g}XjZ .z/c~.C7􁫦˹t T: :-svc{FZ)8VE'QŲdt7E˲M!oCԙĘ}zm߭.?<H?TǦ}6IgM!5+o5T92 M)Wְퟵ} mڝROv>ry+IФ܃{ ߪdN2)1D^Mk49#:"/9xt%p %U a|=7OU@A"WMF'  mbP5~ ˂TdEU줈T- QQ)k4JfQGOk>Ux_A=Gd@5T"|䜇ϟR]E>b#CUS1G6KEÉ.[Z&/>z\͉(lGphuyw- nዲmA,H2f~:t| 9F#CfWPulM}5 "']@1&K0sdr #SNNT:*+K#c& ~DϗOùGT<<)醻+ TA(H<%c]`&j|$)!wUHr::*# ۵WIt* N$ZbL 9  >Eδ" Z 7 9ֆyqa\mߪ`Ds-xEqc2fڻWꯤ?l_}OuA Yz4  sC'kM_cDj@~P֓?"1PKT~!PK@META-INF/manifest.xmlMn0">q˪Z'I?ynH[;^{ks$ tʷ|/uXYpC<(}.Fjv`jVZEzTZ/+!0J>l`|ʽkV5(Dv,Irr)RȻ0Xܦ)xt3%>ٱކmvnhC*~n,w:ݧxzS>Jb|"#m!@g<0rC CM<`{ -HM5#w⬒T6m<|ּ~PKDՀJhPK@l9..mimetypePK@Pm  Tcontent.xmlPK@cNe&F 5 styles.xmlPK@ˮi?meta.xmlPK@8FThumbnails/thumbnail.pngPK@'U5Configurations2/accelerator/current.xmlPK@5Configurations2/progressbar/PK@5Configurations2/floater/PK@6Configurations2/popupmenu/PK@T6Configurations2/menubar/PK@6Configurations2/toolbar/PK@6Configurations2/images/Bitmaps/PK@6Configurations2/statusbar/PK@T~! 57settings.xmlPK@DՀJhQ;META-INF/manifest.xmlPK<hydrogen-0.9.6-beta3/data/doc/README.DOCUMENTATION.txt000066400000000000000000000337321211146647700215460ustar00rootroot00000000000000------------------------------------------------------------------------------ H Y D R O G E N Drum machine ------------------------------------------------------------------------------ HYDROGEN DOCUMENTATION ====================== Contents: 1. Overview 2. Tools, Supported Platforms, and Releases 3. Translators 4. Documentors 5. Developers 6. XML and Validation 7. Additional DocBook Authoring Restrictions 8. README.DOCUMENTATION.txt Changelog 1. Overview ----------- Hydrogen documentation is maintained in DocBook 4.0 (XML) and translated to HTML before release. Different translations are managed through GNU gettext PO files. When the documentation is generated, the PO files and the master documentation are merged to create the doc for that specific language. This document is split up into the three types of people who may want to contribute to Hydrogen documentation: Translators, Documentors, and Developers. A section is devoted to each one, individually. This document assumes that you don't know much, and tries to give you pointers to the stuff you need to know. 2. Tools, Supported Platforms, and Releases ------------------------------------------- The following tools are used to maintain and process the documentation. Depending on what you're working on, you may not need all (or any) of these. xml2pot - Creates the translation templates (*.pot) based on the original DocBook source.[1] po2xml - Merges the master DocBook source with a translation file (*.po) to create a translated DocBook file.[1] xmlto - Converts DocBook files to HTML. (Note that xmlto can convert DocBook to much more than just HTML.)[2] xmllint - Used to validate the DocBook files against the DocBook DTD.[3] make - GNU's make utility. With the exception of xml2pot and po2xml, these tools are all very easy to install on Linux, being a part of the core toolchains for KDE, Gnome, Debian, etc. However, these tools are not as easy to set up on non-Linux platforms. Furthermore, it is undesireable to add these to the list of build dependencies for Hydrogen. The po2xml and xml2pot tools are part of the 'poxml' package. This is a part of the KDE SDK. However, the KDE3 version of poxml does not work with our docbook sources. The reason is a faulty implementation of poxml. The KDE4 version of poxml corrects these issues, and is the only version known to work. Therefore, these files will be processed before making a release of Hydrogen, and the generated HTML output will become a part of the distribution. [1] xml2po and po2xml are part of poxml, which is in the KDE SDK. http://www.kde.org/. You must use the KDE4 version. [2] xmlto is a convenient front-end to an XSLT processor. http://cyberelk.net/tim/software/xmlto/ [3] xmllint is part of libxml2 http://xmlsoft.org/ 3. Translators -------------- To translate documentation for Hydrogen you will need: * To understand XML, and enough DocBook to be dangerous. * A PO-file editor. (Note that a text editor works fine, but a translation assistant like KBabel is better.) * To be able to read and understand English. If you don't have all the tools listed in Section 2, that's OK. Ask the Hydrogen Developer list and someone there can process files for you. To make a new translation of the Hydrogen manual or tutorial, simply copy the template and get started: $ cp manual.pot manual_ja.po Note that the _ZZ is added, and ZZ is the IANA abbreviation code for that language. (E.g. 'ja' is for 'Japanese.') The registry for the codes is located here: http://www.iana.org/assignments/language-subtag-registry If a translation already exists, but needs to be updated, you can update the .po file like this: $ touch manual.docbook $ make manual_es.po You can either see the changes using 'diff' or your translation editor. When you want to check your translation (and view it in HTML), this can be done like this: $ make manual_ja.html NOTICE: Before creating the HTML file, the document will be validated. If the document does not validate, you will have to alter your translation file so that the output is a valid DocBook document. For more information on Validation, see Section 6. RULES AND GUIDELINES FOR TRANSLATING: * No new content. New content must be first added to the master (English) manual, and then translated to all the other manuals. * Maintain the DocBook XML structure as closely as possible. Do not add sections, divide paragraphs, or alter the markup significantly. * The English translation uses a little humor to try to keep the reading interesting. When this happens, the language and idioms being used are very cultural. Please do *NOT* translate the words literally. Instead, please translate the ideas to your culture as you see fit. We've asked the Documentors to mark when this is happening so that you don't miss the joke. This should show up in the PO file. * If your culture doesn't like American-style informal writing, please feel free to make a humor-less translation. * Submit translations to the Hydrogen Developers list (hydrogen-devel@lists.sourceforge.net) 4. Documentors -------------- The master Hydrogen Manual and Tutorial are in English. All new content and major revisions shall be done there first. In order to work on the documentation, you will need: * To know and understand XML and DocBook well. * To know and understand Hydrogen well enough to *ask* *questions*. * An XML editor (note: any text editor will do). * An XML validator (e.g. xmllint, xsltproc, Xalan) * A way to create PNG images. (e.g. GIMP, PhotoShop) What you write is pretty much your own style. Please *do* keep the text interesting to read by using wit and a more familiar conversational style. If you are using an English pun or expression that is intended to convey humor, please mark it so that the translator gets the joke: (Ahem, don't ask me how I came up with that one.....) Before submitting (or committing) your changes, please make sure that your documents validate (see Section 6 below). Some guidelines: * Use double-quotes for all attributes. Good: Bad: Reason: po2xml chokes on them. * Please make good use of tags for internal links within the document. * Since we're using 's -- if you change an id=".." attribute, make sure that you change all its references, too. If you create a broken link, the document won't validate. * Do not make reference to specific section numbers, figure numbers, or titles (e.g. "See section 2.1.3 The Menu Bar"). Instead, use tags so that this text will be generated for you. * For italics, you do not need to set the role="italic" attribute, since that is the default. To get boldface, you must use role="bold". Example: really Bad: might * For web links, don't write the URL twice. The processor will do that for you, and it makes it more readable. Good: Bad: http://www.google.com * Don't worry about typesetting in the DocBook documents. That's what XSL and CSS stylesheets are for. Get the content done, and then worry about formatting. Don't get distracted by stuff like section indents or relative font sizes. * However, *do* worry about typesetting on pre-formatted tags like and and . Extra spaces and indents in the source document *will* carry through all the way to the final document. 5. Developers ------------- Since we don't want to add xmlto, poxml, xmllint, and the DocBook DTD's to our normal build requirements: All HTML files need to be generated and committed before releasing. After the release, the generated HTML files can (and should) be deleted. Do not commit the generated DocBook documents. If you are preparing a Hydrogen release, you must have all the tools listed above so that you can process the documents. You may also need to understand DocBook enough to help a translator with validation issues. (See Section 6 below.) The reason for doing it this way is that (as of this writing) xmlto, poxml, xmllint, and DocBook are not very portable across Linux, Mac, and Windows. Nor or they even very portable across different Linux distributions. However, the tools are fairly stable on Debian/Ubuntu -- which most of the current developers are using. 6. XML and Validation --------------------- You've probably written HTML before, and found it pretty easy. HTML is an application of something bigger called SGML. However, SGML very difficult to implement reliably. ("Best viewed on Netscape Navigator(TM)!!") Because of this, XML was developed as a replacement to SGML. To read more about XML, check out the Wikipedia article: http://en.wikipedia.org/wiki/XML It's very much like HTML except that: * The tags are case sensitive. and are the same in HTML, but in XML they are considered different. * Closing tags are not optional. In HTML you could start a paragraph with a

, and then start a new one by putting another

. The closing tag

is implied. In XML, you must include the closing tag:

"Knock, knock."

"Who's there?"

* Empty tags are like this:
. (In HTML they didn't have the forward slash.) If a document follows all the rules of XML, it is called "Well-Formed." For example, the following is a well-formed XML document: It's to as you go But the following is *NOT* a well-formed XML document: It's to as you go (Can you find the errors? If you get stumped, feed it to a validator.) While it's imperative that documents be well-formed, many documents (such as DocBook) have a specific structure that must be maintained. For example, in HTML you should only have paragraphs inside of the body:

I am the very model of a modern major general.

But, if I do this, it will still be well-formed XML:

I am the very model of a modern major general.

It is not, however, a Valid HTML document. The W3C published a DTD (Document Type Definition) for HTML that clearly specifies that the former is OK and the latter is degenerate. When a document is checked against the DTD, it is said to be "Valid" or "Validated" if it passes all the requirements of the DTD. Validation is important, because our DocBook source files are going to be _processed_ by several automatic tools. These tools know the structure of DocBook, and are able to generate output based on that. However, if we feed them an invalid document, the tools may process the data -- but they probably won't process it *right*. 7. Additional DocBook Authoring Restrictions ------------------------------------- It has been found that poxml is assuming some things about the document structure that are not specified in any DTD. (This is at least true for the KDE3 version of poxml.) Thus, in order to get our files to work with poxml, we have to add the following restrictions: * may not contain an * The 'msgid' string inside the .po file may not contain an empty element. So, if you have some text that includes '', you will need to convert it to 'http://www.foo.bar' * You must use double quotes (") for attributes, not single ('), even though BOTH are OK in XML. * The manual may not have '>', it must always be '>'. * Avoid embedding a lot of structured markup inside a paragraph. For example: Install hydrogen like this: $ apt-get hydrogen This makes things a little funky in the PO files. Also, it doesn't really make sense to embed a (like HTML
)
    inside of a .  Instead, do it like this:

       Install hydrogen like this:

       
         $ apt-get hydrogen
       

    However, if you *really* need to, go ahead and try it.  Just
    be sure to test that it will match the strings for translation.

  * If you change indention... in tags... be careful how that
    affects the .po files.  For example, if you had:

        batzap

    But change it to:

        
          bat
          zap
        

    You will need to add spaces in the .po files like this:

    Before: "batzap"
    After:  " bat zap "


8. README.DOCUMENTATION.txt Changelog
-------------------------------------

2009-10-13 Gabriel M. Beddingfield 
	* Update poxml dependency to KDE4

2009-09-02 Gabriel M. Beddingfield 
	* Add section 7 Additional DocBook Authoring Restrictions.
	* Fixed a typo in TOC for Changelog.

2009-04-09 Gabriel M. Beddingfield 
	* Create README.DOCUMENTATION.txt
hydrogen-0.9.6-beta3/data/doc/img/000077500000000000000000000000001211146647700166045ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/doc/img/AudioEngineInfoDialog.png000066400000000000000000000657401211146647700234510ustar00rootroot00000000000000PNG


IHDRNx-	pHYsutIME65 IDATxgXY@=EElkY~*(A: *((XA,& uźVXnH5BpއINd\z&BI.26B!uml:$ي	BB!u!0!BT	BdMUPdb jĞE!66:n\f<*B]O`b ~~tn\{@P>Ev*:؀x ԃB7^3z6Y>>䜬[u/n켜xA)?` IBJ511|EgyhMSSl//x{m
57xݖmkjkxT)񶾛׿:}w:0Uo
D%r]:򲓈**ʛ7f%f/[m#'':( +=>'+!$8FE_o.Fݧ݇(g3$*۩{[9)ΎT*l4fZ9u4/;)'3!|eD]`0R3jyzC{xeFθ ---JmyUbzF6in瓇JS/;<-9.-9nH]^3Oe'
RLϟ=])ʹ0/񯿗31n5˘LUƆm]$LW?l\׶eV(*;yXQWS]8߃ޔ>K튊_ښVWL7[1+
M.
=p8|xKP^Q*xtGyr+-qL())XYדVsݷ7Q87AQ}[RYU>4hdM
vЋie㚕a*kzFƍqq[`9h`ys]D;
[iC7_5z.1})LS啕&{	6*6gٕUU'O3n'8UWdXq^=t$p8)CDǎy4$]_]]w.oڮ(|GOoO[w^~5'N7v?/4uH|?sF[a(|q
s3c94-:gQ`yyby)Gn|O::xfUU'O36&/*ͮoֺcm		&o.? eWWS2iII)%PWSmUFCCD"D $%oUU__O{QSUҲwҲrukkV	sr[yqG??;dtЧd2L&ʶ:!>_3-bՇN_OҀ"<nH>i05S߼ݺc/q,[W!P]Sj>ǩEJjÈ2#֮	L/))MJ:tpnbⴤKy'\e"3ʤ
j成%eiYÇ:nwGRRRޞn}(ʋօmwI)QG]y#/^|M܃ضiwo;c^iiz.f-ro-DQϮ2dBCC?nWSG\wBb􃞉WS'/s!
%-ǖ^>itNDGM%Qyu.1[OZZs[7bY+3Hp#z]GDAAa}hJ}C}^ޕgĹݵůJYLk\.W[!I	L|>cBI8uOP$D56AU#!Pd=6BP>0!aNOCBBBaC!0ԉtn\HPwH=
	\wKvöFHH6NDGlhljz߾-؆HX7eDN')%	>ɗV\:lwJJM[!'+!$8F9kp:?'%51VznJI6a__^vB!*ime|ViqiqF
FwN2xz3L&]Ks㶟wUU_l,+㧅@ҕ[-}־?w>I]Mm-ɤ^ᷜrA&OlOPShjjHII__gL۽P
}0e.V=ja%%E+?z[2v(7_7X&H6.n~ؼDO8>0(xG~5bEy{'k9j{Knahl⾀8w!Yz]5+;oúUtM
k[l?_/!辴>+">yNmaRX!H$PҸi_G;'+R,0mihxZxSw):Æy7n{^뷂()//?&]KNҫVEe{W'UVVq\'/"n.uJ8ۅ[Z	F7UZZVWп߃:ϋE\_KpN)m^"*O
^wƆK|ׄn*{BrE_S^^QUUݷћ4(++)wus'ij;}1^zh45UU9N99`ee_Zri>@NNvpn."N:3ǍRMMlv=+haK5@\bjFܜ,''`oyߒT*x --
E/mz.hwݖk
~\mkV驪]Sck—rOl)&NW^^eezizd2`'!Ǝy/n\}N%nWcib.]LI>s?^䌔osR3.[8[r~NI1awh^vRri)1h}QlbⴤKy'b{WVVb?÷\&ZZZ^^qC)))oO7m>
W¶߅-+OJɈ:v,*~!zV[+$666gefh={-q-~Tb9`icccٻrb+hg/455o3r-ժ>Æ|o,rDyAIHJ۲)4:&5h4;C6w~P7GeTUuy8t]SSRBWy/\MqăܾJrrjjжrPTTXC*U-{շ@7/:;j	Q飛~b[õk>zZ꿰]yلO]g+KBC-7:ྈ-[.ia`Ehjj. b{[+>Ky6iҷϷĊ:^{/@CC=$xÆ%d,iu?w모(\7v̨ƦƼ+ d&HW	mؗ{@NNv)'P(koGflg;%EEq|Dq~GPN~|.[SYU}YA6mStV9>.z!}90Q̞3_qvKw3Ĺi{rU&6.V.iM47+ iIoDovE/X[q6#HۍSt⶜2Sϭ
 Fo~qӒd]r):
CB݀~7o!9q츱{ƕ7͌@NN`̜[>t$p8)CDƎy4$]_]]wN`oZF`:t[Ni;3m\<㣤rrr.zA%Mtot:ۡOod2LZŰ1[.?'RSU%>|ev]AҡۍĹ_ӡrjk־wQOX,>U_P_pB S")oX.l?q8#GA/u	,̌ƛDZ}tv#q&6NߖL&QWk;.K,GO`bCSP(L&55ҲBh/^N3zՋyܯx8?&!YiKJҳ"|;juGPn^vom922kV-+Ʀ;wE$^:t4&`OjRE;9xB_?BIK:~N1:y\)щm9=}:$F]^ݷ7L.*zE;ǹ!Hsc#uIܬD&q.c?z)((
RUQo˻s6&PGFf[K$IrBB!u*4v]8Nלe7GA^>rߎKJ/f၎Q@_}KII1=#47sGd_]@$\	lp.&?'93ܲ%>T*l4@jv礜9yDWue'Q(b7csSCJN8h۶ĺ&FOIm58%X[%_85BwyZr\ZrܨBځoCǺL25s*{W~>!r:a޾-Z4Uz˗N7%JO8>0(xG~5ѧ5˘LUiZm[;v]kZٸfemXam뚞a^!
ժn!:---yyϊO>r$kC]CCϢ>Rc믣
T@AAh뎽4NL&$V'f:r]_YUwZω}f7Ņ7PL!+=}M7#L2]
ٰڭ)D]y(X]Sj>4)b:BV`϶K;3tJN16F̉ն5maantbY݆jIx5DqptEEeJB/_PU+KS-P'YY|FHC{0Fl:}ß1!03B!uI?&PFD0!	ta	;aC[0N|\<!0ԡPP$[16BCB!!Pٴ	:P8@Ջ
ER݁0!
2ЁsSsO??n0&jOjjj4p&͂PqN$_}KII1=#47sGء=b#tgg\&FozΞ>v975>m>T*l4Y'Oв6Pz$h'?۷%UUCOP-0vSKsܼޔ>K튊_s8`dfgh<+RbCBq


>+KI>6ϸr1L[БᤤfnXC5ROoZ-LMHlՋyܯx픽+OJɈ:v,*~mzz&
B[gDiOR(37n/{[ShA.)=pej?"έǩԐ823{6(]GmL8PR1!񓛕d6n=T|k	%99%~L@P]k?]j!G/))MJ\g:'#Y455t׆/E/*~qsDqKrdjlf_k!ٸ)E^N	Dԍb# q,%*_u<:(@QAv5˘LUƆBv@@O8>0(xG~v3v(7_7<^^$& T
qPTT0П|PT]bŝKfJƏ=r]_YUwAm6у{_&n'*ͮonD{AdD

uu(C@IiTm6уL"yW^Ѳ0@]<u+RĹqrN.^hD^ZWXN'+Kc0@MMX.h;wʛ}|󖯋FqDyB`\\륨jcnj$)?ˍFQUUqu'3l-d2]Sc3\vw`0겲/Zo '';Bwxj7uYd/!y·\&ZZZ^^qCvM`fj!|{F!$0!Pۊu_9!qi'#l6465=zxoߖtBoESSte~SL4pR28*Bx{m
>fSϞM7.GkβgjK튊_ּ7r\b_wM H3m\\~ys]94R
PTw򰶝p55/ܸ)}AbZZZrOO<}_B9uF۰ի7oy
TWל8uv=f`̜[>t$p8)CDƎy4$]_]]w.APڮ4aCGʪ]QQQ@CQuuLw.q4p8}z /`=}\BNįbdsxY
B݀_LtЧd2L&ɛq1lGcz'ڮ[UUM_ž^
6vH"F7J655f6xsssvnuKx,e#/Nڲ)r-_OϵkkߋjYirzssnA&ӒΜ:/FwI)QGd%M7-;3yI{)))oOci¶g<]QQ{W3r8PGADHy+Kn}O.P(iIgo^x~`0u"/;ǹ؏zܨNPV$̖$F]^ݷw~}@K>w3q{BW\2t`EwIثnv'IZRWW[r鰡)))N7ţJdX7r; U+1'1١NFFzbV5558@<	ʊ$Iْko^^xOfdl#X"I'0bzF6in瓇m~ OH\Df3ϟNZ@#h_/FT˖ԉʪ/^B]޾-Z4Uz˗17n{gAϛ"d_BT#P(bϼhC{>&Ql6sFӄsI:ZsB[wsu---
Y	\D%-&d_D!SRb=Bw(NGkBHCOyyEܹD":/?/? \DS!xҢ[,[mbp֝tEZGkBHC9ɖN%%Ef$蹈<=\h4ewWG76AdU"\1s!Pn.'OoN!:
C!!)|OW yV/_R@
/ß*6E a+tE}(V@"FEO}Fb@c"~v6vBOЈMhBIfa/i$ЛxF!:T:nOI$ԕvF"HBg7BHLL_1Ե0p΍sssoYvV)
ߧEl~U̗B]43234e^[~COW]*j{]{bS t	L.)5c0̩yI9	֨(S#w@nVB~NOfꠀ@M7312<xJB,T_o.Fݧ݇UrXgG۩UU_!8)))XY(\af0u'%5swillyyIS8E5?}Y:655\7el>%d2IVVݍhhHS޻򊖅kJ1u՚0'EϞG~c+|^P
s":r)@onPaЈGNGuaDYlBk:xN3~o.\l[wÂwEo\8fڠ
|Hq#/Qu
dq8\WbymM-Fhk7z)**1#Ei/-qTjSS#]m~&J511|I7ytV'`PIe#/Nڲ)rwI)QGd%M7h·dDe'EݮO[JIIy{eeM['kc
.Լcׁzc5U];sRΜ<;X__^vQ^EEyƐܬĬeK|÷ߝhtFyI^"=VI|$Ӕ,ݑ;wGzdvܿc~!>K{z~oki~읉)˯	^ḓdo]߶5
3m\dew8oc'MϷW42#Fƍqq[ +K۵#|\WG$'&|Q
9̴h{҄c;fWVU][Бl6sƆ8ĿLD?fO>gl4
uQ! _ܨ}zjaj?g#--L]o@Υ>ǿ	ښOKJJ(j2iW:+K<9D՛P?[+
tBzJδ0odeiF}EKN۪EoVzҪe:6A"!?jnNH?OYI"/bw4=yy7o~acmI&sݜUjjjޟFɨ:۷fMM;wjsrrE,#h.&xzh2**	R/=/Nmkϋ+*̬:NcئF.&m_[+|sBfj=۲/]nٍ"drZRܙSG~"ӶT@q<{^*L
BvEH"e2 ee8C!$0!px&B	J.B!u!:BCB!u1!$n켜xA)?|v'/QsA!q7HܾTlAh2ج_Buq^JJD?|{IEEyrcF565]H
^{/@CC=$xÆ%d,i{_lg;%EEq|rBRob/RLG-FSSs1]p	
УBzmTW8[Nӟ@~؎,gnhhDj!G/))MJwBH}	̷oK*ևM՟kDi͛{IoDovE/)X[qmEXpCck,"uzyE
Ml]˭\ǷEy{'k9j{HF
鑶-9
CRp3y644i"~KWv|NfgQ`yyby)Ga08NJjCcF:fWWĝK/OoO[w)kN:;ne'8UWdXqIF
A-S]]svtfw1;OH;5B.Hۭ;%>!+=}Os\UELT*TU펪kV	sr[yqG??n[LoD}zK&dl2$)&$))ɑƷGLV%~Eҟ2ivgF!	u<q#mѦ9n
oM<[[T]xXVoX.l?q8#Gm8rN.^+Z
kj2=+;Ox;5B}>lZ>&9ɖN%%Ef6q۽ddf;ٶ-K>~h*fsfbiii
d8]Sxb_/EEPWW;fd2ؘW0znvN&jwk|h"Q]=~ȐN6





>lM+-NKkjjWw7Gf/)-KK>lHJIy{ikP(/^Z
ZL^;wE<\F{uzF#߲sWhiijyyeRJ{%Hiiߖ!d]t":ރw:D#֮	L':t0BLLg!7:y\!$z,ջLiݯ__ҢϝLB}$1PAAa}hJ}C}^ޕg{Bȡ7͢	[sQ_skhlmfk!!"}k}$l/)]SwD\uSh>~:3 -|KHFonbaoeG^2A^=Fk}aL3e'd&oXnme|ViqiqF+ɮ
JJ	ĜƷ@JJjk¹s˖ZqRcgNEO˿fǝMqym_S*뛟l4ÀXnf:#ɼADvWP3kj8Z7)]5+;oúUtM
k[l?_/UI	O8>0(xG~kM{^L<UUIDvHj;f=y_x
Cr~ݻfn>>7ߒX,D**z1msxeMRx>ˊ,y29-vCK0;uTIIu"Rzn_"90$S~?t-ӌħJlVv>BH2SlncO1$3<$edl6tظ_K
NIIqi))S[Ät&ùSGjt1Ŧ)zP34r{J&`J/̽vVNA|;[1
YyEE7X͈=k1Փ[~Ehue''; *9t~NJjb-P'TVU_,~RP5f絣cb=/rϝO~(!BGubtB_8WLbmQg0}$
bffR	:~#J!un\^UkNIM=zhw˛.QWdiyWZ-כ21l
[Ol%%ߒ Ks㖿ݺ]djcu3M/_eX-\͟B:C	rziǏMRzn3{s٪y˵ǎIMjYfRD=0ddz{ikP(/^Z
{s
.|
e%>MMM#6񖴼-!;L'2!P򜓛/I%I|kD=^v~s瞃/ӶX4˖F1m:z7@bx4e҄:EEE1Y,VܹizWOF;#I%'Kޯ,[NNUVifLs8CcSSb_Vtb#$)&$)?ޕW]HK`C-?T2vw$,61p +Kc2ޔ!yifi4b_P<1!brrSNNv)'P(koG-!8?un}
|ҤLё᪬_p-b3-LlMMͅwD>PWlݑ+Rb/7Exz-]|":2xmBZZ7GOq:dj<=(x=b2YDv"uָ=oߖTVU
?YSCKgl4Xx֝W@uu͉SgǍnt(ҡ#1FIIݠOqp!,wTXۭ;%>!+=}$L"VWWS2byII-,uv[2L&deJKQ__ONBؗ
u<q#m2	*]ys3oo7,W+*+iiնe*PUU	߰f]7~p8#GܷEɗ"<;B@{NלdKkLD$Q}iʥ}99kjjޟFɨ:&H&--MPLákjxu%Jڵ5Rd'BcGu!C;9(((444$@Į.#•X,v~~~\<)%#^ع+27@#֮	L':t0ߚ}wꨒb1xh䱐4ڋ3njmw-bMAىBgꉉY`9y`b0?EBo`!>;.߇=:›$Y{b{$}S<{PKsz6+W:dߢ
hllxLlwZ'Q<nb_hjjwўKK@FFz2)S&r8I)O!Gu%"nۙXmٶVjHvo]E{ۙLֿh4Mw=0pqpcٛ/2{zO75޹C6L-377sGʛiarѼ줜̄
kTTyHk+F2OKKK5RWtFyI&]vb#&FOI[*Kl4@-2]9,+yK蚊
g8Q6?=&Uމ?XB2N{]5+;oúUtM
k[l?_/^yNhͼTF^-cztm/##dogW3wt9P$W0NPFuBbjss?ij_H&n7"(E߲ӛ2QVVRk7ONJWWSݵ .rfl2Sq2o>>, {9\֪XlmZTYAEAmAq"օ'8P(2D)ZZS2dH$!y^S !ϫs{=9BgjuwNwve*]%el6{
5/LfЮ͉IWDDɱ_/iv҅S:9GT4:jw.҈e*8{M`B ńo2ns1UUUUUUQ1qAۈM@%iDuI˨p"\ơ荓cm7eˢ5&z޹w?X3LyisV4YNF.iDuI˨p:CRUT	!խ\A(<
QIhL1>TwOfrr_?|Xؒw:=gu&Dh:8	йPÝ#:h=:$cun=aP+ԡuPZ{e&j`/2ݩyy1l6{83}
rP yw^ƙ%%YhNQ.̰w-{7<

?y} ee%Qmg{0//F	uW_	!&&8;Pi=	7n'&]YGfwn8|U.r˽ms]TR	>|Νeee,skDZOpjZR:H
	)f)fSL,_dfo޶ѣ'n%M֯~JBZ2Ǎ}+I-&?{"%!j7"Z>,]Iǣ]n^l:왣1!Ӧ;x)2`h2K)q1†
bi1BtpCE)(ȯ񎏋H\j":djbLSfX#k(*.2GW[KsԐ'k")Z"%&_10`tݫ̕jhh *ƎdMVvϊ%oF~ev9K-nL'%ࡽ344pts$+]jJ]mg:[ZPW[8ߙz-YqS۲}ٳ?fv"lkcR}.R/+}#ӒcGͲE˼ۻgWE3l?
uBOwvk",/2M&Lp;[yyԫLY`P=k$xy|B3e6VZ[Y\\B}x=PIyy
ys>ąL6!z3_BHXϔcumۻNi
%eT!gIԠhBQSdR"BXŔڵ91ʙ(99k||)+_r怵5f,))=uAl6{
HJ	uTjy~wVK<$4qhS7::E<
Ԕu8 ;Z'ꎪN55Հ
~ܸy
6$xvYf,**
3]E"߾bg2C^={t;\LUUUUUUTL\pжTW:a0BһWt 0BH\LmAy[g뷐󲨧S8GZnGi!M}lfwQUU0z7SneiNӵ4gQSBz"o:`gظ˵ExS
*8
ԩ4PP 82=:زdB][ Ն"Եuxja]E@jxfߓܠvЄP)ˌZoNs.KM$>BA{
u {X!wQL8[CCNTEF~epnji:왣1$m[SVmkmy251&Y3[ c.gORRz&"㕗WDF]O_t!GOϒ_PZVF!Fr_Cz-
l/?'43c'NWVr
FƘO1IP~d@AA|[LgK9j;S|Wm06a?OQQ垢%xT5dzRrZUtֲrOHٰW[K!b5g<-vֿ8:{X9J߶FZ[KkL,.Hx؊ճg:̶ENEY")c.=v\%G%ǎe+V^HC)XGGGQQAT]~}qR IqճV_Uq$JAE$D%şz5&()u?}B***9N/'KM|=~PRRzۻgWE3[V \fqߧ$DEhZ8ǎV^^>9+ϋl6S-gq8Ȩof=DQgS5{' KZ>ZJyH䛫3O19v"\SSFកd2EVv{t:&/߀bIiU#~L=fF

߉>KٶF"B.LfЮ͉IWDDɱ_f{Y+-KJnݸe{x^^b-'!%l"/ϮP)IZ&>zYVר/>{!˖+**
3]y"jjoq.>lHr iwwoIgXlW[n٣{bb₃BzѽA	ߺ-[3c3#~k7@WTTBH~}3q^Ȉ+kCh)Vd.5bXӃkÎ˧&F7&F'_Jy<4}xw	QBbjA;;Ҳ_Z᪤ԕnpBxzry6eΫ	5xSؓn[IDAT
b.
"R׹Fgwj&⨧`0^b+a83rug'P?6lF**ʄwAK=**(Tr*Ӯ(5R]D32N01|~l\$\dDn-b.Kohڱ+x3]\2m;+mjARl߹o=_q~'{BȺ
[> sG17GQhB_?}A[-⭂g(+)r6Lyu	55w,ts>zaC}{iRw	&n%ߴl@g{E嫨m̍&MM?/o`>}vUUUILFJDy$WhY=0.%ͱ޼AvӦLR+1фqv^=?RU*+9S,fxzjhh *%z>ؿwɦ)WUUUI?Hj/:fupϾCfXh7obQG/ruTH-
=9C3S㤔ZM**ʣ67oUs;!?yL<~?[z)fgXC]poMuuҲD_Żw#aƌ.**~=H\NZOz-B9uOW1ԋ`L65.&J
Ӧ:RWz\YY/[c!tza$Njw0ӭ>+jfjS?Hږf-#.I*Y|7*J.nKN.wO?VQQA4M-%޾6nTjwud:̲vi}~Z`hHI{RFMHLAY#?qzB>Ab,]I.K.sgO2O5B-KyI'KρkV\z`~gI훼s]Pc	4HlXjm
-4J+@9fq@hnu:vuP6JV\[5$',rr_K]ZBD;/RB@vOTh
4`BBBBB'2ߛ:	ݻ{KRvM?ՃhSj=F!4O֟]Jb1sdCG [[Wn:&FJSBv$4,)9GRUUU~Ziru#<@CW	X椣rρ9	!

K=~~Nν\{Bɜ;g*>ʵCEI$l
ܓ&ivu5ի:zkvbXUB
9zrS\.WuB۷׷o4DP޿bkjjhc!t1LB&Nfw>nUXi{dzq/)ڝܻDX,&Nr?XB)--s|WG693SҲ_Z᪤ԕnpBHyyE|BO^}t{B
"hM쥥eP0VRU|QͲG-#.slK:Nܽo4g/Y4?꧍ta<=ƭ"`.}Дm}{}6c!Q1C%GN2/e^ط{kB뭽ڣsc/)wcMlan? 4	#]@@@@@:::::Orr_[!,'u//hߨs989y2vnK9:#ZB Aǖ,:::::z` -

YuM"Жu-A @uPQ){
j!
oAr)B]6n3:抪2K%Ȃ6S
m? @,@)  B@Nc(:W BtfuPPPPPPPͮ
lC~BtpuPPPPPPIENDB`hydrogen-0.9.6-beta3/data/doc/img/CreateNewPattern.png000066400000000000000000000013411211146647700225240ustar00rootroot00000000000000PNG


IHDRW?;PLTE{buJYjJPjJPbJUjAHZAHbALbALjRYsZmjR]sAPbbissy{s}ZesRUjRe{{Ze{}ZiZasZ]s{}{AHjRUsbejbabjijjmssu{sqsjqs{y{jissq{{jej{}JUsRU{{}JY{syR]{JPsbqJUbZisRaZmZej9HZZa{{{sZq9DZ9Db9HbADbj}MlvbKGDH	pHYsd_tIME85_0GU,IDATxMR0r+ZQZ)F`h(*(I=	LSo6 ‘(8fQ 1'Stc>,%k(.l7[8KEJbQv0ڕ@qCʬ aj
P
իPhuЍo*!JL
-FffQܞ3m:eKjN2rB1K
:&3a4xz~Ao;}
C3(IENDB`hydrogen-0.9.6-beta3/data/doc/img/Director.png000066400000000000000000000340001211146647700210620ustar00rootroot00000000000000PNG


IHDRq<#AsBITOtEXtSoftwaregnome-screenshot> IDATxw@]A6 ("(
jjUն_Vkkk]Zp{(*LHrx/r{9"H@!]BH` ؄bf
BM)!6a ؄bf
BM)!6a ؄bf
BM)!6a ؄bf
BM.RԮá)(/;;YfnDKk3Eopqw|P꿟Z(sٵ{ >!
ka1WK_.=Ĝ!ul&6Ye^V~QYEu&8zFV
㨏wYu&S:+FB2#/Ӄ0dfI*GZƁRy7'TtֳБt\eY)s~{ZA:OW}D/&}BXsH/UVY; L,+N١s8(PݽƏ/fi8#u4dJ哨Gصu'B{>=}Tc=|VC%lW~A8Og]UHJ@sn["2xB5ɣ6V9ʃ$ԍ4o1	Й-
5AW楌6Crk<#:Ri]RҎ]jC*]^)slR	C_Ⱦ|4fCu^e~
iXHOޭZ*AXY	T'+?itdO&?ML*1qtw4
uk'rm[-3`v%$T[nC	!r1lI:rAAMV!x.sϛN?NϞ>v7ʎ;o\cPi#+AH]V֦UQi]ir\&EIM[:x6&OFrTI̾2%u4t8}z/8]AyiTi5iO'X^hs|O@Yi¹񷚍\4ӳ(@/g;YNʒNlZG+	@6坞̍ٞxAUry_^*שݘ)NѹLr[]؆p&z#SU/zfLk?`H=;q5o~Vl>r=,ll Jb=MW1Wz+.f~4jzo{0vR8Zu詻zPd:Hrn$jo3E2[ouHͨ/fݠr#j`Kc̞Zǰ-
)?IK7ٙ=ݳjف&~7.ۺsŋmcp2緭BO8QT%&ƒ]`~&B߷NoU'ˋ9={\ȳQ?WV-{ty+rPfÈP#KCq4C~1-5xFGJXk3S%78cfF87~{k|#]17t`Wk}7g?̡x%gŪI=s:FqΩcx§*Rj9l1@ٯTCms9݄]0{=LG#5wO7tlDgTƭ
XV]lqxFaϳa,ȍKR.GͤG>N^oc/)USU|!SO|c[_`,\c+5LX|瞟Z71yߪ3紪WXX`妸AZ$0xE#Qnt~#[-?Mkh4ǎcG)4%{kD{#N]d&w1@qD?/M2kp#!&~=YzBߪ.NWvg%-}ΜҢUʶ
hnp;0۔y%85-3M3!>'/>ĩ"t7IWu@U?AVƅwgƛKb޶=q:0'.l]{5xRDbo8K[siiv9{Ũ;cܔ=L6DckǕo4ܑۢȱ
Ga"ћJu7F4޴x9_r1"lB<(n*o]ly*N1kZEw3;>Srʍt+t1V
=#{4FyT_K/zXFcIQ\8n5Xe1vNP>"5x	klmDpoIDSL|t쇂a}/^
RwWUzk|ɀ
黏oR0'0>4m} /
IHr[\=N3DIg䦨r9
	u_y\

G{j
{1z!;udGc(@T1;CVnt$_$jӫ$"_׊40o^)PvLcqvu(|ar#"αtK,qjQ+x
b`T6Pè4+
rD=cb8XX@%k4~w[S^j\u'OEݕ8s	}ӇZy7T'^0ۨ0B]tm8LgϜM|=Mm*=Ƈ;ׯ;ډ&9Ҭ3~Oa.#ǯӇ},N8eφ'gseyѯq, &z--FOD%\$UG#c?[3E_?g8t"OJ)N*94=,:tmz=RM?_m6Ofqr)+`ȴr__Lop._VW.##Ǭ)֊NzXs;Ҹϵ?E3q>K~kÜ^N/cر׈~9~;z#_2,K) yV$qϲU{4JȚ~t\EЬ=4=L#s[N>=-~f:*ܾj/0極_@RU^MTϾ);S+̔kJu,PqG)jʳGvHڴ̥ǿŊͣSXe1iY|1ڊ[b{<ʵ|i}rDzdbeqɄyF
zdIG/ypll>/ŷ]o9x5$}~uhkn;_7ɸRԒd]\;oOf>߲GxwΖ<(JwnŔD7mztW;P}?k	Us0N[`|%R]~mu
2`@P^-K=t'%OU&ElXxacBrm:i^'O<0O#[")޵*kxwus3-*NM}wa^qHɴ9h#ۻ&򿿷Lxyi)OänVvNvvf&F|$d(yFZz^k7ٹx9XIFT]V,!1ѝ5c]뇩"WN{Ql/(Ɣn#ٹ-XH+UvYo܁1ʦ,\*؟Ү#
+O{4L9r9Pw:76d԰?|މSY=HSX]Сv'˖ۧߏ=Ƀ*+i
-)]"33ffgB
Ca9.xmNgT_҉cA~L4ѹ?HM}F!lqP+zt"40hfmaQo܈z!`&WߤcT_ӉLiƵ7mZRRޅ 55|c1r	H֩"N4޵ 5D8|pԟ)t:)II)ݐޅ EtB&w/I#\4~C"w-HC",)aAt"SDb-w4d{4BrC᪏e+HhȔ"ۻ1K9*\u:t:z4NEHI<^Ut*ٗ/I` TC]	i?-/2 |'S/+*GCa zs6s0kd8s0S̝pkJT}I
3! z7uGMף0S;FRѾL}4f
u8:/l#T_FLA:mU۩T\LA6qM/I` ݵ-aX<qIDATx$>Ά)HG$M&'*\U#:^h
|GlU\6LAh=gth\%R$tN9f,9ZMODףe0SnoJRq=3MUPDT2՗e0SJNJVj4l+	/8MUq=
3aUePcvLA:a6V0Wղ/Y*Ga J,W,u~uPh78*e+T_vLAZn?Seyzf
fD)\'I괊)Hk=g3W=)Hk-&y//we V}I@'t9/,Rh꒟60}˝}MNg>!5yv`?uc0SBlLA	3!&Nt^orx@	

P7)H;@2\JU)tj
P7xbf
BM)!6a ؄bf
BM)!6iqa|#"H|XԺ|fY2DZ)FB;;vYk_RQYn
-ç;rE/Cl~c4Acl])޼v'kDҖhHR_g5&-Jtp
 pDy_Jijg݃yԷp5pv]G\"+JUT3Eq8W NoE=pԸQ]@:OjU[g2ZznS7I=K/%\FM?DH喞ЏMPԱT^&L%KE~p6O.}[yۍL<ӆu[j7U俆L{'f:㹄 :$/Wݼx~^ϙS=m|$z4d1c/
#ϝͶ]BS~Sgv|s~GQ̎VOx'n,޻ygT/C<uyGlT=xƲ?V7sΒ1\
Ѫ1/>y/!)=%̵+])S??{^Ҽxo=ߝb5ijCVEN.P貸Y?;կ}[Ta4i埿- =ٰʸ߿5Osas^wځ0/?oO_{6߸mҡō7L)q8/\1Kz=5[*)	

FFFFzPwAr98fɏs%
~8525)1z=_D
^@W>kwo MG>!oOggKqT^+&aRNeuJ\3)(lx6Iqz
	!	8Oa5kiܪ}׋+kRri[?}D[R߸Qɨj$|3#0S4fX\19Q; 1J,A;">euimiJn0Sԗ#|~osoPTuy$@pH5=U]*0;JQHѪ-_mfť
BeuL9
fI9Y45s0Ey)
3EmqZrg:U\VZ7صOג:G&=U_s~?KWv -RS)jW֝'5>X
\4!)*nzn-}Ĥq7G۱]nSiEնTLN5Vq'x׶)Pp4	fڒ=~^ܰϙy\>O놇	,
SE}^o#>l0DO'	
lp48f@Uq>ZE9U_qڶo|_7w8lJxo;2%WcAi**D$oQ30fwIȩ☻0c#'Ўzf#i-?
a~X]?'<,v5$tJ?{@٥M#U43˳wsQtG?Y*)*ee5,Lz^ΈX{ue?B%=]Ê쾛JXaqD-Sw,\:rvws4H+sRߎt$"I#~!l}k@ř%3S|Bm}:ߡUOϊ؄>ڈ4fXܘ+~zp)xP혷qy)MNFX<כ`^L
=/\;X.©\wM)jUq>$Ud*/}Qa:%*-s\ę
6(ϸS(8\%rHcЉ(|xl

@v>	űǕiCrj;OAjciE߽YQwCUe?~9ur4ĭU౏ 6tv	U%<}W-מ!F޾Ewbd//"ƏgF\|};٘	HIE^۱rDr#;u63%*HN(ZRK+gFdye20	H-ki#@ )|^-#MllعXwjzULvϞPSP16t$(i3ݠ2Fve'{"ڻus	19sX@p-
Td%WS|#kGkw?kNON)ngc)Xp@T!@)ڀk5UαӱRZt
a2B۞PrĹy541r0|>\(MQ4##亦ģQaͺv1=_
1:ߊ+g.TԆ!
;^ִceIցUPU"\z%aKKЮgaI˫ۯiYy4APrfj	UR
V];Pٱѩ/̔wbkFp,*'T`hlh*?=% yK4x	 #f(L+Z)qvQn_ɮߵ)IU
OC6zP[hBpq2
;{C5#䴮y
fv xf~=<DOA4\̔zfk 7iYYXZZY^|~S1[AF ɹy"10S>v%G9EbZ6y,II0G\dRQДD$r^CZq<ҙI8*E`h> SHG,&/aQ$m؇Frv*eIqH[Cߐ]&Kr9 MZ۴:id-dJT\
2xu{2!:]U	(')0pa`4ػRݦʐ=J( m{_PB޶$@ǹM&{wCuŨB\؟d팺|UFY;YĝP;oNAw޾-̺q9%5\S;G+2]a+Potcixk̜R1L,
y~|\IYAt|۾cBq#`Eah2)2
qu^Z"ݾqա=Ş:]JZv'E6CZH,YInnζnVВO{\_
ԕ^+F^1sy*{E+v H3{c01~T*t0"2Anv62s7D4i(OJ0St4Adw#'TxvAt\1F
bDZ[{׀TFZQ74403756֧+3oE]/^+!&bf
BM)!6a ؄bf
BM)!6a ؄bf
BM)!6a ؄bf
BM)!6a ؄bf
BM)!6a ؄bf
BM)!6?EVmHIENDB`+Potcixk̜R1L,
y~|\IYAt|۾cBq#`Eah2)2
qu^Z"ݾqա=Ş:]JZv'E6CZH,YInnζnVВO{\_
ԕ^+F^1sy*{E+v H3{c01~T*t0"2Anv62s7D4i(OJhydrogen-0.9.6-beta3/data/doc/img/Downloading_SoundLibrary.png000066400000000000000000000150121211146647700242530ustar00rootroot00000000000000PNG


IHDRdU*sBITOtEXtSoftwaregnome-screenshot>IDATxw\]6R({Յu`=֭֊֭uZGբR
2
	ٹAY	P5_^=w}%Óڍskj1AudQ#PpiO)\Qzt>=@u_){F Tj~(ZRiH~A'*O"SH37/wKihѫIC2R[wȪy=Aa̩Gv,v%SiguTYqI9.BrSe:eR3!G5 @p7٭Ry)X.#Oz8"Kpl71m)1k~1m_KBaL;j@9ODd$WQkt%L{ 駅%7<>u^އ$NX=Kd-yAGd`.
\A+y{~lS2/Zq(5NA\7q[yG'q|Ф/z~8
^o4 4O7Oy.]w|E'+j_FQƏy
^IpD{oIlVLQ&Է+7.zsDEG	Ýxt5YK;pS{4hKp^y$wd¶c}QH,
hϡhY]#"(Ei5gu~gWN(^+ŇZ<pIʟrJԡ:|
	K[ՠ~p婺SVyw:QR
Vs+42_19J\īN]l2,:'%|+$q%駯E"̈́{gx[C$Jˬ3=@i9W 1k6i{_pI@6S	pnܩߜ:?
:/"Z*1kU:(Ғ	X!Q(~c\@ؾ砮8?NGg,>OXtӢ/Tq4^
@p,m ɁoL~56!'VoW&5$XlөeSa}a5$a_HEvWU֤i2n?F1˺;ѡKOB5ePL[f~(drͧy;>'ڬE{κi%	Nˠ*cܽY>}-	;B G!pG!pG!pG!pG!pG!҇
$y+!*e!XUZOv{DBUKxe4߫:䙙x
R	˥
SU}^T[EU*o6u
-Ŷ][@N5sBŶV-F|B;B~;2aZ蘂Z\B+IJZ8
XYanBZX+MJNWZԷfÑ;2mb$	tJ\FU9R%K`Sd(IsI+gKLvD8rG&`:׷}{K#K([h&)d$To2uō(R6X:NTPQTw=_2	J[ ̈́E,$
YL\*ej	*8O˷s1)‘;2OYo'(L[gyNMX&JhŠGтV'ږSQ'+$I-dHmAbkLeY"{[*7=+;ht_/J-*kN·$b1mANVق*tB(LCǽF迄L0/OR4)icg+~$PAD2yZYT<++^a;e+(JPK2ֶy{ڔRfuN\m%r%RH@L|K$2e8rG&RJ)/2gcRkZݻwA:ZK7kNBh!uj2ӳ<[!N#ӆ#wd/?%,*lXUNu7*->8:A!pG!pG!p7K`[lmV.V22U=*K!!Ķ~ܶx
Uڨ<-Vaw!UPpo:Bz,V5UB[!h!h!h!h!h!h!hÝ&8$86¹l6.Nju>Ҷ۔y;W#g+2qS5EkY75{.uH=oJ
NՂP۴=l5z΂js/m[Jht<;h
yUʭgԘ袟Dq^ߓ5<#ULttLtLXI1||dÞpwhXm+nL#;ʢcJ7޻IfuP= l&hkHSnX2In~͉kL¼uķe#&TyJ
8unMk/\>MQ2/9LRWƖrKJടOD+}\ǖ=ZYd?Y4WʔGil9K1E?<ڿ!|ԖmL!;.-nm"ӆ2&)kȿWq%\ֳt	x1C>7k\q=/_|bOokIB7ghTp{IA	S0"D-
K0}n~kWÄb)ƒAϦ9%Z,/`1M30QZǕWnPG3
%PZڱ*@^5fc#>'$g46<	+=	0R[5שı"3ڏ*~>s&`rYVjtF
\1a3\K\ګ}K:zO_졫hḼTq2O[Wo#eʻם~OAM;nfKGjM(1vf|kpy9Dm=x_\I1<fv
L]$eOg$(JC9L-:	YٌHm8u
syFg
|=^ _xzpVwoUS	]
S|õ:miq)`NXcdRMtm7/F/F䉩}r2q>Y0s(Ȑj]ks#_[gu9枎QPS(!'.$*+::	<~an
{8],V<6gz75`~]jpy4Y$ǂJ={l5KM3Q{.Ucտ|݅wtߵWVh?}[d0M&uJX׆
Fua@.(a=墑egʀۂQV 5+n!l 4Sr܎tK~Kp~9s=ݸ<^8k!kǺ[UKN-}/hCo'Occ
wy
\W]ROVEQܸ3o7GJmIm=lsGnLѡKOTMw-լ}H6>[vk;CI6W`)9rG
ȟs۬O$);C?ҪGKBpB4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4?]crIENDB`hydrogen-0.9.6-beta3/data/doc/img/DrumkitExport.png000066400000000000000000000115571211146647700221440ustar00rootroot00000000000000PNG


IHDR[6DPLTE!,uDyx~uĻ?J||-:9c$:STR 55{caeor\CAERURPT]a;7*,)ĿJIBQMK?;k׏oul((J>F`_FVĽLP97;%\Ǿ8A

_^sm//u<7s(a^_	pHYs)ItIME
);kIDATxw]{v
vSسλpD&u%+$)j䥽XӦPP!Bj,
]^Pi-kAcfvvo&n6f;󉁊Sη@)@iDyt
#ʣ"j<'<{ܑ9;w7OܬrmoyW_sS#|yu
'geirv4ImG5~=|S|H<҆Y{tT\PV7$
vܶ/|򚛥K9+K݊ciN:y:s0-3<}OaU|y9+KWVJjʤУWҖnj9G~z	w;)VE~t ˍ9jOjmB6!УmGn}_u9x5C48(}35oVM̾M1:+3-KR6sjJG̛.-GZDl{_=l{q^l(Kd:F̑AkSXfRXmj	ѝ-~\biT̙mAaFz~6]<+UӵG-/xك};ojZc[- >ͣD8cᑑѯ&&2T'&j#mhz?|w=[.|ح]Dc=jnёDZʼnVBN_p}o{-W|wM##iU7=GDGFFZU5mez׈.x]|o<]wh(nIԶۮċW̜GFFO;V>H[\
Bg^u#oI??ZzwAHONTn%?fOLj={^y=/'_WNݳ7FoI|
jEwoLj=zk?sk5?>spe??7LͤУo\w]p?7=JQw]'?~}{YD`z
G-402<Q<:hDD!G(£QGEN>˯'GW6>h_9;:#xD	SW2xބ)Jxu&'M7
&lã}s~J(h=:+]RB.d.d.fVUw\"i_S]{4/{BΗ-4&3wL{&1|9g"tvwl_h?Zwn"Lq1~?WNzAe;9N:1ӃB"SxQG(ZDY.DlWݞ=87yDÐDg('=z kð?W'8jQ>ud^RO][n	4W%/[)ёYNݬc6h{Z?7ӛ0\:Տ]NũW|ZLoU(wʣvٶ=us:Թb2ބ_4R;&9Ɲ	mқ"붍%ԕ3źZs<*Î՞ۣۢ:bVF{4[3)!o&lq\ّC:15׼Wsd(WUn^Տ\18:Wfʣ	1~ywr}fdgơyȣ%ܽ톦X7F]E֒3Eq,GCmS{7'&Yaӣ9ss"SS!};Zd-i_]8Wsvz77k,H*7/VFm{u&kcYG_PŽ|LK`Yy:{bl:8ڳuVX-o0c,kuzsX[ᅵi=ڳuVXo2e]EY?v_::I+7YA?IciثuWXo2‰\!ѣZG qeU1+#X'pQQQBEEEE((((Ft?D(Q8  
QBAAAA(({(⪋  
Q23BE\uDQ')QSGExQQ<(£"a@EE(bExQ<(£"(?VjIENDB`hydrogen-0.9.6-beta3/data/doc/img/DrumkitImport.png000066400000000000000000000124321211146647700221260ustar00rootroot00000000000000PNG


IHDRYPLTE!,uDyЊ?JĻ:9c$:CAE55{!orcae\STRRURPT]a;7*,)RRJĿ?;kQMK׏kim((J>Fx~u1`_FVLP97;%\ 8A_^sm8	pHYs)ItIME
$IDATxE[=.ѦKj'ij#D-)zJ) \x*T-@)"jAQPgggwg7n/Ingfr`-eSuLa
k5RD
~/o7~y~
Mk/>s6o|y~{nNcYP,^'9ye3XT*5ïoz;Olu.z3Tj2K׾nZrCG6JER)L2K./va6]d~>Y!K#᠃bȳ\$\o\QzXпUF2Khٿ|_qۏߏ?m2D}j!lU_6?پUVDYt˗|ݗ6QCU6UMMElJ6Jsx(fdl(3K^eF.3ϭ=X(ZOͤbiTfy
т)Һt3{gv 3X*>=A*ӱYeF{v-_{=/~`ɹK/sjX3OTШ6Ջt{:3̰Od|{2ח8Q-[`xY{G0ݦ/QOjӕfؠO%fs9>e.(4ӥNګv[}~<6zRV׋6Ջ(KT>3̰b6eE,,~f>=s/^~ﻟ6hMT-q	Q1r3츝YIe1G񮅯^.oq>O-@YbgөD.>K+4OyxlqMnV!]0|Tw/+4z_z{Ox~ķCX+49Go<'|)裯l=[{}k9J3jMZJ*e(CKF[((ЏЏ Q4
 Qe"}zo.xpۮ1h)g]}=oMmd`jXVg3u_L B/F2L$cA"[bȫޭv"j8.{*%*FиX`%. r0a,T8WO%^hTUљ"6ӿ(##*?Hْ¿Pwvsqd5J"
kbyZ+	$%]㼊optDu&r"YSQ&FF$h*ؐG,7,Fu^k-9w%Wᑌ+ojN5n6BӋyj')kȖt|byEXFFsiHOGJ{&0bI5HڹyŖH9V3%p^ź+4zuhk݊SGi8-!Os0mgul?Y$9dDHZ<%ƾ
G++WZv9Gsҩq$ǃ<Ɂ-BZ:猔t0r]Y9E*Tj+rB4pI.F$E.UDQ0aZ+\e7UD5pg3BFA#[DŽ0hhV)(TW} B2xYy)\(iȖl!"bgy uEҶFpQք 
Q@ 
Q@ 
Q@ 
-MTI$dS	w')rԃ5"QD]$ilZ
D%Ȫh7QSnu2" k(ENYMehӨjldAј:Z]OXO/EdVjZ/FFa((@ň.#:DQ4
FaUh,ɮs"5
j8v'H6$djpI̞(X4ҪE#[s4Zg{k{"YWPMp]?1
֕hGOϲj2h]}Av]ɱ44ZWv6bɎ9h]5^ѝb;տ?ي84Zgve1l0XFFteyRb)
eZHIK~lE{h5j:$NVWOM<׼5dWhLOzR)z'},Ί|QF+&ZDc97g![̮i_ Zt|+dch529\Rްtm*/;r
4Zo7kx)E?ZoXRYhDc;&HN۔.yDO]I0mbΨDW]zejxrkvC$Q`d>ډ֕h&њs3;3If̜t
Ȣwa4
FQX0(Da 
XD1Z]BR=ha8ʗ(ZЭw6ߧyVw@6Dۖů[	ۏ褈n`@HEֶa4$ڑK&w@6DZvQԃdJ+	"+lwAhRg߰QF6=[FQE/|keճ4ڈՆúZTiF8zkTtߔմ0CSElwCuJA'7%yЉ~h%Dܑ*<)ghӉ;o|C{o9[Uί-pb]G9_WgRI~?UHF}2BQOod[,P)2
l(#wN|ug+J.m7Ҷq#L"ɕ8cJ|IHvhZˑ
nWc֨£h7$QJ-kEߥD] vp*W׭w8ށ]ّPp
JLkVY54*{B:CYAD}zvgnU[.=h,Y@5Qr*A\|oE8m0"e]|-cZ
 rXB5JrȪKxU_~{-G+=Lڇ|GCGѤ
;,`] 
QQQQ(((((@DADADADa 
 
7Z\FaGADADADA 
 
 
 
QQQ!(.(((FF0Q 
 &D[(S QFA%7;ydDp>
A4F8Q Z]%-E,S!rhV2Α]ZHuT7hE^[k,K%g[dHsFD=QXi(4
(B(-C0QQQQGAtKŜZ](cXDQFA##<@DADADADa 
 
 
 
  
 
 
 
 
QQ
J3j5. 4
C?
 
 
 
0QQA0hDQFAFaaQQQQƺ QFAFAQhDQFQFa(B 
B 
 QFAFAA ֨kdšQXFQ4
'QQA Q6k(BF@Da 
C?
XB0`[0u+b
IENDB`hydrogen-0.9.6-beta3/data/doc/img/DrumkitLoad.png000066400000000000000000000145361211146647700215420ustar00rootroot00000000000000PNG


IHDRZO
&PLTE!,uDyx~u?JĻ||:9c-

$:CAE 55{䵲orcae\RUSTRRPT]a;7*,)ĿRRJQMKȳ?;kkim((J>F`_FVLP%\ƽ97;8A_^sm//u<7s({a^jkٰ	pHYs)ItIME
7naIDATxG]4!$=3Arb/}g_398ѴULg"J-XT
ZKJT_AQZ[A[fgfwg;3;773/}gg;{swϐ?͒ϙ973wxO?r{T|Ox१Jb+_S~,{_<3k#wOxNS<{}C3<<-q	p	p		p	pl?'ֿvKkĖsnhcG9;LHkgvc݃Wpkfk%AoT>eQcyz7y>c8`sޚORVOӻ_3V|%/}U+vR>Z)V<]1`V_޷vVDT9+{)
f;գygiY/t';D?P˷FRGyq*'UH}R]M[1''ڣzE^W!vNZA/ϒo6-Oys^q'rSM6]Mv1ʿ(MY%Z[6JJCXqZA1{Ӻ5&qo,r)V
F2Ϸr?yHY|jK
c
>x`[{CU۱s]
}nkOZ=<6櫈O
Ӻ|sjyt28vyb<{x'x'x'x'x'xPןe%EͫxgFQ<)74~Z
_}Lt[͗Qܹy|yzϕY=*&3Q3K݁M3/OO?FQȜ'yZt)jxAݛ3w}ZƼˈ0>b&YoxxF$?O,ӹxMI`x9haD泝ޑg}!w4Dژ+YY)}x+Moa:O+Qx=<9W@Sġ듥Yd}*L%f99dMsXj>]UJfsZƷZ1>g>r6'@ڇ'	-x,
9O'x'xȓ[)e$=y;vsƘ74(;޽L݅m|9Ӛ˲)y9o!ߍdKx),Ҿ'<3|x>_R/oS]	Yp(D/1؇UٖS_q1bǺQRH?TBG&(a%cbǓB}RxR~ԦWrme״;YNUWQ3{76#	\Y?d6aJsC?xf</j-#8
]ղ,}y@#뫶o͑cCųop~d,m,p_
iY~Bz
.keSN=lvQC-I=9Ss}\Cys8N#cIIΓ@8yo3YyCY!!]\TXFF`Ҫ;$sטS(}\e4x3xU	'xœ$q	!Ҟs\7RiLDb6
O
}/ixto1鳥{we7&ؓz2po\h}f<`-,",HQ{|۝/H_Hb
4ݏfʥ?
۫qH?dcדsi16>6%@
-7DǯO?<䛜S'{s֎,+=g<>"_[4[1Mlo^4jZQm~<<bL-fyxHRY쵓k`@z!}؁Ea>6*8yVϟgF^O`OOOOO2b?"&{B7)_a}k:hxzO7Ls9:O𗗁tE>7'`<{x'x'x'x'x'xxx&/Nxמg&]}(0_F+82A$fYx˜Y3Ο';kƷ߆$ˬ[s|>ryRv,=`Oy!'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x'x³5ג=̽Ϭq?bdA;/>sp߰k]'W0;qnAXwHSݶCgnk_|YsJ嬽3B;7+͒r}rysY=pM3Zv%Eԇ>'OWPZq=F[^POs
lcy[ϟwc
3;ݗbo%%~9ꎡy27,!c'XeXve;7椙,lIJ('#YRk͎F8n]\v.,ϋݎ=ow~SQ5oX<7۳gM"dơڹ}	b
''MI+3(E_eEoxPwH}no4($]VX}ZoV,q;aµa$1ɘxbǶE!P(A"%rNǶ/ž?[p(c$vTZCGlLvL93ŷ2'yy''I"QW-Woo$&;&恋n2-.K#>},X-+P|K6ErWk9>݅Ex,69Z^;3I
uK%?GyjN>Yc.>y>
];_.3Co9MҴM_.3}$8..}$}8_1cpxMO	p			p	7.N	7<<<<<<7;`ed^lIENDB`hydrogen-0.9.6-beta3/data/doc/img/DrumkitSave.png000066400000000000000000000123001211146647700215440ustar00rootroot00000000000000PNG


IHDRY<"PLTEDyЊ?JĻ:9c!,u$:CAE 55{orb]\\RUSTR]aRRJ;7*,)RPTݣ?;kΏה((JoulQMK>Fx~uĿ`_FVLP%\97;8A

_^sm//u<7s(a^jkĽYYRRqPQ||| 0&-¹	pHYs)ItIME
MjSIDATxE[mi%kKPrGS\鉞
!6ʞ-ZA|R@_9|VAyTCQA+U@BANkm)|X|kf$cٙLv&v۝ɔ,dv)8+t*mX]8PWiҮnOm]/im^u's[l9rxMoW
AyBw{aNlt7/r[FFf
ޞT\.73(RcgYȝ7/[5C-[U9|}/dv
aw'fo/暈_?lɹ3O3k1_:6r:|jIt&5\NeG¬<[48>6cgl:80YJM-fKӹVR1Rγ}=X|4ejkNQ(Tٴk`,3
erI)O,>z?o,?fTPSf P_2:O0F\vVI&F<5,~o1ݽs=4cwÊKɽR,eS:%5Wi՜}uS/WwAccl134\v	ʳM'lh7.9W7~_vtYݺ[;+fr:+(RIt_~poߝwܺ	0Zv+Avʳ_8
w\7f>_iY

C?nش(P(UHQ(TW(?Y&SgHb;w:bdgu7_#d_uuҌ|=.ʫk#t{Ǫ#JF7$+;jH͉ʏ+*/UtTAM!KwP($\U^Kb*(cF|

VDd6YLiȗ;+wBuTWhW%LҁՄꊥrPB3a/Gu&ABh`1W^ҹ#ʪ7cu+ˏ%#_v^YYfix2z~TN4kAP(@a
P(@a
PmlQ37[ mVa|B	Z;91>1ƣ,GA:w`=W`=6dx2Ph#v뭟
C:[`z2ccH>X2TTwL@$PQ(gĒ)CQRcՓTFu]V"PN 3U*[BzBz4i4v!NTS/$XFdl3)tkJ%S2RaεODKX5
+mRK$wYld̂)1\%Sm*RR*S^n$C$@TJ6#Ў)4O*V
u))4^/B͔ #yJ:tD]U)~@fhn*Q;
#,a2+?]ER\d[NՀNQ$bAJ4.sJ2VD
mB*TO0Vxy"T
(bSc˷Bt,eٌ>DŽHk:h]^~0]`$]ЅZ^|#ׯ{6򙢗1]`.{8g:>.ژ,BYk+/̉!dSu{=h
BaP(
A
B0( P5ḇޯw[@@@@סO[C)hw()e6ThZem4Xʘl{6tPoPrfX3݂:\IM2}CPi6Y){)P
g
Y5䁣@)"Rh7QM:ޙBA5()"0BK%?#"Z$d7e5̷%l&A_5<Ms|$NCRY)"k`-)jg:\@@@1z
3@@&0PPc_w[@@@@@^y䳏g^Z+v@)hw^-TOSG1kL=X<#0ne{qveH]P/Pyt5Sf --S6\?Nf;i
Pi45> )a(se.!׽UF6dyW\>PuJVo>Ps7&7@pK6yԷ4[1{L:Z[0%3TE;EQZ#T6S1)R@@[(yzټ@NPi^Jz蔦Gu\x'L05}P!zlH
I}(_oq:3QOT#St]%n{S\a@K6@K6Z4-iS$;]wns(



uZ+(%:@_:ϴܳzty̋.P]oCzqI|I<b!ϨO%=xzr*ǧr[yMC.i<*-[8gO[UԔ0Ęߏu=]e8Û\kŻN7\[>@ʛ\~SDK5E;"r=>KZe1j8Fzcp&@@}h{]P(B
(
P(
P(B
(
(
P(B
B
(
P(BP(B
(
P(
P(B
(
(
P(B
@1
(((((:@)P4

9Pr
P(@)e((((((((((((((((()S
(Ρ





@1>"B
P(@P(@Pc@@@@\u(BP(B
(
P(
P(B
(
(
P(B
B
(
P(BPh3h{)f
A
Bh%PΡ0CaP(
kIT(ͥPXB((s(\
)5X.IENDB`hydrogen-0.9.6-beta3/data/doc/img/Export_song.png000066400000000000000000000531641211146647700216320ustar00rootroot00000000000000PNG


IHDR8'IsBITOtEXtSoftwaregnome-screenshot> IDATxuX[wAJkac(&g׽v\;]n-&Jwұ9c]`	u=s̜yaj߹ R4]BՁ!oRHBH!aF!!oRHBH!aF!!oRHBH!aF!!oRHBH!aF!!oRHBH!aF!!oRHBH!<ᛡw^]>G`faGmCUFiv}~LZ?ċjL#ޙ:Bb==L_.y* c6nuD.Z ЏR"?0{w`A["q
:
tٹ~70*! 8;>484O:S>ۼ7Ekteq_ہ6;8YPo<wҢ	|YXfnzqݐ
%8t@#}E{OkmڱXٺ*w4ʐ}sYlevl_ϧ767Ղ{>Lr%#53V:3MoI?|d[7Wm*h-U3ίZq]-qoQv͚7űr-{p%e19}l|5zݗoc}p׉qJPS8a^.]vXd?9xʵUХoa;eU-2|ԌuO6/m ,a=g1h^nEPDؾdۘ^!S7OU)̋e:)jq[4vkc?7T8Gaw^Nj NfiWlwfqilD)/N1}Zډ_l\ث#Nިכ4!-j2ur?mĄN4ZG29)"اވl:4P\pMhlrJԧ{{vUiɢCr_v7,2	6'ׅ(-GV%!P
7fĩuz~?E^gtNdhv#-F!\D$:3՛4Pc(%(_Z~Ssec{4 q#t~&cB0tG,1vnTg@ dq.7W+87-T4UP7PͬXM5YYXJq#iz,f%
CRi`['=ﻼGBx_Z 8{.sYW&>\Tg{k eτ.ñ3~k{]#s`9>{L}:ޡtӍ0/+S/ZO,!
վsoWؾnW&_N?A_"BB
 %F!!oRHBH!aF!!oRHBH!aF!!RM۲IT!W45ߒÐUF$Y^/I߶RǮaEQF[CB#k	BgD^173i|%>;:XaFjHUboзE{ߕG:V/z[G*%r;m_7_E}EoJݲusF{|ēܟGj;|M=J_RM&^ߵKn wq΢T2+StC)ع.ˑ#uJì}S})i..[
M{Nݬ2й<20;kKnD%͍}hy!ZMzߤ0BR2hԡjT!46fh^=n
y;6sz&ڌdY#F0^V>	zlL˖E
b>'a'[J>; Q&,}LFG,tM<2O܈.DG(ՆJ]#"pj4M(΅H{j7Hp㖞},;toEhiL`6VO~ţtiI4dd0tp\yIRvq/{gO|<̓7n刉03in6?W$ƿ~ZUf,]~̈́O\{Mp]&P%9_4`k,s4.`h.>܎1ǂ#L]|2e"ZZPlo)Z0Ւ?GAԃOc2}NTj„ⴀ'qNNFlTwiD}~)>Bj2qe7[isONmːt.!m`@}cx4B@b^_~
0RѲjc^35z"Ľyk>s.û46Tu}O:ryzmHEӏ7x ΌI^RxWElkc~[J%&*kq8Q2k{ykm۰CvfMI˗:qFdHU}FD5gII 9,^ئLQi~"F*v	R{5_vsݬϑY404M7sufaF:1~3űf#0z#EGjIt7>>D6Nzv4x--e^[ 4eC3)~9}8°)B  fۦ6|ƈ!//?EG4;|uIXJRR,e%c]w>t|&CqwδX,gx楇~	s
~xmXF5}Lmbic!25?wK+s0ZҰ6c6'
83NգɝTvv$hghFoy $pԕ+0-:j`3V5iBr"qw9];9b|z~l~/)"Zo;
8;KژheLգң#4
Un7\,aZdwj^jz6z!l]sCNe|aVbpTIzt*UTIԱlY(7hcF+z6&e4mg]'[v҇8,nJЄif^_hhռ
:4@H}W{i}~S$
x?ev<{#Cs{w"DX`ة)#sq)}	ϥAױ3oތ)?^x^rN
[rۄ	nF&[ZZ}C}8h]zEwmӼZuA@_PYtƧ}N?$,4jB_n.mwJ#:m={R8OQiޠUVtɘtOgMt|Cg~IE	U\8`OBiovz@VM>m
"nXPAnvyO@;)+VxqVB
iVM˸Aܢ}7~԰lhP;O(ȍ%o){w_R@0ILサ5G]:Sn};R2,*H|!a.N@ɍHFA!BBhHŮz9x=^Dm3]F/
ό{u.WLKȢe8! uu
7ta Lt)k
\8	E7)a_B*-l=aT1PZ]Vt:+0fdru+BVץN7p[ewcM߽_1dC)ѣks3]@~ZWW>*[nN…Oa`ڼSw%nyZ7ljKd7\T/[^$2^L24,Lsc)//l4znI
c9˗I/zQRnHE;,s[F
Uв˫^U3)il
.C'	U~@`A7DޡAe}UwlX(eFrxHh

dm[+CNIgi۱}x>l2έ}}Fë\w_~W8.۱}^lݏer%#53V:3Mo8m<4NJ3>`mqIJׄRlRw;]&s^\F>nJ$?K(cKkիلV9s>LgS5'AX
iТIՍVx ;๯hbZޏ%ՆZŞ{&>TLޫ{1pޢ[ϦG'}ŕ;3'
hsѦb$=1Aonj"t>7.>b?xq̒UczelSz1Zsc?=F6>|r;m[?69jjf)?_DJ2$@HɆd;ofLhwnMbt޶?Vo/RoI4h3u흏W4T:LҋX
+u|IIf;)SH]KZH}r\d)Rm6Mٹަ!fLu>"ʹ25Ę֭:fɯ`P֝L;-Jݾe[kˢP]AeMUPm}34ݼ1)GXTmRX֮,2~Π&W=˾Ec{6vs|C,XÜg˶N׸Ysdˠ$%#]
y
Z:yg0b{.};IP~M{5uᅮȋ!wR]Dj*Hx-	Pʦz7E뱀0t6
OawUdO6-Tܰ{xcfN))
L^m7vNgڹѤfjvKg"t%$mREDJԩ.fߏEοP.2%o,:מ[=o(롋]-˩㱢3kG:sa9qJî~P>)J& /+1{L˹}^PPyeǷ%k:M'.I𾜜>fC'ZnlM9aZ.+֜8І.Zrb]É۸?QӆAuUyW7
]NSz5c|>9.}1L
-ev=([ߘY%}*.d&rw9}"Qv|`y/7ЩN{TᶕJqahqv̈|^tGSg5`Ğ+AA!s	~4UÏ|m߭ፋI;5;Z83.K$IlC%shrj.rz*#+b1ƴw$#h /̑y~)BPoһ%3?SiNKƽܽW|+'#˻b(u	&J8rAN&fi\JS*z;B/EHg"Ƥ28}BdȔMe!k
6@>`+Q9@z
X'~!
scubD*j|+vS?ɱ8E|*o%I+]l>1);#TY_|iϵsm"]TeÕt
˸焙O,TPՆ_h~oq0Pq4ׁ<ߌzj7SæZnhJp?K	@FKakϥnɧzIc#̼xzψ13.ZZN{qn^+vobfhhޤ)ӆZ*L
ڍnz8OjHLcܠ,7%
-4U(95Q<}tזM;dr#BAk$NDvq{8#p@xu6G)ͦS|%S߫f3	?ޏRwؿA"3/uKdPn}D܇nZ̥iNop1cQs{L"8St30wNW
6Pǰk/qfB
1lc$q[!&r+_XɂT.ߴA䣷9vO|*UT~?آ/&IB9bBl P104dS=S3+c}!):N3QYvdloXcC'Rlb(
d/ZGn6FN#Kz$APPFzF-iA,]UH%<\:e<$ZFY6[4ccx(칄Kcd_YWR%=n>]=xɇPއcgN4Gr`5D6M1R@kFX}kuJe#r+E	$=ܰOi0}LٹW#:\ &|5{+{b>#ܧZ'?}#(Yb@Id{s5tvg6@Aڗ7_i;rrQ߻91vNG@yݘǦ	ne"NͼINL夆ܿk;*;b":Ae(}笓|Ŀ~sd޳שUq`FǾ&fc̵7oA?(xv-J}y/߼g
>F@4lL&3VQ8/_eJ'YNrp]_o=o@v{(潔;'h1ro0+RVW~P
rsA(}lA}>5Pmb$?
%*_glh;oˊ]U}@Zu(YO1Yu]7[pdosqqHtl*.Liڍ;GVU	UWN1U5M;]oJ۠IX~"HR@͟ڢpmx}_[]C'TeK`[{|߻iGVC?Xj!Tb@r1--A)6X$Vaڝڷ`ΓSj/s߿D1m+6H])ۘjYoؑG|Ϝ[z(zi߽N8>ԐY2X﷽?ΙR'lC'3d8')[O!Lp!QTU/ţgt4>g+LRq.Mϭj.}VYKg9*^]t^6kleH:hvMܿԡŠҫU5~Jky)~>ϟ[]Α
83%iQjo[>P*fmFӥivlV٘k9V#?Ujd[:Ap,jtv.6z1P2t~yqc#t{NxxV#f.$-Ɨ^56~"3m{Uߺmsw9kѵjx~#Χؚ
&.enİr&si2!n*TgR@W^cQf7`ߜCW}"#_Ip,Y2]3cU3޴VH>۱}x>l2έ}}Fë\w_~W8.,q_ہ6;LMɸۤY0VHeӒu_}g7d@scsVf_&*NͱbOgd?>b'R^n2[[oCz܎tFÆfZvszχIU?CT^YU*%lxuzꗊL6SG(~ECeNAy$kG8VzÆ X=qU4 6[ xժvy
6~記<}{gztytR)SĜVΑRoz턮f9a˶j#%;fV:8e괣 |Jو6agzNT1l5RB&JQl}c.nczN  ΈKSj˖
FUQ,pC&j2K>G
e=Fp6JW#r}^ipdHʜ
C\(4Jgw[,}	>o.@ۣݲl^`
c}i'xMdujgzq]'nsގ@]'is>@^o҄‚+DvMnn+xto 73th @vai@3p` -srnt¥>Y=eKM
+$:'24G*U҂9+{] U8#
&D)AIErk"VAq#YٻJfSjvSOxJN}u#ETqיŗW{'
 rK@^TjT[jE/i.cg^[:EQQ)IJ[%@r,D٩yt}3U
8S*ʶO(n|/C -vRA9^crI/9qs׮1n6+-0Z?f/]"(^b0Eo(&̅!Šui"Zn_AM*ϭ-^we8|3t܈BF$%;Mm݋gt!{zYX¶[*zjœjIy[_[\̺pzwқ
X,[C 9.GT)SY՟i2r}GF
peTB%RIRJZ>gg
@;&'@AFd:ʬfcջ*ܘLPPQ1lb
,Զd&e^LcG+34K߾f_BԶ>B͵=ʬ Ԅ4PWVC!vy(|*n.Jg~TnzFQ%RH~_2w#>S^Onl-ێGycf]?f?|5xP]Z(s|rBuM@X"?78p8`i@Nx
ÃؘkG\0q@
X6t9a,[:qH&72viJAYnV87354k7fe6i/kxM
͛lougZ]& {kYNrp]_o=ojC'֘T1oevl_+>_Ǡ}}jԱ}+UBHVMݸSUC߾&ϔm
T*BQYW
@k>
}+u~^c!÷(ǿw-~6
Xސncot+}jPا9RHuj1+yPTbb[[>+R"H(Ouj"&6N~bu}nc!oDues3]:?3j9S*mBH!7B)$!0|#BB
	7B)$!0|#BB
	7B)$!0|#BB
	7B)ʟ<>!~>0-R=B0h`_ W2x!k7TxcPm=>%f}GP&KK:at˿3X
:9-kvmwǸcy@5w;e[_D(׷ct;W~\s&yW
|EGW';.zIPlG3kw?K'jbpZP QF00IDATql`/>. t--=X?@۫3KWJfhk_~!H˴W'N5k;1'"\jJMG]ACFfJ0@ յA"7Oƌw4fNk[pQs^NkI՜ vN+/?@ʵsW.ii֕!EلH
Yvx]'	,Cv	c7
߻җ#U"9.q䮲K-=wr"8!KkǾ8;I@ȿ*x,I85,pBaa$ߌIB8="8[Ū
#
rzҕa@jhec.5%0̓N+ӧCxRQ8qf\V-`r(I(,,H
91ǠFaRۑ"YB9%)dt7@S|$`Dz3ҥט;ߎK/.cg^!T35V;:/%*Bf(UcksSH"P9`RTQ\a0M%-Ku=/J"eXX?M{y5Y141GiǾJ]^mSVm>cĐ뗝T &4-]CJ U"S1BQtYO3NۮR&J!N"hٸKSPEGQp3ůe7ՂZxܩoHV2zqgz=:g1LT)Bf#蔬ԨGCǪf~tB$(KuPPR
2,z
X7~	an(/gq^߫'Xz,@ѹ[ޑ)UYBnL^lI"۰)^E$q&j@\RME$VVes|u_S93:0tvIre@4bL1ffƀPM/Vܪp23Pr̸ιv]z{g6bl4O`{ՋU2}S6J?[y|WŅ	!m[#T'`_-3PdT0зt5Aċ\{ת}PŸlwW֑CɤԑӵD߇>KJ~/pja{A[V+߬k\E@r..z{W-1hkG0B?Zqpޫf /ֽWv=BF_]J~K:R$;}ܧwj_ۑڷI&'@7Պ}S!ZF!aF!!oRHBH!aF!!oRHBH!aF!!RMy"y`TW-dgdg~ vWQ/I5DQ54,Kv
+R`>/@#x·_`M3/ݶCoUu\^A޷BHjo*FZ!Kߺ_9,:vBu~i/D)oJXkTJպl;7&}}qPZܶ4b8:RT5-Lʹ0ˊY2ˇ"k룖5)%*(Waeâ3}?<<9syϗNhӗLF܆J/k 8GTW 7atyvbZS%68tiÖu7#7>xQq|N%~vL2"L
t^c_|cن=eWm2_4fMPHo36? qQLysuT{	؞]NDњLf"wwKON|t_w1u?#üY[8[ov@9cmJsVڄ}Ց];{d?[6B;&Lwu8k$C͌*ݚӃn)fDޛWg "l p'W_$MUM{WC˓oj7WLkՕ	NA|[k)ﶍ}3@TqL4_ꖱB^[Ը߇]KS,6"LD|MqPaQy\BD${5T6DDZ!/Ra&9);uTMY68S~A]1uo""\r&*j0Y9Z%JUeķNo++7:f(/Ѕ:@עbуdDԔ!}#G(/uв\4Zs/ˢLwiDld_Y\9ƈ1*l+tjLL˲fqVRniS'51~ˣD{/"othnnO!DB06-`L~%.MKji;`ox\͸{ѕ'mc)ˏđ?!4*)@HֱܮD,GT3]aܽ.ŷ#FڨMURvtCt?@%7(!D	
 JoQB|@%7(!U%esfR͜Y3n;0r3X$8@73V

ƾD	
 JoQB|@%7(K{2(W!tVW^R
]827ɒݕ5Ѕ؞`?olvVo}cL1BtAAwz7};>AoK5u#;+tX}s`DꋧO:pCp/7ʘ8i;GݲJo	K*_ֶY	
vYsTAeiwPe "%9'ZJgR%^C%c7=gf(1'}yӼPpQQn
cVeg+!~ΜYWvY>f}[1ckvǙ+7e^A
' <+&L5">'<@vd|AjϹe=Ck.gLrv|Xj+z㻛xC
vEDN1rcf6(')zeo37̺;Jլy^J={C|C{(Ė`goÞb砻=']D	؅u=t $|AЅ^Z*!AHD64@BlOQ7(!D	
 JoQB|@%7(!D	
 JoQB|@%7(!D	
 JoQB|@(v
qaIENDB`hydrogen-0.9.6-beta3/data/doc/img/FX_send_knobs.png000066400000000000000000000436101211146647700220400ustar00rootroot00000000000000PNG


IHDRz	{GsBITOtEXtSoftwaregnome-screenshot> IDATxw]W}2zbٲmqlN(/.KB
p!66ncq.4^ϙ9ch4[c>{>WRP,ds(UʔB>L&M,|G>g4:k郡`\|%w3!2)4!O-=
:r<0T24:yaf9isY˲gt!!cDA蚑N'M=EW+ٖo}uMq^(,2,2RjۖsRp(뜀1ih7g*]GFO$\2J	xW.h}ϴX@*Z65g2vMϢv-1J:7P,+390htwhp`tuLmS8zb3$1`Et-nm[RrgRa28%u]H(

D#*H"AFKeS|0&? yPRb@wP*9f,)Pu!d
],
](Ɇ^;b#dVsK[8\vF]爒.eW糙x.=gy?Բp5u
PE۶pwOWgǑ.C"d;uFhðx<zs%(B1N&h_!.~TY]a7]<@J)Bز,Y}~cS5ܱკtJ,6.t
p,(N'{ztރ2<(Uk%KWT(jF.[1PJED1.?x`@&#;|&+ӿ FG]tx.Xⶏܹj?`YV<Kӎr	q /\H@u-Cr]/ud##cI[n+7o$Iўh4jf,61SU]V(2q(65bL2L65JFIJ

͂ Ȳ|nRb;zF#cn㦫ofEQ0ƃwnoo7rE^y陭oznm۱Xlxx8q`]}%Qtf,SE{:l)R+RX"6AXyaoocX}}}YY(,[UUd29<<<22H$$I6g4o:`L$Rua(BI%c\&N&f/XTUULFEwr<''ضO-SJ%Inhlg(ɤEex^|6i[F༶

 ڶ=888::*bUU(PJy[QQ!mۖeٶ1U]>\:Nt];Y¡Tw-2-C7
LtrgRq&mkaR^^16ѣcz	!S y|X,Z]'H\&iVضuq?'QRB)3L0IZsb,#rxbl"4M
Ǒ8xQ`Y6q۶nWd;'ZiB6y!q^0æ)QE+Ṿ	dڔL%!2BA ,24l@	%R@)Ř`D	vsXS!ȶN^)ˮp'w}nKRic*QZL)!pL]x!!B`qqRfjdEp9`L%'6/!2,GxR?|N)묁a!Ӵfrd(m۔R۶9`|ESB1J0MJ)0Euqa6:')q6L.J)mЋX!B9'c21Ɗa
B4
$sS(YiA88	۶1Ƅ@ (iDl*O'㓏JMC?نR2uC7Br\Ӝ\L~Q
(RI&,;>ehr\kW]gn4˃mY#]t0M;wdX0\{͵7\}$
$rRzྟx=?BegfxM-~7߼atwu
>v߽Wؖk[o``Ji2dE	!T^^~d2Y^^MV9!
GX .Jk
54sB6\nϧ?@ t4\7cGFG,tw6l/ae{{W^:o(Iw	M+lr4r~p;﷏P
M*۶pؘ,ˍ`&lm0BP(y25V?_r}Mm3K<+]GBy$SɣGE#ÚVʫ{eW_{rٖ5<4vtxWl`C+\s$3t	0nt:mW]ɧ5l*?J%,(zaʕ?/޳kG:Nee<.NwWgsK[(vڢP(N0l6;222<<,,B9s),@;(fl^|#өm͠8Tyk/e9wZz `3RW sF-m[Nk,LS&
P8YcL4Ma].L煊j<^ߒY+~aD<5dҩ\.k6rIO[S۶=8v{>Ȱ'Ŗor
i믞غ9UUU#[w:~WT7MT2CC=uu
Xv5MK$===\Z˲|<O$<0,bzlіŋܼ坭;s{>fw.{8XG56Bsoٴk}ht$|S"{?C<|jEQw7_GضS|tu=ލo^j<^]S`0|@0J@_o/}7^~z㕁>˽z/|+mNN@x}B>NZqDm1tGLf%@G">%If5M~UUDa"q fY&}o׾1Mƛn^`~rdwn]TuU~0.7
C4+IkZYVl	8mddž)% QXl3WUnj';PgLJc<2<[naW_y_rSgg0JbVxw;T*/}NU].?01ɘE=]WTɲlm.1%IJ(~Lyl&s`60s-
Tg_pW
rX4x}vfFԟ#m[Lf1N
 F#?+wׯY=@QT׆W	86XTYbu6:tʺd2V^WU]++J]}  qt~wUWIQcYkjj&JDEQt:}%H0#Ov~sK<$wlif/ˊe[{v6la{>g_^~SsKi{ۻ:;N{r5km˳ʫN\u8osnGV欯<UU?{?|?g[nerc\6u^Ш\,;^(Dz$2I$]ݝYp^8r0
sd$zG?{t~p׬o,Έٵn>	H]>_x֙gXv7|u7|x&מL.Dm۞׶09!.	pE]bM5Buu-˲q$Y2i˖nhl:Gv===1C׋ӾBldB8Sdil4J0	nyBbd\.Lh@@	@%JuT*}!7ߔ$il̎KhK0ƔL:58WQYL&LEQB,BPr{{׾S}JdW]He38DC	m[Ӵt:NUUYYl±id^~_~?Ϧu	dC_
|;>~3%X Hred@)EhSr]6G<۝Rюv0w
YV"xxmq3LӨk7HuM!l6am2WΛrv˲r[rc֭T>13
ʊ:w}]ILts<6ᩦϙ|;0_=RVV{'?tN(+S޵?~z
/NXl4U]*]8ewo14t:J%><ONPQwgpIJl*ON3_]S{?PԱr
PY&2.Yt$˂ V}䎏X6IPVVq^Ins
/JΣ[\v} *v%Qjk[7MՅm`n64T5{qe*T#B?oE5c/xO/{b5' J0~	ͼǬm;M'qIEI-kllpl,z
~gi֤әR,Ǝ'/K8oP+yRy̅YoYf_ַ_S
#~MW-Ydi@xnvXV!9Y^RslS_!(Y|A^0.aA8x`{3˰P?tGZxYbYigWV;?EI,RBBek:Ԛ“9s@,uMCw9?Jv!ccK//$Ʋp{pa%b}Cg۲ $ee3ILR/@0+q{/\nFk\>N%iڶqN&E!T"-еB>N'zAm˩W3ǫ(!3)g,@۶A42B-k{(eHş<.en%/ȷg(B(Py^Fh4K&byȺyˣl&2,-NK(G$q|}C[[bD,(nYvI~&X|Rj"ڷjoGhpr'Bf<676U5;oH\J־}Y@E8bs#,\(,[>R`m}Ây"چ?q0&κx钬vwN%iʲ"F',({7/vt)-	\1kGkGFr$QF L	ƘbBa꺡CnhB.ñ dL/4($oۘbgm(sNEI]g
ds?8.>˨lu!'c62	YN`Y$:pheMa{|ۦed3|.'2EWdD2|ht$טm#*Al0!¶eB.ȲNDlI^牒'B $Kb1:;=z I^eB
 BcmYV&L%a.@Wc(+᡾ޣ٣ш(JME#l[fX>a	UFYPR׹LЍXlTRe/ܾ=;VQUu{nm[eCd2PV01ͫeZDA
/[!`lƄ Y*schP"*6]=t؝Dl,!W4yIV*na膦`_`aꊪ򜀭2p>i0+UC
]34(h|d;Nˤөӂ$)`P%òtkbz|jD״ёeZ<AA43;I)QJUdðL$Pzw8e29d#Y8$`
!,/J-6
 2uGq>W ʲċ(u6,<')*m#C7'J;Ou]|`&3	,nYpL)!#dȲltl$㤅AJi!	,ϳ/@	N4-Jys-HPwRB1B	EB;>	8' 7dR@1ƍOp$Iw5M]׵Ӻ&B3ۯr]uIn~d cT媵ܒT桮$Emx{8SJ:3Ʒ`ܺ

M7N{&J
!	424`F+j(%6rBP۲iBsBH1qH{0\	B1A[h*xe9ʺ91W_P%}vO$wmח>96%'h\R	^e+w4:Ѿdhd8Lx}e.{B-–ehohTYU
ݶLqwQ[ermojnEE#xwBmlZN%{{J"+*--MZsL]錌"CCmkBP^Q{wn{=KkMQ]hjZ3a#dV!
f3PYiئEge.IfSS塸;aCZ	%ujkEeˌoz{
C+ P@Tx|lj[u>PL1&ȶlC`<^KrĘcTQpeEM]m&l߿۲%+
(`lن92ەɤ=^04-{\\@qM)=rhL»=֒ҦRT׬4.lieXB$AJ?â(lBEYx}$ih#Eu1]n'IF%IaXdxl,16Jp{=W-C31dbRlJuo⚇~`(@Kƶmvg;#Wo|G5fқ^Nf(^OPt2igqFHeN`eY	v48DAV\˴LnyBȂIB	ul0(IB-dٸNV@sGN4jo/חxW탠SNǘ-/pB =[i<,>0ЉZt6MdZmͽ[jR.R]sq:L3˲t=Or{Nll8[()Sv^QڥU{k|?}Cr=qh\*B(B\Ў{NytLO
@
::]jdMW׀HEr"Ɏm[khpҟEWM{e]±XᇩaꄋMN'8n`
/%C(u3BarW}݀HuPQ pNC/N@0wߞS5 Z(L>sr*
WVt_`׳4ꢔ"u}yyXC,R*
L6viȼy~N~BH
plF ,:_16}bq(Jgz_}=G<-,oBxa0GU0psclY&XQԙ<v0Vz{VcU(YiA82R]אm7~uS\!>Zn^|#|ga|g/0{w=˷v;4:_[x믾}[E:Ϸ?{z:8rwSpyAn78gCgAgSɝ;yd2)<\{͵7\}S:;~ѡo0w&6'tՊ
Hh&]p>Q>ӬO?<Ʀ[o|oްʊi7o{sҕ7I'S_0f3ݗu(mƢ;N%up[FG]G}vwz'Ή9p-2cΣG+22z8m;k[(
F(+3㮏<BqPٓREqG
oPS[ww_Dّҩ<^e\BXV^Y|	-PW?c/
WXi9?PJ%I̪)Yvޤ\e

><9GBXh_+I7^ɨ9I!;apN
Cmˊ³.jT]@i[J%~wuA)FuMH%Lale3##Cuu
.9L24By˭(j4`e9?z qePƢL:U(<{W[אIrm2%I>mam{px}~Cףaq{Od*{-W2i3yP3s9?p	}z/?ID|?wڃ?~dӕW+LǢʪ
o^r|}~˾s/}O Ё}~;.λ{'vl;TW^{?rOd2L&][@|GeEuBg]Z;̘)?c6קFG7ES?z+V+eƷ—>z׽nǶg勿}n|Uk}ꚺ?aCv~ޞ_>[oo>O+}.{_W/RA=<^_FGkj%DJiOwO>zՖ/=JgR$+ʔ%	CȞ\&1ƶm;ͽ=y_?Ěo!{g'221O0ڽk3V8tpOPl/}~dxPȧ)4;;5]KR=w򯿵~cs{-Ynvj2ѬyNw.|OCb9͛xdNg{zxA800mPΏ"Jc_x<^U]銫Ukp8|b!0)пӷnNe^}~НUkO=(iZݝȲNSW9Uum|׾sroOwvo/3ǁ1m+lfy b@c74^-mb84*op#
_~7~w02?,_(\V~h6ٸ* g׎`02	}^se}d2nTCSئv'XWxKCȞR]TVd3iaQ\r3,[0EAVlxhp7{y"_8sԲ#GLg>_x).Zƛo&-rl$2l@9!\pI0^(kԉQD^kYu0SH3e^WMӖ-_;-WR42pK!'cܿzzB(T$bҲL0 øܞ2afXN4#DΧa1FF
(+`Yvdx4
q{1Ɠ߻a?X[PV^Lt\{ÇfAij_g̸^{FUu	~cU0Ԑ].7i^ugd!"i 8PLSGƛo#F#T@L:k[/[w~Tyܟ"+^NA$q6F40:n tuq[2;
}Y9,((j*`EȰ竪QUNءi0at*d`+f!SٶgמM3GVW,A9^%Ji.-`x0P˲lƹR:דɦEEQTFv,6:o~ sa9N@roܴe5`HeIEIr޼$<s#r^!2q3|@(ܳ{VyT^uMݟ5p76=oZp1˲`F.-n8˶z{/+/O57; d卡ٌO٤|P,{<8^ꪪݷ罖N'۝E~^]vn'~>hIDAT[>|ڭov+\Z'xr\m}{9|e3~u
΀ܩ8W5=G8e彝廓ƦU=c.g
ilVoOi`^eYii2M[IQ]D|u+V=66s뾽VYFG#[~^OTT4.n\6	f>eÞ\MiS xں<#bee}{~0
˲7t3O=Ʋ\*PU<73j!5u􆍛[:˰7^:o~qTaji|m^:o~yEYEa.^'z~ڦyv	Mͭ|36ڱPCc>=wB@i5nwl4LC($vwiLJ?qyExV?v 7ZT}>fzR 0_=RVV{'?tN(+S޵?~z
/7eLYb]QYkZ"66nRTF]ng˾wjͺi&|>qb>MS^^y..JQՆEK	|Kk=}fhO+b}^v{o{6ǎ8I\ʶ,m)!.AibPML!GHqBi*ڬ՘li.K$vjmu,ؿ|??0E;T-G(bYK`3f3gۺAxG8^ lWc6BQ4Xd	C1v?PE8|0~ȑՓ]{<;kKw9a㣟zjÅܞNqP{EўJ&(plvg;MR.w`/Jb8nS$E1V$H--/|aA
($Avt'mצ6?nkfRI~
xKF&~:8gfR#VQ|Wvv6$G7Lt+rlILfoqZq->{)X  Inw8o5BS{a`Z0fB
AUMuv(o)d!
ɂ`Pmf8<qmf06W HP'l%ui[$^Ej2^_E	1.]ը3E}Z	 IY52NϞU.<7;-UZuiDX+lEiK%9$
gh`(՜}̺eTOt
])2IENDB`hydrogen-0.9.6-beta3/data/doc/img/GUI_Sections_0.9.5.png000066400000000000000000004026251211146647700223470ustar00rootroot00000000000000PNG


IHDRC4!tsBIT|d	pHYs7˭tEXtSoftwarewww.inkscape.org< IDATxw|u?l/Iv;iD	M T8*Y<y'Hw~QϳB"tA ҤQSI۔ͦldMHB`̾?-Ocx!0~Ȑ#xq߹:֌2|>:roy敔ߎ8!n#ruS\x5n w)}m-.ff:Bk	\!B!GB!B!7D#!K<իW+W^ٜɝ@8sL~ZX\gQϜ9ӫ@ظv9sWJJUBq-J	dddƍc.nkUV۷}ꩧ䂙8⋞/'˲]q6
ĉm^?qo;|[ ik*RiT*
dm0`}9sxuE555̶mwwZ3ϨwߦMni\v{m۶MQUUѣm۶)rssiBG!wN'8t_|amk2߽ZgWmRO?6lٶsh4Bݮ8IXba쿯YFo8ɓ7Fl6l
eo]BT*yyUUj2JW(-ԔO!ĥ呐\.J%+Zkd7C("==]n)amٲEn4&;wi4aWיtpD"ׯ_hW_}^zu
>}JΟ?_֕m>.+++ioȐ!_Zӧne\BȍPH]H,ӧO7	Gm0wܺ~[[>j|N]Vܚ:Vɓ'E6l636mRxxxpӦMkW2UYY)vu7j^TTTQ4Liii˲,4Mq
٧a.Bn%.O ))IaJJwV[o
~8p_=Fᛘy͊,j999^_{U,˼w{'`/t555E>eYkZcѢEu
	l:'''+6Ol2m۶
^_tE,txɒ%z̚5g޼yV[j+**Nj4̫l%B3zfÆ
ע"exHv?j


JΞ=[yΟ?_cǎ
HįZJՙeTׯfffn߾]VoT[oxҟ7ȷl٢Wqر2++K/ԚfM˗IzmMMM[nL0TVV&|g;i$ӕ+WJTe}dk֬i֭[h4%G)_nn֭ڜs=Wk0^xFRR288ؖSr}U|7M!QH]'h<믒,MAAAm{k~i.T*_~eZ^|'nmnٲEۣG磏>
:Vŋb1n:G\sI
fիWc1+++K.UD"~ӧO71L}.׺r	ik&L8ˋ///.99YT*ӧOK;܋I6
.lEFF:
*sI:vZD"qt._Oo.X(Jt3H$իÇZF+
6T:%!ۋGBb<`>{$##C\r4yFh42cƌ1˗;<3<Ӣ@ СC-@}7Ϗ4i)++KtQ	ػ.^ͤc׮]RV+6leС-Ƃ2$1y}2ooowVɡ%!66z}Y=*uBK,ahWWW\pA?Kw!۱cL,!8Ӷ̚5ؼL$~SZV`?3>}q۶m揟?f7WRRhHH#
_IIzѡ5YZL4m8t%[|G2B!u"`O˅111!C}
Gsco'+°0ۄ	ncLL`ˋkߍZ1>Wؓ
<#ۓٳg;ap'%6@^dff:}->}Z4Mc0/\ nik[UXhoӧ
_gҥK"@{xQ\z~BȝGB			{6117hEͮZ\6טfbdРA֗_~&11nʕ홝qܸqfT?~\r[U9hj6dʔ)ʤ^{=H$رc-]ZZxǎݲLO4{ǫgv$gÆ
ڴZ@:	B5]vɝx8M+"D8$S[MM
]B>	G|Gk׮͙3g
dM6).^P̼y:3Q{լ]Vpv9""}Wj8Âwb)e;3&M2ָeH8gopON,ZȰxbC{'N5j֯_oz1֭[e'Nqwwн;5BIIIʗ^zIUZZ*yΝ5O
bccd2~X,O?$2exbcco1\M8ɓb뙷z}`_[`ҥ)))PYY)Xl+Tm$ҽ%%&&cbbׯ_Ǐ~ٻ[o^{M?o޼"i|&L3zh߈+V::Hkqc\\Bp2/../***l63=   HTw}߲i&m%K.]ZͲ,z`wwS	̙cXzuśoY
6_R*@ᇺxɌ|Ã;ytر~j:'hʕ~ʞB}!T*?b[#F07_"*饗T{쑧#""qƙ
B8ۏa1l8ZZ=1226bsxxx`q#F07_7->>>܈#-Z$	-Zd.]$>tL()S?ѾΥ-6Չtbbbl555f}Zm]paoV1bskKD-⬯jMpppe3feXU;HG}nVTTbccC,ZȘ.zW[ǽ5Z׿ZV8[}QclluРAjklѢEuF2;[b޼y#FX֮]HMMk4a>}lCC'Osu<rnB!BnGB!B!7D#!B!	s- X,.ӔZ!@nvCc
MI w;@!wJ	
|ٻWhRiLO/LOٮHcoRձt{,*9S`bq9zwL %tsrTVjT*<ϋnowumaSX,h	i&!nDKuM1#TKy5B0WTw"Rӵt
ìB{
ӅaBn݂hftB!}!M03~F`%sy>//Px'XnBCl3o.Q'X'ekfç,q(i=o7Gw2l(݊3L8P(FZUKz`HҠƣN[r}C!Bc~QZBw~Fh.#UzOu\)Hj͝
cAh@WOcyFHBлx+9bA
OZ\>%V5Ba_BXkjb`/ܣKAxߡ_O_-1`ccy3|%H>zA/^FoII@AFbqAAߍ]'ΣGO%`9Gi\K#!ikZ	!tNE㐸t؛Y=9ۍE B4bWv0>5	a>*!oFu-Jb[mD FHP	شX["ԍl[p<2f7O"Jx%,.;ᯆJU~mՙl/US!T*FhCo"k0Bݻns(`^EyH`"E\niV7xfo߾Ϝ1̜eUF2OhE~\AGaH8X4Ɠr,
'’H;{ߒj>`2r{ʹ-(_S81g~;kԡ2u(m뀑 Жcz\V	!]ntBH7!TH%z7\A~v!J,*8(+AkƉ)8sY='Fi;{'d\2g8WZy
s_iRK]4\P
njw0R\+XRwM
CCP%BH`29bfB
\B	}KJ!t
g~5@5I`Mҷ7_{f%>k^jIo^gj)Nt1v!϶Jc	!tJoBVz_s_Q%w';!FBiSy=BnTBbO.Bi򨶱>ên*uu;<BDXHiIJBWC]		!BL`DA]07iW:BHHiYBGgID߫E0"иGBn),/tu;ad	Nj!|l,!g8_
fP멦;B!Mx2:hGTU+=u.wk1\!TʡPDP+DL\oJ"A"MMq!R)"ո=LCMt'L.]	'Qs̶ZSCIQse<{@Nvv؄a,{o갺j߀4$u#:34Wǐ	O@hJ`2P+Frsk&={Ƿxd1vhWEn#ާ*';o1w躷f?Lx
+G\'WP:Q_""PZsU,{賧U@p(<O
T2O	V豽ƊcH8
5\o?QUշFpώM_=|)))Meζ[l //Ɏߝòeːp!99uL9C1m~8w8ߊRy#nn+KhX4zgcI|TV۵}ZyTTVBǞ8f]΀ڍ'j `in*y,)ltaTwOȥTjH;nBFXD/xyn:<^7oN}=#Pmd`hcm%%eLy4" >8U^]HII+Idƌ$Ѽ=?GtHGog?O?Y]ks^vĢRoxN;kݲcwfc[~Q?^3r;wr- 6ar+*vbώ[@oЉJXz'ătż)
e!AQ?	^ƤC!w=bBپλ3KE<`tל	AR*0/G'17wu憯D^
C]qݖnqr3BU^>hRxh/nRfhY[s]ounޝ˗7h/c86Vܰ,|,x=tirax+Ʉ=9i.6.6mQe`s=DdDZv9}-ܟ8Q1m<5OH4;~,s7̬i@nvK8ج,VkQBń>vM~z^Mť<
,ruC)٧G B%5/#|T)nI$ُ838W~"slW	WyŗNf+QC&
~;V̒o!E4(NУ,֣zOeAfz<4$%'4E^)Ϟ$ǵ[3211B&beiqr6,28v2bڌ~FhȫpZ9Aikxf4h/aPF5
f T@<X#(|d1tBzHv8

9IuS.qQHpdp;2mhO6)smqYܹs8w\<MDge5f|,
sv&IP~ ːH쏱6M%AZ?	a	I]nfCUU1q=B!J[79.>~~}XPW[Ҫr,7gmH;rdQRyyy	U+gpb!.?^28sZc0;=,݊c[j0R/T7,EOC(UDBG#KM"~<|f#7tW{	78fWA"j`"|W3|/83=Mgo(cR(>SڷE3 =|u(<pK	6~En)ɑw;Dh9qDQz}+C<V?8]81en-Ay~&lc1w`Mņ!腩[Qv9=Jw}MM.:i< .R1VXMV@*Y$17'#o(0A&П	_8~撹Izr~m:۷:ߍ&8hO+T>
x{Ⅽo04@m{`C_Y/b3K7/7qFs}P^׮]k}&x˔xm'ZdckvtQm֥y=g~ukk=¢o	sm>x|撹غf#b&olxœɥKuF\2$5:Ǎ1s\W[ۙXnՄ9wLن̆ZvYdYVս0;\4J$g΃`<8P=nb|LUxZ\)ouhʃ灺2w\_ĉ3Q[7
/|9OǦ_ׯ<ֿ5w!\|	m{V?E(__I~CXߐq2^s1aS&0|q2FEB ba7sClM TQ`BmmM~|Q[C`c68ZMW?Ǧ)3~0xp)Gbp㷮O`g߷l&h|7=1w$(MCHv7Y$|AjI&9{4~ay}tD+|R>#f`}Cpxե3-^ۺȻoKo]WM|atwL,jœ7GErXVJ\m̸H;jأeadS#1G2.A1~`GYZ%0Q*GҊ?6y΂Z7K(w1VQCйd2Xk'd,֭E~W@.oXj	7^Ed	0f?(_AXr
<nl,IyoV~A
o!F-|{Lʞ~@	
2ԏ.kR\4${(DYME}b1|ks֤0pv5_R

`/#A,
A"/g[cn홟!Mxaw@rmD~7cNZݣ.i1,_Niub:s{N.~GZ-Nˎ!#t}݉uluYأczz^-#7k+4(.ȆP{*cOܬو!t̘qⅿ֮mkkH=IY	sOxr;&̩p]n@7[(mhZm`
E7L77a][k74aNK`@@9Jnjd-ŋ&hlXXX؍i~<תm	̪_"<,jRf01gTr'
Nm8d\e0!ct켢F^呯n0(ξ*eK_opRf#W6+?H"	C.d·va
yca	blzbs2~5%9vi>G$B6d66+8[CMZ+/flblYA>˱"%8 H`bİx/T6wO$<:ݥB_|
h7p_ b`cdceA6"Vx IDATĻwx;5{~db[]sUlݺ*
Xa~vJ$ꪘByE~e1}{A4<2k
.\R<_[<
]%EL}++Ğ9#CEJpP~[F H($WPjq&%.\Z=A+Fz
-d^rj'^@$¦^`ml	sYd>&>nPyEe={4L[I|8{>A0;5[Y8|@ǿIQK<˂og,kېr<ƽ'"$1RS7V,=pxp66>!!RT8}3B#0њ-`.[&.ӯ_/.\ڤ^6gTr[C*]~
 f0Bd
E?qQVb*b K!!Đ%(|%ޙUsYe/IlvV'!@(;	--[F̛ΛY^;0ig
R-CP({$BV;ǻdJwyȒ%Y-y7G{=Wҹw9CFlz>sR
חs
#{NقزֱjA.K2lXbaK0]O!U)P"]"K;qQtC^%yV::+B(|#_|}ғ[hk)!SZ5|J`ŬǨؐT+Phã/˧*c]㿥tױ:+99#OD\^Eeu)g4p헱̀iFugb? ɠRqӃemفk{obDЛߩ
30l5g~8/8> VZh;	%}).5!
l5z}*0},*M3_,\}<ȏ:1
g389~5KQU*7Om00NMߋنEEs*wW_}K?
çK?觓AVzXt1mp`pt:N`}ii)>`ݻglٲ%-b㏳xVg#&LtUVMaBk5ſ7<702m6 cˏЀ9/<)[{f]l1z_-`Nd}"'|.4Q|YEUq4
'G}f@=h9ƐQ${hd$;*\}Eowc+j?%>|!#3AJvfb;IgY{ӟ+tc*Eb/F}Hd+6U4EF2;Ͽ
z5#5/A@@2Y1\UV|BC5?5V21	eaAr(D"Vm5v͉'X5ՀSm$dM±|Ħta}t$+ddbo`}^S
=`He 7&v_&])A5΢/-.SHV %HF,H
W+dӰ&%<%\^VHd4O/{s -=j"sbR+-D/xEko7&^M	DM	_W5|\@'hhCG/WU1HF#UcpD-_u5m0ᮧfu]u4m|0AAo&!xz1`eӨ6z/Q\r.tyX9ESF 
0'4	$h%OPjT{C2YZ[[ioX	0'Vȴ}'&h@X&h|uDID˴̑3v7De˖:xx lDH&owO0(?Czga""Qyl{w0=@@_EXHToJ^^.VGG9vdw`@Ol#/J(Po6zQ>{]-
;h7_#7V;:ߴ׹{h=B?kVUcN}0I?[,f(kCho	K]]_b@7xc<ƋÎѨJqۋ;PomӅ!2`Nq&%,Lˮ?􌘣0giSYմfjv*i4#f0(Nz#_Fuhc
=(/V9/YFe ANn]a?sŽ;@F#2o,r4}/~vgb8Y<l(mE>8J#ksqp}ӝ/mɮQ%xOOo6"ۃעTTMQT/z*С<|0o Ur5ׇkq"|cm2y:yW{Yb%mzuaՊa`0!!WE^nΨ|ALMӑUUSm^n>|SRjueΝ;ٹsgXݻG8d|M7FF^TpzXx2Q'jPi6'ʣ>8q,@0GMMjD]$##,z{'ϜH˾'ǁa6B7XΖ狋O[ݓee.]UD$'grfeu?ΣA2`1)]c_쯟cD#2h GA誆o؉dϮ7ygͦOQxήh	0^t1UI:;z	-)+ft:t#/ёt5QbV;c8!7VB{h']'F4:;Zx>y/_>i|=FI2U@V_qJWoѡ?@Gg'W-*`2@;yX:ES[,oP}x~Oan)1f’8k>[Ӗ	8hf^7o422,;jr:0Lג~Z0=Njwpq>w'ބǞ@ 48N9hV\3}se1b$kKo#
n5uxMT}!-機S??,_| >o\_WîZKfzfe	8IfF	YQ쎿p=;Eq?lܳe7V͗LV˸UčF8dbIժ``}NrJFF0gLJ?dfe5L]3(4`N{Lh 2_ LF>o: >f,`N2
*`5iDLDdMW>_k*>uāZVmS'>ħ:zX>`m 7fpZVF+ҡhG@j'ƫh)_/t瑸qPLKs&'4=wݮjbTvߊVl,lisOs%mZ .f,`H_i	(jH@2`z2쾯7:%OeɻJl()8נ$Y!"2FDQUU}GU!i]y-UU|ְ<ֆvTGSX(ڨ_z5YY//:uȴU^-78gݼK>ͨ6^OJB4~%5M)^H;ȍ׬ہi\ݠBDK-xqJz]	/`bcn[/f*~'e<"`<2WV@kK׌3nfs//
 z4#vpːGIxoikc_ȑpi;>}v{ZXzYEUٙUbk"[VD>y`7'>܃%ʍװj]ܙ&m8,x?bڋo]**OwW/95w,|D=$DQijkŚ|Kz&n_/Gx'^}y'Wn{Ns\"NaK&=,dttMnN@ L<~wx_0]pC|x1R3Y}T^|CXz\t}kV{8eQ:
kx=xIoCau/=(_}7;*=GQiٔ;	rp&
LqF
ygDG媭7D*
*^/XINQ/ȣ
:MYNltz)˜מ}2>w'xUT}|BY1L3d[~#%G?jw(敽ȲEQ~]dWpX^^)v6]	syɟ*~ɏБHNNDF.gcc `Nx7q+`@o,uuGm7%
~.޸/ûCyEnN˅of9,"/_j;w>x,a[ſY`O۬svjl=L@"
Ǯ?&~G_a?'8.*_WPPwAZR38uG|÷|FDT|=:ul
ήVVEoO7G&GqMWW'SZn
3T~S݊0Lx<nRSq1<̍7ȒJ>/`6+W.{<Ȳar
R;-s?97
+!>|q
+jHXF#P@O{<Ѵ8s(.$c(+7sF"Q5u^^HNZGjՔ#{䄢Rr,YnxIT%mM`ڪ>k*ny$ZOF$+jwy<Si,h	pz+a
Q [̖7'.<
>YR(ug=}Eٿ@_uU% IDATu@0>Yg[Ja@0[םnZBk>O5;Z0۩;,p3<⳸"
7ug9}O u`	(.Mfhu5		k^ʑCͶyA*C{[3__PDO>+WR{ٖ!,(n9[J轢k33\3Y.ijOcy>uOB tl+?{ĵq[ @0m蒤+%%%vi8	.*@ D9YR)(Sg}_-ɕ˿p\>Z@ @`[
6fIk=dci?uq6C!s@ `.b^kR>ۢ@ @0gԟvhH @ sAEb
V˱-.L]i@ @ +|wݠ0$(3-M
r
@ b0[,	GYqXS~J&j*$a4gS`zz{yčijJ @ X
z+GGd֬Y7%fUѴE$L,(L^^ݯ()sǴ3_cO>MƐ=$&o@]B/63A/Nr)szs(F
S%ɚdHMmlt	ԓhu	}~DsH;o~}7yLgeN:f[FBlNfcS@ @?yDŽ:-fSؾIS|3f
R$&/q&cBdl 1}3զD턾	}&gLoq[v5sazzzNDwA$&/q&cBdl 1}3զD턾	}&gLoqmUm)Ϗ~)s@ #-ٳgg[Ƹm@  N@eY'_?ƓO?dك``3x?y+p}.=?:;+:l0B*@ tr&颲j+Vgoz9͍u477Rvà봶4Ug@3U@ @ @<τ+*^`Uj*+W?W'F@ yp'ic4DfVNĶ-4笶\@C}m\u^uC
@ #ҫ[o	xA-W+1:N'q
@ p,#{
dك*
@ <#4M`0D__lȊȠ{Q @ Oq`Oupٖ1aiS<ϧmMƐ=$&o@]B/63A/Nr)M<#"G…N̒ĩZ9%Mf dƖHG@=I/Pg!KM0L@苴懾g
}GO]8_sy҆WHA47xOo

KgQ@ @0p18wkz
,@ AشF,CEu${\&Q@ LJ<fI(LVRt@ tww&l/
@ `\h6ڒ0Mf&39-ki:OuTMP^@ @0wUø)+jHY>Ԥ˪^EUժOh8}،m2-WjOBa[/v
:~]d4:ZȱlFUfťK^.ėC
@ "88:iu
̘PF=üy$~
$UU
:)3Q44X4F;ωl̩ؾ)P&@ #G/tLo例B{j0m%ԬAsnׅ>]Salok#77łƧ㕗~=|q帜^Idmf}[k:=֍!aI/`iQ&V39<ߣJ2kg9z	mUM{F6e%%:zQk*Y,u`<>r

 lwԷζ	 h19)Xv8^$3ygaiG^1yؓ$NZl\G2NVNy)HBGc=zȚa[˱:7ddaO&ɤv`x)y+ȃtwv̓~@rbR1ARw.=\rR05|>Νof7׿&{aQ./y!5d=O~ف8vfK$D#xtTaONLkۅ~`G~A.֏8ӧbIˣ0䑇i1׿lx]Br3I
tF2BE’yhn:iSgG]ǽ_LM휭
sknw\euu
;m@Be:K`oH[JީaWsWQXt9ѧط]3L(: y|~#C"|:[7)j>'aҮ~;|+C24?
^YFU5/jd'f=etwZ{˓edYd~=|W&#Z"v!2׃Y61pG6l}1^LDG$:*梫}:V=-)q$@G~ld)fpEvGn.YiNu`_9Hwq^9$ɀt|H_Z6j6Z.LF|Z0d?Hj)?Lv2:<>@7C2F#̋&Ic~Bl*vr^5V9FjTn̅;dF;W}mªшyQ$+3;K-à{8]<3ŸΣ=Mzήv~Nr
?#׋OUl^/K*{x/zz-`pɥI	;At9t?s
M_ݑÀsM't
'Gq!|َL9	tCf
S?p5w:xZZI]VĦ̸u$<-&mb̨b)|}R(۸u:ʪ"F.`#rvO#g5}wd!`1vᄚ{KZۍM,۴M=(f;y~c.XKQd{
NɖMIQ1%ej}0qƌ*.룡;dJ2Q\LCѢ,<{ٖ3%H|VoZK?r1OyiERP
8r9?JVoƷ	k6p~eT_FA)5$syԃLJ^5.aC1)uE=
SUTEEzdL* {BS1(XC륡qލFE2[d;L{{;)\^3MUߐLdQSLɣuooYYvVfm=>MKI:[lzu|xAAR狼݆:4?+H(Eh@2;L"3vye0H-0H/UJ{;#1})ˋRhXFjLRYTϑN\'Y*$in;L3TĚҒ쬫3ݜ9]GAn:)&6R(sQݮ墣w9%)#\~yT1%W38+/>Crdם<5mGUF~`Z4?TQ슭TU_cG>d$'Ԣ*v)	Z;=n^{96_},l6[XYEYVQͶwb;ٶQ;oF)\QbXz=4uB:>u!MtV|^dY;$*xQwg&k:Um9=W@GYE5e1H{`̗W1=-hĈF%Wq	p|e=,K3!]P
l<$5wp`%b%ϜB3DJ".d/pj>m*_Vc>3BW\?~	5*{.{LYU|l`ti&T&j
s'I04ۊ'uSOfj29FIYd̛~B]zIs1sGY&Bو!Ɋq|ZƳ- YYd4as1$k29?d	Q=)u}^/.goIi9%aiV>qݭq.;,-ѦC)#vۅOQpɱ*zX+vO̒r?r!Ul;8!NEQQYX9Cv9]8.!ى
Ys!AEw:뛚NfkIj
YYxpM$\ĐL%))WPsMSbH$e䑗iGpb-*C4;Kd[2+FɄ#+y`!YbexZ;H/,cْtNSfFHidYT{{j%3޻{>FR}m\͛`@M"5P_nUsJvJ֯.wh@jfMB͆ې
v
+H9۝s.a"aMq1Qic@c麋(tsP@vsS5mhCBza%z+۽.%n`w1Q:qap.C2wGFJ-I]Kɤs*5N!p`Z|uPקBfz*f$\SoP{NC*e55TgoK323/՗૴bwEmZb@IRLٜƫVa8Ml%&Rs~ȣ7(^FN#`7c2"Xl1i7F8O+d#ʑU:ph*,[Q/sm2μ4{x]CK)a5|8{Z9	zislddÒt{[os5SKX5KlFX4gQ;pMM*PԱ8r(]MaXdEkne8QsOsOs2JO%3=obdZNmh)%ln
+}4/@QTOk9CNcQqf.@_G9ps`YWY$KoR;cL!)$I^zzO]C3+I3gS8^<@Ê1ĘZ'o8ARrX)Syϒ╱$j{UTU9؏5wmm.^b9;O4
u}[^M___TajDzIJJB6$UMU'#PN(qEqk	3?Wo}`ZEh@ @ Htww16tmqF5?!5=\JlG)=Ձs?2%>)7:pф.IA{#C2J|ՓNJjH @ @ &F=>sRQOZ@0Y9#g[@ @ ev|bDŽ(!r#='CGklK@ =l	Qx-x<^S36}?t8rY\s7^QI4VnNxo+ak%Yw$*=~/<ÐNjWq_3sq.{*ecijj` }-UUoS\\{ql⮧@CE/QD%r-p;Oe}?N`(q)Ņ)xw$GIⲋ:Bsc}6R
KJJx|7b5xi	Kˢk7Q{\xuVR347[s4ə,.!y}>50r,%iYoކ@ `9xk݋ok7ccQlڐw4Zpyqi0Nd)Ua]%ޥt>,UB2ٰ	~*&aɪmI(/:.ŘFfQv&z0H@jl*8>w;
f	@ ##Օ	vƘv3".޸B_mMZdd82@ sϿsϿ̏<"$		U`갡r=hKXzTڪTe@/=.aNWJE)iNޏ]uI1S {N*lOoѸl4Um8BЗx ~}=/t\`fy4QTZIq!y4S$3/q=N5GK\I93c\vcnÞwQ_`$r9)H f ]p*IF6'=NhHf_<¦X,]zG"VXq>ZOZFYYn1$r=Tn'Z2.kR`3{nOlE
0W5
/^/6AƺEo@(s-nzv
`NbḦa6T1>'FSOvQ_mu-V[\e	`O6yh't҂`pp|!'._#?~?@=}/`B_xT
]u=dC6XK&Q}c]UUk)#BD~ 	}B_${b>éCUǗMfHljۛXVTV^E=5頷dͶcCon.>{eLjRZZ6@ee圝
gxH/Y~@$m@ -M-wz7zmeSiS$O H,S-E 7e0
;---o~kC]],\R߼yt9L{qCS|K_ɓ'lTWW
%ot&\m"IRbOMC.ҹ@ /Bu-H+"3U	GUVVNl`|Z[[hkkm ~;z(r<=r%|o~X0??_yLs񏤟=oݺY:ߗ5u~'3Qhni)it&2\ $iC/~agd_O~J-,,tP/^Ow/|1䔸گi}uF_U^Vr
IZYBӴζf;LNgV]%wǽ$$	$q@~; r?ZAB-GN'qb;nqzeW3CjU-ɶ,;7}DgydOuu5o[Zog$
ɯ[Ξ%Ź[#McI -.~
D$9s1+m|A1eU hJGs5Umxt	de`l#*tK7-R)IX7![‰5+#\>ZG5aMeQA!"8ъ]!([ng0HLLq|MÑGr%''[_xyuHN>?~\)**-Z)oȑJ~~q&mɒ%f8x!p5h֭l6>AU5n}1von8!))Y_vz͚Q<Ú(455)vR曆Ɓ.K\Ϝ9k19}gnÉ'(.\mܴIOIIv۷o7Xl~Cٽ{o>W?k<B+ߖ^^0M%8Et2gC-&]<
YuTVѓ-Hͳ0betQr=wWg1(go
=s}|a477+GMm_ʘ|@ -[|Vşe3ʇn\UU5O>]LM)3-3L;zTG?4[?OmTUG?'?I
cRRCoiuuuSB=77/o1r_"hLl>!Wր0m86:/"2[X#]8=]}emu XϧoXFwc4>q,MO&#FG4_Pr5jNt}MK%ʌއgwyM	!Ǔ+Spm<
	MzӍǏ+3g?#xSN)?LR6od.9~?RCW^1G{޷A7=g|};~u[of>v2o<?apLNoS9&truיە]}W՜l=_UWkf;4U~
.\(yyywMScdd$]wf?Ə}_|)qӦaS.\;yyziY"wk/+EQ.dq0Oy =9,]Yac,Ip^.lhO3RR(`60rFѲ5\5ynxW!B~#Rc9!!뮿^]bq&p3?n<~?>>,}
mXo9q0}
#//+Sz޲+-SO=e~gO~;;^oZ	+_|I[:֛nJunݪ}_>]ꫵgy6`/Y$lqʋgʕZllsW\9بW}
4l`5|o~tƍ®.ni߀(hUctBqOd"qzwc=ނ?lY_g*+oat!1ljt'8}V+
 }ռK@jHT,|
{Jר=Q{e}nSIIœOO<_:Nb_;sە_}[ps?p=_WC&)((?|m_{lb3؜ÓO>ax|XYt>oF!!iúN`6?[lPˇ!5y,V9yfXTY`ca&ddwytQ2Sry)VDZ9q~BG]V{g>uu톣ǎ*򊡭U)))Qp7}$},t筲BkF<[^hmmQ\.ϙ3b4p{.]lē+뤽v/mkFbbB륩ImrkFcOJTV6׮];&&&2aLjHΝ+_nB!B.i1nY.7`JWY3^IԜ!7?Bb
%P>{/T\$LɖJ-B#%8YB|swީBﬦO=?JoFjxhiiQrsGJ<))IRUU,X`{[f>	)i#~	dfe銢LMtL4EE#VֆtVt]'!!חsi
1֝@Ր;iipB1m<<F[ku!G|O5:^@Xrv*o9@5/QB2DO;;;#G֭[Y,L&@OOψUU

!>|nqnW.DGۍۮ;>j_"1lt!bnݪEDDP[[Frssuبd"''[u:бJKKl _fVn6xb;'׿lGS5t]Ca/ǣEz͞5343yr婧2[.4>;_źofEuM}Z]zsN~{n52#h:8'<~sKJ)<_fagZ5qqq:Ԡ^=,Cw+9vL9yb0;g޿a۵X;/λԇ~ش{.w]7͠(h;s=g7tC34}U_JO}7nڬ߉xǍa}9++Km>l"[?!?Joַwmun]	GeC;v{Wh6>Of[#_w՛y04\ݸ]#Ib*Y,&V۹!.{Ea#Ew4|A=ܣϛ7O9PNٱcr(
#a.\泟U_ݼ|m꼹
5n6oެm۶mp#Hx3##C/s3O
s+*ʕf
~Kf
=bw2,?og3ڵ۟7϶m۴?oeشZoM{s>i)-[4?O߸o>euR*++4>#n[5EQ1B1Y̑U?
q!tvvuB}?a߾~Ky큉E-[/}ի	O~\po~SOr}/}idǰm-ZaA7:RVV,_B#_)99YmԱxЌQ5Uf"sofzǍWFCAp͚3<3fctUVi~C>hT^{U_>t쯿7u]={vmpnY/~He&[!b(aͳS1Q;QXX@cS˥KQ?b||+n<
JSs*YYzfVָbJyyS }{lt2mǎS힞=jHJJg͞=e}Μ9zDD[sO>c#IrVBqt73ojԠYut
tSty5~&r1!!6h½lNA5TTsHşێgTld4b0(x4ų'].m2f#??nzo[Zog$
ɯ[ΞV#?ƺ#7^
lԗNJUׄMo9$?֓:pw~>zoCzkFl+MCξKuslV+d5c&3mZdXx 29+YЃO7>(řd`!@gS-p\-]6JgAAxIRv5qb${}KѢDƣBL7U5k)--5G?4꫆xLG!re4<=:sukY9/SD`ʚ•ɎPQDԟ<ā/Xx0Lz.XCQױaBl]dļk{H-b5ˈoN%&S.')Elذw}:,ݵtVTQp; IDATpoaʛÌX"A4ouupBiM~fz2*-4??_9
!S`a "lhXddԨ19NYq͍c͍aZSoc%laíaᲫpyopu[~w8o
fq=fUfUm2&9.hefJ_<:]s(AS5ªހޅ]oA
bT'6C[[G)((g͚tV5::x1j2o&XB3ABLh+2w*Pa5x-c[\E^5+hM
-O,>l
[	W'w(n|O'Gs#0Pע_oZ?ȮSC@!+oP3?sO=}҃и_9:?~@?.%sx~?*T%'3BbF̔5y7<Ԁ/,fNUװ4'xƺmw0/st]}({xɢ%%hh芙$ {>FWNjCFZN[[7Af4`L"l/	!.IGG<\ULJ-i0(ӔhyP#ao5i
y}3bbHO%{8v|X$g;P`#1)wK|230ao(I@7cM*q(2/.;&6ܼ	q8ގa$֙l~9)	T!e6Ug3uUԧeHpb	zLX3'p/!h9)38vfxӼ>-dT
A4/TBd,̌`TPtT=C
!q	=	y=0iɛ-P6JoS3տB+m<=~ۣ64o+e_lˣye~vzbG#þ%Jw4dݔzKwHGε,5O!B!F3{9y&-k,'6Z^!B!e)|œpcF0(ҞӃESP8MpN}uss!3}ɯH~ے\iMpɯ7PO5c/ 
ԝ9k	6}g8wNu16Ѽ\&H,`U\UN)Hٳ楚cs\w,3,۷-V؝|N7P$mI~&O0ϙ 7wy7ϙTWsQ16
ⓆŒS3QC/s4TPΒ\-
&ܱɤedBsS?WPd"ɜ6>HꠘwѪFWTLr\4f%66ـuN(L;ܜv|B!bg哛_<ր0m86:/"2[X#]8=]}emu XϧoXFwc4>q,MO&#FG4_Pr5jNt}%܍%~ܜw|B!bR*yha%=3\v`ƳAzt3sXz9ǠY0ͣcȔL‸uaˬEj̻TԾ}CGy%χWceP	k2?CϟüB!B\b:ވG}ɜ˻;ca6'be,ȴp'8cWYymN6Oj頄}!8񑎳OW@1`$`6v ;t%9`ݶ{/H\s	{{?),2[)HjQB!B˃)ɶ63xf(h:>S>bx=xNՑT1*\;CC;|ku8JՁ!`5'U^偰xT>j.M}Yy΢B!B1hSx){TGwny,swldGco.?+1?L!gJ%Muqf;4"5!)1XTFyen-rґRĆ
pק"]KgEzjeE4B!ur-)kKc}ՠkԛoĜB~ߌ_y;.>yn/<Ηmn	_gG'W;:E|&{Q7x}^v<==x=n<M
uDFk@xyP!Gq?m7mGuzbcXm\n'iYF+'B!.ݨzuٿ?͠<;J2Ty}|>ǡ{B3,]e+ֆj
`P
8y'Oy3oU|P!ceCt4Mĩ򁘮p>Zl躎Mvnah-ty=cl1KLbXD3$&.lj`uo-z-k`>QQ~?nŚuY>5=+Trg6앗?;Tvi<ˆkG?np`]י	OHJ
-tyL#1Mt4Cb{3n'7M7+?/>
FsKLtlruP9UUG?7T|Ȅ9b0lBN/M=UiS[k1qDZq9qt3#%3h妋`0(!r!֬A_`P|e¯7uT+C_T6ysPu
?}sX}W4Mu2axoῖ:Y:v3_-
ƣkr;#B}bc{VN!B\D>z\ךqpvwSXOWgװe^n~cGUƣhF>$ :&-mD :ڊ56>lrB!DX⨪/1uKUUuuk2qMP2QL{qq|	:m^iT]%2*y{sDdhhdIlĦۤޛp8X\\<Օ(gcelD	Rɟ9-qu$&0܉AqXꀬ",9NLKi(EE/ɂbP58XKLbT5Qb.ER/Dz1k^FO~?M.a/uRB!B!dO>:
!uEQ}.gنlrƕ_6k̚n*x@1iV3KÚ#:)!B!/M-{2bXPU5ۑ>STFF9?k
tƕ_6KbUϵl]d-.b& ltw΍	!B٣'+Q:?Gq~~VZlfɼy0GZ/ajJzf˓aB+
'+F\@Fz战YdgOXεQRV>ALp@ϓ/BJ\,ˤ9_h4fL:&tMx4X|ݵ|mr9mpvK{N˯jz*.g6l6~p
27?OA6c;zɸ{X\3'z3G\l%r7wWm0옾w./	?ODش{EO躭l)*U|C+<ɉO{C+|Dߌ^6suMeI+yh>٪bg_ϢaE5Gk+d.Jvk+$+.*IJN0t9OXY{Ve^n2ft5Sy|
Y7wХI]xy縘ӺykDwQ"Yoo	xo;mHw4N޴pTW2h>G*d5
&3]̜gCBö=/,!ƌ'>9FZD
t{1j+	1f@]M5]O]C~Ji ..Yxg׫rIɩeQ]yOOiidcƅH7un2k:Eg̟$Zs	n/ٕ߯[c6;MΚNzfoWFg;vB",V~j0(
q$$$£?9H IDATa}լ5h 8yÿ%:P[\ܠmttyъl!)90($$$BgWEM4RPPD -gPf`_Μ~Q!56~`Xz/utA{Oyo)C3߷Ϛ_iB_27^:&+
'Vw(c"[:ڣZg7_DL>Bcm;V6TOwFsr+nWrsЃQ]Liq(3#qTÐǖ6yh'uxfQ4*
bFaghcUMJ'1aa e}4f!*(F&KYOD 
յ)>琇˨j9`"#H#X3IKvvb1p=t}ҢMcC
k<HʛŶnst~j;<17#(#}!%;siP<
ӣh=}a+R,۴UDRx7'9nҷ6~u:qh:;Z%']4KMGG+
,\ꥬ$yÿ:hW-K7?6(f8yzO<G皪
EavBv7V@LRjk*Z9~ a}}n2k:EْP}m\DDAUmA>߹3X];(5nG'N
5N8LksqPLSP7M[)Y7JfF.~̼KCۺv{
Gx=::bC~PӃ@S}Hũ%BMu9F!x0FĒQy`?>?16t7^=޶WÅDJ҅nGcE3I0ϿNؒSa`W+=)&QߙIAn.bB}1t`c#j/޶"/eq2@2s(~ne(em_vmz}>p_nGqqtuu?W_%O]E?>o=.ø.=M{wж)zaqȁ};INE˩bMrzbJ•7P:ΐg+
	:~Ǽrr:hoَh$f1F李ljBG5k7wpt	DDFr	:6Yk1q>Bg4;!1jx~Pu;)īlft1a?.1ѱ67nW7uTU!5-_9q0ݎ.fΞG\\c
kV3wW:݇΀A^}a5i-?oQ꡻Gի(Hr|S놴b&:J1I>sd9 Z],_9iDaw]tQ nukhA
epmDEFZ#P#ldEn)Y,z՜B̙h
ehtboea~*h0؈Dͦ8Mg:C{%ADR,JT#eJrS~N}q%8Kb8qb''N(.%K%YT'%R"%"Hzb,";wʹ3ww9s}?fj\U=`~bիq={8ށ8-O´Wu%!x. wΣ]
PQ#DkXTm%6C_G)8^5F$EqVR҂wj]']jFGpIΗ53hZvQD]SːJe)a
3>X	BDu<&=uVa'X
2M㴐N1T4.^ N_1]`53"
,vH2Kh^o7bv4Q\+VT4RAzXc&\ޣ4
j6RAFzQj$56`"*P2:cd(iV91>y^DCi%q	qwQc2<ċu<[h6Z|q>>6'Ǣ+IO<]qdaDy_ϖǟWGv\lZR$/(
oaL;N^ڹ>a\4W_9uDiYŜ?ljb?m޿wʽ/ݿQSD&96%˩on=)}5[Xv>0u\wöD&![S^s%oϨ.ۿ,vcʽÇqAq)ݝr忾nvNפ/(-);NEn7=-e Z3m_{g.ZVz[{^[z;	Jv}MyUp?cS+hY`/x%˳a`xG[Dkq!ubp5Xf+,wNeF:lGY箣U-/&w\{wc%|b?~ߛZrFWc>MWkױ>""&X+o W"b{sռXg'ࡇwYi/A
R~֧J"|=Os#lZȾۮ|ٸZ8ſ,nnu?}!đ^Ǡh9%Gzy}`T#l},8W_zK@A
[FV/;߄b$DcO|gq9<טwkX}[q'xX/:{M|bt>aI%au@KC{y<o4t_{~#0's7ڥa(8#5Cʱ\G1n`Qc$|V1^CQ*֬^[5]T-VK>8u"'.}VO}-
VSQ9fD-ޱOcʸuvwOYd{u'8Eŋf~#BbA+6yM
5(hQ8Wr1`Wju:V+xV{'P\s^d,}~-ލua5M0)Ϟ	ϟbif ]sRt+9ԏx7I$Ԃס( qYT_-"6rcGńreƊ"zl	:ðڝ"AʚZ#\Q;yܷMPSe}|6PĎHlfvs[MsO>/L54r%VrrfhYw;9r:,M:f4LZ&޹}~y>1z:tL:ý5;o_$Kdl|4?s[y!z:(-n;H%jCǑ7t:ϩ|iz;A:fҕ|>?6+VthŸ#]z)V_q5obR\R04 ]GXl
Ԓ/dJDC=gYvM B$qRPf6(Oh9:I2VTԱ]ӧvl o
sg_e픖G&-Ӈi!F#D39!DnlVŔYNt<ͫHh!0 h*ENɧ?XCc/2|5lؼnT£_eA۝_IKd?y)>tmS=S`3&H43벰;uJ((Ur|Gva80Q]S
N76:)cX! 3xFs&\xx6@	X>^?յtuasO~nz'
fUQNqH}SêDcQy?iYVWZX,4͎USutC`)ټv2ij2'\M#70&dzʟ
T-O믓Ny7N)Y\=w>QLzCCw;x')E@d'M&h)ҚIOn
Uf&h)(;oSRZ*_S\x3/vȘEJnQl9)6M;J`՗2ǘ|/S+MW5beuT%NEV3M27w`$5o~<AF^TtFG0MV7VBD1)XISbsriL6֫7[L0-
ȹ[&)Nژ
L򖵬/iA33|M2ƺŵ{a`:KB'2ʏUt@KgВP'	KB:	 N?>BjwbhljoZR>Ѫ݂HaJ}P2_ӾNqttneud
7ަXgD;'zZXTOĉ]`8| 5C16Hԃأ'c^fk[Wr)?Ywx
h][.^x1LQNbp8Yt-BA447Å"IJe<Ҳ|Z*Bn	+6n|馪F"6+53U}bd7/Z_(+5
l1;Ye24ԛ8.,[MYi%յ504**↛njR\ZWg_Ɗ]Uu
JR)fOxg9dl:uЂttlVc#XKu]X%VbXmVO\nX3Ex|QV(oÄXd^LjyYcXX1[#&IRBuuC(
vOja{Ĭ\PPxc \v_AqQHtUS&1gjcNp)Nxk;gj`I%H?#7bh5KXZ[D0!T=R1vp֍|`F8'CGĘ~0ݹ[Ys,CQy93Ap]0c֊X8P 6v/~alSާ\֗3s&P''bՁ(iZPUEEUZ,XT0
nSEQQ|iUUXmJ3*u
1z^Nzp/qbb IDATZX'%;Y)x7rj3g*P&Oi"AƓv\T
T

cHz;)LL̵jUHQzH	pdT9(|_']CixH(PS1
wYQP1ՕFRZy혙)8#GxplZrM3t}]t]/]Er0yOL53A^ع"լo[]'{3wֳd544W+4+%ruZMI_t%
3}V⫷slSNDxS{j}L{k<)b:_`SBdRSyVkjG[r-V=Li[??l\\\z
R
V߇?
*i
Njz.ːl=
PQQEiI9dwrȸtʪ

7LNJ\pm7مxKޛ	q`;5s
E-8鎔WENn{i (TAVQ2WШm12[Fgm\ŚUCU!w3$?Hm|u'>g+Mqz欩3>NK̄8pGc=-hn}D7p~="7U$5j1y^:fiEhwh
:'ԓzʓ
0b]D8[n`AFڪLvs81٘?gU\}^ez"I6iri]<"*+.{9
bѺj3Z:þx6`[Yn^liLc/|N}ëן6
1cZIQ0qY'F:2J_(LCPQ58z2>VΆkO+N~cc	(R">sn&i{rZH3ptՂ"Tʟ{dkP2MqqtԖ=EE$S٣:v5,u+)7PPFcu9.U+$f22؍FU@qʢUUUq;q؀To%
0w$aAqBCab_UEDfJܔa::qXҘKn}М%kwB.Ӄ
Q>v:ͱ8s]J}5~}͎йEH
)9.n޶Zkyikǝ=[sּ}{_b'g5;s_xI^>BWkzUx;u{ǿgo5RR\|}z|-7M4TUeǸc=2]
|ig49'Bp-.s?}`jqP_O;&f*buhDh)L=bZ03Z*Z:P&(V7ULGDQD~3tP(G]#Gښ+7}UEFs	_Ľl6'C,Pqxn\zύ5{8r,h׋aâ( 1̾tnυݢg?Aim9LP8Jd"b𺰑!I
PRqB8G݆ث%f)"i`s9!H8^*n0F1f9)<֯[Ƌ/ꞛ7(aG<<bN	Gdrں2N*BxGs{))b
s"..4Ś?8Z2VapjRbO(؋=WP5UaO'Hd^Scd`hT,X"*.؅L<^7]X}S۝ xz(V9;U'#'ɛ#D27,dMfgC.?cyO_ȶ9ze&]d2REl͛)|{WYg]'.hO<~31z_bG
T8`xrPOYL7y%O]+,[n|z;IGzXP((#h}$b&f]CA:ڙL27sȩa:;3ctߙ4u,8J,Xp߈]pDN#RkDBh\#ݝ3bqpNKOo%<>`pHcܘnuz@ru{er9YF$7E[ D2^laHrtuN:~TpVdnشyt˙
.ȟw6}xIhˉeld.PB4ͳ˒b"8E಩t4SEQ/K.I.E	sRqB:B$Fqd=-)ll#*SSBM]MwRyH$D"
5.^h1$8IQPx[ִL53$ãSRw\S<ˡqg2l#yi]27LX,F0JMc
٣JK.*LTёqҺ@;|x=NlKK.tz*8iCZl|~^KLEpxi_kif;4ZO߅>CS3Oo?3s^7sDB]x.c&Eu`yoWUb᝷v+./Cp,NҘ	.~^vT_la3j">mOr6kW$}xLO^UE}(l\Z~Uo>ȫceKomX4Tw켐}"+ٸᜫ>~s8|㳿aUl>>pC\dB+[
Yyl߻cʠX|n/ly2xKCdmJQo_sֻ~7&~M,bV{_xJjJIZVnpN}P[8~H*njM UXӝXld4_~-C?K9u7M7C_歛)
OgOVG	˯#
g?e]KNxצ?=z5z#Ld=Ȧ-J1
bYtNwuvՇ^ 9%F֥,.tEal5Rf$i^}gJqMf2mj31t6s$Ix	*[k)9t/1+6;ج>AwT;5N&c& :7(dU-sIūh\-ξGǨ>*,VmnrK?;|?oYEtUÔ~7nˏ8r5U3+{~v\uQ@:~/G>W<se?ϡaBS6hd
[q[!ԽGh
6X>O=@1ZpøeAx;"4^}+Kc?;iy˝Y#"KֵX}c&UmٰdtWEh:)z):N>BS@Qm*Y&6:Ă	5ױc='OUj	P^ZZ~Qg:{EմWYVǂeu`xȜCݒyCA&MTV*=&hq(mP13Ղ"UȋT"E%ePޅL2(""fiuD0EQ]N|E[U?2gncF?ELǃWBJ314e1RyýiM 1K6>4##E5Zz/nN LjIuot@Zwгф0Iu+",Td2}˻KNwF8)*zr%d{b6e+n[1
bc͔0
a2%Vu־'<E[P3Q|g5[Yn1>89Cڿ|{_[&8o>(iA{oROh]G[px5<^$(]:n*n5
4SBˁ0I!.'l7niJϝz?/TBsq~kh=|?/Tݞ[:6EUoryoWqb,FH4s͊ߪYb8*A!
x01I[lxӳ.O"yX@3,_@Q%	sgWxmQkk3͐N09o>!~N}Pκ2OTzQݘTvutZ+hF-OyA7UeF{i4iG}k}Q
lEb(N",EDFIJJ-5!QZXn
__wI	XtGTf>&ʼ6s:(2!Y3{%W}ן>5Liym.o=ݩFy;y;Hj2'g}E⮠eU-ZɜQӺօDr^P*빦y%7ʖ6*ZܡhX}%
o;sބhv+tw=ˁ~>'dܮBS`[XְOF}qyl@!tL0&`ʢc
eHIG?ps@:q}U_FdDOEQ"aؗq-xϿ(]i87sGە9%EA3s5Ӏa만3.6m+^q3 1M]_97Ci#]A@moo;>X>~^ztkn֔1%Ji+qyfxFPUW
2RvqHcM-}ױԃǙϻd=ǤD/梨E[-$4Wϴr6|'EhVTΪ+VRs;V~^u? IDAT'tsýG3ȩZQ,Vadع#bS9uv1}\y9e^?-_VZr֡P-OdU,lh^~
B(E.cfRe?yovMWϳH˅P(̑'d-D"H$0&t8}b]Tt<@}ݴ7Wb1nW{cÌ
/ae+%>޿~ߜJ.oC28ܷH$D"9q86@	 tyZZp9DS"!>o1ͳ+v߇\aPV:K$D"97,VI}c+SX"&Ȼo2O PBEE%օ%HfD7M2
3Ph*yQQ8JEQдҔ-H$ņx}1D7pZˣiRQ"32`D"H$dVa޺ f@>2"I$⬔G;@ǃ#r<.b,r*zUzXrX6hmup8HK$͋nCOSܢ"ɑ5tVOW]nrD"H$'G\t1l/7Ey?cCUDDr~7vY)6wj|"(]36%6ڋHh슣$IPܱSP
!xr8Cٍ}#l6
WLͤAɴT%D"Unbzf'(sJ$mb⯨)#XqPӌ2hqRwacģRT>QEp19bpݺ>D"HuI[Yֶ8|[C>M0M"yoʣe+q(0{(+:!b(X,mX#⸀8<)=7Glfk%݄+
cC]9Rx<	] D"H$SnMH$Uy4R)+/'PV
BRGaꘀB*m3p$Lp˩(O=M.+dtS8+4Vmjr4.*j̷D"HH"{U
UfH{ㄖ$6)v)-1@U11"$euIBs{ٸvd7a[K5U]ҝU"H$K	C70d@:Qzp0sJv6~xW9-˖T}1i]T}}ʣjnھg:'\rWǃ{03!$8~EH$D"F\ͬ'_;n
?<Fq:ƴX2*]e'LŘw;Tr銪*[JF%JkEUEUNL+8~6s}EʠNԦfa"OSUPs
(
%%Dd:{pȱbj\d9
eWL&]E
+er2e&'5)>21'9\Oݯc{8n7s_8:.&~?Q8ښ+Zx#{Dx?忝VT=3Yc;^xeA~&>կɣՄνWCyQ0N'uuEp᫩edf@
NC͖!,j?|0Sz{tJ>[L=qGǏ2?ya8ޠGIEwbXH@ WuPyx2siO|\ȥ=?9>FBWO"\;Ǝ[W "1HZw\tpKĒLRMTH	Dz"
̪<^-x!+8݈-5t L0%vm$DLd*[izpLBQs5͐-@ Xkya}NP!x:Jʡhqq}&ocGF
`XhvPe+mcgO9Hhn5=4j7x>FZ~SeP
kVmz.;g8{Ua[\?_DtJ}}2i
vZNe~ZRa0Ui8!g@ ?)O?}q'+(!qbة%E:[x{8Q*+TI/˂܅Iˑmɏr$w)<?_kFŻu7ht :so2U([\k{\DhHZ:Sfըw(nrKi[7!@p%~{|_Kyϻ?_I6zeÂ?.~x`n*qv6l"G]Cf	
9]b
~ڬ1Ƨ$Q(dVZe&0KJGՍ5H
N-q#Ba 
@ Uq:2JSmrLywda\83ctQ-ޒlY)]0lġK:O|ߛ[i1aa<~P`6zb@\.ru;1sSd$	@*Jsq/#ƊKz[%$)Mo׀]	9dw#?
@ ܐ;\⨋@p=bI(쒿G]T,"v
5Ss
@ QrYn
C!F2dbb|3n2z{cnyZ @ s9>z;]mGmo6^j,ƃ~X$tw,M//KWN.K5[n,v"wEKi͊6X(˕ieTM\-&pܩ1E6g;YjYr%V5q3G;rLIN*{ė
ZlҖ܂VMC@ ,)NΎPy263vK1t<7oXIN˾6gӤrtځ<ÒvRG?m4n;N.3%q\JQnu]:G\9W֖J)JZ}ƬTVbl5c1K
S3Djkلj҄&nnm֨s(cm
@ nx!͖!2L6Vg}=ǟ(ZJ͹>vzMSf?ƶ27LϙY{'ʷS[kis߷JUI+/?Gy{t$6t;DyE@b۾lo(C
GKhLqM?M:ĆLjvS*'JKVSùOwk@ nUVe<Ύp:0Z/2/4ҥ#q8iE&z;45wWe(3	&3f
GN"+&#Kd1Y
4e9jlegk%.I%Ibr`2#&L ٨Žj+QG3UYŖ->CdPoWasȲNNjSAӳGu):cT@ Qܻg-E ,CGӺuגx,zp cz
w+v[qM	u5y(Kl/C	8pr[ih4.ұ##Š$WvQk	ORM;Lec=;=ÓGss7TS6ɐӯʼnύCm%0{fPYa4]MsijȲi@ !
ҴefKK06@U
Ml@ljTLv6I#̒J*m{!a2\W76riY2;ɸ@JEQmj<&4Da*vR.SSW	J`:F&=v9ٱL&tec2U5P׍>%	ղI@ Xs-e\+W*K_Aiך.j֪7?GuאU30ohu]R`)zb&v}vZÄcYrzϙHˎl5c1.w.j8	C01ie4m|㳷o-BO8xElxj|xj2ă7`2p:>o$]G}?¿zlr`m-cøpn
CͭԿ.t2?ptsܳ׊>JBԳlWѸҲ2e/ܾ*Wlc]LˑU1sd	qy[UüNIx?Q99ʻD_#"oK!8gKsyTVVAM
+diPKo/?< !$3R!¿@ [h8@?A"4M4v5z*}EAɤO(BkN=-H0I̖)EQQ׸eS'HgR4qںӽLN76QA5$=&8zl7&D(ŮYT`hk^@p'>2jIבelkI6%fhe&0I&^2mb6Fb6@[Zwm{vRYUj]qӁ;{>.ʜ:IΟ}>˦d.sӺu7vaX|Z8ޛOqlBP809ϫ3/s3UL#4oَ\W^zϼWOUXܻ366tlUQH9H}Zi}䏙M
.IXqk&|*W0JX,FǻZ7TFFg7	֑P2o@ Pr
ѽ4MCӴk^:@_hdY1O:mB~fcfg#عmpuE\oP+Q3ul,bݾnu2/GoOQ5aE!Āq NDʫ'Y{ܾZ:9>BoOϽ,5D"!zO2;tS^Yq6KKkK=t*ESWv:E!8^*rq+I{nc@ X^*)Ѥ͚ IDAT_va]ktY+sI_͊6[(7%<Ε)\0d'߷gRc_Z
`I05[9ϸoBzԈ={ې״Ͳs4tm>?O(yHTTTW6[ƆaXxͷ7[Ɔ!V_܄Vߊ
[#8M-cSHRŧ9n3|rtJU‘07_'N1>:D<Eɩwgp8>.(t]*^S׿?xl6(d28;/!	uCe2X1LeG۶?GT%C4f2ocŀ)zQ~ġ#Gaff,\I0fn;t_M-Wl:F4&`hwx]G?0xޗ;vHҌ25I`LT:B~"ޠ869
ֵ1JGw◿D&?'L%cgW[o22{FHcHO|YIÅF,!	(X,Vli%8Lh4Кc#wS2&+'ijj&oԈf$HD1{'8N*++LͤISu57⸒xdoRL$%(55aM(L(88N.'yˁ	>9h:Ew_|qpǝw"K/14<夵ł($Aq]M0IskN>K8$
i]?M[/m<4lJ޻WœN00Y7DLd*^V|^n@`8
Prþ@ \OH֝Zf4dxvd4,8zܵd*k롹݊hf*C6\
ZZ251䈑wdm'hTٹk7\>2J}((3\khrCb1$Iʚ5
mz@پʜAvn]FB2<ɻK,CrT50s/񳯳h\|@$x*inlnj*jNvrOcrҲ{H8tMgb˶k[U_	#CTVҶ68B2衝4?x-m6Og$Wq*$'ͻQAMĖ5%[9vnP2ize{-MR9_JNtG;%u.lZmkf>
@ ~Ut2$ɘ]y=~_d||ۏށkh6\PNVXm6|ulٺ`7K_l63?rkp|ٺME)qlIpfErHk F؍QK_ZVVVxuUWHDEyH$X
cfϺ'?r^>[q-v*DɌC:umY}}?vaFdx]
	Q+*[d@bsuwvˤ+TsT5j:V;VsJRap4BNɑ[&@ AggI_icӵE!kin!Hu`+E2}?Y%(9UEWBE+(x*<8.48]uX@TiߏjUՕ]j'5dIXmV".9|\TΗh՗+͍-_M5|\E5$		
SgѐpMAΜ9dL]w[݃aAKxY&;̶2R` 

%YAL;*-xvRx$9|gUVБ$ұ8/Jnd1&;NJa&v3)j;s%m6ο
+@ ?{ƭTOJhim`lloö]f|k27KH$8vrZ44ݎ[TTTc2H%SēItt՘uv\^cx̆XI5a۱۝DY3uncb6NZMU3XO@/}A
Zu]GS9yD%bqIdI$d3X>N"Sѿ6}Ψ4Nx*^y=ݗ:5uT%k3-njG⩢QT16όfdz_/DVf{:43bK}tqN	+Y@'>6A$$)gԥUuK2z=^ʧKtgyʩr@|Y-7nč,6
(MmjZ)9ܮ2ʊVӪ}8]nTee$Ix$S%KrG5[TU͡dTMbU/>@dpQW5$I*׊V(JD"DIak*Y%urJ]IgҼ3vq1àJVAQHW:<سb(J3inNUItd8z]5J!;kH+:>6m|qGg~d
yFFikgl_͏M7Ɓ4?Ԣv]88w
,f+U
}^b2l+Vhlfs~;Xy1r,M&>7n3fj(aڢRߴef̲	Iųhdӊue1n"?Hщ$vErR_>'~[RD -#K0-M̿1UE [-s=B˭nw'dY[㕓?jڼLI$ȒDl_9{uNS)?vYA%;?!\g^2t/24|Xb,XՂj7BG$zE{ض}މibiN7ICffҕ_VvMɒűp3t8ts?&0=w~LNf!dUj5x%la9_
sFp8|޾Qc5[ :qغcfٲbɼwka 9Dvf);-Ȳd4tr$cڑɑdIfTr*!*ܘѫY[8l4ʔ?B$TTVMtUɩՂٰnZђ.F3_]tQ siv1S#8@WT^YiʝpF8ȳ?{{hاuAUihjjl23)7>:oդfR:uu7Oe?C|{jfQAFNp8	EyV~RU8uWCS154{r%؃pNĩEԺ`}}x8x 9rGo?lA!dQUUQfl|--q01>?^I[lى?+Uk	[Ef-(/M+;;CJݎnTV
歞M5\)[Re,ɘlNﮣbQ$N&a`x2B5l&.StkrCQ_Sݷ>t#>NMe%mm|`*=כ@ k;-|oZ򹾱uUymffx|640Ho_٬e}4oGwu\r0efgcݾ
M/]S/$͒UU^wu'wu$(
JF!C<UQq9]hjf?}k@~$tl5;JB.,
TTT`2p9]zU3ārZ\K*,7>׃HliNTSN]Uި4
m?vDWu8vVCYIB*d.'


$NEZ}{_Ukb,I{*cK\_CWu+X IhF2D644cL-f9s
EmoW3/?_[/^  L"(=t ɆL&jbF$.[T'+h^46c^UI/(L1Ka]aV-9mTY4a?ZY-촟/@,r)YI8M:(`G2F(f&܁EPI
p,t0lƩpAU#z,#)eC$ND.b*y/;^\p2[g	O2O{s+oU7uǩIMlx"bttWJV8֞J%xkLs477&r$faw؍-踜.?##(J*%^;TÉ$JrӘ,f+d2TU3mΛ܍3sf]7NlUzP]YMNQQVI6L&
t:fs}@`C,*AvMk9|095WXbx͏ɌNNQfddUl5p#Y'/Fg c%I"3Lh̆e$`f!Gd!tt	?i^S$$Vi~ۥ)LO@ (Å,L:I{Qp呤Me1[iٲµW^yd+l6MO%.^ꠥpcwN`XV"=]Hģ;uS?UǼ{wKXlvF"׊dQjP
o:>-ow2cVxx*p*78rN\n'95d		bd{Wٹ|l׿8LgӼXl44̟-s>WMfK86]%WV`1[7YYi#fl^㝬[5SsϽ
@ 8xn465!,m@hڲxfwp~**JI2
:&._%v1cw Nq}v100HKKS80ʨ(#CCLAmm~DI?ˎZ,VAB_$4lYwQ-Ϗo^6Jt1<ԇg,@ 4'ު8+)P^ᥭvEOO/27
xl
	ilڊؼƦjF"!>l	G:Aeˍb&͒L$FXQ;.j{8MSZ^}IUUfMՈbD6sxb5
BudYF2qP]]nG4R41T%({JƁùmkU͂)aD-Q}4s便AHA0EUKK%/ <{
R#N^'=w΍m^"z[е|9?TVzIgӛ-cèEs+ VZ[+*[LmjZ)9'? IDAT2'վF.7q`L'߽]6xɍl
dӴnqƣbJiUQ.CőÇ6[@ U$2XoAs
*(9hrJ/*	b+[  d"͒5m@ w]L~]oSkz6ȥ$HuS.wēprwZc̒ebKYh߳PR/5v-lYq[mƮµ@ ^I>lGs%Yq^ӂœ;~3<Գ<> OypQy'I(NFO=k;I$Ɇ0|$`cq~1goB/L.O<)#.JkXhxyt1ӳQhe=
j7nqfQ5LH$N8dsFoD88N ԰sk|,2o$NY-5L}@ 7ߍ2wqa
\v@Im߅5>ysj|U{qctEi/]EA,!i:4qjkx3H/?coW8#<|/ճjͿd߾]۷_u^9CGg"ʫo2iɷKUv>@I]rW/8^(cYs=ȧyݻo{B%Nr饴ݿTm;'Mc|_u3<
qcd	][Gge;۶mtRz:HΦQV}Yqxl䋮i($i难" NUPl<a(fEywkwx~bϋ!G@ WB.8*^%	I6QXk;Rol-Zq^`=ч
c7]<tu8{W]+,U}7;{	
i/_rgbQ^$0j]Eߌ:YKutOZ3ei
,-j|˽tljxj:JNm
=HyTBt][*$IsFzM۾o|4XL[kpg";GwTjU̦U̮2m*ѩ)fTTsA$f	D'$;f3&Gjֲ2*˩pX1#0H%7^UEM/{x\MH%ɹd\^nv3h9X$Ahc5NS}92f37YhTs%F
Zl~Y*VMCT@ m=Ggg//پ_ueA_gW?33aP::{	@@0L $Kٓ_
i_9&=kn'~AꥳX|嵷%YF$NS?zDogWI}z"X['<]*I䏞'8׶uC%^yB?J교~|޾k\I6kΘ]͵ήIG[܏<6cxحz,Po\!`Ӳv48v`+?z}#m$hfufFϥiw˩$LI#4iir3t}n뛦B*sb6CS"b;RSˇdY$4}fjvؘc&1f:Z1ֆߠ,Fe'<1y$^:)2VC!ut̯pާ~"_F|>K]_A$N֒zYXж׮ca	^Y	ZIݖi}XՕ05f>胠e9>?ޙVQ9gf}!+%,( [պۢVRjֺTlպWDPQ%	$@6ws~̝$7Μ9YsAU:cGs@c"|(iSG@
Jʰ0ڹuePXTZ1g#>6qNNEeܹMU"g(_jqfOIB\T:$Ljv`pM}R-u)n1M.%K46t'
AC	|
N4(9Ң^ǶC{1HI#"c'Ԥ؞_=>Nws;Z)Z=@HKdDx[Pߡ".QoS3j"h  2y&F'@ަVD8+YwV@AaN7;($EX!M(DU"jQY `vqTj`Վ6PJΡpl֖FGݶw(2dR

	)GD"*&
;ҳ^Ljh8̀50d!;7v	VH8NF >.	v%(&LG98ToIf)z0+,DV(\2"#$T5*>cVW/ɂH=Ԋ8q=H(mmΞ$!6Jġ0iٗ&1J60000000@|b2Vd;U100Cll"V[{0'5
#ӣR!Xa&n./3Qnzt֢śŌfՌfF9TkALiv)捁=:bHD@K-NL.1HLOO{<ۉfaIPŠ6*C݆ixVTUs馄@2ITs}a``pn}]ڀL9}&IB}.|Gv`o~b)>WG0RnRF3Fb̰H0zTnD3c܄d<
ر ⇧ 7ՄCع.>x;[!wD2D\	*Z2"9IVH'}A`pD "DDDf@حVD8XVOD/*W



ܜJ締:R3zo@~]%~nL}}V&|{VIyl>VJ2(l?W-5^[`S,Hem~B
A_8uQ?
SQSZRy#`T7PTߕwhw~;Bw1S]5@1jİssB5*8g8_
!}..ArK[4nP+a`
Q1	mg7ekhjl6d_LkKh3	p#Eyށ+ޘ1k&L>/c>^u
Q\df~(F4E%$`s]}&~G8Ɵ8cߌԝuW帠*hO!JK`P"**
_jqܐ$	7mj7{rs*_I&nNmnnGT|q/ut^eX*)8*W}a`03<׿,q*x\GKxxlHNNJ@BbGJ̙=mc``````֭puuZfϵi*P8S01e ڤb!WhB:{Bv_<B@YA!I)3YlFme$It-YCQd0UD[! BxRIXӭA	VS#&2أ-]:|.0|+k
@3_x*PdE֎!h8cP=:R@ȁji&}Tx4F8]d
݆F44@DحɆP@QA)W5^qdZ8`aH)(~ s0Π*iUET8ȣv)3u`w
`䐁[~JĆN,mVp6st$:cGy{a(FoX/ZYPRVL?_ޚwDu3|~a6CA;]nm&-Pںu+}G[oy;>Q!Giii5khDU	IG)(!972Π2[Q0E"VQ2(1P߲PTAU_)?ݻwcxkk3(Rc!	P/Z
\,lGC(>s' 2I}bg+נ߉01ؔRY1
ah``````h6CG<
&s^̔hBEv9Fe*JȲIA2`S(@]y|ABbl@BQN15H-	b-j±,`GuXsb'p)uOL`}拴WdJ7Ђ,>$#:VxMwЧa1(7
IWw}`t<9HU\|oieS_=owTnjdtp%O<'ᡇV>U3ěrюQKֹ뮿_b/nC3fommEiY9c6[|p8:?qb|rY0ߡ(x:`	645
nF]
ubW^vCnkFEY\R\/2&MP-M]t	QVX(u
nZQʽj@lČ*,؅	Ǎ&v5"))	O{rs*Çk9
>'\QPe/` IDAT%51L>ƌ$8`VV_02'5ujX+ǎ<+7##Ϝ9T3Cg*-xy䢋.RWłhnrV+҆=`[hkk+&M>ȹswp-^8=cX@[B
jmB&F"!wP^?wӖ@G3*JQ=LF޲JOR[:s"nmFE[30!**+Ch``'Y瘣z=t:9j`_ɤJ&`BXGɣi8pӗ3	 ɸDまPxukN`)==ϛ7<6w響/F7$h10㨿gffr)·TU˳+/_Ç9FR* ** 
u	)D=x.<D?$J&?TWqB[Bq'T.Pܣ(vz7oŴ !NfvOoNUUHKc4J@>D=U1@}IC]}Dmu=1%cb``sW
TKz=&u.;|ՐtJ@DX%#W}8x V


m?UL&Mv;bccCMP$8PdEltAhd=
kofL&3G/)>	OKpYg5hee.U]SmUQdþ D
2ԗ}Z)$Tw1TŨ34=	)ӀEZy9ϤCJe,tav^;JZswr:uYZ\࿃ô6#
kn۶@_<
vt':-,k7/^΃12B{N
VUVw(ܽG8T]}Jo_kу8]pʜjcc/Q6]!ͧ&;;/]ku_3ϞaڱcO3g*
@B r3QUʲRX[
!2YYYI::4A,",3$I3R@BK'xѣ9|DUUDB(\.oO+2nt0$](.Hxqcy\?&Y:nۂg|wKs~
]/2~¸Sbcc49520z47w` b"+4]Y4?rc\v٥iNW^uM&jkk_|AVsa,C$$%%!''߿;3ה-OTzS'.Tx
C20000008mFuUlO	Rz߂={W={6z<>#swy*--DDm(!VM L^/]vYfDQ(p8Xj|-nޱ/L6z
y~%K/$hǏYIB)NU(3M7D׿)\^v'u}ǘ"000pIsssl6cK+(..駟L&S1)ݻw{vE]$իW+gy
_YJ̏
7;O9L΂뮿͙3gdfz^f͚]݅dbB)|#Fw/nW[ILL•`,11%7ߢ@kzIQ,8]OX
Bx${D2'j\moA'gh˰#uIK8s$6W ʚ;^PX`񴠤d@vr(?1ҁlj+ʫPA 숋v AOI*PDTQaNȬt|q;bFP~`
G+!xAWx_XqovWjZTƍ믿NLo馰]v-]h;O
ѳi&z饗bozzzdDQ.6:W_~%KO50091ʘB'R;qfF:ۃ3v+6_u]UCK褤+*}?//u1Z}b(::?pXUkumj7/dt>涟-8o>[p
\X>.olHy(pB
H\
83D".eFèLLEKtDUV(*(@T@iB6X"*'T͎DY\qrGۍT;0wtf[p֬L~M<n7!V!
gܸq|„	^/ٻw/)(( =f~z98poٳgyWөtMalٲBJJ
?󏹬Ix#
6/e͝;eeew}G_}U!++ϟ?_20089Q<
8y[6М=GHث7}G|2FĨT;\Q̰9Na#1ɉHA$ۉ5`du 6.qfȨ>6/TLJ@R hllE}qu&hj`,Jzw	`Q)60z6
gpjpBc(z-Dڲe};"#vvW>zj4004}S
UQHm7z3@%1@*ZlIJ	TE$IPT5do׷0Π*#>d8L?lj)b`wOD4Ǿ+񘓓i uxgV(Cum$;RE^hpR|	y0ad4tMFdLlhGA;GTz.8+mVaHLa c=s% a9Tt
)SȐllƔ:$
W]uػKׯ_OţD~~>9r$5jw8]򩫫#zL+EjjjW$I555XT!i,*
raΝ<3u}}=Q\Ex^={yaÆZCbb"tᆪ---0a1bĠohmmŦM,˘1c4668.I88|0q:Z<**K>\..))Brm6ZZZJ-Zvm``0!dH81[P&**NM|Y̐D	.,CXfIT֯Q/b6CQxŢmS(@^f $g%pz*ÉHtt8l1$I0ƘX(?V6CyģIW9.hLJ0l|<1;>gJQ+I-(W@$[
7#
c7"Qh*,ΚJ.>jH,гFDfbyGI3tr~&.-Ӣ^W^yEkǛZ[[QVV}g_|1$.UW]Şy9@(}Q'WJ)-ZV\HE]dھ};Yv|gfSO=%;^
[p~sasrssc!mmm5kjFF/--%/Vyf:o<,ƌϨ̙3ގɓ'/\lڵk+Vȗ_~y/KO?W]u:vX^__OIln`pA`<}SY`P.
BX
D/C_x-fPBKD1EQ8H#_Wn
}p1NUT-
%9JjaNKGhDaD.(	PEA+4=S0Y@|\WvDXh>X6PQ2`0 JH@,=mB5)؊zx@aMHh#FI1>^u&	Q0@^n&׀xGH0U܌?ƏpЛD[d	nF`GUqm&	|;v,{}z4?A,**"/fr6m|rᦛnR'MGя?X={vcl6l [l	i\.\(-_\~[y$n7g:낼^zI0Xf3k%sI=ʃ[l6{Ukjj͛1{lvw=qe_$iboVExEy;۹_|A7l?~!
NbN8'vE jUU{v{<2cPEsqkg=U#-U*`1Y78+w^ G GlP|uT0eٟLUat+O8H\Sjp(1h>q|sJs0w;2`Ԙ$(V$&Gfոt@<"b"a݀$a70րv%1Hd6'A6jp4vFd@Uh~a)񱈰ZP7J$S""??&dٲeBUUlڈhg3}t6k,~zsN:u~/ X,r瘈IIIS.q¤I^}ꑄ#<j6Ξ=BRRRB\Opxᇻy,X<>쳂e5zO<ѯBd͚5T$<䓊.uz!7ޠ"opw~bG_,*t{-MPUUsA2?b!{MuPm J Pws:OwzLekTvW=6&ݣ*CeC:&^Ƕ2l?̞:
!P_qہNLnW057T8=@Z
IɈ0D	VRV_Ky3	d-(W9\3"Y*@	#x6M
[4r8٭Vm`z{puW
P'bDN`WYrr.bd|ٲeJgg1Xn"555D_@nnԩZ]Ǔ&Mb111`e.?vyѝMOO煅VOVNg~ڱwB]i)/:{[߼]T@nC(C(AenTk"	U.PZ9bbԔOU܂Qx?p P:\>u[+*W%pעtNv_bll,'Yf$DGGsB.]*mN{{;9s3ٟdgkJ;Afd?>.[L&N荊8|Wl6*! IDATѣGYfϿ7VNW\)~+@8z{wcLGˉ򷂩rZ]X
 d(:/N@G;y!rǃV8p0xAF?eo_/}vd/)..">WV>#ʀ}g/
p
\еNw`xE	#FFjp_τ9bty	yD@k[‰ߚ0]1I"
u4qڗv\z*8׏	.N]t0@>WUBўB/}f9DTTX`Wg*/$pUEL%&&ozGĺ:hnȃKJJl߾tWNrr2>lT~%{W\)[(
Izm	F&Q	^c'?zj/?OUo˖-ynbL,;~~Ǎ'MķoN|I}ׅBK.D
מ.
KKO!uؼi 9U/PQ܀hizmRB1Nw@V%i6}nq{Q?!_r%LbӦMt4&&O~g6[pDj>Ԁ<{no6
)ǩZ	I8X)I#0gQ]Y?`X3{^A3_|1+**{9tEk‡~HǍwEDQדּb񼾾\xҬYxLLõ^'TɄm۶GҌ3nGNN,[Lٰa駟Yfu̘1\#??Z>j}pd2f9la,IRJ/feo#:B;T}Fsa,`k֬w^7n/))!EJ)ct:ݵuĦMW^)M>l62x'J˖-l6YT]0V朅a00-[߉}U8X^lm?ee堶+ ?ћxgy뭷(T.NJgdgϜdT;l;VrP_/AXWkp"I`F'k֬O?O7ߔ?sk׮.7,ÁW^yE;ō7ҍ7Ǝu񘝝͟}Y巿n:n:
]tcRRߺutRޣwqGA322N'ŪUx#KXrUV7t%KXG׬Y#zLbԨQCk׮k׮pW0]<Μ9}'OS^^{5?+7xI`(!"Y<օDay䦼l/KK^a96O>}VUUǍl>qD~]w)fvAV0nx~7|>5tiBB6m:Mܴ;R__ON.p7oW(ܣ;N;v,;jkk!?ݻw/6l7n<_d9L;7ŋ/f*-&?l_^⡇~'lv<ʶmի `„	P3IchII	0a5kUƴbTEyEfV1PA[q{B_>rw}L&{=yݺutǎ`|ʔ)<../s`{noUU$n#$M7ݤ^{jEE&,ǹoEEEd׮]dϞ=T?q+"wtt#(
7r-u`gy&O垤!f᭷ޒ7mDlBEiɓl'|"3ƺx8}䶶62~.oYCW_Ϊ3{lݲe-(( .&LguOHH_VUQQQM$l/vlM}q$"lpXL*o9sfEo:_cժU7ߔ;ߛGVX!,X566O(IV+JJJƍgk5kCTTTZ7xCXb3(cjn2I0pxOUر|͒---o޼~7Xr?Ixu6nXBggEEYb0evb
!::sf7pzI~~ӏ?X,Z].n6飏>׭[G}]el38'Շq:1qHw@rc_EԌhhlExÉp<87Bńh86T5Ilw9<%vc2ΝΝe#xJJ)J,uz=TȝqGm387v^Ull,fϞ}̾	!6m6eH4iٓ>ESS2se^P*ʻ/]s5ә٬@#a7qg7|CnJV\)/\I[^ڹs'yׅo9Dx/)ٳuYeY/ }ݢnN(

ӧOgׯ˗/;:pՕW3:d׋%KH$w{畄t:O.[&W'Mcp QwGG,Y"{}~3n䦛-[Ч~Z|WB>#kI8]KofI	\I1)5
9^/a}9QkSe"pӑlXk
_^Rd2ƌĨZEֈdؚ[
1#9+
5Ph^{MyE5x#|2
dž*7bpߧnatv:F$Ȋsq$QRe$	&Xʐa{ee￧۷SN1]utt`+|`w{H_~/3o6l_o@z!al4mk˜BPB?&׷VgOL7\@{K7_yn=*-YǘptĈ~@ p&	WO_'!]]]xǤyѣhnn&=C"H!U\\ccz.RUUiSŜM(N' \!1F) ˡNLnr,.*s.?_֯_O5MRkK+~C
̘13=SLኢ@4>\EJJz,IecFZBH(ʹW
ylN'rrr8g:7͑d&#̘6eԘTeL27662353x䜛5"kI	IEjaw}%;<.@.L.A~I1jpؗT`O]};GfV
RHK&ԉ><ԙD(.4tۑj> ؄NDB!NW±
'x	aeYB ;fww7.Y(+GYNvKMK[?JlL^FrJHnpɱ{zjkj^I\>''9rȡA2$E{.8t0]5Ȝ&R~Wzr5?_,[R3q\MȞM	!uuuh^snGYb\w0τP*sJpc^C"PJqb	S➫C!'̡d ٩e٠#DrjR!G++5	%9P(AU!4z
 '8'}
D{K)i(4NHc)1
6G#'bU^tM
Jhw]=jzڈ~C$#3ï(]TyA<$gf@0X@F*fH*{{岲}dٲegzfF;-[6%C샳v*Iv-e&mm\JRpN97P
CM9!h3??k9oX1++ՑfR\\sf
a3Y.R
~B%0UM5E0g0pmEssHy3uVc!
I8jAP<;@A>Ӏ@tFy騫8yE}IG@r8@a 
! #-ʚFYudO

'սR4(8p839ZUAt{";@pgB蟪h
Yӭ[	yFD%4::9CjwPs{	JfC/^ȃW_]M$DȊb
I]pհ(
4J88e̘1gee&nՑQ@AdvUSc8,WR%P9CPUm{#M*'Ǹ9TVVy*/Y7dOL
x>~H7*HKJFo^u
坘>'P_kq:qxVIK^v&R턪y8ל)z~ӣ(2dYoӚ'Ϙ&܎@p+aNX0L3II^/nG6m2}'+TLc%Zt"czҏðo/8B៚ªEI)!sPVʼn$AW $
gPu
&3gͲ\h߼C(v#W\ubdrU

3\F_lԩrͲՏah[<"Y]*GMa0EQ 2$I$AQ00edw{OS	`+B">{l{[tO~r)^xKp?g-<)Td8 n&yǎԼ$$^K,xd,ˠcDZ+V1ZJQ8D֬Y-4Ox/g{
[mZs`kmpMmhhGW}سDGơuhe%Jަp
U+htSu(DQ]yv7$.mph^|,8uٽkfΜ6f4Zڐ>

n3Nb|OoF644ߖ:2É8t?6cJ۶mEEgͺ^ܹN6ro~;	Cu@YD7!C2O>)tΜh5ٳw/ 1T2À,I <gyIQ-SPS[111O?ALIIC?_(_JO?41s"Bmƒ%K;|ժUiժUʴixjZ߽ku:c8pLm>?Μ1qg`0۷ٳy^xa-č lom@͗ ن{L"Qэmъv2G4TPe
%$Ig/bVHϟ6_?C޶ca:k-W|C`0ƹ]$N|ҍ7Њ
Ru0ƐgϚſ]w;~m2]]ӟ;v 7lYY֬^c{yq{OK#N=bѢElڴ$N-bIPbٳYzz:IFٰQwț6K7mD'MWڸg?Ǥ:Ь4L)a0@e(P]nq'@ n5a/-9BpY|kvZ0A~_7r^UE%g.~
YʄoV犋K^xA3>B!|a]NI
K)PuC
ew9s&6uq@8Pw%@EEyr@8l|-6R"eAe;U$dddz[caCPb
'9~芢p:vbb"~\fͭƚ5P&1w|Ye8\U>b
@ +aN$3aȩc IDAT
2@Ȗe3Nle<		m{$9.z~;*yj?$9NXe~ >@Z]Jq<꺆r1(/PVhjߣ7;aVD8=:>%y.5z6儏:`۵s/mE~#
 =ŀgDnWB?݁>F
n?:::یFsS4=v17i|Z`ԌL3ZƷ<'9aLoшR 2<=#"jf'$Dm۲>;@i30{z\
UX7&M(ƒܳo{-!33܏dO20P]?φu|]dEGw
s-á5hA;
MlL(w6RjLHgbܘl3N\ GaKC	@!A m8f_h!e9׬qBprCe/2R3OOB 
x^Ax	"`|RdHtގvT70H8q+.=ALt3<Jz10v@0	e?%W<PU5f)
Pa&(!B(NS2Kj}ԇ<^1֟5kol;
Wy8!>W'nsxEHtt$]s_ }ThMH+3#?P*@\0y:EFv
>@YL>#{D!7A-G"&Jc`hObmWrک9;c0Q$55ٶ
&.cǎ=!SQ_&ĺʜ30aճ6{%J:&'ފCD
sYm{kjjE~~>OLLC
$HtJ&{Zv|ѝ.hB[G;|PA=ر5,
_"--	
7p(xAӁsOJ"ϕ.:+z[ۙ)(OQ_'h
Q[zmopQK °&!8E<#RWW7/	&rbQ۾{V;ko~cOvA/D3gMxI/T{B{zjw7ҧzZ[|	%>gjX*}4n1IշuX6hV9
W3CEM8t-AP	4:HrQ 2·*\݀&`|
SǾˏ"[œ[55Q/		99^ia,C%Sqk9W3t,A$cA]7y	J(g.s#Ԏ3B7mDr:?:,fGnlעV^m,_/PqhL'7w\!#Gvן1c1+;@j1*'$vT^SƞDb{qՊ+OP*PZR,ݳg2׿>ED2233`Ax72ގS)SƼ*z}袋Ė-[[}ԩ;1P8J<݁f=0wcˆwa	F]=C@OC)@;?v}CN(௯]*BزqaGa7Bb|3@ F8Ú05Obo;|5scW\|5ҿ.XflzM7ɟ|V_嬴tꩿJW"Y`'+$N躎`P=#ܹz{߻U~W쾿JJ_?GyݺuuܼE v˗/g'S#hoaf˜gm97ǚބ!wոʯ+_|	덬,;ct:_}_X+Rt]zH:ukmm!q/f_
6eT:?G~X3g3f,}
<9sx @RR"?g9xgyF=?=>9=c]u<>sSn7n.`iiؾ};~t*VJY~=-((9sxUe%.]x^!TbgD;ړO'
;]gߔn{K/TcW+W^;oM{_$χ_z,~5W+@>[}鬣aX]]	=98zߓǁ-UMEgg'RRH0innBKk瞋Y|
Msa>]k:Fپ}[iJJ
ĻpwɔRgmBaa!?v9~_+VdM;v ׯoϭ}y&wرc &8wb1oK㦛n2}ii1uT/]r֭ԈZ3ǽ"ꇶ47'ILvǀ߇}fhb,Ј
Vgߣ͊*ڳhD!JD'QٶIJ<^sgau?e?{pҚ}jk/2=%	߉H{#?Gs>pæ&4`bi!@ 3y'nP}`7ZkBIRi@m$@=Hu!R,/˖}m}oW5\V#GO"72~Ȼv$=Ysk]e-+o_gOYoE	?\yIU矗%\`+,(W\qOH_tŊ<X+W^mFٚJrU
`^s%=-O>޺:Nvm=+uݽ7tulg,v	'#as0$n 
JK'#|P		Kflt鱞0bͣk	S[FVfcVضE'kDyu.cO3%-EB+53c"sk>[
˦^oLYX	sϵGQo/**?v8lm1m5|>oT+Mڮxij>qs91Mczvj??/ZQ q;b^@ 8dea
z!
#cVw}}=q815440au,ӆrrR\\ﻯwjifՇe(_QQkF_~ei…l֭4--
_׍\Sz^ڣ߿466X;rBV}5^$JdsMymmuӧ䊢޽̝;/+b^z%
fPc_[Pۻ:b$sx֊>xo]t*vi8eM_VU$q"%Pu
ʃ-:0WhRx+MLetb['͘ąחTcrU@p#I
4]{œttT8tJ΂cEHYIQmvOgE'FTM=YYkWG](^Wy-|pK?8IZZz)х]oon0X(2#1d;x%g uMG@ NԠ		M36mx6bqg/}eff>T$}ݺD	qˆ,ŋ{^o8?|6{lw^K/I\r	{scXXv`V0fzG~e)/ݼygżTWWc˖-ѣ?T]NNpo]_v⪫~ƬYÇɺuٳg>x³b$?/9w\ӧY@^ IDATx͛?gqT͛7SYvZz5>oqXt%Xlq?(/PE?AsP2a^12?Zp`5pWDB =H19.H?ކ5yL%$@J砰e%fSHr0J8Ƅ=b5@ ''2aNl**%T(3LJ(L/Ζ~}Aq8d0ҨG+)9֭ӮjG,Q~}ٲe}zj7ߤ/}饗hbb"V\i<zN:?Iۨ$p5wiV}Ʊ__L:mӟT~gz**sg1[1Gcͭw֭֭[Á.=k3Ow =cp/};w$14
`aXm~z޶uԩ6gΜuNj7gSx8tKs_d?)c1(Z! cǂ8jg%w5ɥ9/)Fmu`Ƀ1
")|'ͺw@ N6HK8vAV[	_g$I)":oeq-{Zx	
ZZww7>3KKKrU>rL/ӪɡCHNN4i
F眃17nT^z/pS`5MӐ/kXׯ?RS_Fկ~9r$S)Kr5+V4Gn2{fEy+}zO~~OxTUEپ}L6m߷lP$IC3=~!Rw2SS2lpg"95iɐ`Gׁך(=SP쁓n%	̍6Lҭ4((!8tpUЄt3|Nf {_6IA1N:!o{6|RRRdɒhǏǏs];BaU2;~⦸xR)If͚q			3w	9cAa<)qȐxd@
~5AR^{u\(ӧBs5H8a-B3	HFZ
5፲ɞ7BIu}.*`dzT"L>*TcB@	=!q08?n";;;/Ju:ƛDDBИ%bÐţ!CE*&QQGZR2RWD^v&R턪v5pL)Ř4j&'
Q|k@ 81jyEW49bRGա}'292Ѭc(c0A5?_ٱc9,,cΙfœ8pHrʊN]! +#ݮli>1ڵ3gN;Az!-=>F

Mn3Nb|OoF64%F0;`sX8t۬>.RsG(L$Y9شٿ]p9s&5
|@`y4oih
(-.6##GgM^\aϮpՎ+,gj%EKΗ0N-^3:><ٽkϨ-mg	

f	=M`ǖ)-1a1yR1lEt8L/*t!53uM
	Rs:ug%-s'IXɮHdR0~L&2ގ.t> c(RQ[H78%)) ̏v()JO[oGe'PIHBAGK
V 99<٘P4lixt$&ƍ6@ xdIBCQ>Nw&iljÿ2ҥKdڵkQS]o?+c.'r'~FNA _p%j*RS#tp ӳdbڽ-@SjP3}HDNL(	c2	]m9\-מ	4L\8x(O2Lh8RWj*
P]@NLDnA>
hnG@?@X69qcY;:Xx=)5+
		B<
@p:Ry!E#R8=܃_on߾^|)	r0ѭuj&OgnUGrZ
$pe
})9ԜldxߋMr 93Y)ph6d';uw~G܏6
CKΉuJz10&@ _eJ@{[
<_d="+HN2t}>PBvx7znٴikꑖ~oa:SAJxPѥ$]ɇ}|3ᆌ_܏UL8+;-P;QS1yZ	O,Ť:KymxTrHJp"%1؇w+/.pEFGi	ZrѯGl-|ۄۉ)禐8vƇcڵ{B5iHE{[`bi@{[;b'%ɐ

1`dҩa@qʰSH8dd>.?]~kht% !Dg,Z`Kf?dd+эNd@ˣV6I)M*zB$"#=	)Rf[J	9tt08JOMB8X-i	`e_:_Q_[x_)ɉ-1TU/׮]gب˕4g )9GAss#S94UárxjA?s	jV		v]^?;
?;ʌ'>]vccd_ETiuXV,f n1/f4ԨJ8T`Wqa|e}u˫2cxt5.:s6T؉MsB*e5na_	ld|O0xm%fMQ
=Z7aEN6o$
Qb$D
QxDoR,YBB!h?k|_N.QYyM$;9vڿ6kK	ņ9YTcyS.ZlD*xTk*-y{MWC8;
	/h/L126Ё-X#QC!bۿz}9s-	΄Qke6q88;+n4bSk4ܓ'N׿NG>]lkܪwMz1f67&]oB-\˵vZߒg
xiPyzyMLj;)ʚ]|}mWz@b!x˘^ɹET?=>%@I4*(
^*(
&uO>HN[1x>0śg7zxƍhosq6xSv$B+M-f{lkfWZy\iϿxY~=Ǐg$x3s?~_{M{v̳iچ٤pG<^bK9m&şqJ3EN^;NAQ51UEbd+I!Ӵ9¯;EI˄)WZiJuu%v38o噟gpc81Z(c<ZZZ9S
9
M{v}ZZZ/]Qė7/vS]]gV]N⽢({)?v=;)BӞ]%=]SƔyԽI׀9HqJ\k,r+V(=X_CxF<;E!k[S0{2xL_cO<7)7_Akf{m盹>~ZbyfQ6ku
ǎmB!Dn)02((ZrQlB */4SrS7{v24U<*TLSM]˕km(נ*w?q{vrj+-J.z!'x깟s+CuueJdEI0&E?gpx$4k.SˆGfF6y7r=,P0Mݛ7ݕc72󅩂4ԩ/gSb2M?8ǙMДJ<&eJ>Hb1`RfdDl,&9ȌDK)ۥiTozZji}'IwDLsYps
Z`V
p8k:F.)--ellL02bD#c$HX#
%R_U+09>J(\r{Z~ywu8b@]o#t\@k6nч<~v5itinĘwE#
c()qQS[ә}3p֖vϾNWgO{C{|Ocɖ@;oq*`Kh-LDu0&$MEQǰتj3~ģY.=П/b)\^nbrr\P権Kbţ
RC!+pe}p9mغ;P
u붌 Dm:)EN0|?.WޑΎU۸mg##^u*)ȝ͖+H(rd@&_2`X/

&)i㡳uM0Z9y
gU+9S@L((klzQ!BdPrcK?ޝ~fYeEl [ IDATii9-njj멭Yp\=ظop@5%VQZ-$H܊Vs7_TȜ7o\_1`;kI.~@gG;EE79,gZ=rr0t}#ţ	'O2s]zhݒ%HMc&1J~u(ȸ+/1<3Zr	ګ/d1.7:b\1Ͻ{fzMQ/}籾P׻}C]7)۷o0[rz1w?Φ#_"VSZ-&ϞI./ߴm;ﳧ[l?(.@$_i',~{9+=r}ez~3|``pN
`zq-x9Rm(ez1Ajj#c$HuO2J~=#ɯrv V**ĹןMYmkN;_o_+#oν,|:?g9ԨJT].5sY.]HZzb1mכ.ċO?>ۏ-N߳7͗>՗_@.jkk_\VQQÁnəpz%H;,zxW@\YylEIUa2`N~U7ɀ9b]pi0XoV20=Wp8Lޔmu=$Dѽh4:޸^Q#`7&Fy oFʯV4
iXKnxF)Ӽ|1,t\HGhgc)EN0Z˅wkQnI~v}53}|9bƶ^}P}gXUĊD1XejW<(ţB!:S9nlF:;r2kI(v:gEΒ9JK˹Ҽlܘ2HA1)k~QG!B}r|E\\WS4n[k,.Y<$WyϪ"QZxj"Aߌ_ɭX?k6H+*,=V^QAyz1&VGa'OɯU02PQ[7)-q>0L~(z!a%-+)EN0R{cb7	fJnQPA̫~"ѥRU]mYY@*J5%-ra7@Tw%uM`USq,Z(Zc2Q*TUEiX-L
HJ bE!- FEcXVF+,$}2+
4M#i`ZZ-LLXXgVU
s	85m`VSfŇ\])ENto*|,(~97)/AĻ*%~)ğ^JJ|[طwv{!=7Yvˍ[
ya*+˹p

wl܈Q=x@ r+E^0Mpx_;p8p38aXD#QQu5D#*/
FV*>tFG=wޡwհA2Jߌ_m~X;dT3;cttt_`28zϝ4ni7{d||a&?O⿳kgnWqw9-"1a5eyՌbZtюw~tzgp'.3FEΔy߹dxuſڜuv/,~5d&7oszygλٳk;N C^GFc\|=\mmc4_|{ɉI<._jS~VfŢwnnٽ{%EE<¯zGq8#j=
ĝտJzGJ0YW-Ex_}M.?ɯ,yL..?P(Y5cGg1Zdo~3R~%r_|ⓟaYTw(BRU\kõcXfK0P,ߴo[s.uξI47=]ė]>g^j|_0i{CBBժRm(ez1Ajj#c$Hu&Qw]^;!<ۮЂx\G6LB:f~ywu8b@]o#t\_q{?ݡ=9ţ{sm6nnL~Q!q=>!r!xnbfbPݣ!Cu7#};ucIYiVC(8q25dvEY>;sM&Ԙ&}i7n*ceoEpT8K)0WtXEQ0MD*uůu*|r)EN0R#SmZ$H~+ˡa!@G=CB!/2OqQʊ
CB!aOq?0G\ÿ^R< 7P%I~#;!DdCB!B!<`VG0ާFiH7#Wr+Vœew!v5w"'6ĠFt($Hu_PB٤Q䄀O MM_ @awz1fɯ/0L~#ш!!"'9zX2jcC2aK!d7)f)"HUN8w(-YߌC巣PB٤Q0'ɠM$Ba,(r>c
2J/0G!EG!B!Kn"'kܥwUSSw%oFʯV!EGN8e;:lMss> 7#7HQ,(KA]mEEn;9`IqBoR|hE1Ɂ
lb6IkC|*Kyw~׽5+[$
/V(хv5r䩯Չ_R<|6gd2 5z1f_(a.y;i@l,&(ea w2~"@{FzҺjj4hulTELxtΎ^B7QϦ.pv*q8>n	qF'=\ݹ1'pǝ.72.UCsQiܜdn6*d	48ciRo(ƬY"ˆx9p`grf=d;^o~3R~g_\o1Z
,i9ղh,^zki[[5޿
6A4mo]c`n9%DqlH}IurSx1 c^]:fUػ:k	;pq7wu>Cy{)t竤5ܓPRMnNQU'n #ZUI}u	ܚsydeT0'ţ	Fy&h2ȠM$b]i,\Lv662yԪZύNF)F K9B)mbm^H먊7)ZbZ7eӿܺqε364@ VŇ#455k
MX9p'Ov&|K"ţ	F*xoL3Aߌ_ɭX?|dgccu%}Amu4Qd2*)4C0l"LXح&喻:+

1"0b|~{o]'bk0]3#5jFQU"
P;)`(ZLv
]5k;Jy\N3T(&Tm&JF	Ãى-no='ш̾a9)9m	D꣯}עڊN-z?{
^nq{+#a2kz9#ţ	FeAdЍ&_[Vx%~={iw9N':1]{fL!N}oR?7t94}HvHHX<	+rߌ4H~+Nn~H(B!B!$VENs$Kr+"-"'Lź}IG"S`ۯ]X꧟)
^	!V\"
&V\b||V<1+|vq[WRIDATwgUˏqsvB5){OaB 6[a2p((01]t;!ڭڡpy#
yR>.^8}?4ge_!f:n{Oa
f3BV\vBYߵo:(|ML[[Y*n"6K}%BQR8
FKJa6[ab	!Vo5Ģ-P`puF#jzhd˱ ţȸ'CF#DU5%5
R`6c.$G
N:k( .CP(њ7ſgus3O9GSAB$ţȸpqﲺ!'TVn`b@eS-P;?pxgBIߡg.d!f+LdAXTRrڿk?щ%
B)_uq:Tb1m݌Y/kZgBY)-B7|}U4nBo׾xY&}L&SE;v.@8w3]Hʪ
:\+/Is9\/ţЕ@
3B)8"`rŶBJ-p;❳_pLDյlo-!‚~?6I(y 1G#8=U	!φ͜yG?ZPNVdE,W 0S!DQ;7~wyxECAv6o]Ȅe{-NQlv266`w:Wm߯f E+n*oz$S$"-65QqtB!Vl.bSwl.О];?52,ZyiߐOk9{VU7CXqπ/B!B\2!B!!
M@il6WZN;IENDB`hydrogen-0.9.6-beta3/data/doc/img/GUI_Sections_0.9.5_v2.png000077500000000000000000004030451211146647700227560ustar00rootroot00000000000000PNG


IHDRC4!tbKGD IDATxw|TUI$!A4]+q]u]k[׏s"~,(b>)3i63Lڄt&y>< g73}9}T(pYH?uWt 4g\̛0:֯xotU?My:A+}	2<0Y5:y=pE(0D(HHLp4``*.d2Q\TP.k:qTiGy.zAH24rhxiO!֯g
R
cz:
Uk3A   HAAA.Q~(
??(,\N
Yd	/<G=c,Y6ӟXd	{Pd Q gϞe޼y?kG}_begg?C~99#G\tomWX1	`00xyyq…n?aJʦMOxy\@石i&۴ٳM6uA\` \A*++ٶmUV?


T6W%,--$174imeY_2СC/IBdYf~^v-?m=]?;~AVΐ!Cx!((CbnhNиA+Q@nݺN{>*++FYѐNzz:Z~JRƍwͶm(**@轤$z=^Þ׬Yȑ#SRR0L]^իds4.AAH
Yx1&6Çg~܋QT,]j>dAիWsB

?ϟgolldpw0Z,K;;GJYYY"IRF-ȲLQQQF:RUUAɣ \/_$_3jԨNx[oqw2qD5k=RS~~Y|8/fΝ>_e˖{uxO>8n.u	|IfϞMJJ
-⥗^WGg_S2n8~w:^&''9?p	u{ϰX,}xyyuzuq뭷b4	&>>oooƏ*9996ٳgwxl6*6oԩS	$$$XweܸqFbbbdܹ>}}l6>,)))Fdd$K.S"yaΝK@@wxTWW/rb0&<<@gs(x

_WYd	QQQ:vAA.?SE7߿_EQ%))Ilnݫ믿_^Ǜ;w($''+ZV^Z>õnoرc@$''+:FQ֮]ۣkriPj(j%??v?@olٲECv8,ʫt:P|||dE(2zhܹssn}v%88uT*8;w߸q@9p[r(<7~rEʝuygϞU%..c^^^42vX;TƏ:o?@yW:>>
r-hɓ']oQyŋ+ƩS:3(C)Æ
SF2ce…ʊ+^Uoܹhr%ւ BGA-_ƍ۴^V}w:֬YCEEdffbZ$II]]O#w#LOO̘1NgA`T*F_L2ݻwwl-o᪦;#/v5q7>p￟j8'|;MSO=EDD?{L>ծR㩬7p=f24%_njF#֭h4r/o^w3^z	md6z^{hNz{{n:BBBڜ pQ`qqqp
:tgM=k@nSz5k=#VQL6
Oȅr뭷Cs޶m̘1'vx\Rt[`>88QF};wqǎMGFҥK}:222رc[ne֭%/z"=Z#FX,dfft.~3j;q6aÆWd8У;{z:5͜8qo[m6"##sE pu
b
;֬Yʕ+ٸq#!!!,Z}eY棏>Νd2uXS=7N裏Xf
'Ndڵp]w]t?MzMM
+WDQtV0ss.R\\ӺXCvZWaΝw6mt$z{ZsΛb\fqZtz6vWbbv@LLϟ';;Ȇ-[/q'77SvhOHHQ| ɣ \~ѣGSUUc=a;> VB2m4fϞMhh(:B֭[GCCCcutW',X@xx86lছnd2|r>rHkmqۮhdɒ%d͚5f6cڴi,Zh4|ZR]
-hppp8>{_wޞ3mW_}m݆Ve̘1PQTwc&%͂ ¥'GAy{{xbyz).@
ߪUfƶy/`ݺus_iZ.]
txYrEu}/moll繜qqF.\@PPv[%//M6uxĉpt:oCbsl=ٻw<3Ȳ̻vqW5Aas*)))aܸqL0}-[!qas~cII	CuѼ#GMEPPEtՋ]" f^ޕu8w}1?~8~/jVkC=
Cm/ 뎴4&#.k8ujWAɣ \MƓO>C=/Э}Ϝ56zh~C/w:Y0ڵO_{9]BSZZʶm.I7̆
X~}:qVm]@̙3z+@jN/&'N$!!Kg@$_~%Cخ|n狾Ȳ]_hZZ-,-?Y# ~"y믿[oխa_M/cmm-˖-q
Oxy뭷\U%?,s=|W),,_rNdw͝;hjٺg%KP[[/sR}s=]2sLi=M6Q[[Kcc#[laΜ9dW^Ao_2Eɓp
3~6CB\Kf<#Z
Պfoa(Š+\bLJoG(
k@?N(?ݻY_7kYAaɣ ns=7:
Ƅ	?>|嗼曞q@]As
ϬYz4/,,Yfuoկ~ŧ~INNf޼y>CO#pVAAA.QAAAHAAA.9p)*.aw`.+g]G/z:9zen{! \D(#?	g3 #=KD^"ʤddt8^:EaHXGhAH"yAn]}QXPPp8hu+~LOpQﻗ
kz:FVfb&\;RBwCA":a$W^xW_z	Yw&(8__O!y9^{%Jkjzv  u!P~^{koO~SG&¥VԳ
 Ha>HUe%ƌa
5Ñ	pT-eY`$ B,!D]]<K˕8>!8
UuϣHAB<
 pYvݜMo[Vqmy82AQ#LšM44^ A.M( DG}m'Oaͳf7T7PGd/RΤq?BCOɤࣁӜ+A)VnʔGFiPހ
>ITFRS8h	N7BDEi"O:2`vMg$6؋
s)R]-ʠ	!u?E狰'0J[Mq@)A`ἩرD5>FN:kpHrR:*8T,Xp3GMH$~^lT{TG]M׆m/4qәgXG,JdP6Yu>FnQUctM~&4C):u㦌"9f(3G13Q$
&ԯy x,GAapqT[9{۬)2[yq(BEt
II#3R'{בpf=;~412v5's#'3[XZMr:WAÔ3fqŽOd*sc~xcvT
VKUcPNԉ	NV>t$aTp4)yԆ:*d6~8Fh9\b7xC"/3#ky2ur==G8m7|,GD*Ӆ;#;E[߈n*'V))$)|u&Nu u.*y}Hy3I;PaGc`X6eRIL:ydbn \J*1CA|z<D'hweݜeI
Ur7;|m"F0SX|?bS۷|Q䅷DIQ7O!K4B%3s"чai5v*K9?0_|2&b1{AAej!77>nFRIR98wp75uz2ry̚59Xr4070uxNg{s}H>i6帏#˯~>}"A!8C
@v
C&938P߰a$w:Pqs/F5Uשgؠ?EO03z>)n#|O6uQK͔GY| CGM,|_8t8SADt
+`tn5Ӣ#rKMBP&LS]Y%$1-%5MY@ҧLmQ!8 IDAT)Cq&g+nϖ~;áx9BmAgjBɑ}5#{Q\JY@|C1~9_زwiv49ۘU{69ܓ̾;8|,sTA1SNQ廿%m#;ׁ̿R_:[d+Bc!Zwcs׍ׁ:c}9\gق BKu D<^sdcrWWJꕖ2p?7ͥڈFB:'rط 2w^
r϶*Ibas?gPMad7F_(h*aT/H!#,v ?Uh|V{
O4w
F!B;AKRLCcH2ZRZߏsh*B҄̿Ɔ1@o0TQѝׁ>đs؇(qpkΣA46@k8:U1aQIWɭr26k56+g'#B%YcgN-vk5s%z\L~Z*K08hb)-!BȍT-Tԕs)EFUTjdP4hU|\o^_OJrKjZZQtVRp\+mTYJ))jPn*B+mxi
T[JȼPL/`@j$
|N:N^O#*^[AIa	$*iNIfeS:2UyȫF:}i;ܜ넃ҜJHucCѷ;2Jf~:OPa.#|1y8"Aj5$KPrt0z
3txг˰2f4	 0'7He?p4 \g/X{pD j,e.aݶor_|uka9†8&oDҹ1AͰ~[JAGc_oĥ|4_(O$w9\!FAj<*` 0H\RAAzE&y`  ЊPjfXlt \Dϣ 0XhQA}< \Ĭ%AArs8ghM[< Ir`'
椇#AHdT_?X.l8U*Zގ
9`1a5PSS)>[).*b߾rp7p0>a	}jWqQ{~(~ôi\l]?~s~VyC|B?pm"T, \%
nr*>{:Z	ouhz򂲪zTXuԤiXe\o/(((jЙ0!_;?w%~֢Ns;*2`**{`uAӡhDݏ?czl85~noBB=|
Z>*U]]MQa.55U/#tZoDVp1x#9Z*uM5X_VײNڦm6+6^퉊ʊ~9΀rRk%T^šAAA)/9g
I|=$K2jaxxmɣ 8sL5eG)JHP\7p@DHW*WXj*~>F?F.NYLXB$Zi
l70̵͕fyEeܼA<:88y \z<]87Pq/P['C3~H[MXKC}
珹RSSIMmǖFZZZvg/_db֭ݵL&0L,_[ADD[n9䱅
5ݽ8Zc5>#()ѹE۫+5pMTvoLk0X(gX!
K]LaTTX<+k;'(NKuu5ٙ=0HG>gQ;n /D(x͵Q'kh7}x75kx7Yzuۚ5krL+V㏻~nݖYf
+Vp%@ǞTZ$_A70gH~tST[No6I;GWWZR\ٶ*;3 BږL7).*2yt4PUG@X-Z^۴}ٷ/gz/^۴_|oڦ<~WVEUi2Ĺs֬qmZO2.UXp:ʐ8t-]16"꼧9|}:dgnSvp+5ӽ"RIM?$Ѝuբ
iSUf!A>!ՂK47YƕDnkm?~|@(nhS0+56
M7l[a6cTtHꨫkāCۏjs!oH/eE%)%Mu}_A%$ԦlF:I)ie[4x	@@X!mG?$;0vo?^z6DңϹqn7z:w鰝s߰Ѯ_
d,ZG-Uh_4'r5}}G]Kg6V$IHrgnJoѧ[	mo>`+^%">m%,mWHA,TXMu/2|iU#UAϟ5\|KL&-W^MDDD^Jgrٺr`(["E޺lڍ4m$%'KH kWUf~Z_f.MaN˼‚ܢ6m'\Dw8Çp>,d&js.}p8Y,Cvv6bL$%s
SX!_ӟހZi-*-,t߹vR9H`s~X	ZBe(# 5RwBGUsKk朇]3̤s?V^f~s6 ?$Ȋ#r$HtnKƉ4|lW2LN:;YZC;KICj:@o#DEGٴqY^ΰqx5Z_=AGvo/;p!ˊ+t}ɼI4R\XD9AFrV$Ke,ajs^%8*PSQMɌCb02|^.̠DOZLz"O%26Ξh48z;XId;ݟSfdjjCB\ru.yg(/`4zFNA_Mnɦcs+	)h(WTeG8S_S)Cܔ%9A'߆|l	;~1b.jl*GaHdz
*PW]ѣ%yuxiUTߏ|1[)-D2xd6mO|
XǑ4#R=YYm!i$>((h@! S0hU 5`ɥzn?
F,\x2vWT2L˽$YETm gދuҧm}.2clWk~iߘ苞K|)۾c]c;Op6I۹v派._ή/cҝctbgp=oob9Mٙ@Cv;+$YֻlPPPcp_GR%rh<9(p4<*M".u&'bêC%zFƇ@M[J ?Lę{ؿm#rCD4d6	{_G&GvHM†g8?
~}9z|*Q)4q-`^/1[&?Q%%MDTJ,ש@V]Ʈ8!5*|?ٳI](YvM`Pj2m>NmFI9g#O;r`ԂgIZnW]xpnsjoNbJmn~KGk%{7pP:U*k썮^b[g8wmL&XDbT8
h޹G?qwn6]_|*x89۷=݉'u:G` j{vP[sedsuxi_>^*q4liG\z[ii,ؗ`5w]i}=8i\{e
$}ʂfpkM0ԉS/᫒$cH4ߛk3egcGPX9M#F!rSqILaD[8}>cHD:|.A,Ủo6Si;pGvx],ۘ`*s6d_İcq>b1w93f|
sQ^W5Sq>w}GxD,z}E«,bk:yR'LqynHp3~µܵڶ6m8#.xr)
D\vO%m
sSpHQLgs.D#)z#
ty{$O%ih"!fX-SSS۬:|\[YH+"":\?Zߴo'f6JJp0bڴ546r̩?qjb֓~{2$YfUW뙘;|#ID
k;LscK[c5*((!f?JCs	6hPkGuӱ4Z50h58|ќ)($*E )jlG% `Ԛ"Чy1j$pHUtF$IIF`ohVc)ih4H*nZ4j-68d@QP$E|Hm>:dKFNoz~FRLɁR
sQdw@*îǐ4\rdIEFvP|PzEr Q[\bơ-FTE$}M_ez5籾
v-	jwiSXa kϙX5ԵaQIJME%F_W]>f'g;c/*l1KBB":]lΊU8sL
qKMMd2]v-&6*"܁)<1
^wc1tYV(5كϤzt.=mI	G$Ki\LpPs^ŋx@H$1-Pz]S%Ivs}Wb	5kl{qlݺ[b
V^6yXniKq%e0p6#gM…1!@K*u՚
jc36LCxt$4Ѩ]CUk0Pp>ݟc8E\Q|j~z[-
7UШ5׫Հ$J;EFPEiz:{QsR^iY\{#j]J" *{}%IFRjtkl
sYF[%5o^iJ.QyG#HقN**
+5ǒ\?+
hB@0B‚[$9985 `lZp]7x>EԞOk
gHBx^3ЗsYG}[(#\#Cl$oZ/6;r%2i
MUq﷬l*k:,9xb#(/!~58㊬8t:	:ΑCtjВkMA}%u=Dq`Nt$W-9';t䮀^ nnpKOsotoQg!thNk䓏'^%LquuK@JKQTdxYk>7q۫O6uz3nGm]Q,+}s2f@R(ݲ=a竩+:ӫQ:*,0a4vssW__ςMEtGDD+]Kr蚿gpQAc02;Cݚ(Kyn}8{u߳b(Q,eIXv'ε4$Innnq|Ӝ؟M䦸Ŷ,fdYB)6$bb˩.|]3oΞs33$v;5LR0_j"Ic[|f,7;ٯȆÿ+|;"0ɃlvWȯ=%4VɊlCD4͈yF}_ĩNa6h&;dr"'!zMUhq,6]E%\>:Ͱ"aƮMa14L
]29?!zCU[9ɿîLNf-?ϑ$+!UEK|=x<x(
zv_GDdELX(HUhk-S0iRM.,YvAjAJt]:~uh#|&=HM8	 PlZ
їj.Fj[5lghi35E3Z[ݟ]3ІW&$)ėvsdƙYff}}sgmB9; 5bʷ؀F%בD-+0G
DzÑ0JQ8pb/{챔uG-ngOgX|=c43˴/Ub0I[1=cyœeY!GSuO&؟A(ynl6,R9CJUTM(^VJ?j% U5ͽ&!	]BR5cUL@˅lr%jۦ\Rsψ%(RIRN$ͶJ60g)i{l.wED[u
EI}c6_g~cL|~3soV
YQ3ʶ_81b8([w|i<^khsv
۷qF׻/sޛO;TTdrW֩(JForF^I7ֆP~3TTV6kgOM|!:\}Y
uu/ƭ:7S@M~Z^}U[X8ɑ'[s]F(@H8sF"B0r45Czb,5KeScmY
{kt{r'PŦ-w^V"`NgGΞr26ATfS_FG ;3^b8uMWT2O}egO(\8S33<xٕDB.{_2;Z`=ݙ{YGĚ
Dܱ{Rt\ss{Un\B״s]wN\hiS쯾[afߊԚ+f(īHG{;[:3'];[4G{VP5}q5K?~(2w m}=
[:iokOѴ&Ʉù|)*+3ŋ
EE{UTTr˔035qx;uNJI0&op%Ic)yȌs"8)U39
HKX챬^$w)cce1.L/fXzH˾ow(&9_,VL3855k0*M64#{Ud[WzJ=(.x]l4`S.~AW<

9'fjƹ؛MUx3q%|qĎk6ցm$,7ԧ>yFuH8}1La$O;iw_a7Ɩe5
YFF|mH>e^3OCB7'4-™c
Ƴϝ"o>|+Ym~E30Ow_ŭ٨<."ǕB50{g9ljbVνRb3BHrO6ZH@ Īi+h*`io'~
gSܢr1kA'-hV|Vp>Gu컕v?g69vwF-9yfd߹ ees|4k2ł);{Oj(
f;`ع_߾Ģ"nDG"%2;
9>-9I8-'_Zxo:Yרli1sDgG;ۿ[U,ƿ#}#y;T&8vwO۽0ehy"6ObA?y'#mX8V24H6zN^ CЮ=ZMijj99P``P޻fౘl1Ak98s[4-c"\q.y8N~9|q*^u kwއLIoljM~u\YGzWci[%^\tT=u_5ߢcc[S?~*^¡0"	@s@EQSkч?3V58UM[r}}ޢ=FccsʿEk5u
qƷtq%۰R=έ18ؿb/p8B8Y_M8v(+ٗZ>4%%;H(PO.
M-}SV^A_
@^6VỷSHF`;fG5>O;_+EUyD==~
UTV'EصDЖif!w)67k>)W5mS8=^Bߚ*kZ[l #r㟿ЍI0I&C ⛯sN;5T%@ lЋ6wem!kM
02%I¼mc&'mNqUy3Tb.n6ZL=ŶI蛷/^c3+ML@K6g
}	ՑLʘ&Skj+b]ƅ,f˪tSlyu	}16bt;oc[}зt*X]Z(]*H@ @q8Npp8ݼ;~S5u
}Tl=ŶI+؀з(NjX;oivB섾m>S[:yCA=AY,E`fsy-vb:b)MB_6 -9,N[з4;xb	4IL`7gy@ +p7	7k-cA33C!@ 
D8EQyyIN>EF$Ǟh}no{fȊR@ @p7	pH8R@0-[hNh6ȹ_?8v}0>:[ʞO`b|:e7E@ i- IDAT@ XcIeY^ȣihHk>7:ز-)eܵ7
3S#@ C8YVjf)A(-+O8z"u1-[,NEQW9@ @ X:y$#Ⴆjt1埠ǎ߻@ Jwljp{v%q9&r8i

tvv oqӝ*s磼Ղ^SA^~y.WB(LL:C(bELFms6jp,E:.\8pƹ-KCu)6D&QYKh)5'>=7г|M2k+0fj&l\M-&t5Bpz
t^Bm[e̮/k	Ofovc}}]
+ѩq&|Ӊ~c aTR-A@[UA}7|ɀ8vJo97}8ʼTTⴙPg1Cg|L4l"̲{6|VKϒd`d0y7Мsҝ٢ʼv*;wtRt2\T'^jZ|Q>2]>PITr`-D5^z+l:‘(d"aT,;^o%>dA6۶urZ
#iz(:`BEw+/XN2QRVMcS-IF645cbt*4?EYE%e^uoĝGJ*&$6/.弁\?exK]xs5
*	q
!.Vb	scy[[(+Y1m[W#5\0A1lWC_$ziμ]ij-rK'S&,UIG{'mk+-.g+/ϟAp~G*!cCR	n3`2Ƕ.?]G[+hjC{=x(A5^T6Y@(HEc=k8ӑ,enkfΟuZF?JR6nmq[\~}Dǖ*/7Gn2p-$3e-3Iwoef'YKiD5G$N`*ŁƵӗ4QnIJ7Spup7%[>Sr4See5}:#aP5LuѧaDx"V뙢XtuMCQQ:ԷS>;oɧ~ުliG*M3łΣD¹?$;
/O|
o5Z74k~A7_*wEwPQ%ҥ7ٵ{?)Jf*H8Ew_Csd︅;oI	sI/;~77nt+DeL)Zn\♧G8O}{{(qn鈄#9$aLaL2Np9{
G|oE3sUs̩}z72"Ae9ˆA9N߈-4o*fPf\-;,D
3^VUb5CrjܽC*qw'gb()<ʵrlTl!204
oTwUym~C2SѺ]:Ύ2&he?,<~c8M[t`w01ԗ${55Vq_	m^iag˅Y
2:?uME:6ocGGE(Kؿ9?%ɘ$hC.ޠYUc<_㪪`رk+;c=?S,N:娂Șesʱ˄C!n?v7{S"!rskӫ`ȚUӉEx9Ov&9yf/_Qdg!P~łMx5Cc7FX]	f1u,x@賃\ZKթ
%!9jh2ZuFSS5.=1͊d
%\f2"XҲq
LIY5[Ja2a0gNÌ%a6qegr`;M\0#a&mV%83DdLˌSCsk-U5^nłxH7N,SeEތց$QXGxxi#k@kM	f5<8l7l4#4pY%yf֚:;cmrlk)z}x+8>%5BF濏p@+c=?S,<:rif()q09?^?ᓉ4mΡ0t#agAZZ;xߥ۶^RSeet%*Qμ.n73̆VxO{9zތs&QdYd146mA7E3C$elt[bt$5)	G7YP
!=)Fuˮ5ha\GCS+
M9Y""\͏Eqmr6G	o)F4&*iF8QroBBhdi!Ʀ;"̔U`7cӋ8kSSS
t0C711*huT6G752
QOȼJ40c2U8l]Cjj8[ݥxf̆S8+mMVLjZhu7bmXZLH
՜bUea͵dn5#!>&IoLYNuLJiu֥&6qn=|8H8±%Ӣdܔy;F4A4(6tHɓle5|4m8&	z%GwТtħV47H8Bx&L-arlm#qҧ/U]A8((ٰ%
N;	]-(IZ	ަ&+^Qꩤԁ<^HKiA콮قVm,q"Dd-;'U3TE'vߑ^ZJU#ͮm/lz3fu+R3`@{+6wT3yMdpdYΝG}(oS]'oQj$ *6w)f9B$"crWR*19kаm5iZ˜KYC`ćwULpnRr@䦶c;S|&;5	DT5uƬs{KW&,nzzZ@ @)PIzbQϽz
>?35yGS%􍮵@ `9bؾ zו籣c:F%ɔ̸*<̑}X /Lp{a
,Y
R
nO2M
p؜7(8ڏT2ߺx{d366Zp=cc1Ym@+֦X}Ŝ/N٬s)A׵^P=q
e/uU%(\M+{v63>6D 2+o 3zo8TSh{JKL#(Ou;M^J2#VuPbTP[_KIdck;JkBK(arѱݎo1uN@ @ ,Ǐ^_n՜ꖽܲH\8UAbL6#aʨˎmL\`00`Q+NF0%C[n¹UtCR:omp23Õ	VQfʱ˅׎HF<
-49[ l<-.E'^S'@ ˆȁ<4rح:j^Us:ϼdN%s02:ee>FS=tڨ\Ϗ?|/r.ҸÕ1d:U @ 1ıy߷b`p+9VyL`Qvn03zK^pH).~ A x?r*HPDdM.)6%4[;)1۰Y-Ee2G@ @ :y|qs<|vr՜~;kH)Dwuu(i/3Ƴ_ןfl膁#`cgڷv-1Pds0gfۜi?CFv[	L\O`&Q+MPŜ<+5y]8Cn`+\Dy_E4t`3LBy@
flCבLb+@ XEz+Hvn৹%aK{h}O"\['ϖMJo-!~vgN@އ*j[8ca6e[P(n3+MP|L; IDATO|o}膑u@ i.A%++
QZi̅s~
یm/߹()J lhq?Ivɂ BUf(JS cc-(z?jOKg階ap2
Pb1FGl՗\hXK9>>)ik6fWYQX=B_Ny6
٬?}[a&o1	0p|VgA
+A`fIF?A'>O~gXۇH$B__%%%v۶m[i_կp15@.'0|9	d:4؋ZuPdUq8k-E x E3Ik\~r\;3;w4M7bYM$IJ\/+eQ )?
s/?COmޅ[%772AGꯈF9_<ȣjuxg
r/^+Z@ 6sc豿e,d8۶d|p1+l@ (]'O_*'b>q>R__,7yۿ+do;vss:]_d_%K>{nB5?׺'4}cb@ XDˁ4Z^Qg_YR1;=Xe^27J>^unNeM+TT,
vm^		O0|"{k,p8­_\SSXтm޺x{x=ŶI蛷/^W!\~텹Yx_9g>ç?_SuttwLMM-*
zf/UEKk//tTI"CczDKAZhV˜aW5Ot;o6yu]\PQ,n/Zhs\qQYUE3vӑgL&x	ʨjd+Y^ůYkie,iF"
̓CL۪ZgUR[BvK(?GJɄDu3Z:i|OR`055Eoo,L&Ys>˹ꦵqʺʕ+\p۷w^zz3py۸{9p@N-,SOꫯ(
Ǐo}My߿jk	8y$yjn?a| $1<<ӧ<1449x)\rNŋ8CMMMFӜK'Ⱥflbvb6zo'Μy%AY1>_?O8vAce>>'y7_)o|:̑>I	p/~V?s(ߏ)-pU>ܸq#%j:>Qo$(_GM)'͆_=c)p?_fz@ l;@.;q;ޑ0tTA+1-Vvv[:ډޝqևާV>-˲-˷cC9( @P~[)[z|[ΖBhB
!@Nb;o˶,VXi:eYv>/~yX^ggz78:97ՉڹPQj§s=ƛOO߯C*{(`S2y_<u
[SR;}-ɛGzRFm=B1Mnn.tvvnoc^i}׻8q6oLcc#_8|0oV89c!oWYnyf'zo~-|;x{9v


|K_N/p/}@vy?C3>O-o7/'?	Ν;?M˫ӯ?6/~Kvm3<-:m!qlڴ~c^&9(ob3,f8`4'!	5
k+xf`%D
Bv3E;pXMDޅzV`W7dx"A\-uOL`˧rzՕ>ċG}/qBk׾u4;?yyy~ܱ[6V\9cG}'NPVVƋ/Dnn.޳޼'OunZMM<y;mn;}?;>O8v׿vH$^ٽkڙlq0}׌t]wcCk.=Ulݺm[?[jnn.;vJ=V~:v1]ww7=Mzٽgwq۶p]|೟+^iE0w}?яR*DX!ĵo
mꔬԅ!6Tv
+45Au;ocHi:~
Kmm]tP8#IxT L&b[7.v?ǭ[r{&3=ȣ3?{']~_ͺ~~a/2]8Yg&=c"7xSp;8q#GuoLB+a=]LF\H#qy9xKjc־i־ve۝.bfwߤ[K.%MպJ{׭i&,o7pm-;Nn7HTUUU3bوF~IguDrRc,--_yEE^ip:Xz͌˴)ö:yyyTβ_.Ekk9@YiiI|JJ.^!ĵz_8s"^?y
!ěb}~

qQvڅbd2H$3WUD"|g\>22rYnјݖ*mkOHtuGcT[v_"a	!vu]X60@[[[gݍL&*+/,=StcWyEfH$Ќmf/bemjL}4H?&:B!2MZ1c_7B,h$J2뛳]8nP0>qg1Y6H~䱲GS5t]Ci_·X,umuݪ:֯yصkqpgڵfL-OݫkzFLUEs
7/w~Ky;ߞm[|cd7~Ǐ'e:'Lk<mm\L[ԥO'|sOI:u
u2m}UUESSabRΦemI?SG'/q$qRGy&zp{
aRQDfFL&@fl>vsIYh?I~ŚM|>OqwO1O}H]6Z!?̟3O裏47R|/rҸ/q}Wlqw~'|rR:|)]ߟ= ȇWʭo{߿N}{ߴ}}|_/~_MzDuTTV׭2eS;@!uaBgSYk!}$K#]Z7-?n

HH$vI+b1MFLfv⍅b0
x_Ujq8tvvQo;&ٰa#'ֿ+}~Yf|	Bvsϔ&^ȈPܼrw`X
WkƞO…7-IgB,K?SV*b+bǓ?y^}^zE^zrEQӟS2eĦg?ˏtrɢ{=R~!Ν;ˎ;sӍ7)


fu.h4=lTmOEQx'OG/塇/|KpOo2{Bq1h;n<TŢ&X+o'^}]$TUyb]]?jVX?kq\};?%;s1^/lQN|
(tY
0HPT`ͣzQXS'HZ%eL`']=D43JJ
03d/7@eeYQ_;2V9=CAohU7br,K(ͷtwwwǪUH&455/_>|zB!h->W,YqM#+7lMfԮ[EYC30~[ԍwj*`̉X%PpeƊB=V͛kqP (~/D)bƵ
ɍGزe-5ԇjPeQ%XT->wB!~_?_׾-ֿ;*BklGXlb5f4M\dfÍfF1zŎdb˞wQH,ggs.[}7:wGNѣrICa=?Mi$yGiycq?y0a[+tOMը]gaB}R<
!9$Od'gy;@jR\ifx~"+Ww.Er7BB9d\B]3AB,=́m ICYcؒij_QXɏB_2_oN'+f0LKV<4GXJS^5uY]bB@cӮwPG9S::LzԘ
P9[	IHe,3~ALj{Bپ5;tFF$Aуݤ0,׀²
z;Bq%edU!XCDPpd֘Oǖc&?F	ۃa cSTzb-)s8
$0ZoK3տBk-ǟz,#t~ӯ̺p+mbMyODZSql?g;ؾs
5“ͳ)B!˙b4
RTR=mrbzo_:&7&!B!ě@9:aN,GI\qtMK_b5p(ϗá`}R̝bmJ$cI~jLnobTƑ&Inog.w~hX,	s
:wCyf"HvYq蚆`$ B!EѬ~xGUM&a3&וNE!B$s	s6mn6!.~tB!B\'̙V<^]O@԰Wdh0{B!%2&ɼqجx[8*VoM^*~|>GrknT>npqiN6/e,,/9eԮmʋӨO+z\"(w\?g|f٩GiXω&7>r-m	H~SI~WG~3Sޞ.bLp1Cw31L./K'94H!|xh!FIuT:UsH` oR,DٳfJuZ1**^zFa-(P7D-yT&*iUHы:c]PPZIY>!B!$DH8felgЍtlGQfliZ`f2bb
f
dl|KUR9II#NgF zE=U0+(
^8UXFZyZqGУ9elX_Kt 5Â'զoAU%<`NIq!B!8RJJ^\QTWwߡ9]_t1g0rqڕI-8%51@KkߴXk_;]2N\n1CÍ;ǀ%sm;=;P3'Nvx(:m=o4~	kB!B3^*g}vڻhm-0}UR]w q4*5xWCo{W9؄Uk)Mj`xŹqS'1̩;eAׁyTB!:U:+7^C[{.ohţ4ζ81JO4>*"]SSk9ʯZθ`!z4ьxt>8k.ADӑ6B!BeEtZ[;~kGVAB!B&9n&pݱ(		q(dovP/Cƙ;g۔#I~ǒ&\k-88~ٍ#M8Ǒc]n}J-ߠy-m:êgfl5	/C!l2b2;\o,B!idD"3kkkB!K  \4B!&-N}->kNⱬKLE`4 !B!dѡhZ2zRvpTlCl͈*^z.$LW3'Q3Ʋkr-m	H~SI~WG~3Ssԭg&q8u<~k?CPu598GԞOAQTQ
0`(~5.Gq:6u#ImN2PYSKˆ$NzhfGoo/agas	!B!y-|}g94rjdXXIU54
,MxW
t/|o
VnBhsRxU)ZK^A.]mc^lbme	ŤqbUJk*0
|B!Bc/|`^.o8e+t~eU^mSk:ȳM3f
ODZSql?g;ؾI/~f*B!˟-וlU!B!Ēgen7B!Bfo*h4Ft^BkF+B!W@O_\ڏF;+`VU5TubMFLfDD"A"x'`2`4P$ZRy9X6fd"hL/$41MU1hZ2FbĖ:v?+E}8~9Sł
	;\8wYG8.jՎDbČ&Xq`DbĖ:v?#}8~9SN7hH(<~Np$N1*ɟ2a
Gز}wa~B7Eŕ97X4L9ܞ\rrtym$&1-M,Pp$FbĖ:v?#u& %q8!J˪}x9|u׽|C`xL7ٳO>ocY
|C_,3Ȅ9⪡~tZ6?eht^Ο=:-mzn$4j|mHLbR2-lc)8$cTF~_GӴtl_
lU,{^l=^]7n'Ż.0롤Š%b{)((A!	ti:HEQ]햋x:2}y/ʪi{?xe߯yƛnj~?OqlgUqU|wp,	sEhcNTMMfk'B!.#}fuUm흓7}XS]UƮwߡYђ*Dd;hx,B, H2bcYTUD=CdQ\5kWTcl~v6h8D8&[~=lvB!gDE*>~:/R@J< Op)Ξ9^+/foHǵOUt_M4Mu@>MmGQ\54MGt.vc>4kЗgd3]	GB_-xgS2c9(,(n'c9m2:)>"y	sIJ7>aN4zE9m]b	s*͋fu`;FDcarsүǗnPUU&B!5Yo51\M9Ǩ3ͤ*7ao|4믰~6\ΜiOoYm?+/28	sěL㴶t\&{#Cנ0׉x4=lB!O;޼ر&LΧ-@8G l՚
Dqс9ξ|&q*H("sO3[Suyr誆AM$Y8	!Bk!Ǜq8t32|3bzzk4GB؝M%ƛ+e%(r*Xee5&[n+B!=Q;t:BKG}Ô7CyX̬XQ"šGH$8d!⚥
Ϻv`ff'7	"7?E1/QvJ1(j	FR!.&fwy<͎`*ˇjEt	̻܌&#NOy+U-22fr90M$fP^
Y;vLpM	ّth;0(fF/S\L	.v{x24uut]>stY(|ţI<KoF&4x7Cr&~]]h[g˶ kϞy__E}l	[SG~ȼtU^/'/ڮjzl|,gs8Hk魬u9o3ϢKݕ8UlvQ˞B]\W!qhӋbJ_iUS<^&׬^tQ1F{O/*Mk=G_o/qW9kVb4?BUNai5'0{a:i
7~E	5%,&	#Ct˓o)߲=oYJ'$|oP׮߽xp//v9=уo`񫀅>{=9›AFcw3bPSBoO545&蟸~uFGұZ

&.UDrR0D<ONpXL$Mp._:@%Iz{:t))tqءt;OnvwFRX\>1!Eu̹S][{Z)t@`3w<:"EWO,؃ ÃWT	G>


m=]{(c;K$>Nn}xU{Ic*-!X]Q.v:Ϸ+<̾>Ssrd4ƷBs;_b_	LWA5n+ձnD1誆f.| k  HwGruhN$>+cTլF2܋Yu9{r\g
w앆hnVm܌EM.置ϰ]l(&RLV
lBf+1q	]v6cpb
TUQ!;4U%y?ͩ)fjPyTZ.OC'˵W:imijc)-8hQ0Ã5tvPXP~VlIm2݄d/L~vI1EK_bs5%EQRn3񸓾zq8\hn$v-uBJWGs:{]obFtFF1.O̺l@P0Tk9Fqܠ(cxWvMWE9rU
I$&jVNuenuR7~-de*s?vrEr:gN%>
Fhm9ɥQZc|=xn(z8~ ]nevuLq{XƾiH馤c/=Ŧ=醴1g26|:-		+b6֕bHiDtLTmHPr86bK!n9:ٓǢz4=-+!z;;iSub5脇:8K3I&ۉ6Pt5@`gA1N"F'V="n-8Oc͖+'9PW7	{n%:ȨSdjcM02ǓUkvc6Y@*|cy._kUntgTFzDAFG&*F#.Ha%rlxԒI|=lpf|-_ys~
zןUPY`k/-*ett4.` Lr630z/?2q@V^^E˅(P8.F²z6c/=Eî'Q51\nxJV8*h\ IDATG"RX7
n;ChKɯ*"Ʊ$,U`O`E	#
6Nh^RJs4wEi]5hHElgzJY<[̺P~}JNtO:ik8JsL?UpDFPWR^YǶEOWr`Υ }&>MTySԩMY~-.9N6Sv19<,̥B7}	3
QR	FqnJ
3=VOIF\+X>B'4e~L\XFK.~;]
1yӎGW{fwctf++NxZb!\r.?CP0b[V7C+1j	wEqIr LmRX@S	$"|'u±$yB\vQ_;*
ۏ]5<Ĉj$
+)Ü&:N0Uls`	SZ$ݕpR˵0C z$H(VWkM
%I<0Do&gc܏(t`0`2@2ŊjvQ41ҟ!I,RXZ?d'%b`$AN"rvţlؓ$i};
7\oYMH\؛<̯{~J0QXwVqƎn㞺-y#퍂9gr5̾>rZ80/A{^QG<㙧~(1&۰X,;`?L .#?(bZa+W<~¢R6nޙdZL$D:qok]}y뚦xy;wzݷ;wcX}4%OqInK/3x1[V$9i3ۿtԮMgNuY;BKJJ+9FFL.ʫ'	SQ9hOqO9R<m=:b;E
2jI5v(Gќџǿ#gc*6r
0[qWTmPGi#~đL{8y:cgu-I2ZnX
EGx玽lǵdv:7s&Vnl+;#OP'S=$!k=E#TFeד?@Rڥ\+Xx^B= 󖢆5*8&m;b׸X%]zs;VC>I@aWЗW
3LN17>>ߺ,ei
0취'щZk7Vtk\*"LT]yvc-є7cYSŖjlֻ͙X˭|=e&Ʈ5{`zj#{l}q>rUkx9ecϿ\\}?6r,]nWk||-f&h[
K?hL]3Ӣ=ʙOhyޣ=
k5}x_yɖ|ou"Z
MeTJ*j-ͫb}*gxB@5OPIPz´1|SO
/|j},<@tQ.)vj9{=B2\voN]im;_-ſ=48_\J k4s1y5sq=;!'49i]*	TEh1]*S,e	y:N%J"Va\$[aY.Xk}F8B0g!GkJkㄹEPH{7LO(\@PuvC-A4ThV	WvhRK,M3Vzo.ALYՂIv
PXe6]͒)Gt.~0LrMUnz7bzuB
,X6^UB>b4YᶾChYF~wX(VނR3W⺂y.ҲDR/&z$Na0	͇oG!([:F5ɷFe4(]a&azsԇL_~h GUP?aDҜxGoT5=@񫸝[ء}+e/F	(5sIsY|>?e7f,
qӯoUufzn`˶5fm'_)++%{>c:LRR7_w#B>Y*5DxL*
.4X-YgoIt,+O;'k|)~/RousOr8o}lY&hL7
]C*P
:u7Z~@q,*^
QMM9Vo['\Pd'xb2%]y28EeNc@h)UT-;7)膆+]m'/6
F[ݻ{E	gJYEQQ4q:ew/̗
9jdDI.4QSӼW=gNٴihyZӣp[)Wu>TP5J92qjpl(5Y^)X4<%rwhZڱ͟X)Q,P*S.bnSY}wm	{֠.j4@_GGn¦ZX Sv0:*V#TC1c
V1}+΍SDasyxb)U
(R3SNbq)vDHՔ)8vYfSȕ@ZJ݂
*s*UحzKr)>_9^AϮ{cEd߶yڤgFŃHK\<)Y:#<׋bVf8wiDcw@O+cxC8l;UsL,EN˵;dK6-62_?dN9#j|fc0E{M~•	Μ|0g	v1x8}e'VLTxA>*fɁ"<=A{<X#7KfD.c#[5	GBTsYҳe0~T6=Z[6!@Ś'5%(Buѭ4_^S<='eHp++f@yMgES,U۪C;81!(\A1| S^ȒIQU˕얗#<)LX,VyY[k:
tgjͯV2_(h8HXdzb
CTnW[hgfРB(M@W*--(پG<sQ2)4z4=º׭$7ϸ,x<3LMM4L.;ő^XVc=gqӗ<~zw=J_58¹
ݷӿ㛿\{re}:-}dh}#yWMfx>@Pd|&{?D$j
L&9235NDohO6C];j?K_ja(r]ZZ(zESUN&
«Y9
]B(&CQPHγN6^S
@{**	=q^\-o?8̦݅nP0A!?>lќ
3"(1TBTE: <R&}CS-JUvМ
B4Eб)l|U&_`4-,Ptu¡B!	t<
r	<&/Q=@xďO3[A"!?J1l[Ak!N}v.<`jzfm
W04jυR̦ɕTb$4U*%Je[Ԟ6LŪX@yh$Vg:Dhv>:;cSp~s3eS5?j)	$ݎnWpsȤҔ,Oш%;	됝P]bQE$">צby~fhm|b/Yk?fOW'335_IwC40gZȟH]I]y5$οifӍb#^011O޿i_i1;b`Sϓw"s=&=W3-?G~qڦarwtmYfؖ_ere_W[՚
Nkk,4MhU7K˶nMN{n{*xF.΍QEkuq0j6I;
]L`Pw IDAT,`
3c(1H4щWQ5}C*g[QH$wF'8DN4+cp\!>?m9|
ü?l4"FF
R*UL j6s3vn<2P*UPOSoLQ6LI{P=[O)u3H0h	`(-5ʛ&z7IC$ks$6^:hp{ȾR)mznF-395C$PfP2095=^w6ږ<{.#n	]["{i7Q>8vt.Ԭc6LEUW]Sߺ9D!fξ!ˑ6Z[llqw~{J֗t&K=AY/ʟP<Ǣ\(P,"*Q)hS(R(Zq#FK'Y<ۢX*SP(c'$crS̓Y`f.JHqaefqV$Q@Yg屔ϑSbT;vkp$7h)fm[1JYe[֕&y9D[qC\lKf7}$#&SsLm½Ck]>B%-_͐H;|S_Bbp-C])Ɲ	?Nfhc"St(6tny/)gk
yQt`4ϗ7Zɚ`:!|cv!O&A3tt1Tfn.K!_f©PAo:S-yPqšk_6
(JT*Kx|G5G(#~ZJT5oDxsgV6T&VU[o!2r@$]ܖ=>Zvx<<`]5d#PP
Ç aR'uWAC[/bex
Uo}blvްzT$T?Do:WT|V9Rvu߇^/7\xJWn:@'u
{cw]S̟/{\duqB9'XS|qX/ط=]w][SQ\Swy@ڕ}R*(߉CSy%z?=&j	83;#Cг|s>zxtvܒE?~do>W^?>GgX=ǟp:jw{~'ytD#Nk)%ɽ Stu"3Ke>S}u&nH5APƴŞFN.!t${@*EA4b'L[v-h?Vxq]PдXr=n \׋OXÑ+j96H@[
z?˹K
Vs~~AB)3:9`BQW,.Gyr״1u,.ī*6DACH$wp(fXthK̈́%5cfZmcŒ%CfnzrBձ/md_"IHޣw
:Txe>$oner0M8OdT"^Xv(艽987|S$fnr5g'콵k{"^8K6^K+j*nn0_7М' VOUk
S7
	b5-*̝{Up0tx880s:ܫ|'rxk+LQ-G0	w~H@÷x6qӧN3Wt0~Ճo\L(rnRno~JJBA;|Υ,U?`\;SZu˴<ẵƽ9~ģefJhȼJhZ@.{j.:UWnK$+S`ߥDFAT…wOC}$_==:_l`_i8WDzcW`0ʭ];>gHn%10av=C(L}ů~@SS{jn?]cc}/h--iPϒ?#?|^|Β0$"RL^KEf8Zfϝdl1]`KAKtɴG.voZ
*Qf-Zx6nZ"&iE{m|?#8ץMW2r a?ęS.wٽC[C%h{x)A)Τ@xx㸀u\EEӤ*噞ABSoz#y@p*T
6!lOOOw@Xgf,iu$eT{϶
P6 2g͐qJ]E0BQ,wh&	cmJZ.'YTO3\a~tr!5-]k># `(eMbլ
2)p̶<=׫[=׵q	= zoz{cH½/p[z`t*J>\ףJSȫUG~%
=֗_02'ƾ'_djӋvw>S^#hLYy2yA7݉QfM.|cjfRC}	>z>"`=P㞶9B(>MT?DemVzFEوgc9kQ"H$D";E^rΨoq_Ļ%޾D|gՇ
BQ8 Lb6z߽]T=1z֏]֯uaGhEQ5CA!@F6bbE-/7bs/!VڐRPO&+9^aztW@QOPWQQ5mһeo-phC,0iPXΝ(H$D"65O%ֹũg*ݗ_ 0d m};hKWK=T*4\W7BfnőH$Dr9
aݳTcY
3
JZ)H֐`0B"ٳP!6HP(
mF#H$6P50Ivn?M1v
Qv4iHK\!mgE4)WHQf(
84eK$D9PpֳaXaUoG"ܿȀ9D"H$Uwsj5H"l<@L&'0M"[hFJ%WvYUغ
\˛-ž;	G'"-yBBOo7q"*BYY;҇fD"HhXxѷ|+_u=Q"Wom)/L$ $d3#L<$`]J͗(ggq2UG8JK

>Xçkg3񡖾Ta=K$D"g9`oGw?2RyH6w춪Aκ!⮤-*?L(CAkeXng|mDC>ۯJ$D"]5o!onAyV*it4si4Z[}mq|l3Q50Ԓb Kd6hGcQjx毒8Rq@T*XVm9V+RQH$aA[LQ.Iv޽`d͙\*0udw+#|ʣF#Dd2<*H$ɃG[,)5h|FMA[ [{W/'8CD1W9qѣ>MO@y>CGczg81V^[c>_>a_ݑ'hQ$D"H$7Cщm33+iv㩧a$&8U
|}|I&rFK,YgVQ0|1$
V
CEOi)ƾJӕފK7tr1RR#}1Mm[RiFicEطH$D"
NF!(b/'k{'+SK_ewBGXeR ~YyT	Ap}C8>4GEQP&5Du,*H$D"/aZ^^~c(bh"=SC#oI5e=_sچI#H$D"HnKy̥vUM34dLL3>%=5`9MHK+cW'-{hA.իSvBVX
O@ndz@zJ$D"H$RbKY&.^fas*qnZkXxJC?TMG*:rHq=h8;ٖG2'{7{ݵC="D"H$D"nKy=6W_(++|UfPH(:,nje2d,H&cOqnU6$mJUV[ռcζb5H$D"H$m)bbSlcLBvt#]lcp[cZ8$}qFgJs*sZ#}I:BcL4MDP!X[>i B4\t|.O$yMBFno֬LltH2?,,̵QJVLᑟU$
`ϱ(b3~mZ"W_Bs򘶅+Ƈ?Afat:
<9٤nͽj5tq~ШTÖ(J;nxx$oPxbƷQ?)㻾WZٶ˶۴{lc
6NmJ{EU=ǝz\+\y4}9iw꫎hN8M(i5-99әGdC|NvZGS12m}y6i鴭v5[es9s;FJv1DoCK~cRS_]cM>;{s[u϶UenݺncO	@,Ŵ\q8r|oM&='OZr/@mgu)/{ȿxP_4MݓG7&O?c)WY1.\bKq4B16BԶ┻׻/
JD"H$qfOcm%*3(d`(SXJ^>\Rc
URé!'YU
H@UCSuƇUPʗl$OE8B.Wiocb4F@q)6UEESR#4VXX.w̠@4h ,G<٢(
U>ٱHj}Q[#Z"H$#R.(J-E"lC4鳌Mn{}Oc(!f5\~=:dcW+()"nfa[9n$iĬVX^.Pv
*VQCP^/1X"<$l]TbC)&#uV+N(I
IUJ墅-P(cX:ϧ{vlr܆wRtW k^"H$Kn1KTbxtH$mXYZ$168pQSihb6l̆
v,5ETMpV#2hYs@ PAQĂx( q":J f0$41ba
@K!_{l~&F0ug!-0:Bx*
.ÆJ$D"H$+{z/DaGJzeV*u2Uw>2;)\Lgbb	4Y17]hT
120Sy^g{GDl2
]"IHV=sTU#ZFw +BtFAzj.,2qy+;33ˉ[C͓433Of}vާݔk{e7<(-;o;=>~?U=
_VޙO̧o	WZ(prUi^+P4(J;7#>]7kܤImPD,HV JffQ:
zԎfT`}+tTt1޷*H$D"#r:fb.'HM;?:V|~B!
`6c14m睃Ḭ/XGӻl&``hvO8Z:줷$?]%<QWUH1xIզQ*p;]pH<"D"H$/S8mb(vXM'p{:inQѨWY32:M'hOP3g_܋f[7
rq@^ulf'H
266A25tOm#p>$u0Eӓ~[-;3ٶm*:aeq"6j
i2BRD(8l)D"Hl6p]l{J;(#eqajl]/ԫj
ӌOjBf[7S)p;Q2uj
>Gjpa^X
Y^-e`U`L?0BƌppW+;ju}mlf/(ڎcJŋk[PXVL H89yIiu>BMKh
nݺpm&whwkݲVPYٲ*_meIIWL͕-myvy6uYvzvKX`c}#[jH$D"yjӷX]Q):?dhhTjh,
.
kԪ%J~@.-1N>CgiS$Gľ4p6ng<75~/Ϣ`Zy
yl޾XժW}dOuGEQdwɾ:@}TD"H~tzyĎAFr8k_kׯe(jepa}kܼ~J@R=2Ir
yn}qՕ\'gCCC,..r,JEMӢQ
@0ַ͏?K4$!=Ǟ7ѕ,3cLIphRħP)QuOcT+&z[}+eKf%3ÜOw1=7e?xYJ"7,EUqlfisL<7o|ny,2u{FFu(o˫D"H$'r}eijH8|@fHn1_ˮ./ҨWʱx寡KdY!FZP()yt(BeRVX[YWquyŅyjy14UQiM*:~X43gem-my[q_#-RU3?GhxJY
Ɂ$PUQb*|O 32WXk
O&lzu׮\29s=@T*؎M^P([yp릷M3>M6%M3G<!^(Q,{_$TH$Dhܗ^Xl6PTUR)Y\ـTJ'2h>ɧW>%0<8CW h*9"0p16WX_i߇JD<6>i[>F(!C!KKԪ5bn68@q|_:vKkn1puF7>VAro^0n,/u=PMbh<0u]\%)ޜBqUz/X\?LM{/^ԱS<bG9}r:kwq'ÓJܮ(WBO0=ld5@zF0e:6^E%mrDD/OZ>\l.gȔ>>o_>P}l%
GLJ)H$rx4uTT`bb؎
$駟s_B4.||59pglt\R`dlc4oiEn:..nVEUE.YlǦ^126APq^9	+@
uFQ"+a$U!3<w	a5 t/h-n\s1ļH$D"QE}0|>Ņ/|pOZmqkGv!772*>0Jgf[3+k|UM'5h:3Eç`ܞ[djćS<3ǪTij~
vk2sI߾DD"H$K٬25-@ĉ{B D’f4DD9W⌤"f2u#꽡t?AWZZplEw٥ID6lť"F$L2d,XQiF"H$@jdjqCݵxb k)IO$)\}ν=;\\>M&3O>4G^VpZq{WlǡѸ/c)D IDAT^m[ vL>G,d9pmc6~Ӻ]$֥\fZܞmBqDGi.iͤ,yk{uEiջW/utmhٹז}SGwh̃/n^E|Ifѻ4uc'7.@0дftk FP^-Y!;&}* hmw_j筗ah=U.İTn86F|Bv#:+Z^**iqU۲^]n{Vj=h-D"ޞ@ S
'9%LЍʵϲQ.Bx78ՙ#H&\V|ט>a;vm4_g4]ûj#Gє˿齩i(sK|!b
&:65!p\G*heӰFeGQc~bAQNcWT.
z]޾n8uh|u~SO
ѱQ"H$Ƀ96W)l,3},ψ'wz@n[mf8,,fX.䉓|._y|+_GiC>gum!4U!(
VnK~2x>݇m[K>':.pKjνng<\ًKCCI!H$;?n3>115jUt`}Zro[̰] qIfgg8}O?sMAxA2ktZy7}5<2q(./vy
TuVW[	VF'd
-#zM
J5ϕ16h@ST4_#SD4IP TC|J `ֹH!d>W=O<8'8ut>'zNL)D"<>bSC{m{vz=<ϟ筷rmi1Gv!mۘcŗΙa9Bm3DP(ַ;>1yS[qضmDQ's缸mz2?ިqm?HpOLooܷ%Mh|fٹvH
4?%ZԁvZ'wybBLdtlzbm}۱v: IF43k̗
Ο?VW>
'&60Lu'a$(UL\WMqy|
<)UulU:u(aBl?%SpunWh!}JޣQ,uʾĉcTGT&Fax`}ywc[QyRƷ\b=)Sc4#	[zQw^[o/ab瓏CU<{r+4"m6P۱qٙ/X[YkܹsO{m~?լpҥo5mϟS,7>	#xYGZZ=gmcATT-ZܯYNhwWmzk|j6	r+@8 ˫\t]נhh
#èhD?.Q[??gW:u[?wDEO _s<~ӲJ
RTfd3(ղ,\ettCj*fٙ/y9͟ho-UߞZaujح?v۲[}ZwDc:[M_.6d]3BAS50JSm;nؖb
L='vt~y`|躏`|o(މj*3;7syGobvz,@|r:֒E$x{aD"H$SϷNmmCÓvCA=gUWb>l>޾ʖ-oKAZ6_4ћԹ.Vg\!6R`џl{{^j?iܸysK{e?xThLխ[Wc=cǛ'i|ouIF[)yRw}}[7/384F,1*f=pu%C<>U
x҇@jϸ]SGOX>
sUyTTH4B abdvݴDV˲,o
r䙾#_;^DgԶVZZS-y0PVcy[W-uGpiBH`h`SZog9--{IoyT׻egSGKmYz/A14m'#K1t3
NNmG^{vnٖUջvj̭[7ɧ9~pE1GdrW!	97O&ݓ2'e|{HL8`P8ܹOq[XFG y;HM!7zxuP8tɞB(
N:ur$D"JR+Kj^BP@8;x%Nr屽(X*ÜH$D(se?6>qg[Ann?H~7yq{.Ik;?k}1}tc|{Ϳp_ۺ%NvJ>6q{.'mo
o-[!s*ǧ:Z@hkֱ?i x۶:_kg6sbTo7wz6v󬷯ﻹaH$D""!qᝅLa?^07~7^{_}oCx'yMϣ(J_wxW;}fuLOO0==ioe$o-~Gx|U9~0מ;MHj.u|EGo~w!vG3B_Ko~3[_{Ntnk|oĻؒ]}7Q	DQAYP*V(UMă?!R.դRSn/~LlY\*RRרWIo\ I296Wo=?]G2&QUE"H$ǍniBut#	kOݝr2}>/M^~DΝezzMKg/ں@ㅳ$1.^֣=^x,
g.ٳs$ǎMHx:2t:b	
žQٮ7tt^8M;^}o*oֽcLOOpҵooD|Bi$o*D|Ȼ==^sYD8sd<bLN35%f@fvFm{w'VG<"\x,m<"i!xW>T\L*Μ33԰Q4%D"	aAUHeIvk;cex>S$i/cS(
%fәmO(}Fz{sx)\\E$*"ٞXj$A͛8(B>v<32=JԩS3]@ϥR'c$(
VFXܰp0$b5[.Z aYCA0a
Fjs'K,]cb$"A	m>
h"h6lѐpl%zM7JP,
hA\
Bv'T;
D"HD67tIXG_z~bLTNߜo6B(P((J(*=t^|הs_^w[f:%=AQҧ;E&uOCO>ӛ_軟VFO^m:}C'އZ}YGog)J}.]w6;nUֿST'iOzѫ|=O)Zl|P`Q ,W!N5@b>&2ȕɮ+N>J*ɒ]m%<;mY6(.%@ik=j Ãq&> -i胏ߖ]D"H$a{}t4sgoK>T,wʾއ6ڴ.}EQ227m{m؜v'}byWq'Mbyi}Clָ;'qczaA~ok5CzaFjY`~f/)%H4,}qٳC#AȷR6uI\
%fӫ8hBɆ/tZ	PCȯ]Xg]3Au=+2\5AѵnW CATrvUsQBԶ┻׻/
JD"H$wG}ؖ%IUSJ˅UfQR(PN38/2̕|fN\ǴP!SCLO
eZ
|?$OE8B.Wi۬$1$*Yѱ)6L*
G-24!?
Vv*-`Y'|~ [T5קּ8ZEyD}7߱#V"H$OBDÖ"HapdF=hdm vlU\G^Wtb &GYmxg Ew1wD"H$~~^K$X?9fr8ש4]4Cq16f|;"
nl8U+
4_ЏҬPq|PQ
,KԬ(hQ&AޤRiӛ@HUr|Me"QFpjHy$LaZ	\iݓg!WnSAq#Z~UEAePD"H$w٬l[D"TT,)!<83rh,ޘgx7Hnus6>sAջ
~eL b|08~bUe-pA
3%J&+U1&']T.J58G}U!B PP(Dݖ	B @G;aKxǛ'i|gff.,>Q+H$RQ=Un{[u|pGQ?VJ8ի~gnq3Mz?omS-p%׊I"L6XXo0S3n7v벑[d#׎
J:wutAkf_c(H$Dr8T"=!+H$wSLNZx?JOEH$D)j_g"xO"ת/UD#c_8xKCtG۶V&NxS,(KÖ"H$!!lnե%jHvbe9whߑh4FTzx4n@v6LeӢQ6ԭ-MUtM ̾ϛn}K^zѿ[Uޤn~+&ʖ6b[
l_J,u;wmP,-K$D"R.Cn1{H~eοW12ɤܾ5Cqc?!`tlwGMә82Ej{91ؔVPWc\-{avz;Mm۞yTzdPuli[jVrc~dcdr=Ƥճkujx?}vZo;:ݣ}϶{=]BT)Y[WVHgY\\?q?Q"s¥Öu>;l97Ol# IDAT?)TC݋>`q!h4U_CUd1~;@2^/HEDO&	,-8=l9D"HT8Ʒɶo@N8'u\4(#9XEݺsrQQ]躎i6PD"H${Eyh$U_.R0-Blus'+艿	*w!pcuEATV yPjw+DG:{Gu]Ƞlvw4~[oָnx{X?5ۡxkϒ9XrDD/OZ>\l.gȔ>>o_>P_xt~a|>i@J$D"۱Qxf~O~{7~u۶obDy`;˧*p]׻:xtmYxm۸E=mZ
EݴT
yܧ~ygy3JzGcUa5 jZF15bc;=D"H$K˫#L4C{>Z\\䯼_53lˣ>BJkq:+rG|BsH8i6iM_y|3g;$SD`ozkJWԻXQтwU
ʥ7!$!ٝNv$}gkvv3y\}x
R12euu@
?Ab54bĤ4r9w$]C4VWCç/^Af_%ZR6	.$5@Mlc+>Iw!k
z6Hé{*\fBE-I#wɾL}t9qNtwn;"ϊ3fjdi=G!Lp6$qFN5]7DD4&M:#$b/1b8K,aժU\xd
0`qs^y%+.0>~l[orgd'1Yrw\tх1ݻv'0yߟ^@.N9D̙>ðaC8S9唓>7#Z=h!:ЩoV1
.r*F5 P2~թ:dIDD@of˚j%ނY%%KU"¬T@ĥj1葟N@rBxٺu+}+`_PTTO}}=m۶`PDS*IRD۷S^^ƧroI	۶n?g&33>]vrJ0^DNn.gM8ݻXz7rI\p%
M?yNO~>۶na%L#~~zHN7fjgwAII	}f>}8q",_f㮻~Cr`8

"2$''SPM3dee"Vc,4ُ,PH /Cq;.+d|늂"+^.ys'0St[˻$ԕLq#8s h|
O`J*\a>
QU@[}>ۣEJR
i$:z$'FFZ*iitl߾>ilh2 5%i*{ʨo3Sf 77kw9)	n܂45u@FJQtj S:d)ؾ~{F4t(>G7
8Vo})8+si5%`irrsuiNxwD.~gy9Sc4mۅ]PPq@>C
u}%F摓/ O~>6n^>l޴ݻv2dp+F:c٧bݺc_xQK1t"6nȮ;;vlXu௩ <kPkN@;0TCPkGIDEi5Jֺٞ\%`\W.TF*}X5NEyX9B qinj[Zr9q*Ʀ{٪&i,ACU/}r-G2=kii!
rM73YL8|9g"'M䬳OWUEa i[5~))Bs?"MET3Eݙ5п:QHI1LUWEm[M
lqn&7Ҡ9Wij2ڶ% lWYYICl¤g
5ה%<Ag["tM
&R=lOqv?Q=]"2ۻOMmccs,>\nzNjKHtq:[۶6~|z=xo;ڵ9sgΜIKKG[5x*|Hk#,\Z>mlhֈ6ꀘ>]e1ߎc->ۋ,ll@>z
~LssFAU_0vLSOhv+Rݱ8λl۶چC6vO~:s_UMсgjT[]]
>+=8Nˇ1V|uJqܶׯ?w7>4V^…7n
=EQ@P0pMESNVxAS^oiRMpq:VY[DQI/(Ox}'tŊh,[b!"-->hU?:6JsSr 粧t;~v<WxdTϰbK
dg~}#LH(QUU]w#2r0̙3կ~śoɛoicZۈBkTV0E7]יq/uOp*			p
~;x0=W_{;︃瞛sb4A.OCEm֐(9V"1c2u̜U~y7hUKt[lH|RSSӬ1b\UUٰaV^ڵky뭷8x6666E8ru6Dl:>lN>K8׿=}FsݿLa&fg|rJKO_~\{)**;aVXeػw/\^o(QT4"+
bH#(aKx'X~p)0ydM7DCCZ#UW]رc),sW_s
gyf{Λ駟azlٌ(I2dP?2t-ՑsIsO2_wkW^N `GaCS`XxDxrRp9$M&⣶F%agHnS[fW!tR!MU.GYSxN"MT1'ܴx@	G|I^ f]ZZz+~;^ꫯ7o'|2]w]6.1'Os=/__ܩ7o&?+**PU5G
vz>/	&tzH#4՗pq~f}~UNCGSMļ޽g?7MU"Kck(***7ÊqRRRcsm,OD̯-?rpq^Ӧ]sX_L`9ڭ\4ECEDI:"HA xMuQN
pI^n)x"*\GRˏTJ@A^:4kVO^hTVpœJQQG/)d}4U4Ӡdt/o.&ʛ}445Q4"f>D.[xi!C0|pdYf|w<,\O?4"qF̙kWx\bs!77C8N.	&п222"ʿ+̙C~lsSBWq9wNћF~<3<QR/KN<^03LDi)d&{MP^^_KRR"I."Fuu
M>R<ULfzIIvh4֩G1x$dauD&u$P;]7?13gΌ({7y駹z>J9xF6666?.tt
M,+XnY34\#خ 9USܒ(NU"Y"&N[*ǑѱMg+X`o6/}>k׮e޽hƀ8p 			QTVVZ9ZZZ(//N'锗[y"x<(_P_֭c֭RTTDbb:*TU%##Á,ˬ]7rgӻwo***u,DQ_S__ϰa(,,ay444|rEaر1"dY&==Ӊa۷ϴRhll_KrrrT?%%%|Xoi~hﲳVZŎ;8bdcp{ܨjPDSS@.?[O^EQ.`ܹsj*>N;4"GG^_qرk+WF[PP/رc4h>b|A^|Ek>c+1т-<,LNNB
a!
	q4ݖpJj̹~*fh!pITiLOE7|4D=l)ӗ	j @=Tq;\D态ji#D8(Եh-5)$;0FJ*ZqxhDYut{IJdlw)nzƠb@Ns/
AS
hm
5	ۢE833fCQVX7ߌp
V3f>weذa\~V]FFN3gGtR:,;w'{/wG}pe1l0ʊ| Eq
70p@vs=kFFF_z_;yg㗿%f֭<\y啝~̙39s8ӭAZlذ38&F_N\\>}'N_K/9·~UW]EQQUUUTض~#29Monܞ27 Z&:%DMfk(I]7"ifE<:y8.PSHHJ"/CY}MtB4ۤu14piҜ\N@4ղGQ&>!d&PPu
hWNQ@>=NAǃ$	8$AtJ%hSc:D) y<QZr"R܌8PRSGcsRWWg6l			_>Bpsu1qDx~ӟZ#nF\..fƌQc͘1:.]i
C=ĦM袋x#R[L61cO<1{>Ƿ?+VDcҤID	kBt~?45b:APկ1PdmDԐzK5UC
A;bl^QL,+|q	UT$H`s^Jo2t}:y.&Es`jjdRIEQ90PZh28$'u-${$RiBm:q`JbP0LONvYmQp8촡6k~zf͚Eii)qqqt:cƌ3O?eݺuz]:Dz2y<>lTNlnnv̙SO=ǔ)S+8s=Qk?~<fl۶-B~0zj㏣i^{mXo/͡#6l…q:<ÖgϞ=\}Q}z뭶hcstͪM'4ɇd̅bL2Ouc_[Xn[WT%sI=hN{ߢ;!?lB?RZht7cEY~nNKG
nn͇c>,Eݡֵ(*;Q6Tui1ե{BIeNhB/El$V@eW]-Žayx(Ǐ'++A`]6KK즠o별GYmf]
m6g'm=utfa?Qmlv+#RaEV}k{#05QcmF*TcͷXK]}5Օ&gMFUXjUBvx<Ƭ=M\z5eeeG Aq֬Yg}Ə~g춽
	+WȇKaxbtӗ͡E7UWxDQtY>
瑈i"wzsg}nn.~[y&yۺmFPn{Ȋ{U5A{](IzE&^B`em}CE
_߭}!,Ocp2>V]h1bzm[lm0a
dF떐e&hF0CջԈ1!rZn~^u	W]Q;)-p0x<'k4:EKs3ߏjŬPVլ,jjjx7fΜIeeeBaV\8zo&77K.|̝;7EY?D &eMQncNos=ԩSg֬YP>˶:fȑZG}4*:Y~=)))\tE1ޅo[eK$nIzOlX;F(5бr~U@sSULUx8@.9OX*N}H^?$yY."YY|9/<ԣv?Cn֘DB벫-쏷~t]3Nv~'hs|/i9qVh	4{RH-_|1?0?8LaݺuQ%$$0gn6-[Ʋe(**Op''pZcvv6~-ӧO4mիWD#=dYf޼ymsGϛ7S`zN`ѢEP0?|G|G\q8n8>CN++b7Nicc=Ac],S1+/CYiICa>Cr{),,dĈ~1Xk֬aܗ2d(ӦMp"fYYY3ӧ '|JƌO϶,GTE}>;wiy~~566dUl޼s5עej9>9yT6݊ajs2sLnv܇//fȲȑ#9餓HOOg\tEVp&NȆ
(--cʔ)P^^(Qrrr?>7ofݺulڴ	AaС5*g{Μ9477sqǵJZ;~_`'|2-T۶xX|9+V@UUƌȑ#q|!C
MƵ^!sǏg͚5|7|w~)Bfff̹/XMHNNYoccstP^-mc4QDj8c<"xb>S͛믿ټ}6^z%=\jkkx衇p:x^nʲeXh!-J5w^*+Wn^^祗^
#euj.ۍwaa5k0m4vm믿fɒ%̝?7ė_.㥗^_~zT%%%Kr)tMVycc/)))y\s5ȲLjj*555Y>Z[ZZ馛xO>fŊwaѴsR76cdR8J*NsR~iRdZj}4=.'ɉ	yT5Ph3JOkIiΊ.0(3	}I~b
Fac~РA4SHKKctL8 0zhFU7.hԖOk:N'.Wǹy^UֻwׯgŊ^SO=ժ	xͼʿ43f,Gn׼`umɒ%|礤λ,eOUUt
7U3hE׿rSVVsœ9ՋSN9'rt-s=Gqq1worQQQy9s&$$IΏ먪a?#B2-Unfٗ}ٌ,vPppbu&`Ng0vx	E
eq&[lٶ Bpq8c׮]キk6e[Z}EFUдKJ܉t
]X]͞
J\?ޚ#zx}hI٤&%7ZnW3T
ǥRdPeGPٕכ~A
eDd'q	:M-8z|sꤻ#xGYqf^ncccccstr8uM_݌F̙믿FII	UUUQ桻wG

Z1
2UDEE+<M :(a3Shdؽ}`ݬ;>},X(Ǩɧ۱cC<p:(BqnobBko M"nLma
Á$JgPYYI}oE8QQ/f} tMeu@£cHnR23IEˎ޽IPdJ|H.	DULA^TUTGjj9쨖iP4)d$4At܎J$#ŋCQ[D3\-gcOoi6eSOv}́":ȤgpH`83شi#6nY٤ "˿^Η_.5̂KFx!\.3J[-3Bm efc^>;;byM].p8$Gn.誊i8s\߾rO|_9wqҋqS>Ǝn*Q$Jx4UUCDŽr.'xߡΠɧE%C1Pp`oArrP;rsDw!ĄxDLQ7QYV/p{d!œ)"'h2
¥P@^=ћWhnlz'eqZ:Y@Lkw_Bj֪6x<~?Շ{:66833:nhccs. IDAT!c8=ٴi#&L`޼QQ^r2DS>\$K!᧦60L5"˅ 4TaDMUAqnC'gnn.~0+WYcff&eeeTVVѯ_s
5+Fn_S* 
"A1		"BiDEIo7sښ}QUUn]@@BY@ *(jWeeAٯ:54U؁PK/ITF'=}GR@DCױvHNgSqˋ#M =nM,ͩ: 'vh}g;Tll_7ֆg!"85𬍫/[n!KM[M_GV4YP4	~kF4jKJhj23hp8 (4Wm戢t"z0
@w82dTVVR_~߿2l)1-)#}32ht8T%N{	Ȳ5pIӉ(@(TA?Ν;wĬضuku=u>ƱlR^x暨s?uIxBk@IUq:kηʥku]G$Nlfћ8Sq:|ܹ#JKΝ=!`]Sw]t#PϞ=l]K9w
3EJ[lZvTZRo`ouGr:RAZirBFza?)ɭRHO##-4HNLՍi:oxpHQ}~n[SSwLƆc@80'>^dUeС'=ʪʆMbʔVL@VUؑG;a{饗QTTĞ={[~4M?gL7EqTTMq:8$IBEDu
:_FV\iղe'?_~ovX|9[o33g9bcƎt_pB$Ɂp뭷jժ
	`
p87S,1k]י:ujΝ;[5y1C0D'P-:
hXK.	JGC]#2v,7QAsFjL_ȀD i)NQ߬)
-VW`4`7RCn1VC@hk!5p~eQ'cN
hĤzz{S[[KZZ2:ұͱt~CJo4cN*a!((]
,`Ŋd̚5k2x0|3xI0ӪKULCiAxgKxy\>#FEɞb֭_ϯN?g֭ >$Q9(Ȳ̼y7oN>$'&t/DŽZ199g}_p{1ʿ6|;wd֭G_ٳIMK㻵kq<ȣ3
(AAX;8*RKwuޝ;+@BV
dFqAqQ茎+

 U ,}KU]-?^իWK~{{w=sϱe)yb1ym駟]w5X:"6:a{x	Lb--!גh>T'hmL==NR*NOGOƊG2<14Dh,1
p||ǣ%{K@ XHKYMkְ硇?3Ͽ=$'oĵ\,wsYv2xTTVr9pƍY
:EQ8NU7gq=8'ٻY~a?i>y㍼[ PaɆgGôb&eel=TOqI;wO?ą].`NUU?Oxש.[?E,cǎZc

`Y,9Sm6fZͧn={vgNxn/	 0
k֬嗉U2˲'".o$uN:r.ؼy36n#e5<`PפV^Ïi;ګ$Ip
xM5MC\*BYYC\Ȓm8Y׿u<^gVnCrˇfuD>;X&hkI`-`leKxL.o%Mh6UݾRU奷sLeۅHk4|}ZHX,ݚQdW+3ܯ)at)ck5ut2H5%!dWViImIo~8S+e֥׻H,W.rS]_/oW>ޒv@V<]iXK$CL<8i%},px|8n..oV[EVF#Jq]O<9r-)ddtƀP3V\+ʜSEw,+-_#d@y.Iπ,,Ţ膎#K2`pIIHWQE^J}jeZE<`:^oB/pMkL$IhYz}Kl\S7~݉m_wfJ䥬U6icgyo929mϣt.9_Jrz68c)ǒ).cJpft,-2D"2R62֒ӆDZN]}J I5\b*0O\Ghj:]f<^씔bZY"-S.oV-LY),Շi0ΉFV!:Dɲ0uIQa8.`|㒓QPɲ~&vkT”tf>o7pTe;Z(f4M#=(Q<]QUUsQ H$A NXhu@ 12ڵ c_"ȊaH-
1ļ^/Dp8llL	DetCG6H4-{AƵ"Y&x,Yx<躁a蘆!FiNLx<dx,Hx^$6Aܱ63;=|
}>RN+xL*
Bex}@ X,h^d|EQ}տ<`aTӴDMzUDIB8,#r
1YmRJa qHJje0{#L/ jW%hu4)9RbYͶʘRr&9:7!U@ `-`{csIȊJ#y<;膁Z9$;I4
%!4c&hM`*}dIObǠTC[fF|Y_\Fú:*}x4mGM9RBƣtUUyqBC,JqM=aE31>NUFW,FS`ꦐlgE*@0gs,dtEiYSQhq)YFdۨ4t$IFé`aH})C16X͌:s_iRED2\yt0&8JT>궟JFbhJxd0zNX[MZA"䥮|C#fHM#SjY)/;$%,,R1̍Zxޮ	@ :`HL0)_OQQN~E7ӄ$ϲe)#+37{l$ɞf>miiF
֬Y݄a)((Z9|eEAQEFPse->k#!`-'Uv4s+ȅoN0X@bc)[XSJb I
`	l/3:1{A<[@ucՍӴY1MT]AW1@ Ǖ
	8o}[Y~o_z\{u|_w_z%-l۶={=Nگ<7100F]]S~-{#?+ujԬ%P+j7ӎx?D8aǓVrepxb(Gӈ=Oq0@APq(,fzxP~cxdaA-GҾwnz|;@$YȀ9 ;ֳ~VH0-C7or^eY
ga2kI}dAj;hnud-?4QTY'@VdUM;l;6yǍ7ބi(v}'̦R Sj%fX8Ab#tu
1C}Gu
L^4EQP(h0]#Ph՟xoP𕖬x㱴(ntØEr]Q)oW3dR+%y
I `,ǣ.k_'x҂ꡪ*Ɲ,
]GUTE!fZ/A
Lv}ȒiZ躎כhgH*)DlqyMџ(3M+mUUx?Z@Qg|bGUcq*xTTD$#;'y~u*ŘBLf:tQdIBUW- G,գeӦٴV%a Ţ3'ۨB<GO}>>]li:zf7t#\Iz+,KL4-.rb1N'q{*
xqfYŴǔ<%㲺nS`TSnvT1wx|v1366ºukZ㆘JÇ[Vvvu]Ȁ9RN&^~%֮]ǶmۦlO<޽Q[[ùYg}݇x[@$}{G?1֭[ vSZRkxLuuu־ya‹<<:7|3===sR[[FȜ75nsΣZP`׮yWN/ƈkqmֲ,}vM$aǎyY4
ٽ{7PWW
ȊGU)//3cpp={v~FFFشis'1GxߌgṽrA>ᏰqcvAuuT`Aj=Xb`c^k^%Jy]8		/NDW$AG:╞D2HP?Jx?tkMNv+/@ p4`,ڵ[o$^{۶m_;D"i/}%c-{>Ǎ7suwnz~oJKۂq]EQQχbv/2{>Α;3ikk8n793x>yKs-7ߟV.2'>Br%4W_o[7MسgOQ$_ٵksĢW^yr}q}9Rw@>?^{mV]?̭~
/=zO?'>O<NΝ;(o1ҢPK;ώɢv@h>44DdGKhl01LjoֲEo2=wtt7Nb'z[?IB.Jt][_lt2CC^$.oظqַټe9kȇcmDQvo|?_n@pd"혾puWwsg>å^JII	/"җ,+?b׼j^җ¶m[imi+_2^x!px7ɭ6g򇎌r2vLeU\J3t2%ͼW46uOLY^#a,wSjoaYd4v@;TjXCN	@ dJabt#vYϓeeVmAeIr(iugq&o|<.~_qͷ8u}Ô 4ww%O_.l}u率!G\w{No`~u]sNvcR}}]=z׻?UW]
k= IDATC}]}L?~+;Xvr){y3G>6ͅ^E]̞=Χ?ϓ馛񼨪	ihXMAs7E\RW@Y-{;?0%1=UGJ.Jɻ~f,O)MJէd$14Rm2tqƖS:˓%S\Ƙ,dLe\eV"SszwZiv{]cuLTc9VJ)$hkkR"ZㆪZ㆘JJ@ bWR0-̩xH'2$3ŇgȢ"6))XO>hg<ځnh$ݍ&ٶ}ɪUU"
[lq/](-+'-3%O䡦CNs9Y:oy~;#c%p	TB.`Ϟݴ4giέI}rq>Ҳ9+$$)*)EYi-۶@ 8
^ s~QNڴ}v˕ꩣCZ_3ETW_}WdYR/=~?::%6
UU}=0g6mng	p::;:Nv(//'??R bGnl\=eĹkNͤ&+bq)ѶEQAPUM2˗P@ 0GZ<&:iz=ǧJ\E3Au=>31Q{Ii7N(//wMӤ0Hxڴ.;/?)?fun$ɾeǎnnjjj^;P@DH+
ZO<Ʊļ}w'I/(m3]0Xi.@ V:Eel:9{Egazxլ.nn:sd;>{<^^^oִwG`Æ
YxL{{;k׮_xΑzH1UIV^_{^9yJJJx;9sdӦM>ڵk9p}}}YpB8(J>O 4С|ctuu<^'w|WuZ_iii}1[̄^4Y$,̝h1'84c:I6c/[{w
Y)Jn^
3@ 	
34/tN1y+a}&_Wgn:Eַ
~i|AEnCEbI:L_.{7]v)]v[n^fΝZמģ_}O=$o8,.rJJJxyꩧPU}suc$^4{nN;2w߿IR	֯-0ʃOt"RS7_40A::-"qٟG1tp%^=F90Mm'{a3<֝~A;=gB032VPgSZ@ XgtwwpʩgιlctnnӶq<^F崾`a!y{÷mǨ_|c:}?< w}7w}7k;Xz)ܦH]x~;?O~V_S[?5ic|-O|[S=r×E^z%}Y8XiW]SO>>Q^86m[n|}9O5nIf9Z;h%(&⣸.4jk)[
+9feQ
Vd1ƺRkjH4j4jL )*`WI&k󁕘^Q(D@ ¢O7#Q%CG7̍7<|ǎu/SUUźu쳵}qk_fVZ	'LLbYi{nDnE4&+#cIeGz㔖񶷽}7%}蠩 55ӦpUW~qN=upstCfrɧ?ٴ݉iؿP7mx}>3Q5q>VՒ_<}iʜVe_‚AkK;M@A)2hDm,ںRTYa%J~@im*KEQTȝRlm9qMB$´ OoV-|@FØE4IkiѴ2YVܗ`AmV(
:+AQQ~Nl\*TXDZL3o*uy{u05kXfͬ+–-[r6lcmҷȉU5swL10GEEULF:1=Nܔ𪒳ЈjD#1bPGut֫7
#qfeMQA#<ޗV,+~7IbR@ K4:e4=q=mL9[$	dIqcaX+1}{cccs=q?0ߪ
rC9Eb)OwW`~jMbqp	QVRDA~hxqXR\Oh(HdE2Mt2Mg콎_◰,-CĢa訖GK\gGdžm-$2EBl6yK>!r'hmtB{>tz:zRu@o/P)_a@ rqlleǹgیv5+HbZ&az^>?,c(W+lT	;eYj#ur^sʣƲf 1|@t7XʷPCcC
ro^}~':&Hنi@PUQU<^(4
#a'x}>gѲ,щY,0k"10?t1N@ ӄM7av}.I$ӸzȒd":|y%EAJM#A4u1NOO]_]K]>kE$ϓ]Yi'%mLY^#:\eȩO.{+$-dLǚX"^_frI#-chqctd݈p wywtd`o4LLnL>xzZp,&0\B0:>uH&-L[Dwɵ+ۀ9^N$?hs{'/^{lr𤱕hL9p$H81,вtc2鏞4-ArC.}訓~&՘*ڪwhIp(DS0S	֬ >T())Ŵ..oV-LY)6ۖ9B`,*q~M78шmHEHc&jxshx,3BtLpeGUӤQ4GUxTU@z\#I9Z@ Gx(JWdFc`xY&Vga*PXEaI٢=\Ur$8qY@Vs\Ry!D&&Em7sKHFǨoh@Eyt.4]u,=aMN$bpoH0 '(O\3*@ Ȋ׈kڂ-ϣ(2N/q=NACfb"w`۶rv^E[a@.\WGe.g܆#^~s4t9
hh\(Ȫ"BxvDUYbxxpR`Q;οh̠8`΍2KʨoTeA~ieUzhX
c"n :Gz!)PQ*cQzzGbJPcQFM}bᘹ+
bQ5s
AlgqK 򠠰Yp4M#ƣp8 );U,-WQ^Ň	-GPբhf"?
Gtg٧sJI>E%~
'T@!5l``Zg r֒SOaq?@5ϨN/vP1CbLS&1Bԟq"@ XXmH̦].qwrcpvTd$^󫘖Ěk3
s-/
$I&*g5K\%8*QL$T˸PT<"՝Aׇ!lrLk b%Mt6F[XPW%o5/`>bsTC'ڲ0q><IeT &8NLzɽ@'B$TU
`a?\(~쉽rxSuD\Q߰nNi(Pd	Ud˟u̍	ՃQX(G{4n屿WF鮪bۦNHhh_J
1ذtıW}ljhN]$b쿊@>yˋ?y>]cYb+c>n.y}M]mBq8|u,
1˛4X1"籵;۲$&άYnZ,aY37 ilQUB0=mGh=~ҟ;9E"Fަ6R򽒄$ADdċ{Kg===.5LC}<GXo&HEldC#4@ cYܮ;.ZaƋvp;hnnGοԤ/vx=O:m8yrRx֬nGYwɶOlMw ,Dlǔh%W X2Xe,+I 4,D.g)'	ŮH47NIIkWfxd<$\K.AK]mE$-< IDAT|s0Y𧴴sWO&xu12ݓ9	I舝c@Թniի~uR'v%e!amfFM-CR6=8ƣEij:e.g̵M{g
?VF铞v@L~Rی/[H/~lc{pX2]ԧڻnVz̛{+$0$d;ӱf9Ի@ ōD!|y3zs4zE$AK[}wm'k400ϴ+y,mHmP\R)))mvMͭm+ֶFG=Gϣ'|.#IK(
h^xUZ[۹/;!!9hfovKYeeb{eL%(:˞{%$eʻ~*<:(AL]/Fr9MT]cɔ1q1ŦcdYn9eYƤ2ޝVrC.}7~&՘*`w9I>ZB~+%IqCUUt}E/.oV&l
)+e~MKa"3'i3x{@8p{-g@{!jjk9i)
аf6"UQ RZZߟ(chh~[qe1e~.l=
=
X,+웲#_GGf%_dYt3ۚg-q-LٞbSe'b+vuL){jw'Np~ϔm--4l1ʺz|%m//|rG-k(
ϭ_$Lٲ168[VHqqV٘oݺYn;|_i&CJ|p3lOk8uFFX=P[pA*MM(UfpYɆy~ֲg8>k

ʎ쯫s>7P38UV5MN?thֲZ7+GP522+ف`Tt)e8ۛ]My(uOyqZDLbZWl~,ƖY>asOIN]n';ueeO)̉':$뾧$;(SvIMw?ZGݏ0ieݏ`q*GGY52Ba!EEͱגzSu
,p/Gd"C}LL,L%qNbC_/rbE,zq+5l4.r0e<꧓53n:Y4JFbϔ*id=>z-ɥ͙d+BcԎJ6>Oקb|63evg]v-7#Nݚ60mx)axRs$旿74U05}qNYeG!{g%[u3cJϯjp`V"VM#[}V:Q^YFJ9
ٓ^$[yLT*;z{)wr*ƆY˖{YɮzIJ\/e%J3>κ)eCԃ`O#6l=@A{4l^S՜x֙S]s02tL\˦-{LLGK^6(Svʞah=6A=כya75uWTRx&AB wnDf4QN<ҝV6AGG7u37[6D‘-#BagnlXI.(37[6h؊Y<44B]4"l3Bc!89bB}գQ_u`SXT?3A~QM=U `cG{˴{>\@plt(Sttbdʆ9K)`x\-Y".4)ξ˪TfN0EcHsYٲlwd
^USS2e
Ep&ulܸ4UkSU\oe-3_a WQEw*
&4l:{$0Irͯ9&fCY%r,cˆ4e9iz{ʌ>*
;CYM=AV,Ǒ\4ٌkRUL);}aڞAv{\dgMs?ZGj{M{?ʔ]$28ERЊR{Rmu9m@ ,(70MҘr
%eekE.ຑ.yYI7ٸ8_s)k$;\d-YN{4>=(h(diBEHu5SO;bL3G4s0㹚tsκuk{(0ո4
Sdۧyw:YkewN93q=e>e9eL=s-{Ygg⼗
8m;M3E@ Lsf+ǹϯ,R'@Lg8.G3#1˛4bn'IAkM-^)[s_@|!Bc)AMC¢24Jeh`tgΛL>ܲRBc!V144Bii
	b~7+i~+e~Ty~O߭P6#BbљF
O0Xxƣ/#P~ Z	GI,%[9*'b1o&b	b1BqYIN?WN$,.
S`xLM1b頧+,wkꨪnPɂfgnXbIkZ㊘J_1+X2<
$MΣ66d)**(4Gm.}PVQ]S1mfkkVTQGP[mZnd_aX;BW؝6lHKUٽ(-u(Pp?(eTc.$ݝXKvFǩ̥π攪1b8Q9ٍڦ%f7j#X<$DsC9	\|1C^z%Ɠ?l3)|M-Σ #籴HU^
f7jouuh$4”
dE TҦDo\ie.3NA	yV	``l;tJcWVCU4Lfեdž:ơber{OaZ,.mOS0g?(/@>;egtx8ۢO4BnW=tmD X(-mWǛm*.,,Gf@P~-EEG2S@J5yʱ27FAa40s0f_U5̪jov&'^.fc4k߱p蕦N&簤,}U߼{x!v6\4#-,H.YQdeq`E&0?MՆ&5BU΄)g9XljzFYbڪ 3Pz0j0t#^m41N
t7B̪
p~=oMYh|'^tքNSXXHaaa$-#qjr*-:ivW~jrΖ+4^:gfbҪX(P"`Nv#d7¾ً#XT2!j
,J>ʖÉf:k%080u^Q?mu1;a;,܉(g4)b:U66FVVӗ&`0¾ٍ+l}l0
Y2 É˰	DIi-c@K7%\3T/^[1)V@@6rsjz6o¾ٍk::@vO_mi;6l@N>Yq	xxn|>ߌt,91k#OcMwb2D0N;7.ȣ@ @N4Y4mq@8"!t[-"lʧ(34Kl9cg"y!&6b=477UuND[3sVRsM	Qiv,2jF7Q}mJV)W*WUh*Fz?vۭRZ\N( `NUaXi]GAȑ~1̬Y.*`4DecH5"ͥ4nOI m\nM(dWw?1OZ2hq7_JY!01:ftiJ@!foLkaVϣ$h/6	@LQi7v¢^ʫٷ'12t:XvDG 0s=b;sŚާkbh"\.גY*m(
T<'ؑ)hqq}^}(+`N}kkch\ X*4ĵ_Ze3O=ȸ]VPרZFèOlձa4mՑ	Vyyyl۞8`<6[%CL[^JKFWwς7M6O0̨E7\.yꯋV\I)yio,C&#,EB+<
25959R ڛUFMM?szPvP$@e@J"D[Yr8:r:
HA989"t:DJ:{i$	NK0$1
x}>Aut:.7ZVYQj|>~HB`p͑-1!rAtreX
AvxzPbyQo+O0l2`0H@,|L;\UGd74U1}YY4 r&-z`v"zuzd6~MԸKWwCC6n̾fQ-xZCx#\"rBjWb40:jnU
:9 cYVxww#<~UĴUAFqCUXRJ f0Co;35Jhbա0DVTH
KlKSfy+wW"i$7r
(.\+qM|mu]ver0\*{i/hb`ph(:9_*7t멧]]]XO}OVolv{9nV'?~zF?jӬ|ـi-:ö'1ֲhiN(F֯`ukPX$sp;H2tZ
!j
p
~ce#ǚ1h4Z.l'}3}/,ygrյ+'/ՔB_rE3X%\".X9՛.%*G߉-[|TN79
a5鲶`e^;^eKTg &<`5	&.nТYWd 椞1~~ߦCt:,(C=DEEEԹv=\x㎌{Л3gI6aS"`N"d-}uv'چ
i9zUX,&|>v1dYvcctwхᤶ oz&s܌c{d||5M|>O<}xߟnu̪U??NKKk׮MJ@ H^6J6Q>z}sx CCh$
haZ&vÑs-85ȻG"i}^V*wQ33I8M'#ǭmM} !O+ѣMх-?'
/^z_`dΫzPᢌ(fNUPԨx?y<*_z%
(((ꫯ|;#v!j


窫7ߌwTmyf>իHJ-[p]wo|Zf3۶mc޽3i__ IDATNԦٹs'C3)֚d8eeeX,6nȞ={ZwLټy3f͛7SO3U߅;3/;ijc&ͣR)**Pͨ#l&36=t:-:~J`0ȳD\?i꟔u(A%zߋk|Gcy/
sfQbe̙W>jHJE>oywz!wp 2^yU^Tc;mSljGru5k`4E{
{AU{}mMmm-<w桇k_ڬy|In6l={eڵ?\uU|+_d2wpZ֮]׿uZ->(]v{K.7|FC]˅'|}eeeI555|gF?M'~K_żٳŷY.6'?{eΝ|{|GQ֭[߅5kD"Y;IJcr!,G-/rپ;w04F__'ܭb61FA鬳q{[u,oMw+TmWbǡ'r=7~ktN8SXWt:LujptFύuSYUn?1Μiˮsϧή_cY߶Tͫs_"=mz|_`{ݻnl3i:q)9C).ӧgd˗e|m۶ϣӅ~2=\nYˏ]b[<>~3VjioiI`20k%?::;XqKg9t}}}{|3<>|s9glSS'Od||ɍzzoqjjj:1oܸ~8իyEGMG>—eq\I6>0$a2?я+l6'$_zq>ŸuLo\2~Ӭ`R}3󏃉3
%fM<':
+P]㦂X#~e5SH/j\e!z4r3HU+9.koMeRa6^8稣;v஻?xԔKд7ΐmll̙31P`={gϞwvvRSԭ:Z-wy\{QN
0#*\_zSUގHMaq>xd|_ol6s饗r7sm:,Yӧj4fa\!I:nY'{f"FSTK{[6W#M`1+Z_PLz3YNY ,9
7c6YfMOooQiVBS;ǏM',hˣ>L?&iQL'DmG";~s8>|M6q=p=x?/K<Ν;]~8ɓ'ٵ+kkkcq1e"`N9@<~sGGuv^0)HGHσɝwɣ>O?u.GqcccM6DF#u6mg{q5|>~;tvv.sw7Cm6=[neʕTVV&զxG4d^C_Ždb˖-򗿌98mFee%?]wq׿y]$ivdXi&ۦ#ᰏ[
@b
YS=xĒKdhmmSCc̱ӣ$IG?[nrjF#w;ٹs'w}7,~GKロ뮻O&3xqLS4rX\9bYL];j~E#5ϣD۰9<:(dbڪ@ Lo[@ epF!jBMR!^WMׯZFèɶEG۩vU5u
1b:ͥ4/R\ؿ|tdtu,x3OqGY|6Q7I)yع!N}C)vZn֔+"FGIQI1EERc/,gAظtdc18a`[ߔS!QQu@\QIOwyd"`NrL&>r-/V ?_=ƝXsҭƒ5͔-j"d/j#=ł[_2x=)o*p{$	+2kڹ^o0j,1'ytd,}=b!oxVzMidip{Ym_ߏ(H7@8F_[%SJ 
VaI)+UǃX+ҭ’"ݨɾ¶G/FXiwҰ_
ف&
ɰVaI	ePjA7Q}[[Te߮UW #^%	20'QzVvd_a[@ P1!wk##v,ODfUM
vd_0'T@1t
Hb@ $h#F@ 51t9MM	l[ 
1mUiv,2jF7Q}m@]Q=vujmڦ%f7jo8XZDIQfsn!(nئG P1]wkSEKv,=ܖҒ"Uz+ݨɾա:Ғ" [|	maNhvݣbg[YG-/5OaeڳXWC͜IWWPlpj4w=qZvqg
4pcG9 Գ+|mD5V6^{)N h)wN9,BA,Z[XS7۠Mm#KrA7Q}m!'C-پ.r;Cq4kYnZvBDyfšJ
==X

L0U@2jc-J{;9%J1pD/PZV@QC9Jw v̊K)qυ`ĬUr())dz=r[Y C==㕵]Ms@n{lY$h2S\VL~״d**s3:dcpԅf&	1U
1䥠bهcF[=jDL[dF	17gc6U^ɬ
f7jd~ ۫jBΞHy8%t<*Sm8WψGP2Qa-C]x@]c=3fjNm}-9ʘ*(	A*HNׇa
(5JD%ihXA?ֳ^'A}.+8G(1{`h
9T?㞒XP9Wp8u`jb FVas;+E91hV:b:LaF-i¨-(f/¶E%8OEcwRnfRjiĐZGI-t8d5|X\Ǚ^vu-^S'6FyuVRi'XvVU$nGFOaZ\lĚ8XJԬD:<`cUJG+>0~S=VrU(Dϵ3*d|Z.5L;F5yl-)tufEnD@F7{s]"C#gwMyINz9}QVIupV]#qޖ:kspSxgw^9/UVRlv4{n7aKxtz|(zF-0>4>^Qa*!f	}<{3좯FiQFiF=ݶ5~weRv=$)\)ĴUAF&$jy#ݨɾ¶Glsh:'''͎VWRذ{>^/^@
K,0ׂќCaY1EVffCPc`ʥ,_	cy5E&,yT2/OOdyGŘGM}E9
J"h6bkAvnS#F"JM$cCk@^>@ ىqxAαW`Kc[
ϑ)bGok7jTEYKi)}kW\ƔɘVyTC	%Ѿ6G<,NkWys)݌gM(>;6 UkYEXwAdM= {}*T!V׭X젿oSG۱-,+~YA@!o"C	FL5E-'#'WVj"Fv#웽fucs񸛓k6HRdV{ZxgY?#mM'S>2w:$O޶S6IN-wý3I oOP}<h{y^<%zy~_zo|;/w&R `q`:Σ b!@ ׋?i[Mry`͚UqT4mZ Xts7C͓@[@ kGaLnEyMA'5K̕AN5ra=$UƝhX
ݨ)f;jh|~t謩ԝF_fFfNgĬ[u^Wi4EΕ;urrr{5Upvu}OQ7<S*{YsUlǧŔ=wk-u:HҲmH:bVG)rnu-GWTŔkune?.nWRV<):kmNJe0[#i]?09_9^oOps~HZ&_z*\5%(LY <
ʵ\3{[
 |
>\NJJWr9g.k
k8Қ0>X9ͩS4scl"[>y@ B[ukkޟn5@ՠO::FNO ,]{͕4ԯI/Q?os3Efdd$$c'T -4ԯ@BZ]as`0D'|~6gwa"OD 7r;p~% ϐO@8%~
^se
Y JdJCՠ"!n>@0?v AG{:&e&^ɲ@0}	e>?~/WZRdF	(AҒrJKʣey|R8mkl@0]bQ6—U EiAIE[u=sfD;Fc'Sgb֛yЫ)+_ 1,AZ#AjBQo"[u'\~גqp8304<4k||VB<Qf`4M@0;>wMy, G	܂sX򣸸WsSAGqq9=Oޜ3BzqNE8EG7[/nMT.f
ȝZO ̎DoXߵ^,9V,es[Q]<\q_Ӑj
m#8V\sd)ߛt~ވ(r``nh:z,/Fh'Zmh`x7*	p9n"[	ڗn@ @Lp
:B>G @
hр$[@"tWY*IENDB`hydrogen-0.9.6-beta3/data/doc/img/HearNewNotes.png000066400000000000000000000017401211146647700216560ustar00rootroot00000000000000PNG


IHDRZ	pHYs7˭tIME37IDATxmAheylH!	dfɂP%K1	xV6']i-4$=PV"CdGfiU;<~<7`s_atAY0%6gRW;nѯ/dYT_5\\s+Vqn/qeK#zØnZY,,@ıq=zI⎻JMXh'$`.h}:I&&%vIC>lÝ`kg+gVCPKSԸȟEݣ(FGQԛrIgx ⿹Ts+˜H^Lz(\$f >O,JObyayrZ!9E]~LJ$2,&医aV
3%GIENDB`hydrogen-0.9.6-beta3/data/doc/img/Hydrogen_0.9.5_gui.png000066400000000000000000002440101211146647700224670ustar00rootroot00000000000000PNG


IHDR@I3sBITOtEXtSoftwaregnome-screenshot> IDATxwxUgv7NB;{(XP_6@TD}`A"Ez RI/ۦ|Ll.WfϞ9Lfwiƴϯ1Y1fNuxTeeUxkܙe3?
o6t/-;S;FcOX	'ngKǖL{>@JD3̏yޒCyʽqwtIwO(*qw(FVĕf޾SJwni_TLX':*YOl Qg?Œ4z׫F{,Ln6q~T|_l8W1Ӟ1]^2zvg`Hщ5)m2qͽx I@ɥl^/۟i:-68 Y-Ζ+%ͽWk͗|=]a=zxi
!#&ʫ"$šad)d\I͔[7n^hfP|[Yda%7RKuk3/QazTg^'$^H\ֱ]kxoִOtyUCďbfZc$`GZw*+֩B;f_z!p9n83h3Z֊kȴWOۖk.Z˯>ݷI혘:MFΘ9=>^~kZ15Gvq9\LBCN2yÑLն~LTT\n]Ksojt5Y'Δ4٧1
K	0L;k֩ez%'=NݻdaY*'w,zsun/>t¼YOdr2?)/:3{/&owϽ[8zeS!٨O?#6!uT;qsh⹫λ׆-`$M,*¼vuGשez&cӥ@6/9~WC~䏙'Ղ200T߹]8B?w9b3[֫-'4'qd>KA7$ŧ8S<@:05dE*&ں;2אdݽ0mb#k֪siwlZ1ё~A+vjeI	Nsw,`H2犮__Pmk߱'*{Oc&LONWڽ{OV~yK{ϺC@/c8	qwrr.nϞ[7'ghuñʨ±H'NfUM="JN_jպOV]jE~Ǟ/S?SQ(fNrnSxqݻN0u^a[O4qĉ']&OL:]#G204̗[_ӾܩW/|w݅>W|M*Ol9;Y(_ҏ~b8e)054Jˬר_4T>l_1򅠾hB98J	KW3`5 d0FNoW[_]JHB*_kW`hKt?ҥn5ݷxVĉwy|9'~7v]s'#+w0ly͛77,534芕b^/h֪9Ao+{Rxu_2S-PlwL;g?(Uk3}8Ϫ4{	s3{S̪4ʦcLΦ=}>{qoR9`Vmp,9㣁o&8oH՛OjH)}՘8/9V,5Žq?%".}utS7?^k(9佯Y=$p^r৿e(XR~g1zî7Z/L\=rߊ	a#,^VQrG?6/9pV+mS,(Yӑ0J?ﻣ#%K\0J0n8_w_zF	)Y""A 5Ɂ~ĮU߅yh_9C;7Yh&m݁8ρ!"D5o޼9$wӝrߎmӒIKK-	'"B+)G 20>}l#y
k{jĽOzROdߗђOvQwNe<"Fh3uDK޹F#K7&
0it#_%.:+?^P0Rz_˾T͙;+wo@Pʳ
c	irܠGc\6!_Qͣ)+?SنGΑ;ot씠2c3&oyf/oSyB:)k	QuAU1w\pz򏿵3{{bbbj5UmϾ9#T6kv\݀}..L_/D{ڵ?=ƳzigtvZ>yyv͊
)/<m/ǿߑ*Srm??jn0MŹȦkG7.ze"aiٽ[])^ޅQ_o?tVkf~zwܹr50^y/v`ot`g(nM6Hy^e9Bڊ7:M0$?v]PEuƀl5éI+	HaRSChG/DWS_jJ2~Nvufڼ6_\QԆ]<9,{cDTccI$̫LÖw_Ǿܐʤ
΅Whដs_pӒ>sSQ@M6{'#76JOh&`߫G¶O<OXv̙yOX͎wpAݾ}m7x̺
(=wV0Ox(ӫ,8TGǀKo\GD=RQWWi&X!}Ǵ#
:zpc/-ekDD|܁ɻQ	/o$m߄`H#;~~~jYN8c9zdeaI]D)nfn'4tKm$\)[q("I8AKUd%)V\)	g[4A:[FQM5
lCHVr7;FC!n-`*rN-GHDET1ו8ϟ*]'e
Eoʡb"fm!/$HxF!S|rw1QH$J䵔R`o=ح+2×ܴ(WOY:~E];9{;plA6ko١+?)*}`K30BHcY֚0t
M?@֬ŋfOl[vPA`}S6YK]q?CA i#KDu;23#<dzT<4+/^4s?iV3Fb{ÑoS`z}fMkvZf`4n_sF?-,*hS;Za5
G7Sv96[Q>w>tD;Ka'Rq(-cb?R_o6	(*>y
U\#,ǫ9۟
^ߵ@>b"f1~Mh"Wu$O6"g1d`*!8e pkxmom7sx'MxזnjnIiSH8-Qs,ϲV4BQr/JekXu+q?
k"XZd1qj/Wu$.Vͧgy
A\+*"s섺>hw%tȾs&b$:*4"؈A}Xޝ/PG:!ru	/:7Rri?M=AW_e
Yߡ)**:tǎ.}M!c_v$}]'w.{k`3TYF'GL}޽A#1bMp0H6^aIhh[ׯ-^ "ύ6[m3yР~پf8jyIžrb!H+	?Wvrk3}ڀ-}}=%Nphv\.9
0Źwnjx{yFly)r:0t3xXV}y6oڄrOkf\KƿnMF{}FT^O+
w>ݵқW˳Esv*<DzPѥ8{8ڱ{tm}6$Xʛ$>T1f"j@ԇv}
˃8Nm=S?Wb
|a[vy߲.s{\20΍Te1Q1@?;ASfr(+#;f=:'j?%5 T0H
BvfSRsM#-L{sNQwGׯalڡٱc^'DX޾1b;bY1Fk[f0ڦa[OQ3ݺu֭ާz:m\Y
7Rnħ6TYm}+\uBm|'|JDOha|Ar|%;WN$o;ѤpGGxۿGkw}惐\'(qVC>9"20q_ľk𝛧D<&9mj9YH-/?,FDѰR#ݳI,xqQ\OJ<ST8c_e*yYgJ9"8YB
F˅2iE,69D.f9NuyQ?'SHx͆+951|	qqWNja0`SnpӚx8qѷ"kլ8{>~J/|5~v@SyF7WP<mwX'~;uK	:13ͼ\鍊{(Y-ZoĄ1a!
C_GD]z|-y+8;qxTLeQcW9]qƭS[-sgd"[W'YX ˖%aEb}^*;0K~\~[
rydڏ'5z?Lq¸*ȩyE.}#y_W:]w!o&.nK?pS<`201rgձ)y7}-{75
Oի
j4b8,=l7|{30=f÷,\+alܸw
Z+;f̘738N{=C;cyu:翺{T)d`#:r{:^3j(wlF,{;
QƸ'B+ጬ>59n`SȆyjԨQrD`9Xح[\S~{Co)Y0R'g`tfscS*ENWWǎXG^s)2>Wc~MUWd`Zq50xW+B=b絅zo+Ʋay+~!ܩV}B]lY
3ƌ[
5mĈBcY_ó#F_s{"zqKhgv_/ytj:Nl-v=4vx7<%
J__-cD[;&CPftZϚ}<~lwmI>!sa}.dD4l0Bd{{u+eAk:0CGO5ja6rmiPgqyR'*PNJ
IyVlG7[2RI|
Y:gWѣ\'::!'ny3j>OkD[NFvZl˱,
d;y,)z+20,%T$!:(ramFqs_z˫ujr3cUYưaô"Lt-,^̀9-B֭`GѣOuEō@_m7֋f_֧NZIRԁ1ӣs_mӶѷ20z@bm>wSogjd[qvo)Ԗ3&f6b;722smm0#=GwSgQ̒vwO1%>ND6NT*Je1zZ`8,V0,XhgXCk20zkQ`Hcs;)GNGB5j|ה3T+TS]z|ne}$Q1T]z|~ij	jHV+aB1G¦UvY?Gz;l_G?3}BGZ
H2OKȊ5lMoY6΅#a;Z3lUoǷ)V:u`͒A[Zvؔvb᫋6m֊K8>X+^lrF/SZ93r30k7<.Y6
WgT+&T7Uԁ0hPß[WhMe~89rVu`l=uoY.}>Mh4jZR}iS%^}ABc’s6nRu[¦UvW+gg`&KZ<]@FR=30dgW2/UE3pݒgV&[$X$6ehJtQeg:WOn#FMrVAy+qJoR1uamz%ؚ1u5轵?B}jZ'Sc^Vz1l1ګ1sEڎĉu
8~fO(i6bM)ODNøqW4,.
O\6`Cx,ؗ1u5f`
c,]tֈ[]SfK\TEF6Zp~jqmjz?Q2o݌ӷn9P[Wv&_`؋PՁcהKY#T%SC9ʽC?n+_;D{﮴r]	ckm_dZdhMcӚX3kCBfEU
xj72r{.s_e߷a!z%
kƆ(T/>ۖq?~̬΁Ws%pXGTK?0CI`b2"ڱ~{o=g`Uσ$a{w:,Rt7*&s{!=_O`a	x2"2̣gk0תWhuw5uwns浪(UT 2x
t`k0]ztwV;k^אIuwA`FwHb􇳲r"8r115lѣgFò	@{2Gݻwiזgf\]7"#ݶl镕phպOV4Jdddnn.>>>>ꣾp
x
pA~yC\:x
omTS}jq;mČIŁ&/^4칈<NmX݁kûi0U4Ι;\qJ=[
20GRT*++ڵ$Ɉя=+'0;$9u_[yfl:0GT*faJKKvy޹=	SzA	9ٙoGlCii3 XЁ86e`h؀$qn#ts_~8%oγiBۡqlDk7!Q[mS[а鲯6[\cS&?`d"H$юeHd`ql|zoFt/Yxt`K[R3ojS}d`kȈ?pwA`FwgNpeP𐈉aS}͛#/:WҭGD6)d5Ё\&ĿQ[,ksg?2gjaqOj4?8҈W~yA<<"F=kFee	N\tUHfcGO6MSXkû=ۺvG
\rv$ljԩSqqq6i7Q"R3~5vJܦC7m.$Б$wiU;FSpt/xZzo 茶s#?uN-(N-ygd5ѤfD-ɾ}jϛ08Q[O۵;ji$N֍cB|AzswxٖM%۲e[6zk"No~}fYmlZ{l&l30M9CFtv?_rV65uҸڱNݎQ4ybX}&>T~Dj͎IA6'Y'粏q8[CD$B+iKC^vmI=|>gaS`T@͋4/Tfv
=#pvdT'wKeyŶl""l˦So~M/I{&^s1nHllDd<~"~X[ll9{kRT*l)|wtKzu*-4hTFը5GffMW/5jpXJe~=[ޯTQkJd2
Swz'f77iU_|wi=}.ae?ZFH5\yaIvg=`\;n@ٽ9z͢4dzL 8@MЋx߶lj;TJh#=b~pcc5W_~w`JRiI}UVjXڏ6MhT`x_޸~Y;R.?MD
55l?3cKmаW̝㆕Jްa_ϖX.Ah++eJM>^LY~E
IoMϻ_[u0deO]}Wڭ[G%_oʀx	GY 
k$Bq@Id5%*ၗ*Xr޷-s޴-Ne5oЦ=1_.$x[ln9{kgF)ll~*BQwXFDoQ3$}qú1X!s}sҡ[>vx7"6 ,m1vx]֬E*N1y-!	oܸ"5}p 56k=eQ-擾ӕJ]D$S|itiyl"'5̯VF-D)V	$aB"bbjV*
sl.48AB$sw[k=>2ni`"MΕW2L1GZ|X5{떾GHq'HY\Шb4e~xK3(aӷ~qEIus9;W~-گG3רP@G{ycZ^=|c?6}nI0tV<6kW4ɗjRu߈=+#n˺9R)\EPd($"hŜCrBE&urb24ZGʈe)SDRg
"Ru}suK\y
LTn벂dqF&V_);n}ةCă,"~!2FGkV͂yeN|WrmΧD*!V	Da	J
Ih:d@b CD\IƕL5Uy:0uNΟ6M9qZv_0GW,=F1{LӻmW|ڽCwh\.'W|gZSRFDc2y6	DմwIρ[{e/Hӻ·>1]w̐PJ=ڳul&֥75a
xCy%e+KK]Oq]Ȥ]_XԧL`^}?cJ[zn}i>`VMp2ʅ>	^]9D^_T).`Uv
GZ_c 8ҕQA5r{!!aEVV	+ڹ-&ʼGD15k;W.oӃSN*q	A:o侀qqwLIi
<bbkeeʸ@!$#'^$=RD]~̡N)5PHyqG&ζ?$akF RAv1[#ܥ
>>>>Zʥ37K.oH\RCT&KkZ;2H*SDaM,ؖ6
90Y^w	wVAѴq\Fz4KxCWnyS(Sg었+Rݒ]_miԹWkHH]p¿^S3yց|刎I	ak= %u)](9[pЯ;Of2+".)АOTqSzJduXp<00L:H|#kr޾u;=~n>[|?T#fdU*SAMN)iVZz$NA5!'*T.Jx
%D=4Hq>ZMݴR""^],20 8o~^_xzòj=MppbݶTuzTH{NK[ÁL4Ӕtߵ]R\ݱkłDLL]s侼鸙5_lIpBDT|D9A%Mqƍ3yw3!yU0~ѵB;Nz_SzbxV )y	%_0>Q?П)[Zܞo|!u{u{nd{٫-Tmxf""77L`F%H)[^-TpEFH~D>ωyz}t?xHH}$%2^1&Fr[
$	u|}}0Fr~Hvx/G:02'be
zƵj)W]BuC'v.=gK~;uVQL1!+8xO|ލġ.BDDB_ם*ρѡ8@J!D4n$8,	wq4%L_^|c3\t
#Eqj?L}*(ӏm[C:[>%k
س=zeʅ_~h`ۿ|s ^L(&#Ĺgbbj;W.o4q$<@oAѽde145bbjQLKgl"~qc=$$$1xh;xhw`32
<eYwt32~YY94S;we}ַF7vywSiD&eYhBbl)JD	O[JcJ
%RLTUJJQYcYxkvӷ/x$ѐYۇPT3߿Y\DENʙ=w_;DDLI$"JuKmSfl(!UޭlZ /<Dѭqw3΄=ҵYweS%VuoD4cM}IgS'v^+40$:qʬeoDg㣸~fݳH.Ŋ*ګ{kjzKz5J	P,H!C6{̝3w&̹NbDإ+){,Z)4BT_o#UE8fPřB b(>1e̒;Uߞ{p
8-EQ[8YW]g{iD2D PQ!#~5&׌_́bf>)f
'7b=OsmuYr7|Y(}ǫԊϥI*#Atr@(T!DAAAE&mЗ@5
@/?!=wh(DܮZ(:9 tNh(IRƔ{ Cuh m$8BS/ib\ؠ54~AA	 &K"090;K'%Ce[ܤ0$)͗J;F(._Kr+(>g̸QQQQTvrL@(bO\-j&nej%?{.   ݈ɨ5t@eyq+h805|sHISYxeV׋L7ORbӔ=@Oe*qcaoI;cS3y	3vewLRv>l4ĺs&
m;6"#\H
lW׆M=,ZV$$(  c4ܳgh%EQE4@%חWjiQXK'D	m7tEhkյF%+|RQ&uӼrOq1.MJ[N%tČh)'65O3Dn:b[ZAAAƸFh5D`!]DM
}T*C-^4D.ߙ]3^ʶ}7St{@ۯW;72A2~XZρ~[{pxKEy~`u~=;
M36PIsɌ'+
@AA¶S	Hi*81#f3\iqo(Qd dMj(dž	(c;Vhd	݅KӠAxbP¸g]a'Ο+   (eẃi\ ~Ҝ1I"`jNe0&N d.i\Bl
#ȁ^:J#LK$ZGùv+6   e;lo^_~?jv5fR̘t_䳕1֚ Iqom>ͧK?X4xfdۣ˫ R𪶮W_ZXuN3a71%   ݈7>[ j92g#]w|׉jJTEF)xMKok˹T<}Ņ#'[AAA^%ދoXz&tirՑ[呍l>ygWӥ]|Wi	h7g7jU;ʜ?Z3jAAJ\CȮ_p6AAAyڿ:0  /LQqqɨBlCAA^@޹/6Q>Q !**bm  ;wC
C\NAAA
LZZZAv\t)&   By,ggLZZZeUuBF%R\SUlCAA^Ѡ2{&tߑh]#;(2)wORͫ_ٚ/	erзuF=#ka+
3nr+D}G}G}G}G+U53Ft2a[nݭ5sx=/!  rv*Ǣr[k9>sY>\VJͽnF0	U}?v#QP*'3Õr}K*6UI2kN}Z~܇)OOfYvjƓʱGhMޮ
?Tm~zt\AA![
42BQ9021Vb)ЂĈKWRYjShFX!)q͠t3@:Q|bʘ%w=]@5~pZ,6p"yX]`w-ݬ1s{~.ܡ[ۈ  \e`>?!>uVK %j7
Q߮1fo3L!6W8ZDkFGnȒG1T;?^V4.MT	=fi5;2	O?hQSӼ   HWBtͷ?
/zȪ*L4$	+u&=AAX907|޺ajvZj*M+eΚ?3ϙ4bg+m2@>d؏xhőH,$LOJ^/oϵpS͝N)KxlŁ~AAAoW<ܒfンl;4~Aʒj|65T	PX%i	?
M>ɑ|mC^kZH[]ᑍk>P3AA[hw`\]a?x&Eeyg7瑝
Yck^Wi	ԝM+I IDAT.3ʜ^fSf%AA	,^FAAAݴC7AAA2MDlK+⨨BlCAA^@EyѠ165+!dVF`ېQQlCAA^c9;Ԕ+rA.h
hJ~-2q%&%J(QDwe:/p?\W/n?@;?ly1y}QD%JW\/˥OߦCG^
Q,dt`.
ff&F]X&%J(QDmpNڣ?b5rvjHЁټSs;vtD:0HirxcH8>2|b'%OR(QDeIׯG{Y	d;v\F	 %~Z_I#GO\:X-OR(QDeNZVko5ӯwf☌ygnxb+;w$x{.~zVAC'8ΥKП(QD%n_e}k7x+]n
K6-iv~e/ 7X76{	%J(QDm:jig/-)l6!Rp7mw>|ݱM:$xoXմ=lQk<D:I%J(Q6h/uyӭ5HyM?novǥ'4;:0Ha=)oXw_WؔG`jY;"AD%J(M"0e5tG[RIwTb4]{4
K?]ʘQ+D%J(x	eJ~AAAz
`   ^ЁAXfՌYb"\> y.,f۟ELЁAq`l NGAAQ*+I (
<AA1v.l90~W'D7S*ˠ(0[-yyhԣ?kQF#!=D AA[yf3h!to
=B]oL]x{S"TcT"4;c8-+-	-ETJ }uDE2L
-=ꚺs
۪MmoeK[qYm]wڃ3Y#BYDr2 NkHoa
i	B`xī'4$W}xoȲ2eR-Pl%!n6,9ST0a+m&9udҨ!"ahVQan\B!x9z+l?%"m0Zc@
O]S'jjN/ےQ{dY&u74M;ںci3Ud](K(԰vbw8U@Ps}=f|U+s`	|'1܄ ζں/cz;=1O^(m-\n%.N`Ql{˻{Mvn瞜[ԁE.|_wMkx[{o샧f6?pYB^Hp@]8i	R=)<CT٠u4~¬IGD(B=
,W5nO8co{T.@量~|z [y.?'w"<;Ns%ۚs_FbKvX:BP݁nW4Ư^b^oE'%%e☇_6\;	߯I
OL~.}{E:tR{km9ׁIWMf4\oNrdzo8 H:ku2C|2,^=?&Nu=:§M#t킿EBkTm4px"4495#U
~2Kf"+-¬t{闑x2bK'٩Ľ1fͽ֯pޢry_ӅUm̲gN̘.](*0u|PV;ϫַLWӅ򮞜%*!ƄGDn~3;'&ܲqf&HpLF?j9N]
=vL̘_2m^K&9}IY2҅g-=;7[
m鲓yA+4fuX񀦻˥!K֋O@|$:q".ͮ=w?3Ԋo+t&]>8~ڢWsڀˣvWܵ5Mp_A$:L`ژOk(*yZG
N06-ôv9dMmiӖ)bU/yai^_5Zz'ld	rIc
	}뷵;pw;6vb>v_\qHBz~b=MH"7u[g5'ˉwK
}Ht+NV{;o-(_vk{yPʯ?}=v?}wwӂ%+juu*d4}?Rpu
wnzK}/`nuzŋ-v侇 
Kk}
dro=bznښʜC]Lee_G>~kMuEXXq{7(syyϟ9c/P(47aܓp8?~
Rw=DW5m".[Q^|Ԥښʜvۂ%+j+r`\8v *&>6.ɕ
ohhNW(Y;o\.)@ 4{u2rO-Gbˁ`QljuXWiuX=.iL^vկ|[jk*k+{[U>~4{%e_.<砄4Pd4펺:i1U_,4Se\{mIQeС,{4;>jCٟkb}m$,ԗY-O.l0ig!}}+%n*db0X
skF[rOX#L9ZY)B@/":JbTR

E$edcʑ:o j$]|.oJܼ3O *m*l: 1K8>L3~:36v:ѠN=,)ݾg gsY4ܘ'=ɡc)AZGHB>~X P==(9;6VAFč}=f*5,U!=\o|m&߄nBbtxu%0|ԘV:rM r.ٽ ziKH@WT-}yݧґ:7:֡ iaZ-~N%=MnDG8SvYM|E{'pw;O)72}sKMv^ 9RwFLuO-p*|VZ'j7uo9w+AV%Cv] |O Re%ݽUў٨TsIѤ?ImҧAԅ{o>>g`hhlX  2rzK#~V Lg77s/VQlwmMqLVc13zǻq{?]Li̇|@w~K~7[]c<ݍ*Z[E1T$Āa*(-谫 ғh&@@vLvnhCt`LNxSFS,Ͽue7ӁNny(s9ޯ8YA,}GOc"n2ZJqƌl`{ׅRj3fX%ټeުO.Zϔ]6Q~VPHQr<6ݍ9!u[|Ja${繭so2ca©c'5Zؤ_г;c6vœ?ܿh >sjU}'͐CRcs{e?B\}#aȸITe_^/$wF#H 8vܦ{Ǐ qztV ?! -\)u^q|]F#A[.E?b~MRa4uj)zoxhOE|;GrŽ Z1Ĩwa"} 6ɨJže᫃\Bh(CCⒿ%+5ߚ0+mٟIK7WMZr?iIIj@/h^oamd”[W*//f{mMTB`%)t.)g(q(,)y_ֿқ_/y]\ѿF&ZĢ0}ubD|_ 2?Fn(,;uM'O@aWha־yG ߴLpA񩲢`+ka.jaB &LZ) ?=/4nJ9"N`|U6ietM' Jّzc?E^uѹ1-TN%|XZ-TC>哊g}b'Bg|t-Y\xMTG"e)cfwݶOy[a !;Jd0pl\ @3YKhF[Ni(5׊z}he[-m 4?9zJ:ZrǧSM4YX&z J'HKt/TJg'GQ@co=/й_o/^\ƈw|3'>dMY8H׸IW~Iy}^͌uuM2}[Ld%o{E[)}E?\PWߪ]!b-Я;.]n%E"MW}rK$>xܩ ѧ|C}6 Xx::/s~7&tV&ܹq'+:(e3<۽x֠ϝ:|PyB$PuS_Kׇ8wCF0EQ^RxGn|($0k\Q(Lt~B)/MM]|/7- a Vሂ >ҳx_7qۑAkw[ @ϿPAa6Lxt֓T]NXVa~;݌ &3tm 0#ũ}G|ӄOz_@Ze1Z le5)d|?Wo_8rׁl՜cҴplPT%jQ_w‚yNvG&jt͹N7ˎG۸ >ZxG=:\f(gpt˕/b0ewKjX(Ǯ%M4 0,!ϣ\^{"(jJr޹'׬{]Z_CClc=/MrH?-[k s+|d5R|B-C?[ ʪ~~'0ojo*Iv=.#AU}v%륳W2Q3O!5ԶC's;ցo׹nW*MVڈGi}n:it6ϛ$T<z㻾tKBlTҶfUe俭MPCߠ%>!аw I*K)e(5XxսZ316uHZ IA!JִTPoi`jٸs@mFV JG,[wӇ=C `4J3sVZ[/|6o?fȁ (Ćrm"U%mXeݳv:X7t"HWP5#jj&9sg6xpbma۾뤨-J%I@6{=<6&q\k5fɜ3x+(9VEފ)s6lx+ɔ7/B/soVf780J;VZ^r00ݸ5;ܿLXVy[A8qG:WjUT]%Tllg1Y-Jn,PfL;;Y_e2'͟*߻[XR{6ݸ>Ϟn%W=;}[X>0:͜bzx0NI. Wߌiԯ}vtL:2O%Ռruڇs6\?E[8]nEgw(t.R\;t_LV-sm*J|9Ⱥ>gpG/nĥs+2{*(SwŜeLTÔg#8N͌j%"ō)V$K]e&@CC*9boQ1?|E@w__sAR/q B2Z wdO -- ģ&1:=~7@ٿnէݿ>p!CMj$kFGڐ':Vzt~/u04Z\<{pgKTYٲ ?;\kw*r SS3 if|)YJR`&W'Xt  ܧM6hy]ί{cancX)Z,v\֩r+a52&2#r,@]t$Erl]9JrM`Bv(! I. i-co($!P~ŭ eǤA?+#Œ FNS^@ iq\UTH(IŠMd|ўMtTY ޕ0T s^9Aj~ /GI|pңۗj{n~Ye.6⛁+.#J)CȒ*| EO!d %Pp%(ʋb@?]1LYRV| z-tl+#9 X֖g/* Sjf8~未Bi㧼M߹Zn̫OlldN <$᜔7H"~vRp8d0plTɾ#_B~Zt kk._z<-"TAOGJq/MU>qiB)1*jF{D0UjؤiE\ګٌ]IU %&MXj)yMt($:4^VیY2gӡ f9<\.a#{6776kyxt/>uE+ 8- %Sέu5m;Wg 2hV**r_ bv6YL5 ܀} b:p uvBO /N_x0y{sg?M7;믜ym*?ki tVMYN |¿ x/sI:rֹsBY2Vй=.2k=x/oέڐRl=o†da˻kH} y}O@fľ87MHCY#NY4D0+:$LRG­ _3vhbxzf;yV=^(ɁSƎ_Fa~;`}aSV4+)\3ص; x矝S~>;x!p4 (,]jpM:mvZ߇07-?^ CB C~PÄߧP}!s;xrI B!T;je Il? u յ.-;!G .-eBu->!IWw!| `kDaC!d B!Y<6l IDATBH0!%C!d B!Y<BH}Zڙ: cE'NBRdBc;g/,lRDze&Ɔ!iZ$@B@]cC!\_;<ЏPG!?ezSgؿWO5d~5mwÎ]i1,Y7C ):& D{y< 1\;O+V{}Txq-5ykh=nGVm|S l Ga1=t倛t\WH]>!Pn֮ZhXTOWC.,GPj=_K@[] w ؽ``:qkv' \x - bPE'~x0в:}ԧm)Rnl!/ @G7xOLP4cW܋$n)/zLʝY^;/dvv%o/ݡb9q\Uw!x,ystf\/B̅NV߆34:+x2 VaJ3݌@}{pnqfngT?$CJDM% c|ƈ;aac(=44.9̬D`6 hd;Ȧw1|GۯkWDP^|(+g.wpc痍)չs/3r5)ngήE}0kRKY//a-hRs߿" J07:D=&`B?$حg=.~Qsy(P=u|&*Eg% /|X"Rx `52"KG~HV,lm vӭJ"قZj+9܉RhxTS-2M秄9uL}\lϮN(]_}BR#IUP 4|O)ui>uGy4?'=#GwkB(UY w֨\>ă(B0/[صof#>ݼLpׅBAnO^P[(J<s=pCOa丹Nw5X@>?ψ9&ED4Ps/>1yIҍq厵)o:~85|/ٌ=!$3P~LOD}s5& : 5?U{cVvBiV +c %9fz҃)6IS:6 L{3PGftFGO\_SEQ*J #)?fS, ')1x^J7GNlyLj<ݽ?bZ޵)}#c/f,3^\6~RIHR "E_^©ME޹|EF;'њ2>>OB 7{z:tfcsv~sWF  ߟ6q A֧kw[ pޑ=r!Y!g֢_)2W](Ǯ+0iC?윜Z!75e';  dBv^KFΎm<}%eaBHͯ\)3ܴx:j7aoR_521 _qRA?j5[$)ح>+ӝeO& q "T-ү?5Z$Yw@],~Cm:1  !!qff B,>!AZ  r< Aǖ I]!jY`Ptql)@DT($^B/0([#B ~B!Y<BH0!%C!d B!Y<BH0!%C!d B!Y<BH0!%C!d B!Y<BH0!%C!d B!Y<BH0!%C!d B!Y<BHX3OmŁOSGjigblX $[ IA!՝Hj *<'wQ)uBe7!016 yH"YP]{΢y!̅!~5 j0!,$!T`5@5ZPPʓ=4 tNJuT\[}65PQՂR֝<)~P ?$o_7U QLJ\(#Gݶ*@/jd=|ζM-T<NkP9l-aS@͈yos%4)-m-^E;DrZdoy?^ػVkdhtX(㇎ǧPJF[; ;:҉bPTo{L9y~«ZOYIzalaK]޻OEd䵍l8TݶSU_NH@UP9La]#;xzxg\R@ %wurzf?$l a?xדL.K&hc%K Ca!&Tp @󛙞:N`'~P@*W&[v#ލ$$ZRssvדQfă {9$INlSױO_Sݲ^Kw #qFJWA]҄OqSVXhu6bTf ̊{xd`WLXk/(%U[[Tc x״=Itq(ۉ71=(UYnBf ^)g5~׮U+>LW-|Jk?oVyW˾gTr肬,bc;#%jQvfz6eybl(`?iVI$@^’* ܳ=ou)}p6.IzilÛtzLrYTf, L~vefבa~*f є]7I;x 59.LJD'# H>ǣN¤{gL{Z?\biZSHr'N")]gA\Ǎ]^}.B**Oq64C r:lM|RU2Idrϭ<8j*9boQ1?|E@w__sAR/q B2Z wdO -- ģ&1:=~7@ٿnէݿ>p!CMj$kF~^y.Gͧ_b٧wJr^?7¡XeX7Ub.?xyH XP {}iiݤiG8<(Ȃo+7[2 ZzTʭoPT|_tj\`ٺrjrʭ R g@$([ڷnpy] TtxȽ1`eg ?|"TQ9!tu$F`P3o QHoaѼ7o]z4vC-}oP{/t1@k %ʔ!idI ][*~n|~RS)e%K.X^´8F3s▕3ҴmsЩ;Aщ32r9ZB ?_(H_ SGT£!r(qDi`T|}mG2\xZD? =.ұ3_2-}҄= Sb.UԌ4'$?#v9򞭞{+M%*Q֓Uv2Rv)$zxQhVR fP0ʱk ' v?;'|wPCV&0i@PX,(thʵikcmanZ~X!`5Dx^oB ~B Pϱ"T_ !T_#$_ BQ?P-OHjekiAuqlTݹ7U|?8B V`Ptql)@k IZ+CU(0([#B ^B!$KB!By!,aB!$KB!By!, TZ316u5|BִTQn}7S}yRω1vrۍ7}N.lΩl^ި#WNgçKG?tZvDgƌ?tk>Sٿ; q)EX[ A Rr:sTH9NP(Se)65Yg[ '@Ԟ%z+B TN&t›䜼\4SD]:SNCK[_.# (!#ǼQ v`(<-Gt7}##bPXm85:\E [V`ߟaֽ;z-2nݣ|+"gsY4ܘ'=vz͂f1bw0)_,fxz {TkS[2u#&rcXj\@v-|UV8[6"Y'_YK1_6O~uuߎR]s[W@8_#Lx`uﳣA͝zX6RE]ݻ}ς[&`h+-FsNM񛣡|v}nl>gґ:7:?Gcy1Rt$u꫅b$F휛&_9ߩx2C+v/9no_&Y>mA>3&K-X̆~barC<.c"KGH9C>/<^$ڞ˛ⲙz,cfww ^+kl۶WF-ۺK0i22>3ԙGbKc[]l̆xp|.sY!'~g\-$aFUm~64|^GEЏP y{a}(Ps1$a<\/KӨo7{\rJz1Mpv9QSgWׅZe:nc w,(|d.CjHQxG jȪT#cPWgHJ<",<=$wvKA% Ebi_HL!=#9 #//b&K:L1%ɑím q*jc<9r"(H?=cũc&/T8vQræ۟ݥ D'^ :󽵾yhRAe_ bv6W]$?WTXaA)o$A5 *FS~dQ->E*,ɩ`4c/f,3^\ȩx7O|߶b+ lL?OU)n#wpS/o9Kgۼ\cz?OEIc0O]Ȏa>,;믜ym*?ki,md$!c/5 C1|-^ʋW}y׿ ;6yJPa)1WqmIZ.]cN4࡟vU `KS\ v/P}ٱ퓧,Lжk>eX[/sP#5<.Dީ\B?<~ү5Z1x: TwЯ_T<qff B,>!AZ  8OH"0!TBcKYP- BW$_-}A!5j~G!<BH0!%C!d B!Y<BH0!%C!d B!Y<BH0!%C!d B!Y<BH0!%C!d B!Y<BH0!%C!d B!Y<BH0!%C!d B!Y<BH0!%C!d B!Y<BH0!%C!d B!Y<BH0!%C!d B!Y<BHX3OmŁOSGjigblX $[ IA!՝Hj *<'wQ)uBc;g/,lB0}"_8}\W Bi7!kp&rڿ <ɩdf?M`ӀDP3G8vh)g Em_V3'>]:DXNa~wyhό璅e&^tftհ __lM^O7#޷_L5vI?P5\_aױh ?g w?bzwJT0Qބ&W^{URl6.GqspW'aS"ym#;}56ߙN'Bpjf*MO=x`άnW~! gsY4ܘ'=E]jЊPyFt1P:+=7" 7]tz1n\[/,u%+:l=f^~r|;W<3쐧Y.lc}>6b{6{i[~vR.mu+롃PUAӝZ+ #ƾ3D$$Grc^A {O >pD!aԦI+RM/pB'oG$7ρ,$԰lҝBĈ F֯l"fN//2٧"/1/ !Cy!v{=50cݟQGa1=t倛tRKy{,:w4Q/L_63zF?+ysns?G@rf&?52J&~X ]۳lHq󽣚1T X>m_ ntr|2֛jރtn7+ X[ٱ̆XؿǠ^ϐ&~j6[FtzT>EU&ڕV.JN8'Rj=KVngwm(mo5\4`D`-*65RaGpQk{M^Tv)#۫R@w5Yl;2 {! p@Amm݊ں8hV֪Zڪ=PQEY {@r?JbAg~+s'X[Z~w#\Q껰3[vDd==O;:Ꜻ+i{$"*8y۵2r): :mY"z޳ID}~V,KTr QƭC aS'd/ɸ~cl<*2Oa|p^}吏gV<{y1 CD,mc*?L6BLZ ;o'a*d'kqYE9Z+T,!*ON-U޲EL肪FurH\{K xHDz %[Vl9nCLxo&Y%:㢙k3Wg?߽hʗK$')⭄$O,bfl?)b-NI*Xr]EV=LO澼$qFIEEI񅆍-t(Qyui`ȗRϨGd{k6|4sv(L5k!qc]rH.4hBv]'wX|#D>-w.Co^bbpԒT9z9U HZ.UDeJT79pA&6}ZD\}0,k~>\u8͌G7/{~}^BDrveOdo*_C$תFas91<>T7#"礐FǶ]/r\mz 9=!#fϫ˽3}F{P$ND{xW+wH)|&dy%k#[o(Rrzg%Rbx=rYSYNnUm* {@_gʈʞ?L!;_k3O RY'W+rHK_2[*Nl5[ \ +K8#6l;^>xV"=Y$MOW*aC[US}9LUӉh _8_ʱSWN'}W7t>f\|]I쭬8y@cq)]31:=fr7" \80]!Ɛ0%]bܸ.@~uFլ_qi멲:lϜW.TQi3>uHՅD oDDҢw׾[eD$Ϳ:䳬)BȀ$KRYqnKzb^an}/z8U/ |cqVٝ{~[jf׎WWQpuT/ͻEgL T۬1eDD$N8y0qgS%+d^I̩78wĔV3u@α'YA"&N 7r.CTmǺmTvV Kω*fd[ӗw>=]^eUCO4'6_3KTxXص㏯qOXB76nq  %Nh>HVy㣆ך=:;m;DV%~iĽxqi'>pZ-U`=O,=)/u%u=˲~m6rFAZݰC,QȔۤ}y#CsV&Y^)}ֈ+=x7_C.\m:fռכ K^Zi'O5D^U^fP9y zUt \%"vԾ6={C'k3e{fSj2wZUw/.6;/?UQ-/˽^b{ O!^~)WgW|ħɷ#"kcxNy,AB+)U2+ )a@q4p.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!K!r.!Ko"=  ;z` ;e:Ч-t4Mm%rב/|+x^6룝7K;BߦRc ڪ9趘sGTY3m$ 'v>(t\^u=kW^Ӡ[bKj[g=Rm(I9ЇwTL /󰨶(lkT3m(u:%l`|fvg1z>ƺ/e wcNn>r/-/TԹփjq RSI-Wשe][xT\~BoCIN:EDTvǵDlDq_n;o@5F׵k+u=j;e]~-"y.v篤hz`7 i }W$Sm7 ?t#6fx>& NNlXP?ٺm0_;xڱwY6:wr{! ˚,({gmޫ]F,t۽|} cGDB 6y2dT*}ee;Bw|wZl{ig[5a& w0ȹE;D틒%Eϴך-c#g63{ 1U=mh|Oo܈dCxXyѼMj.i*'deztmm)ZFlc59vNP¦ǟzfz|"|r&?.;!mȿK]lJ4`nEGW=M ;`lsX\~f6٘ WX]Lܦeƞ+~[䔔H+o񿱫/fKRS z[7WDJ;HU*)W`3o_=%O㤪F)JR9UlK^ϓe޹(XԈ/U\o`|Fo:YcHDJ;U.vj[[ŷ%&;-%Aadfu^ Kܥ he ܻܚ@.s!S9{L?f3R"iaft! EζeHt\jadl+uBuN v)|ТM;Yۗ0:q u i9~0NBQ5()_sS*Gg*O/ z6HT}.'eU\:$V>*;U.vj[b;a [4+(P^~+I Y_H7芯wذbڍ@q*R?g3j޳=XCIY.-t~vFś&-kwG"F& u$NJ&ב[YZۻ>cXS]by_ {fU3+aXJveNLe޼iyvr6yp_/~Coq[><{[$]ϐ*YyL*1f3[KW`v6B+%يҷMR RUhL$r<ӕ])Ld>b׬$Ma+aE={qvh %Hr}%7OljJPnUخvV\_{PaG9Лw""@D56a6Zgll:ضki{4czvvźYM¿J^iͻCXPjr*tAJy 82}Gc_mX4I P:]4烂c=z5BZ.yf8<VòWzYz \-Z8n^ ܹz`Kr)c&iVpSvNIz|Խ4irl;'<)cآj/<6RHDȴ͗xc/Fug_ݻĠU`Ӓ)UZ*c߲;֞hfW~|2|ɖT(ɏ2[yITVsS*F1l4Ī1T/'b:+].kCz%DCz%*ư$_n0Ti]P1>zA^Kd߈v}T!KT#kwȈyLLXznڥK yT'+%ix6-8z ?U"wl!{PYQgByIw;iϢ/Gg-[P4tK~;ܼ7\;1tW#v\0he_^tH<[;;9?xTOB};{L[vǵ՛%!D͇fPVoj'DH?y%]>ZQ?F-\u9x{!K!r.!K!r.!K!r.!K!r.!K!r$Pħ]tKx@4YOUH) Oeӡs7Y @U?\BC%p 9\BC%p 9\BC%p 9\R>ԝwK{UԿj~}3Ɩo7 --aLW]0HK M9)K{yDϮ1eנoQQzzϤݠC_{6/4 M}MA`bkF9wD(LRYzG)n9R)R3o1!O5r1.m H}$9I岅Ғ$7zl{vvry:sv4݈O-_Te^fET~̜<}1YwL7}csS[g{/֪ͣ61I?{-ݦ<|ǎU*YN㗌hīdׇrI;q'>phЀMDQ7/Jظ5d?:?@^ܑ%3B,'춇$-غۜGTyFj,/vi% 2 hȧҌ;yQdElAԁ%+KB'-ߟYˁ0:h~;^X\u!eYnUX߱MⳢɮNfop]4@<@FWQ& r4M؞?ѠaS멘RF917=,"hP |Fj6~o=cA5C&r4+n2@ @YYwp95m;90_z7.C)O}:{NAh S~=ΣY&u$ڝD"+v0VVc޽f-ayi19O_SRi K>]V^)!1#t|/.qSH$3B.QOLNe=Tko{!m! !K2%7|{Փo2lltt1QќHEy^ Z@H;17~Ph\ EUQQ\1Å~55t}]DPlU=m"f*"ؾJyy9cs"^dy׫-n1 o޾/8Ύn Vfquuv=u/[V, adֶuu֯9~78ή-n.vkp] Җ/[$YtATW'kBx !>}lO@|(P1#<|Og?Eᜒvރ'n׍[faPYY <!s:{Η^_^O{l^~ߐܼBn낻J4qL]]۳gL4~ q9OTL~ gGP\̍g,DDv>!A7τ81i˜Ru u1;TX#ƌ}[=~fqÇ޲ mv]t=c;%+t 5pY;**JcFJM3z,񭬬>Ba\B종su_TTը@'{II PÜ"P_cBT*UNN"#]\\~ԓcZ˖:[RZV_p_} "1Fjd~?q=j7mcBgR#0laُ6Nvefzk 0]Bd]t#"2&vÇ 0!dlbl+s82rA[{ec>emA5Vוx7oczwY- 4zM;\aYn8߱;i PUڲ^Y4gjG%i31vEJR،|stʆЈiS'~D#**Tj⵴![ CFׇG&N?Pz WhHߺ|f2Yd)EzAA,%P0֝;ojźvۿw;nmeF&mV[\ߦ 9cK‚/de&ge&'ƅRdKF)$$yx'a-Wt j/LLJð:#+fL aV_Nx],-5;~sx_/nlc B񣯧d"h4xYyP9/WRiԤ}D/GC6^+:(~BXփaC)*VQMM`H?~,gGP\X/(>rl[zi.m>j.KmdEe5id sRd>K"&On̖ٚ{djۚ_awii.QTs߷){椘v"R[ZZ>'_O%$w_ڍ8 Cã{BB#|y8=%nϮ-wx .1KH1YtZW˱ГXei@BmEEUµӧ30^vֽloY:+v㛡ah@5*~s¢]{ܻOyB"Λ_CT; mg;MO-Wp3Y~svu#ߺhs*V[W{!ߦ+JRdK܏zvFgGaDX+tɊeQs(+.;fhn^AµGm뷮%gtIA=$f&<H}S@Ha 4Yv 0CO~#rj|bkgDβ.q.'K)(l=R,,%PC^|HNvGA^.,ɮz׮9b5269u/h! I̓yB؏ bD"-?#(4nt)W6#j/3#&(,.~N=h0w4ypKp~b8ܺ(AwDDDDj,44^UXTK.LњD!i))"WyE fSRee: eȮԿܝ ue圳߻윺~$Ű6oC"Omr=3\$xmW3 O0z/_&CWi$\MK]S׷o?yxg˨ΫO κn?kYWߐp-m0dbu􁠋ǜDpwz]N7ƒ<ÃauK{1*2/2ԯ@uwޛ~BD|mNHh󗯼=ٵ%NKSG=SNyy};Y/Fz{ 8 1`crÆ:u !,ArEْrx͗/n]Vy1~hD{3k[:)s6c"ʪ=6O}g+*B nh))) ߋ,s!|FG&C|cC55!]۝BdXCb!1t9<켁k6v¬{޼u$W+47Ā1*~+408<08^rX尨g'`;--XpHDpH>w߾s،MW VR2SX4 bsR!~'BBuU5, 1R?:wY8G,.C~™D")*ʭ52x@Ii,ENB[hǽ.jk7<٫Q#MtԆ ϋf_%2i)IBi,/.!HK7; t~tLXXX}KK+pܡ"555|ioey˗ͮkN<~)2ćXQθaXqq@n/zǞL߽t/D4q5fvOv|wA<{wCChclQq)BHQAE"*"LB?Z]A^yB{@w'τ/S޼XRRAȋK}ȝ1m Ș$] קOaCot(ٙϞg0?0wB0wbTn%|++3gLMIkgc(O&Ph+8RUQ"!!27(+)FDEh4Z)ay\Kփ', $%$%- OZPdd֬6! 2B4חпվ{OnvO IDAT$x0Dv{ֶ* =cnUi@uΘoGA@Uy쀼/áK@  <BBB|jwE"uZZZBzZ1W;ˎ]%} 㛚ױcFuҙO';꾇L&m . @ox}K VYUu/ԙ uuxņ:CIz!{wm"{ưjLuA22H$93N()pͰilgd+/'sAHh$MzM2dnf|\YYy\BrHhDK 8ba]K<}i9;xJ ce!D"ꯨPQQs%rX4+7w{Ǚ3H( BF!3kkNyX*],!TQY1;/544dF(+  klFD]AiI+{C6nXO&B"+*)FAh S8ac7cf$ݹu !$%%')** Yft\oK"}θL"I1 d2YOgY^﯀*..7Ki!*B!y9x,EcvJB_~EH6B2o\F߿5cvxO9xI߳]}/t6ee&ge&HJI tzj鎙1%߳mq{p:URRRV2=];%͛M!eKq2L&:D I,)22! E}3q; !hNuꚳ-ObWࡇ1 #IXcF~'E&쯨<9Ooٶ-f zkRrС#?ܷ#_W?}#\>wĝ9$4jѢyi7,7_pu]^r`踣ǽGv5.<.:dNXD ĮbBkkY>็?tݴ~FGKsIf`U]S9Vf2C7Zy.3CY[Mˡuu46:FF /a~Q#ݏx74^e}ʗ?քyB= j!mx.nDn555];jXǍ6 rj-[rlIiY}}Y_93BZBBB!!!!Ka$K:SRZV[[G v#C=Pη1}dU99\XqOy>U~{Y/zM;ai n01KIsgB˖+ֹ2爈bcm~PWBEE)//^mt1];NLLta.N˖\ 'mqsQUQ6tȾpGO3_^ߛw ntY /!!hsAK(+3ðG9l+O 073<,/'9 (O?7d6paMڦ) yiK bLa?0W/_/_.M=nA` 7~{8Q;07oft1kRa>hkƒ[Ri,@qлhj'Os!QMbei7Wf$));rwn]KO$H&Fa~iW,V_`6@K@yJH+F)>hy/¡jV744/)7ӵ4,Zh>Lq3拙Z=NXgxu4K@!=}!4BMߎ\NRV^r/2xm- d>B(*:1}z*s=- @B<=æe?x0=|GF" yք2AkRt!RnF9*&~KO|bqyIIYEeOd``. 2hZ3GsƻY /x¢{=Akh @/nFRSSSu͗?<|FJZZD("WdtJӾN^ !9YA2'&l3L3-!!&O0h j6t ~b T;R}=B#o>ۑj_[rݯAx&'^ID/_ =BaQCrXg{ >|~W@Hz$? O"%<ȓ1 gBWں'O_x>_XX!˰Cd?f^0;'!S+WBH"LWh-aGD_/Ǐ^:5*q55D.IIq}deM%2ě!)"^W:ʼnddf~<5D629o5NEDD~ʼt+A"s=zئmGBsL!Lc[x]6p^3Dz7ӲLV,=a`ð|}#'Mh u ?#@pbgqUVV UKM|=B&Y_OO߷{[~}FzW5}Ԑsi1Z Ep(YED_>w\~عg/nl^O9RȢQI72qc94j 񥛺Gh^>^ia׫8`&!+Kѣ[:jPkm\mm8kRkv]Ymeˑc^Yq!R6CC@U%fFyش0щMnjnp%<BDSZ|;fGkْ^gKJϙA$y>_UU͜JRdK܏z2+ ~u֞G,h11F*HeP.P'_1!x 6}3!aa[7݈K 535dV`YK p0Bߑ.=)!BRRБ&))с gτB]9ny &?Ulj=}!Ca mIc#ULL!ԗ. =|穀¢R\bis)0*&ٮ36!!Yy9&ᓢF&Oa 1'o!>6-8:S]Q[WnZ'OIS&MX~:Sc-n..!ks5lV@;;ڧߺ{Ydt\m]]p22҆&HcF.k{#xGq]SVm͐(\Ka0"H;˗ڐШĝT+t ,>47f,[nr7T E}>YT\ҙRECjjcdu>p t=Wri٢!ZY9][B H$R!!#v]xu'Kng=26XQ26Xzvks\s9_PLO?&;,hskKs37|̝>3-^u7HA"zNxoǼmq2+-+9o,vBB#͌=}jwrng/cG2vmx@J|i+*w߂Ju/[0Aw kmpø.< B*J B**JU¢P{Z[͞G~Aac#w߻윺~$]yy:Re**Jyy»Yج\gg=1Op 7}3b Zbܵ0u"-. :88;k_cB҂DDp_DjZfjZ&;}ٕ0ՂaXhDbhD"7|'Ŝl҅PUi]@mp^oz.r$B(歍G0z#*"B5Qi4ekXںA#He#aX`pؾ܏zuv}37S3 H.N=ma'v{c# L{@7Oҙ!ҹa9{1*2/2ԯ@\3a,EڦgR} r?`wȋyhxyo$$4WޞSڒy'~?~ ;P\nKKKr19g$Ŝ;s23B~RP͗Ƞ`OX]-Ӧf"68 &$4cm̬͌Ꚛ.vzt5Sexg>}腑}#^A҂>eEmmMlڝy3-ߎ,`yN7v`*{Ƅff,Vdr-*iX=t?"04]R+ܹTXTk;>O (7/@U Un4gN〱{M  C#TH7&÷BO] L!o@!o@Bh   B@kzŗTaoQ^V. t67qaH:7"2-vDoS'wެeq?m2[wj&^ghJBYcc`dֶZ&T*uZ2f㬹KٹwT$z临,`0|@TJ~1v_@{A^NFNNXu@p3m;[musQUUʼs//!s+{\J^$r9]]SbSĦj BǷ _<|}Z˖nQRZ:Sz>_UUsp M7ZRB<^9Y!ALTDo_0vs=8Ɩt t6֝;?D4p7l܎?nG&&&jl2l jEĊ,hy &IJ2rɥX0L7,2IHOYy}*;9;ST11ѯ_B}54Rd c+`?7p !Y8iw[m >y~5߻윺~$ŴצR* ut1Mt{:  T-bid񐃜=By (BBC|/jniAc'9;#`|cdCڛ+ 4:LR(d2YQQaWDEDh&*&vXh'##-##hw-+I[\TU o6 snР,Zat+_BǼwrba0y?&(+Hz. O s'FeAٖetWV^ѓ>'pv;giiYhx̂skW!{+`Ԑs3#ory4Υh}&trgBZoG]n}lb sGjCܳ%-އOEea?s?,vFn4B1GefFf ]泿>hMMiS[HA)(*"JKr>Jf͘zc.1 d&qc fyk{NebVðOm{5 @Z%'G op]p7] L{ 8@p0'?K ܼoGz/_6qxsN IDATd#Tѷ]Ӂ AU_ki#MM4*O^2a(!@0 o.#f7|t$L@$ZߡٝP|ڧ PC (t*ltee&wƙNfY0|.,_oh|/6NX1rmgA[$:kt^ * w&VBRR+Nxu8n^ .z)}H_A^nܥ**JN9O8t !ԧO5,  72jԈ#vEGFEDD6?oB(m4 1@|oxjVfs~}Myĩ& :L@ !jkcO{7Ã!$ܧiWoO+ˁJx?01mg]:7"2-vU6V gΘv"BvmE56+9G!dq MVR(kl,ۛ]lD :xc&+7`Pm;9h+cuM5;v4+ 4%%ŝ\8DFv1ӓa" 8~`UU=B|/DK:n-)-Cy%i0޴elyт.[𶔇Y#^lo^>xv/_oguI`x(M$%)aaտDjPhl͗/<野)DF$;R@$K^ĺ[4-<2SAxۉ9DOO懇BƖt >Ǎ]vy9قM@!YYJ~A!^PP$KioEĊ,l:|/Մ,EN: G82jd̰3jڐ"e%K2+v1sazmdL!!*sh߻윺~$>)+PQQgwpv:RS[lREYs~BHEE o D!i))ٕW?1 2pb{N51]._yF11 pE٢R,]A̖{,,?2ćXQU0vٓUEEDh&*&B|=uzEy qgG{B^RZY{K cfki]) EfL\{Sc11Qy9?]kk @oNFFZFF[.p3uAvDQQL&њˉ""4WIA^ƔP{/g!gW;?{rGV;!V;1*C ܏z8;إĝ<+Bp@3%%Y]6k,^`me`b@EeUd_d_YYO3{FJR̹3's<#Cã{OfzUH/ۛ]i}&ݒcWRNO8Ze?zM.B,BNuuug8o9;ܑ>s4X&hkfdfᏈmg}He֌w=RðiOLFhk+M`yN7v`j7zwW  q@+0s)@pEA8H#\?-D/ B'[{8wA @Pn^jw?#M_T\C ^ f1ߎ^F?7/?d @Bp]yB߀  B߀  B߀  B߀  B߀ NgԨGoMgJ%L4~7EE|\@SAhO^GH$DiN)Cu'mԧ3'1rhk55MMM_cAb`т^>Ug-K$8UZV3r0reKNz-)-o8>g.XיҲ:SYqBZJc[br ݽppf0н{\8o$x <;vQ@5HB$!` IX$A k5HB$!` IX$A>,KsC/hJBo>"p8BEQtpx*7r8E΄8DFl͘[=j!Vɳȹ3iț8,rM- =xf2[F{vm>~ẗ́mBvn^iA0"ٱ}:& O,';y G/g%B n:Yiwljڷo|:Wy" 0,)1jlro/Ikk_־L:wb'L"LNqwu:~>iڕ:tiѣFDEN?i?stk@ɝC1YWQ#}z #JJ r9>Z?f:!dqOpp4χnboyΞݻ >n쨝[7ص?>!Id#F M!\z!cĈaY 2xrGOt% d}A~2m-$ .Ѧ(*,<)),* kPS=^qϯ=t yiMM}yͱ_zg.]xZZ%Zݤ`EEeEEeރS4/jk={VynYPUp8K93FK9<+}*--c-]ܬNOW.v}Kj?ZWZÈWy_/O7o/ښ$y8,vd3e&ٌYyenڸ>im4}}7!Ƞq} [ nbۍM$\Iׯߤ44:Z$iРk%w_\v|("ue՚oCﬣz}+~}anS~J[]KK~kù#̛=kzΝ:w`o2/<=G44:v Zw p!S7nX۷o8N{55 p@ 8M(Jdy?mɓ&{Gp~<-ĄOswjۂOurS/P%b]kO#7[G&@ɕ{;ëcqʀ$A k5HB$!` IX$A k5HB$!` F `fa_r*wMu[e=lσV` =\~`oVņnJBo>"p8BEQtpmn&Y[x/"2(NR2eLx 8p|9,rsȨX9)"xg"˚Qm?Ӿ\L$^nkye ssuyQ!!"pYlk= ["4z8qPB_n<(ƍʾb&ȿ2۵uӜظDRTly(B_>[۷c2$)dv~&~t_t"+m\mfwWI1֯]١Ckn׹Sj]N[$ sf$v&*―vSccgڷq}w'Ivwu_6(05915918(P]]]$68Gq ;Lb|i:۸>`wp>ݴ)I"<Ʉ<`YRb|~|"JhL СkW+\n:kѣFVI8qzԇ#.Y>j^,^⾸~% EbsA~2m-$tVrutt᫿^j5]oU/Æ [6 m]cGܺiǮ IDOx^ M4E ^򉧗i<:kg&8C9tv{ITCg%v)EQaqE%LIaQIXxsXMھk2hn֏.t\z->`Xć#3C {p[Vfxg%K_Ե-< ';uܾc3j1q}OlgheeUee՞}b:نHyEŮ=?Lb#90>zdY~@_VOdM6%GH7~ot͟&~|ʺH+|T[f9hv!wadd,BHZz憆;D0٦h='Dp,r62g ,r>x8VBjPu z㫩Ö.[dnOCC]G),*ftu"K뮧s4mbcUL0"Ll-.~mHG[PX#:BZ<ݼkk^{ :[VV޽^QQ1![B>:v.p>sA-nKK˄2nOiwgJ$u%WoEaq k932/bJ:p㹚 :T0m.LX2f =ZXTBg#9O۴qW^}S'Df}qAJ}|ooyy>24T#FF:"k}pF.x9n:{ރ-$TWWWXTZZݴq1pR.W4`YZFenܰo۫q84Y ɹ:v"3}ΧfBR/dey_/pK$Y >ruѱn !BZrW,m+dީ-**{IWn*Eu7 aYW2nhh4}aL m޺+'#5i-t+vTāĸaGEf=HMzCp Mݣ{;yȃ޾+"+*KKCEJ^楜+7}~>w颍J6Y ̺xr`Oc#zu1-#[W{w?pʹ&{y?>iVwB&Nxoܔf!aT9?ܸl}YW9'Ί6qK9)Ngb'_CL3#DoTr+9)7ըzȸsUUq '|(d@4A Q9!?|/uvvq_C5#zykǡGy'$Bk':\,ÇZ-] 9AͶҸFAJ= =Χ?el d!}Bա$oӣS'ۄ=XQQY^QkSW)l!zN'sUTT=8u-3]xDs~ͶҸFAJy<>=\kht\ң(U4UsB /vct:\m".]XqfVXT p/l+b7(HkhtB4OS a} 0ADyyӂBBAEEH9,^kݼ)g24Qh.Y[QӂbS^z@11_P,w[yuíL @Q}BW,r\OedT(*hcđW>$G[[K[[+…L9[QŜksZg_Ur9Hz4Ug<SpBHF֥C)? ʽq@SS33RXQ[Qh8Nϼ]w`BHZYu*Q^# *ጝ8M{윪j嵽_g_HbJrSSj`okɭ^Gc4EafΤBVBwr@S>b<];άzg6s7 -Lt^JbU2mz@rN4 %P7sc{a-2:cq> F焜Gsr}@vg1]}VlpZ޽tcD?1AF[(;$~Q1ہפbB^~ *I!خ@ÛU5HB$!` IXB h DT @jȤ!=y*V9\ǎ0y<\h1G$1>[2f_Z<4D O]Ev*DEpόz͏@v|ΝH=W:u$2NaΝd8ϟs2dBڠ@uuulg"7oJK?aFBYig"XYn75!z~}%֭k鸮]MڵKS2DN WZq ****YOxT %q+*DI(e.Wr@BȰVݺu;L\b1b]|2oϛY b6 !>:{/}BV|W}<)bNpP ](|L阚c1G\ njKbdTW̺`6T{Դ/j$,Sᅪ ߾szSڵ{=ilq>=q~/c= }Bա$$P1nNc$3g|3䇒/_pGcZΞU6!{VTTWT)6L=/-x1qfe۞<?>dNwcF-Id|©gBfM;~RrRH`Jr ٽ/rYtFGO[&fUi>8D17&1uM~&7 Oꮧs4SZZ p @^XXf&UWx<>$ׯfꋌ27?~gc=.=㢭?ٳ6K!)@ /Ñ߭;DǦѱGJH ?߬ J^zu<ԗz(իW“}|.`Q^^adh𴠐bddPQQ" 2Io/go߹OvndJM@Q~ZPlj_!&& Y Lܖ=|^p+Sbvc'͌>.R~TrpPZ?Ӿ|.ݻgSKKϸb)j,-#[r֗2Ha^ѹSysgo)}< tV)*)Si֮nWݢ/\s7r7=ү-z4UgEEǹ߳;=]Gb؄=b:x(bէ~ᄐK"%"k})fu5_HwBt{^Zu,f2SksyTUכq +uo&euj>(i" *ጝ8M{D0{;<],Mn͡#!,|sͤA0b٩3){;z<Ԥ*:' @d<T@@w{q IYT @ Nn'71 g1]}VlpZ޽tv 5 7*/@ $! L& noPHB@!v Z.L k5HB$!` IX$A k5HB$!` IX$A ayvlG]^~LmRv!h% ڶokzpIX$A k5HB$!` IXc{ l=z- S>M=ش$D?ԤrNpNX$A k5HB$!` '&oP޽َB$=^ JJJ=xv@Y ׃bQfG[ 3PqYA)!yIw/;O)Jv w#p+IH__3Jv}{! (鲽MO.3<.S@M ^>ߩ3)"ƍx/4̲u:3뾽]p@p(*錼}Q"8JEQާ.Ϛԛ $eHHENe+Eh5(ћ?1d/a{LwaR; ]@KqRJJN(v#.N3~_cǼSgӮ^M8%֦)}ҞNcz̲07%ܽ(:t^~=)ný{Z~6%lJB/m hs@drt߰/1|Xx~JB2- dC˵~!# !F"oæJ:HtRΕjM_@9@d:8gک?ٹ7>wfjncU/!qGBE;̜/(!ؓBFSkwyz]vΎ3&Y =SCR3dc,9Τd\̡G/dhvҘ7gھGF[?nS`t_@Ipa(-_IkV$s/ J~3ftr}Nszuʍ\mpTӾ~z7YBd UB {us~. s&Q#,vn?ئBHBl2lt\IϿ׿|26GƕWT3IO?2HBYyE˗NЅ֣~2E8kز#tQ l `OM XQqqoQ]ISg%13=Ǝ.yO(DB97pHɟ“SgOj VAѳesB>x lNaѳo6pqtKsM=νnݺmǛ rU,v7Wlx@,ľ!v.^ =!P.|.Q8,-}Q"HBT2lK'w0#[!DH!J^9o,ʁ$J&ѵ5fHER]3YI="lG0hp6(E~~Hȫt̕tH2<'Dj{dE>B]o@k=!P*iN>t_ILOh%Eb778c>@1{Ԩjͪp8'ʒ_07D&_иU'u,KJJ #$!PoB&v _@NĽO!,[: +)){X8 $!` IX$A k{ &ZIENDB`hydrogen-0.9.6-beta3/data/doc/img/PreferencesAudioSystem_V2.png000066400000000000000000001111221211146647700243070ustar00rootroot00000000000000PNG  IHDR&sBITOtEXtSoftwaregnome-screenshot> IDATxuXTK߳ݍ brQT&ɵ5PQl%D,@QBi$Wra$vAG9̼g=g<@ D+Ez@ DLJ O@"A / jzZj1qmh7Y&goG"C:BD,ó7%mH!%5P!"|LzB4 {۶V(!C}ҼUodX4/"^\&]ԚB ʪZ--h^V3 Z2, d' %STdGC ohC({V !nk/(D"iZ D g4F"EHY Rj.^݁gŒZT(K}y͸R\Lҿ#B>6F g0*㟫oJKKJ +L`29B#"Ɉi;glj8r#;\SN\DjG #0>Q5$G,VWV+kaհA 4-4]++%c? Wps>-m31[Fm-#i:l['Q\YݤPyIvIƑGPӘn>kk`1P:M9[aK{tl_J /t3X+z:0/^C{V5d;]Ǽ:? tpXyc(qAIL dV/Jژulnj1i5GfùGc8ڃ'-ܷ< 1GμV_es}=zǪ iy#vbORa3s_64ɓDLպU,Gi qÔdE}➍c~2_O|rըA Ψ6_"VCW?ia4)Ny.&hdcw.5?Ffqf,6ɿwh}-3q@EAYgt_߉s֭QS9Qyϱyl (<';OaVtXŸ{Q\zN{K9a*d50JIzzcZd5i9ef}twUwdcjt/>~u桀On0g8ӢbKIDg@U漍N*~ j8BR;y|@\fη'={8Qe|Gc~M3诩O<[2$r@O -N&o2ʐE^nb69i&߶kŁ_s+9RFf:2xA/&c2 IT$.ۖsλ"xwtϕLNgg©7vl>y%`g;oĨZ6AW\)jQ4mҟLM a@Qڣz^`J^M.adAKjȿvK;Z9=rn/RªЄjbҤ(h*AIJ.' ;O9y۞n0y,$e~pwQ=d Hϥ-iWJp."ѣoϑW=?IXZhXl$PmGHx)Iz ULXόJUdMe7iP3քW)Zbueb;g6˵FQY/-OI~剻.]G\0RUFZ(V[tDNb~{Q6clRxϚq.[6+0maH_g3npH|]erE`3-Ѧ-l-b+Z4R8qp8Q]T'01UDK=񈞊2RϞqG(DN`$2ա`dRu_Y _"VCGfzd*<6Jvr^~%ѡX)9eM 5Oyd%#}J_৬'i-0S5/x'|ʻCBi&ӠĔw0܈aT `2bΘ: D|%faVgy;e>J3=ORvt<] vEw$:de}YNP]EEt!BcSUef /'Fot]4^>.voӤd?E4?PVDdfb])E= q DqVIv)KI(fہcFj>ΪTdFz_G^ q0'R.czboYipiѠJY%4/MHƝ *q%yHHh"ժݩFoC IU ::s92SOۦ3eleq ʞ ϰ6RV22=um2U[O3# yXԒhz(Y;Clh|)v֓ U]8||}'׼Lqk{ z8' v{q(ߖu7~C}}*ֺg8V͛|ry+Y2$jgqT9svL]̀K{E]٫|cx ڡY'JK`ƉSY^Vy/zvY/Ld}8=}娉JbLZZ􍓗C uo# &p6GM+Ka} ;{7M݇8>3_(ݨy& dG9>_H ;/uɄ}B 3Ieix w' _"VC#gl[ia? BYf3xl?Igӯwvy^FS4si{#JgmHcHt^|bm;.iF ԣhL:jcC+{ `ȁ׮"E-g@4@l]3-[,)#;d cKO՟JDP#m EBg߄S>4~0z䠶V@,h+UZ?3%v[kXZ @FfzuzZ_>&.%%@tpP:dԳ:uLv\ChkPA HIM72ԯgr@- L@ ~ L@ ~ L@ ~ L@ ~vF ӵJ[kh] Z DGDٛr$B j*eiA; T8LN'-kҺ&Gj߽Mw}tٜVyʟ #AjBj!M69<{)95A*Xz+Imh l=}xB$ە%3/E,^ aS*yoTviNޛTk'HQ{Fwv^r#6zz/0XwjxР8;~oXFKh{x9r uGiD> (%R2ͺlJL-'h_fr}fhn{9f=L !^F^M8a>am]7BLp#/?^%}\Č] [k!w}=}pt0u1ѽSj@Bk}w#<\gˑ@AP↎ݼ%W;c)a[}Dx`D؝nDɥ߈-ύ Ώ'>[(8oDUΊTTFJzkvn~ ')gpcn7/ n 3uNScvӾͿAݷӵa׬P]+ܳE.d:jyd :YﳶJ˜H;-sL;IP9fۚ>iGju&̶̑Y^Ӆ }]qlH؍UUȥݏÄl?p>(17'陣iP_f3?'̬/nWꎛlLmLT|-N~U$FM/HJs3og~> \f;əyiNd !8:YuynĬBZNꇰfs˩S1i-/)4-fgzV5! e4!VJU?tӗ&}`9/KM.S0֖²D/5MZfsj giȒQ7Ӻe;+TŌ2d%nm訨!gUVT{ۦ*RZʗ~YB=BY<Vpםi{TSұ4i.,k抵ʽMK#GXV7qqn KjZ\8e] lZBޱYd T#e0HEN_@G9QAa$^rb]y8?#E)dD)&zD &ՓQIfi wf,aJX'),NFʕӟد{9w2Z4w.G~lYrvރ}!&? o2xF(#3!&_JUdsVy4&7-@*HQV• ZVVN%@fPӑ])ELq)S 3VzV;t_Œ.$ 5~TI٘l%&އ._{2)Ȫ+=e.y_c{dr2o>k% 8j5:9n۰z3/ؼ٫g/sښ,^5֞+:x݆1 IDATt> Y{t/ _{񢉺޺T)b|M]!NiPyob;OnD0N]0n~FP1LBgr "oݰL[<ٝ2z%1D/p9\^f* rd3fBu3V3h*M<^DuшnzLX@^P-5SU g#.yC{h1$Rhl2k z9P6P6,4fPwYI[ Jbr8%̜AΝ2Y -Q{ wH,&/:f%)%P7Ծn.>a?aQ oou?o@B 5rfjDD励&2~-*NzqUn;3퇺4ε:ViK}/i}{Ã&x‘81r> 5#-qծN%"GFfZrlwq_%$ɛ?sHo=٪UV4 .-+EI_Ϩ [X*i)IjB[z"+.kJ%U)gqZ n3wgW<[sA\q捿Wvy]\@w:ݭrӵޝ[o3y.xv|8u ­w%|h/4oZYڝKEgO㣻+FG|} %tv6C>}Bo BN3Vܹ~zBB GwZ։ (Ȫ;_ θ /.צ-tė{\oVE&gd'由ĻwV}rO׽Ep%jcaP{myDư[$2F:m´!2}<<'‘uGҌV8㟤k$%/^]Ԑ{i}wͷP$7)qkʌ0e B>ձAp ܍b9X|O-}?/'F8dJL&dudHPQY]_acj:⼟$r8,cUF$" ( hKUw.Oϯ콕,8֠&g:K JMO])qź984֪N7 .9H pZ>p=䱶BC)ӗ7ttnNO_hU|yeυ[j(k:y6E\L&:ʊƽ-t)%VpSc]EYY (O5'&y=3c=/b6{R @{yewL"i  \ƐXI{aDoi;6O:e@eR ATIQgAvOoPvRm;hʻPA ]s!^dDUbe1'a1⪨s 6řSrsܾM LeϷ<\fh.(X N_Pn'IeiJc"yIَkpmIsvbV 91> )zS ecWCD$b1'KN>]sx9K BA jpmVI6406nJDE=DSI LI}P. ~SzvMֈ%y\xWVD]D'6s]duQYix9{hۗF6֥_ n@b ιfŽڌE6 #f յDW+\ 8 iiff.#u_LGV@w&80ᷝgBwb `:cЀLFo^hm2Z]>&NyB}mEn8 ZnSILNn/TRRmk- drM&19gxnݺ FW!4A /@"A /Px}/Z$i= 0"<:MSAɋh2[?{O4=Rē3Ļ-xI f]JfH-297tF㒈vN[k!j'*Uk ډ9N0 8lϫ 297Iɩmu0$!,Y[^7A7]| 0sa g"JR ?z]"xJvnlF5w |PA - Y|y7Yr}6Xؕ dձ;NeEI /ͦ,d%륧6Ck7ҦmG&PRu$J*;uߎV`5C<ڸ'Om TUOC kFz jz9E[1ٓ2JJrT]& bp.!`B)HvO8IF@\Ut5u3mh# @DzbBD %N㜌1NܱE.rlk'sVU m6fл MN)dm۪zG?aU1d}esyq\F :5i^/ƜZhּU.nGs:~᠃vs?^񳯊A :$Y=}Y`94D-|NJ2Ppd8~; @cKN${{Q[3JJJ,u\ӿ4@ٕ*l2Z8bE3ָ/g{e}/Hh _np`Dx` s9Ptٝ] 1naZ×d"kwr%wr |,wB/3,C?dz8 iߤqb;`sBvx&hLoT3[dF;qr5?˃ ><|o]9=A|.D㟤%ZoWqݤ$wAWN-\1xγT!y61ۇJn[2i?@dtLj r<\/D}caF:Cc/E~̫(=ٽZ"nOlU{6ġ+@bՍ?@27@qRi]Ͻ ysӮ14ee=BqnuyMZ)*,?VeEib:bJfs3o.>ϓ8Q O;mޅ/,L|\O2#%#oI$ w@/motr= ^F⑉GpvOL;l4p^>#_DYy{?`QFfș!gѲJ1 AHhQ<|Ժ!KfH]PË_㭈׻>}c028 A ~ n }%])iCV0Гdeq0'M^H͏igX+֏tD W_Od&ߝͦLČ \ʍ D}Q6Ƭ97:cy}VlBo`7!MC!-9YZ]@ϰSm>uQ6gE^DuшnzLX@ /|E%r"X _^ e߲y@gmuM>#'S! @  ad_bN xY5/YL-u2޴ ^nYc९۱pŢH{BXhO4amÄ] dА:N{,!ُNmztJ9PutM h2aŎ^##}|/㷙r"0"<~l(3FFU#&c6RX`Dx`?k%*~4"o?W65a^ihm`ZL6LtƱӺc{INdr";esS`spR@qgcMNi8Lj ;It $:/WN{tJGm>5Hv@gOL6!J p$m2  .x'j@I ;,E 1h{ ũw/etܙ+tsiZnf(&Yu̎Sn3uR(II=iQdGQX)yEYY%甬Lŀs[&~*qOQ/422tedt1T+**ERBXyJåŽ;J:wTa'7$i[]&5B)닗ӛ?3&=u';,e ^Kߝ&])@6<n gLi.mun`w6a"L]5y*8)[9f-)N=4f?GDj=$'Bk|% <Ǡ\tAmA41q<ÃbM+->H* wƤMkЄ U'$.IJ~8z˭T@q֣}Rs3U(Yq~H@S߇;W:v%qg/>^UySn_؅*8vAR!نyPoϬW/9jW(qx er}FT @ ~fYyG'6{0 ǝqz=KE~yn G=LA[:fɆ=~6s;Fiҟc6p}QRZچ !{[[Tzs3 +@ ~Њ5Dii.Z&DI#u@&4xnHS!>)GDaScm=]VLiMRrj[+h2= "6yV r? zM }@4_drHr=,<0"d[_i1ݿ{Fz:iL?6ڨ׆@ǭ+֕܅~PE~n{GyǕ d>jlW]P¬; (lʊ9:`G=O{#?D-[rd߷pCPtCўq}AOQ"и?hzApcN/>ӷqޡU)v+XDɊz ̷qJH*ȘLZ{I`bbf xK4)-YlMʒro8W=[@1{8S 89yl +X0.ϯ] +5@Yi)]olمhWU;wŒZT(K}y͸R\Lҿ#.1hgyl*Q Ze%2p^^ۼ7WtbV} ǕQQA{Sk9T;o R:/[q!ރ[˸m^Y񷪆l4M-#ɳtpjrL_.T&'ߩ.ez~LU_/F>`=ʼWN=-9fIW cMXFÁ8>VY럕3٨B>lV ~?9Q5FI(( [>!o:'DT^5ŗ8@q/4fX #_nY3vUYy"kٶO;ZݻI+Uk 9'=qGt!]+t<7mtbV!bڻ6 @Lo>TF(@!K4Urr>$l*}̩@`lz)?F6YgA~Yli-HR FN`RWIb]&9u.?_APFL|\Si n8 gw6n%?-;6VL{Zdh1\R r&e s9lǧ _H0d*"ƒYk|}Nh!KU`$Ivˆ|zvޛ= ڣ:u Ih8xa{Ь]a0E=H!((y¼ő3Ț6d=ZLb@plA#b[ 2'>2BS"& @V00Sf$0 ͱ+WLط?8ݨwZ\IO6d!phhĻ,wwKeC14A3g4޸:υWm^Gw!6dfy1*.c{,'7^[HHxY5/YL-u2am r޿PCV~|79vQ )tOxBtH*ZL\YGPU[izlw.ocK*i5\/GJKBI6*"ƍ& wq2Ιk?Ƙ=>-z(c؋x:g{hC4 {ۆzJ^S-vI`Iiƙh%_#{"Z8=˸N^[ˮA7vwX5-658tsd[N3]jJ h'ivSf؀`ʌuwF6 @IH<}Ldr-XC .R~ ZdrM##3[OW[FFA4 `ErEQQqk@&4@CVD} #Sq ;iRVml}F~ h2cxѱ~ҭv[niS.s']6 D/V!V$i뙀>^G V`rv?D01G^{- p=$n{On^r3]p13Zv)<<0o@Bk}w#<\gˑ@L|݃>?qoXLBk=#z_?TMw Vpo,ָ>ԮkP=)e/3*z8$<0Q<ڤקkS&Z G[i~eyC;<AOΒ3THv'bjPzc_#3~6qY_"ݮ~7٘-滦M7L\qY8ɞ&d\Vt]lf;əyiNdР9:|@\fη'={8QtEaoqVfO4}*If(='g}K}]ȢE{J 7b>֟I wA9IO}LkCD1׆@ ~Ԍ5!VJφpheK>|g/ɠdŧz>N{黰]@IVN9 Pl1^ʐ~#-{sxE1S\K02:;qfqe9cX fgzVH{"r1:drMk햖X$ͷHyNcմFvxbNRtɌ݌ Y|2FRٲw]k2KIHZ詏=DRNDi |DKlM;Ѓ_&PBIeטoF: |JmkEMWcE6颭y9зd ()N@&Unt%1W;[1RBt|9& +t2##U40FVlf`7ȺS5琉SlOop@}TK΃b/ f#QKq@&4t>g8:Y,wq_t*(YNK'.='櫹;6,uR~Nv'1Kw߫<60S#Tv˸L >CSSE g# *23 糘M</|y)_{BY$цd3aLT>r??}'}F o֏hS+|jJCzD[dE| k1P15oҋ_IuOI.)yռ}L4i/Ί~sg_~W_}\E:C򋋽Gۄ-:c16[iвά?n06mɂ3'>\j4NgySA;{j΀^Ap1ڒz-zc/J( yYO~44T2U4F?Z>& 3M؇R] ?f|:L^k!ٹ,zǞZt98İ6őEtֽn-ρa:yh˸ܼBz$a:e3o @UF,t'(Nq(tKK-DBŠ>/#Sb3?c6mgk$~z h g9TaGsz~o |ˡ"r@PmC4U(yK%>7gzMdVDAw?ڵbD@ٓSg‹HӞ1ދǛ9jՕ'-9~3 G|SMn#O<.}9 fToHd$ 1 F̞D >L+( SBK6ESҀ,,-,diRi;]]C(j.ieVW#:u$_5nnvv66F<:g^m#?f}V 7c`!~I^)jo^_=ʼnVj/)GI"/7˄)G` L&[5V/ (K~9&$OWQ̨jqkjYqhyy= UNdiֻw!wΝ\}dm>ZF@ ɣ/4:Ψq]KI5U2!q(rZR/MnK[{M{\ƿ|#((T4Th4V-4+gN NlD8r 8QHQ`ҋ,2VJ(k[[2/L. )C.n`oQ` =[ #"N40E[9.lKnJ}6lw@X:9oz@pnn7ݲS+&AQ~!BQ@iosmt[ (^EZzIyQz^U %UZSg-,K.cLc'gL\}V,2,h^-cKjP־,j SNd`2wuקKvfF_҉| I Br!a-pH߸ϬUf׮ .Dxbٰy&{NXdim=eT%d_r&t,e%{у<~LJҢMWiejjbf$z&zps+7q'7a%iWG7\Qs 9 婺|t'QwvCێIQLEHwFv^4GoU"e=ej݅lO?r>P@QRv9+vz^0èwsO N-,,OI"JTTUoEdumyV_ (Y/*|澅y[e:psRS| @t$#k,WDŽ>|q1*6?S/+@_41PC ?tާwĕ[&MH}p KևU婎r'~(3߬V[ޱ)$, }O~9ܴWytٱFާc_ 3tmqv[J#O3h>YnKٍp6T' KFkLUBH#tE/^h`TI45T7x{$å54W-yPն%?~z\.BhClޏ?~]Mf5t Hf}zvy"B M!aA116F8r8:2]z5CrPkߩzc !aAu@a{=0=֘N}&ӿ^5rsy{|!$o2d+fr"#9Dmyx~@&]6>Ѣ劣+*q\2+x/# _bQ2> i"$5S.gW5:(wZk]kw| V &\6u_)o> L ~2w\U9 @c.<(M38T"U|iJ xM+ӹKȜrRb@E!Ȏ͡;yz.z9VV4a> Ԁ,{vϡ1C/r7V.+Ƒ!BiZg+U;wups-ڑ}>yavfw_X_aك9'\+x9@e3;6Ox'-c +e#di<J(Y)=VwoUk7iڤ>7ݣ'o`P24y^Z402&ѫ*F'_?tegr!MV[0CMہ=w//OHwݷޥo\Т߼{ų{^[y ONJ4tG1tn.KO?tQ$B` -A#~;=]y֮mr3UfV6&dqbl&?E`/>nٮR.!O EmUO\#""?* ~>o4܋wP?{9T'iYX8{p0Zӣ/VUʵf+sVvO 'IP:o\Hm ]:ulħ6(Z0o}׬W&x9<d$%|Chv]6Jɵc39J[LP$HcAIG]܃ @ͣOi,UU\\ِr֖8 / *HmaId}HLtTѰEOt-?fX 7;:zV._V$.ME堪"~ej$4M؛k&0lm4 c3JWGdinrJZRZΧr`"C3Vw,M`@Q|vJd%_mB.e㾵Z,9f2[C˾ΛZ޸S%E)w5T,imBg#}>V9__.KuT UUs |VpoZq8'A %6neս105\gceB^ci5W/ȡ{uҢSAo"?P  H֛Ge-ǬiSF0$߬^Sg9s ns;؅YW΄tG \u<~V.+7B_j^=媛ٺaퟯ/Kd۵Quٟ|u}ӶsPyV7Ϡ9OI.;دOܱJA'i^AԥF_޾;RUNbv| ,xrCs[Un΋|} IDATAt0]W.+?ǯe(࿽p3j΀g[\|?$- t[Ź1wwLP@Qd^:{ O{yEQ7+tf@EABdy%&}4BrG4x1C 0 c;yvyK80&]g@O0EQLݾkc^hܬtɌ#L~Ĩ>`A\j#Fni| +Ը56]#.arBSMJjz7[O:$3Jk<”d&<Ё Q ?T"-0 $Դ6ta]B)B )!`A! rB)B )!`A! rB)̣tоeeb⢣cR3BӴ]}S7]ZE JeLo={KΥ+DudB r~s~cUؙᏂ|O]}i!kmyx~@h[V,Ia;l+ߑ7aqk B%s ~]QELF U O62?tjyHjvի+N^?\gP!'f";ucX`?yVl%)"#3˕[Y=aռk4.9֢詫etYcM~YTRXL=|z?S0>vҽ^ 0m}c=nɆ5 epq),z''L&p8>Bߙ:y}8iUojjeqvJ, '>u,"e9}3`Wr˦{j}w!.6EyK?r%&0` ߸Mo[OZ> Ԁ,{vϡ1tX㷿݁!l5o59*ی]7:kΆ91"8{⠈Q ر|;9 lV{^\ը.O}p̣Ӡu0ѭ _Xc;yz.z9N$!|kaܻq>ہ7(Bx28߼{mqEӜUifGpέ;ḅa]4zڷ>ԺESf,oèV4iv;c u=e6|$ptc;7"8'~{r-WrńEW9TPz@c(?U^~vRTXn>fVʼnVjDZE(y'XwY}C짋vC^NTV W}*A֋LOlnnb.`Jĉ+9³ AF:Umi*v_ߠKkrӋvO&2B˺KU ? hpsatGU"NgRmYlR4zLΠAcǖ~_FVgeHbG B߯\X#bÆ1lH gE^܌=ʴ*?;:zW^gj%e=dO]i?S&:W@n~YܺG:"RI`[[2/L. )&ȊrPTTki%nzM9ݗ=Oh4Vѭr @`CF06/}j% q2mG5-u#諸xY2[ϡeXYXpljEPg19Xu<"ƅ;Ny!}6l^qN'Q%VlX9:mue ~ zr{oF7ezj'MV_C?wwibCY/n(&,zvpE.YP~}\eW+:K|xzW>din\ë_yX|Ov۹ԝu¬+gB( B{7iB)B )!`A! rB)B )!`A! rB)B )!`A! rB)#Iwоeeb'toӹt^CǂBr:ZYL՜$6N]ul0`ʓC?N(%eذac0߸F[BN??|Z&XT,zz]B5-uI9uk e9}^Fx8^Ωs, '>u,"Al_ldAݳ{݈)U9{/(l`BN^F> 0ԲZy{=ds@Y\]AyE _Xc;y!~/Kt-/Nzzf㶻=31U1j!l5o{T+'c8ǩ_[ZvWo;L-?N,$ aQޢwups-ڑ}>yav.{0GvRVw2wxuRqk~};oi $lW].UuxO]թE}Us5zPDZi1aw ڸGay\Q9X7#S33< *b.Ŧf$ExwrU@|uQeON /"r3j֭W^y'5jϲ;?UXtZ+3N)WQжdO|; Iޮ+;fWf{jdjZ\cXVZ:wDA֔X)JjDeUʴ1Q16_hvZ :k;]>~veO%WgU?e}̬zD'k[jJ˯Pc;O_,!O"YZPdJp^!$wI+Z?fUZJ 啂*a-+cj iZd(fWi$KBߓ>@49eui6>CߝsDV(wYwiRBu1 :V[]qUT8.u (OY1Q~zw`ӭGصD m*ůGU'D WۓFX]-euB7!2QF> LGtomɈ2tOA^CF06 uɲ䤔B;Kz^ *"aXMEQ9jf5 k=!N"1nvt&2Wej%I\]]ʗ]%P_{D=iSKCV=GL-yg;t9aђIL+12MJ.N3sm4U kô[6qYү]/L-',9̀~ftV+6]7exa*b4rc{2}(`~Ϙc/s54yE 1#\jbwB; kdѳk.rYeE8Ft)dsw.v;4[bdv۹ԝu¬+gBdJS"w,RWlg o.0-qtuehOoӞEm 伿w_2O4+E83hS /Ne K'iuoF7ezj'MVaAFuo7< ),*x1/^ԾОVW'@b;yvyK]0GFدmgksv"e>ˉio2.!P'sʉmCv"lEnY]BHA0 RL9!SB!BHA0 RL9!SB!BHA0 RL9!SB!BHA0 RL9!SB!BHA0 RL9!SB!BHA0 RL9!SB!BHA0 RL9!SB!BHA0 RL9!SB!BHA0 RL9!SB!BHA0 RL9!SB!BHA0 RL9!SB!BHA0 RL9!Ov&Ɔ _) j0  @kc2,lcehblTfS &6t Hfl<KSUD\jn^B@Q۽DjXQST)zkgg|i{g>]Q!LQ"}sP==snd@Â_nQUeŕƽf5p>x#2{q˗[I)lHI8icv7\dvdϣlP%~">]@hu~=sަs|aeKkz<n5mێCՊ~/ @.ױ=hj?>0pQ~VC,Uв׋RgNZ2nDǃ7owPVoY& .um] #8֍1~Qְ.uZ׋Yy]'^ED'}GI_->;7))51)51)-5B󔱖{!).&7݄fD^N-:T}[ahvqCkN ~~3n=z525-.sxST jCg]٣ؕs˞:^D/'gOK}⫘؇}oBu]O Qak`{*:mZw6o)ܖR;p!oDQ\Tg cAP]D[~}Y*#@~*2NzqVwW} F|rEKQ@ (%y],AZ֋P1r Voe̋OR9Ì~"NwJ(H3w:T[7[5ku>P(|i zyU ][풏l4dG]zX1tMoIV͠؛kKD0lm4 #3J%R" F\1Eᮽ+|rqT6t*ZRO0^[S1R,/+Pg19Xu<"ƅCqU^_m4k3[~ Zl~Zq^TEߎPn;z oJ|R(*CEvD:iRYp2цRaA߆s8Ҽcd۵Quٟ|u}Ӷs5]9]OsY /|Ơ_V /oI%֋֋׹~G#[82r i}O،_+T.a"j @PT)*%ۗl>sSm+իgU1IT9>UoˣNPۺ$elU:XaF ^r;OYW\Pm׿97'3@uxlĪ%]8U"BͅbGV[>:HZ/B o2Y+. SYN#Lj.rALaE1/;:ej.m5#bLL\IL9H0 ٤zQQ+Րv/pPs)Mx$73l@P]H?@JjzF'L9Hfo#5m&x`L=B5crB)B )!`A! c ɬ[W;a'iT0  F ɔQƃ!L9H6|Ё u5x|REç"{95#@I"kNQ=Q}PB8Cd:>L9rEo=䵳3 z%jj9>,u7FBs[H{r^ӳL;8n9zaPH 3N,d{A=6 oD/iN= 6Z]C=ТIRx_W|OyҾU S#?y~k\ܤĤĤԼ h~64%=%*x>ګ4t͜轜Z4t c#F<| eI2>rCjfSM|gӾ ZnH7w8Q )#8gFuoِͻW&w]4y]v^YDsƎ?(kz:tK.o1m#;q{ݬ?[?{3i[We>;xd;A!mGE\(j[4^B(99wjǞí5i@iK ޲;06Ml5 5Eum¨WCc:5O(Z˾ U<~3253#ߜΓz]Y#O<.jއw{ѫiq;ObUyP|I ƳN޺ K}Rx\@ږlߣax$i۵bH$/;40&J@ۍFQLվji%F,pߞ۶z 5bMM[Y'diZ5Mh6(HAVQsOj`}y_<6&* UHkAYDe BR7z@c(?UEJD?fU*(/+UMUZ-A\ >|q1*6?S/+@YҪ?H^czv?Hg|btʡ fliFĐՇo[t?_˖vp0/|O2zAJ65CHBKAQ{y_5 yԗ7 +)j9!w92j5ڞzڒj!r1Ȍ˦ѠyŠY MMY/e6#xSQV ܔtT}}UQf> LGtѮtOARnvt&2Wej%%P!9jat=Ύv]ԫ&+AUSE|*R2FH>QU̧20LkV$Dc/8 i^IՇojи):LUI/'yg;t9aђIL3sm4U՗ {~e_s-Ro\8~EH Fq:?.]ыU"/K,' 3W!ːq1P68wVVf]s[_+T.r݌k1qfc;X† ?L?wwibCY/n(&دOܱJ(lf@Z{6긹.S8ov.@R3+kyi-<(jjے{?ߝjY,nAs8]xwt^#@rڝ,+Jxy}هi< sӞzUztMQNCYx*殬*PA4x1C f`I;,} e|#VMɅ&mߵ_qx1WLlmnNdww!Tw|~U o\gT0 ԜP:s$dp䆊!P`n֮R7_fBHDA$B A! rB)B )!`A! rB)B )!`A! rB)B )!`A! AHݺڙ6t'v$vf $OClVC" 35MF0 y216FD^G&ۙl&#TgrQ @j۬fT`SMj0 _[ 767n2Bu)Ճ&ymj0 9hKUF5MFn0z-Gn4Rnu&E(Ԑ0 "؎Ð.-J> rQdq5x #Mv=pR8 -bxTg*@';$7t[ e%>Nֱ  ++:mP+}e`_f8"ߛ9tݡ Y__{n %91*pw>Q?QѴ{[s;_O|d;⡆)i*N!f[Tp 3{?8ɦuazjrFz_OԺ[[\̒ T.5|FW[BsjU:Ӵ;"UCV \5g[B$_ RLN% =۹̄x(Ы>2GΚgV)eJ?F! &tL 4\9:k?LG=1Ѕ")&r0U,"ΐs hѴG,=]0ق@ 'HqSϬ u+- fksVOƀOT(c=f?eq:)%*^~'eLO#4mҼurbRǹ(U H믶v T_<_ݮZf팀 YU"1[Z&JQp3_틸~)}Go$wTP$% f7!Cx:]MSҼ#5ևBi>&dQmz9 `Я:X~š^O&6|'FaCtKjWﻂX=;wѡ3)7:%틟w30]nnfbرkiwO3P5ʆ& -Yd-@/<]2omh<.yf_Ӷz- ̭GN<ʐ^UK6$?m_c^?޾seB7w[2`v'-v^XC&[cEU$Ki#' a}{y!S_'ۻ9o;87NiB)Z(ӧt0] , r_0u5* "CKH fI.*"M,#nAy ~Gފ)XFõ7,sbRa5$wDA:tw.)o@䏢;^$2n2Bug9Hqm 7ꃴmcfMLNK%湖}-saAr&}ɍ.HTFVN'paAIS&z_n2Bu)]m%kP]`A 6_ۤf STzn2Bu)SJjz7[O:دkJjzp3L9HބG~]:KIMlfxBHAp$iB )!`A! rB) HG %!IENDB`hydrogen-0.9.6-beta3/data/doc/img/PreferencesGeneral.png000066400000000000000000000133121211146647700230510ustar00rootroot00000000000000PNG  IHDRFPLTE   +:!)) 3 R& J 5 4?(v@I %2: #f(:V8&)}-b!1:c/\3p0q":P3J2(;J88!;y$ (A[08~2@P->u% "C]?%HVC+#I)KDMQ;Rm42O+Q)X6%V#b+X2VO-YߡD.^8^/j&`.i8{5zY?6^fn>s[pzrE8qCnh+=tAHp~f^zJAUzq-dz9DymyVyf&H}`q}R5\V|cOTLK懲\wIZbx_eZ…MjeYP빐EpŃRΛtτvЙDǚeל6ϗhŜ̡UlbĄ̇qǞծLѬhةuŭտPӑԼƖ񼻲ڷ޾pYήĻʥժ׷ŝȵƑñΨ׃ј۱ئߧ*[ pHYs 7˭tIME)e ]IDATx|UahBd_@@lKdL b(2@c*}(t4W c8o:t`U(ruW$o_IHwy^B8 !2( nt1qr3D3Nq^(6'K z O-51 EtOE-[bYQQIT+ - a8 xx}<SX 6??/F786>]Ux}U{c" '?mT٭sls /j ˇz;'17}v`9wy=l0hXY. Y1ps: GMH8-  tKĒLyo0}Ir͈GcUۧ[ޠ|c0aPy6: ;gq9w1}a+hχA>SPlpZ>'\[8`;8yS/mߦX|oR?9<ȏAf;Y8yP5^20h 6{W5sj~\=NԾoSw\SoJfݜcC޵׮[-IO[_z^y3jznuO:7At)Vi͸Sɩk֦g^]5P3&>^.'}mZWlӴ6s;~ Psd,aa?\oӱjRuI5u,&Xy։1aΧ>b0¾w599W4wV 105Z>xg%d,W t)WwY)ISeuc/Nnk} 6uVfرh^`Dy}8,c~m`|`< $!Z`VBtZ'jM0]",;So 6_ڞ# KW ZmM.ߵGiU_:E(ަ\#/[ H[sJR%05¼U-t;v?ʑvsa:ugߦ~Qwc~nKSg]A* GFiЋe#,k2w9%{扲'CJ,jeEf L%<k%{ euLNiS5ۼOc6]G{ rf ?-%ޚjp\&z ڵ]ҁIaP]R]>Eu6Ў&׽6o̞.=r6_)T k%ۯ6WOвX{5^pݛh<WwFX(s^}ʒȳmo/&طY׽1{~ΗoZ q<^]Ĺ}9WAT]w/ 0  IFdPkA4mIּ6_'}ꟷ" vޢ; >-G=h}m\?;ouLFdcQWMC6m} GFȋ!+㯟̽gCN'*61|_9_!uq>ȯ(Nȱ `@0  (l HZAH*?\`0 `0 `0 `0 `@0  `@0  `@0  `@0  `@0  `@0  `@0  `@0  `@0   `0 `0 `0 `0`@0  `@0  `@0  `@0  `@0  `@0  `@0  `@0  `@0  sTXqC hbJ{rap"A 4dD! IDATxy\L45RI$Kn/][l!.^%7\rDHk %7]=-29?23dT|?9sN91Y!WFDn?@!њ!rB5:{nh,M35w+BV+ͽj3tBͨV¢jדjbSB5k݄V(-=U6 p`R_VB5SPk$A6bd[*q$eYC'4b2k [m=[25(h?ܭh(>mFa$v/nhno<5|wӅL^Cer)ݡ0cZƥBAiwmC(%ВwE5I>=GFeTon}7ł %ETV`ZƤ.H"RUQ-`[ ů7ݠ^ Mrx5KR( ĤI[aht2g٬71!;ݛ&)STÁ%2.*[J]V{,X7+.\Նl>J@MCɹ{iU8IIoG]HPе[jO=uP?d8~I1]'{z/EOMW ȂJ(r(JoJ ZUO%^TגW.|6dWHC?ݺʃͮ\8H3BJT=Z'v:.Kxւp5: R99k :4z:=I@S6CǞ1LG/q`ӧ9ۃ @xʈ-6ul޸ӟC Ŕ7rp˘tf17_sK-krt]y`i2iZN-]HwN3j?yZXdЮ BtY{gݽ%PNQ@SkG7J8MOO澼wcV/t53k҇^m@FFB,4Go8<6q \sG,Oo}Ҁ_tc[kϿ4;Lwfg.݌grZny!x^W˷Yz̢<=^R;;SS@(wn\19WNޮV$:Q֤>d`?ö̊ϝ9'j: 0GX<&'DS< |i:lX綬%c_3rKH(mw)%Ki?=㟷=*Ekkdዓ{ϼ,6i+o_ZPS2WNx_yJ~ݴqC ޿*]Y-%45|~&LUc=[sB/|~*_+;l:^t1.|yˢ^ c{].ӛz抉/֜M(6)`'݉?D3)\#YCmv-MzS!+j*ӥl+%1*oC^xoC{ Ҧjx+N+Iy91~ ,W`Z;+N6;+%.t1b\,YXyާms^4P~ Erf1{ 7=12E.2)V97]mvnNk}2MYK}'>%]Ոnƥ'>L&Y$,UDhg= AG^W!B'v,xM =y)È"3E">|de~Ly>)&9Uz`F+8UJMbъ: 4wsX̪}0 Ț I^ 45ۭ:6w}\zaB+UOClm'^S@U$?([=ƲӨ3Js5\qEtub\;Tʹ2o?}|O&:8aV=loֵSN=5a_;\w }sF#Sˁ̨A2{ʥ34Mt;t1F5X!hOiA)]y2J F%X<5"l~F5Z[+\ v8tb6H rA%$;#bԁI %GEJ]G,=C/rmhǩl$bŕqZ 0&o'Z L7){vh㇗dʀA#zK2-ay9fr^I-jFi[NIzA*|x/ueM='E?$:GQo&|~W~jLLd6? rց&Oy޷6m[2@Kf⥓*§IG3 9|bLS U19XDU|@uh̹8aS|s0J?MQ.[. t9|5?\#Yy2/#p;wXǟ(lMH_T܃JJM?7ݷ=uY6偐8}AEboV=< ӇjW/ @g>Y4uy-Cf=JtZ>̝6ԪKGmff; RKI ]Ǎ QPkaCw´|Js? ԕUgz-^8nv&]GMwGk]#DU͖l I`?}ݼhңd٫%AHЉ ) (@UdF!7ɝO֙~fw&OLa@EKU?UFK˩$ ljO?4Co1nαY9-8%T%§Gh1NuZpߢ!cN!$*R%OO:̞9k-H ;JDDUl01o&؏m˱ֵgO>h|GV߱7r:9)ٹv5EQ0j@s皻!KI},CZi3]QY`O?+$[^/Zn`[w'"j:BM“-ՀBO>)nq;I+k5MT&ٹnҬcyu5[^ -ΤiKD}oȏӵU+.ן>ֲyߊ/_zbԈA~}GG9gc im>aTC'9# ~Yė֜xܭ@I^xDs75e?eխeί^:WVy 8B4L;*(L9˹BM") :_ƔB`A!D0 j"rB5L9!BMSB&)!PB`A!D0 j"rB5L9!BMSB&)!PBH Ν;Y/6]||bcSNxOB&"ߛ˶8-k PcHr,͞%T>`(oM9WwdQZdAߨ\4ѵ{dBe:PAL.Rފ/ M۴h/V呍n;BoJRA,r1lH?N,Z0SEg礦SX;|P^U~˄~^qE$Mú󆛴%8Y1بGgb3kTxd׿9\ZçLꭧTwE\O^yjnJ@ćwVB)e[ڎ┇ {r _P|U0;Al%k7%ԫ'0+4ns_[(w<@15! L㊋hzۺvN_m@;KBHrjϢulF%T=/;A *Nťg}Hzm:Cֱ/dq"ξ7`TT"xgt`$AN]Q<;Wpܔ!^^2RV[~֓ Yɭ r9ʡ(:`TW2|=@<G^sUG-[=o'5:L]+5eh(j@ŤRAu<֫/MVYXf':xO ,-U?[O۰b@3Д?T'5[|#޹,LLOEZ h~ɕ[)OC$!6zMfW&WdƥpF5w!$]>Po@WGsz|%YIؐCCf2a]0\ rFU% .GLZ0 Ț BWx_r>.BwEʓάy.t{g4[T5PYbaĉh<V4|^H Z @!jAK: /x!+WK: sfhW`4Zvps@\{K+wlkm"ANR0CHKNܻ1$EW35RW7$92}OwbP|eE堨|FWӪ>W'[Ts@R!x4Wzୂ^w#yC!kԹ?݋\qoyf؋YS5xf۴mp --C N6b?F?bݸJO׬󶹦.'T1/pM_ˠ߬ƙK"#mx,JHr@0;Xd"菂32еhkLg%gg}k2PkHY7'&l ODx~nD4bE5XhW?73I 拉m6`њ@I&BHr:CO^|꼕NRxe'vll!'I YwnQwYoUd=uׅ /~M{Za}q8Qm;EGo2WAOO_۳5u/vx|J3DC o<ɺKgZ 9E9Oo ^ x{Nmk{(~w\>T`?^xDaQ&؏}4}^1 \ `peΪK0F216233y)zG9oX7XF֡D([.&t~v©oB2&uʉOl-;#… 2Vڪ@(OظbK{y+[}!dK> !n9gdSF?s?VB`A!D0 j"rB5L9!BMSB&)!PB`A!D0 j"rB5L9!BMSB&"r:wdan&ۄwx[kN9=2 -dJo.;_ҩ~+A} N9fO (J0[fuSjǪYs7*%ont'/)ԈJIQ dQO( /'N]5?_)i_2 /C-Y{Ls!:4*"Æ Oӫߞ8uQ||vNjJ 9i+-\짞L(N~WDД;;[=oI[y0 |zt&0vJ剁G{0 | ?|ʤzJenq7[5릫dA|}o%R@0\u/NyxnˮP'W E˧z^^U z:t\PvxӼ__BzӸ"@S6gy{S:Eu8?'+վ{/n$m1ḱ5iB5*`7Eg]mM))،KzˡY{`y!c8Ӝ,ט>mR7[x69)sY5>TcЪ?];YAx= g[D/7wOLb IDATD#^~ة <~=g6#St*^ TTkoiV.MuMT3iXY&~( iiu5{p9&jFF$Gr_`NLOALU*zZՇVd Bbh[j1o Bc+$ 5/j)+{O;ya歰ʤ B֨s95~n: ؤv؋YS5xf۴mp --C N6b?F?bݸJO׬󶹦.'T1/pM_ˠ߬ƙK"#mx,JHr@0;Xd"菂32еhkLg%gg}k2PkHY7'&l ODx~nD4bEE4~@j^5&SPx#לiagB5\I?yA(VJ8IA9ZӲ%.g+,&dݻEe?U]+Kaf5iWwo}DyGJd^Gw ︲ _;s HOcӾpr_`?=}!nr߿Ի>,.s8R POٶBNQ?=YXƾ_T*WD?7Ҧ.*o6H<# 0~ 6o2 |]]JN;ėi ,!$+&Ff1O}/FI}6ᝍyeojryx!5QЈFܲ3"\Aπ!c ɌbLpg"!|޽H=B5Z~D!PBH意cA!$[" cA!$CE҇ B g(!З-0 j"rB5L9!BMSB&)!PB`A!D0 j"RsNf˼Mx׈Ǹ5]s w9]I5#>!)i\2y缆^>'+Bk7ع5LLF 5궞>!rdp˶.޵)mPе[jO=uP?Y5릫dA|}o%R+,V|=( "<>IgVμv`uv3dú`dOQ_nsǥV(pH< WLQ@)!SP^\Z ֺD;V~Ir?/ed=$lVW3wcR *HfjJ^2B! 4&P S8;050C&.9@[c:+%"omڶdK'1DJ΢j/UN&F!0suNkV侾xA9| 9!PB`A!D0 j"rB5L9!BMSB&)!PB`A!D0 j"rB5L9!BMSB&)!PЫgwC=7Kg>kV G#7јZ0U [fPkA5w S $$&ʘI$ľ SBUhZ ":/'Rw !'T+7SPu]<;\<{OZJ*݃/Xw:]sʩ3ǿ4U/<8Ύ>JMfW;_jZ~LF)l9av ;R==H|#~MvGW}qڨӵ&[.U_R) @tÍ3IE3)Չsh|p1#MUtޗ~^KTZN;/G /H9jdYE WhbKGՈF`B֮^ /Cqy[;y_~mnWv}UEV9!?yL>}7Bj9\!`9)ilH8&%<]S 'KhX7 /H?3nǔ(#*ՐT|29!u,5y)ϳ*_`Yׄ^> %j#:֣z^T=:bnml݁@07Ϙ4kob%vQ-6 Ur';G;l컜tGǞyk}~m:16eXc&M;>hn'SyѫLh.6ޮӧvps*" Ш+;+*xPawGGDt Rmz8[ѢfdžW!Y^jAʡ)@9]5f@污M{%TMQ\n$/h(v'<8"< ~߫2Z *Nťg}Hzm: *^⤇_ Xf2^u\蚶3l*n?q;>;+Q,9KCMK?t%]˛g>DO~凜;T~=8}.^nYݟ&({UDg䱲_Geq_tip!mϔ:RQDoі`U}/.-ez C2%}&*,=+u|mN?-ұ4dZίQ4C[mmX1aZe*D嵻iߖܔ:q1T0z@٢cZXɟ*҂ y]ź_E6}]QR6\Vٛ'!K:[ h U{.(/+EUEW&H,NN,V3S ~_訨w>(hR_ip&mϘ&s\L}ë*4t }1A!K پMQ MI Y_|Hq=Lŗq.'9k5t/4wsX̪nQ/ +z^qxP-}`F?zKl`#,By5֐Yd@dQ>s :0]&&BBWtfm=p^g=chZ*䍆=;, WHT+k@qNIqWE}{/GO_eYrz%jFV+kp*$yI0V ʤq_eшju!L]Ԃ VLP|q_gR-j]͉>&"J]*$+AQ)rE5[ nNbh[V]4W6ʨR,kmRyFR0C;~^˜=Ul߉و+|1̸IeP ~Cuv]m6^W >'y޵:mf?C]qMYn&.l|FQ+ Ua&̋iےZZ6/l౒(!8bI쬏|VjmUky}Bv[79 0111cVzf5Mu991%fLxZ'%D4[\N^2҈I MЗ`iC. F.k830}}W0|^Zm$/HFSNSĴ"!m3m?oKŔnq*k7hu~`'ɴL6dr.x5GguG z%gոH߁V>gMu"=W<#<+6]@q˖O˖ PΊr$Y6.~~\Dy~zBܞ{0YІW-kpYڽFeFE7o>#l~3~¢"13Ld|*TOנf"Ik7vPa8pP룵/ۤydcbllfj٧-k5>@QY+?:ke푵zբ],܉,7) ѢSNz A0s}w9E+Dj#|)3 ++ᦟc[p_$)'-=@OYhM]Jt=3vsBH4L6 :X+4.>E57iڳ8ܿ#P7jrBed#}B\oG9!$-L6G9!$7G9!$!L6_ rBHodSB5lBFrznhw}!`1S ֳ߰?kÄW $,liU7A/櫐:MaWh z).s5F\(~"%\Va?T&d`0F  ]P$CQ1R젣z*breN~Q>$%L6MG_4hƾy>2 w 9/k1b0s Vg礦 9TYӟtZSO]&'?+"AxSuU >÷J\m"+|W.zy^ ÜW,6P.+{,Jú󆛴%8Y1z:t\PvxӼ_vp962)z)yxݢ/lϱQ>1]'{z\Tne?.ۺpxvt<բ L ]/bOלr{eN2y aa N>džzܵdCˉ5[7Vʏ ٘BRXjU]l RcK%xd4 K:eb .Ա[6@S6CǞ1LG/q`ӧ9ۃ? *knt^+,MrxeK_ʪ;DSrpmI`+unGS?~fy &ka[\mbqՓ?Y.MfÈ[]Ƭͧ+Սb+*B `.ePZ% ^Dpa [91G]JhcN^txp]ww݆^/b/Il'r{{.>}٬m<6eGBZL6C)UdiڴWEqk!?NWln{U@k]A\vtzH+A/C7 2RxF~al>b r>$еB6Ǧ iSbyףWnБD5޾y\nY*ZmYO3Hce rYr^u.a4  :1NG]-H=4gE^<s }04}uO/+cUFcXze)AW`1~2~[ciԵ _h ZO۰b@3?TN9]oKjn MsȸT*czQlѱ M\᱒?U~&K *u랒l>/mvDI ~_訨w>(GSkDU[(5І䣵  KX%ܼ7邖KJAQU&aз]3A!K پMQ MI Y2pHa*Ls9\O~dú`Vm6p냹vW IDATj]^X=dm:D?zKl`6Ytfm=p^g=ٵlZxB&a A57F_] y7 (/4nEZk~*z+gCGp]Ȫ}ER|yy|BHw9*~F#z VW3wcR *HfjZ9EI hB~Iu7'> (VVJ]*$+AQ)@F\Qn$92}Owb֩Vt5&a;(r_o ^RW{?]f357ޔf &_lO6Z ،]f'39d^mvMۖ 02xd#E^fL*gg}k2PkXsL= m4LOKfľHG64rĖM3aSig%D4[L fXKCCr1֩kJ0QE̢qCL6-L9noA%:ߐI;j笩.P]窓g?gR(pióYCN$+ݣۆw\مϯ9OOO_۳5u/%ڰs%x-R.+֑gɺwx'ɍ.$V@YɃ;]p>qb_wB-f~o2WAU% 4FDWʆQ׋E"↾ lZv7 (,*3Mv[Ҹ\N: :m)6~#k !-dLLc<_=Ec(:keGSg=[BH-WN9o)x[OP=x@Kע.GX.$ng}p' :夥g)+K #-=k7!"afHrOdSwHKG"]|-iڳ8ܿ#&oO>B`V+B.70S ߰s ^%|T݌!P$u䛦yD=I=0 PK֢^P{D|xB|-:Dųų7#SNת0pqfk.jsGGjF2aڮڼʚkR,Ȃ'?ኛ.B\rg~G^]v^{ y:Bݗصo8Rw*O/z]k9z78jB29ʡ標yOiƋӇ7l?y MLzftγZG9f%T{#W .݉G~Q>*AHPnF?}UT̮7BI)ޡۧdU^ȴ̴7Ox߾NLE1n0sE4kdOT5dɺ9cOv}7W"@N{̑Wג`9z޻ͮ=YaN>a.UYݾGC[dtqSkb88p!wi6CF\xlxx<\iUh]G6*NZynӶ ~!Zr@qv .+lWMݥ67՛aλT5SC>' u,5y)ϳ`)tVg.nIpUjq&LZ;ɝU(`P7o1iZ.K,W7]Wו7Ǫl#g:yGZ,s߹ߥcg/x;}<1yѳO:nĄGYvW Q5_Eș̜q`%Wy?Th*}fqu N6 xFpιf?? F@k?|OwVN\|=d!cm}®H!Kj,}n[]l2]OT[Ps”#;|$"ݏ5e)@9]_&KЦCt(.BHrUz$1hlEq&Asj"꥛щ9)C+d=bVul{<>V+_<A͌w4 }}/ޡf=?ԅ|I3б&"ϼ=LI{tz?M0Qj]ۉI_eݭl[`wӭZ\Pfu]8eӈQTB !Pv0FQ>FW_D|0eQHN !jv)+Ծ5U.Ɍ=skY4ۅHiԉ5qer+H4Ceٖ%鑙"ʓB+7o %X҅NueBn[whYB܆w~sN'ν=ʿst*~XR~*.SԤ(}n/Ywu~jT$+%G`Yə yCz<#!ꆫJ^q)96"BG,},Up`[!64) [_wË& 0(cڲ~Y/0q]hWɓaΔ]jޛ\];$٫Ⱥez;9zjg~6_{k30Ɛw~ѽt뭦ϙh!S{c4 Wnw>QBgnsKK 2;l!UywM2&im8m!Is.?|oE>dE6ck\J֦+r?ǙfHrH sq ͂H\/F{~4QZTn;ok3H3#vVPxǎVj\u02I&{\wV}Cӽz;@\qރܼʁ~Zէ0 =O*4OY wڏ2c!sXO'^?Yy@}wTW'3ƙ2_פT]QQf[w'SOHJNO\CN=ߗ@3 r#"8 r#"8 r#"8 r#"8 r#"8m =^ yYAGMh#0WL؝ިknp[4eU#kHXhW4Ԍ,liiLN] ں~n;$]WJh5=u:if(Cc>Zd-I 0ubki~uOuR2p'}qW <(y9g n$,4$ƴkAҢ__ = < Z՘B(v><vo~bYi_|%$,sްYΆٵ.*ۯl]'vHw34nɟV,G`+WU7 v|-R=\e .~{h⢟\ =g UpG뷝rJK9ߐА+GZ:FHԬvA{rڏ_HXhȩ_fn)hiN5Uhm emT e\k衹* > o,5Z*ȀI |Wk )bq>~o9Ö)l3u )K*&|طE] ߎ&g[3mS1%аE>?{~O~_6s>_nkLMͩsxIWI֟=jX/j,{魸uaSφ4 EgFMxr1/2;&{se[BЮv""9m{b]ޙN$"hae HNOo{3;Oe]kP΅]>z8=_uj6"?4n-4P|uۮ2Z!+ճ-{~=]ھ/EN|mL$c@R :;z:~RZ INY1/Df>ㅓ{?WӲEY(r#XujA=S9I] BQeg+xfmLB92@4ф2kךN/.7^lp [wtGWXvGB/)()e?MV(.%&&BF#,4|кBI5Y*ftE+6cgR [9X.>4򁇿/)22rĴjM:0kIDrAQץG& ܹ1 ?6P($*bJH\W_8PT ;׮B-5WFY_a=K$a'c'Zμn9J6SrwL?cHT|̩Fl06U.|x?ˉݬSƴ˺>Vy\?Oӄ}G/&ь͢FAJPTD":8(?/mUԍ׮^p,4^b4Nn)tѭMW~_1YH{:!%wV/@^?IIʥ=vެz4b\sEo͚6%||m9**J")iC:emp 82B/ifoBݔv&߻w\e2uvvF$=NG"?2eN'9rΑ{nCGtje"I\6(3 'v1(Nx!*\h;t;mN/_w!YJ!$)%`K׉t:12E& mڿ>iKvLJY2kDh/pȧ[TXRseg<'Rl?d{KUHTM=#ν{RɈ.L;KL|QjvyxIu+XBByd?mX(ha&OT )揿oO^/0oT[ʹ3ק ~m;)V@A(DhGo m){sGy7qnN'*8|TBj퓧.Ԍ\BK1]m?|):3#ѡɭV{ʠܿsEOzgdOOԿ[9HpΓNo="++Ƀ'r=Ft6͹{أ|C)V~ :U`dwF(; [zYvek9 u7PY;Ze`Y/AysjV~Q !*N)rbwHe6)yх&&g(/7s3dt&ЙQi%3-|[bަ1rm?QIDATL2}M Qȉϕ1d׆X94!DZX~^.+Q"V̋)e7-*Eލbs utZ'Uٻ| ȚZZ/)K?eqnDzRHmtj i3.INN_ O|uwSuM4Qrԭ͂}~'/΍r%U1e/k )oXb1"cGo <[jKߩoUvnލھGٹi/8@ Rbth.8 7/OU3Kzwxp%+r^<G94M+ +?{nzH$$i :}M9%LKK++Ksvk!s3#iYiAA h}M9bb==ܬ4<"W~ܼ\}P<țr@qqÈǬu25h68ƃD4*9OXnј*97U|Ã9meJ?ߏ]z"zl^y̢}u]=@&~n^"kG[cHse2f6Ƅ0 e=mNCk'IUƾmAG9[ˎ?9uWsr4T@MQ?TJ ([Tƙj_iy8jn*3l[=ّC2Zw=̐D*y^J.noD%ռ>x(3ۿX^$50%FTR˯t~[)4-U\g44X-禁,/-t013hΎ*3 !Do_ꏻ_%e[]'ր}ڟ</2pa #QK6SgHLP12+*Oy"͊`ZnB_N7#kGƲrRKJiL?Ǘ2X2!eq7ӪgRGԏ#gklϮY3mYG IYv܍?sYbyLk֋,ZDl N{9cG?NJ%.} A$J)o=|&F/NaںrE85ǚi&yCHE[z]v_ux4e|aF1SF;ѰNW-`"XVr&.W(e7DW~7 IDATxy\3GM}K"l&#>udÒ]M!aYd I!cuP}eθ=})cݽy؃[n tcK2/r]Wz)rMJJW#RfSW+׏jڛj-(?t\ߝv^q)#&.*Fnz겠8Q"is|dS&S,Oyx"|viEQ%/^|17En"הfM--ѸRsu5 $@KWHi  dU/?4t;$I)Y}`y ǟ3;^sdʈ-m*{g1?*Iho4ֵcV˳Ƥ8{z!] ,Ii7aB9R/ǝ o$qZw=1,u)=D"P4ucOufɻW*( hjvmxƛy|BhtG;=eߩ[Oصvf6e~JXi^xlUCs]!;JW#Rm@ Кw[MgUfs٨qaz9KԌ (PD58bRd_w! h!Kwo`DxpDxpݓKT*9QXڊpS?hs}"CP6K`߅dӚ`vui@ O$ $'yU/LsgVpCY֨5X޸Vb ԇ+XM}> 5k+nF1:vro+&M0Q%T qNxn֭sΝzk;Z_抉/6+O B3ix˸r>zX5w\.< 0GC$?JA*HZ{ 2 xU(0䁩aMN-Z ~ ,=mH, }M]*1'ٞ͌|B Xȫw2KMIqӉ#5QTt !#'H>_=) V}ř"/Ox,26NlvЫßFuQh)wshӲ#ܷ^+ %2؊C jχE$YՌUhdTT'}n)rB zhBA5otZ *j:m<9r[/_zlf«yj)4d1Y(h}Zps󽎬1G73.vf29|̏]jiZZ\83u#FB)*DjCig <; Y(<j3ZtUλ/7vqqk3No^{J Nx]n4H9́GP??k3<}vͼK>;69}Ȣ;jZM_:0aPJi2wPFFf~pD&>N/#)*SFw7^';42GQ@QrCpMCU >W԰lN`?_u~ƺtM4Z.-.mhLb?7ݼhӒcKz/IW#RmN IQ@bNZ&ΞnQ)fz (TuWɯL#Ռd?6Uߑ=7!B?6z@UfE$7ɝO֙qfÙG '5=p29y|?]&Ƞ+1}ɄrsSnnIo{ƪNdE޸k,E~K;9[eXÅn֡((#*.I y/ JԊ,}:|7a uEa'R{qֿk<6 Js vY?Im%;5ªl5F%ֆW^R\ښg?_ilJI^!CR{wv#ӊBΡ z:pD_[TQ!!zl)DcAͿTI̩CKg^yp NKQ%b*1X1NtVǪ{=mPցْV߱Aaz#>'=wvn]/MjQ19YG?0Uz+( 0B&m0N/# 4#Axy-Yy|e_'| Jc+nh&O_"xjauié<{g::چ/\h Z{jbF$V[evꮬ^vTn_E'O=ZxիF u !M~߯ik>bVSxƺ3ߦwYnb))i!d#djC@~o@!ZtS盻B5BH ,?!dB!BH ,?!dB!BH ,?!dB!BH\Y2m"T?u{RF. VoHVp9"ʪ{7S7LBG?jp9" LyubM:{wg,]S.(B^~ =uYP| @Sf N#gb: 3Xr@d?Lg#Ï?42by{=?3q\y]w]E B;|+eօûu8ѹ-B\iʀe>BN=WQ :_\Q hqecy?z }ui%]{MD`︒'24󶮞W[()撹Bg!$--+?BYt1mMAvP^ʋ<M#m8Rdž TY>~`5.GKf(jϳ*bQċ sk&I>}";D NQ E'Xp~xLY{>8sFk=TM> uK+ՒRkc,xCR0}{4C#9Jv2V]}輻˾Y&jdeQ(ѕj\жb 25EzJ̞ܼ\ࡼ\aAIKˮv/rƽ5ׁ<+U{18a3ۥv-naeha;u1!1sƥVzf\qJb)7k^b,?Bd?MMe4b`IbEOٶBNQn̍?cz; Xt' ;u=Y|3\~#B5I?z'1 Slmr*kLg.˗f3l?W笸*x!T>G?omml#Y_ BbP ՔuӴO=\q9"'!!IynQ^ 2ّ )"M&n\E]<#A~Bn!зI_7wL BTBHZBO!B° ,?!dB!BH ,?!dB!BH ,?!dB!huLr7ɍJ:٣kNv|!pkQssݱ 7nɠ_$!h~07Oڬn!T챪zD 9mv ]{/eM3U [HBHz_~(y/rݴM5oEPj Ȣ>>u6E~~榧KM~pz6ݤ/|wlkAp4.Ӷ ~!Z ߍ˜6~&{y.ߍs .9r7ͣk3% NqFGm"@Lƭ9yfDxpDإ t+(>#}C#~ym՘gB~8']ˋ8띨;a~vB'3`$a2ڥIyiq!G>Q7XZ IDATϢ2٩/‚uJd?4Ia[ys턜{Rdž TY>~`5.G(@@XT?bgܚ{3H>O}ҘAU>ZxrI@zdg{>8sFk=TM> uK+ՒRkc\uYGR0}{4C#9Jv2V]}輻˾Y&jdeQ(ѕj\жi//pHҒU꽊S:N4̺ɴ&%!͝oB]^ 6tvݦm[hiZNr]hqY?ms;eܺXui`ZvWd-ˏOScfSCz3`Xl*٤2е߄Nas_DC]#nI,`r֙)&x~^DGB^b®; *n3]`{էI@zdsM'%bL k|t[J'!'I wnQ[r*~vc IL_|?x*uZaµ}9(OQ4i 9q9$1yWAJcN_߳UPt}_'\<1+OU,:x}}ζ7rrcnQTԢ"T jA}E%77&'!"SD# $r'1{1~#E4p9nmႫ l,-Or^-Xu# 0BHZw351_ &1Ƽ6}9CQExQrOv<!4$$$5D#E 2ّR~y`;F-/'B;",?!dB!BH ,?!dB!BH ,?!dB!BH ,?!dB!huLr7JkNv|!פv#,4XħHnccmVuZvKgqSh?ʛ BJ_̌B9ZT~_|n[ցG |׵_mBO]><_DEqvu,H=2Jt*OߵgP{=p>4BBZv#mt;ڦynWjrGpy>%;l8g{q`R7^H5sKRfzi\sN~zצb~ v!j]'ZϢ2Igg4-_l#~Î9ڪԟk=wAߊ%Q'ijg0b~P!j]'8ߎ唜!K7pPLme:+?45iMhZ5GJtѝ/uVEyLB#C!T?H`*0?o <>)gϺ߻.|{ˑxF NkٍM֟g^v.>Rdž Σ(~MX~Bm_òj E#]"/]u%_}輻˾YW`Pcg>kŽy)]P̨Y[໤lzXUi")jY!E.3  OkzXt J^Wl9@jʋH3r&6O뮫dAB}o% f=$ݞrmzPD/\6. Sy/WKLwۺpxt=:eW;.Д8Y9oi{4ȁ3sy4p9>2C){)';;EXpT6gB~8's>Gq2¯G*v'41';gH4E\LQAJV?HmEge\|$eO+:>{޸/=Rפщ\.šL>SZz9SS_В޾\Q/j j\5(|t9Nq"&[zYiGzAf7{NNw.zg+@ 5kQr+ukQѢoEQ^>]:T՞y^> ?SC3jձ9}6$pTm_6qjUL.1Tr"r d u, YVVR IrSQvVS'uې- 1$4Z.}s^Ec'f KWT]\жԪZLMs}yBBu[,te=-%(Y P!!GN ڏa"l[s4{woףIgQ׭J'Me4bדn&}ﶼ/曒i޷K6m[<@KvGZLyIKg ek9 ?D?fݸJO׬˶2n]I1y+M޸`xg-m ׌g,2Ȧv.OLVG>\iێW@ώ8lo|-P1CFꣷ2264ԹQ9؉$-5q HtZL4T۫(@LVktwaE-鲤o=y;.i"yы&KN_V>-1do"(iWc^S[-C'N^~<⷏SL~v;@E^[\?zxZ?}gCiaN_"zΫ)d~TkJެف%;u=Y|3\~O l'*ȖPPd~謒EbOGpBC\J7-> i j;BdQ]犓gȲqQWLCU]%:W1/Y*MɍwS'G5ӓf;}}ζ7rrcnQRw(ŮP`εs8ߌzߚvc-K6mNjԟ:a¢" 0IL"H[7 1Mfy:gťdzgZk|F,M{`՝bV)\b;o_m+KP~e2)Ĩ~-hϛd[4VP9T5iGh5e4S9AgTάu4.f_J_#$E-?4Λ&i8}x+{/}'y)KUs~ҹ#utٷ~(~E΋g[V/{*R#̦`ҋz'AQ3T%3b^dV[;H(_& yzRR)Z#t2~Y݆փtz~en7V Hu9{{GG9}C~{Ϊ9Z&aKsޕ@j>4UǔupSũ< gjT@$wVbB?+M'|@QҩFIsY`c\v­#{<).NkVnڞd? Gh>ero=䛇z-|)Qa3 }ymysãtuݼ~rEI׽CKW9> ~ N{3vᡞw-8סF{/[7QdzO ɪ0̬bERo1i *u9\eօûu8ѹ-q|gv|!@?^SiL{ex{wZPLf- SoL뎅&Tdrq?-jӸE :u DG?&/-.i/]Z~Npұ[M>gm67:\iJqxiγW&u]|`IW(ܲH 7؂!CpJߵWNfRAԇoXeu˾P gunАa2e†q#&:ƶ߸bZyrą csk sAw/2:iUv5F^B-zC Tcgt>y~{csnoacuf6eXc&O;1hnNrȰښ IDATt;fzo>'="rZSM\č>N%,Gߏ hhg.7q vOr,zh{?6Ĥf)*CY_ 0r+ rGݽc|a{U@o}WP|F~G;ڪѠ2ڥIyiq!G>Q7Xb٠iw)>ICΧ4ϴ?v=>#39[qN vB'3`TJ{FsI~E9&/t3l+ox]6| LJg%O晠f~ߦRZ{O-"q;QwDSEc:V{~|vvꋰl.@ӗ/]p\du4gGu-~8WrhOU?/)e-%z .1CEǽLŏ}e]ne:xHҐk8_i2>~āfUɪxDqGD25u bJ`"EQ;ZPyԏUosRNWذ79:ejk~UI{R3G/i r}/_.!h//@ԤbUs=U=Ic:Λoo uztr +y8 .ښ3`kγ- /N!",?dYA1U5A)7 A>wN]IMZ u(+ ܝkh~`5.G7kORI{~(U4j+i+CqnIsu /Q. ZD'ߨWy :StUc+ʔO-=Nec~q@^E=Td͌pizA%IU;T$4 ΢ ZԺ }LniZ^JEtDWj`Wk– ږ35ZO4&̑kc\uYGR0}&%wzQЙՌ+SwP_VݔrMԧvUjk^ B5z5/~PrfXЉf>NiwlPeqۥv-naeha;u1NͦRg2ٴj|V&Uϧ|B[79011!1sƥVzf\qJbpsƖM7eKΒkAb–A^DGB^Xbh؛i`ZvWd-k&-5&tv ی˗pNsFjLiکж>7e7xeUKu=s/$N$(ѷH~PfU6/Ao[r%ЍsZcU5 ꋠ\qؠw+(ϵ[>-^{% v“$v_ΆœE'٥1/Y窺7EbOGpɾwڕKVN]Hv'fH|E-}}ζ7rrcn۱5C3ބ{"y)JVpmvdIc'9fguـ“&88-Ө ΚH{REPk&CiƋӇo?y wBP5.;RK}k]xnoڹ! [1/FH0XjgK+):2\ɢ>x<.;3:ҩK(9ו^G\B+gwYG"(7!+rtߚts}LjfjI^|{wߏH?\Cz+hxb)!:mq+suL{\~,b!ӹ;=^o ##-gZcԉwQ@\O,WT<ahċ?&|,6?'9[͹ʋZ'^z ۚM: ~:GCOWۇo[i9l^Ú wB.iIl;eY;=dZ)#N6.P(A>?߲hӣ"K~ʝ6[irٰ&߯[]P/C2qaBXVL5sLxu]A&_۴UKM.)5{q.&4kN0/7:0 w9yLӑ~HYce;a{{yN,[:Ξ m&Z3-|Ž~gahiOsB@S|4ʲ"U&JO_1]LqJ Bv=`3'θkW>K{Z|%yc:{ Tzx>MH}CˤKw*Ia]OH?o?GHR蹈?wo~y$}B nGdq لmO{% Y4 5oB{i,%~?PB/K t {B]e݉<$3`h& 5u\Z~?lQD15>o䀘w=RtUj3GNJi1 ~T:Q^*F&$xlp!~s8H5CB:Lի#,c;ֻ% hN<!9/Sh-]O͈I#m4ʊ5pt+xP( uaALm3*[z%]~A\ĕ]>s=6=\B[--Q[$7Pb $y;]>ݺZZ6Ŗ}[9N]ĿdldڪU!죕^ Gwճ06li1V*ꭚay|@'K>|ױ@=u>p+{xWH?7wPFc?fu<:IF*A3Y CiG]f]%1_ZQ!0]&TM6sw3ҖK WN;OY$(~Nw"qϜ"Σ[wr}F͙S&% a7 7iyH?P** 1-IOvP2yf.]5.*QvN OLI|}`{ÛK\.ܚʯL ]x*!0:vd_ M=T,'АVפ!tzpc!XMy+hu?F7 }} ur-#ra״tbə;zPf㫜e\{@БCl|=΅]+7US v3 s׫qYV37!a!WOn9<|=ɟz6^,BܾQU;z94Ǝ+vMڧ[̅А'z( K?,3^|ahċ&|P6?'9[ͦ{ g"Q'ѸӘinP*tB'wV7iA/Ɲz 7eZΖ=ؕyX&Y=9mَ-=˧o:a4)9ƛ[6lH~֗_*X6nna omU COWwH>u|P]+7E,+#^u~"N0G<'xl9g[sռ FyyCz\X)H1Kh*>vU^M;c0$J?,n_ z}4CSO ?тB@SEr4[*ˋr]\8sH+ qa6q3D.}s䅈I.P[O+5B?v~l?Vpm#Žp(8UϮ0`q7OvhӤm5"?hNR]fU8>=")#ޛiٸی~{Rc l=+Ky?󤮼˿>.{aUeaqKhaG$gyPIygy(`\ˣ^]7miY|gw/?^Y^py_.ZzsNIg{xR YhῲFqe(TTCя UЄ~Jd\藹z-MO).6 eN/T I>+sZ6kx^ 5H1k2hh휄k_y%,{W?M.|ҏ>/Z!0?rAOC&CӰ)dq/t^wlk[zW 7m9| =U'=uITRnZe}>甖Uk[5BX&:,"zy |> !U Tu6LP8Bɿr uqbAyJH%ܣK36x_Z3"~[qtmY!|yC㻖,0-:eD8AԳr2(-\B|)%!p^`RIĩG 9gk' V ?{sWq4h {mf\R`.^A7mjNjt2VOF;۔a8:K(BA1s$~4 "~/*ϸ@ORdv1.Ye~רx-Mwe߿HZ.|/=&2ah XRo6`MY .X{Af~qTYq3E؍gNQ<7BL]&/ez0K]WݿeN<猑 Y>ԮꩶIO^k/єf7j[Ɔ=X6N;C&yx,J߽%}\Q}"`G'eW'&P6K^YV쑰vPz]g{h7%|ȯ' H/m=_vXR\/6xZ 1g֭!ke^ۧhRŽyxy_#^C8iV=Vg-vT3ɳE8L醁P(^W^:eȭа\q:uvgщ\T]hSsA! dƺYa]hZ0no0|Sn !w[@}i^zPa؉ĭyILJ0Ҫ|.i.Մ&&(:E[/dAbR u PjidzhX~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~@ ~T,1f6ZU>!'i!RFRsFc?fƪwTuP"P: -{o( +3N8x>`I0IDAT5&oݝ6bRrAI蒄wb *¾':r]Bi~s(Qw>gŒ $qOd|BS,_1kͯ)g)jRaIPMGx8 zoŒ7.un^-,'АVפo!aAKڪBe?aޫ!avߴMZ-Ư|+$,ܩm+ԢfoϿCBC.FGlG[eCҘ֭T[,9s~gF||zYo굛phhȝ^}?Hr1X3zC/b"~sUk1\Cl|=H:7s@UqLp<$$,4?1` ݮbtؽρ!N⠥b:BC..)9zI.CиH$ۗ0*ˇL3Y->}:]6㬍/ P܏S%L 'sZivrcw{HwmJ!,ۉS3}` {G Ǡj.nՈM$.t4;T}M$wCä>&i]qs3/Aʇ%Xw <DB< j c[B1>>1>!=[/+2I;@mpB)|}VIqCƌLx#[|MÏMC4DAL        ۵0W(YbR(eGp<sOPO i!Kӏ0y'h--Fͭ͐~~@ ~@ }a޴u ˙o:I NZ[K-a~K5 P~߯۰%r:iWI}QrIՏW< ?Cso kF"<]V"}kх/NxQxʪaFX(n=PZL3FZع%bS |3gl'[]D^s'^4(ڶO3W'ACu`znI;i631lljjU޼(756JI(5SFJo?;*֠T)JըǸMezHo }vɷ?4M{pv !4qqfdž'L)BIW?tm.#?_{$H`V*G$Vǒؖ;fO#4 =pP쌘Cv?N߁Y]j5Jь 7?#ω{F o݊vSeGCs+/2VhXn^^D)wkJתoZoBxmt.(Dف|eZ;X7G~oLfӐOrk;׷r@7ˎ@ ~@ j>biaH[ͭR@Q#|}sk3P%&yZ]z42 !p%vibRJc8h`l%&T^.><nؠKLJ (^}4ùPPPPPPPPPPPPP\XZ); txBHVFFuO̊y(A林oӕ947#%J{|eXM !@ _H?fQiADvhcS9&g6&' ~@~@hef}MP8lUդo5C{7dBiCf}M)Py@z&( @G-) PcH?HPxUڨh%CũE5u9n`U )z8QY5uהYv2a.Oըjyxj3qܠx]$8 (PīY_">_gb>46o۳Qq+ޗ*.Or:l>1ys=`|VS'.y.- M3u:NYgᩍ~Wd_Pj a9yʅ>W9Bc>*&Hc/_B+Gzdo`&%78Bv;nB&ꄗp+`\aq&7V#ɑgO^)П9Ti F'}g K ZZ2B^Q^'~O1Lqqc{J{}TH?P[LV}w%qD7Qe nܓV0l1c)cKM|pmVbs/^u/O~j[&XQPm.ku`˿Yz]tjCsOqkHkۖ3<#-vǾ=M_BAOOR|sH?@g1ȴRM8qW ~8uLUb MHny>&gjTb(^u._mZ>G=KԨυZ(NQ݋|Csl,n*%-)p?fg[U*AdVMUULӄnjΓG_<^-8Ѵ/8FX˙:j6XI.L m S-Ƨy·twD|·4bBTZV9&?խXqx7/}BiǠ vJɧKbnΣ>CdAe}]xg>bêqw4kٮE}&3sR2i:LB:6)B-Zyۜic:X;uV~zNq{OnV&MmM;،y[XlDG KKC[αc1" {oVc:wG]57P \tiܕ?;aИU)zqT|qv_{y=<8Û+"[eЄ ߾cD+&nNM"(<%gی%4 )͉ ?Q _H͒ҸVO4u@m&)͊ yқ\yƲ邗mf[1{-5Gc os4@#]DHpJ4ݥcsA!]bjQCmrsk;a4(8i_5l2@ !B:n #-IHo܆j)}B[@~@Qudl1Ii|Oԟ>AE@EjOk2@ 4 o5`cɾ&(Tj7d@jÖԳ;`j"1){Dz:KLJ<33aܺI[eff); hh~@!FFBz:Sv 򗘔"l]1o !-: @pPqf6d`IENDB`hydrogen-0.9.6-beta3/data/doc/img/PreferencesMidiSystem.png000066400000000000000000000414141211146647700235670ustar00rootroot00000000000000PNG  IHDR*: pHYsutIME.4J IDATxw\o{E=W.:pVV[jVuwݢAq#*Pd'LiDFB>׽x%ݓset/tLĊ?@@X2? ʠ!"*@wj @)Z4wue~(Q|BRTH\| ]Q.Du% 2DFb+J*Sm+JWEG+O'$|Oot"{%rP(~Z4wm٪ͥQu~6QͽtvRT@n 9Nzvؗ䳵WjqԬ>|m|:5!"reRm<0RE(6qRd7vG::\ybm:uTAOV ~0D76nTeW3\.rhXa*kBH#~JL ͘j񷎎N-ISӸIٽcll|ƍl\٠Gwmѩ?% ~pO ;D◯Cî޽D凘ǴT$Q3|X^nx8G;0|X_5RijZƑ!Qk;/Y8tT]B_O~:c^Q4DUlR,-ܽiRIzu uSbzo @;&orui/Gl}^'$?S"*_zf}_GOuӶ9}=)^p!a^=˽  Na!!=ofWצ|uussS鳘-Wɚ5sma}}}G=tt6oXIDg=Ddlli3{i OS'?kӾ>O];ƨ*zZB`Sl$3zĀA.?Op#ލ{Oֲ)W{΃m; E"G%~{!X%&%og_bR7pswi˫vg|BV֭\fsgO631%"v}FĎ-ثCFL%" I6pNM8w{GkՐ773 5ȥI}Tygρ'v6&.E"z*ճsڰS&L'zvW7S!B]]0w*m߸8q[Nnyx`?/TvZ_IDk6~ .܅-V۰+[Z5n:a"m~S^^~oF[2_޼I̜>z$5-r k׊{@D}z{ (쾲:eBYwT^M,4m={ ~9{oT_ L7j՚MM?ff9wQFb_oejjyIiKۏGKnr}M玭-̈́"Q{Y8ɒEd*OlmF~PZCM Z0--̆ 0Z̙F *K?^ dd_Xddh0W֌QBan]E\,&6==?BW'/;uvo~~g-nPi`?".8l5j|m^ڹ]xmHdme1ҿ{Gy>s$Qg[;r”/_1eVV̻p)B=/^klإbg,,۵qۼe@ ܻD?HKK|B𳳏4mXoifgӤQ[DLxĭ]ڗ9"b̌6)H t8'B!?t{"w*~_*3?gLw5{#^WvD~6/\$bbT*WƆyy=z@z;EpECJ[pȹxyv9WVkk"J~^MN~'iIo,[=p(ޥ>vxyvrݻy$$a_mmA.gffkkpvl]|$4ȟ ~351xX,&"އzz_)^olcAg;up3_-gQp*a56ڹm$1g/ʪF|+91 ckcE~0rLs&ÐYrbylP$-}zFlMZrۧGttt8A^W4s.SRҟk_YLl-͉(5-Qهmrꦭb􈁓'y" 1mOomrjl\"9[[n#Ox@Гg/g0 \"%\r5ƾW׹ȭDT]BbU)5cF}׾]o{d>Qף\`vØŜ0,ekp]YZZK{8 _%V'1]͔u `|8,)QNnޓ/vn"E0Lfa)ūLv-~2zպŒ 1G٩ EN rutjkbbe~޵Db #["|ʞ>Tb[[,_Κddd<}~67wmգ݅ˑN#==zwiIpW(ұ˅+D"єiKߌ3.`ğK622+gQvv_9•Tssz֓CFPY޿rSfRD F I \1yR5sllnݾ(ԓruŖMiK{ql&0L^'Vt?!w&WoLYg v>ܽ[}=L==n]g_o޺7¯ceiҤW r:@,X[.rK)SMLfߌًi뎃۵022x.%77N::k}=e!Y|ۣȊegg߽} >Wo_zw$bLMk٭a"XU3zz\D" "&;'l6 ?TOϳ/-k頃V- 9wAraF nZulСۍM/X*LHO|cG>y0,gn,%Դc'ۺyuh=Ѣ+}B_?g'Ge~4IWEnw_D]r}BPvDAeU]I'(dOU:&&b_':woᅲfh/^_|_6o22yѓ0_Eڧe{ # ޼ xi(p6=v~u"-4 F㙐 avo۴$5-=zuؚƍe_RjĭGNY@XNo{u316ǬZC~nvv{׬YMz6NK =weɂhˎWEٱ e~b^r.mf[32NM豓;ϟ;=U[bқob+ˮ/[vيi۳X"wɪesLMM"oFe.#w϶}{ϙ@(yq"EQ^H(в{s5q͹\-^ރ>mZ5(~AoˣϷ^|T4mܢc˗:?ȇKbzv{n<;k!_=A?:I= ]mt逡tnS :P,.*y \&!`+F͋=NPĀ!5]6rt5w2zOo5@MXsJZ\Μ{?%tiM(PU^&nV +6|哾B'T:e|={tOH*Ǐ=٣gTяL 'l~F6MP_h}2E߽OD7E8;~J I쾠Per5t&ЫWq2Fup?D!(Tqb_;;fG ~?@T|;@jա=ly-ЮuQlܸ=}fk9Բ$)+@ H%bH`;_tuFT&p4hM%+^̊b:YZS,fU^]kpiPbc.C &LUmRdĀٽcl%@:_~O,4 ΕMՓͩ]Ε\"-89mʮ} nEr0aRIa2OկWyK"ធP^_*-2FOOrb +?MW>~iN1͚1ĩsHN5 e JY@z+ǫ?*=Ճ0rgc1k+-:zb߮ͮM7(H˫gC8W}q]]>ODFΜ|`h9g_* *0} M[2̶۸|8¥HX0^%bD."y\vwi<^vm\,Z@Umx][7og.;!faaޮ-;aFf,M~v P$ŋك u|&$Lzt\qknn^~~vYr*şjv6M EĄGޥcKXU<>,X`CX&LY]|*Go9:uf@4kk"J~^MN~'gQx?NزmG'̇ ٱuۆC]]]Prn]ڧ?#n UӳX S۷ɩ "++#N0K, O?5 R~?WFS`Rқ:5=#WKHL"j,\YQ3gآWvtJj,^Ā륥e;TwaGѭC;od7^1W'w1Dw M:[No{u516ŏĬ^aWP],&+زEQ^rZtGO_D6-<$mA~KNNXP" +GA[*<ŌoC@T<@ 1МQJ.f@EOHjt5D*K 6ԾY|Br?tߩ}3thG*PGTZTM ~P.@ $=g[5+ ?`,|]j٣N*?{$+@ kz ո=}9Բ$)VZ;(T" 6sUKWg@eF*?*}.sCe"D/hJ@{ss50/=:_|*k;@-ќ=9 jײ?s~YLfmIP25)F_Zwrw~P1UDoau~ĩϜ1E6mV~#]^1#JwX<~4"k`w~g]shK9>vao4ޏΝ>kqNyr3g%&%Ķ00lȠ @Ţ򴭤ٸyGNNX,>tQ[Yٳ* ~2LǾfkc);433nhB :ɽ_<'ϝ@ĘmlTm[*{V5)YPȞdc%Ky!5//|a<6's ss"JM`ۤfXZ3^ BHOWa҂,Y droW~ ))`sի%$&Qjvy6"222%"kk+@#?"f+~;''"[˷ɩDdkk'Y(&g ylt2p,|7].Vq4GXZZ|?}E'}}e;rP%'5O.АcFّ#{mrjȹ+b9w=<[}=}ss>WoWؘa¼ia¤H)_ mn[wcnnvR{H,,s)>$6Ӯ.M(%5؉n^MD+^6 >(>NjZvymdn=vԐ-J #=]F@7>s23y!aWP7xߐ]+ 5nADTeF ~7Z8]- J;owj ]0 /$?*x;2wBmp@G@#~@-!~ ~>PZ4wue~;y-ЮuQ~Tz??PD @*EB߹32;@k*?*}.2Vg\{hyC;rd/LvR͵h:zp^ž a}{yz,ZB `pԲǶ۵u[0+\Tijgw@':>GS~ԓM" IDATԛZvऱ[>{"{w=ѽ݄#U{qqDݷ^fg+D݊^r]V^]ϞHя:ulr__Z@JLjʕ)`<^֥}JJ8"z~^:=e0ޤڠ\,O9?\'ߔLȱ ?~`Iby,df_,p#ӥs[c-޵óWvY~@G?D4?޵*_%CDk7lc,JT*mҸW-_SZ{}}}./=_1yR5sllnݾJulbfj|DmZ}~@,_U*7n#2c Cݻ̙=u|BZlywh&ܷM__/--؉?FNjv:D\Fv{urw{%F?],&+زEQ^rZtGO_Dth#n)649{ PF  ~ %AT] ~?$q@95ޘ( 5_W~_<{G(awߦkJz>W"3P_}}q|VWޱ@*[.r*7C\gKK#N ѫ` cGNݳe!{@ G?Dn(+kK 6'6.xď¶6sfOwi8]Mqw;=wф#U{qqnZHKk7l%l.=ظcc't؎^ hF lް!ל=w̻rpV-./[ CDC@uS7)ck|^vo?LGw7u~ĩϜ1}f]?\\/kbĨI _gN33526Vƍ* X<~4"k`w~g]T.J\х^]*/`ii֪?[w ¬,u99bDF y6n7o]~@(vnֵܼs+P޻Q.\C䛵KIeKI+|kff{A(5%'X[ڧlmm8Ύثꖼ 9wq>8{g?$"l޼e/oADի%$&Q32KXlF&0Cd颸Q.{+ Tjq-+wν# -,̇  =ǿ~ָVVzfWFL`ffJD66n+J'5.\ag ~ * k_^PP ?<<ڶsoɋ]B ܷ-,svrT|JԴc'ۺyuh=*~ 0@%.Pu%OK|m<O[:uFuڥ@4mT;ԙ!y[/[kƾVn{@[)'~=s355L+KKHviǮ}xl?'8r/τʐ=``.@TqqڷI X,T ֢C-{t('$E߽aUkt:8;&" a'"""5h写[Vo ou?Oᮊae:xp8 hm@T a".&"m+4@1ٴ/_0eFrY Zib(i?lt4Au(u<Pu(/V~0*Q s@1`sx0Zk-Y0](D܈gA. @k ҂^w<%5] 6M# cҍĔh]Q5,~g0D4flG1 PjccM8|+._]D"UMS{z^ǿ*QgI+!@#~oOm[`{A}_LX,124ϭeS.֝wD,r{X%&%oܲݻs$m#oo(//܅kfQ.{yzX[u> wų Wo0̝&}~,(ԥiYCGBP$ٙ+RV˵jP٦9l7yakycvv󶃉I <}YheWMM4@ ?yS79ŏ:ה:ɷ4_|~ n5EYYs8% ~fp8regD".]nk|mp d7eff),;'ٹe]].zЧKqDqk@_ZYYp87\9eWS2,,QsďݹxrMv&0_9 яrNt/=K8:ްyPffΆ?|T;Y3ΆODmi{a_޴qnV"Z5͛6r̂*ݻV6yuv|֝D3SPy=鳗E{o0ju ҂ۇA Pu%OK|m^ž vX$BIUe"aWHA7 P E6FM/YySEB\6vvtLĊ|*6 PP"|T^M9;` UPb0iPŀ:ơP%u(a~DCTbMCMӤ13u<-H+A7 P E6Mn&-TAoS?}!d5nXWA7 P %nڗ,FӴq~.Skz=wlלFdze-ꊗkM:O4:WQkFjo1LJYHXSa#ztMcb|H$REpnUNbD5,~X ]&nչ.+:WBkX@* \aEMAk@+=~{UCFL{:GW:XTu' =)QؿW{f9*Vw GwHcy{'G]>g )6u^\F?8,r׬RB{[B@W:m:GW:רap\||ekmdd:>ɷ*y9꼊չƍ~_j~ypϚ-"70'"P^q_:GW:ר+ڶS~ )E9ɻ6K!@"#"C@[׽K{9+Y*pVbࡽke9)/p/FB[u6ſ Xףk99F?E޷/P%\vw=zZH\[9*Թ 9\ƌ]jD"=)ҕu^\$g>) E S&`9*Թƍ~y+=+s?*W?'!Wo<ǏǏsZuiMVW$݃QwaAu.㽶k-OԹ x]lT7k^Yx v`Nբ:DŽ:/1 8ǔčd}&޷;QU5)~VVNJ C:GW:״B-<$ u:YDT?Pwa;UomsKyϛ7wit*թWD*QrȧT"zZ˾)D}lPu^5,~>~o |nc69Dm74ԹA4 "*" [[A7 P 104C"t?@ ~ ~?@ ~?@ ~ ~?@@ ~@ 'A?p6 ?P p6 ?@@@. *K dPtATK"2]?H.@T>|!]c.@T>|7T|f??@ ~ ~?@ ~?@ ~H.@. ~?@?Rq@9  ~,t@,RN@@%/u ~S,"*>2 d*ǒ ו *?P᳍$(|??zq@ ~? e}d|BSKC{|B*'}B@e@!b ek?ʆ@@ ~?@Th>?@ ~??@|2['$up_٩v|B}>?8 Il(?l|$ VT-xJ %B 0rY"~@?P )P]jkvw 9j&=CI4&{$kߦ5gOx$Ko?j0ڷiwj\<~l r%5m?>]jj27@qӽ@DT $ȱ,"KŖĂ-<U lV'ԙ";%HZXv[ $ZW_"bENaOZwx̔|LqO^ךeP "f}Ak6eT6L.9C: 3/F?yuS&t5n ?q ĨTۡƁ]+uۗ'iĆ+2ۂJ|MCFutvp^d_[F}{8S:6iTwwm'O_?x"rt_gQ?IDѩm};Rö >]v^lD*mX߹*Gҳǵii#8t#.Wgyn]>v_lӳXemA4-??\ً^wi۫gvg8:/]ˊ5ۇ~kkcv?g玭-̈́"Q{Zputnyu!HļɆQpm6_aJ|v6Iғ Vm95 ox }6Qy¼}QJL[&N>vԠ7n2g"xܘ!cG p5`d7 j׮.vB0NO >eAsk甙=j~y3^qwء9?sv5wԴ >ʁ#Ԙos"}4(ԥiCY\?x27/O,;^ف116ڹm$1g/=p"??_  оmB1qŘgxl3SSʷliJmAF?aVvv.ddںk>=j|mp 7f^Dz CVV'1]{p8K^p8\.Wم/cg_)\"237KOϔ477ɑ~1A*-wrAn T3),/1)mfg^.rOSF^vCXҨa?XhEdƾ]O0̏3٥.yܿgcg_*xķ4mZT¯b_ך&qw= @Yp T7Q|ڽ۷rDƍ0 E"o?ƒK`_rc50dh`а~!>?Ç566f0oڸAˑ?GC_*7{ЫCV:::zzz}zuwkr+:iޢZDQdhnKɺ$IDATP!¢=Zr '!牘]M0@?ͻ"6_5*wz͙@( "Zia}׮ r~x=B}=!`s.%ӭfp~ݴe?]ߖt \ bP M%B|l6m `UhS5׻l,-F?}UƯ~=v[khS&j5n 40o*k~:Wb-{S }@Sp>} L6MJmuSB)B|BR wo:uhT|~JJZm{GOyڷMڧ!~E߽>Ske[Wij8Z69%%:DE*iZ=4:e ~?` @+GHIENDB`hydrogen-0.9.6-beta3/data/doc/img/PreferencesMidiSystem_V2.png000066400000000000000000000605421211146647700241410ustar00rootroot00000000000000PNG  IHDR*1sBITOtEXtSoftwaregnome-screenshot> IDATxwTW;tEz/"*J E%^QcLDvX"*@TґyKY. ߙ7oܷwPFe B- _i7!З! aA!$rn)&ƆnE[&4\ڭ@H 0 垇AnH[2h` @~rO~AҖ%XbA_ aGO$&ꢡc6JY"08:e=I6#޼\h -fU5RugW%6\4JlJ.$$W>zf7IN$Eӏ-ٔEۀF? 2Qڭ@!k$8 1L^;=հ#/l,L[# ׆.+HCR~H[0l|8Y4EU۲BcFqOMj-7O@?-2N ?(cLվz]o2(x ɆW)nt)D{|Ь$ 5%uɾWwڸS$U~eR)u cQnvzp?<{ƬV~[YF5(.3jɥSlF˫^tˣ5p1DP;ʹkݮl=^L5FD#miܺBBi( OgGJ;ww7*>xh @SElͤ8)Oӥэ,7#B^>V ǭ3||癨Q[}u\=shw[®GX4?}vϾup3БqyI0{a7Nz 1Gn+)Se߸CWy!6>;)lQzmR[!mբYwd0 ^n!K.(XQ=G>_VyU]k6=t†94 `]cU5dwrfr&MtdCY?}}SZk[Lۼo'*a}Z@ݶ%{ GJIN8<#h<n o4lKn(wS Z'NUO 8y }=ϭ B<&3|vѡ :b_pf8b;cBG.WeyȽo=,qmWĻO kK3FZ;cHՁh)jwvI4.*!Ln٩RsU/_KF38yŪh`ND {κnrK8*6Fџ C?zd|GfjCYBi \u=s;Y(H]Nla-2G6x]͙jCf.z.d'EY[#%SFv'&eEd8OS~}[Qiw ak]997݇7\ɢ_\ [XG"i۞ETr Y٩q֨i ݌c@^Ѹ}CNܜztlϿ( p¸_jE%q괲vE>Bi8WoΏ,=i˒)^L0>YC1iKnXV^!?$*[XR 4Q WD:wشrBă>{9u-.bg}H*!emĝB5E\zuBP7Cy%b7wkNp >x̸wri!),0ȎoipKv쁕pk' ?"ca]i) Kj X |vlV!й6QCecƈᒊfJQ" 'AGtoy u4"W+N|HbYu4&Ky)k }eFT9^+˞jZZwҹM7u)0V*o{ ,:PR$.눰Ϣʪbp֧r^{JJ8ySyvJ r_n/r~<6!!7Ć= 5OzthSt\&Qf^:|r?#uLW5qCa7J[f&OnƖϝѱ3t336t0ݻ,&@(5Z?5 8C`2hG/k;hY5O$#XCUը-R͒SZPP:!}gs07lpu_~z8㻿xoDz s"DpZͣ߫>gꌍ;#"pޛq57ΜLgǿ8X@fwhʳS3+.;lN_?YSv&y{ƇU^ E~\zR5̟+VUj)t:ߨ79_WQ~رU=~JTW_}̝ZEVe`'^߼z=D]\uoLU, 0r[=螀fԚY dKD[}f=0XDz' ]oU_n}?~kPAkYs6={rzwlpq 4"܇:% zQØ~"foDHIEt|SgNO5'˩g{eae-/,jI_ 1>o@SS)[n^M%[B G279BBNؽ{\H]'WvUYXNǤo>ݧek5JX=8 HV1!g줓88.V\_73Z', %yyN6FjԃR?b_'%SFv'&eEd8OS~}[Qiw ! /_Ylviu_=eᘏ,JvjGX!ah:R~vᡛqlH3x>֪Jܕp5z`o%aUT_B* W&|BW1q"?|&AH*k*][׌U!o$}v1{D>;y+=:y\w|Y8ZdD(n擛q2WJ=I" M ftBSu=5jCEJѷqAAV#U%U;es7ALnɛv`@5X845}yx$qryͻ[ȡ/JQˮ,Ds9oVZ-;7#Χ^}ҴG$(&@1(:jokN$o,*񌒕ʺ{ 4^<ϩ৲@iVW~Mݱs卝: D͢vdzM[vkgN ;̙tNIu@^HRi#p3_}\=&bkD+]2p~.Y|z#j9܁z}xԘZN-wvVE'TaB;z21QT&N[z-[T&;\[̲""t7#o]0 pz`X'V2T)x}]G?;ceGk{~ e?L<@Kk -~0r 9Xr4p @A;$@!ս %oZLu|Q]٧yR1=iΈxt!\m]K/͆ 뮭R|ѣPr0i`+]E(NzbZZ dQ$9CYg/ IDAT֌9ujPfY6zXI6{wRPCIy{cٱg8Ԧ9+A ޝm0+EJ x[OUlܼ|nYK^W׶0P}x4UH> }QH0©kړ4Do=;E/P &ɔcTdXU%jH&NG->9;UBou"@(:~]yx[[-pz_ߵ3x5Ӡo>rZ6c>p @Y]7f[qD4P |7j*sK B%/'y~eFʰ2([c^IEżCgeŦsvW?84P+yiK`ⴥ ;_Wak8mk>_YbDQJF:85\C{uef 4!Iuaz$vQ(@8o[g][EMRDz*sV7:̟;\_S ~/g8uiݑb'?BueO? 7:?Pؙ-oFm 덄T!P{b :}곧N*3"" WѭIU7v:gs\qw>Kr0XO Ī*~4ٗQHyz gj\{?yR„~ /fܴn1|BADHb<$TrCM= fN?3|W+Bm뒿Zd\ݱJ*dUy"pZCP3hJ?J&N17m=Zݩ1+ͮ|ZPTkgپIqRK_WcY2E#*4*u#nV+(cx,JjҦ-~{ۮ{ilP0= T΋ 8%䍽x UJ?^4 ]k{%({kZ5 S~aw׌bzS "zR/j~퇩gTK7q sKiNgZg 7_[6PI'{yO[y<ۂ )WL(g>~(̚QC=W^xZߕ;6L>f)Kޱn6>I58;$<&LvphC#U}~#m ϒKͿ?{UD 7U -r!q} L gBs9I/~T)]';R~vᡛqlH3x>o7yiQAoZܒ€0*nѯT_.BBj_[׌U|qߧT&NAF2O3.{Sqm.+W0P3^Ak旬Ƅf[DM;+Ez[D.ayau!|1VԈF//=IS5=32ahCe#޾C}EïS:\:suxR~ݚ+ _ E%p<Š設Ϯ9gN!1?QrPUYwpOUڽƋ9xZ5mمUT95=pBnF-\6}Y8VujEfkm)q ١:3 fKסvn PQ)U;TL-|q;WZIeⴥO=qҺE!zNڵ?NFg.ݭ:uutiMJ:hd:tEZOgUnƺ&]p|ӗ!U_Իn?KHH Ay}fC+&N]ZwԎ~HYe?3{r!T_ھ! ںF~3QaAHRl? vC aY WgĤ& B{ݽX\0NLJE~`AH2ބK BIBR!`A!$~BIBR!`A!$~BIBR!`A!$~BIBR.tҹ2b< P1{3{i2˃=u_hgϺʑvB5=t|+LO[RO?Uqz@B;lLgO96zl\?綾`A} {ݜon<٭a&I?0C nBҏvrF?=kG,{;-xb5~l/Cҏwou/ P2߸YX/qQ:䍽p:zh;cfe]k{%({kƍ-`%' #CςukPv`unǯ͆3$BHI6}bۼYP7*Tgrㇲά5s!k Ԡa CO[YلSF uz&[3”%[{X7\>Ʋc8pda,̢ /37j#:~O$;刷G1 Bb8{9]q4 :-Cng@U VR eS%G'% >'Qx9"MsY}f )?ϱO|dG6vklf!bm!7yztrSYrr*%y ʔ>$-!%޽Sjڎ 4^E M l_7d=5&d<9֘Y1YhՎrl֢Sj{[䕆Bz@WNQFHs*'u· 5+[,ʻ{+Q@X9MB#k?쌘tQO㊫7f Q`B_96>&׺J{ fC:4aςpi ᳠K3D#HCf_x:vlκz~;\GtG]ach`4gNI7.E*FgUnƺ&]p(K$pLn/sՕ)f!bB $Փo[7oXӑ ?|2+N:޶/:R_LL9@}Us-X{*@YvTÅr>v&|x-,ֆB_:yc==F> /(2Ȑk_ĦțO9e>sE!P+gܴn.hOd>=,#sJA>m}!d_OTTT=.YP;n~Ɵ]"@k?"7!~BIBR!`A!$~BIXw9ۚJ)!(1)Mhxͮ釗{b$Bban -~xӧyCMH*EC%cvm 9EQ^ B ~U5 *ËK!'#%g'PE{uIQB oP^4X bCw$q+ޠ2h0oF!$z3?Dޠ2h0~BMp߼QLi7E#Z$]U9߲+R.n_w#S2cjܴnni\܄kN>L)mк[(.͵cTbfzTFh 'A7ʶecZRuRH'y闓,yN^YЄp8RZ?mzcfRٿu8bEw.ep7nNřI#z#9ÆJ;lU1Qr0q +E(N=yFT1-3vZ^ ][,ǞX~l858dӷg"˥-.V iI/ZZi. u2]AϾ{_9=;l6b#dToD!-nC ӯ`7S#1R7n¤]x̛kjj~pwO5PbgD<9ze6/Ufz+ٿ+5zc"V$bGNQ'~p|dbR7S1ѥ@^CJ-Mdjo1;/X<8z i/+d:Λn= DAUÂc'v~]EA>r^dzZBŃ77aً'DWܹ_2/9^ĖPжWвq|ӧi K)8AueA\x$ïKԬ͙:jōUp 츜+ uk7AŲ>e6 4)%eD"WJr"Ptz,\z|ͷhF;]5jy1zZ1Yq0T&k!ֆ޲BT伻0nKO:%@XYi`U5YaYK!"%YI\ҩR CD_ÿ*xX֖cZ3Jݞz}d؊l9mUK]zu ȊK'̕zc2ƊߕSüzϥ4(U5,8o>Sq1Tu̍-*#cM 7ILn}0蜰 Ξhz8wC{ܲZ>nL۷[{&P}gņ"Ls}_NR]m;!IyCl<#~ZTN`=t5lܜ~rNbkb3q('č8Ǔo @(f7W*|ג# };kUIȃ;!aw?aʬo=UXP,GKw+jńN8&o]yu巳>>0+&ZXqT"$-n$rRwK(p8!߆fbE*5?Ec |sSY]p/o=Wy{?)ɡewGrD^EB /T^S}W O%^N,*7kbw'^vXF^ħryuˁcZi[$uJVb=Ԥ8)OӥGu>ծE9[n}*Y;~|kxp<Q6ay/8ɑD@?^!}J,hP0~nFJu,D觥=ۅ%nCLQ={vOR~!n.NR/\=fې!UKTΔk TkSY IDAT7"c-]:>GW&Ssі)~HHLv<і>$RIKʦjG袌:{HFVy35fꔆ][@XWJUG"N,:s_%tIvrrZ)%\{e^:#fUL-aWcvӛYgsd%;qn&@ve+mWD$DU x$H~X}J, 5oրO1()S ]{ׅ%r:,~tpb9@1>x|{ODޒZm_ٱ@K%sqiJoy)r6܅S{񚾼(U89zPn?@qmW>ԥa|&HX(f;#kfS*vQ<)- Э]̫"̻>qmm7"K*dҿSIvA?^q䘸a `7Il!+1P0i,ާPx˦cOF׿ K**Ԡs1]$iHjyЭ͉.kp맗%QF1MyM_^gVI) v :Ϸˢ.𣊒k&t.%2 'ITC\t'."ЮޢfE򸠠e#~^H8i^Q޵hЕzR]TҺs.7y^ܸRkf7V(_+OP@&y{5CC;'}QǠXQnI=:G<WZ4}Уs ;s8wW:|G+]V)!5k]~&©}U,חEo"eI)Z؋?? dF^x2fde*JVn*EwyCr9t~Q.{H˲_gEhk=ZŻvMk0EAB8YU|JXy)Iy"2X৕ K&钼BPlWyPj% f%O{JtL~Q;8[EM&SB.x9 l(|xK}30JǐAE/թ؅-xz_=hpR*]ڪ|!)!tXrDp(Gd%$opgb+rCng5&M#V!'PhȨs&߆ Sxq%9b<^MdWO @Aȧ|'h.,8'2+ƕ0;hFJk}uŮJ ŊzjW_vjg+7ߎ; ͼ _o^|Ml^Szs:UZ_ c͋*9NAzRv]|9YC%f5N>dxVU_P43[~dlJ.ްH[:zTI m=Z`֬NɛvK(,4(սf nZ%^T @%ٛqYEjݻ}">_3&4[*h,}o'7^E;s4>g%uWD$✓GOoQgo)ٱiИ8o)xAR_! T!Pwb R1,\7L Ygǭ=)]&nZ]ᮅb!$vC*CεwXA>*S6feRm׃r[\!)V7%oP柨YOC=1u#]+h{j&?,"]&n @yv3dqÛZ݄l+1(Kima#;{+Q-J|{7?)]{oo.,83aʜ9ߺ+O)4"[ <`Dݱ#cdl\ݣPhdA7ojgTs'O_Xp rz#y¥݇hRӈ_ȑ/yanڠ}%;wumAGNϴMHdXeҌ[r5gڞS. k[;4:doa9Ƹdo3( 㼅IkHeye? *tFIbܔ;+'ߑv+pehview4@{ĩKkИm*q޲$kɵm/Lozv5aʒ ֜ZDqR$uAӷZ)SB3jsۏ++Zɚ0Ve y˒ԭL\sR@]ܗr~v*s0[tAN~\LjԴLHM*L\ߠƆzS3i!꓀=cUa0qO(yOz~*Դ8U#vAmfIOXy_x'^ }#'J*ECdH?zMQ^VfRPk T 5LC;aE_Oɳ&hoB68UfYHkmФl D`.&n10}%Ov~-fUp9lȏߠQƆzaCc*7^ %1Vey ß"g_$g)K 0As';a~Cpp8Hzhsj==p|(%C@(ph ?Zy/j8S5- _7D!˯JP\8m(N:Ra(|6M#Т ꮧH>$7;U;~7.*0[dSwK(p8!߆<:*LXBd L (73{ȸ2EdDdD4bG& $BVo}MctU};ϩSܮnq]UQ0**믶(VAV-?\~+熂Gd{Nҕm󱝻F,53Op埣r3|?72Z}+i_[::! sҩZ jQɷr<۹u۬fc֣R_ZS'3\gxxc LʲO^ 8[3R,Muw;wqiuV-$,[m.r| U6VT.=5 omðF$,[';!^ Nvk!9hϜ [dYHh/ Vm+[me"g@.bwe$cUOvRz|;o|vgnz18Jq3Ewp+VheME~U'o#{eT,V=۹+i?RXvEU`7~9tA]B1!ݓ~YtիƢ#[4}g]*OWd[xl箣AA Z;4;!Ul%+W 3_[_.v5=۹u٩cjQЋ#b]iNavRtvpll](ݑi~+߹\mգEGߊQ4;ιǓ׉b;w1~pɎɑ~oRb8-cU[KS4SYl.?7dHIgL^>~n&G#sj[xtXܷpɟl*jESaga^P17fE g}=[S?qK)-YUq㦦&'gB(j7:0S~P(gQƏFG_sI!7u1߭ux*ŏum<ƎбBG|_oms=~Z-|Fyx176w1߭uxg\>}09'-?ڧ|wڲew?Ko9H㽟o?oWh\N|+9zb;)jnZ'zosw!aď|lqɊB'-ƎVW[ӱBG|~o-dŃ?, c᝔n57J\>}0]N=X|lyS8IVsw?oyn}0NNcďW:sx |wi8<ޚ.z\v ;~ZueE )jny=wR>\uoh v(i7KN)/|wyť24!ە oeه-dٙY9'O!$[hq>sa;מpLڳSgzF\lg蘨ȈCjYM"qS&?bۊ|3U1n$pzd N}s"%Օux x#P(@ ~ X?:|~ܔIY9. {>ycg`t}+tm]j;~ ?@P(@ ~ ?@\7ftLTdZh ! @QQIlյ!~ S>["68B9S^lRQ)}B@]DEFɓF/5sG69;i@0Hz$lS#=fnNyS+Ʀi'Os8wj_*Lmijl qՁG#}hB£w7F?P7*b(j2Vbz lI=s\T]n'v#czQ]v_y {?Г_g~#>cfEr涸}?"~G,C`M#@3J޽HjI{ ~j#2@2EYx}B}EmqIO:W$˄Gc[V#:&񾵷4}ҪZc^A@GyGf]u=<۲nȨӯJԤbIBIny '%&TԆl8Y.MRH:v٪'Wxj4 B@7}i69=TRnB?|կ^# Ɗom>]+_OtlӦMpmޗlڔ|QC@ -6Oh,9ecMa-^2^*/eҫ|ӺYmBHq]IZھ==?E^Bd^x01ٷ|5K{Q1 Ϡ ?ЕÖo⢍'_9zK3| |†Y61Z!736ɿ{be©o|{)x]<0&7S'bCt_o.zj5]I,ȧ)䏯&zQ^:uűS'ݜV(='߻Y@u X7HJ{'=DyfA_볒L=4L[N_H){>>ShlԦZ8/;/(.J=2cט뫴~a?w>"ʾUmq/׽oOQjԗT$3H) #VNs뭭:g'S[:{Mkz>F!DSY^k/ 4E6j =Y'^i.cLFa_ͫ6h.l HGh5W*b{r[fgg *.@ÕKcw14n0_[Ზap'9Ơgع4~P*&`ivTͿǵKjB4\85tݽ ydj @|?xWY>1&D5784Я~8W^d {)7B Q_Y({J4[~}qf;qM/Gehr૩̡L9N !#B@teM%7;o]4k計oX-/b fKn.Bi,Mmkz=2vۿsʥ w̌*Gv` m9T|p'synȨ[[3OiVsc?E[1omm7ƱOͲ.R`n/DMc_oؑ]S|{j*|Ou |MwBNlKKWM  e9_mNM//[n ,35JӬJ!9m[]gz1aɌkm/o=Sy8{o?VoM0jSS[8={?ż)rkUWD{RcZ g q଒i)m5J )v|!#-ُPvl{?-\G*ۍ g_ӟDjB@{W? .cdQ&EX'>gAO_S;M^4Z5l2E {?ЍǎZ|BlߟI(#ĝp=,IDATh@tzajo4?IK!BHo$͎&u?ż'Nf֨;u?9!ׄsw?E1#6EuE7y1UEE%kOC@'RR'V]7BC#\]!Zho8P(o?*NEIENDB`hydrogen-0.9.6-beta3/data/doc/img/Rec_button.png000066400000000000000000000006241211146647700214200ustar00rootroot00000000000000PNG  IHDRsBITOtEXtSoftwaregnome-screenshot>'IDAT8c`@cv\^xjiabeu՛OxOC^xa@M߿I5jʟ?ib)1믬 IDATxwt?O2ewgѥ9zTTЯQ*(]s w{ݹLi沙L&2L^{OO u+:|B8`kl !5pA[s;^?OB++UA ۚ۸PpؚP[2?Y(=oݮdM ї8nW7nR"˲,˄1d(Fg0ڲ 3NgQQ[V^QUUU--((i~! u= \&HScT8bDe-YFѢ|" E;Nx++j*N'EozUxNrߟmB,&P0ra&bx[--kw8*® 2j \aX,:1649>ex<¡0! !%%ުiB<> 0l$랞!Gy CA5M%R-uUC=v1H$ MeU*rLS80p({`o2dԒ`SSS=Rv)#l"'#aTZC(߿mjn/+r:yyeX,ڽo%ch4J9OД;z8-8׎vbQesI{:D,h9pv`aNZjj䨯kFMLNNOu,s8rSMnN?kǖ-5u.˄ՄYDgȀj $Y1 ӵog]}Ss"S{{9,ƢޮCwL_p(0]Tbބ5}{gjvk)FGnj;˲HkNĂfb|kH$^c~;2@a~53eH8ؽÇ R( M* ]X ֕ vm,; uM# w1c:BE`"ڷCy,HR)'t2Y9J<};~ec_.Ă/ vŢ3""aZۈz:w|{\@S=[ږдxoڈm"v-vKAe'LJAc1XRltd`r|X{$'Ɔ&Ƈ521><16d3bݻU;"S|j27"wWk!; tiH,-dr ;sM`^-uD"lȅrbT]h,ʶUeـ?=ns:D?QiAIا:]LC ֥;O]a2 `/gap0 B\f|>w.B@(drBQԤlbhh /5)栱KK)6:;..%!L ?ppa??$XLi,V /2.-L$px-i0̌қG_.ZX ֥ŔN&5`Bq7$<#FD3,W &VX օR lŨp`](V X R lb(VXYtb1b`+h,C)bbЦ Ϧ@K1}@ J7) lX  Pآ8h*ⶶ6oSm 4[1{c1 |/@VlX,Jh[sgR fo,63Rf<7#Bc1Jz.E͡lzzj\l.#yðbAFѬK Ab"K/lK1K3EcqVtБQy=R|y;3& jl%#UhkkC#͉omu ad1DŽ䭱؄BR+w-<'SlgFV D#.]p#ԗq)+!:^v<+b`–l," [jC؊QCI ̐c8 Hu.tѡ3epJRtXߦRՌsjhd/ ꡨ=Q) g@VX\CP^:FD9} &"O cSWSwvC%&K`")_r:XXfW/MMJwɿ%z…)sS:ݙW '^RWN݋d$AL_ꕕ\G~"u ח\-%K݅d6s+S3/O3Cоӌ[)3{",OoQz( Is|PG\`K}$#a6[q?ԝ@-08 -!rSE #t!i (ʜԏ22/nW_&5|s;U~>U@@/*~H*IS,z,W*q^l`;=2>jMMl4^xB\a+ݵK$cRY㖤ҷI$vlUF|>M!ah*v-Sm/uE)UrYJ{cl؊bWjQ.#'ws\Xx?˹h,VHFZJ} Ǩ.-!ݵHPa +jԅZI $v Pnkko[J+f`,T2VZ2[9exc1dlkWJ1^fT'LFa4itg4zw*APP5Ks5KIϪ:-7 J11icqp12؊siIVdW`T 5L45(e[1vj00 %[)BV Vʤ#H Pإ8/P `Q(VlXx @Fh,C)iPh>@c1J1BY*.guuZv Eb+5 CLvb1b`+Y R lŨp,f EQEBw^ ivN+(`(VPV@QMzzaY0j(r8NiXwvX @ӴSYM&X,ߙM.K[Ac1XW;ui`' J1)S@LC R lYl`ZJ1Ac1`d1Bd%YJf(Ou /PeaWVY~$d9Qn^]h[Ac1 L( d2L&jn- gxg8hD"!y3P~>A4ʄD" *<|ENWpP0NRaQpv bF7;r:\fLOAl/5S,XPajWP ~GN4MsUx<, \.әUuT \8= "9]ŋ)\, W=]T PCqms`:|`jw;p*6Yw) WЬn/P.~%bOP]BNǸJ%w5V꘦XPL:MaduIP&̘ m 74ADf+宭kvGOi8vC(0OiiyU.\,z?V ;q#U1$NmҵI7Yjp0xEyT%Aa(ԡ"dTSrg]p8ۍXKSs{ځH[%P?Du!9\7>]al+eomԴ픣r~Pe[kVuReU^L=-]y1D锹vX,ł>  d7%x# G&Czɪ(j^cAhYhSE,XǪA"Vjj*GN؃ppEQ\U!T*jkj4TcSE% - KX5H_RG; Dp(.h,!Qj}d~ hOajXr@y)6_@kiGMͼP?16%y555>)kljsg_b,"30sXP~(,Ʀ6L.rIUop\HpچV3 5"Z+!= 7A0 ZQUh']T`LD 9VR]p8Ĝe0M5uM Eh,tN'Z0S5(;w`Rqid,Ŝ.WCckM],.t,^x;,.d+Enw8 -XLQ9T\uv7a0 7 [M- { ?n6" h'_E -lPU\X׵+8cYq<pBt}C 7 _ yEIH{)l ?pc˲%^.\Dؾh@o8FyM-EE%pp.4m.Enpw?7P}{j 2:2ʿVyE_Q+6T.Pxd<P.d_w:X,(WQYkhgKZ{KzX_B@QtskGMm2CA,ABMӕUuwQL$nM4ۜ(2.L^./9/-S蒠Cbkaꗚ2ZVE4WS Lj)V\⩨kUt5WOOG0PyEUs9NfB(*oxӓẌJ}~! (_ON#)׳M˺rj (Ծz^js1Aafwtq|}/=͒DvWTԔUTUUx~8=҅W'}pCy<+N*yYvT++B*:AH$n[~ЁPwᆳI(Q-?G߳.At" o/+*.)+z+*k\!8`H$ FGJJU5uյ Uֈ u/0=ųl MZ9<ǜ*FkCoSɉP0 %ѱn;L,L&ɡQd2 BqE$|ֲ*KTj YǢS㡠?&p( L?{\3 FInzQuG>t>1EbM.BHoW}D"OuU{:K<ަ*iB $''Fӓ~f0R`-xYOyK9׳?ԃ ,+jn]X񚪾YHϙHhltPf&j,“[Il+"S\Oɮ•bљHt&2== NWWxA6vH 'w2eW 0ScJS`~EeY04xٞ%LP< P>Go%aY6vM/ezC-nd&ɉёp( &*́}oS6 YU2V,'hZDљH4k0,F"]0tFgt,+ѫ"dftod/f\` T|-~oh9K$K1e&bh<m4˲p{ߎHX`i{og%RDJnP`XBMKD,D,MC}F\|Ă- w1 iYF{g@ XEo?֏$8K`?X,gc_.Ă/ vŢ3sߕ7Y^=BE݇d2id2IJX<iGݼz#]/hm˕e`mPXM$J<0s[IO;%x<6_2 ´`<R.-ff"#}*x``JE}($p03if)l>;`^C**1"?`-C=yK:dfltPKh,RQ1Eg<  O00j8p0Egb.u`V<,NaA8hbl8_J1) قż[8(1 52BcPŽI[;MX-ח4MQ0J9QyqK2̿θ˭v]S]eUL&#ᐺAቄCD$0\-L9ʭ@I&P*De|j$['5r\R *1nG|7Q-/:iEK\ W"^d>+%O,1?{,5 -/$73mm0P`bJQ^6DgHw'd *z4!ra.H]MT5E+R .I&N%;Ap5QPoe5nON2)>cNE"ZG55KD2l?2S}J$AxR(ZNuRWH=ѵLU5C$ l8_D`\Q-Zcp%.WA%TJ{1_E$qI 3~ɡ\Ͳh+^jR2c/ \φ^L;uj0J0[in+ԑgCxbQNQ ҭ#s*;)[G,lZJ1l8z]X~fB8,.` 0OW+C, aݒ |=c SɶE>fLȗ|h،.aT'oZ4}HKznK)ي-ܑ0YחLK)S:E#_Q$D/i× H-M$q_?$rI9N"eRSx5e^񁒝 l53a{1֟RmISrζ$vL `9.X\R5_[ c+jm j~Jha"?|6i})OV& rz))7q2+8HK),Ǩ4*Y2IiAc/ ['u ۼuQj"5w|e RM=&kδ~Q {ɴ׈? %tǷ okU܂:(VB%9O9|ŇM2y 8NÑ"Kx'f, n4_q0D0_`]%-JX͖Ո ]3֥.d2w9TcDzr7K8#Bb-nP%e2TF25+}JϝMQp| Q~"%<S뢲:F)"3vv]fIײ]#)MEBQp;*b`+FPqdT"Z!IeLUJ!udUyAhhU,+<]D%yIZSs͜'#ZAhe.NI_GįT˭p[$R lŪŅ=TD0L_%$cJQ1jY_INDHn:Y|l3p̾Pͨ$xB)b(V |b}5+$6#L&/b1b`+Xl~ic1 b`+h,C)bƢ,o.1UfyJ1@c1J17 Po,}䡱lv®:Wy-`b1C e<@sc10!4俱8QTVXWƅ?:9 +Ih,[qn4껤0T/,D"@ɶ4S4gUK*=U;*Q\#Eϗ14ɪ!XߜfVǜFqL8IMx.$层M~z2uvkd2L487H}Elb)&_788} q J~/fC}C #s"7ŏ^ B L>Mˀ2ϭ̙I(c(#Zf{N=@aj9Y3[7׾SSE_o4Eɢr}Ŗ ƾ sVXؤF)u']{ʺ O9/e5nIꯜ/}+OhwJVuyaT8W*S)rb2fRwZR%GՑjѸ?9&hl,}n%O1z-}7'Ʌbd%ԗq~,a]t B`L]@RjP z궶6^f;/Em&B%S:.j%!S7CVV?jvU]3`Lu&8|s?ьP!Cב~FDiF<1@;¾syh&,].eEhLorjUhi%nk:0В=GgΓ`Nh,6Y294 mjumdF_@wNC}2Q(  U\ 4WcrSh{6)8d^AzyPA ؊QDQR0J1c+iSXJ1BY,dH =lL:R@ ؊]R lF*wdb1b`+@   c 4[)rVWeGP0,[Rcq>d`7h,C)b(V X R lb(V48P GQ42M^u b4P˅JveҞ.bn%˅$/nܝ*(-=^9)/~%AT{h,RW*^J^ ~%A]N4jkkØKR+-+jT RCCS^+VU>YᚥeiӪO &kO`]ZJju~ăpPǫp^$A=2颱Ku)9J'!O_10yEeR E6>+VWS۠D( T]kpDc1XR,r!BJ*\AM҅NBb4u++EtCS}AihjHp9 5oϾ*-xt)--$$?-$]8Hy5 (Ac1XR-)7gcs `469|up N`]*JhZC(*+*V-| "ȵR{K˫rjt6.u|(uәϪA"ҴybuX ֕U)FtgQ% )%5vxk!s/U.*/uVдRJuͼmRUU3>?/T0*^&rthit opV: 4Mo]XV^Uh,RXWo]tqcYIGJJEq*:N)f0'Ru(**.ii[v,ݬ-5u.KznQV^퐏fټ`qYyk0d KUc飒G%IJvS3oЉl07:UT9r eU}=ɜWV^ܺkN.խ_ !$PÍᨪWZ^3919͔e\u,b؆Jki[rsGoi%ɁH8˽F%oSs{Yyqq?_柏=׹-BȪ ?=sz}&"TYMQ]ԾhżPNp'M&].Gz2`Bboiy˂oi NWeU]YyU?94 P[ZZV^p8 z`Y qyPSvV-$5mg?‹**kK<4M}~8NWUu]EeM,DPYh.%%ުineY]D<.±'Φ牲PsOX*ɴ'Iřl)ND,d6\r,5i^VRǟ|cp.[q䧻vnv&jc'U}qޮ}j[I 1@MG0; v+|$ !0EX `kl !5pA[4~ؚ֖E.u;7ABfc{\Xx>!BHk1L2Ʌ-ۻXӑ6lY>繲R+ uS٧~rp‰ua'}oݱ&KWl(bxc8ɷ-9xIyѧwxhͬI ; }p7d{uƊ2]3ysᩧ.L}o=/FU?|n;]ۮm>:{ՒbzaS1/w箹WGq2Aͪ$X7N!$z#Eʅ/= B|#g}fiY>Ti3^80+Y=Locg:W?, =gs^+^U$C&F!Z}qW'7zs ߃\}0^t*W Zt²~jF\8Cv'Q6O5yaB]q㣏!8:f˭]w5ß[^7j9Ĝj] +HKqº{!v]qӕ_[ ;'r~EÖ.m:8l6*n7BU溻qPL{{+; nG.΀u-#/KΆ|Ʊ,qV/cz"$&vK:Koޓ>O۲c۶{huu4K x촦gedfofc!`nX6)Yt)OTK ' ㋻#,zx],KHd=䩉ʵmמ9pጐ: IDAT핎DzEïuGD_|[޿OmrIYձQB[1Hhع?r\/k+g;ܘo:!Ηpk$ZܴWoo䥾̎ogB3|u!Dz9=j3gp`Rd9}^OIPܿݕkZ˾poE([7N̑uc1cSf ! 19H'$ǻcʱm״wv4qxgkmTgTBW8rTkKlr(gZv(h߮84W|ˏ?'"_oR '~yCŷZ^^sn}_rxu_zqXr+d'چ&w}٧.~`Z}{| 1=p0N t:ԏOƷ'_^wFgb>'$~Y+'x#_^xj%,IN wOrk4֟tGcP ;+MvM/jʕ{'%M+?z =ϼgٮ}k>qї;'^|^]-#X"n3Jb?Z ag6?p7|+gn߼Q";ᝇKC* G_痕fu-b&*]@8=O~_1d\8u?=s73WG7H[c`x!66+qc,aݝdI= %$9Ztgg{R<07|(|U;$ٰn7+W]_gU I{88sS\ݛ<'_6rԧeO4]㤎?'k?)~綏]6k<Ķ=ġak]&XSH ן!{va:|u^nk/-:?7S2˲ poKUpQ |>c_P!?Y7 :ڃpZ[VGWnYpvM^u~y1(1 }?:˲\˯h0.Z[,nQpvw)47 ]/JBz]("7ݢpƎ?[At4KY/mŅ}nQpP0ppbbr8r%{S[/QOokR9Y:]WV]sf"dBY"ta|nQz\8MGBZ,ylT=oݞ[2_Lp‰DT%먿'zS.&R6_C7 ۻ=ߎtב9w7lπے._}o}M$$tG_Ϋ)=%nB~aƃֻdHѲ.R +q/:.soy}ㆇ?&r$gLх{_m߽@6J#F76mܰٻ)bUp_C%,&ctiufxÞƓy&܋>z»](6^ǖq˥II}Pxۨ8O4ǯ3OPsFk^y♇W:!l=>7S9S.gG/ /굕*wwm99xz偆~se5Jy)^xo+^z?̃/" /7j-Mr<%矺T[[Ǥj>僯WL#Gv=b3}|#}0qTV23l|߫O>3Fu7Q mcfc_xqh,9vBǑI>M!BGS?E!o'?|{+q~yQix5@zCڻ֦[qkkGқ/w._C/>۞fڻ߿ҋ{P|'O}/KaqQ?꘣=TxGtKK^gXBҥ}˟: adl'KqcϹ_~_o/DRTQө}shgnɭ'%0U~ ߻ ޼?~'!0&kt 뜍ogoa<<=pQ\`%*(BoMG7{q^Þ7 Bs`ܻkOyy۔gE}wށV._4eDݲܲoWoċZ1Ʈ U~EqlĿͳ+.G߷}u>ʋ/:ܱsΝaaQj+x~þ]>xC_vVQ%@u=ݓeY{^{k簳?u~Ӈ~ofHh-vvi:7|zaJRuߺ/n;FWzcu,:׷5CzkPqMI|b /$'P*\MO!ocjc'~SOx1+wNLǟ>u%?jSDl֭۲qP\1=.c?.ݾ1z?qR:˗u7 M S{%_KԮ םY_p}SqWYmMߖ:ï?=LyrPuVU2rk <}sLov 9^&KDjcj熻=/;=' ܵǟ~/z߭8]u=v=>`a۟|i_q\{D^bMԞ/9;;\O C-ǝꭿ@!=oe;}7]Eypc3,qH]PDeN,=C߈(y;eu I({/FFRG{RItķM95w$i)}g>a*bg菋&y%szXt?!l~u#!T9!lÛFUO\w k_+?6mwFY;[ѰZōupHrb ز{8̸XF:ٚ~괯}U<ockQBӣp{G#Lqp,B9*/hi`F$gz6oJWƏvqgsO|8Ȏ}G:jm[CiY8c%dl3ӻ=x G_rfaɜ{fKϼ ΆcvlkJRϧ;D{op`U)gxA䵧|믿+_{~og.,^sU5"#sn1I"!~E>xh0YPVZy7_ܶv]6ԽekT޴/vb1+ZﱒYjh6)w4Hr|o伞T_4c=S Ebn=ܩcX˟ a]ca@2)Aqt ;+ /;j1aFqyK=_NϨkw<}`˿ 3YV,- E!Dm'D0gY#,W͓!.FFپ`^n؁šB jiPdaH&HFBpH!I +E8ȵ5EEi%]ښf;BLB G .i1*Qߗ5~ ! ,0~w0&'775Hyx-a۸g~Ǫ_zg8Y~i\ΓȊl _leD{7C2>$]z\p=5.~H(COv0y]^5m)lp_9as|(m͆a0#rXճbҵUc5g+ήF>~((mw|@l?TTYIkˈ!QKR!xy7w}B'}zLeb)m%'Ȏ~}uݐ7_ϲsb OQcFK/o\n~5cHck99>1 !Y24@,B(_i W,>`:[),( O(ƼRjq4?\$j?aq#h5B8vߓ-oH/k`yRBZkLmy\FQٗ5N+UMȏ q2q'6׎ͰjA @Oa/2*)/hd%7v_LNX?bUΡxҟyiQ^sڥ4<:n=h('&2a9e} uǛ2bM7I1*9Eo©S6_b?-d?IHz _JDޠMW7C,RQSdx3RBi#BM(ABAmr8]۴#ΐ] Sln|A;u?K5*dÃ"ZF-8{Põ=aqci:!~kM<.Yr|$z6Z6x(эҐB\,Ɗ"Ȩ }&)W/p Ӓq=tƫ`;6Bƚ'i>g/ B3mAUQ #/vlR navK)lRY%,<‡ wKu}[n_vf?PC 4 IDAT&[eJ61c \hf{ES[k<: A4alء}|,\X^!ĵԶPg1|FyX3.▤'d5\ɖ!%<6L}XZnLL;H?O'KBR~]EnZ-Ecun\g=laK;{rmLw(Sߡb<HRx#ױ9)\BYҧJbݰ ~;3H^s0]{EI/6юDzoKzؠr>] o^:5#}NQt0Y;WY0;٣$&>j Jv"<A6b8Ǽ{-z;cg~nCQ xG,""\оm3wptA{!@wF82;1$n2>"guM leN-'v藗b,miۡ}6Ouav}!!ЏLvm˾+ZmՉc4.Ӷ,9ojDN #^gMv6_X<3O,BnGׂܺp nDď\mYК-[4=FqdZD|كvΡf?ᇳZ} !BT|3v 6u+gs rfZ =63{~|p D8ځ+6 6C~E[o}l+g?~q#bJ.JYz(1sC1⢵ a{qNvl ~Q3ޘ^rS B@9tZʲ;[\k7gGqwT|wcN\ԷE'IF*ct8k2drHG9("a;->=["*%%打ͽʕ1\,0/ۿ-pkJ+?ےc`y[& ].aT.>]TkA_Q{fW"WX$+3-]u.dQtqeWKbƸ\eof*)%b%~f2Ed9jW_tkJEMxI{E>;ko8>q" #H\t(At]7!edw'SQye }eՅ}O h;Cv&91B5|'T,p3obʱS|XoVULoyYQ|0yD??~T% ܼCc,ob{Ԍg#^!&9 esW$^N.gկ)'533>=G\b/+dDjMhv¤aArf%sgrg֬N'Nki~Ntnr)9jب'ÿ+i7k^qZzEeo`Sg(ڟd=`3\H))!aN+v-i;k ϜlFn$gط3^' :yȵ\|Pҍ'~cs̾v?Zaa?컑t;#0cdzskށwi)gq咝g"n͘7Yx755#EʉJ\8=tJ&j|tDaOwgp)0jë8sU%$,l8b z%&tIq dBJGs׾+j1B>:hC K'3>/̈́s--aTc96^ɹ rw7].j:Ds,ҠQ{ڑ4L,L+G+&2F8hb y!W[*R8Ӷ҉FGz%ݼy!AY1~`.P@Kɢ*[-!at~p6?eոy' ')mKYJRB(_J1XDK@%\δ0O+1\T׏JRӕ t' !VzDëI1 ^U! 7cDއ˽Iݿr58iiϩg֢ɞlQ g20;qac3ticX WH#1迤N"?+MmB[`%K^/b,_~m˛lHM]bȖ؀H GOd}HJ<ϣ?աMq3__xjx爡إkSG24q~1 5:ʾ'!PӤ$UHo-q .ez2BX"arn~5cHcOOOL*C!\N SG:ΎuG$gVgWa#]ZsfDE; %j t pTto. * j5I5N-A)}KeDyV~ Pn k/y x5Yk\,db+}awT=.#Ƅ{X~z %ƼRRmT@r4FCF%_ jY 3}uݐ7sbQuqLOY"|2-DK֤^B1BLhqAvNBz: 6'M/.^>bύ_Du@W 5fzw_g׭w7EF }O}xkZ3lgC^W,0'g3  ;G$*k`(J9~`X~bJ77U&= 8^0drªCfzuN :33hi1ޞ#W5alBrae-`oEar,6F䩳xXҐ[Mͪڬ [+C2k!VVxE3m.)6J%˹'2ѓMYzՃ\EIdvEk' Donjl5djI %#|=‡L=̕7վ)M*==]ܖ}t4_?B7)zZ6tA,dU'.p?.3|ʊv*̊wGCƬx6TsS&I:g3n~ϼ½u*W+`֪VqeR`GGa)Ƃ` fѸ@'\qvqbp%,Dq@'mM4sɖ1䑮([Ε+IW$]Y'GB^côz)n^0n%iο]:eъ_r`snw6V3mRK(+Oy6 ^޹]g[߮xM"$}|{@PBҧPU/_^wlYg8!~Ï7/^eĚ+o,F+0ˢ헿$~HZ~y_AnA򔇼5g)jtHRTPl-2oU}kht?ҫf4{Ux㇝^o,ùHV֞ 5URc@3i0AI{-s>zm3XHZwq/7ӝOc`&pԣ7WڤT6Qtu7Ġݿ|[S,#֞4T f_In7jDDFTG=\"sb*+ Ijw˚Er;i.P@\=s#["A7L#! O"9"ABH;\LsLuBגx' 0백S'm,&OMR{wZ/p Ӓq&xB|P+98Bawpd!YKcMjR@'VH$oVI0g=laK;{8өa1 $)~Xٕ,gS.C:Y &'35Bb8ç^J P5F^2EMK>V 2$?j>.6,J J8B ۠4,<x5dfV7*nh&&bO5j@q|$z6éڞ|FyX3.▤'W;M(iaW?xw:rio]Ƶ T='YI 6[rFٛu2ƴ󏈊td $Uf?ήmu쨥J-ʔ>߹9;O5^?7$OPNnY@ltPG.ԧ"D!5um$J ɖ!퇕Puۄ2k![%bo2:c;c{Ou(a"H74 ߲;?>ȡ|A `9ˮGnsY?;G{4lfF}i80\lxB~S]]W^tX{2FYY%]2HWG2IK9 |>Fn:88!NS¬gv!QğM<:#4k03ڍV x]Ҧ E1̗!H~x~JƏ?E:!Th yauFbafJK/}`|DsV7$ɒ_y?v1$h 6R耹g^:g*/Ɯn󯑦3EqnbZ2D싇6ڙ..Y.AA8/ŝŴR3:4!\A`JJcL"h !4:n@IiQ.JJ|lmm ~Iݨ38cMsptƃ ]]Z~QKJk ,ۜ:G  -@}I7`z+      մʭ|NF 3h `Wn`!DqnYra>MzF. ch ]˪8ᠾ䁾 |2A/5``LA"h€0c, IDAT8bNh?Y .P A n:N  فF1C(`xpEL*i&Np@p3"4a@BJtSR[3,,1 Q A-y?w0i[}ƍV,ٛ4Yπ|]۔=QL\KtO̡u/C/t|^$kN`-;prz$!q盿t=鏂> kX\swv!8 'lc&e4LAT]͈|#_҆jYKgQ̤494eFg\뗙g_yh/=l_) )JB8xe0S $߄?+J>ӱZ1ٷ/.zD%o]I??_ fۅWQӥ%6Jb 3>9!О'GzN4Fz7:H:lt0٧W"ߛ3!t~!Xs0*Q,ťvj:A(uܧ}zGFm[b?PZ3OEZ\)pDaV~׾2w,q=)\bNy-\rD#u/p~n֢˭.|+$ug~CY$(K;lYzP j ve.䖕Uʒ#!8ȍokJ s̃NrM F1z-aӗ-3d&]uN=2~|/,xwOȩ6\}8Ur؉7GBӞ8"`Jgc]u%|ȊWfX6e_38eߢRҝTFg-۳s7>;Ǻ%/%VIB +^_=k%j.q`ێCͶ?͊7XLAWY=!uM}eЌD梛oD"hٗشtPdmKy1t16.dݐqӏ~ׄ+M?oPgkQqZ Iy8Fr_%<-x'v]pui.^s5x,:l~KN-mw1fu6("f-~l}Rt:ݧrA[yX~*peǎ/ɕ:d6!d:bR'_11ECj 4YL>3{)EYC'Z=3eoW|}Ճ_}Y? xy[ "G.dw82 Ya0R.h!LP?u5l܊C00^yyo_* ˶|nK:4|b8^rvSb˘1똥VG嫵lyveLYwo>_3ha>pH,a*ijb2UqO/z7-Ǭojb:Trbo6lUd;, BӞ?m#m~awVbP;`qڒiC(wRƠ.2VI>3)aя > C onp`wW{\sXyT7Ls>f+ !B;!KX~JIފ5R݅s[dEІnܗͯmTY! .+bן~v-^_ kCVͻ^9[KG+D^xC:^tʗuT8B”+/رGoM!X!- ז cƆ:a||6OܽU;ҋ:lx #71KH`q,\c|wj atDowfqu̒;F;1i44Aul?ʄYGiK('|9!hۤ+ |v!$;5Ewk5bt`[̿ 3O?S*8;;Z00ƭOˍp$ImW`吝T+ =r*n| (F?ܫ-`.q3.9yA`}|,vUG~nQ[/V(匄ﺘ]T=,-ͻ׹JP'&9F!9?Wjj?|>xrr]wwOW dq9d ą-OML 6NH ˊvnX tRS3.d1_nЪPAnՈk+pE,w!rҊc۵&ɰa #eMuqO`,720=­ϦmsWjܹT:zO&>JOϸ~+Jd>cwF⳸o 䬔 ݈kFT*i <`/+F>BH-_Ka!)(Jq䖖ĺZTI(k̫T.lh!86ۆ!T;) 5~.R--QlmYxE[zG;R2O;3#lZzv9=w%I37|1.XZ¨PNYtӖYE|iݓRP_'DVV#zRV9͎ͅ>֌RqIsQV#/WzZ\\Q$BUՏ[ojZ^VBxo_L1Hid_pjŒ|,-L$2~ȢcT!mcRڇjvDBַK ݂-|ݱqfd @Aނ pPYBYOdk'S:ݽ]0fa0m奚޾6?}|ŔjQA w~)U= V"UyaaѫߞjnM;`+Eku(Baxя]kT]?x7*fp歙/?r'L)1 ac`xu Vp}B=˯eWizadDE _(iPܨaFeZ=F_=Q$r2?8lcF( O*=ۏrtF^@7LSS_ά- N(eXssPԹGeMb9y2VO/+cGy*Nbl0_6FyQ d~ƽՓ!\X[\\VTZS"W(:ĦdF1j-Ik0_ ?} ٪Q,rlv;嶨S'vdZM;i{vz4Q Q$xY\G̜p7ITu 6pXNqr!_x_^)iL|%#2w{ōb`:\>`K\r+J~ԅueIkrۮZ(:$f|q3[Hrk0? ES[t qYڱdغrƃR:.Ja ӵ*5Z֪&;q+ foL,r_ÔF)\=+b!.^X[s)LqIᕻ͑]ˠ,!ε5IueSKi̱+O wYz即Z6lJt5Rcot.y9 21?bU d#5)XWK0u0{OU fѸ WWQqALnW*Vcc]X N۳z A'N+ ʒפ}`{/O ⭩ L.{ rutrnuI2Ո+%c/?\(Tlkܶ1Lc,t8 >|0qHYxZ8%S:|*E}¹&ĮZhxK['ROU!A3 (kWPiݦ /CHVr\Ր[h.:ο$ $ (r*X99Aҭ9ARlBTxk.21NlZ߹BEiw?m6sEHk?慵_e Jp?9@H`kFf0,\C,lu%ؾ>-9>;ym:O:F m "$zrxuK3SXrbz촶 a,ۆZ @{nnZhR'#dmjhIM3MÌG.H$jxTXs`ą7LW yuZσ~vKCV,ۿpMkza.ד_iE:41&&pb'ꟕȵd t!oٞ]?frc.;FfR"Ѝv{F qnhAİ}I;@}^RGR91]ƴ3kţn >®4 9M_>ŭ{urCCNu4q;lcՒ6lSӇf1yc޽z=9o@, ]N5!%;UNs|NPE5)x}(2R,}'jG6BʴͿ^һO3tAs_}fib7rQ֘j)iChgJx﵍.g@'s4tLdqq@"jѩ`@AWC,~Y?@Ç 0`L#!~b,&1zwi''.BG1h-B4J/@7;/)NhFsF1C(`x%AouuȂL.Jat܀rү::+3mF酠ve F ꂘ#B._3%T% q}դ[通:d E$]Atlt}y=s ":1#06}Bk\;ffҹI>:cCaa1ͤsqcj BN. ܕ{HRj'M{=SCͤs+W<{"[I,Xۡsz5Z tSZ9մ04l.&9 0 @ @A8W Ю7;B B  snzN8h "06='нASt'z. fgy)dۦC| FՃ-3W$dTY(@/A»!i@8atInmtw(_(nI=9vU`vp[Fbᠡd!FC nA:H VJUѧHf:i8T?<&l{x5sTݟm&z SG]u 30<5Md"46s(`L3FhL]d]U՚k\kL᠑]{NӟI1VOZ q՝Osl#vN}pپ tp؃pfr iJC1K4eeqV*VfmdސO*+%?>V?孒'媤oJsاN2߉4g1X|Js膃*GD]o@,B:ŅLps4/7ҸU*}9w $>\wߝ+0Aͣ2au|iō!X=g3sU&I"\>|C';Xo`/v.\%}W퉕gԧ)p7ZJv"sSѦ*)IK9C7B9SMQ8e@mkTJ KPN(/]9%WIUyT֋42haW/i2L$M^M*P=H딉\N Hˠ9NyѺI>Ŧg6c$ֵvOr,fb:5ѵ[ST*ӹp Ke!~h~EgAZ'VL3OuK]Ft(WNCU<ӕ7jTyz#եaԗ jҩ:44/)C;EƮO5h@V>`]NK+3Tૡ IDATxw|GJwwIn1nʞ-B)eS(R+Zv@Y.J)2 eQF=_˞vlK]t-ɲ,ْyxңGG_=baCcK~dM*!QĬ1Kq J! 74H΃dB\hP"da %T `I~ߘ7F)Ty* ZKxr0)|x\nu=jnԻJk+WK~(- BHO׸$dcVt߲4M) LGG|㣁?bi.,vS^YYYSRZ0l&J~A@Db~7 H,Ԓ-쩏O>}fQWz !---en;ukS~ C?>?C{4C6fOq/)xltx`h70qD# o;?SS[_Y=fk^;NBH$<27:< ҭR.Daw#=:6ʲ,!07rY)Ppc|L/Lm+Zݥ,ˤd Fz:d~}Y0S'fx00ѵm3%ؚZsk 뽇_ [>@^.)4Ϟ.)eY[Lc7 cKZ4b ߆+:D”RWq5[7Aj!|l(࿻d2g㣃 x pK.啵6A4ncUYy~膵_46V;tfB{?k<޶}:ri^@nIbǵoY׽ms<}d˻s+VKPuwnn O=4Ƭhd˦Ճ=)In.Z-V4 oY72jIFۻڑP ]-gb%jO-Jp 7K}+683:ܯ/GF]r(FG0nkZF"m5 #lMx<ԛZIֱSr: vwkJ twy*%U%U޶/Pq\iub1Zq[c TŬ Ƞ+VltdP}Z*_/oc:fx-Wq4b۶jc޴yU1k`P<jM:KkH?Ą#2yR);2Yrb;R8SS ˹5gŢLV.mo|4+Ȅ\S w鹮YG0\@ڔPJ)ZX iٷ(Ŭ᡾ W.ͭPbBhzEQY9.W ܊x\vx< V 4z @x$NZ }LVjii;C#Czbvr4 d(V[Qp S__O`vJ1ϗш<ueҊ fB>D~s J1k04dNJ |HIA)fDt"EnXW&d($Q40Fy&*O)f8.k3';haa])xVօV̴t]X1+rЊ1 7@Z1@n,b mܲҒr Њrd0 ȑU|VUB+*iNlEFJ V $fqd0 Y0Nx(b IهxB X>A稥aYhŬ5? 7Њ%ZrdWm$qBAn4@,ۊH~߻ X]5?6*?"k (7r-Rm@BhAcc+sTF v-j,byG!7@V[1tH`z4rOmiiP'{Ղ)3]3z+W0r~p8l^L_fW WrՊy^3?rz PuYF*`V_abʜ}1E \f~B?SjkhY ɲɚUdEP_IEs7@7Y>bdA[1C{1LEBҩIkIQ QG@ ]FS \Kȴ̕ ɏLb-^yp-k1cjZt*еK邅,Ҹ^C 5Vq.8=OHB,;;W 5nj ZU~qMU657 !"I#`"#~>hԳx]QwZ{U2MIroªujS%AnX0bdB)f+\('@?>R.Drʾ|cʨr'yʥmj8k'-.oDrUٱj6AnsnbG d?>['׋/&Wfooo}}=!r%\pz{{?{SΜ y z| !GuVdUzK<\k(,ފ%OIwGy$LCjx^a$(?N}|/3a %J^Jʋ7P(9ж)gNG i`*h bM:F8z1*ŝz#'PDK5yABq\,K(3A<b* EB4*P79,Pa} Qi.P5e{I4b>l TSt2 .-TBĿtP>J:ZesTp)plF'joi[w{!/ۊϘ٤Xe+=U*S^UV^I~0:8p8]3gin* A1)h4+3N) Y S8^jY?KM'+f5Ϟ0(agE'J#d7>2:2 A tĬa]!L-Ka UTTԥøfn6Z`VM縊ɪ1Yqv8 &]r@,!Tgx?7 *&X! ԷbҺl1UW LFӯh?ɳSɲhRۡv78U 7H|1k!cM*cohqp46z4, fw8r]+Q2 S^YS0 t"|b*ו B &aw8fWh}qfٵd!eچV~@Va> ׵ KVpϪm'70EEy#l{5S*l3 !}ݑ%pa+$;Vzv;qhb$#u*? W2܊9uM33G0LQqIۼݽ Ks*)ZXUz1+!euM6}p'Q'c4 ⟼cD,H^x`b>PJ3|@6Kjg4Tćsw#YzfCs˥}vJkPr+Nj%iلЄF8͖jhGBɵ +QYWβ|m⤩SvG_&eƶz* TxjB0P]Y ي1 SQYSU3F,|ag+)-lgD>`iV[uM@fZbVB˲EEnh|lx2.!";Y~G>`M3'5\/ؠJR`̇@\4d~6ͦҤ)OUڽ\`2$B$bEc~j2vvfSso|ԀU@Vp:>>Dt䇄Dkd*T&&`h%^;S϶L(Py|79ULL:X,F(Q)!)Ik@Y!WNgyyuYyeeUj,.)3oo|w7L{|t9.)EjǬo,<πNVbNSyOrջR;ρ%ܚϤDT@R:q⸝w<#󽤭Hll[1WQqS^Qp&c+j=UѾmx6*JJ=u =Sm Ә h(819 ||+r 4w~5/nh#V[v.BbH/VNK_dQ|߭dPhrvUDihn5 6Yu747old0sZ%%Tz$gf2o%WF0n1em)F#53!)o ]pר#e[y3h])P^ߚM6;3Y|EcDIˆ347yD-uS+%u])+(*.aYÎ1CJ!rGFC!fbkڵ7&r?_>IPγO=bP 1+G@x*= @"} ҕ/ 79>3iiFwvQ9i:2ǪnT>eB@, Uq9*a+4}}= )x<ȇ<\m򳩜y/fy*m6;0'v[jkOJ)FcÁ ߟ!QPJFY-O]88+]yfŰ#S%̿sU%'!d{W{S^|VўZE`·uӚbwICSk2!k]r\|td7> `wXK4 fuέ~h͍Bհl(غiMi֜TBbVJd(04ثZ'`Y e^xY’nH>Xߊ'CĸSUYm4nȏG ]B7ah4K2=f8n|lH[̏aǬ3\h{ C@F"Ã} _0௙a{(ph{WZZZe_]MmNW>)HpxE45UWqhYP@o0W`j ۧV@bVJ%RDg[P0< Cյu56BmՂ IDATjdx ݶK֕MGȇGhT1$W1+q}ݑH8 K^7uJ&{ 1+Xd+F)Dh^d!Ji(8ѱemH&'jcGgdmui:}]}jV 6.m{ D0۾m[cDy^͑.Nd.wz vTXNV 6M[Pp:Y^RJ u/A>Qn"potF]sf4o@Z鮢|}$a& gӈY)C=YUBnX?rs xqf '&c5Y{ j83 aR㸡LV. X4QtF J%ɽ=kW[JN"LV.m`4(#CZZZ(@O:x+1LV OJRxFNJ9mc!70 ÿP;EY\bYa\}@9o,WnS!u;ͭrO<J bhkavJp8t"7l6&D-*,ܖGH* 0n٦Xb/ N^a4R%~WQ*g܊ sxdK*U_O02Q!5 Mr]k8.>%qU=ǃxJ?fC)dElOh1!W4Ky澾*J'd5y޷^+Є_%?(ARRV,eiiFe )Bk=w%9;V\UyB_UU'PF5)ϣ ׼2iY$7XKCoNA)f2_A8Fؚ߄LjJ6B7m<> (㸄3@$y6t'9G|Qa83E~EBfBO#&EF Ū'"SرdPDL8ƒ}D2u0&*y&V_v+.X(L>ERP pFA # LH+aN>"z,)9V#0>/_xrB$*-!r+'b8>wS(br"]nI.?) S$KL夒 L: R M5+&80O ɻI*Z+motDve4=`P`vJQ=aC'k~IMwp'D<΋) K ; %+&AxK*j(t vZܡȈUB/%:"7;Vb  = [-GaWGf²(ɵU?\XQ&his4~ N 1 cD!:"*HHK'9,kO%TVh+&m#0a \EE4.,!l{&A0T"U&[!DUJ&-W$FZ5'SCWO8 ՃLS 3DR)H 59!0ćAb&ax?ǖJOQGcLNg8nْ\  Uɷŷ%m #qUӭ#JH&H(qeZ"BHQM+Jv_ʤp^c` ͆+5x<ο_&ڔ>L o!IdqQ I5G 'ae 3BD>r~)ElEUNTy 0'rBBy\\j*fSl&IЊtZ V^/zXr X^Bϫ!7@Z|VAn@A'HéIJ@Anh ߊeE*^<_;\cc+r,w")$?1?"; :7@e`r6@>r+|4jrdeC${+ЫGS('4ޖyW-ȑ 0%03bzs ! g V?eN`~jr%WUʨ|0#P [hdFIn^-n&[c]r̕`'?ի&V,Y\EZdY49qt !&@d3$]$$L16)`Q}deD!:սp L\ Ȕ,nRbD~kf܀::Q:"ԗ,0s&N5QLY].srN|Xdh VLCʙA6zqΐq<'Fyh 'krղ$WszkrjBg~Xn29IT>zs7@%ti+0'`Vy߶PйF OLҊIh+0 :M k !9[1}y^4Ց1iev.U0͍P85a+dS >?K\\)* ,Ġq4F4TFz]V (_qdCEf3l8  -|32(@;n %7@g;dV =n@Y(TPUyZ10B Xߎ+/X.bVQ8c)}c~ߘϞnGSj/]!]w+.%k؊܀)k A}cw}ͪ!  CH?^AЊYZZZ xi>:!y o`cFcVJ~}+/VcVUB+V wUЊ Iv u?ɿVyE9  k?#>_Y^zUX\1C+y) LN'O֯UʤcYG'iNg`vJD2''.2iŜQD"Z+mRlQQqn J=N'bMewII6k9rVXR.)|dʤȏ:Tj.4hiiI74"@)f`]b3djB^kuN)fZ=L}}Ge TU#JARO+@nXW&Xelgf+vͅCFKvJ ˺K2\r4b2Mv+Bj/Z6_g2 Yb05uY @ިSBA ;T fM-[2?֥Kـ:Nd! RKOyF 7K[+)LȲl],MR0 /nU#>b5;U*n2enCuݥe 1 q}IiYIOb!7KC+VRRVRݴM-i H}Sͦ4RǬ,kk=W ֥k=eF ؉a2O*zA>Wy*J'JJ=UFW*jKn7͚0Hg,DMdUKI²%#7+Ve٦TvNaMҭ䁢b72YS:٭ 4`]ib[8i԰((םϛB6fezfCk`Q3*p46TURilFzȢ`Yq֜ɠ7~)ul<d0&tҾyM(ZX@q{չ%k;yê`pB"pبM/^DY!1&x Y 5]6w/P0LQqI;Eؚݭswu-*_k.Kr?2KN#`%0Ա'gMnw]8OcM0LuB$ 䥒RO뼅9,KKtG5jd-VBaU1t܊y*-e m{W^BUUhlns1f3oqgVf*PXXmiۥf3h"pΨk*TvwnFY SIQׄa2QfYnǨJvpK8G+S\Z2no1dP[ʪ>3͙U.ihjcV%aNWf&mLf0pJ؉u,!~w8kO:q+VRi=]ReJo3))5*Tlv$HYVZY^DOwذ.*qҒ8n`IB;&ӸkBS^QZ.eY&/dnwTVՖWTG"ᑡPݮR\\RY][UStXKYuP 2% ၡϨNVvJOB>+裤3{s9:(01 `4b alvpKJJ*KJq3٘kޱMsєRth4eBod!u4R ; Bu [o\W@VZHf9bwIyyEm*eڞ<=6 yJi䢅.w@6frjBH[W1e\ 3 9S*:iZ<{J-(.w@)7˕tv׶^|5ɿ5aQ<=^4-< 0;Ĭ`vY!fC f1+bV0;Ĭ`vY!fC f1+bV0;{+{xVsck ]ۿ\:׵bV(8|ns_+ k$X=lE gVsuE{-nCj,?0H)AA}G9< s1YhJ}R*1+QLYWRDnU9_5r{V 7r~^X]w~NI^sŒ1+Qش#ɶ=c+Vm{\\҆@ ;;%wX,U{-yQȗ\/XaC1֕PB({ѻ'aa@_7=|)5?⨛56O\g=ф%<{N҄Y-.GQK/;9v^WISvkCn+֎AgQ{$p*@SzZEǟ×4W9 ^Xz/$ uYM*_xO?v/.c0#s⚋x<~_%Ma ! }nVqb5Ugm'_uؕNx˅ :۽m}ruk\u/=[5_s|_n[9YNOR"Em?c?9?Òoo'VLD<)}夭|w>;{Օ0=+8B~<,z2J(v'Ow.9g1u뎽fE &bc;h3.{?8!}=Ֆ}O\y+|t)%ŀVZ3j#4бbrAk}[Q&cnvUKQUq O8~Ww^d2 IDAT4z/Pv l_}^Eσԗ)_yѴi?w?N}O?[-t-D"`/]j8y=\y;#B:6r{:{1g˘φq6zNwn9K+s׃qpҩ1Wg^@#dU:g^"LhX#p߹~7{%}U_&ڣӓG7;. _}eSW9Z;Ÿnc.Y:;o|EsG> y9ۿ,vٍoĈE8Rt뒟~ȝϮ>]vU\6j%Ym5Kj?2D!_}Dqp_.i Yv!!.8~߷^} ܄MAJg?Q[_\r7ʙH/wߗd_qG̭rOn~n'7Sk}h]r#=&%3U}Қ9G"9V\կxvKm}&rD^B_|:jQe۳Srh._S՚U'MOn6n+.O{]B-'5QJ;`foM~~ Jl6# ǘs=_|^u~GӾE+ڲBi}[VۖKn}X{_ƥQ襠nbG0o_$Iu-x9B}?^s4zZahޣDm k_uu{:\;[3rթ=x}N+-KOwi{KىN/Bt-^|7zkf\XJֻLdo=w~yw }W^_5^unIӲ[z_.{Ceywwns~}@KIo[O߫}.247 +)dRa:J2uثfW:'HF_q[}qO:_]j{o웤ڶzg>QTX_F3Ijߋ$U1+޿;sڨwU_~+[%3;~4q~!-u9BXE 27|@2IoZ=N?|ysqK.}$?{CfdѨnw]5l3<}?%]؁Org~B W8B>xMސVS2S-{`m0qd": Dq?^ZxkcN)!^x!ͫǿgk#KZ_ݶ瞭.sKw8Jo_G=p-ipnM+;"eaBh۾2Y-a gq_ALggݴBF?WZ]}w+ْ0[)_xs+v;aЧCnCj?x˟;bE'B6d?~c{w͘^緌h͞Zs]8f̯'Ock+evI#=@q=Iտ),=Wnx#ip8FhtYѤ)!dgƧحp_U[cGQҰ{g>Yp䞭%Uck:b|#;}fDV0Zvc]C kwoX=ʋf8Ky|Zzʙ$.{; ^僾!YpJc]%'61 Ōc:;zE CHdsys%O?9kK8'v5%E]Z6h߶^Φ2E?[zm{.?|r3UJx,>՛T3XbhQk>x̹sId3QflȲ)J!dZC0! !4o4w5m!"a/] r߽b`Uռ#|抿LN#^^ݥ?9iCo}s,eGofcQng w6O¯ʼ{a))#bCa1}ns[|m[Ŝ_jiKq/8rq?&vCc!V|g9ᴑ);m 1;3IKݷABzE9&ְW[?F8B5vQ4?zŧ~polΨUp=ka %$:mYٹkZp9ulG0o_7XEWo%qxwjnmklVC);, Jws3Yg⨚Ud|*I\'8IG~gK}_v\܊νD?oܰd(k)E7t?%8for1*N5V(%^>ۃ;NE&M#Ͼ2J pǛ7^=xG}C+}zԳ>93oD,׼a+9S o}Oyy{Gs3ν{nBc?zzpZ{*feg|㦫x7HCOxWnͽ@`|ދZ D^6Bb&|!g'S6%Mڹmپe0꙳ߩ )NF5փOv/LvEmy |S<񹿾U<"4K8빛7MƣINs,> /qn٪*u^{ŗmۓmj%FFzƣ-iYj(3ꦦ∿ohRv:>"/xB+(w+>w-7ք#]Ć6w>;/.YdyyJc=t}w-q{~gHprX|h+;Aq))e$3h>}t/pb^Wi+c+otgB]Pr}]jIRhwTzOy/~7mmOo"dpc괥'sDN9=|[#qIw~ӰėIfBYW<8}_.}M)yisDzw!ѡO'OgVjZZ{˿㎃?sJXB&6./{/F/7_sKn{-+}^x=ΑL L_JXWV.9d!Ui獫ӏ=@on RB⃯s{/rx?>Lc9E#oͅ-ك7z᭿ xC"+^nBߖ ڟ|Ы\Z͎o|ݢS|"B~wL|>=^i_nїhz.{81z67{=___JkykJ;۝w#}+cG.|{:ѱ̯ذi0F)!׹~2+w=zvJT7ރ3o5ᄑf}+ն~Vt-|er^N&U,:ovLe3J5e_z^n[n|^}U|xYJ^wl'sG?$ٴ#ɶ=Z b2!4}m/Gُ<;] 8 )Gُذn~Vٓo=`nsSl kK ;]}s+]agW^u ۼ*:gNE6xw5Hd8yUL)o]%v呷g^HdןO/aEVw}ouYe앳G}}k\pmGV|ֵտ0`ّZ۞7>~A^էw/g'u0:汆郮d:ӕYx0}{UY2q"`I7|HtuZvwslA:ߏ86@: j>wg ~Ts  MOYx0ig1RW]q@ QΪuX*] W]q@ ERwh BMބsU@ 6(fE @tuP̊@ ꠘ@ A1+@ bV@ DWŬ@ NK־쵉@ 9oZ@mZޏ} @ t˨CumC**N===uR5<^I@ pr \>|eˠ_ {s)_@ ܼv"@ qx<XԑRŬ@ VȘզho@ bV@ DWŬ@ Y@ ]"@ :(fE @tuP̊@ ꠘ@ A1+@ bV@ DWbVSɫgvjxŶf_#.@6Ku8.ݶAHmEgٳumx #H]R,'n?oZVnG[ D)&K?{@f D GHe#BETZTƬ)^:4Ҩkz`&cEF\k۲6 <𺆴3Z(VCn$1Q?rm-k,xdh/ck47hn<;]ӞK7#b"bٿ~Πnzt\k vѰs6ԼNb5 QD݈~] =)c4mJ )Ή:t|0?unhhBm5nA.t|w=GF6DA{n픯4ўިW}xZGcǾk[yៃ'{ljSkhO#jtDZ |ʢ9沜jEgKhwcH;, !ϾvXm-.@nX8^^>r*d2-|kyw<^{VX\ggܾR^L3&Ѓof毊07uI0|~Vꗗvo{B3,]|Zo{}=8sNw =r`|xS*Or< iq]2EНB:k֌~LqvwF(&=nj`[=^֕C7խGLw-vx_I}Uv~.!/j33#Xx)&+۳xtɜPmcNM{qtO[MRư:1Aɸg%1}7.kA%? ?*.Hޤ{ 1&.x݇=^fsDJ)1,}G&?;U'jfu IDAT7Y8Vvͧj6/ILn{ 1zp; gn w\$5fBQsv$j-읝 CQ*ڴr7ucV݉O id ( ̌f;tcyHW"$H-Aޒ#^#ZQZ3 }~v"I1ofxً䴴2\Iw}ȗOJ8ЬHjV ;H}Y`6vj2nڽ'踬f ڿW,!T6N9l2;??-hȄ1` p͊ZgX3$e)VR;k81ae[ȫJ~bQLrIF}boŬ,h0r# 忘Rj3OIN/JN*$X)*6=:wFaIi Q,\N7Vv?r*.cڴ@sNw~֔}M,Oc~5 7㖊vF54'+\7{x`/.E)MͽŃZV߽VnsǬ%Q8SظݔPTRcC!'xZϚV@1m5=EK,>>ePʙ1*NOI)8մPEHhlB4x/cێJ6jd @Gb$c.M?wAl;XdeǺD"l22[N6nx3w}}}}}}G#oaCTͿ2dT @U\2]d6Z88:Κ;Tܻ߮8Ω²o}+ l@⿓K(5I (/E}Y2^(/h,lo1OTs3]['7 r YqVG4/űK+{ 9|鵌N0o‰gϒq+Yϊ|}8z>{jro]L2Ƞ-lԉiWʪԘ K:1*QK22H>y5X^SprxΑT$]z.lNw C"m.mQ`5 UB㾸?g$BBZw&qp==f>K"i<t,vfFp XYu*Y mAmZQc1XA&k Mfb)!fUHFԒlI9mw;i L닦ݜF5nB/z*22ڃyHB @ :+ e.9`XS(V(H$x5*bAcCCmhBR( ~f@(󟞏T gh=-6%ZT,%%%xy}m=M)d׽ظ]"ˡM:ʪR41B Xl 4{fiI2 @Qeĸ-XS\lqVRRPU@,=h@kXfy)Ხ?*LMiV[-ned\Rϑ‡Okf p4KJP]Xj Ay~%QWw[Ԭ(oO"W?, Kl;laqKE?|x+Yqw5=5A@.ndP( mFaPc. 8N@ Q䶋03l0mߒƴw@a)bJW6h]cU|ȍDͦ,x@ ^7VT>COZ&--}+*(U*oK$ ;Fs 5r޿Bv }O WS`կ/|M%<dEե%^tfBt~$Ã^tύIa] "ʶ^S+>XErd@EcBIpU1ϐɾ8ޏZή\"ntJ5B`) T$(;6%geC0Dܻ>q橋~8RZbVxkdӯf(Og}jׅi\ht|ד^tKNTPU0\fڦ$kI_T,_53YBv0hV~&R[^bf nvڀA ĚuzNOJnx2h$1 פO1ζ4N _&SB릥jvU53bbDbs^/jp5niIlԜB9`f6érK*6ft37*ͽ7OK9qw4S<;ꪥi_,,NB캠"us0Og9yv~IvnE].b;spΣs~S1e!'VV>uΟ>w-y@4V|2Iqv\kłw ?h.|ȣѳ*Q 잸\uEU'0۱׀qZQرfxNl> aaiN={j~QTZP|玅ތƗaZ[k5hҟyO|m;b2{z]9[=[XnA. S/+RsN_ĭ,@P\f&ʊllm- ,J' [\K h^MRI`l<GM'OnG#53ǻ&,y.cm߂Ww o&0Uҧ==@)LML.hJ/ ;ucRp KYt>|l͍bVa<¨{JBMuͤj _^*Ǩ~N]D֝ΰW7CIEܺvGIn{l>{ucR@sH*.*"Cn=J"gqL)h+;IiW]_l@nf`gݡp2vF#Kk0CѺ4I/Sg'נO/gp|NpnQL&tvNG5XSf㽌FFCHC=hzn&+c%ҬOf22_xrjDɶl\}˥8333333###_}e}7WUjIeڪ~ox4NcV3eQzv}ě7ro|X?PF[?¾SOغ?Y;|gKSSK.1Eblmɫ ب~j%^i@t0+6$% F59e76`8;zy=ll[zf~_즋PV'[Q̊@CZɐr;#5!DEhdvALFBv~'$)q( ]Bc5ebe}}mK@1+ !g%F]Ol1t ˸}.PK.1Ў?'S`1ku@ @d랾. @1+@ Pr6"@ :xDzC>14C8@ !ܗJQ98ՉJffֶP̊@ = \* cm Y@ :'٪hef6hs(fE @Ap2 o`hQ{D1+@ B,/9^_O[փ)>{9;o),*yR -x< ) 7.eNK_8f]v\eO6gЀGO5LΰD -SaΖ1"L~^ CW:?~T9(JneeJ}8;9,qeI;B.I[O)9}{yt1@ 46`lAMP(5{ ÑՉB8oiOOOW壘i"1@ :r=6˕IlvVͧ밊7$f:vz[MN'M7]lh6,0o~zXN~jߴt(h=bw7On":7zho ʆ댍?54m-mY_"b"ÏA?6@C<2\bmӷvѰs j<&Z&hSf7(VCfL<̞#zCߟKqfq\lӎ;uɘ}Q>ݵa!@H F?7?˘k2(Vc> EdڍgA_ 8tO{.݌~d9iݒ&✨ KeQB{;nndoWF@υ{|{o xtf֨:L:Ev@>QL]?gM`.(_yTIʘsNN= Ux7%ө] ==Ff Ӷ=ТQLqNPTY*40]Oǹ9d8l<~㝅P?9S! vK 7J-mÓZNq۷e9)wy!y {9Y\R:1AɸgXV-lq,OJ:Һ:zպKg=9"v|HIշr(NC ^}{/>Fi6#'{ 9W((?zuoN&ݬM7@Ǵ`=Ƭy\xS*OxeCHLmKZPAxjOa&fv 4i+TO:2pUw&̏?x?i˖ CnS\rfԥ<3x`{zAwﻕ41nl 'xZϚjƀvutôRБɪ?)2V߯gP}g/EIJL]+9_D1mZ9G ,Oc~y;xڤCdlw`&d`>YgGe0{OX<學bQM{Ok.wloDa5gɶwcKjZ $ xy'Q.&Ծ/_Li!ݣ{Ee ^ib:tW\>eȹ2$%DF x؃)q/Dfɧ9?glWh_TA;Yfdf2 p<{$5ibbJ[,gLO)BuًhE IDATY;O_3$e)V2ة[Q8S2uNiޱCij$W(&]V.j3OIN/JN*$X)*f[Scy'|ci]X9< ,x.W۠`qE+)%N|ٰƬ6Mj]7JR!+A5r;%kV]Y^=,e[ȫJ徤1C)CN>XRv4+T9mj,T+ЬƯQ"Si/rĭn6fὋ rl Nu+?/ PFOD+ ۆBgmm֓88:Κ;4AY'$[=3 R_$={|+~2KF4Jr_z-S+'Lp8;>}qeIa,L#{Ɲ{ |DXKӮy 9YүWMYb 9fN=.rWxW{Y2n%˸yYoGכGx`yMuzғ;GP@! O t9 Ή_DE~Z|lŠCof(nY0_*cyyɑWãY 7x|MCQ—ᇢb>obu&WxBqXgth4poS/ * rK]6 }+'L/+1Kf=dEJ)ڵƿ5o, WէFLzL ZSTg#}xx4ebnleN6liT"j}֢ci5:&\3Gq\m.ުK[YCMLN76ҨxțyI} Bt75Tv$%if RalB0dR4HC \[f`r'&-d7.ǚPq7S$ =#ss: 26%&pF\έL Z\Qh>Iڝ R&f]z~T,Q9ʇL6hY?r)}9\٭F-3nTL 8Ln@.KJ3YRj2^ z5ynJf/mR>Yɴ=et^i&%t y3 EBޠmσʚWf3 /nJ|k'_Ph L3эh \\-P`@Rq!Ơa|P@\-P`T ̰ b /z~(zĬ\“fF|UrԲU|Qo WRh^Evr 1(W@܆D i+݆l|sH+..&k.oqPQ3*?tpF澿n**P?=[)#"@(qs%Zx7tʫ, [\ *(={zޱhZn,a@ZwrV l$j!\aq*Zqu+!9"\4r jnE}<ANK@R\%hG{l…%K6|-Z@3R@B/=byA«j[L5Cejc8zxxWϟN+FpB!*TUp<;_wzJ*?7&1m(9a)W ʫDZT78XA'&& )4y.PobG}}B̬OLg?_JRx&us嶶T:_'N>vgVKKh(֏W=<|209P(~nWZߗH=''c'ZyȦ'Vbl;>V2$ܢdpIٲwN7zOOÒ#SɩVs;`zѴ GGͫT *qJ-<ji:m_G_LyUTÖ~b2/7Gø5]Tp[(;m$W(q}Z).Q&8|bS83œ\C66';%5Io3dۯH´urZHzh8J%X[>a*@u#)G-2Vz+)_T3ؐfp 0 ɴ~ FSEZB) %#`SbVmHEHQ5<ڜ43g^6fL= @)$fUH K`!& )>X|Dt%ncdܫr>r|Y|s NJ9|`RڕCYfb2N^Rb v+v/Χ1@!VLJKMˌTEeq0mM/\w,ֵK88'p`nL bnI]UODUQ,p42351;١$Զ#WIՏ%n|y<))5_&mPA5uww4.)/-#9 /^7vթ)%mK!<01A\ўo$a~qeYf }ݺ1K8et/5^P>myz_c!uq%'uu.L\ GdDMxVF5vu5קҬ CUOO}VpnQLfO`OJ 3+cCK%(+: bJ|@_/vtk6:57cYi~pDM̠`Ie=^#XSCωAj X롚MɊYJ̪ѿKfe[.=Ǚlw.ðyjk@A/^$MC;=0)ʡg#s3eQzv}ě7r κ&!0:m ":Ոuǔ^w yz+VSPs'#D1,?:*1kҋDuطr;].3Uv L0+6$% F59eCt/kG7~6Tv0}st,_|W?ؿ/ۿiqvvY}$;A]Mh~TŬ4vr t<?˞ \ 3R0wn@t蹦 ]eU^ !)O+jtɻ[g4k=]"fP. ͏b1+༌2:YBJ3o j\;B'sD̠]h~TŬKaQII%B 0|H¢6&@ :¢g'##֓f4~w BW+bwgI)0|HPJ5V`FP;`ujbEcP̊gI)o#y;2Vi5 P44tus/) :@ B7@ A1+@ bV@ DW=@ x4yI,jc¢Q#_,@ Dg[0PO)@.Ba0겨Ykhpwsёl@ Nzܿ{%@D253k~,- @!@L1B`aYio~|Q겠@ 888mFP(h:7@ A1+@ bV@ DWŬ@ Y@ ]"@ :(fE @tuP̊@ N]ml^(o+쌬|]֧w/g']η5un;@ !-5E=Q4ژ6`-(u&ݻ$lҲ_;owI:MA@ /RS?z}Ջ['o~fQXWHqŬ%Xh!e1۷N)o :t@7tB;o4d2]FTpAnN1+BWd$ wqDx\ps2oQ!RҊP\yjDBNG I)/? Ζ1d`߇5LT(xl\}˥8333333###[{ ۪u&i)O? ]) ['ڏP) 7b6bGE{3OK2ѡyM(-m AQ!ޖʷS^4="uN^wͬa8hȂ)3Q;bS1Q~dv4&h|o.JoڶJb2[W&o[D#ư4*B@~wRt N.%^W?ωteaE>Z$i#MҨ+t2AV@w|xLц4^ˉ *%Q,6i39G {}s)& #ׇ/Y 1=>[H*|ͱ4 P-,c'wn=d[Ч ~ީTT$jsfgKѵXdBN4wjok9fUFYq"封Nse  1{˙,)1`& چ-s P_xn9r?+S%j)%F{fUai&0baviRkBwn/beU2K @%!Ok/["Ô>>_(ڻ-ˊS%>YehafxQ2^iA.GV:XdžC7^{ EW:mhj-.Pz9T\73Ǹ\ɔкeݰki9K<~qBu]G̈́vMW/fE؟?x&"Tjtjo~]X%?{nJf8MZɬnGq@w'zzύױ| Q+'Ļ i͔}(^3?yoz%]Pcwlڗ.=sՍ.gqLqĬs=M)(ZĹMNJ~qaߩ;L_q{|\oi" նNGEx5kF?8;|;#tiνgSF Hb~W|/A]XZTr&/߸t6V(szA=홀s3޲Zd읝 CQ*ڴr7ucV݉6GǓ|G{Z0%YaW?9g .f5rbuK((|<<4ˌ.|o/QK2`F?^~dizo>*(:Ը 01{ooF,?V>r`|xS*76:=I C>T̟ K^ N?JtǠNxyЧĻ fJx5ݿr:GR=Faʹc`56]OQ=S8ݬ^:iZ_m_-lSq#8U_P^ekW'3-^g=67Y0c2TsQnEu)@u<-MwF-h`4}k_=f{ϭ<0@ye~řAKb@1ٲViߊ-S{צƘZ[_V|S_Pзի~X ϪxZJ1;B.QFi|05kb:C{?o&@Yخ%\:n ٠hiA>(Z;OSy̛tNjN^릭_v>u:?rsw zD.zRzRXM6O~^/.&/DqɕhICw$K"}V4hsEi =LVít0m>L7"b;iNs*m\?F ˥OEF^vlA4GD*t'żEBbWe &4zcV۳N}9qtK=wV/- >d#fNf~]zu&`C>(Dw} Hî( ;!Bz-^AY?h>A`0S CبZIp@/ ]O BwݔRe܉iWk⮄)pY)Jvt$񭿯+;, ?߽ʊ⧗]riDe)S ʪEYqQ+d~d'R'6bhKysT:ků)%poewSqnDWzmMJDKưF"QscEK=t+#( cGѕ )EEYO(34JֲQ7HUԼӫ{w4?u l p ( PPA/rADQPT.EsL`}GIziy+Mi#@xD>ޛ}▴FޜھpA+@?&o޼VqOFY9A狵$dnN'tk۪!͡PrtU*m,mYyǶ1'6~u[Fk kգR-urqG7^CJJNCLmWj+nS.TMUͤ˝ 9>n{{ϼOM}es3\1+|{{.,X/T @P^ |t[7dsI5gdwiݪS*>* ``"_w; JY' @}/{ekn1}TBh;]ڽ$U/'S7bς)ϭYӵe,{vÔ)6CRwޑݢUTVcb~eh^Jl?]i BO%-BJ*ZɽK@*m>bzJ> .p! Jܟ3.*[)3p&vdoit׼0>(H\ҟ{nijALrk?RJz4w;TBB(?eM< ;oDq½5_eެܻ ߻׮K4 O&.8ZF[RQRR٥A6r+!si5䀏ʫ{Rw@j^ޱn9Isݰrm/Z]k 3jd>hkdIӄHU]%LP)Ԝ{ jIUjU$J6 AHayc6n9 }I3*76F#.oݰNVF@$IcΞԇ=ʚUm)YCFTzB\2A EzQ H ݺ M+)UOx0[++BkCt IR^] =wIk׿"46TMyyeUJ|*Y\\_ےU3Ū{"7̍z)Fmʻۨ"J5?\ːLDeQRWHbzJY./I+#괘d]ŒcZofmKɥtI0]HP6߹/?l\c({/TPڽ/Q7 [u'/ˬ,Tֿm챤s߮nTF*U@ \ ½?wxk?hhxqó̤~[_;g:ݻL* 9ANn]ʲZEP~WnMk̼:Ĉ:W獡]tٓ@iddJf, }e^ѡo5S֐_^hjAq>rHg)3^)3^Қ!q`GdK/?[>rPUUE1<=$0$~ae(qΧo}1c:\0?emn_rw<L w]D2^~B $͜vUoz;>k`pD @9s)(042n,r3 1pQmA S-ZR]8,){f9{IYuUCs<ڣCLjS珍(>{W5[6; ++a݆U0=UgmLXjޣ1;F<0/N*ֲk#]*mY J/koN5au`b7aeve2 {_.#͌4!⾳L1t=lt$UWٰfK'xjSԠTy*[>-Г;o@B7/&$ޱ Z?N@ێ53{IYsM?yCkٍ>{QRMk/R)8*V BITM* m^!$s%άLW_HZzyK>~2c[UsZ<ِR쭒+\oeiGֽcBEAR}{ڒk~6~;lŏ j3ynˁ!r$/HY~՝V'~RZ$@ow}huDԽOw1r'@Wm沄*<0aOJZ2N}hV k}ƅ+|/ܽʍD}y ⢪0/XʋZ'D.~qlҗiuk0p'Z<.n:jɜ;u( AJHU[C֐Ҷ jOb5l/U f|cwrP6׭|*%/ZZ>[Qte_,b@g/z#׈Ld1" bdm;!,<"3{9;ǂf6dIS7+V>[2ɤLp朡Im׮u.GHRTaݺ}wO$uzM&M.)q~q'3zBo߰aOuKJ } Rsj! FgrBiى}(M×,eXk/Y`ۊ!m+B@x<*3yԐ[_)sY d6м]7 α%“}$/a=}ha#=5_*_=~^~;VTܟMSl)ǺǬQm"G):'Fxv4\ؿr_DD$lⷶ{Z`zѱ {̸~Og[-YOwnk1|Z 7xmЕkUs_dqgA{Z{:f iC -ւώnD̝Ω@N\`GZwNݩzvgC%f f r4}벅HOoԟsD\`5Zm ԣ{r=3"e{0S2!dFw>}GÆ:u M/(r5{1 In f LGP1x{'H=cH1kYYEAiLS\VVaU 8GqZdU)‚+WS Bff@\)X*i>< qb8 f@!56 3+R<!s&Rʹ;YYGHMU >ċ|!BΝ:J݃&Mw{( OE \ީƳ"CgS.Wq  =1+v"k8slwuz<8sVœCgSOTύKBBL]ϊl--Ⱥ66af.:wy B`RpŬɊ,̱"rsYWih6!uQqSgE6Mș$$$)O+]ĩɺ:+|N,4$$B%B@*ހ2٩F `̊LgPU @AVeڙGa>POg5K>!}vDUf@}%"pP!K(/eŵ-L:dBYL@AwJ݈6K]QqC{[ YIn쪑v  8:!8|fV|  />Xŋ@wk:uD<2&ꭐM[WxKÛnBf'xX"  ÄBwV,P*ޭ˧Z[WgE} AhcY9zRAUBچSuA̸;JCݚ(J\8-j˚t ŊśǺ1]DH)=Zm{/q7cVCU-8`Y*bhU^~wi@na~Yer&h'96{;PJHK7~;4L*!. H.&!$4E. WWzK&{ݨå2T51v"pAV鿝i;;`Ĵ~O=L8rGVZ_ŷǎ8sݓoo^V,?w( !}{ . j>6!>lJ,+9'c̊·^Uٞ*^ @V N>U# O&'yX mnS3reǎE#O/*]ZT/(Bn^F^?Xj{Yp"5G9-iڜiäИ5,6)W=&h#TrբwWւO.e)dڿ'bV vS:V4vEUuYynŐ#ִҩWgݤ"Zu2Rdt.BU-8`8\#!VTVbhY7;J  ˠG .)2fʹ 1Z0fu jȁXuP3U\r ikk5/dϷ:L̊gx&pPU ^XEN3P3EtxFjxEh&/7t,0GbVd8 Um` rF=JKK)B|kssyJeBq6Px<81 nlcv3hE'[DIN^ĸ33R+%?45j$Y^^o0*b\j2miBU\~|O-! {3򇯴عGɘiBUrt Nk)GJ5bJ'=>##˭o֞ɨ9$9I.1v&Ƭ-.Umώ|xJl_&F.RHN| νm$#WlIB >TeecVM 1f,>>7BR6.ұZ(V}~鏓Xt!T:zB들RV?f&Պ2FkpͰW$b2=4fx&`J'$$(OoTV7]"-/zyonzq _f;pBl OIYPi3>족,*8Ix:j2o:&yxhb&U*EF7l05%5CRosZ1eWmM,BM3ienEztc)j_d,cq&c~Y<6>;9*ےDBBBBB€so'- 81f'H]Gr7ѦefVfM/ohY--x袿dZO/ZsX3um ߩ?}r]9rܹ7n斖oɒ;/ SfCmw $ "qhXv¤c&՚9!a3Ⱥ6:h*v d:822 MX䠨Dc3y˯]9]zJRcúuvHT yZe偠q_s}'ISKJb8YW(3̢(jccsY `@l|ilrn kN59WrH'x>#* ]sqZ9"hTXQ,0rE FNBa\[2.fu ƻ)7-vĹ uѪ1Ʀu(B[ E'ǰ*U4sFȸ%+'ykaxHowa9 \?ZZVխ$,=KFE`1M[Pś <Թ (Lbq'@Yy+*ղFK$$nn" @U(rʃ͇~G@cw7c~M/s[+d8<ԹXutF Kkf֨4]iu]WWU·;n+Ili9ϔ-}>$NNX{Nާ|HNXpԥ&j|60YI&3==;wf|zYg߫$|4&5>yoٜV4M_qsנ5GwV8>NOwJ㦹+aKSt_-mVslb|Wie"d/sO"dlXNǘC+eH2@'AʳM]TvTqW{OA^e% <^elHN2&ϐ=g^v>),N[7'9[c_kPw[Mj9J&:Shэy٭†T;~ݿKbF=5um}--5;8KRY *?v1xi1ADf݆mR,^6t#Wxpb\[[R7 3љr(1u{zohM-b\ ?`YzּeN[xcSt ̈́81+EpZ&;|V./T*KJz+&xxd%J0y+2aK_!?[CÝ- يh˖*[4]$ 2d/ca]$h]R=oHmΊMSHuF'\ƷDɅfچ䑶xTPTT! o,lZlAUδ#dylD5Gpl')ϣX-&WUGq*@Pn\r=@{VG9cFeFhpM Df7aï2CND bs,GSmgŒ.W0OEu":Vw,҅q LYVbP\ p7Vřs &Sd~V2!]m+Q,Um0sZY1+Oѹ9\ca@ckeT`/ZdzbE}Z6*#keT`%ڀq1!&pXŻ̄ -BFbY/ Ts9 0`,^gZQ,D˼cTr97l=8`@/XEǓM)v *8'&fNVLc<-h9{aC"a?TØ!Ua*r&&_ 0Nu ">`\;" 0NuPYνp*B<@i"`PƩNYB6`"dA:YBjzqS8YJgH3/HKK^:G"a$1ZE NA AEԴZ- ^&'//Ƭ!fqaqpSPCp^zR2Ƭ!.=9FocSdŬx!d1ϲmF#W+G?!dh!؏L ; zzy756,)!Ga8h!۰~>9{x; !W^{|0fEqF!48`q*7GT`$XW??n͒rPָԈ*BdTx>@dZWot .5bXiSƩx5i9U$WW,5!'as Xp*B<}V`^ E"WhGz%'Ƭ!0vؤYWS>8XEt?fySeA]"{YzzzFVi6UyCˊ@B4n^QZeFxzzS[7o;UShG5gYIJAjBΊꡡsZQpXAk['OY)y?fzI'!̪ӏy73*Q0vaHwK`j%J iA Bk!Ĩcxf! YMb␅7nݼѽC`oJ$fgV"96c9D@uz X _HhDȞP3zu+8Cjh 02WHhD^v&>L!dOrP(u;˜!BAT* D" bV"B!@ooo///DBũN_ҁB!YB!?^5[IENDB`hydrogen-0.9.6-beta3/data/doc/img/SongEditor.png000066400000000000000000000271351211146647700213770ustar00rootroot00000000000000PNG  IHDR^a\ pHYsutIME3;jb IDATx}\SWIxM@y# AD!Ty9mN;szzuc=3csL㴞B JDbʛ $? I !|Y{V^gBA gN@ x   J ӍcbzzD"XE&6!B@<܏n}³>995e0uE&y]b*++:ّJbg$d1YlĀrzo0FzF ||Ps0===ZM_=!2I2މ?xDv3;KJz~)PB<>::H#HYӺlzzh4>>IBMۜ,$y*:tq*--}z~h= 9=z^W]5G%?mHy]Vhi"Q)snQpH67\ޝ=png6וROR zΥP׮]p8|֘fM=ri:>US[?mMgll:3t^9RgI qM-np/\aB5t(Y0l\nUnjpi݂g2T*w?qLh誧*2mH$ry?$gLNN޼vc$I=can}6~q[mZ?@ LǺi229_s==m-ߚ羓gFS^"/7G_^QIRss=Ct:NH3OM=DyN9l19O~_9:oƮ]gY6Y(~S;6+zݍ&62΂Ok~{׾BfYybh4unyF'alxf`$ѨզOS\zœ;`<BE^Ne3 !m%MNΤ'H_b'zD9M_7kOaĿy7ϒ׾k߷>yU@`@NǪk[0AWkoWkf=D-?H:̽$7 ;o%EEsCYc|*_sQ:Íſz'3~zVǛ$Vdؙ%s$!T*չ ɒwy1ǼQ{N3Yz0󲭦uS35ՙ'K~Ton| wuI xs*︙[~QkqΟ>Mzh_84mE^ Yկ3.N[|c=MO3!Ò$sm=şIacQ0gn](/&#%A$-.u{XTFC爻B8s.@,1W$,3ҏ{1Gss$///ooE#@\Go*,!*̖]o-X͏֥|Ve%m0::GY$edmzi"3rZa < ߂Z͈Ì&K@\Kgq[di!@ȒLqre~4Â8&I111w8"h5E/HIr+=:t7[ y(혧jPq[2jW3rw'ǣ2*#< 9<.yKߧFk!<OsyeAB`pTLˮꪪظ8Sv,K>)0e?-??88B&k5rs^:DTp#N:Pܝ{&^*#,1陋)(&:+X,vgg8WfFI$KF199V40z|`iCG1KYD6 JzŋBH,/8v^?p *-MMMGU%%;|ѤAq61_#gKVpʁ~&@52z bgDD8'bS(3_R+0ec(I$i ;9e];wU_6Q| O2C4EJRoO%$҂h 뜌SO֮͛ү#UP0.++ߞ611!ԊyDKIȟ6lCqIZsI %L&6bS"z*̡.$8:,1hN Ad~8Kb24Z0V#8&C,^ _A?A@ҀrGqm;.$xIr+=2ܮ[gCaR橰At|W/;=#hٙ>5Eĭgr:m+i4+w{@ efee{yy}pWX$*BØA#U}D8+m+\tzBPy'zn_7[:cFNyh sr|Lr3O woT~Y [>#2Y\:}1Bu)_/WuCLVayÔCr_-%izz복)~&x$"c#]zY='ccǷ(?{h8gF>uy͐xp&x$md8j'b0oFG(;y(7\;vZdk:AQGP UJyT?OV;etMJe*ؒ$7M k:ATG M6m"6k㓉̬<֧ZlZ!- KJ"F̺JmہÁ&@J"N-.&B'tD$b&!$ #qg%)&&殢Gq?F%ɭСwl3 ܛ%p)DJOB\%wNG ٣e22i>dNwO9 ,mmEsGFpͅh?iT U ju/2*98~\G(IYvUWUű̞ޞeYII)C]}m2YޖϗӨ׉dg&ڥh>144tIF{0|׳w=|D2 <3ERDG_}el61DR}h4&''؊&fR3¢"`lߞ_XX?uu. bnzŋBH,/8v^?p *-MMMGU%%;|ѤAq6POo'ϟCeˌNWip"C$@?<0Tt:z \&MPLP)T[ N5Cy \nwt<Jݰ!0/Ɏ[JrA\'I|b4 vT}F ؔ_0OCV#oCPuzt7[   3`&|br]H %$sevWWQq!===>>`0\mp"#yOdgit2gB;]U]h`L44*2b;w^G~D4m,3#3N(FPBMkuZ/rϞ=^???PAA4Z#ɤ/ yb͌&=}hdDфsL.((Ѐ3A=Kr $IZzzHD"/OG&Y,Rlko#~d|lu:3Y''d23d2ta/iRyxT:*:G֭KTTbqY91q}ii)N; x\3NWTzJCrr֭[(GIt:d2q* #qqqNF۶mQNٸϏE BkPT!!!BCeNfNLLLLL4yi|VU٢uf4i}e@P\ͲʅEGpʪ7Dsfx'|IRHՈJ^P(>>>!e؄$B_ MW RF=BQVƍǏ[.Qnookoo#6U+Ugwx *Z^^ {{uuuzAe>|G=0=-˵S6*w͚5AAAgΜ n$I$ Z9K|FX]E_EŅxpjÕ=Md DWwwUuV{H93ѤҨH&522ryr]Q__' ?g*oN, h N9i<^={Ù~~~"(<<hF&I/_66 jӇFF4Mhhh8DzL.((`O="Ql@w̒\Bc5D%Hp/}dT*Z[gC"##mEXS[CRN(D_111l1s#,`ttL~rL&l!l(3N&M(GUWuU*XkXmNL\_ZZ D"2226o<99YZzg$a~+/ JW4$''mݺht:d2Dȑ#s*䯎ZRJKKq* JX'=5 4 ޽luM 2(r5\QQRBBBV'BLz @%',|@r\.'6'#o\'ꠓ:r@zYJ8  7#@:zPڞ!!*UwW7DEFE"ߏKWYYdZvUWUű̞ޞeYII)C]}m2YޖϗӨ׉4g&ڥh>144tI/pUUsr v믿H$NY^ۙ"Rjbwvvsl6htؘD"Tm4KKlE  FaQe s箞Z;{`lߞ_XX?uu.2nzŋBH,/8v^?p *-MMMGU%%;|ѤAq6mYNYfھ=(?T޲1SY׍.tCĽ$I9| U#*NzB@DD8'bfT V~&6]%7lH.*.&EY)7?c.I;:|JnؐRPPdG-RsAV$Fe];wU_6!!!!&ry] IDAT!52B5yt7[   +S%$҂h 뜌f.:<?!ĮZۃA _ʰ\=*++ cH$Kܺ\.g 6%' Ʀ㉉ )$.]dd2]6b\#[oZ.-8) A 7AP;!@-f]%p8م☽ըUq *@]%q+IpDil J@v.30Y܁>tD/InGgܺձOJK_eP4WgEکhGdnZҹ\ë ȒJD蚞r~%F jՆ+ {";N>ډjF{H[fIQLkddܹJe,3#3N(OG#]7-}ZNjܳgOx8O$@PMd2FtBBBئAmzzȈF XV E}}w鞣Y,546^H$iY"'R?߷oLfXJE񼼼H[Ѯ56&%%3-+P'ʭ:Cfgg媪#`tt䗦$&[H6#dd!%J=xQiUrݺDJ%%Vח@jjI> n!I.8m_ R+ I[n3-t:N'6L&Q>rCYi ^^d4sѱ&G#Dʰ\ WTTTU2nj Cʒfb> r\. f˷nuX]G;m]q5*FYybpP$AܚYWI&ÁoUYUq *@]%q+IATY$U ըUY$:|q֛x<ttB\%^t4AE3͛'N|: nps?r4 YQQĩ +SL HuUUl\);]%Zd2IjkߖL!m|9Z Hsf]sCCCNT(rZUu1'GlgW;nµ!Lp@h5W_b;;;Źb6 4:}|lL"T_6%%Y ȲBٹsWOOWmm|g~C{'hdE/ܤҋ+BX^pQ^) U(-7Z*FKJvD6I++/l۲Baa?ʹ}{>Q>ܻkjj2>!>‹t:NY>j """9L0R+0*aCpQq1G(Jٸ`˖Ho5m^r򚟯/y6%! $hLkKU55;"8$$8$p8DT vh +Y%$҂h 뜌f.:<ִD.ѱўn ,9IYYphhXXC"]֯]k gR|ojG'''q6 ̒L&3<|]FlyrV%ş|=`  0*Á.tD$FK@WI* [I@#8Oc qV;}wqD,X܁>tD/InGgܺ_:TUr_ʕ*;yH{-8.EFERխ7ZPJ]nZV!i\]h{ϯ{J?Nـ %I$ Ni%F jՆ+ {";N>ډjF{HsfIQLkddܹJe,3#3N(.22nܸQQQA܇{zۅi<^={Ù~~~"(<<hF&I/_66 jӇFF4Mhhh8DzL.((`OVGErW^y''wb0q3I"=0rk׮] N~ӧM߶gXv˗/K륦8]kl(/JCRΝ+fo#xgw$q ^1^I2ld9LFx8L62"(GUWuU*XkXmNL\_ZZ *SJ?.ىsAE\q0H+Wnjg4[t-j&I92_&pB ʔW^d4sѱ&YCCTdTbb7CCwpB l$**$$dUh̾{.Ӄ4zp[{ۗ'O eI Ksssss3e\.ˉ3I[:,`w`tAG:KY% 1*dqq8MsJ"c^@JfkjY,J".$@WIAJbbbpDb@y>6&H/U[D¬{CqQXTdYBܹ֡~ Ǜp6 g|hnzŋBH,/8v^?p *-MMMGU%%;|ѤAq6mYNYfھ=2?+ S|%! $@?;{BM}VUeAj(?7;f"L[/a&G\ GHHTihr|=@?+ #3 GcVz=sYs"uZyr^/\ 3_3or oӸWV<7?fφ#^8KXW*\n3'΋mSYL2+OcnL#,۰o]/", z:q,*"dxjtu O{u+aVf}25IRmR|ph|.CzÝ I_Я DB[,/N}j! 1A~evoG2>ۿnqzz~V&?'Ga[P]giN&Y~ёT 2e:oGL4mQW^:4c%ST#su[0 3Iv/qgb!jjnl[HDX1>e?lcL AJ몜~UciDRڗSQLz֨/b|jni0xJJ#8>qTϐba[NJ!{"}"jJfuIAɋXazʱ aJoOad }D`$i賤a #볽|VEْLF4[ZMC*U_WBK &4T`C_dC#i 57Rs{AS^Y"9 2$QzfdUk:߫=a%uS;6=A@сp9l$V?1gqap΃gX2-&y [cCv cyYUQX4sozL*(Z}s~Т{=Fe5?uw-& 0`V{09z^9ZJcb<of˳U i bN8#g0ͬ/੭'K>χUX5I9TG`) ĉIѡl6{ƘDP;;t~aŅedvc.$A=//'|,0̚k!rjdžS696$:Btv^n{Q><>y&o/|Gf:s#L"ZYO0|!YwIRqUܒZ԰ hDb"8P칖I7M/&IdMf'X]{zݰZnz!l/IT&1#m 9~`Nѣ]ӳYZw~( y~'`յLRěIójj:$$X,:I8SQRMN)VM0I70vIL@aruu>RhfﺼBϛB5m +M!ې9ޛ&1ZTծf2:Kp#8!$1zR 7c9\mq$g`3>Xbq> 0Ip[JF7_wmګ0k$zvʻ5g r-9=bgY>r{>UU7#}@oIw#4XFŀwwz*/6t`юyڻU9|1N /1tn27,?h{Af.#Gcav/S<{D$4oE@>^&nU޸Gɩi!{drNGw^wʹ(|fO''I=A.~_z:A3Sw>/$O7K}V=I'ݣ{t5zcgwW$}t2}>(oCצM>'[Bc.$IENDB`hydrogen-0.9.6-beta3/data/doc/img/SongEditorInsertMode.png000066400000000000000000000010501211146647700233550ustar00rootroot00000000000000PNG  IHDR\.&bKGDIDATӵjA"H]\a) D))$p i!]RTRwvpn!vܿ37/gz$6b );8>~ٷ39bS3 3S>܀\.]bKGD pHYs/IDATx?HA#Wz؜XXpElhUѤ\RiwB0E iiwEEH),MSe7{y#oNo"0`BX AY ,){?/=9"5|y|qvEZqhVh05Ebqf8@y057bldn2]9~[: O,|[=O2ꓸ=Roi7MW^y K/V6ǽ {r>ؕW(+ӆ^R1|VψhH 8.]3lIl>ZI xUbLI`zaF*W<l_?lstrSd2 il9}یN$w_nd.c($E7ngVT)mϻ *M}j+);Piԥen\ė{Gue)6sF\]E*ў q/NYq`3<3:"&/?LGIENDB`hydrogen-0.9.6-beta3/data/doc/img/SongEditorLayerDownUp.png000066400000000000000000000013471211146647700235260ustar00rootroot00000000000000PNG  IHDR,= dbKGD pHYs/IDATx՗1hQ7C5B/[Rڎ\V;JT2q$[3(uu(9A1CpxP{wKD-_xk#PFL2`& VKmPIVL?z8 `擏Uk2Ua &iL5 Bd<> J2*vOh/}<v=*Tu4|Kr̀m%a/Aj|Nrvs3#2x).߫][OV1å +D1bz0 9' C6z""\IR 奚_G<~ KT[k豵V%.G窎xrpܣ3BS x?8.SLxăN`͝q}a㜊 m%öːžv:!nyu|V  bD6AV֫CHƇ bZ0VTJ#ͰwE#cIgX2~4!#Ļ*aU1,??c>#"_cv_?[fF$"?b OL31Izya '|:^\SkfV Fc#n˚Jc Wksj~xhVMcg,ݼkoqF=a|HLbr}sĔ&]=i⡸D HX *aX3bU]|~q |n0 ` XTt"#`#tZV[sa/4]ק.t5 6'ߌK}x9|hPЍ#|޼Y9i!@[^7>!#A!1xʥ]%߿>CGu/;q%Xk9F 8dCt "tws\PU]y~XQ ڹS_6'LwA ~sٰy*Dxu ]GͿtP|Caٷk̗ L]۠[n"IENDB`hydrogen-0.9.6-beta3/data/doc/img/SongOperations.png000066400000000000000000000014761211146647700222740ustar00rootroot00000000000000PNG  IHDR bKGD pHYs  ~tIME/ IDATx1F~l1+ Vp{*y] k3#T&Ӥ~8"mq)bW`?fgу_~}I_oyC#}b AQG5W?\3#y;UIQ?di 4( LI3_u? \>z]am"ʗ}=4ct}O(~EǛ 0=X[\O:.2Q p4ZU꺦kAFŊ[QcVy MT'3)Y?vQPE}GvhzRR1.&BM6k]x%xBP'B#DTQ*WxpIrQҵ.cbb4THZUXk{pPU~j]S"aPf Ұp KX B펮u<;#4e74oR#ͳe'SA`bLH7u=(~aWŵ QsFc67xyAlƓrDrXU9qj?G(&ÈArЅ hV!@zSV%v=jUR}c{}z~{O`ϟ1hpml}J~O7`ر{ߤ_@Z ÜlvQ-w#q@FZqIENDB`hydrogen-0.9.6-beta3/data/doc/img/SoundLibrary.png000066400000000000000000000527611211146647700217420ustar00rootroot00000000000000PNG  IHDR$+insBITOtEXtSoftwaregnome-screenshot> IDATxwxl/MH@* * @EHG ifgcS6nI@gؙsrr_O@ ʋ񺀌 h'!!k~pp&O{CR̜}8NCf0 juJJT">hm r^*aTTM3X&J7o;cTDA 2\fHppLcr827WJD2/wJpGv~ 2rmc#I$ۣք0 Ajc#I@ iR7cl@I"1DSrA_8b=:MgU? /{zt'EZc ミx/RQJץ{7oFK^w6E`ѫ y3S[d#uesJ96|`n;<٪ω92U! V<6V&kpW}v ?+?|oO02xnNRPa,zP[/O$A5֡}-|nUʢRD_*WP#¨x$D۩5vP샆ChBZl#I$.ivێ'+ [E`ӳITe$r%ͭ_g_}zTLܠa,T`<@}?JgUZH lgp{}ffzL1By4 Ps *= T.9ǝM+rܕR^#:2~ND%[/BfscFZRT(*%r :\k`!L E W݃UZwEvB8~Ϊbsמ@j 3)_m1IԽ2il)/h2>WsVWz/&>@v a(2IrPNY⭌bZF P͆Tjf`@j_t^CMmO/K&&IX?l4*[ m,k26<-P7>Mdz[kch:\sTFRTٻstȋy`9:KŸR@j)9B =%6plyRYa\5 s9tc]ioūFHR# ($0B' PǞVfPH =zT=ΰvd2]"T19{+6<ǺbҜstLZ^9fK4wi<ʤ'QYL* tA,2 J+Nl^*,lzZ V+YV])%~rs5ƻW}-+x  ݙN~ꎈt,w\NHl Bظc$`}qlc$L>cxp(A*J+c*QGfU=yWa_zBU& vg Q(jѓYB n}y jЋIuz9S5vHxzs䊔+WR0oG7{>*3P]>{!^)OQu$hQss&bg^RՏV cY#Bꬋod蠲g$ii׺7#챒GK ҄}T̀{s1-bJG[Fd)*Tp[\xu3;#O]Z IwGU[[mZF61m-& %q= -IЃAsPJ~4s8<=4蕺 AHX^]<~Q$Q8,R1zP *@   @raJMbYֆ9l5zlـq\Ht/˴(#CT=ڏODZ_wF\^wfRKH:_M6Ϸj6<+/o+BQ,&)OPzbŕG('pa V~|PL;.H /ѳ)ʳln,X$3R t4:yXISr>1 tB?Wa k$@_(Vr`t^֑Pݲp:3URB&U(yJѓuba BO$I˪nA5(1iB5D_KUMkbc0`)s*&4\ѸpFӢ΁!E}vA]"4tvhj \PM/zu$H =^cnt* T1šgEFZu:`PuDTJU\R  `?yUj]pD[_0]$B OrN{$H.U@;PZbA;H>]wz֖wSiR IkK$J=sw`*%d*6M/0u&kG U @F$x^V|DT xk#qnw@X3@ $ 0R%דrNƏ$MzAm9j@K.\Y jZ28-iǩ:~HB(|F xvl&: R ݾtŊJw|.\]]TK^I YӨfY]rŚ['lBUuosVD4քE\HꔥYγ=|m d %QWp ~X;K/cZSKD2"Z,5T]c0)H Ǖ#\;p`DZ!l⩵+t.Aht0qg .?wjI{WV4Ke,fH4m񊈲, 1?|rN=~t\ѳsSF H 0w^ZWGbfL=BvuF>ݒ/y;p/+pχe͓;`Z8-]䝴wɧ4Ͼ-tmP=G ;qlqCy,>:m'-?[bpdǿ}u-`j8PGu# Qx3-.aڜ).R?&MݺHu迮s@  !Og]k7?^!v4 xz)k' 0^?mlT(\;+<))BZVs'WF }+Bn翷J >zJ;,g\I@prմ܂F y''dCR߄x=i78=~zNqLz11oX0OS;_+gݗ;umI㣿XN|-z[R9w$^}%^ k>ZBN0sMJHIun{4:}Jdor`pXT @{偶;zXT]M"TO.F7\/.AD<_,vNfr\ ,\A'N%mŽmͮFfzfa(v=>\5sҀ`/gw/ȉ3fT$rnCFr)v_d5cyPe ¾*t/O6R'f5lJO71Nl6A͓aLCZb$72,ו_w =>j$*/4䍙, @+΍ˍ&}ÛC&lx=8=qӓR?OS] nN678:ivҨޛn8ͅӦ?|~u;G]O<%.kk,l3Sqaޥ_3&"3}l\d9@4 iHIv>Ysך淗K,NEgTol ANWƦQ-,stt6/3u2@rټ6[@ y&,k|ԅ=d̑iu.S>gKJەlӭѣG_;˷{0z=zttn` =ztiUIu7ӕPf}t;2<F>LR8oЩ ~3\u;I _xQ?$J (5o:3Su4q3 Ƀk4 xh2I>prCQs/W O9B!֤1c}nM6bry|P3Ql#>ܹedw??Uh?)NWǓ+iҳ2g%)HoտԱUD=9~5|| ";C+f&Rcu|v*4:e3t?٫[n!^v76:e)RN^zdx'nb&vPL:~4!;_/l@4`Đ^#a5cϤ NlGSV=RݩMϾ͕R4qIȋWc.^$TLnѕCBjr2ӳKuk3\hLzs AR529iqѭafVUPqEwTTo 2ӈ6_7{ 5ޟ;~9~9$'˾806̍(}vcٗm\/P?姮\VDd͞~s#W4h'PɆ@u;HXlN=8ڿr@4dIi| <3KWH:)=<˼F uj@3g$ښ>eUEɓg\nޘ3~T7W>4e7~Xu71$=-ngN跟kL~#AjN\0ngk+w-)E Fi%lq4Wiؒb8oӱSKHVoaS7y|[v&HIR/)rv4dyKkݖ/S=p(AB0y* 6( ~2ws׏ 9ݧ]R_L@i?Wh磵I)825$=Σ$/NZr+0.jqQQCm%ZڥJ %/>/ȁ%6G+on=({qc.mMPךODqS׼MK]+fԊ}F8PdG_u^ٹ Ip9rΔnV^txN 8woǁj>)>~- [LizֈB86-echϞxAzee݂3W.J!5INb97Ȗn!|IR=G wM:_xM_>㷽3l[ǡ{4IȒ/_ߟr7(AZ`?~)ֽ.X׷-_}0oU6T=~Y8GGMi]A j`ls0z{N5JBI>>aDͿ'hU@B%RמC!͆N׿fTIzϞJJ4O??;jnqnAsZá=v$;Ӳ.ll8~wivaHk;d1gΦqg¸'6y[bA/=M169х]c )xof\#N?*%0npM=FKuR4_-zm66AjIPϟ>Ue.a)<_Y:i2 PZiV;V*ȑPe2j|{ >M$#FTc.mS TEjzfi IDAT(a ?ux\[$r`se Ge̷&5ڀRi1^آe!DceyST )/y{ֲ/}@zc_MG^w>l\/Π֮FcP1uqllPQmYK3OMP*x _N)p|$H0s00V!'+V7Iuε _w;̼+)"^B1 &B])s7ڏIʳbrgO1ahBAx|wcWs6]c1>=J JHH:t1M%HMqqxZ88zNzogIŜHUƥ6^WFfv:rrm"{MO.n7 @/ξgT-g_7@48q5oerԸR)Qx~eoBqlBxE֖Y]qi߬NgV/{zwosuMS@*RέLwWw|}T]aW!2RQZ<@ Z26@Ɔ@SE -%36vۿMDhΓ~QtLG/o:*D;`smkͺߘow^j yjq~:y@#ڊh4054 R֏0CK cztZ ʂGgzPp>s`'&(}3%Asiu cEճ1^[KޞU^+::t ]U;ߎy>ߖa;iw7,O{.׃%}va˦ ^^}ڷtך? ft7v^uU߻. qj3JoP=521Ah_*o_ "C M_}9wmM{w;*XC2ܘb؁CeO )HWKꁗe+]BU"I(jiŢh^o-[A$l^u `yA ,Ӏ1MD)4-8f.=t1i|p aDoQQ9n'a&]ԅ4q %$k5$]א]_)me(!Z4WDz`,PGL#RqU^|ԉ}jw"PNYn}CxMwfԋr0AfJI\ ,^O#<͏=}1$Aֶz7ZXdIEGN3s")g !s1GgO$'ďYn~#fLPM/;l5jFw&1Lb6u9/^s{/WiSSģ瞭e,PD. "Ak*"KX ^ī 26@Ɔ@SE -)"D*bb.}i}Qp9 -jXbQOKyN9h"IטW¬'9F rE$E_3@y 3R2u* AĤ:2AYjsiJczM4uP3 [뿲ʫ!W;7p`u߯u7Z{秉r4 VEƟ7“8tF 7jVg>9on*AM27|pZ쥋n:w’]e]r/Or;`Z9}x.NFa \- ϋzwؚ -Y$}tdI۸OZ~0W @u- S4ݦ|xxºQd0{w‹{@g^RU#_9NyԜgZiM[s_{eP^TRzc'^EH bO(k)Ŷ1ˑjΜNQq欞6A,QX!f}mi;Q5xt?W pƉ&הsogRNexyJxsȑ2+r0Wv`Q[M, dHR Gka@|mI-`3lި?)FV`!,;$E_W^^].sJHnǛ*iƭ]*rEn@#m<ڰ'Q쮦Ex\|BN0̕FT$1D,=;ǐN6&Kl iZиw:;:ɽ:-ݝI$)vʣ? ّ[7K'N4;Q2~ϿL2m) KnL+d_n!?M#<a9g[SyW~OTv $)Z<Ѧ yŠ9NX׵o?"F+DhhiD+f#G &N99W:Q ~cޛk>/ZѦEUz8yҦJۚͻgF?{=f)5li [#zRVVؼ6[ͳ4 +Pn4 OazbtƦn#^(NdhhSK6>,/(w$^x9㱝-0%Lj)MI)POOQRV>1Vyg>i,v>pn|:Aq|TtRPP؈]:{?fu.H]Z8uɸvÂ@i,іDlJo*Ojiq@ o%[.=mh'D;L.tf#9IyA+t=I%W,R,1raafg&~;Mh㩽;StL+:_#x7(0r#)۷N&e.HxxlRb{Ҫm[ {GC)Zn>t Pf^?svY:KJL{xOo+6C8'ħ1WS:}*yM|SKtfSG:w(<>nMp'G6l6wnw׆'ϛ.K񒋇o^n\Om|pޘ"w0$'sz:qB-1ǎ+zȷ[=dΰʩNNY{(.o!(8w^uguRA]|)^ m֜o]lCG:8Y(i޺@?V/P,ۈ=oPxÌ2D.yv|#ϑE*pbf%f\0 tt\bQ%J09kED 颟TkWvtPi H ٮfimd}zږ?J ؇7j)ARV=h|G{(T*!җ٪iy^ ==7H_B}3mB6v>&t%-֌D K@` .û ]us⳹lzDa۸:Wb6׊ p7H`^Qlҧg?AELOtG sr9yַc1sKY֝lvat6]uL8xt!nNNHEKAlr0Ъ[:L(㏟7`̂+m5>ʵSzEy❸nh3fO|@c~_s.ޘMJR};wP)D]FjiHmF ^YR?Eʸc*YFLp z yԊӎ![{)062i8C;QOk ʃQ+ro#K{i˹m UeNu c6n,|pn>J{-͙zi -ٌܦ[\wpݒo2:(6fo7,Ykb!?hSh4Vע9OGBR izFw:oˆ.VJQVR]g쓣 mzͯ>:[PGSLGk‚q[oKջxiQ/7})gX7k&5&)S"Eɷ|2g] M(R{|uS-@~Ac8q,;:6 6C#;9r4yWw_Щgz^['~` NCƆhDyP+pO~VQvFPo ؙH(CH[jKY43Z5{ y4eyj5Mc_|)ߟa]{v#<В~u?XMt5MM$Hy}>h_/zrdG{:@?eux_pR_s=ݼ;/$gF1^76|j韏]V,,xrh;Fʣ+;t ֺ|Y'R s: T=S5_P/cLh:s=oK+S` 7c_,vXfGv G (5V76aROo>$/q+-dI5Β$Y?aDoQQXfG]GuB0,κ op1ː p 3o5(4cʣC=N*SwQ{r$貯ݗ8sOHeW q (uNl[!~׭qk_8 ;q-M]B{u>q 3ƧcL{O?NV\T-mF('3Łh˳q/Z4bVtY^{bږTdڬw?J2㣎ٲ"{ [_OOzTE(2_ޑr FelGO:#^/77ya-mY/o{-e}MY 5E⥡؜MD dlD;P.}k!VgG]JFDllt׉+5D|$Ul` ;vrf` X46m@WgսN]MW8#LfIw9[qºU}x=hhGƁ{c /`{SdOW_?q~hJhR?k '7oS#^],H 0w^Ztźs,dhW$C̱Kwfgޝ+ĎPƆw8~=MXxl<ȑޕ3gS8/yx;w څ Q_qY^1kg'%TH 2c$!kC4A/oY_H@o)kEfY)fxY/>s'.ɝhīLb908,R[9O _WlqF8ѹpwW*H/WHwe~Qz|j^^g%IgiO:ў%Qst/|ڋA㻰iHU߻._;~:CVksa~ڽ BP;g%9Or*׵JG Tc;.8y7[$y|xwY@-),mke4\%Q*2R&V, )r)`P; TܽSGJ_}9ko_1ct#Y8OS"x)LL.r$KXKRӅC Zl1%I I(xz!qdSky@[p|eߟyX2?leآkLEF6EWGv'{ aE9B̹g_0_[hсU_[Fq ur`u r} g貯ݗu|ckesB !s1GgO$˟:haANN^ӖUt\Yxɜ&w2H`o Vy]m17a!RR ]yƍ;N nWo 2_=F!"E)/By.DJ]l)rCVm6[ b>Cx8X|\lь%tmqw.E3Kȟ hv)zze~WrR(+O lDi^I^N+koTcǎe^ܝ&HP/ ht',5__+Bk#Z)h֭9=r|EW7Kz_.$q-2Vr*<|,l-q*QYQ?M1Iߵ>j'7}Yx0FZOJ]F1<ı5 [>HȶjqK/`(nƔуq> ?y!~vT *^Je>O?s~j ɭ+*dlVٽF{5e*GAY,J*4$ˤ+Ԯ}@8_yF~]Ѣ=nZf@ kzG몟OkZ"6fټg7Ͷ贃@4T$-mM1qQJPEDȰ`cH؛, i=0eK'1nr#!JQ^y8Υ'PjhES0eLڰR:*͋66܌RrȌ9ROk9 s|sM8x{x9YIedT,2YϋyRR*ꧦ`la,Mg9瞫R6|=W-"z#I韟NҭLY`}-Y%-`@,t‚b<kUBy?neV}3ϓ s;ibn{J:FN9{hO>tꙒ9Oڴ? C؈k~D}P &z4*("U_;kԮFJLw1nE+>ۿ4S>td7@hÆ R*e\/6lq{LH9lAX|"ƹ,1K:H\3.][\V^,jdVnҰ Gwcן KdF2C8y73,v{F}5B2Mw.^9hbc=}_Dq _kAD_ D4ee㲷8݁;Y߆]eI@)rx~/9!H4gD:CǪOw~QT&y3)ܢ_SKTx`)M*mTZژCF"ņ-p^;^QfDJfO# 9u#wTPXt/MSh%>yV  'u Ӗm <+TSY|X0 ~S(6Rc &:Xա!yji{T]2:KRʶ-;xdūN@)Mdg_쌃;Sї0"eTCg44|9k0 0غcŌo/yE-j65y* r[Z#oG8{r:@{GH\(֣sWd|$ݞwOߵ]>͈,9r2EiROKJkQldG߲J>Ba:w; I&g?Lx0g6/'3H{Q,{{Ocj0w۠kaSlO$V=q ]+nܹ+uٱW H\TBZ !N;3dxyq%b$d%<5-ɈT;PWx=YM#l`t9͝gr q ړ;u gSWťѴjBS;_uW$uJ$H"I#E!IGɭ\Euh횳 d# /?!0]秂QOg#;^r]7ݴ!=^f!$K:QQ`0B`tSlWnwyKI6,ojh:J:HAЦYۙj`dK+{[s# TSHE 3 ɹɔc*MHzAvuV hSv]}|%qo#%#Lp|^ a3ܑ5N2 =+ϮAC*a&w6EF?P~xFSwbcSPk@7~60ɸ\kG;Qb# (yC  ,!%K|gMt2Ĝ;N+ljbSJfG5OҪyre@|· 5葍Deo!Uoio~ǜ^vصb6C+v%Tu7q ;/*+齩YI<=t]u7Ϟ9,D$ NoDA⎪Wn#&%O\j1woRG942$D^-I43<3IJt5]bͫ* c:S?)#̓(?\:G6Bzد. B׻i5p_qV݊>sUU¨.Rnc kZ޷Kycz$ICztO;=o`*MzӞuMȸkOd#Gn8N6NXps]DЊG/y 8]pP)l$0TZyM[3WͣcdE![4o?tƐ~ȡY<sLhczGt԰cmIIKlXBе43 L(`U5 wt #. sw)O6:r!~9^Kޤ.)qk'kbDCȇN~HٯyW`jhLsG-[Ue_fӲt S`:fl8VgJ<:8d ߿6?boLmO1Y 1H;8ڀ Pa$aKԦDֽ_t@HT*#P5Pl @(6pN 8b'Pl @(6pN3 E]IENDB`hydrogen-0.9.6-beta3/data/doc/img/Sound_Library_import.png000066400000000000000000003442371211146647700234750ustar00rootroot00000000000000PNG  IHDRsBITOtEXtSoftwaregnome-screenshot> IDATxw\ߦzX{{{W0|ߊG1rER:ֽ,@ 4@D08sw#G1U)9i0`~FDp6ſo=K@֝+wگ\- @I P( 2acX)1Gm̗#ykg.(O"8ݨNbxf>T& Pyߢ ++(T2pi:9:]J#@H"F45a;)#COB@  G>G8`y9^Fd2tRE?PE. Qd{*FyLy~I/=ZT уĀX~c <ϯE$@ huT$Kҳ45SJ:^?ca挰b) *.Y ]YZG%I [+Ҵl5JSKx~%#[(%yXyq`V +rWS@ QA3¬杽yyYEo=Qi+^>xEIzU8UqZS o$45k+s~Yz?F7p;oEq8'zmԑ͌tun Ya{' :J&=K&A:|լݬLtuLlׄ. @ ŢY?ѱ ߟF1LtX}}b2_?R$SK>iԤ˴ 0;'EYa&oޤ⏧,0qƱ&J&gn-ʉ~|7i$V!B-O޿'+ {}DXE(B B`]1tp?Fss'>}؊P}Bc+@ /-4?L@ D}@oJ@(Q5̛&#`gG| ӫsc+@ 'QAHhk؊PlLZ _')9U*ET!aqq y@`c@ O@rE(W@ D}O1Q!@Q!@Q!@Q!@Q!@Q!@Q!@Q!@ʥBD!Dr@ DTpsLFE!_m[yINMLA? D4K / @|\þna"ZvX~:LKFo uޏ];]cN<5Ϫ+KO{eN&u4.'Ig Y9@q<'VwuewQ‡@ @qRmPؼU ,]6f=)kDjvp/cl.!4ܯzBE@ck:vu`?l_K 7Mgw[odL=[=sk!a@AACmVogDHч?|׾ݽU)ҧ)/?} Quz?1ѫ7] <߀P,@{+%EETDI"M}{HݺcM;5:\!x!ߥpVcEkjo.DpX?בT$mO%znwic7#y| n;y)c73iUݏi1qŜΦJJn2ln7>g3Ouskdvv{mn0pmGIty,h&u OFO o>#5i6jHpY*aSqRL*!+>d=CFyYneJfVڊB 2b_F M YP2BwvZt1^_+NJ[խmmH|Q"uTyn؅#=U 9Y 8|aY1!=FQ}b KR?}:y)t;)͆}i_Ӎ;lӹ&<¹oscjM>DDYg&l_y#iwZ,ӷ{7jo%G+K(I0fLr l͚8EYw- 0cu{ݻ;hrn^XL1~VċdZ2|;v`Qs5v|w{C%(I sOt 0cuw7>XL_ wvںVzk. Μ=ݔ]#p`Y8̺ml&W u9wT;;MKSC?2y]߷{Vd 0^vw4f ? OCLŲu{RnY>֏R_w<}Ϩ2R{ #m Ib@ղDumP݇qr5xFSk1nJ?Ѩva 3+xӒQ@tX|gZ p*//Iu@%Lݦ@oP/^ Ͱv6d:gsZbb8iA $B`k(gx ,`ԘP lnw‰fΪCk f63zbbteo> ڻ =3_5ÓWdLr5(oէ8~ P5tUM*w^.zYj\YS /ǭ~Rf}QPD%>:Oݢ@[77*52n1'^{8mmV[ a覽]?+:vE'Wm.47zqjֱ=6ib ΅M$@EsOǰ4br' nާݛ5{>[O|oL۰Qx&Mޑ(mꁸ&iAUԉćkipi[.J7D̢:C;W7S@Ԫ faX@oÍ|^Yv:@WR`W);iN:97_'3|Jݹ#|A.—\HO zAq~VLseO&d%\9i5ֳ茬wwɵ&: ދ*aBs>V;0Sݬɱn;U1h\1& OLJ z%L@`:-F3>{CRzNv|bt[-̗ b34t:EQXY/!_rRtvӖ,uI8‹l؂mSz12Rz{2}{uu@${t]?S˺ݘ픈/Y;SmM| 1 .lƶ KOVB[zg w,9 aU`&V :܂rK`Z-7T _ڳyn{&Lq$ QDXicƆ=u}(?؏Z:tϫ M.Huؤrгv2ECFљQ?jJ@Ea ^Q*;6bXXPnφ cJ_|@?}tw1R5iN6ҤW+kPfK|?CMaO;+DŽ+7kWx9Ky;\dfyJT2uBNG0t,L$E*+0 }"f:OTo0mMX}zkW|FXƣ2_TҾIE|'XQyF"M@6@\-Kʎ$O-[BDRP..VdGfHy&Q QLZtaJLZDmo .GuPp_ׅ%\_{Tp5mwG2'Cq12sZ+ ô4R`8eEwZ铃;ډjX[O]࣡i< 3o뇮z&Cr<(|gZfk9YUư~ ZBt\f 2"9W]8>;w/.Pj`ɼ}/P7+S4xQUVv5gwά%WMu$He1xZ͛3>' I(j/?lPQ Ԕ U &QW.ht C /Y[,;<.O4\/C\fbXQ6,3~,> URY 㠖i:/db< V!j\ 3rPDW 0ov[07杝\hDQLJgvvčG:ijZh)1 YHՐѥKOWh Bl cș#QJ+iG>,JNR;$i:k @|@acTR+ Љ\H`UR_ hN*2 j׬2穘z-Y)e@HQ9[]nB'd_H)'joW8>A9I9]:F,V%Iš0g]A46<7)̘6,&fL,^N\:rwT x#NrpnnJX.D6 -,[u&@)@WSŠDل%IaAIaA~xx|w˛Q߅r26!C*{q`I|Bz @t DbWݪz,PP&(ۖ,$P!AT"E<15 SB!\xtd"t0ɟn6{? W{SM IDAT!]c)W~ MNe2MtU5?[#uWn;G/xq9A)JEj^L`\]ur8/N]J['N6#>ϤrTǭ#;nOuʄҗdd>>Uǂl\[]]U.`8He1Y~~)MÔhS[W\ $AN̗21O quPDyקQ[GxwENe 9|>aLcrһ1gCcHr|V3sin@Ak/Z͚9u>cG5aTO6r#Ylk0a}0`Yt4LW[K߾M sFAr* pN9F67ճvn߻]̍TVw R/ U:U(^-KZƿb^Gk zU:Avf !$W7@OvRpFg "x)øQRhZ9MɦAvO}$gto$nGH@gj94a(0uSEĎ!N9}*8>" 쵢f dP6r:xoWMvjxc̝0~Qnij{T:vDcI7?+"`ߑ< 7 y,I~z'ܬ_HDIș{ Lb @y~\XЕlK<,TE~r)OS~hz |ηg& hbIDS?aq,'<;%F! Ic/9Ht"%V-KCB&&~=cE{"nudi?D';ON ?S5*BAj'],š /@_̽K?9< PFЈ^9^0 GYdQELۦ^X뗋׫VEd;υF7myU7]- eYu?S+s:z^ h}ߺh@ e"ELW/Iy 茲> #`te5 .C;3#=C wTl;'N3~ǡ3W<̺QZ?S)wߦ#YKQ~Λ{$M]Ԏِ"EaДL{7O Pt?jj\afUnpsԔ(U!xʙ_E=/,P̬_Hx|9~~sǶ/ɝ !FG Qy?4D@ ~Q%%r~:/@(}EgwԚ!Dc*$4 :_!_.SEWY0tC &*w_et'FT5Ѧ,G,MTϏ`lsCaQk5['Lz\8w _y{V4O^|0c@èxi{E@4;K#ژ4/Ӛ'Xr%BaAOj3yTɭLO?ϧ=܍i^\fJOkן_P1 Ary`W}ZޗۇyɗjHK:Ҵ끎]̔Baqxjuf3\y[ryKTZﺱhԝ@҈%&Rn6JQ F&oQT'St)Q zS2@4۸u6꜈`L"1qٯMgTnw㲶)^+ǎ4jƶSY|n޵Sά5j{WէMX5m[a3;`t{۵9YcgSk&J1G_Z1 8=V--U/dsʄ8/?3O]uo;EyeRvxwgM]y(q{9}>j<7&c7Lm®0,p1W شÖ%S,8t&-jT/ޅevumEc̘' HeRҭ#)X!mjNHY&OQTG%VVPYSF @`۟<|ze㠂,(zOpLrfV§GSvltuCMaNz|ttܦ(ðWއo4p׶g?3ҿ>?Sz{ KN :7+M@[->.䩶֛sٗ1)i_P-&mDzT֑Mo~7&-TF&GQy T^v4PCFC ?'U*ݳ.c,!MuӪq_сw۠5W ~6Д2êm|41)FFxw| 7C]sgup6/#2{Ԕ3fQ3C+ެ!~ft:XmUXRͅ9F]'b'3ԵrTe."Gе4 b +,N& ʷR2>$xy!5ꨛV$2QΩ:!:TG%VΦA4F`X5?蘄riaan:偮jhieQєM-T@%>ٵe6@dݰ򃂾$эܭ霛>xdgc^>yE.mhONJz}5dٽoM$L1 Rvav77ieMMk]7:dw_>t.[߶]JMGUbalHA}̲K[IvVR6E*3~׮쿱%͜h>o3߇Oٍo`g֘&|hDD*LͮkߦE/}?dɱߥC fPXʦI@OQ)Q8E#=T©1?H_&P~'e?DЇ;T Di.Wy ӝ .Siz=v2RÀp϶ˉ z.[;ww)<پx3yft85;nS^k*hzǬ12E;|>8p&+P2WһTV}{놳< SV:[+6Z8{ӑ?ω~p(]ټw2/7E#d-+>е\-'WDwBr:TG%VΦA̽K?9< (SӹkJf9..Z þ>>QPغv[m3BQ;X[xMFC "!X&үzp !4pSA XJ ~PDh6U' 9 @ ~2PD>1D! o!ZG`1QI2iڽ?P&u\OC??ֱFn0ԽL'i G  0L'yzaĬJn<̵cWYC}߾Z@% _["*n^9'90PL8HWK;߫ӭ ]h̙{c+"A8o 3wz70xFi5uG}n_Ano`7UfW;K*)_5z4S70=MD֨`_A g%7DԱl¯_׆Q<꣞\` un5?±7t.msh}0&uo\jkH9L6dCw\nV]:u^E DA yq9JFc;]i7elZGpkζ \-GaЂ7;7zv`.O>wmS6{H]fqL.Aݬ}/ zR%ka7-E蹍;9{'Z DſAt[}gOcu9wt;;MKSC?ΰr 1 ^T&jvz-5_ Xd`߹{ݻ;jVz=юJ%Nn&3IaVK={_8aqxjuf;Z.ވUs)k'm/NJ7ge~gϋ,jH@CA%(HyqffUfĬw0LoQt1h.@]L҆"Uܤ|5@8aES{hb="SP/bw/ I0h,H֭I=A͐nڮc͟]zj9}<(jq.lKO?xz M~Ќ1ǥ.=rpǹmk{ܵ7GJZw#2aiĂO<@w[8)̡#ayBU}[6`ze}NM&$ 0{cQ|iJX6ckx[榡C+_˰eѕ{n2U?nGvV.B<z%{y<ô;gչ7zd/5+.5k]KNB"yHQq+7g4osڹ߯%*NNU{9ˎU/GE` \^Łpy4tU!øˈ%/YM s?PҀ &AR޴k}v/5`@QaIiٜ/A?+0ebG|zΕ;6IjQM TՄ9aY1AY|2jJzYCW+>8hVKTO 2\ dMw7#AvE~.,-%Aot=)~u68 mG*׌W'=]h:n{_~aXrzZ+Y͇]O] 䀻lR!+R5̬OyJ 4=Y;w}5NpNלTSm?$Q! 3:cMa.e>]UO+*QXQj2^L7pAxϱa)Af>p}.Qк㜁GnrGv>A=B1ES1ŏ$[kZS*~F%[MөI]]-*w0UքsXb  jO K<ঞ#?} nC aͭUaaaIe\jN @ȉDI¼i1dӉ;WJKuUO~a}W{d͠g8 +*CԓFx~,flL1R@ϭ8Yrra#iHд[^1X';,Խed%݌ws(\%ܯ^1:\z2d=hqcߘ.EbCʕiH'2<_Rέy؜J=FE[[}<Iߙ+I:"ET x](b %̆VW U5B $ԝ.Ԋ]1<Ô+uUՋax±E2҄Xc^ʭ5kڲiQGcݕOeR򥌭OK$Q)QX-*&GQaPX)G8w9:n͈P,.iw ܱ3C;i*V7lѱ ãZˑj\s5FT$EhZkwNк}r+o94#-ӜUDG{:uUT죗|7IAXS@3jFPY\w3z6Sk]wbxȲщ^zb@~ 0ؙc9JFN'1_fd"*AӰS-N*Ntt, m #FA׵d$t@zdI7km^1dŠˈL^-58L#8AײҨ6nBXtrT3"/OE5!(deb? |Sk9WG/ߧ1;T̃uEeIKfl+mUXR!#L%.CɥPJш KX8MS #sCgOjO~[8lfo[#]#ǘg=M)|w\S ;f,°&0%M+D˲9^3{smuu5%,7˲VfNp25ig쨾mȲ>ik sFAr@J䵺+i6ss]NaԚj $ͮ<=T5Pibŋ>O8ûI50+ZU{6148si_ <{:Z86kZ Kҳ45Xt¬H'YO_(OEKnuh(~xP>mϟP0!̺+Wit; q>my#0:KW:4M~~uj=Ij;h/[4益?_Rj -g=tb%/}|* hM"6@ޥCXPXc5)Ǔ``ܳՏ9?4?Mlt_p Nwu{߷`ZOxkki?9@ N6֖5^UPm2[zVBTKQ`již}}z)xPD`ȞCESȩk`cܥ@0!e%voZޠs=kߍA|Y' 9 @ ~2 X;|OٱC.k][ R3=a{#FGETS}B@LݵIg՝E+ߋ+78oӕ ј3Ȋ$++T/2A4s4ʑ')9ס?F_.Iɩ=/Дz)"j$AO[0",MQ&WSsqeNw?Z>`LᏁp4(R$1 ѴYY9"e]~B Iɩ"!Hk> a_yӧr%6,O~TBR.NiJ%}1lsKAI)PstԞ6/#{ϽMaiFkOu3bzx7I q1aCQ+o# qǙ9JYO3ވ6 :`>6 gU08sSƴ`{Z3J^Ͽ/c[vfO':^{r? , *Y#ot&*G]}RBXjuf]!Q,Qt$4-&Npէ}}hϑgj. yR_S&/ ,PiƪSw~ї (R01 5!a(>@('8[K_\],UJqn]G̀o _ޔ>FR }f ۾ٷhRk?1|ݞ{}"'YAEh]kxHӶ{WN 둽׬ԸZU ?|\W5QC^'Ξv-]4ޛȪvo^g8O۰bf ΔLܺlԠ}7.kr,ISG> 23HQq+72ը^.$zQWd7,Q$U萻]̈́ N[hoM x}#Gf;Ch.eゾTGuT~>x(Ђ.24ffJd֪(4"#1(A6Ssp7E'k xݰؠS38ʞM7L׶g?3ҿ>?4=ʯl?0,9=-aj?u)4_@ :ZE-~ssӴ슽] -@W7NLJMyKFf2˿޾#;[U~_x BriԮDUS:/;əIo.{oX)Ft8nxi~9DY֋UӾ Kna1,&,)e e~o>yRFyL3MuӪgp_ Ȋd%zLrWC_ ?h51U}Uv!vD7\&57ET@MT_,M Ԥvҭ.OE[P|_PcgCX~7 $t^ JŎOgCQAQ, (OŊgA{CXEEA ERv?HI =}p;w4y\{^3\BkQM 1 ݪW D&2xW~Us_2KB-9]-AXV}&[m=WBļz-o!ZAةhBM 8]N`rVu >Q [<0RCW@15ae<R:ll3FȦ66j>+pJҊ@~Cn!КQD@ěI@ A%%qZ/Uk*AV~oڳv o#m4%ia/pFHz+ِ߮RWk6?#'`F(1}GF@L~Me_w(h( E.Д'垘g4xzjJcxufĝGsf-I[xU}db :'Ofa=c' F۞Xԥ9Ctd0VAm}#y"&i0iͼ?,T*I= PQZd")Y;&)`F̪,: 4߸ϹSG9neX. !:4-XjrIBz  tDM%%@M%x IJcAi3ozXdɎ~RO)b1g^\6].?W Rf872 &OG>.T㉫m^t.Ӿ:*J+\JQ-\Es%Ԑݫv}`pp۳n9*ԉiNeKr1[JCG(Te3G]mTscڻ^"сMu dmy<}RQ56Q '0鵰2|"_B&hc[g;wW)$LIfzF)$ia˜,Mϳ I%~ٸ{,ѓxm1U8`4?VlZjc҅ 7ϊ9L87E5[u 5;~D쐤g[|(dz-\3zLq;S2\_]x&W>vm9q8#L,W?&\ԉJ+|=GQ5" ) :oj'E>),F31$EksOvdO$s5F1܎v_}I|'H[uns6{Kv(@ќWģM}%fIcJQt.v&iۻ'ˆ ](IR8cgK4R.UiCF$]DzCMV\zb;/PQ@S`צeпy(s%ZizC+hIqeq{pśtȺE6=:_g/% 6Q/ֽ8Msj:l;_ر?rSlם1}eH PW(nlUΉOdr2n> H c<ퟠLn2{.mΉ@ ~j|wc_x{&sU۹U}ĝļOoz:aQ%#[?|X(oȸpZtfv9r=)@QFӋB3Keسؚۂ`$9N#gZDm; ǂ~tU'tXj!;d\m[긥e c5!c*2UnItt_8I:JU^d PS P++ FA9/F is;BVӯ3Ҋ_yFYSn]ЍJdoE2E٢l~tz;Lh~br e%r:mB㨾S4`4ZzNj̕'5;9KH >6&7!Z#~ZW]{njcz[?5$EnUK` IAW>U:_jғ*H>c!ʆǠ38y|1$d%H 9ZmDtTTēgL/ ;<;I:ũo?deI=fj$;`JG܃bnctBQW1-׶: 녩(41s\xnIJW1%DQ?]CLH ϻ0ʉ QСT3aTno/5y%>PR{zY Y/M-n:Kp\8z1ino^NJ(iTv=K)4)oA`| ` pVD1FqQ +P`儆aL8U &0VVહ/X g%v!]7s׾%[k\nf[ )۬\+7lji@V=&gxǯG1 3&t}p&[{4; cyg#WB[gߕR"ŭ,'5"R]xz*ift Y @Pu?TIHК:M#ߑu1 q9G+M.mjAxZQztռݍ)ln|;K!+I@Pu8LP6C NVfVNhj=@AapLLR{YjJc.{C灸U[X4c>;OeOrz;r$+y .&m0ϩbgAQbm=4&r߆eI qfꜧ.\RTz[K61X|X0fݔi3>:}MfbZզ w;}Z/LA]+Z/WZds?jXw1lCkG؆]F]h |F?9 }Uԁ9d+;䑨"__IlPMskq9Ȏ~7Gnv&:Wc4ݙ;=X҇&8$!.k,n& e֋ur8YJ=FR~$\D#a kCWQn-H*l{e"̋&H`Y@LT~涯;gv}Eqh΂S^fbS1ҢBu E:]?*ߝb~6M/N+847绛/}(eo۰vmqT4+o%Mj(ix9:-4*{ o$o.d> 51%T O#HrVfz $ ZۍxO:aZEW׽{ByÜt4b;tzGe@uts?`l]j.Yu[2# 0i!D:\Pg^"+V!ܼ+٭tc=,ڵ4p7]y۹qTWJxw'[sM AK6/4{p3]o#z*)i#ӳtoKfHGA J` 9u5NS746fܭkq HV;[_u+8=+ŇY>b_"_׋fyP {sm 5pu YsFij>|ˡ ʃj`uxً Wdzڙ*=̩oKw6լu2n4#61ݶ$J\8ZaT&k)MJ:%9oP*yQofccԪ)~DurMW_);-%uxlj`6тjߍgi,Jn|hoXS9B|%"X(Okg.E1`y}UV=@%[-[W6yOp>9{W4ZE&Խs+ 짡"/\4ooy9+bĐɋGtXXԿ+:6@}~Ŧ׎\x9~&X]<͑5Wn\,0 bx䴩H;jaҚy4ϧ:J;eavvhl4p[ʮ.y/}i6>M:gRO#-:,$&[͊:1Ma))+S[ECC#C}7iSy ~y_Ӫ% 4$H9m4ūbTDV_=K?6xy՟2kehX][K5Y2wx_wKv$ fb#i*qħ$I1j\Cñ( wiPujC)U{cJ+#RW{6 Sץ__tuTKȀE['^<:+)PdRPCF/Z:hDPڤ)76p$5+p(Q}~Z0P3֬(#2hj3Мߏ93cc#sIS =f^ f> a>wNx8Q}u@41sdV#۞O b#{|%ʃ*ޝewqh _Hk)%xΤg_V̘vkA ĀӯthDy[tm[$H=<# TVa=R_%g,,ddM=Ф,,HjS"% b ڪXM~ А_ZEe ʘD3]%}mJ j4N3q{X1 j%\dPuA6p+>2uljS12x(6*|3{8 5L;{(cb}5EUsgk? kɫ,,#T#F`9/՘zqhd;a㪎*L *HHQAصk.F2uF̛DR>=Uy":'2P`a3ite ʉyr<"=0aږl;ExDUu0CW 1][NP}.{zF-;  ~q{GOI%Ľ#IKL;NO@ ~ Lt i[?߿FQf=qXNd@4ypHbC"¿®oFO펢4!ϯ;@?@Qt߃!'j~-[oǤ-o??CV]A!'KS@tZ#+^bwWXjrIBz -/C01YAK6,ٿ6k",LآJ\sh?Ow}ϧwg/g\.Ѡ47V,S&8lseyq e1ss}@** UƬ^^NGJݿQhD1ml{VxՖ|m2W gp8s$iz^GFcŦ6&]yscǽ\A ɚ-hxuLtq.dD +Ʈ8ZIK5lk;+uRIy6 m$$^۾|Ldz=\;Z(q P{/mju)w=y|T:U޴L,$~B!=Wn;Jy2=Kr *-˴^x9\O X3PAEwƨ7\ƭBj.Q fw4|_tٺ#i,h:v>oʹ1uBBUm~As>wy"zn;~~5W7}Vێ(hįq.sa0^O>pҮ+ P|=_Z#MɔQFPN/THVӯ3Ҙ'|̆/ a5LjX(b]nXʉ4ZTbrK>t<5(Q^$,&?kROOVԓ @aNn3øx+qZm@ a|LԳj Yy@귅?R`儆aL8UwmG19<{F嚁vϕ51jv[VVહ/X g%v!P,8C~[" Uďap8_15|f$>X 0)2^OIwnjǣrd]!T ɟ}_G]h:GERo/0MQ9nc?ʚOc p;#0Qֵ.@ :kgV3o;_7Sܭ%a,Gp-m ^q, z;nJo%Ry KKҤU;zit9Nw]xQ&u֯|B-2vd|F?9 }U3@ HJyġo5_#˼I2F;sЍm7FS-U^{-?|Xw!`UkzyuI=+&~da^z;'dGC@ ?Ϋ)*dQ4T$Au1w*9j+.hz@1ϝ{TK@qVC srd.7kȊvbHR]y>KUY~@ ߚ.{Аx r`ʳ^([Yd}aT)jCړ;jp :aE+WAP&FP 9wT䗟' J9!d1WhG[Vy`.-0Lc恀T&! 񟦳<$.jd1~}$c ɩI6}3mt0nmxeMv:?r}u?UW41ԊdV9Łkr$^]Տ+Ql:QhD1ml{V43KJ29s2;+-P}e4}ZMIv<+怸޴5g4Ӑ2-ҞCs1&S'Z(Xx3tI4hPϱ+DF"{؎4"ʸ{d%~Ӟ\#t* zڃ;}^qAua˜,iy# nc?jU*-B}e׷=f!PFԥ\<§ŮSR6 e:ɢgzyܴ{YvÕzϩ*zkiG^A[s؅ML8yڞóݮ} }X?SQNEV߹E('5-;;.f15xm#ݽ\҇oQa'lS9/{m*Z9n9fy( @ѝ1&qk%d,d7\`m6T,RT=Τљ<]YRVi0/(Gtq_4wy"zn;ظϠ*N]"[q}p:fb8=cIDȣ 4[V'_Y9a{]5|ll @z;n1zvq&UчqpΗ qQOH(c_ j`Zfzt~Ǐ ~oG_@t9'ufs #OLaxef0.|)(88Y⑊J$%+a!02u!YρOI% f0U$HiOu#X\H')۬\+7lji@V};U:_Oį +;hlJHգR>[E te%)N΃,U~a@ְԗWPMe <|jHw' >ᅜ"__IlPMskqe~ 61'Ir8sT 3Y/]QaYQM!"xn:& v8^KNZǥg6{+xArBEG}gG/>'go5CɈ*qz׼2Y ߤ7v6mS );oDowwJԶuYh3M,*^0ΛMGA KWge~RxqNV!H#V;[_\|+@{cm[UA t䳊v@ 5ك'/XHM*M}yb.U<^kڪ#z-41DxTpt94_EO{L.p\-ERUZրOl 7m:Ύ; zڃ#qB] .(ަ3ykBdCOs^g񚅞 -9. b7( =tjojظ%&ێQU]-LPKGoCQq`և dޞDxSZ5pƁ5nWS<4bFs\0'w8^_1*zG@uQI%Ľ;7t^jK@ܹҶXL/-܎&5TWPN0AY#m}Uzd*[[*ڀ`5ϊ!OR:kZU &VF%NgDa 徎Zћ[{ȴ@ JZTMK.׸{7$g;6Vi&Kcd5^SMQ8ٰqT:4dy)K:6*;m@HYc#'㧈 'ûwmZ4gc+ WR;kq cU5 bR{kaͅ&ky uON()zLbHMo׻֭{ƺeJ%? aT푳WM{{DnY.]v8%Qx[FHKc;F,zy\:~Χo 60Jͷ^'@bݛ}ʑ ~#y l^ gQ5`> 3a T%̊u4RzDz$>qZyGpvӀo۹̘8> (:nlqٽ/dbB[w=ySG%X5 =&K.3@VfyN78Kۜ7bo[&&k>A5;Ӌj=l &o;N`Mav/m*y:o,D5=4iqϿ-ڬw&f3KBHTIq^]wlWv3|j;˄]/rc L􍴕eWOk+ޕ~ ,z9$e=dž{V YyTrq/I!!ӏjb< 狣$aN{.,!=dZ(%] 8Aєnp8n7t }ڇIv#a[! 9 ߦxu"x%'pʐ$Dg(j jӯ:BBqYʺYS]OOj*^׉?Φlغy|CaSt.8%5|R#$Y3=C"u<`m$f|`!IKW7ʹ$1K˧;zYv}gkť=~ 6j-gͮv<{/nTڦ 3kW jAajHHDxȋ[F(IDԋ&;|?"<$"%/[mUz!!6)K@OGETR17t%EUxLk(+j;{WYPB 4'FhVTYJ)kw4-|nXrms׆0-Tο,ϴb~)h:5Ke38߄z)ujIt.+٥C9~a\*C *1c3=K{%6br[8jRgq&-(3&F;q,yk{8su]Ew(Eq#m_+VEo(FM{n<\v~Mu0ofO;q!mֽXv$u~m&e9^={=39 N[! -ns6{Kv($kmwsJp9}*Z*m{ⷠD&/z'7fOh!hM*V\a /SOv'+Kpx]O4WI6sߓw -ToTi3+jF B8&;g^LJ*<=.҅wb>26ߗ-Nt2W[%QMUeY4PAY>=z:m\?T7#/ arE%J.@^UBR|5Pq/=qETm6$%+a7W.)LJW`D< |`z2rrE[_]~a6.0~ }qߔ;Q1 =ʉ+-J^4~y9V+}S֮>3mĶsS -TCW WOT&x3uY7h%N?6GLƴG=G6jx37r^9'^IYQ?۪}#BRO6ףSCBL#yWa}amQ,g_9e׽XoVpKS=U]U֋kH~,j^Q#o)IJ%9([Rа[]Soz'sǵۈ訨'󙄸6M<&j2d@^)B?w4YY8H2ν.F TqX9aNUyE擇*JO1i M #a$yMZ蚘WUOpx㶫\`$2k)FhM x \5e! ߽.dݒc Sf[,QOG;{HodI@Ce `Ӭ7;_t8T)I/&wMM˟fY !K2PTM )݌ɭ l{?P9d K}~?(J榲Uam8N.N't.c#;Ʌc+y0ܶ]z,ZN4S@ |koo~Ң TJ\ah#Uua](+qJbSiF0gZ{+Rro7%TiXO{)fZ][cWpn&CXڢ2V?ci`CMUu~ Pe&j8izJJC,:/8v-6ݻjw7a4]JQPO$$[~IQ*}H]MI$JmRb Oo^1F}?(LdYu8-F&Hse z)x{1~2ܼvhW}T@$Jڏk9$ '-J}:}MT/w{#Fy:r߆e8 e7͆l7Ԕ%akw?GP6?N8PF)$s\𢔤5t H+tUʽETxKjK'T&] af.u?~Y(45t8lL6&?A#j#X egV3wT@trQ8?RfR&6&Ԍױ@!}׹zs?`lݯHd1,[~SH'9l4T2#תZ(u``HIR XwvWtf%\zvmW^eFxϡ[8,u=LO„{~N7K߬:ڏ qJfcL#d/o:QRL^OmKK NG_7_%aY@C_)Zi2Z)ei㕀[m3+N|^SZ_аG"@RdA-"lD} EQ&i)dƳF2СhnP`8H=# -8hX)/==s_2|{Rq%]wWOtfo! hej??NYm0sE"j^ߺ70@MfݿpdMHg>^YTteO|^$@"/Y^!d-mo(XcsfFH?ybQeyW:;|{xk)m5%Q4vqvVy#lO 0:wƸ);{SE̜EM٢V:ߧM\v09[᫯ż$` *>&SaAd? OGg3HWX_]p>NYu$%}]Rޓ.d5RR4;s2F3mUb5=Ni[BGܼ{D^Ct[> j yrZrAFMTŁզ??GSSH.vٌHyt1ӑ~B;a~|E-h%1!҃ҩ< LŮ  nho<6O0hE7̴UWVT4mp җ*E+;at"Y"EqXZ 6VVugGtUMJZ#%oCy( W8q} |fzJsbzR9x1% >8Fz\=Hť͠0Sʱ^\,N;O%YΜ~/0P DU9AԼ2f!#EPxY}Hzj{@$TeHf~qe31y.0Zb/+Q"OzC{I𭛧vnZ8g_&Jx>^'8~>C -m؊oT1nnX@$ߨMr&o&gBD{ήqU;X̱߼tA53w 7%۲x2}g:ǵ SY=]:ҏÏf #⨾|p^bP*qV|<uK Xe!Oȃ B4[w` XmՓǪ&t^$qE+X,^ڂ.8^ll$<3V *6wjPVSBwa]WO{p҇.6jS^ItE^tcg%\j:7XeWw<qGZө8~IJQEPe#4!^O?io>V֑%:Bߝ=|? y?5ni8ӹL Q3գEg獻rӥT(AFcʓ5%r2E+3k!?Q%[<K0پk}<f=]׷ӆKllHF+w7|և,(GZT/ Y~v}ŰDqh=U_(2?"r֎vgsR-܄e:;P} FsMP9;ʉCpB^ uZϐJ3KTSI=7цtöyw˭Z?@yuWXtpsŧ#k71 :tC+< Y@ڢzQ=ֵG+lu0U@⍕x: Q1;̜ڏ/r`Xouh}EQq @uL/ӡ~l0t8ߛT$ 5:8O6ԯyz=_2 pAO3Eʢ{"v$ GR57"ޏʮG1gň ~s??*8oZ' g`z*f YX* UeTUFBၨS_A[\էW S[PeiHÚD%XtFA9^qj!h1h ")YXɳҳ?ݮ8p~*]"z9ϡ5nϨc|pp~#גu|Ք&=G,{²|&rD٠ B5j^LfGVRƦ& db`hj*Zz5?,t.Y7M%'IVG. a^671|ۚh˴J17@dZ}_fTahpqRz:zzF.6V&H t]1ЅkfWAћV0x|8)/I IDATmU~Ҝ?utAFη|]yt= K/>>v9jв0O/bA﹀(ȟ9p àQ0~thZ\^Yo-9EeITl/g"g]܃3Fp>w@_7 0lw֯8绖_Gz{zOۇf4fiYʞR{qpppDM?z OgnlNZ|pС  )gOOb & >E-jy.Ƴ+T'u~{rMfv?GH %&H}+(DA I~Qqr#4dI%mBIVmf7ӕUIqο3:cmJ&#auԦ9(?ɩ|ٽ}JMpY0FR|NJ;~֜yNfT`~|s#  8K"+\Cm_@K1PF.; +{y\@DY+G4Qw_7 L T!3Vg,O;C'#vzm4U77É!RX5}tyYzX+ik|" ]4yl>)snNWR0$mC,zЅk2NQIO-u[t_|vqBB y~ET6b9}VU!ipм*ꑧ>MF'%!h R=6pNB9Iwu[V?\Ry|U'ahp>u^= fR~k6/֍='Nm%[7l`߲ j3+DK.9S.R1206}ךҥ]_?&P暫S> *C3Lo' bUV\"SYV$Ckr\A'_rtxl~Y!sд-1XZ{%)hHZA8{nAvz}if3@P}q%˞0Q-Tzw -K zT)1N6ūZ^զ|ߴH* 6̰)O>;{uNR_FXWwS>iΨGTۆw/ޮMWQ!kom7̆W-պF݋RVXsC]`oo1׆r" m^;G}g5c{dQbLyNà'G5xz&Eh$Dk\( $#(*,G$W\ar&WF] q 0^n۱+YN\?Ɉbk(T_mPOn,])vSΒڷZCg?Ef8_ ?=>q>Cfgu J`D$u`P4I?TTh=s!D1ێ.Pxt`ݖ,+>[3q<E|n ggLhuԥQR%2 J\xsRd1Jq:;7FTwQ5Um jD11ؘ g9r>23uRDeeg*u r %z.WncMٱӅ IJ#O2jtfC+4"H4Ԕ ]IT2;6g^}WB 1>P($nk$/<5uω+IѐiI˻9V_F2>X8>$+z\oC=6/~iW>3q']˻!{odZʽǚ vex_S:ݶaԺ ";*;UD^3W^9xW} vY^{#J2$N>&ι\n5>3$*VUc~o ^ڙ솧;Ay" 'k:f)G>H&1 OEhQnғ³~>r.#\y;J<"N)JnQYB'cc#׼FAivOW#k(okiycz*):X=٬%*xLuTc<+[/5lz g9vN"E'h(_ڝiwgkOo-ce&*6D*.X: D xu#=ORFf )ybuY|DPQ⒬ggNpGCdj^"(s+QiYB]  A=~RrdTh6D@8HcWDe%\vhRߢw8k:@ZӯDi}VӔ"ƫ*έl>-x'l"~ӪYu˾W~AルcΪ42&Dו0ݬLuuL.i%F'mX1+ԓ8 ludE ȉ< i]cf!bSTB Ehjŗ h+[N?eiI[cHi}RߟeWw<qGZөHV~IJQәIPe#ƫ!4!^O?i򋓚եudu яXLJ.+K-BM]#9m%x-[4<\(&CfWn~Dd6ffRd~RIz$C#u& 4yMWeF% QYrlt_qD}AdRrY* Y XM*&jhuFsi|&Ck+)bХCߟ`ֲԧD&ZꔷG.M0oB4gs_20vϡ?+g]y@}eF,6/Ϧ"ťdfz۰zB+1ޜ9!dWnj^%2Uq}2sOgʒp/ZI&tOܩ"D]ߝ+MOqܢLQ\_f)i׵pB^ uZ=oJ3KTSI=цtöyw˭Z?@yuWXtpsŧ#k %?` `UaR*2$z :ˇ b]N&֡EE: ?HɅM!g qJq;ށFh>ĕr2fژZ懥EVofB&]-ĩL!8Tg]CW{"JB_7Z:lƦZAoTurg^AW>vQE׹:I빽{OZ޲F64oxcF>qhW^_i(|I-،G'?:)y*:Bb&'?6Yig4EmY<:oV &ZԗB#`HOIM!C8? #_eQORW;R=$@f״IR57"] dM7ޞvXMo#_3ň* OץKRJ:'`ff0>CIZ`( a[ 垽hwQNwZB@"C-,YlEƍ|S!6n4?T-GԿDbP%abE7~to '[@12~|MbN=04Jc#lIyPxm`_Ses# 6]TlJ5|hYWUEߠ\@W25i%Oo݂()}$lVY٘r𱧻zM'а'6^:Lb'y<"˷ڰzB׆+o8>WL}B4k\dsljiz:_LL&`>?UaUg|d[!p[b#sߦMg`\Vo EEk:rK~E=s|#CI Ď@W}:%⏁~m'|]b Fcѡajq{ dk+l888u%iRѯ 88}^=8`4NXYhmsRt̾U8888888FBߝ9~9ᦟq^9Y)_0Aa#GvD/kL8vd%)i[ܼzE=$nܳkϕtBU0Z[P[]߯ʿ( :**O̶yi=oeN{Η7n|sSU eDy-$qs8Q[EnxAB7ITl|qgf^꿈`M@ybq$a+(嚽[$/;]wL"עHU{=㴳=ZZOQ1yBԤ |:q$';OSѐz[Jd;ɓ7;wV7|1[{AA ʪˠEiAxяl| 6Dc@{q.Dx֮Yߖb꾜+}TD!qSO|jʔv6}YPAz٪'5mV}j/^^_OJ'I~Ld-?V&Ө,ڬGQ:m`*b{V+idpkiDs2R 7~IȪ[0^GPM*t qppp?GET>XM8.}MAآ"W_yJ&cMsQvSwY=3)eC}(*Z^zSGS7l=E\vڎ=$B|=j["R]]u(?BӵVc6"63TyW\JaFIĽ2U'dyL("cz >H 6jyzNbCwbF1YpI {jfH)J 9E(TTE% zLG?y?!45)n{8uن؎sm3Dxtʰ3"@R 7nD) "p yG.n;{݀>[ʼ~LjK_qBOrzW M dH_녿o]%#J#l6wgT-}d ; $pPI9H1.ETK֬ jo{W/{_24ZOv2RCԐVI0&S&jJ֥?:~y k9oۂ~jO>(ίȏQCrՑn|/I^AˏOH+`""+!Eڻ"7Bp m Ci<` 4ͱ1˨R~H#׸ 2?JXtd?'jPM,HI+&aN+>T Z*Q[߂ɓ63OrKa<1=IIClGNmd<~(}uIY?icQiІuÓQLur.#\y;*7 U%U:|.!cفȮ"YǓHS^l8vsm>|#JiǾZbfKίǏQ~EAP~;"culM3X\p =vaf;yԉ5م<9-f]! Ȩ)*r0Xm\zH7!QL)b$[ ^Se&d">Ө0Lp+X#\]dJC<~RJ$/C_51WeF%w`qD|فezxu +aA +t)rj2D~IJQ2 63\D zvJkd7hme=EV!g>N~|_|KAZm2@O[Ժ4S AUA b]Unt6ݵ䕍mչ|uq~|&RURֳC?2a,הC 5յTUiqiiʑ[Z!5V%\D 4m+%Vrj)2R В73=Ne91=E[ fr/Z[@u뮗qNlE”*f&I lAv̆a)wߌKY 6Gێ!öUz͟0qN/Qoq&}F||2䧯Ggx(4mD$䨷As&F v\ZX*Ky}"`;f4%Ixa> 05-^رWN6}*U]oV{eSV'|s+鬍szA@dVeV%掲S ㋔lDH2 *(߆>tQ3Vw䱪3! bGܭEx%Yy<TrLHm2s**#ADEƍ|S!6n4?FEr13i^oE0Zً6ujnDJ?{?*  +N+K U*&ZT888]V_sT̝;݃? _@!>zD&b¥-}{ۛa2G;UDqh=U/RH~{~WDڱ{Yl|~ cp o2_J({z*_^̩@h3hb3 &v=o?1\+[_}TT}뤐aHY_Fd>CDDo-QԭjbL Omiʡ2p-Ϯ S7k%֜_\{O\D;G8 e{nީꩿ$Kjߊ Hh 9qK'\ ̊ @"QNG2 J\xsRdژmG(<:nK[w-It6#u5֨2bJʹ|:56iIZ~;w/X١B1Xtl~fRm_]w}7]C?T @PmP^جݫ6eX}J<WWx#9W^$1XQ;vIwݎ^ԟeRO׎Qu4]*QR;GVؼ|ӹD${vȮ.Mߵf?s/q8[PB14WOZ*2L[}V[=gSS.uTB eL-T][u UTMK$C>'J;GydU坹ö@Mf=OXԟm?zXKǙH",$YPhnOorAJx>͊YK?/ 4\ZkkC=/ w}WaAN/ r$%y1hl!R ܐ(+fv!R{< p@Ѿ矦d~z~uN[9iZ( $#(*,,M{2+#(jpɕQW" p,BP}xދ’n<`!VfU*J"d^$, D҅qMlt0Pf@{#$\$ÙMrq^ a5 BƲo9yκ+iݗ^]jm]z2yvŊ s@u< ɢiQ} vy>3̝xEz kSWϺl./:#L:tG{ke7+(Oz_$afBdzG+$ [Rx;:f)N3̓r+KkZ?${gėu,v[}h©n7ܰ Z(f8cSL1[$MsWykع f|`퉡?ʼnwkX 2njB.e Zb<=I:X=٬xעZ#cO2|ᓧS'W OқĽaԐ }WbG^ڭ}gTTu&m0ykFd8d>+TEde=8 pF*2R% 5%)PnX_n%, JK j+3]^Qi Qq1ѯ)mdqmy|B!!$/<5uωcMٱӅrv$Jcl4$?iZnk՗@QϨķe>8*<yrЍ]ޯ*#8eZX}`avjui!uiwwP/~vt!y'%w$k:fxn\TVRXlBeT"SP(c2R[GPhh0xPx!g')<{ZvTdT)L'tD֙Lϣ7'//{0[hُkvd%њ8̴:^gk]c{ȾdI#|#1ȾrwӘHz&Mӂӭ/.ފD0\?UE8ȓYɱBcKfҷK5f=\E!ny\gV$!#D  zs%>gDO@^/D[Qn׵ϰ8S~M豈: EB03 Ch1-CLb CZiˮu3~3IMB-Sq$EP_Aauڼu6 (C/+ZdGP(,ɊPK_>\-=x;2U^{ Mje6J/NoWKAfFD/XT·TG5r63/1nȈz6SMÅByj2DE#!L9Gpq.ۼA b]N&dG\;rq}97k=~qrAC+KɭՂ o*(ov VnnB{aagy.t) 27T^/IHIMd^SUQIF|[)et /rR9n]p^~)OdzΞGOx dk[\xe٥2=d%=5 ح : (ҍF4ڜXzN,^Nb;顠QQ COlm&2S[c촻Oo -(eBVlPh?lDUܽzf\:i Rp=߉ ya*i ?~b7~h 0 öyw˭Z?l}]R:Yb9̫guv/>n! h AN?/ eU (&5,n';ҥۙ+X 9i=zI|'`ffd!.ekl,BhhS>W E #Z--J%Ѓo]{ʩ9Vۢ2fژZ懥EVofB&]-Ms3 (qjjvt8*iӉ{E"`8dŬᦪ3WO-x8eDѳBQu5T]dY\@~kGjן<]lAi61hV*Eʺe"i0ؤ{&hks'}l>{=kԕWEQ|Fs0vf|@uJZ5pp3c/% 4]5va@J_Y^NV낊-GUWUVְOdf2y*B7X>L[UUnZ4MMtMDOU~;q2fkh;}aN@]((3Q`EYo}s'Pg ġ4iX6| AZ#Nc)mn+q-(a^671|ۚh46X[Rb3uW}ruArIwj^ BP+B 1eQal6hY̦R3hKP06NWZzs=\ gJwߟqK5HqIbs' k\R#;!7{m_>aҙ\|3_}&@r:qf?Nu9Ҧ'g?x-d-떝?quqQ>x*dnofVWSQ=fl# @T58R{&3=$ॾ7ݸxE ?~O^ iX?o}fϹQUϡ;cFRU`Q7><^uMuǎkGa*2Ut"iv勋^ϳ1i3`Qch4/y"櫵w^}kWGhpAt4E7ģt yY?AiWó~n G˨jLsKu AAmC  _ͨrS>QH:Ci@nvL0*Ny+m_|Эc/_[f//xbNVvЦ@A}TkFK80?_2ۚ @ ##6Lߦj*7|ߞaom?Z2f]Lߴg/ٶ]eA$mE2>@N25na|>QPq+@[Rwgj{]:Yx3 |ZaQ_O9]w2?KFZ }) P>`nA7'woSi) IDAT?hP5+Mve}p:dMc b(+4 wΉ^T h-WEAOmSmO I9R]ZUG_' ٲvH؞w,1͇͜eIJ;Yָ:F3p|w-1~;iR049{ٰ-Z}[=}fd~Ėw6?lC] B?"[,7<}ꀺ5;1ӱ[E  S۳Ϗ z'S㶭};ѦZe7vی?ez8i+$" _גd2L[)^A;U6Pund1m%G曄m> }n; ]A:B?Ag_S:IqU٣e"i\L{Υ;o8g!4k++*E8v\;|7](fγҼۧZ>姿SZ^D!8,_mƭd428]Lù+t?E@`.3/tػg߽G#ǭ[~+!ŷ̛?j$-&ؼmS|wn-iTL¯niưpfե6 m_q$Yg"pTFDT'^[3ȮI̊&:F XSƎP]Ne ҲGUO$ԭ5۬EDi북"뺎r8X`0K!H,]uYYBB.<8Q`ZOCB  ong;_+Ro6;0 p]t3dpxbZi1< 3A۪"d^(xU6\6MP\Iߖ2 [x1 @Z"؂9\jVY^S[$7 .op6QcMy0uYtqP=բYYPֈqDm |4d醟/>"h}煬 .0nI37udWG3]m}yJg+ FZ"4iN0:{@ lq+p='[3u ]~'ҲU?S}IQ En}uO#k7< / ,r;{ ˭m<.0Y}4 {Oc$AK~isJʲɥ*, i^UdO%NfDZ"dv"'KARSS{AA˧GruUǎj͚8uZupӸHuX0K|v>nƯbd{[zt1ןA+Mow0i oAߪ|&Z@\~E 7t^rێ|''>}Կ[1N]vR_ƽf†-FT%MnvTI6'156°}-?M  z|1? VVͣW-|W$zK۷x*tV$={.[ۏi\{hA~"՘L+6y{ "uyTж0›W)MOmj +F ek#Jm[؍\r48׮yWm 5 iLۼ  -hH(/d+,GQ]! mQAA:ͨ؆(d{84Ɛ`:TԜ~߷IŹM1l>4A^˘M_9v,vo?Z֌ 箽0n^9vrY=lxmm/W%UG(4cyU~$nG޼r'nTІ$^z >|-Rvbv,^1cx~e8Ca30޻Aid@pNy"||t'ֶ`琟20 vyY>a5~&aF7{-/\bd-MYaRr 'DCn\Y" t m_Iq IO J`v?KPۊ0@zw:"e-c,GΝ>ѻ&){rπ7A70iv$_uIAZ n5qߍB5_۹G`xu9fn6nmO5>n d{TP3ѩ^`]VZL1'$qFތ4QW4_4{BW}ZMK!4>3ʨdAQӰnߘ'TJ}Ӆ+ <ÞD8a" fr 6m [ikw,ɜ옋rLQojӐqb+K^<+Q88{bse!gJdxz/Lbdf!g M%u䢒⼈oY7&~5BBb5QǸ48+J%a1=\rֵw\NlґC4#pZQBT^&0SyZ2U/$UIQXE73j1(nme͈ | ڼnOg㊄(+8Ddy v歸rGNDշd|YEFJ5TRv ~NŇw ~R$R8IeY{XhϞf51ȋ90b]gl;S:?&68D84n=j }Kz^}(?1WMaX”}W2&Y7hW¡Щ Tn^ )FQ0Y^ZWU?#:&IW%%$mfDAhϦ v̜䬙q<|=7*ͿqKN'.<bL0Db>t_j?nM+XM^|0'Muy\I91/̼Z:!ƜaqIF!v{1e$9\L^>Y)G"S0H$*hSyI&,MRNA nGslFA1Q9+Jee1D,2c, ɬmXf9pΝtu؝S*s+NR,.I`1 : LfɅ+ \;jh忯l+k ؒbE ôf Y«mRtE ,:}3GOU9yVj+3bC.喻RV |v{LKj=w$מbGėG6|VDe쳔F}c'UҼMm0u{AμZ kt;~ JZ[A?A֫k=iPHUu n}x T[ iCKέMa8ߴTvS-ńy5AKW`F?o@z8Y[Yܾ|3 4tCMS)%_ΰ3QIuN! _f:ңK!<;z&C&TxE?T]& AAѡQ! vM_A  ҲQ1Ԙ)  SΣB  _ͨrS$![4hvsOzo~> 0̈́_6_Ĝ.L>7mϫޗG+m_># _GrZm}+;V}Iz÷25oL ##l8blwZbP5 + zc{5O"'86jjtDk֟"lv$AchیJyT, o 4 B$ܸЊ(|%1` H-'ZnǕdMc @SިXAAw|nvv^&4}gӁNh4Ar;?eC zEN߿V٭|IDT5ISFa۶+b就ҤG.AYLLL>Nk 5H͒<vGֳ9gI+&C>~ M0:Q*a1j$74]> ұt>*?;e^;[ ʗ֕]4BI ;pfl ɟ@yf|D}$. ޮJlg x>FS۷R8@Yt 5}~>o#1^g !kjyu}i$,!!SCE7_Y#bu#]*|)T7Fx?u1-B5>}!~(\znz1+C=eI#\$Ow<Ϫ(Mmu H)6d#xƄoϧ{8zL5}K#_Ar,Һ~eJ*S7n *DE' +(5, &ջ])$o *H%<{7|Q2EH2J'cu}dUY^[#$S i:};wJ?OsGLϼ*) ]s8 KA|>*M4 <*};? \ͣ 7@=H`$)ƵkE@gH2ܶ)ճcCwhFgQeHKQ 4\.y̪=yڡf{|:w! U,쬎5-Fj  kyF\$)d-{[/T{Wٕ6")hi˅qA~|xM&jz )DHR[*QDAk4HP,(S k8Adn,lUܐ֖%AckXumՄW^ ϝ=X_qЄqM(xE0ׂc= -]ME \LG]EofFooel-t@k#=Cѓƛq?y3J8$WڸVmΫΐ @37udWG3]m}y&aNzTYP?PUXB;jt>Ƥc*)d{0=ѧHACad{[]tp_&q~|)!x@Rt"@Sk# WL>P?˯]:{9m6IVvSc' Ov;)yTԛD٘Iƪ޹bN! HQ!WWvͫ/jpAkQ}%7Q   |J$ #l HжJs  AfTlCyYo?1lf5v;ZGŰd M_9v,voe |2m;8=-xuoѠΖztIYZX@ IDATK B=*RZEsF}KZn;I i.t"_G>+[\IH:ZJ}&~ocTX(SM[:do`0}붇T {60OAնUS@.S:zq70JQZ@H__|*]@Hkd;)FlpZ:W6e   ~ƣ;wz̘|Ze{-}Z&¤^]!x/OJv::Z:Z AHڿ {M2mH+9z"T3~ِxMFGNe &-N2~ۻ<)**uDȯe OV /0Jv==t)5dnmsiu+vQ |g/xlp߽$!}cRPyiat #'Q )O`Ê5:B4ݾ^6?hA"=eڌAtE8y> YܒM?_z-t<4tj8^cݑTq\ i>*1og;g LlnrQ'(,vZy'ǔXl[[V۽^yRTTy9 {t k> nHJa9ͬwz=[w{[ą_]3ͺI3 *3c>zT05+wAFN]Fl\}ѹ Jhӝiq?paa.& XlsbǥrE߉̫\~Yv\F?g]k765.db=(7FA>v"vԛ(>ܒL 5"^}7_n={aiȸqE8WP6N0=ƅ S.'\VTB~Fae _bK˓(.g蚰ȶ]BikWju4@X{)\>d%/4H(z꺼 Deb c=*|F_\8u\#M%<)8׆a]4gU~i (< fK. ;ک=Tqr *uhlkc(0C~j[$- f aQF )#c )d24MOG%SEU#5tkZQ8j:6|ée?߲B OQœ4Ers^g\8zT(P^Vma6$4Nz[NVW2>ɑgpC*j@MOMe~@Z>]FVN#Ȕ$љ4td=ϳ}2 ?~Rt7'>\YS=%$! K;G%.,"{0fXRro&Tqea6 76_'֬:}MiʧkD`+)a]kM3=z[)V:P]̗ 8)ee]VU(6ס+i^>, AӮ\4nz-dioG [E2VeWזťc.8 # GkQWHڭPN* #/m2` ӞǛՍP,ݹswwsJenLaaNtG `kܭ3|Byc~`g/ig?}+exEWnS dbkQEOo1͘mij9Ajg~ }iӗJIE _#8ar kJS݌v!v>qY#H ƖNXцj(呍7@UV.vd @Z~c_r%sNM]4#ǷkZpp:Q^6WUU>Ka7FyR-д cZl;j/ Ѿ蓻wUN>,ʌؐ|@̉̔Y  ࠝVY H;cFRU]GBfW<RىOe:#׬Xfg#>~ށ ruq}jr_?DW3LU'iZW9A | f:QѧPvu! G  >ZC)_bnN  1mJAmFҦbЭcPZcLeOy] |Rm;3>*vR7x9OΜ}?r(O *r^'}(J**$5]mΝ 4H [,kKͶT 0}L1IIs#d,F2AA̽ߎj/bl= d+ZS3vaKԥe2z:ԄwGn¬Af`te- 'Kو5Duv[|ٽhcvxe™7*(-Z1jb^:b).Ԅ|%<*;  :BFXpڿI헳Dd]Qn`kD\={0Gź겲\NU|*KAad5E" Ia0$iNi%S[D7|`1 &5tH5!?BVTՍtUeTGÆ0GH.{Il'(_ [Wzvx_5JNN \ww+R 88[6KFA>OG%q-Brm#1t-L_HQW['JV6V|`ocC8"BRP1>뿞˒xO8ĵTǢ?ے7bdY]_!0*kARzm!ƄoϧAM")˔p7R0qb^{d<ݒCuӭJ̪?  _OG%wӛ 6^ fG0W ą7mpvpНj5b H Psfg_r Tz<\PY =֛>)S2AqZt WE x+'v_~WstgMˏ|l􋣲y43Iz@)CA><:p1Yqd+{Man\pӆ,h~H?sq+ʢHZQX)(H[¢Q5-]j3SOϒI̴*]IHRu& F@a]vfqggu ^VrkU 5ⲄL̩_OG*'*.EATX3kbbdjjlsb .0MLWG[߮k'ru^Tauص%+6 f^Y%*a\>K-,;YhP0>SZ.-y?iI'?) u6UfagHPBctr%r`s~*q@Kث"'{Y[90n e)Bvo'rzR$1%:e-ua" :³~a¶u)/ߣ=eChDUF~MNET%MnvPtuMWG,6=Cp=۹O@V3yֲ⪬+u㫒lхTvZr˷" z|1? VVͣW-|_꟤g}eֈv&oi.՘L+6y{ "uyT_ԛD٘-Iƪ޹bN! H֣B?zW_xՆ  : AAC}>*P _64WX  C@QIQAA:ͨ؆mz/Yo?1lpðd M_9v,vov  mg綐Ta,-|_ϿqY=dži ܾu؃4ݔ䳁 m|I:t5}&~ocTX(SM[:doiKIԁuCvcسyr84 ͨT"d)7k5P@M`>6]>5ƶr+YDSV\«WdC\Ih jש#A@+i@1wCțqv9j<\KVCua3EO;R7bSW/!Ի:<;vwTCatOiM?]H_T@m^Z܇O-=eڌAtE8y> 7=&M6X ُ=3qߍB5_۹p*(F(B\o_GZ],GΝ>ѻ&){rπRi]}6KK27& &zi W@y=IqxlVD>>M?ףO*&/*Yf%lk1oEVʼn뎤A#Q)C43,Ṗ|o.!|6m [ikw'48,4K(bjVJ!pmjtwcj⢄t'cZvC vN9b KzWYC41ƍM%Xcy ʍA6h~p9կ.~5BB"zq= ZFHJ-$FAjivb/ * j^mZMXz2n\lvQyeI^ڋ'q%6tE޸AZp1`ȐNj:nzo88/eúhbc3&8|jDN$36 eCi i1Bخ'sc. 1;Һ䛥Khj8RQ)BzTj!$yWyWfU{01ik5]2YN(.f! _6٠VyTDVQ`"KU)Ft {IEi.y糛Lq1BRDߣ7,5[Δv평 0)7ƶ6Ɗ3|9+ l8 TVRʹ1U#+nIzLSA"h"B*b4h\IxJn.Մԅ1,t~e|F%AH><* )G.kqϷk: F&ތa$ auO*W) If Pq0 GTp%"`H2Q),I M?!YkA<ۧ-Svˉ,Ot7DddTfcI$IEc~ G%̼Z:!Ɯa $eؐXdfAV4$CNuYY^&8L{;j("¸ Q5C oZa0F().:6fdYuVD\b7aO)dnvZNqK,u8*.,.sǙVDA>0 l+k z擘Y«mRt?4ˁ3twݜRhgP;c}cq3'u*y OXu)HӽM Lm\N4ܬi^u%Xk̍ z!KCcݰaV,#EpΆn(|v'SiB%_bFV4` 7bų>%Gδ fIKӒF\ieREqw&nO  #<뇑&o{~I~¡SA\#qDcکL eOP Hs9ڤ{^͖HOU9yVj+3bC.NANOlTH*NMx~gW܏:\Y0xeߵ7}_ARd;YbwOK&*c0<^uMuK*G?ZjtnU@1w}}M37-TjKc:}~?"qE_S3!KKW`F?o@z8Y[Yܾ||FVб<5vL5i Q+ ;jIwNsP:  r:ĚyѥߐK=U+Oz3m |:< L5}Dʹlѵ  _Q1Ԙ)  SΣB  _ͨrS>$![4 \ѭcPZcLeOyݎ] 0׺}g9+;M=1B\d9UzƬذW2T&v=Pɠ׸1~DAUĭDwmg`HSk{V{i]:Yx3 |Z'ܸ|)-N%|=ILn#.4^isRӸ|P,e9>B!(#AAO>H:Cgmwl`uo/sMzmޓν,o3 IDATqki>lD/SuLR2z4Yqȭhֺ ]%g xxqÒ*qfg6Z$ bv4bն0?H-=E()HWdF%by!δYe<5~”l:cI0?8}Ս 1|pDrYobm'^& cQ5E6ɿۂt[0ol2BV?ʹ\ڱssj}VbA{ߣ)1,Yyud}E9-_獧EK ~WKNΝ|)B 'Kl[ZN|g]Seⅎ{wh3zbbu[G2k}* n  0ǂ2WE߾ʢdo:Mwq=vfXz:&W7Gbr98TTq󕽍R!4?L~ѻ=^;[ ʗ֕]4fWRSB<0JTDl*UaAm36EnnfV7f9'J33\Pװ4``kn@}s*ҪլHm[ƺ=WUM#3 N!)|8{ F'ŇqL'bF1 /mء7R lLh|1)ҸLw# 'FᵗI-Y1T7ݪĬv |Y>E&p>7;;OXɓ #1,=|Pr4A+1Iuj;"h$ ong;_S4U 2Oҩ֒qn?_w9GxV٤=hL8*amN31?AcQ؎OǑmYfWViycLֱ (8PXQX)(HUud59E-3w).ȏiDM J4t)[=yuQO%Y0Y]I\ڿqUBn,!sӑʉG GQZ4ތI~Ӟd R`g6w?9'^X-,;YhP0>ɷvmΫΐ @37udWG3]m}y1F'W=^r*WqED^|ifWEsgO05r4a` HSNr)H bJt=uʒ3wAh>΄K,#*A N;x"HCfuJ뷞4R]¬-7/\6mίqcjP]ơGl߷{)Ư!Oı؂,>\?6۲fbko]o2`s_HmE7W'&R @ 8ڛQB!Z\W\VAd "b5"{w7d:rH_T #avf\Y(5\0βMV?);mP7sU!kpFݠ26iʴlD^8|"(IBz.ɸ|VUQ"kވmb hOeƝŢN5{ .lCY9MƩeO=eC{Pr$o;_L经7)9 k e m#as_}Vtr M|Iϧ騂#j]ZCWi.*{rb(yt*㻩\8\@ tQUNTMA᩟:<4-ж >a[quVeۚЪbE-DO%PVQ)YY\҄ Q;%TwbцZů;J׍ УtXz![τ_ '.t]3xߑ>[K;ecf;WB]Q/Tɧ񼓀k:Z5Q<:eb6s߱oK L)Up>&d+0B;꣪283#p[AӞO&hACBiMi@)*kfeY7m;^mdH]MP=vc/??O_L`ÊњJ\J*Q`8oQ/_:|_ى]r_lL-M?xwP2F[1;qXEϊ(_p) j&ɞ}ZBHNR4;k*ȋ^KQ%$ڿI&gBGc>bɷ=}B7sM{RSF_7ią#_}>W1/_9Ylj(!γU&xMػ[0XoזQ]i?:kC!Ї"*Rقd[{:B!PԼ0B!Їy#lAr>b;ܱm+Gk4'w:4נk7!B-yQ|i+l^uULlσ-_(i^H1%ׯ6o0`tYh]G4۶3BV-g^N0sٔ%fϪU7m lE%ABfռUQQԋߝ<ȚrY@0T; ԘF]oG %(ANHp!2(WA!Ԛt@ꂶ  r1) qCec̼N4PIo9|Wm0iI KOcMjInLP٫a6zʮQWzv3(qZOokʕ=vhxkW!`K(?rI f7s-ɱ{>&שnBXAsiRc7@PDcr8"\Ӟ iq!&o_Q7fҥsL~B09V/ת˶o: C3BM5QiDcPw\ 5nńe ~x޸rQ,z^#f-gtrmџ/V" qgߋh\6w4w̴M'$x59]].&c 2ޟL[BY$ЭtxudQ.`ǹb*cïQBI¿[U:c3^d) n옡D lWA ni"ݮF"^|f|.n]w!wZC{$V|a_rmzCɣ':>3UgP^)i^(n3A{@Ÿ Ԩ@~*@a,YEtc>m((>{ߖoE],!JJ`֋6F8zȏ\4jL @{JSpE/=,3r2vvײ}}ht7'^QGE!DEUWKՙG*=Ξԫnkn8. t}MߨظGEݶ1/m,42@*,{),QUUv"5Ur$Ӹy c[SZNT-T%饵)˒ٛrH9LP*T 9 &N`8ܕmy]g/]Qkn?8Ѳ=/c\YB} EU:ϣ"[2P+,)?-e Ͽi]D[;7vTߜSdy1aꕧ(%DyIlX/2j؇ htx^f F$6EPi;MS6N 3W|@FƸ;8"39qA~,EZP !j*4{*9IXRR(d5ر(y0(,.n߂,KHy.L7rpկ.P.f^c - !}63Fhab3bX᝻5]4s1gj?NoqRo!~@+CY+KӒͺ{˔ȋ.6֨4)Q j:]?:f ޳H@%|sdf$֟JC3(>|j :_)xu;*LG\yefܣ3&2CVo0co01d ʹv hU7]'*CS7.Uj9 N;kD&:wsT뗮((͍WPAbbB]{nCV&!0ieۛW,k0o;ccˏ w.s JZ1 #ap^LԃnB`tzZ<8YWPuxxS!P+Q}XȊ/]O9!ja/B!,UKo43ո!}}!jwUqQv֏B!4oDefn۬kŰ]CL" ٺ六u7ؽ?Mth-@NZO^eӀz-D-{_':_³o iyTEٯ >fR$#>?0"?bˆOaCoő5yO=~rΣ?\x%i hF]tL/%z"z+)byT<;e`'^BmرX̭ o6{!z Qi3}[rRڀMFTDcO}}*IS铌bXt.dTt+}U~bRXKG{_J!X 4jt9nO_oxD8 Ό+˾uPogasak?b],u$78Z ۡ~TYISw7g8'AIzՕ&jf;[W۶τ@%}zݏ\ N=3&HEUqEĊ*c5%J W>b q3YϿg4k>!\>qe`o#B}Z+>)D/wH᣻SFZ@y%cHPm3~6=gۼ){B=v#F:9YyOrB|g/[}he 곊{z54=B@73CvExf% ]Hw-|J^_̚iɊ}1 A=soˑ̿y|1>r䯧,<5vXh=_H"F~>OGN!PQUqd^xb۞ քIeq9]~HA"(hX4 Ya.EL*읤⢜ '.:nOdۚЪ Eh<=06FPPVQnl%(YY\҄/4n܎*&-ӡ;@}0#ܽ̈cU4"j횽J=WyEB.m<\}{N4;NgTEH˝m7UrBAYSPH* (H%|V$S(%2Xf.l3ƿki֯hgo8Uwcl&(*pOb&4*QJ`ΤzSnEZcM9w,7![ѱ!{ͣ2$IIʓKM.ƋE{r, ߟxcQQI~1 =-Kp~[?6 (Eeq^#kD2hrM+{ybV4UTRémWh0,٘ZP%gy:JsH| $_|uJ_#B}ZY>*yEX<θV=ǐws ICv|4N) IDATWgJV[[W"jde+ m^ ߩ1;q4*L!NjB+dȾ|-!O$')nY',!wM4>tB?QLV9kt&S 䙷~4ªZf"CU]\2v5e7&1#YGpusvs25v4y v4>`ur6y {w &˾mۘ2*5u;Ӫƌ+F|_7"2XG\'Ҩ+ C&wa˼פ4BB-%ɉi?p:@Mi,Q ܰ[&KÄ}:դew2 AIobOWTDŽ<=}2W|9Qy]1gl*N /M/AyJ=ױ4@MC˕Wro?9~S]UrbTq vmjOȊ{~6[8}ۑUqoyW'B!p# !D՘ a;/io=lsT8m[:׌%%"z,54on`&o00s9-Ї.yT :zFF`_p dIgQe 7vcWiܗO:uhV;A1nLv+B}ȚwU}T^{jMŵM^Hiyֳn'UjHvkQO˛T1!<4Àҵ7v=AtB֤%.6Wt˲rI e3ec|X''%/-UL37ݬ:ϸI~,$1fX'y7v쏴[i+5Q\(H$WF&HrEIB2M |nz{?`I] ɍ <{5Um?gtw+/ n~ch2y9lC04C!ޟyT,lsGJM:ʞJ :3G>ģOKXxsQeJJݪwDóg,cr50ItpEp[ Jpzǘ.u&v^?lZwc:;HÈ9ы`[zC^TkF!}zOUU/cqOgXub[u3޼'PuUم BS5r] cfz[WYt{. yO/ *sGVfU9Lvv8F4(APc!ƻGU_WHP_L^Xlheէ_HA0APwrݾoTBLl\B+&NӷU)n5#?NV,wƼTЄPf(Z[yr=NkϋfW&dVvnBq<]Ғ(-V%+6hqݨڃB c9dHlyM"zwha̼¾lRTI ZUa𕐡s 9b#dW͍*dqwpEf sămY6C!TޟyTu`/[yڃL%+///R>\t4̧*P!IinܣKcqM˜QV]ʱ1OPde83лwO*yi|٫02#j2zM¦M]&,Zf7'=>[%rjv.Lm{]{r*4M"8mMI)ZfYB\RPdyO&Y-<=Ҵj2%(򢋍;5*MJDŽ!NKz>n"+%ؖ5e"iCUƇNo~]JC3(>|j wBǮSuP Χ\7% ܽr_|Wf=:#%Qe߶Q J"H,RB5k 9bȽJH[bHhQccˏ V°-m .Ԟ!|:\.py{y::]pgUIx鉎qiNU7kB!͙Α_'6csB!AQ!B5&룒UKo43ո!m& P4oUqQv֏B!4oDefn۬bv 1Ѿ_8Dwu[Ο9p|_a[6 h"B4*Bó5]/嚣-<ܝi7]Ҙ>fuJ뛟[f=lyZ*gd냓IZwAZnv.wWD^]zE>ϲkošeB-y#(I4`9O^2kOQ%/kC$I 1,F:][=J_T,V?UBɥ/%G``<ɹ֟ !Ї%@%-d[tKY$ˬۤ/w7g8'AI`u0iJOKP n t.:웇 -Q2,n_#ۙqeٷSwkG(b%QIMY|˙?anֱUQH| @mLX8! TܧW~~?3skTQ(^M'^D-/Ks=w&gu4F_tpv<FVuئUbeeW!jolW.ڴ'\wW2l>poYLzI7݈)gwh}O 0n;"hی ??Vuޔh.r+r0K$: ݬےϼ ض`ު+9TAIB.ZuS$7e [b;=yn:BmCT b v,Ap1cy6BL*읤⢜ '.:nO7n?;g# 1aEۤѧ\O p)ReѦ6Z|x>(QwbvmXtQUOTX >SPUa̡* PLTAAYEqNûŚ-)YY\҄oR}!'kmȊ ~'.4s zdLxfT+B?2sf7\3GKZ3P%|V$SoUJJe sJYSYA* 6ۛQEAٵU"G,p*1l&(*uUz/ܻyب2OkJP,AU%Xg찶!٨a(i~Ϭ8wp=eWĥWB!;GUS+ =-%xhہH@/RϷkc$-qYF$.skW<ı68ieSι{im'񞎮ˆbAhxG'{VE9!!j*n8={ugPEQ"(&,|mkFNҬj,/ ' 'DXG%WSIcBv諕kEӳ3J38-P3ڌ[{;hm(qFط_X46ߣ-+I.BɴyTdYϝk CldYeׅv:tg2Uї"}Mfnn3qHW34U IE-G?[=-Khm@Y(MO+U<'Ŀ0 B5G%:凊S?]5PSzJB%*lA{S!Buj>* B!!hވ*[ܬNlǑ;qh-@}dSfX~m7ͭB֣yg7GE_wT\[uKFȥR%M飆tҧL<)n?ւMV< ;y((H@yG3Fko#Ez#Z/ܕ5ʹqۖx&VȪ s;Ҹ (%Hע _rْ m!5oD<*JN0͛m@l%@)* n@ϭ ̨aXٸYot$|6Mѭ'b+}>SI$Uܵ=qŒW( V˵/4tXV؁~K1>Ja3jLQ޾>hnw6ܖfqKJ^>i/aq#t>`D+9B8ʊBiyT?7J9LU zѿRIvSLJ9n|˾GN/X{jUsvO?ذ'G : JJUNNJ }Z(\?&N35(qʹ+F Fݶ1/,42%>:Vs->ƕ +@!wGUHiiNN~5ge9o5Sۨ=J iG4 8&4.R)|isUr}.UrzTdHl_ܴ.wv;*oJ>cbS* 2tΔ^!_l$ڿt:אȍ*dqwpEf sămY6C!TއyTҨ#:[2hL(Ń { tC{or뮮(/Rvd%UԣRnUUVEJJs \X_;Shzƌl|7%Mc=bp;گQQY]ܞ̤C=-+㳫g.\aE!dޓTupeNl*#\8mt?w sKۀ㆚VEG˕zO`k}N>i-t~ú9;l@K=+jv.Lm{]{r*Ύ6'5iB\RPdyO&Y-<=Ҵj2%(򢋍;5*MJT!NKz#W3LqzWݿ~ѤVer<N={@Uo۵j)OMIçr$/rjRK=˨ԩͯ rBiaq&\e\-P͎Ntߙ_$W!O;۹oJ{G嘉3 ̌{tFJ(ʾmsDX.)i"j:Dמ.1rĐ{">~=bBccˏ wE.s JZ1P{VP>Ll.Ëz A}<삮\o1Rr'+vtn/p !zo|T+"6`KW=flB!Q!B&룲uiF5svBQM[φ?D)0Bd3-m+]{1>ABaLGV13]c8ou]0wEúIQ%s5UhZMxoOlFb8B}Ѽ3G4q;@VxNljf`$ F}=Ʋ;5{V#~:Ech (EqJj|\!8>gM)*DFgJۄmdrԞ2쉣LSLֹ@ F!NFTbZ͙Ų ƹ2C־>E?^otv6 <,c(Yi+E ^WЙ<#S7_=/9QjGjq|-M}T IspBIKQ : :Y~F )u cmD|.,KrQ|%Y*eFc݀V[w1c"O(ysf'ti°?o^R5xhs;G:qnv`sp6|6#^ 44QfAG$mf_}ęl0o}B64 eM14#s `wFXΚ-*MT) ePP,yȄC{x%]6p_rxO'{݊w3zoIn/`-렑xfD9ͣ"ei 9my׽>{ hc‚;Wg8ÿ^y9 Bw7~ <.zW;q.S#j-GEӳXJY-&;rE_o G 1Ck42$-v(ʮϐ1SWH_Y3>?\-R-w,qkj^ZM}= bs R;_Εq1z{F|6Ax4֣r =&+rgU*6,%%O>U IDATGhz䂰؂.lXn-ąG4p?m^#/\a YN6}TXp#~g`5*"_wY (z9rƠٸ0҅Ί(y+)"j";'+?M @W?DwxQVyIA[1_F,{ sJTT楥?S8WNGGGV>{VT"F xP{Rn`Q߲Jy=r4psDUa,c.Ma'Y% VZvqRgb}k60p g;XhVRAB4~꠪gcbQ)UU ےϢ5 YSE$28D]P,3,,VOJsy\Cղ,sCҤt/ޘ[xPҜy02c_8w6.ض~SאMWV,݌9zNҘC{k^UzaU!ЇͣܬMDac'H7@QJoFT˲䤯Þ6voVOӨmۺ7b`CS31e*jHPꥋ%Hp覟QѴhZQ%OFu>C܍W6~IU(L.ckc԰Y^y3IGk3*^%!j*-ʎȧ0{%2U儡ymG ]ҞWSP Fy:MYQXm/GjZG)$r`s14zdMQZҝkw3ɒ@PA5 X]Y*{{4);GQ}6KLJnyN*+ K^^)i^vqZDQ,p(K*€ !PiyT||Qy3{t󰴶ۻz 0nS(^*l -dY Fy-}Q|#}YT>4W9y KrӒ] QXUX;ښJXvrd2ފ`Z hg``NU@+ICGks}/tPuLC蛚[9zx8n^'qPSKK)J<1xpR4# gtf6c>=Ƒ}G,f64eaJ GG mnjgjme@ftPUewegT@QRaa_SZ!z|>*y{+ hw>2#!ҝ"99wYwDaM悪<#.̓|ūA )\ JT!O˽Iy@Zc5%0<6QڻiO5tALPVG\ͥ5ON qi܃T@)Tg,x#XHԤy9^i8({-^@ՈGeh%o5hф5/^|wLS;DXZ ( 8|s;|0v5Ewnum]{;P5)WV}8 I1<)OI$T,_ kg#BoC'C~胁 BEKϣBH;OB/ZJOlB/lB!oR mۈPu8 !ԲZ<* B!!hވ*[ܬ0 RPҌnܶ}if|[o*Ƹr xN\2pשCq z,_OS\:B?Eh}Wm+u"F ^֟:™oM6Aۏ,iNm܆!Ϗz$WPHɐmo(y wڣ趛į%Zie7eZ[ouHm˿tie9kzשY#r[]!pY|$(q>l~O74;Ru3 ܻt}8mv˹4_.p^f~U}/lL*y[OpI׷# SRI\ '}?h w\׭!Bc͛3TGNw:i|? P?ay^. řa7{(Q0ie@pij?!]9[?t=` 0gPб1u$w=^R*Arwj#K7^ǥ* _ ߺP0ie׈Ookʕ=vhkWm0iI Kψ{jnMe #ۙ09w?20j׷k;nRoW36Hrc^M膝>YESSPCVUy=/^u'V˦ǘyc hEر?n%0@PDcr8"\Ӟ iMQҸ n7߯;jbRn9{ [y!]Nv[Gke7zVoCB5oDՈwTENr']EP/( sn:lָf趃f?uYKgT>=B_z<h PC8\EYωgOH:RKyI_Qg?O OmiNifOH:p6~nXB3>F~^wfЬ>2ni ~!a}˦U~u~906qOGʭ,,_Bp|ՙ9x~W8JJݪX%AZ0IȜfJHo%aLR^rBtzӋ~ g8z4K{ȻK@"Bڴw%_mۇTnݾSXR$Qi셣Rr3] +ֳ|Z\^nӋy8@q,y|j ϒٝm׮t \%J,4& grRF܏SY|[PP&̎9^  >P\=p)8H({zLP/=`zեuXTYNНҩbwa`'*.vZkwث(ktC3 Sto}K@Q>WGK&?E0fJTU&kbɔcRDM<*hL@uːia+8t]) ,*.C|&qwS' nk}yIق@0eZgl5 HȋKQ2ű0H:*C@T#WO27<:"2*$,-%EI%sBVdBGLP"-k-*F{jitjwNC!-?6&X( . >bʑeD(RT7/GMѹ ~F*s1Fӭ _ 98dM6zh`I20snoƮeG׹cGܵFT))Gq+mSG{>cJ)rĀ g3\-ޥdFU r21` | q!PKisQԌ iYrbNW9ml˛/y2KÀNV=NjFCHh]Ev(!CLN0 :]-D]dU=4mL{U ;X ܬ06mP}tmUZqFAHn-L=#FV*S!BXjEgœtB- Q'*'5;Y)Q`v:RU_t}QGg 6(y89`1Xfm" )"D58.j@y3&v1QW1?nݺ$7}O*g6ZԻן:m6a^05yX+}UeQ2K$#2*bdY}{~!#&$Uiv& A>_ '6YJ#B!~ ߝ`dƆ3* ݍՌY~6$٫fhTzu5'H~qI3s&ڃ^V@F^}]獲a,WT}@"x~GH͊|2+ndyMC!֍\YXMc: 7iRߞ~pxNfUHx @sV_N5'2v*ZYk-[ KHa?v̔O䞼ȘwϓR?F&17CyҔi-Pן\VE7-'Tz:@5"y ԢF!Reߵ03H@Qpe͛z.ÌK9{`ݢ-Sۏ[7D)}n.Xm.JP{,\4Y7s-4IHngt ƉB\ҷ&˩ D%) fVjt)[ K?J\yN̈́ W,e_߹y΢CǮQ`aJ`v>AԳ5!2fBk _~'*gńcٹiof NVlȹ2;J_)'BßT5ǑG} R__<VҼ$"Nl8G8g9 AWiԐr Tq*>),9uHT n=%Än;o<|}[,d M5URլFTb!ZFQ 5~S^p6I(cԡFbyFdo'*N+cRnd;h[Ά p9*řb^)$Fdځ>^Vt썄v ;.҂}t74O8pn"~Ui*~ٮnf}@x= Z&i5hK{Oдacineyf@?mHW`83yn>ع0jB(qѻAU͙lgj;h!4&p{Q8BgcuW-X!ZL[AƳ;ԿrӷmA~=RuzE6_GUya6㚼wO\1ͅ#(D=;ʮ~;G\{[ϥfGdTd7sRn^M0ϼ;Ygwĩ׸T$GxW7)odeJTX*%|YdBWznH!A!ee*88(+/+nGB)d"ƒwCB?.;[kcC_<*BGm, !BQ!B[-.#j\g`dRoB!6nS!nD[ ܶo0XNb ,B!Ԥ֝}T\uۗ&`z_ќ1Wa%~$6OsY4`+jVyeF5_}.?LR#*Hn3I]v6]Ǝ\ YnK:x^cd>蘇nؾ͞x gO'bhB<* SӶsg QVbu;w-xl6\ؘB#O.[bwLG`q=N{G港^](9evۗ  Ӱ ng;uPv_f Y[MaZ&Eq&*t)Y?,Zʵ s n߽xoG]ʈΓ7R0 O3U0u ;<B}GEН朽P iϐBp}>Ox$8ﴧ`'꾐qZ͏a^bʑeLSƯ&HSX$jq;jm͛ EŨr}"y^.=1V K]*9\>8;P)_qeJ|DV8jil. 3bC_[!PKiKyT"NW;K M;ɢ*UihjƆ,q9|1IQl+9fVDU DS/vj sr9N AN4GAcP4#*٩U f0Hn-L=JPY[l׻N里r>C aݫ. B66g:YZcJZOw>54 lz 5`Ow 䓚@0u;MEEwcCݟFjZoP<%4Ӵ,t 7T|0??I] tYb ȓZ? X 7gLbcl4r4[Sb ~F\IT!ZL[A{}& ջ~'oX'?L׋N]0[2cٙUIFZjsG\rKcc#Eсֽfsյe.͢ggv(5KP^I2G'W3xi7՞$7R׉nKGQa׹bA~xMVxLɅJIeYBUD1eH`PHiY N=**B-)bE ~\v&Ɔ~MWk[yT!BXB!!B!Z,3Wm\e !SB_u2Zu!BmAFTZ-EڐGԢMZzRkk"B5uLPE9o9c<ݣ['oD~;%Y'ml>uD{Vl}[獲a,WT}@"x~GH͊|2+ndyMC!֍\YXMc: 7iRߞElWdQa6y\Gۏ$8G`%g\ٴfQB .Ox>)*q9Y\l_~-TOrFܧwn@";ְGn0dZ2 .O~~ؙ*hcoz,^#B B1 f(Ox5ߎܴt`E<'-5S1rYNVffLUU~} 4>#̹^|=y1#-I$#I潧w{qt4eZK-&Tdo,i)M& ^,{};H9l86hcBЖ(L-]5Er-s.o4s>fh&m~ܺ)&2O tspŒnstQ"cɺ׮oѠ1N_$qvJE8Ĭ*~B K^[.&/`YѥG҈K#/)0B;7YpصR#"s,lTLÎ::hz&D&>@B½~ŗ}5oY18(Xvn{#=4"<8"=r|Lǎ7}cD 7I'}Uqq¼O4oo$S$MgOÒ<TS!}RTYP r,H*R FwuN8LƿsƓ׷1l(.I,Qh"ZN@DY[SU*Uͪ|ndJF!ZFQ 5~S^p6I(cԡFbyFdo'*N+cRnd;h[Ά p9*řb^)$Fdڐ!9{#Ž/__;$CgS0ݧ`dyc<^iy:5s5X4A$aD=[,(2:D%o?j9xەl\!}<Əu* 2ҳza~x/EX-!ϰuz a<^]@,|*&EfP4nW/gRs}5S5/0&sAVMc UNC* ")QDO|F,vxSA<-norM ٯSޗ ԈNSGՍe{[䥇:WVV͉L"laqٛN~;B-QAru SI, &.i^JK$;bLBF댱zEMI ^4ӥL' Eaq >A XMw63jVǓZ}8;FM%.zw5ü9SMt5LmM0D„v/;jBGwlN3w.O֫D0uq5 $( ֡Uը`׍!AϯbHZ;K~2g׃wMBxزӷ<~yA$7d<*Մkddeמ%^*P]])ߤg)Q9`]fEEuKڹJ5Eҽ_\u,n:ho{MP 41]9l Wg:Ջ޾Tvo;\%,_ke6R@%;xn=7]cːҲ2izTT7~ B!TY2r GU'3]9ygWc';+U@ӟvh>dM;wj\䊱bxrvW]=bqvʪ|ߑb˷ ;R)#bgkmblt6GBCZȸWopcc kw:Y T9gsK?oλ y}V)}#'>;jĜ!-B}N,:Z;q ragucY;ЏmB-ώ" [ 3R3*R_=td4U5P{߾/L ]W%=8Bu#/"Eq>.Tdu2nւm۟|.Rn:nZО$)(X|Y;iZVn_)BM]*(=֌R޵ lkȀ"S_Hi޾o`^sY;=CJUg|$3nvl =z.,Ύr,QcPq"R~,Jà  N䧽|M 4A7 !-G5уvucUG.7RVcu1XT)Ӫ0_()ΪuCO.{' J+(~{o[qijT,Aװ7'XPryi8ŠB|<Ək[/ u'hNNWGw+X1JKk|&hyYt9qYB썄v ZlF(~O9A#n~WAB5oԽH6%׿s9Ǣ!+}F zyS!]Tnckl5MP"-k-*F{jit*MB|<Ə ̜*IawԴί/ Pds&+ )G1?u:_M"rH jvy{eښ7Hzy 298jnI9Ȩ}堒_D C=z~BǗy>+iYlz޻Ԃ̨AN& }Ao!!j)m) @ J`ziziϬ)+VeҲ$E|{#dZmIW5b4kOB;99vv\HBu^D6Zє <+O3rЮZuJ|@J;M囩2#T6tov{~(s>ֽZﲰ!Pi yTuU:=$܍tw^CvPvz@QiN>J SԑMo[T+?`|g=A04iΡzWw"Ncf1ie!jr`$&w1mg9l)'n"Ojn؏B/P`=IJ6(Gxst1Uq@InMM) }jGNlr%&Q!j1ma>z/4Ta< b<0_/;ulɌ ggVU&=i5>'qiI/ ۏVEF[aVޗsi&¯4cPwеۙB(xva$wediˣ>{3YAr#/x(ut _v+䇧 dʴ\h]fE!_պ пъڹ;YZ|]jǣ$=MQsx%wZ?5?9攗ynWu߬aF/\mQ!PsP4  6ˈٺT\ӓPu;Fb8bN0imdؕσB^}HQꃀw.L9,Ӂ+_xt_7Db?B?m ܪᄁy7CB_ite2W#Y m7n j61g:B} FɅZ\>: : Bɩxt~o*>xה îVu97҅TPci =ݴ5+'zlIcgEi%ͼmuƮOζHfߥ21KĮ@;C+veozbwTc$GE9(SarF썑Xqag_Yv_]gu%&tgBV8;( 5k:(7  q 幣8ũRzh}skWw!AF~ֳwBVؽpOC#coA4!}޳C&ٲ?yYEZؘ7I2)ʎ\ >Zt#/!sW7F]<⊈o oy ~P?& cU'o<>~9|$G1!A!O_Sq8Ĕ0?,eJi Pf=4( \Q5ǜsy>9nn< ~{ņWPZ;K~:$( #pȌ>B¦XOэso j{ZUqjjH,G/eIn0`NwaM#-E}OS.sf^#L'N7?{b2ݡKY݆GZbo7\a+~ݵ_0cDЌnT&Mkk2|SjE2>vRos ,Ckk Ɯa1AKKIB']A5ˏb^e;h2 %?((~[m?+Tg>q|h{0h&';uo7m+Xx6/ftK<B΢Ȋۯ/frP_E.?LTm2:GOVGZ_IG>Emo;\%,_keoE0+MS&-75@FQq [-6ji ]gctAsۻhƀt¤dv37ܵ+|lJ)[orgded#M0VsPTzAb|Jrc|_=XR3IW7fN}̼y-ۭǮOG/Fr ZJܷ 9QOr uc (JZ26 yj'5uSg%s: _Z՚F묾WIy~|ѝT_D+BO>ri IDAT) 9f^{4fl iCM-Vw@VpNڐ][l]7 Ș'~R1/!wJ/6\mI¼ډeUtYiYWSjyKC9J,{O}hMjaM3D͸ =B`҈OA&onJ G)%!A3Ç]:PL>}Rz,}m0;?ڔ=: %&":4E7jX[g)*ƭ\0rmy/"{$iG^oλ y}V+rV'y/y}ӁM(t-smq̏eG6Y;3fi+P80/6Љ*8¸̚=UrAVQĦxM4}Qe|&"䜷X\qdh.P-0Pp{畘:30RU~5zt/;+m!H™b0/>|-Oy;n<:ː4So2H?p]}!JK;;BjVqXw#kHZFPWHI-"TAuE>U%I ӥ^BgU%U &T` +)q;3o-Y#@TYXJi* PWR...ڐ__ct?kYyxhGl&Ki:9)xU" DQndۧ,f:Kѓxy)N~ֱ[;v-`Wu s}Y"O՜̂'䗟M!(8nj6܇:'S > 5'M}Ө-hK}TTN3Wڻ#7ahJOR@rĬ,\ qeӎ{r\$擕ɢlꏶ /!H~q靊v1?woKI"5%G@Ta꫇|ycKӯӃ&.|G]:u)@AGuЎS L={#Kg>;:zwPzYTSXv<*JW5k{^pp iؔ/7hD03#9%=9%=9\N*i)AMKONION)!O#{O&)အĥt`h+9 _91=^o]\e/ ¾w; o%%ttm Q}MdBF5߹D"vJ#Y=NO׬香|P4i_qk˄;6rRsI^Nj4 d /r3$R"OﻺyW4~QSo]'@sW"?s =?M9wUYx^}n˕,) uS;| Y?jɔzR . =rǢ9'g8 @Yx&@ș0o_yr{.M{o*eV{!brC ~"Te^{肄;akQJoox>?~ doJB ]~X#CFl5H>DnYtzyߙKo'Eү͛W~hٕuRqCYAǟ"V{FPзqJꭵ M+u\ybpCR2 /}3w6g-yXMM7rִEsj Wi>cZ$F')PH@ +-(WnΨCȴj^.'՛ ߿F_^#*L.Xd;h[Ά 6 ~0?vx>YH\n͹ļM8QNAx=j5L|~[֩uK' ޲{?7$o|nP > حoOeASA=&9@:%?}L >V". 9kxcGOj=ZN6`X`*3ֺ9m'Et$/--w kN񊲳 zVeKU,R f-tv9 @Q2ԓ>'fDdDܺ~˱o;0"$ΟL~dC:b~~rtnՀHPڥ_e՜$bQtFΥL]Nz@mLpwˎ=eܠ]t+W]3i`jbhj\;iV:]?$;bLBF댱5w{0MɦE'GZIFqsߠɝUsDv L9yn>ع0jNqѻAU͙lgj;h!4&p{Q8BgcuW-e0 B_Q +ڴs݂m|b>=dV[|,!EC{"w_7/.z}*W< G)vn:>'BhvS]* /;&_*ՄkT2kSgq.IbI| +SrR9.Bֽ!{B)_x_C!B!пB!пb2_(B!Q!B[Q!B[2]v̴a Urbx]*"B迩"**—x emuFT!ojҾ6.Gq9 O,ǻvѓ'/Ms^|kԧsEBBFګ+2 S0GIsv2Uc85B!U%%BBBryua(J]̟΋<3X%t1Pv Ȝ܍tw^CvPv48Qg jn`?έ$àaUUwkG-,D*B}O-GEr".CTvH /OWr?y:y֔K kHXl=dRpX8f=ie5՜TInj +G];"7~%G_ʓ_~zRR|zJ4gxBuZzߜW2 ZRCP[pjT|,~$̺Ū])n2AO^f|?ߞ-'t LMZRB/:VRxLfkŢB2iҐ@O:$?!QXUTY?Zu]oVm?yQԸ^ <2sf妙Mv:[ $R2Iy =\%aΨo7>pMpBFM*ΠJUމ@ύ­2캭ԪʋKʔZv芥'*w,3gamηΖ5=ZsBR'=+C̷gMݟPTtxntV1e VQj>*X'͕ʔZBOo*-y4-mdY^{ͣFtО˗L}b!'.mȿCC̛Nh !R9`R؈Uы0,gl{;d:f\qFvaeX@q t`\mTQiW7O^X[Yr# f7j=Y_mCWDm'a纵Ys^]6՚:EV҅>Q50_tb[kLwЦ(A=} 5Ϙ1\ }O<$s:98YYX'%ĵ?%b(M² I˲Âdӝ~>^-v@DdOox֙gx(l[o_sc3s~51k଍Qcb[5ey'ON/7Mo>1GFi3 U3xyx(yަxEE~fX7o}pظO ݳab,E!:ɀUTV |ZRB5Ria-!$//9}Ҵk[/SkrTnZr~WK6}U钃USonYvyݪS%9/|l䕃{lٻkW|izPJ)!ܟh ̎c۞ JJal/jRͲ'$ywlF߾#ғ>N)_o"8җ,RWfmXxv:xm=6V?e'GɳxQdWʠ# д8s|*m[q.t7Ees 5Q&|f'|~fm; F@GEZ^gMy~Rj)pbv8QT+eqqϧ&j"oK"pUs>斅ww޷MQJN>hy+4ZUs"chOaW Ni]ΩSgDRiz̃z )!ՙcK\aaX}.f+3ceoÖ$ V|lL}՛[=w `BB/gz'FܰZ*[}ҧ%fqR&<^,koD`GEj*۵ еd5ƿ:gtg*5#҆^3$eγu,Χu1[Gu$,n&%%],ұ¬0)u :$j'G4|۞,%wٖߥInOtz,OT9yh3w2SmӰL˗D?_*ـ3-6\iEL9G%=񊫃6/\\bR-irr}M$ iRbi5 w/4cb֡Z0WOUB}.RmevZ܊RQymLЬGIFS4lQJDwpK Ti%%ͳ R.0}:Vk!B{fLE1=R=&&i8R'ŋMZpCZ̭i{_޵pq1 :&Vi'"޹p\T4}n6sSBŕIDAT nb?p_BU'^_ !UisV!jYJ'r(! gkHIUҪҿ{Ffn6i}5B_k[+{UYYױāJ)e6msvJyٿS%ͻ9\ϱiELҼ3VXhuimP&<뿛M.|ct7L F[O3 -뗘Rmj`_nGV#]?b'0:̙]zT`\&7 wˡQQb؜,FQ2eeKx]Ll KkJwbx(rY;L "BHXhPgX_qQIn|0D7>8*C0**C=|X?f으6՚>e:V~ 5 0 P P P P P u7$(í0V.**xdTڭNZ<2O7QTe;!胊 QC)mCB @#TT %ꤧ& =xN0 F'|~ó< 5p Xy{]QG_,:=vˍG(TTN>/?f*B!y+1v:jMH}RB+QSCܺ1jY};_-e c>jZ}xO8aS\3ji=ܬr;)NGN8|c/JTMw,[ ]Zg5{S.,,[yB=䍗(*cX !U7w?Z&zjKʗm}t|{7R]vcTC@D錢\/[{>5aKEyrLr+>6YUg3dwW?*o%?iSC ;/gz'F/oز>=-ًWNK¢^=FjRRRܥ"%e<`WӚD(rru]**rj@S&ޮfX}_"T%=񊫃6/\\bam7U&p~{jԳ9)!nyVf&oKreKY÷ +RJ5v}|wpO8 `6_ (W:dZ-GZq68^𷩭RBރ͜3Wz&{Ҹ2Ye{Ld<ƺs #|(=|('MMo9,l01RS|%߶Oӣ*2*9Lԭ\. w#e*Nd"({!!%iWvQR{M*VϦgYʆe)7ȩB>8bYCԥYgm-_C&aח_(f8V)EXNE1&wLRյw"GtDOw"G\uʕѥNPQuQNyRPQWG **3IO L pC;g  p9УG& މ_XhXY@ǃ YBމX_v3| P P P P P4GZ圆IENDB`hydrogen-0.9.6-beta3/data/doc/img/SoundlibraryHierarchy_V3.png000066400000000000000000002144111211146647700242010ustar00rootroot00000000000000PNG  IHDRUx sBIT|d pHYsaa?itEXtSoftwarewww.inkscape.org< IDATxu|Ss_] [@R6m?JF#mR8ϧO${{D0B!BF0 A!Bʈxs ɀYЬB!B/I= .r UB!BgW/^U"'O5!B!*ɋwB!B^׊mA!BʌX!B!TaPB!Bf !B!̀AB!B*B!2U!B!d B!B T!B!0B!B!3`PB!Bf !B!̀AB!B*ѨDR', 'B!\k7!nSɥ$QqRmAFS,7j';Vhʊ<^A͔ʝk٧F$σqO. S_>ȥYLPJPؙutW hMQդ9I& Rzf!r7vFTu;ڻiDڿWGUCO_K/<=QЁu RRcLӊZGR uW S_h;yiw+55>{<+M&Br !dFEBlr~'XJϨ43@hFaYFUó.Q)H$/I$G;v?SU?je\IA"1VAUfB8dLQˌzï PYZP0n/ +TA0Y^{,Gn;,AlI/s8ܒ!򲓍>€w:FHvqq/ c|GSKU`ivnAW6x8<֬O>Oho Y !{cjp^WU}fN^e-.l]qjS\0!TĚ.lu,)*\{rHLi$)#y9ܹ$ DGW|zfc@2 =e +Ѩ$#>~#|}rhBk(e!)/[yf%>^hbjJA3:3$5w*+{f?-ٷwմ03[.qf?L|{x 1H"*BU(jܖ .3 VQWGi;yjJs3?I{awEa0 ov2-b'/ O 9iԗ'Dh]'e$&|I*G |פ(p䯎ǫ} 4B{g"ʲ1Jy.SRP*mFAy *}F tZUtN_ܓˢ&?i[:b+F v,KR8*E~pVR }'ǤnZLۢn)\Q 2IG)-r^m˿R 8zoHʼnσlE.]?[W ˪!x|VҽIu; ji#0BUWψ{bPUk/Y9oKR91agD!$)e#ImZ@vrSRgY߯s_%7=Nwua8ސﲋ{K&J}yԬB:{u61)ە\&U/Sb aW;/r0nuKS'yYL䝣k;tCrm[ĵovS1ri(o9R$sR.1)~r@?J঑fp#Ήv\)W78J9L/v~:^Ѹ'EQwP͕e4 [iR} lDFhjQsO$4b_夽2+,R'sѴ0CĭFϷ3@Vo1 S<(oK+L}T$ Pi5hA[o^期Ƌ7 ץ/, BABd%e%u ش&j8:$9D:ZQnEɏ2 h2ܪ3\efv9:/^Eƿ~u H# ;ɱMbgs :qOs|!m?bqaE ϮWW^U6)t#O)kb%b8<~"sïٯb@κϝRػ}U[A9%H"NCz;f\uPw,I%7\ݯ޼_1Դ|!m7,uYrn ЦO1xZG0a~ZEc~tn1 ˠ۬E ry~uUuf˗#!CVVmCBLjW:e^^am~%oV³뢈[J,zz&z{''m/[ A%x~c8\m9pVeŧfSg?1ݖ5#s\f%G?aTŊ iK3{yUr)_MU ^._TnQGA2yYW5vXVK(|7'ϲ?7+z|e]霗\$ 0# ɥ?ui KۏXpxy!T0BU7΍$e֛P~'*x,'iRҴ42J2_O#qO+nÚr3 ryB*w-\Ь@ Qj)NgB4q-I/Y=uWs߹߇ը=]Y]Ŵ?QT!*L BRHMg*Wڪ)iN*u;(5'͈>ϦS f'E򕲢%65EtS%1)윽 uaFˁ߷jfY5}֬I3|n2<6C/"D^s|pzCvrWGٸgU.BoĄ<=uj=u*ER_>SQEY42(rZš[]AMUu?"(Ha|re}yv!rtg\|U#s3+k/I⊤Ure%r_>8%NghJݎFX)謟j h<qAT9{k'GO{QQ=IopFʴq@jE?aR3w*dfSx!'&PWFAۇ yL|UQ|U@gJ&J( F.~' @aCv.۪~M{ryCvluq]/ҟ܍n:G{r39O9T-uF$1gt l`eݷzڠ AqyUS56_*փK%S mBbaPp~WG:'\ZlYGGWv =u<կN"ϰ[,X V&*EyB¶ŧ*iox,yx~}3rݶv2_b銖S=yAkq"i˲̕f&pSx+i'k92W|vVaAWYIE//}h R3+n=xĔEr_s(/If$p%)<03EY`ȁmѢ ۦF׵8\A_R! à !TGUmCvfC+"YNZ~*u>q]>iܒ V) 5K Eax;-Wʉ ;vh0LGFWɑ#CŴV!}1$xÆkS*Pa! hMu`>RĄUo1"2i12gFy-̒RJ?F:h0ޤdW5^*Ո=4m>Z ;=/QR-avr$O>ZI$NSWyÑ mB/-[M+fyo( =G ݶJk+ i/5̽YN#JHRyQwiScOسU5Z)n|3s4W:F JmvjKmcA@bS l =fؠ8aAO%-!T9aP  U UC) hn³kԗٍs.QYzL/\CS( 1 &O_'D=fVw5ߦ^4Z LёfVE]R:OMMzMɹWg{ ]+N%VC#;_s381ɵ<;|4je.q렘>AM{4zSBHJ]43„naZ,fpH̙<|0FA&o 17=Wл*!gjgJY[8k+iX_KN&Ew1mX87=0|Pzc5o//Pr3 .LD;.nK)|kU\=%q;?4TS!ꭟz{4G"rp7^ +Ұ"ԗ,`lzCJ/TuP%5XxN%pAQJ)?ڱTa8[lYVMr^Zb(a8yLZȥ;G9aW+e$$ 617Ix~ *ytT09ix=\5ʃJO?ȑq;S:'A%;"屯>(VL|~C lRuY٦EckL1@AI{u /RX\Mޟ}v1WUE!SHB`5*nX(#؂ |[;Gï(hJw Q뮤l#JVӖ&N4b$%B_ Mz}i0ZZ'(ʃQg3&)@8*'{'R K' u` 3̭NWӪz4zXy_,E䩩jw5&7z;`P0ɑW풓fڼ{:ki4VbѬ9NAzP WdĤxZI.[z#Ǵp~VIdZnUUR9إCIXV 7_R+EZ*I/_]DVR/(Yy3+>Je_m卺n(_e{5U>$K3tMWYj9[{.)q3%@7ynúUOqO. sB !dUJy."L)s'/t`ߐULU|jV=SݤYJ.e^>8%~C@cr#E-̔rqΣF$.c](Si>mgZRi5uuO_Rg3S6߄5[ucn ȗaJl9ҦIЎV'Blt9ikz灍{g꼬$.\{rYXZZUo}nrĠ !d 0 U- l030\ԴOޠG[[5hαf}e IDATΓO~ۗbJ@PvvʴwbT9twuQ3Z #1[V;Uhr lhm|yzNܚ^#3J䩩qto'WT@UxnURD0eau[ 4_qǚUZEVŇc_ĹU!HBElc;*%Lr~J=AV ^Nj OџG ٫3Z~"7KJs|ڰxi%<.zE*/(e1.ڹjm ȜkXd]-Wo??yQԘ$Z)ӥq"jlVQQeîtgfF'-ϔ8{U/2_٧f2{.OHyB{'|UMb2E:(fo9€k pJ_vNRe~Λp(σNr^9ySnG $)Ѻ$|}!@E@n eJG4jMVRFbrYMVOhGK[ !BCGuBB'y Nϱv[(r8#zRpj٦U9inj/ !2ڮ;`󎣕>Qf0#FBy BDFDGr*b_:J)Mx !I}|@%ͬbyRgq||B $RC\wKx.B|}}!/'U($k7!)pJ[r݁<7U@!󅼜LRM1:?v3B riF*D Bo1HX|BN(QJQJRB!BքAB!B*B!2U!B!d B!B T!B!0B!B!3`PB!BfZrHKKe xhB@(=p8+za@#'j|}g3N' ~3[@р@ ggRP( ;; A(Z9Ҟ ;.gt2AT77wBat@lggP  I9&Ah-aYDG2&:ADb$lxm7FZ&/$}xh48x$ۥ[x4 ݽ[< Zl$|J?4PaU{_h4кyCNJr2 c4ɑH 2e2W`2$&$TkZ [~@E]]݌4Bﴨhݼa+4nҌiמ1TYFȈR*zlJr2DFTdة34hؤ&BݸQV7cı# B>TTPuy'#w#ńk!ڵ{ĄxW#^{tlגa9qc>f.^8gyfٯg|cqLCF<<=dӆ[LϟY_ hщcG93]eAV߮;3fvAŸ>T$;; >Ћ2i ||}S#hM)_ ,XfiҠgߞ]o|]vQ}.?KUy)t\T93sf2IIf뜝]t"ḠKϓ%?.b4ř4SF;x-maݯdLk&o֜ozPL'c gho9qXvj>5h:`` 0ˉD]= W,#goH`-,'ɮJ>h42i<ˡa&t7(@A_ (ӏH,uT!L%}yM$dkߺc7۴Y p+Ծq,O>)Rͥk!i&5c߾B JR2׮\&O^hx9| lBJ•l]FP\.8~6z ZuK?-x&%C?`^EDlV{.MD&k_fWeaH׎m8nM66%Cyr9?|ظwra"}df4`谑O~\z`EJ&OGj54nҌ~FI|:LbbBذv5{i-H۽0!ռ~XuD*dԯߐ<^rݴO/\&3yRN5{>t-]v#q^6u^;`5쮽p\hּ%=r,ݬO)u2 ^ްlV+Vc:yҟ' QaBNNgpX{߲74#aԈ4prr]{j~*d1>r+-!)) dٺ˲0oL_>o.r;&s;8::ѳ (JxNzs$>> 4i^B |5 Or3> ?&Lڢ b^¦똛A*% 6|FKSgO?g(Pб3}&9x`?^l`a >^)M)I6lT0yVtez} 5=sgل"߿w7Q*0``JTJ)qy*>s6 ?/H$0jc0ݾ֮ZA\tWH2<,@$e]%ϝ!!7{mcQu&!,[&''۷n}ѥW ו QT 3Y_mŸ?1>i)*EBnHT _V uFCph&`oؚjz:y\| 0z̧l{w$#m۶ץ]z8~cG/ 5(Ȭ9߲'Oc>yLLϜ>p8wNr17(OG$ӧ~iN_WBf-=m;oOd'cQôZr_NbB# wժ0 rA{wÉ-Tm޸ӏTriMmo$??tNԭW}{HX}Rz ڦm{UJn? &Ǐ!׮2:ܹBBnӿ^t|0F[! :*;r,Y4+ׯ]!a$l:l$՟cؼqߠ!hdm}׫z6^cəlţGm~ݷ?uqq;CHd (<1zsFC"#LڇR)1C]` ĄhӦmа1:q>uB~k87U6ABrzm&e 8y:0 Lk׫'&%ico[MVף>K|||uy*l޸v0 зWWNRb1/ɥɒe+/L~]I~7T c8~0gϿٶ:uشa-v,`AgɾFmP|* v`?.^fTEO;5ȰYvFz57s'=qɣ]+]_IIN3fmj6kZ; -֓o~tCS?֯YEݽMB!lQ(@ܶ{v~Š6đ Bh۾#{Nf_#?=9 }B->?y8&*2l( Nvap|{!yxzyI6 ؛wP\)K'g wt{9o jש U@އR zuPJaӖ?Ck>4Ţ&J {wVd_L\~ع X`_eE/\FJ>v 90e>RJa̼3@[>Ko{_3f)r.2e4%gƎdgg,[ڬ_RRB(:ʬyi"C>˄?}BlE/fU9 ̳𧺴y5=W.] |ѰR:dp jիS ,BBBoΜ ho"z*HIx0F3~|F$î}PUF5=zkAˀ_{wo-o٤isZ^}W/_$vRmð{v¡G^䙋eB֣=I$٠Rg@Ndy;a"b;;9˅996nҌ@tTT̀Ag>H 4e χеS^}nۜy أ'ϱ"ǣS,sC:dddP$gBF a233v=D"BBV~/`ҮC 97-a1b/o͚(>gm~}q`ӧNOOw(ۤis8Z@uLzE%YpyX"WWWto\tkǟ&A:wNO:A2u1p,3j'OƎl0:/!dsS:Uй@Upss/^>4&%-q1/Ɍ_1QмE+ìZn j2qkɓGjxթ[Jwm,\_HNJcGJҚ9r >;qq&O<~p\bG GPo*kEWj~~ŗprQHDd2Y_0s /k\NSb/y0qWTӬ$CG|L\.?vHssa?ԴT@&/O ӦϤkBHpvq)1NP$WWboӎBURI(*8_e#}DEF@豓l*6e"Aՠ^TRmjq?,`"#^=tҕ̚11f3@\NQ_b9|_dJ~dTr]0o ',BaҮ`6>%9.? lJr2(bӥ[t*Vӵ[wݺ2Y>lm=9w4 "e%uϟ;,AYx``b @EV1-cRĊ== #?sA.?K!~Vvo(˅d6;Ck[uss40)e]n I$pаQ*)izG]]]us*L)PPPęӈϡO.WFoKT)4!TF,S T0)=.5%D<f χ?wf?h˓G3ϟ3\dc~?, -`ԭG L4)mmyO۰i`ao&3@Kssr$lwgˣ2.*T!Q*v @P`NU ݻ{ؓ_n\_|IW2 ?}Yz^l$]Y~>H$Pdwp/<~Z\+>K6}&1kE== lMihӳ ':*Ҩmpppa6!i0exa0xPڰQ ̋)\6srQc\&>`N>Ξ9EJs&,˂DѽPyO@Je5}d&σӸ~M6fm׾`ܟ_ӝ *=r#)~vfpuuc'ϱ-Zq.F@ժı#VFYd2?}BN8F~^=ӼQ]Ξ]-Zu5ҵ{ jR&E/seYXRrA:1 7meMD x(-~PV7GC)HťO-u%1b?c<8W IDAT70 _\_xzz_ (޽s9e?HNN+\'fT\O~^,K#ZZ!zOW`:>c?@׬RO.L;<q&;oj6c*}l\rfulY>Рjet p# 7e3hӲqC GN] 8N sQ|*i۪ jS_??ȀĄx:&Lb̡G|з V&NB}=k=s'%/mƜڶ> qjv6u+VcB!aݯd\Ζ5 r)6scۖ38:\Sx└Wo'ODx_M?}LKK()GS'Ą}wp0{Iv,۹v:.9AU.<\\\!00~lؓ=,0H$h5oIJ%\x}E7s6-kb cfʔ/ Ou֣|b!..ry`:S>yyR}p<~ &q}>z3oի!C'.]ӌt߻s^iA 9n{ۮ} )D@(7ww[>>r4]a3"*^OK4lL=zy{Cff&<~;rj?ת? ;TIl-ӱZp5o4Zu+sQYҵKK+L ߶ dۖMrbS_and] !!?"S,B3Օ#ܾiҼE-RϟoW5,=|x1IOOBѪA`N 9 }JprtK׶LV!*2bb^zSm6Bȶu؅uom-MJU?jP7мE+|B6B:uvxBB!B T!B!0B!B!3`PB!Bf !B!̀AB!B*B!2U!B!d B!B T!B!0B!B!3`PB!Bf !B!̀AB!B*B!2 @UNyyR`5l Phf3( ͵v3 V7O*e nlV W.'nBvc}&9)@A^SIJHsd{,Yp(v;'/Ojf 3O +yRUwnWNn BnEk&Niyk/lDx>_vS ٿy dYr9IaڏA6¡jfXD caHQШUgk7 wzfz Y)+J*AA6˯*D> v3)inIEq46q # ȫR6l#YoD^v3,dJ<|c_Yn [9TA@6ml*#- gwHϪ*MP^Uͫ $&D5;+dC]@efS@6FlnLw*2 IMmUi*RIx_!Spy|P*n y+Ȃ~qR]4rTA(KAX4 0YE`emj*t#B!0B!B!3`PB!Bf !B!̀AB!B*B!2U!B!d BV1hHo7';vnYI1߶-9g+ܽqS0>ÌEn{ FiGl)&JbT{Jo7Cعe9*oV`*YKO6^_6J),z̚~,a!lnFZܲS-m[!ε7c0zl[Z\`P$+_EZʲ b",m\q1 -uXY/-݂ v݀]؅kwk뺯k뮍(t\ ((ry|;wܝgN{'DGDzxtz~Ȳþ JDxX̞MyiH}q?U5uz?NqNi{RR"Kg Ez}H]h[bbr<ݧgbs<ELt${6-sgi]6n\7g;f_9CPUUyaDF|lZ̻OGrpjn_;ۗ} Y6vq" Uع.uKFt̉_K?}f,бA NrvMvm|wzŽ5sQSS#)1'0/iGE ј D"IINs^>^k_z_HNN"&:ؘ("Ҍ'1!Uܻ "H^-{'S+?'vHb?}x計tq$'/cFirRzytU>QUSB']sI<r?x?5^=Ąxbeqk45O?^ %s g"龏cϤׇo3=Ąx=;!}@.d"?#݋]¦x)*kl_3=)X-X%&&Ȯ_<ᵿ:d^>5^<}(MNN"zLTFJ )))3Jh[?@lL4q1AJ;u%6&']#Ao3Sc|riJoDEW+%9*N.^wI4mCA R!X!,qa{my;G',=9u9*eMs%!s7.1yHG-ɦӤ{e|yYc{!ZƠƪ=ȞM;_`lZN.v5Kkp+B|\,3~+SUhu `TO>PnvGbbںLbve:3ϟLZm=)Wΰl0Bߢ=<'}Ϙ)Y"ZںPW`4hj.wJOG΢goaӸv4+掦߈ݼ.GRT%_l[α_63vZN UT4lхWO|BޡKtTf8~va$<ˮ1}Cc[cڈL[uK&.N՝;ԠMt5B'9:d#8T @vUiܲo_qᯣ`niM c^Y _Ɣ]sHLH %%#3FM[I.ŎcqI˔Ia /MR |Ni0~OOQ\t߫cfaxFaa.bWssf֊7Fji*TKw߳߇W~OeFL4t*~L):Ki>y{7002a漢 ]ϕ>ݵ }MMWY7c{NmII1}nM͙:cǡJf-߇F!)gg|AIY B1iz Z\c{IINFSK13P˹=Z8ɡk9{-'/r]P&Ʈ#C/D2ȿĮ8TmɲrDGqIuqԥWARb"/s 8bjfk30Ƣ-n]{4k߃0^?Jryt:JJJ*_pxB<~pGwo`]ܞN5QUU#*wo\"Kԡxr]Po]%} Em\\3DESrm'ocR5K|D~̂e*fڕqd¼Mڰkd۱7a$Zu1󤇂d^x6Zں)))x_K_.^ Ǫu?5kSLSakܖ;.Ӭ۲AcuLb#t*VIJJKohgݙvT55up4n՝!x[hjih1t YK`dnEÖ]۬9˒C8~`+]zdfråy'tiNӱFf1Ο>BX4ؼ|{QVCt z;դr5Ukji3r & ϶X+I׏EATLT$7.dՔXngTӘ|pJЉK021#&:вSoTTTXp?1PBIkU>4ioYli[7,9{qRC{r`J4Dyyl/WLא)4h֑(nZ̜qt*&-c\7n3c5}Y5o xӶ?0+b֣7Ӧ2^Qۥ L12 ,vuulu'нXjڥX>kZMظl**l9|"EQ*`xoɂG(] 쑲u,\ۺ3nz4 if;;/OOycX<}CZuKr$+ݴ=_כzӢSot 9&V/𢨍UH8utcs$~$VM (>xkwz})H=PQQeʢgBU&bcՓ9sZ:%>.׸- 0+ ؗu"%%kםHHL+RͻqYnٕͫy3 kmµS~ξ-KQVVa\1nZBe -lg11}[Lx{㙶t\AC7$l-ٕa}Rrz_TJ0͋)*Vgцc()+sq}/;VPzL U#Ǡm:Kٷy)6,[x eWO^sy~mԆӿёؕҺ M-<4>XXkW0+b@7jҮ vuܻuE*Tۼ=}NX"eHcv`\ `ĔRݶ ]g>wXJJda̱j]CY?1~CDRR"]jk{ u!118:V M-wYYYl2Nks_šrt&_(]5ܿ}U*Tް*ҩp)-q t8[1P8g%ǡ!ZN=qINC#/߁ ҬmݥOν[W#)^-;͍;VrUPg"L,5eez ?ہ-r*uB D]oݥszUBM]%%%]_>{~h1~/8~`+Vǡrmb#1ʍfI?'$%%ASKӎuXw:/F=.Di]LUhjip- 3z<1'dռ1x߸I˨Z1Q؆}JoY>k8m=5d Zڼel^>]jIY׾r=u_Y<ՓgOPۥ%}M]+_m|E qq{J~_wbz_߈r]>gI|ƪæxiq {n$-Sgkjo.ھ'ݑ^qc V: [ YN)QF*PؕvZ&rٕrރ07.OMM9Uw MJ>b^=DO߈{Qv#VRSWJFkeeJv 4Xv Ѩeͫgՠ9CO(Ǩ\Odb:mҺt'] ʲmlߣ+OÂR8@v(+Ҽ>oҸUπZlB}Y'iwVūO ~ǿJ-oTJR >ov 㵟Ԝk+?|jre;Wq!FM_%2&&IʚZ:tn7Ҁ[#SxU5u hӱ0@5t ݬuFII ST%%%uR!OKIK:-.:r܉t%;!MuBxcZ}4똥>.k6\({ T {H%dsz?Y(P]}*j$5nˆe]~F56kA)R6˱$I|**~*))!,5uuuk _gT~?MVlUU5{b_s=}ElZ>-ǰڽ:|zJyڇ`@֢XIt㺟܋ݥ^LKTjOU?7\ۺvyJ;rdz¬=2SEf.KHG7SRREMM#ݵXn:}x2"+n\9ö5shu[vt RN5^[ CZں4ę0S-J;PۥMzH|NŪu&ݯ&uiYfohLŪ3ZZ 6&ĄxT}*?Y'(u`jf ȺK[XKcnaCćЯkbh\8Zȁ+َ2ZKi_]W)fYMd9&cxzڥ9Ɲ IR$hjjBO^V3`IOEE䤬g+玦6E[Gfze j(낐]UPq1k5{6.yXZ{Viݺc[CIY j}vbJͿU0|2LXĥ3Y0?WϟNV]M-THgSMXII"Eaa]< ee gFk,<ʵ7rf?-U_~Ƭ}`_։{ѣ7 2.|etg4ur&Ia !ϰiL[S=@II[*s% A[GȨSή퉉95BqR-=iJ"6bs̋!d-))):;G׸-^'o{/9eUy"k籽\?FN].Mw uX9WLV!d_||\F!M|9/+U^me6E +[n^[stIuu jkџ74INN"C@202U~oܗ7VEEJ՝Q($M_Di ijT"V<KfR9ulO]I;.>"řWYV"9]]}&_o ķC*ơrmygDF~p;jȺ&>.}(3zF| !]4w0x_ruc+[{ݾJ Z4HFƤ a Lbem[*}-md/ IDATܿ5CuZ&ۃ8<拮`HwglJ]@6{Rb%TIYs|p m]}_v35iݍ;Vٵ+[H]^sBn{2c^6)Z`*0jlWNcNP.bEݩQiRqYwᓗ1uxN/v>5PV#,!<'7#m)->%VȔ13V6V1cWáJ}Ǫ9LҁkRak y57Ǡ 4iqNr`Jo\DGϐ~#fdkmWհ)^Dn_;4>^UMl\6sFSKV~6ͦm=8;֠f,%J9@]zшzbVĊАwܻy8fޗIz&?=aR؂VM5>ČI3LDiF};*hDy_Hqr}bc:VCkDGJY|NK#`%Y-:-[2ORݺ"Ux?Kw"PUUEM#YRyM˧eC ڱploK}9kKk>ݹUр+fƨ$2|2EpV4nݝ,[/ MP zdg-[HCs"BQS@MM ^ᴌMbi~;ZuK8FJ[I[><íWck *L[KK<{|]=V~-:Ƹ|wRUU{a[4nK5s[̮,nMiޢConcSsVSGw=|>и0FΤI.4pn"EmepOˎsYr۾\%Y:>y^Ԓ^[ǭW188hYs"V ;DM]}\wf/:5CSKaJ#)Y"e<TрUXfE0o3g'-ILtckW.ۅ5\+KUԦNV"}bc"wk"ԥHi]DEsIٝ*mj,pB =Cٳ 6K^Hg9x2KJӆw%!>3V}8ӖsKi;դSMu V())Q̮Ԛ*SY3xi=ʽ0ݴUAKj)D}E鶩ex cSs\wN=/}_ קO=/>Ҭ:M;HKQd&uoڱV+tI}&=SjTQSW0"Ee>Ê̔*W)k޾k+[ 8UwxVI>DR?w/ϐ}:sF6.g8fbH UHS+cYҸULӂBzPQhji`ҔJsb#d o{J\l {RVC*M޼z?&GHVy9%Sơ /?&mM;RֱFN]S66Hk1oU¾< IIa l>K_(;3M|')1bve\".S*%K"#³5  BGEYWjt 䶫SR-*Tc|n?%%ӀWSi yQL͋lp0Z*: AHGIYoA9n\ݫQt(BlP}l/|ncjZXѡY5PuVt(BsKQʏ޿}:^Qt( ~L&My"V'DPvm6nݪP,X4on=PtwJ4dCkD(: J XnC`bPKˢ8blb߾.`P̌EFD}Stw! c#q/D*: E1 Wy硢P|=QEp`E C7())aaYE"C0<؈HQʗ"046RtB^0["0yqmU^z1~G4b}r5AFPaYdhhHTDHq/){`VpDEc(.]c޽{KHH0z?o؞y@:ILLLسg |!CO>[3vv%y쩢CSDJȶ6ԓaC=uΟ?GfͱݣݻL43ٿӥשSmhּ%7_˕s",4nxw#""B~-*PreE'?Wލmq:*ʕ("4Auo$&&JoݼSZE\% Uq9ϛ0҉L:zȈ9s3g| *$m/Uϟ?dn7` 1dS%%%yёÇhۺH'<<1piP%704d}ڽ]]]i{5q՘m ̙=Sas= GjPtzڽm].qxN>qdvݭHw9jSdq)XXXJ#jծgG\\<1PO?ĉa/_FTd$w$$$$WrKo[.߷aA,Z85u\U?"##y6O!MM):$@V:|$Æz3]M(BB VtD|@%pssK?E#iԨ1Ŋ2h`?tttr|mE!s*:tbbcg|GBBCdKx`DFFk5D_)0 'Ogҡc'iݤÇX"ŋ?w,44^&7o\篿NB+ s߿OQEr.^ڵstl/Yr9Eظi+Kڽ@`MhܸI, W._b<{ c##zMXp>*WQk׮؄]ĺukt7w@v1U-^&cƎ;)@II)7N7˔4h07MG(ˡC cǎ"IIIxi39b({ű,\0kؘQHy澽{ =v= Pf-jԬk gABBV,ه9g2u E$gm[) յ)3Oq&ԮSWEؗ*MVIHH`Өѣ;t \t{RڹƮM4hܱ1s6q?H%\Z ɪU+0`SDKWڿo/Ϟ=hQ+Ps\Dz c׷իWҵK'>| 8ܼq1FЩC;/Yn C_߀{K[J.X~#ws.* 6cyҾQQQ̜>RJ0l'=ջ/a]~5ظ~- eֹrkrFhFͪk)_ EEEn,+8 ˔%11 ¬YsWߙ6mZ Wnjɓ>L12e(MMMyCGuɺiѲ5n]sccc~Z_7АΙEٲeӝa/vscv(~~~,[{v1l(6l' y&fϥn'O-U_i1yҽ[gŸNY' 8ywhАM?NK5pF̟7_~͖>Ocmms&OUtBZ` ǩ].teqҤ?[ ıBYʕ+'9%%%=E__0t'M4dx/ڵiQيesW4vs4vu>V-qEvΊ4i)))$&&O\|<1114izEdd$K.Cx8-[6 Z*rf HErtڙ.]쀁߀6UUU|kź9jVΖÇf+.3SC45Tnhj(|(F Bu(^ŽQ#)4!Ynr@ IDAT}hj9 Ʃbʖ.}{hEsy 7M1+SLx1+WDe'߿FSCuj 9v_̙=}rmvܡ K/7^0y4wc /|c ^ CIlPf5JۗdJSC=YkErhj(B/4,QLx3ZlII-H&&,\77wD6mݧ\ÆZܼy{wqp+$=zMcEwHPPS^ҐR-YҞ^ 4$1ZUf z0L_X;JUߖ%*$>!Y~o0ad08S?`\e5?% )))XXX,]pP8- umۂ9SN{EVٕsFFd3xP{qs 8=EXdO@+Zj._)_KZjNw7/Ʀk5((PZ{rkլS8Ŭ b$ Uan^DZk)#]>Ó>̚9ԴܔLLM4Nz_{QRRWVVVZ2´pa@6$dj7o^s,Z0g^hhdCLO_9sT|P0f[=z^e-~>]G̙rT_[RP,uu T/_q!V^s3Iqd|C|#22C\-/L>˩)iC?ϏeK͛tTtĆkIJJµi3ڵi.JJJҢyӢ e˧d|u%>>,>)}p0ڜ:LejjjދӓP-Xˑ ADDG&SO3VA6XlL CDfyPԮ]-mm*Tp`*g 9w,**2zTcԻO_vBagWf(: (S,۶"99 E#p 6s ;mmmlHP\yʕ+0r|JJJYZG(T 9FII 555i GbyJJJ8;7޳/%]wV7uu n!/[EKKʋJ$ UBl?yAr4 SVmE YRCWtyR]AABݻ˼uG~=KkUϱG52esoO~t=}y衢Cm GZX~Twd@>Pt(y(T 9jtwso ΜKZSjjR}~ޗnXQغe+Vt2G ,?>\z+/c ̙mSLw//Z@tt4#G {\8V۰wZA!3=bb7AP⮷7V.Wt(Yvz *!ןZq' ӹKWvϦشi;~f_5fq|)Ȉ~Nz֩˕˗2=֕+qqiWpr脑1KųSDDK-dɢEJC,Z֭ |Vp{)rR]6Sڝ~Rf2Z谁KCJMv$%%4Lr<}UpywŋMO[HCDTUUU6g&M\misQhkkg<G?): A(+:XIa.l&@T 9MMMi1mB ޽ۋ>{kt:vĉKֵ4nD.!F0d@NaFpU+?oo;dbAo<|k(:! "pXa߁֮c=EȂwoqFa(zHyćPj50&_La7 G=Ut(ʡz[ۚWUtwдc_*i0l+[0Zf6CK;E0PUHS.): A9A/G1rC3 kE!YT   |o*%%HE!PBS[GAyWa`dZ6KeAGX[E!dMIt 1a! x0l0):P)A%-nlLLVFFAT? (*|ማ޳ٝ1B/o,]=HCQPRdž[())I%ܾtk\PRvoEA"rl=HgfMOTT(xl^!ʍL"66-`Y(gGTTT8yB( @m VRvmn(u!fO݇/!  FA"]քgnCiؐekHEH)>{+U54p, ~W*(2q889k玴!Umukx{JH [6nĉ!iW`]U6JJJs^ eeeJ*M55._+<555޾}ϟ Paٓ[9sbhd3Ο?G:u%L)Y糧súuOרɵkWzZo_!cyQQU7p +I2] iC_Ie׮ƎDȑuq9s磨Hx{D|荶SRe.\8OuAA D_uuu(AXpq,(((p~PRe=B||< *mEku߾~jصkOJΞmۅIKK&9޾}zSv_ޠYZYciempՃq's*AH oF.]͞-[sOBjݦ-CC#lmɁٻg7e,4y*g`L4Ü9}$jr{t`lX݈ʺl,?Թ WġWw׷A[K -mm  ̜9cGqM *8t^qݓАT!-TQƍˡQ![ޣ' 6nzRG_jذ 4s{d:I4448rܴvI%Yt<L>3-Y",??vȑ]ss$^266a@BxG>ݻߛLoi3~q䂐(((0rcB/_~F'u A-eeeƌ/uLITLVVִHG9rKnRuۂ  B#*UBUZ4n˙  BwIuN`llBm%&dLR>r#66V6ܹ4kSѲ/J/\pY3K#/_0ixZ6ocxxLNttu>}ӧBMMM6hѢzׯcZW-^-?ۿo/Z4:F"gϞ^Z¢HAǏZZQSSS6hѢ~ W^[!7vtCFzJʗD+:+giĤKdY 2LnzѢde2RH6ҥsc$rjլN.J3g}n7?raQ(oED^<Α#]; {^+WQ#YlI_QQ-mm[XEKKΝڳ}r̉"ff 9PQUMBƧOH?}+<sOfΘnWPP] ff044slv߈O.AK#p/\̇Y`6n`ɕ+Mq%:wjϝ۷bz G<^oٹ{/nd#CrJ.2;gϞ]̙32eG}{`ieEBe˟?9T Lԩ())ѲUk1W<~RJq ifrQuuu=jC OCNgbE˗5FKKKmrml`c } Y+qs[ztփZ2ge˕~}+V,#^ڵ@ll,+W.ıI[xxbʬ_JUp>Rn?ěG_aGҦUs,] 6+W.'(}Vݍ/fff >2VҷOo&Ll!УG/, fܼy===u۶n?#<6|5 ȕUUǾk77mcp̙ PQQ?'֫'i!sgٰ~-_@_>4lɓ&`cӀjkȖ?h޼,]ӧN}ik K|EqߴӧܾnZCωY]mԨ1b9XX:N"T۶ccZk߁1cFEk,__6m07Wղ;aaa'osܹ}ٳfp;?0r#L^F}\if89ζ ODYY75w#Gۻ .[2UVklܰ3g /,OQ5wnk7աzs Ǎ_/_([,5jȑÔ޾ӦNFFl޼UQp^|| CC#?f[ 2"7˽皜K/bRNv&NxKfR^xΪ˹p< ue778vDAAGòeKX=(>zb{bST YFtb/B ڹsg0~,,XW^^A.]Y]늣c{z]ֲmEEEɽ[DU~O@4iH͚>cV*YRUn]亪utC5ڵzTTTɓ54~ǏѼic\\拁l+$$Y3sm;E ]}u5?PrYS8] pdkq9CGQx<"!+ eVe7`DFF o_x߻{VlJY ""'Os%?~$uLGT~Sԕy]ts %(Yz vt3FaÚ5k0/cnٌÇ8.?KT?PRyz}=z}co\eK__GFp!0eDFt};1@؃Qϡ$=Ǝ@NX)IhߡcudӔٶc7o8UTĢHAݓLnkVCor|*h֤ϟcmOer绾yéO?JS9۷mNr멫ӹ=r`ێL?BLT,g3g~_PRyY2~ߡEZr2mZÆ3RGV._x OSX.Cc>|x/{W᝻rQLSJEYdSbŊe}Bvr~*>}H󦍹ynkVrxOдY3-?AʓG9.ܹ O< F.]UMoѲUVKѢEKYj=9KMOcccK \l޲_ޮ 7@IIMQTi6lĥ7Q}N4n܄zIE嘄}W.VҊ6mm5;?Pn=-&7܂.@@`&&~ռy ǿy I822C-9r361aQԯ#:RU\3g3z8b@oG'ٝllk?s~?ϵHRv*rNԜn@Z7wNʦ6@~W`!:w/?ЬyDJRr~~cbb*{B۩s:u\k\ױu_Q UVknn!ÈY_TB|ec-%GӽɋL2.X3a4럻!oߩ27悩-8(y.s>sܗ8 6^|)7Ŋ%|͓G/?JbIV>}Ȟ=q=CLAAAvC%%C0BZo.k^61)))&W& jw޲^-[¹]_/Od3PAޅc/={*uAfϚc! =yQ2QRո1Թ fCԟ?r)~"~ֿGhǎm)))i_.::uk]Yd9ŊI? dWo߾ŋ,[ %%%Bٶu3K̬q2QRZ7WNYh[6nm;7mdt`iS"44k׮re^<}9s4?2aXztgl"""2x:@B[7"صsϞ=c¸1DDDHG%.npAH MeFr-Jjz9‚V2r^~ h׾lu*\]WSVmVvDݻK w?~&2"mwɓ'+_Jj}֭[eKPf-opyH{>c)\*+~<IFL\\>/ީs ) А0 d_~??z;RZuY$R?AVn$RHHĄ?gtľKG"##KAQQQv3ٽC+߽[',4M^f¿kpdu֭WqFWO---e˪۷ dLs<9≔ HSa:7/ _] L_͉SJBiu܂Zӈ%Jsʕh֖K.Rj5er &&eeeVƙ3iРli455S|iii1wBcBgie-2HI,X ZXP G=zCѕO>m֎#GKvDEEac@n?'N<|"zvcʼnSrT>zAXIA=}6n"u AHQn=JHU?|1d4øNرc`Vmd aCаa#Ld?z0G B&bU <4jX"{R%dX.sPvϟ5zlnOAAȾtJAAx%dW) 6ӋCA){UTT/f"q((1u"EEEbĵYf۞2 EEl]nd4>>}: $'4si$u !ə+14+7ARR(00͜ZRǐf.Źi3w]Sd/+]n/<~\|BWϊJ4K*DA2)QA /o<&%~|0ş'|~s/G, B,   BZO$DG ^(CLL49gFF`$" Bx_>A]]͋V~>%ߗ|.[52 BVt?ȌRU}GPST9L [f!{|two^+k X-=7. 88c/S!2 NT$yA]xI̋[͟4^kR)lWJծMKxp5*AG;/kn6QkM+TsWMBll }G߫p!]]]f̞'7 ƎR49xrs={P|xǾr8st7;0+T,Q곯\]hJfW^>OV]D*! WaVw[gqp wnTyO=dVw;'' d-Qؾ]=懇,cuO:}KDy!߉'UB5skL4߼02-hA~J8ϪBMUș;Ѽ{ &_i{J[Wp4)ǠeT麽Bd/TUhjyyMT^!:'ӃMNXA(%=EɲiS*TOn-t$g ;W5L4qT'0z$f<~QnJM"K[U2 YOqNBPܪ7:ʮ>ȫ!m1͆<[KC+RmcH"KW||Ǿ )_QA۷o}"@v :$BCX(72YӦ;cH&KS㍑1ANΜȭ_oBGxH/,$]=]c)G@cH"<$]=QndzdsxGL!$!**C)GC_2 ]D*K DW\.aIUDh::RRHWWlTx*#c#cIhִ-o%a KHȈ@?_c`!6ab|۬(",T\Hµ,u ID-LC3WNC YR1 Og'\LܺyCz^^/sܴË1bAAlܸG#n\&[˗ϼyZnnw9ro߾qqNeg;qqHGO>!448nߺG q 3ֺ 8Xٶݻw̜1#G˭2gW…8 =8**<}cGOll,߾}#&:͛7ABfLOnCf9(**k uf<|y9sf#tho/Xb9`̚9O?ҡm}zXr9ׯ]e׮'\xnk|g*AH/>d>}cǎJ(s*ᏅkvALO[7i*o@n9wlB mfm8q9.2ԙބe&-[I-hѲlYm iبV8:u5E||<ڭt!!xvHEkoѣGhܤ?!!!r7[lvH5] iCAA55DUTT.˙3 ss ޼y)5k]EEERJ[֭u]Ԕ7~Zԙ>cN DQA}}Չ jcSr445YƢWI!zQRRJ:uW^^*UZ-())F9䦛[gΜں,**AZI~SSShb?` LLT?A-׵[wZ6oʄ[sɓL#c 5r8;wnvAkׁhZi+[lr,?VZSj5:vꂳyz2Z5=|ڵܾu=\NGW}}}Ə54ޣ˖-Ux|A]> Zף}n4nhQc9 d?FHsݫ<'9_SΜ9׵;2}ƬtNJJ*X-$ܹ;t87_/Ԯ]y0r^Đhي5kq9ʖ+'<)_Bhgמ9s&c~*QQQx>((`jf)`Uxy$""իV`k;wkȞp BFfaQ-[SQ![kߡ#≱+_M[(_Q2QR]jMXXZ~/\Huth٪u[XlܰUkܒ:*WIꘛ[`\?~ oYmmLTRU'Y6 BFTz #dJR%dZ-Z" sAA.   ?*A;wl',,L  DJD}}!Y^hh(lAJ\\?JGS%իVr91`,Z8I(Z/ʚq^ɼO?ׯ#qqq|0v/u$Av>e~ۛz$..^QUU%449rn&ceIj޿Ǖ+زu%Kŋ0kңG/-] ˗/^~mR d:qqqC||lgOQUUej7'aBA~~~r=ֶVQ" XY[7o`dd̪ntStT ˗w}DFFʦ߽sy IDATǧ1I3jǎ֭[Wn} a1A|Q%["""|s<9ryo URO?RHCwu}۷oK{>{<9['?ǧOɣZcD˗ωx޽{ׯ_|~r>>>?W +Tig%쾉#veY˗i}}7o}6eӫTsg+ǎ߼yRBEhK(NCCͤ{w*%wmN5ӥ=s/dhjjʦWVSNryV._9cܸL:YUfrC2dЀt)g,;!#F޸qVXKٹc[Ν:H#K/R5iVir uo^.]5&&2o߾qqq,ndP -Zd&vpvծʞ=y +Thew3"&&FcƎ'$8˗p1ˊUk:Kj(WӦTTY\̿I?$1I6m\ #%&cZ444:Ͽʝ;7wGTPKH%3tztVjضiɡCy3Oܹr/Y}{ ’ i֤!-7a\ݸ~ӧqXdQ}+))궎Cƍ NN}hSNYY>}&ή ɟW'^f'OUL?BLp68Ϛ=;osv8:ЦM[llس{'vRQ#SԈfF05bu@—ϊ孹ul٘Zkܾu*clha~}/Z [v=vvm05/Wn:M̭7ԛy?ai#~_pj25(R"g˄ce:wjr˷m 끄ݭZ4Ѐ| <@v3`=t硃)hf̤8v(¡WztJjit)f*BC9q-[I'SHN]Xڕ-[г7o\s-[6$$S&QX1{q }L4ݻv{.]̆un?'bŊ3jXڶn-Y4>ߋ[0m#der=֝8q];wЦV,-GC6mܩFxzzq޾y˜Y@‹'O@QQ0o~pwojWz;ӓsS_6j̎]{.+u!С#^Ǐ;v1t@޼y4F<Cy&89彷/OfyQhh(˗-}CdnXZY3``խEٲe>]WrE~Թ {{5SZ5=x>\v[6saڴeʍ/_pIZhI\\vm(U /^ܹsGWdd$#o|gfwnݺIACoG-{dz;AtuX_BUUjql*VJJJ544P7E,YpÑÇ(PhѲ{6k\ikk.SڶGoiԨ\ZZ8/U5uu(Zjjji{)'%J731N_:yS&O$&&B %:::@]:nӦdZW3=^sU -m_?>>}ة3<rMʕGnݼA Ǐ(T'15Yl 66 (T@oG'\WSFM֭uc퍊 ?Y*]%J CO_Kذ~{hGw{޿Oժ011EMMkĔZjm6lĕ+HxׯrMJ~/Woc\}6uU6*U:P*̟˶[S F]M冊 ={9v+ J}#{rc֬r+Q:HJpP8bM=i6RHORLȸiܸ ;ɽ۱M5q&|V 1(++sd+N)yIqrq˖CO^E9RR׉)_"6RHd /]QR`tN(dvg TRə+l~n==k[lFEEz755ׯL1+f+ƏMѢEoKή ml066IG;455b1r8Ǹ1mڢ qqqlݶe夿ZWF];^ۡ'/]MvB˒ŋ8|8%KY/ޔ+kIٲ124bEK022NmHYÆ zً؋5kɺ2&/ Ç8q%KaQ(={tkeK.)..ecDGGgsMүut>mJ* f-u͊d/͛X6odٲ%^x)8al\{w2jpΞ=#qWXX. ؘ'O/Vեy _`B4oђaCq9¸{6Kqsβsӯ5kѱC'qL AH]٣+O>4x\.sY޽{V XG>ZAUUCxAA:uR։EJ̙ C:Z̛;']pQ#ӱÇ ɐc|ee!ʍhr1|}}Xx!>[ȘZj3bPztZZYSf-ϕ˗ W@R gNfѢ*4iM :?0xPwBoxy4Of#*Uq s(<{q'ҳ{W,K{.t)Ѻ}x-rʎ]{po+V3z8fLx !c?՛zgp"mמw5ԫW?p…pBCBIՓժuϮjΞ@|/$8ɓS/[6Ó<([΃ş,o``&&&':uI7qW888RÓGPSH!ԩS)߾c?xu舕Z!SNp +k֧+766f#󅇅1xpj忭$ͰR%Kall1AAO . GbQnkѲ-ZY3#J#G3dtYvCӷ_Yptnn%2,ׄkWtbe< +!J\ 7ٿ5oA-2ܖ; ÇҽG/MLL\f27{j׮r6mN2˾oO6 u/[w;K.Ddؠ g]̟?cO}VVXZYi2Dd%?]͛7@O~Ik(H9v,d2Y k=~ɓ&pn@M1 p]"W.%d"tttбt+YBۮ\B TT9#[79cw';|qMx6|eqd?6ѨҀhٽ{Ev8N*~v :ulObB RVFM&Oϝ;0q2۷oe̜1B67 [rʒn:d JSi;!+V83gƽl\s.[[:vhOv8¿ptrbxx.ӤEҿ_otttw+F*T&i; (ƊkP*'R(Z;vˈA.NJkT۾$xʊjժk; aߵ ?kTkweK\C+X۪hT F_O7a_H BeddL!k+^gggm!ʚf[j;hT ZL!M4v} |ͩWa%ՅLLJJ ߼Q*_teIII9.A$''P( x{J-"|9Ѩ2qc2xΝe1ߴ]:~bǛ oq?2u$={M n 2/_h;A:wb!:d oG4Ls]Noo.YAXd1t:q̙ЦUt GPj5vlFn] C6~oXt1)))( III}LƓǏx)vɭ7TxBܽ$(DGG ߹q U_-&&ÇТe+U&vssó|9G/vZ@aN4V9OF)-T  Bft􉋍vN\L,z9k. CB ّ\Wq,(vZ!RI>odF~~Cy\#KY0/4\?P,V*?0Lrwy:o|EJ6geljAHpPHh&Q-"Epp&fC+M EXH9 |Ne.k; APxmsVO%Av(|#Ѩʎ M-x8>Q̥ #SsD```Ulި'!>NNEH$r 3 \@bŴ4h 021cҥXTۡ_ȳn{mƦٳI7~ ZuvZU=tR6سz# vW0=UR>?Ӥm!| +[mTŚC &b_$p)\Bac`d0!3Za¿202Da U   hhT   |ѨAAAQ%   DJAAF   7*AAAo U   @4AAAhT   |ѨrߗDidJO}k=AA%UICTHrrWy?Dhɑ=wȾSRsϾv)AAAZrm3#&.ČԜu_S'UDU.^qI p+SrU.>S4l]45k?ؘ(d29zY^R$!>]==$HHw5~ :&1!v݇ᔯbr`L-JeY^wbbҿ?\'Ok/?abjNXHSu.{:ƦZOt ʐH$YGXx?Cqx‘s$vyۏ,G6vlX hѡ?Z0ոpj?RicG*ackO羣Hܸt 'DۮCUa2\vNwRb" lq[:MX1o Q[ҮpL,u4g߶UDGt4!Scjε = +[föرkQfcvn\B>?Q~ϔ[ٱafVTՌCSYG|^>aۺ9K!H046aL[ 3ap;FL^‰۸},*V wi+8sI xVDž{٠5Ҫ@ Mt n^sDF ip?7/rAP*165KYVټMyM)[V0v:BsELt+e/ڹw>D8Cm{ IDAT^&̲ŕsux.7(ԫg U}~ƔpANJ/Ӥ`i#'n/=l*EKzdYzgW^Kn^>Ɋ 59yb-; d؄l؆;VcK!7 FR)wK1rR4Dƒ;WHLL`e 3%w*4=s'anޠs,zzDBp;z ʐ_ȍ':u(bл73f"CxqigX:kIzVsBGW;βvd_pYLͭ٠ ή$p%5D^",WORir9QYG]8@i8+{/\<)[&JKsKVݹq餪\CWWgѺ`L-U=R&fjN-NA]|\,a!ADE([^})Q2w#.63{bc2ā?,#&-9S3{loLH*SqB%70ƎYEGA.T58wFꎊ ˰c0zj~Zg f0{lo߼V.)^YXHRTY_NVQ{e;bY0evy \EJ?ٵy'ko;޼sKk*.EKyPH)`aYXDlL4V_i!O~^ݺne*QXd 042 ~2|ݥjT8OƎ`l@ns>2 ]}I2t~m'))]]]ymvFq ݽ'Zz:XCp;@*C\Un]9Ki*֙Z?ըpLOg%&:Kk۬ O߃K*Tk@7ODqȓwo4R٣xƛJ5StUyrRkni3m %PGwT(xpV{%r{7.pE +M_m["2INN$*",8w*k%Ywhزj^_x|Ąxwrɪlݨ;rF$^?Ȭ廹z(7/̂HL01$*2 H(R-; `TRH)6Mbbz$c$n\< Uj7q,Z3W+/V<7.ĭtn]9E.. 5X2s$_<"6:Uq~Ƀ O}\1Kfijj}4neӹzFt8ɩ+Bt~ϩ\ zy?He+pXgzl_pJTnǼϛ(KgK1 KfayHp eWS$%&h&m{eX'lEO@uQ\ W{nfa1=UsQZWkswK\l ~鍩X7JWQ/L%ߺD5Rrȓ_m>rB,6.zbd?lݨʈ\G:|q-\H޶W|l^ kMcr9?ֶҶheֹ1a؄ElX>(poX0u(ƦXZbcSsf퍣+NyS}qsʧcn|lTrf,HMU忬ܗqђ$tUĄxU%~ k)zFwk5jGZMO]^a[j6lw]Vi(Nt5û6g`q 01Ȳk5j /QHI/]HsKkFM]hψ۶EKөYZ1|0"%iu>[gB6hr\  u8qT>iIחNiiWb Kk[̖simMMڏ?[PUB#qi[?Je_*m#kXNF&f.AU.:I+uy?DP 6C#f\>(P~8}6,{׵jN`c됥=ܿAdxFƦ[j%YXQ!5FՏJ&Nȇw*Kǐ }&,yB^O=}}l}CW0!K\7/۬\*Ny h;;p 142RޘZd8^zQHj.TIuyUԓ<()CGV[G#L CiR\l >DX>D)e6qv? ٣AFɒz~2YR޽!<4Xa|W-p,!g{j&!5С]"O蝿jA2!8o|ߨ _EӇi;LsGx䮪,n^>Uɕytj|xK'UK'&& Ƀj07}tOvZT(s,+ӇwbtBNu|b$qN*/UrR/der sȟxx0FHƥ,3 'ʏĦ z~\9Qƶu *J8g[^8=[~R'.?HLt$ HTDj$7>/z(5Da &~81Q\8OrY/;WP*ܾz;QaذpdF uYOz#~_>C0*2KT峇} U#[|ziBRRžmz/1 ߗ̝0ɵ ǘ;!̝8~D~`0/߻{8#5s9|7/tX {T(xN#",$Kwxr0~Xh2\IMSY4k9 wo\S)TOJЌu'k~!geܴ֕4\~tln_=ê_n]9TI8wW…4 {ɬQ<\-o\:I000ؾ-_g E g3$1ݸt[WNܺrWvdՍ[BYh2Wg+x]%բ=EngdoeBFrdj)_#c3Uā|zzil#ù"MT܎:+;}1z\89cVuy5ߢ3?da4lمN`\?ܸt|E@ۮC(T̝C;mz~4UΦN{E\ 㷹cP*<}pû6мC?P*Yp[tܸtn^> @BBRUlІ9}U7>/8w|n_V+?sO:MMUy$ ]~Ϊ| #=EB|U붠VvoY(R^}w4wo\@PpMQt'A۴.Һݻ;hѱ?{XiՇͫ搜gvxr/Spr?Kgd8Wm!9|,<|8:RJU߃4m߇?w'5ubկyL&j[<R Y:k BTCcժe*9*Tos1@m]Eh{j4hG{7/pZv敿p^yai(J.>{iܶ'{XE;}xKgI-7.UA+XRRygwzM+gL]_ HPPhi -͖Us| r;c"Rxx wE[ڨVyG*4YXQfo޵Sstրy(SAsGU=Mrn%E&|0y\ INNk)R *""nT9 5璍GlF9ѰeW| $4j=}\ Cd2tu|0D꩕mZ1 ڤ6n]R5-RzzDEY~,'!>R\G7JWDĂf\x@1|/șXZYFv7. 4hEm[meO(Y\s-s\?GmHIȤe=֣gt;.WsP;f |ξmxJ|kUl Aaϖ{E(Yڶ-b`hMn\G!^sH2i4iEJZTT\G7݂FzJeYޓS]:};Rȭ,u$ٽ},cg55RwEJVvj4:=EJRVSsck@\;Gs\+jgz|rdkDj.Ʒ֍֝HIAPUo@rrDĄx"#R9OmN [UT*9kW%n怪P!C.UwBt4,J_zT:2II[Xy}_ޓv?y\hԪ{IRdr9J%J=d<:%?05 2"(=Jwr!C o`䢺{VF}tj7">.:M2|.}qTJ9o3ne*#z}G5@ɪږ@ =ST Wx$Hx$EP\_ ]ֹ3%]]t7ΖUs0^#3>AH^N$'gVoHJJ2253~.1i|W?N菵="owe\:*W%owήϜ) R25bFD"EGu-'ES)_AdZB{]= sq6RoLZuAR_NU$ j6f$%%bfn @VغWLL͉M!TےU &R F"3Kf$..Fu:-Qbljq:CXKk[R'BT"TyR^K 11 2<}xi՗?wGGG\vH>r+SShpb";rF&fXX0 Uz0oZ1\|01 zn_;K|y@f^ær%̭\1F&THuѭLE05m:2FݠRԤx^=F`% ttu3%ݸN$}sSFC.ĕs@frtv WHi dZ [ueHeR <i5˪_#HP( ţJ]<%*2Lu7*uncfhBvo։&c`dLTfV\#Tגup6bf6=swU74|}L^7rw}={XҡyCҽw_ !>]]=$RieёuDGb`hT*S=49۴Ɔ?|ؘ= e9Vbu?1!>ǧܷEn9SWh;׮H#傶C$''D"a!2\ͯ1{x;n=ɴqN BqGervL-í̞Sb CXxcd~PNόe;R9 /Sc9qL2{Uw'11JRR3'-,g}&k~[46>V B %e㣂?9uM' #2ikhP\Gw8w|69gt'z?& *!'IJLd(RRٰMiP &}{D'j;A~_6DB=sL*ɱ̔0W{̙cȤLُ H 4z9_0_Y2x|m!|3eAA U_kܺr&uK'Y0uؾ-,:$rx|J%Gtvq))(Jbc hI%{%cEG#E u9XT A)H%$|:ӗD.#ʈ GW@LRHH]-/99u."%?Ob$%&PIiiHIIf֕L B敿0a"ӹ{~F+M7j&rnKvuAܹ~ߗ,5{#phbc\)jh 99gob0uVբ:iqI&1i a!A^8*u8D‘䘦ɋt rE~ 5Hf}D y&ASؿm5}G !>o}E%?٣p)X݆m+QgW}_#H(^+捥W_J%b M &s )>/`˞bk:mr;MeפUSj }[[Y.B6=yx KW@" N"Z-:#SjL)hL&GWW\ʫH|_?Mܹv}~@ݲԺus};Tސ jnAEWW/]f <}UW_J{T-}zɢceZW2e9t2?SuDE?s*y]d8r&7ň)oA wҙ;ɽ!9st'e j/UڳV6v.QV74HrRRٶn }Cԝ:*)W2ki/Uq-79IWgoq= o!k6ȪѰ5 TR#)uU#+a+)flݨʈD*֕3:jy]3Gwҥ^'rQ>hGlʖok:Pf#)eE MЮ  ͽrdF"8zvs'4=OUQD9U /˩Quėnz\\Uz;Qy'k֑z^iPe+xT Eq+3VqBUJ{VW=.W4E&SRme8rEh{<6J[4nz\Ns-F"dlzJz2lhRij*V7Sh,;#ipHר242}je2:i0}[[;'zuϾbFD*;N mxs#3Zwuk5Q=vȓ}Gm/뤛!;{|;Z@k `ZHM7WD2┷Ny h~C#յ=AAA2hT   |Ѩ~Xahaؾ~!o21AA!qsīg065W-.|?quQ^K+HJLP2$<q1ܾzKQV6v;hj5nnKgrE-iܺO'/KVv<{NRf# )Eл7xrWcB3XW" bc7k3;1!>2i<[Wpȟd2*lGz;֠P((SW$r"B0zݟ E ᡘYXk<¾mx4iE8b/&%%g:RRJeFGohuDE`hlT*y&fC\>sLF(Q'opt&J%7yt( HIN«(o_Mp[nj|7.Ȅcec㈊ ̂=F`jnɟ/%II 3Rmyn4m~|:W%0z:#Jxzz4i {'>a1Qaڼ`<ԥj\8 {FS"JSߟ,:]=}"ChՏ%=x ͽ"w#\xC#w觱w:::4$E{X +;|_?ivm!`m%s'c}‰} w٥0\Mt?sGs$"#Xhlεsڴ݆j3 ܸcav=Fdc-;XXЮm]R &: #01`~,RdʸWAxh0& J]N;Sح,JR 9ԑ15Ԍ~feiݓzaam-:g_蒘sy|:v[<4lU4jTg'.ȞLCcq,j٦{ sK:Kk,{i܊}J%DGѥR)'_bҩǣr]*VoDXH G5H.ȓG9Qe77\dٔZEJt(<Qa\>}QS}[Wc$zB郜=-:sY-ޮ+o* -W_:7Ͽ9[utTgڒ(RR='*"Kgtݽʔrs-e+Ԥd*L{虫ٺf>^Dʌxn]ɽ)YK=R),9%=شr6^=F JΟOW?V|巯Cq) M5$'!0ߗcHţr0LL-0!%9ӆRYG󢣫1ܼ|-:ΉڍsQgu] caEJbFWWOͽ: Xq1dXwrUi՗w Jߢ>/8q`+UbhdBV25ǩC۹q$ne*ҨuwUsGq8ߛPɶmݯ1\,.|p142AO@m[=)T]cuGEaHI[[/\Gwr_<"4ncSLgòаeWJ*c\b1:9a`dL!ɝiq&>.]=}Mն\-hn=} LԶyVGݦv&fT׊Orn( M:}sxܿykQ;͒gݫviq[O'r˴8rlݨZ9a!A_-9EJ%b#9}OJ%Aި^Y9?utC#cM E Q4m׋u[2iy {T\?Kn^>IRb}q;޼sKtwJT*|x_SW70И3ap;װ)D*k|x;eFH2(TL^+P!]j OPkdIO'%%LNB|_$:̝؟GRR"v!{'UYX{t^u-s o~}t*ƥ`t)Pܺ@R)VlY5EJ .ϔxj5jGFҕ9 ٽy9J+;FM]woXdhT =Bj =7T٘+07Q(R \p̅{u̴0˰ᝫY/sphn(YӇwp!)1wݼHb̧xp2vqJEJRl6,!˔xa㻙0w#1Ql[lUxx?2xL!'֍#gdXvC )Q 5Q(RHIN+]c{TRq zˉ #9)ZQy'V˫g(Q SsKjoRP]EK3z }ld.)=LBK|\,I4hхƭ{dH|_=[YݹBrUx-; u\%1F$7mcwc^U[JJ2Jyrh MA&şsttuMW^ͫ~AGGXܸS^I.``wOVݘ3::TBs=}p;`a 3s+-m(W[ΧxTגs~$ҰU7^>OLt$s& #3 W{nVs^wjj4򨆁};>{}hJ}X6' ٰ r}V9ꬹEV݉ COOW)[6~4d[1{lolKgB*o`H~eBf(_U賹$]݌FҮpd21ё٥Oc7{cASa$R ;6,C`zj9Y/Uvhvٿ}5g&%%&`iCCcL,״#'%9%=hتGgW$"#+PJ5\GVح, 1!N+W\UJz͘YkM*-Qv݇#A*eg>X Y:>-2װ>3 +[٣Zp|(RR6p(^>Mp.RAkdr\Jj$Y1ύ100~.DGEp|,3ۆz77+|RUͼu_gu,ikD38٠ dN\T*Uv 5qPS뀌{`/#Ui{L-ML;BTPm{ϡs̬j L9"[av+z^ڣ=cֶ6URͿϧ1l¢tufknT)_~o62"JK~{J۠265%=B(VSku{gZ74IM23vq4ݵ ]"EY .M^ <K/3}{fy5>+G yx{QOxrVj[H׃'J߿|ԈRy{l-=:CrPrPrPrPr(LT*YDD~(D~LϷ?jSJtvTceRcdY/GRT*1WyHs7/”3KQ.F(Dkf,- Oun( ݝ͘ֆbj{12kc^{;zQ"{;[PvTMNNFmty[b!B!BCx(;G}pB!BnC@`;B!B!TorlB!B!+o7@lB!B!+o>cA!B!0(G!B!rB!BL0(G!B!rB!BL0(G!B!rB!BL0(G!B!rB!BL0(G!B!rB!BL0(G!B!rhr"I)jUvn!Bg@ZM%G ,!<6-'r8y5SisSmj*0*(!0[ª KS:wJY=&yVHq5+kӢHE^<(>lCQtVXh7Rn34VAFڹU~EOm\k%ol߾ްr*[Be@R]g]P@^T6|#HX3Uy}CtN*ѕWҴJQ@-ǘ7M&D">DO[bS_۝<#t B؃3ҼJUev~qJwlZ+.irJ?)ER[MۏxBU)odB}}B#tBAa_Jj㪑8k*ɖ%)1o_#ŕeCvfM9Rm]jVJm\|Ud$7/Bui۔r+,`ĊTB^?-<gU@leYwHOJG [^%G^\'D<8y6UUw'ky|fAWәĈǂ'G~9^S?X"x'm;,7쪰֠Xi7-=f=BUad^^kPʣ~'EDZ?,zGes$?z<4pe\;axӸ &\˵Vke9G\k1lxoR9- ۇg~6׾%Xs;e1dٸ?%IbdQ1yV\dؗ f;_JxiH4M ^x:Nbe~q$+(Wu煝{]Uct2% {xaڸ"G؜|U:yΩS/qIk[k Jv!PUA9B<=MymP͐J ݼȑާlLz M+Rj4^G']'Ov`{VZ% uSX:T'aѯnTڄ@ݲ;ٻAsԋ++, zCӬLܼ=ʊPj˵̠:'2y{OJ4j.+r\?e?މ2\(Pb͵4j%yuCd񾽿Ȱv֍Ņʌ ]*`:B*qB,9`^#q)ڳIOyI;bB) ժ2}`h ~g_\6.>jfU#(4e'f 7#1|bG-MjAGHRsAqoUuo]4|s[*%i `i_ؽe&D-JqnPg&D!LeˍK-4;* yNneQCwF M*_(}CJr*%U;`Z 1ob^.W'DZFcKVJ:|X7* [9Vk2(-zj%W/mnXVe ,Ė<,ELywN㮓2Jb@qD?:1Ɋ!&OgcTKjj'/Y)z˟ 3.qIyuļ?8u|}cq,(~ABߧeF[?YZ tӮXA>BA9Bfg8{^k,F$Q@-y ިqI2kgBSk8Т̂M`dRt*KlV;dzGYʬ4mz,[<+;j妨ѸܷϗVy#"qiޠT!Ylfj4/=>OjPfc(9*/ݬOVAi5(?[#סO8C#iIީ#F ̔h^z|hcټ_VLڞI~7 ;wu:BU0 B$ְssXF=$J-U$ii#I#3[^P5k<f@/W)2PRkkFFvk{-uY%fH|GOD> qiaTI =/RPj8VָdYя~'Iu>kY{h* BIoŕĚaId42!3*81򩮃 _b=@!T0(G2$p-Lo=hazJ+gD1ADiqhqjnKYr˄ߓ='jUvqjUvzr}CSՠ׷Y(̓?,[ZTFrYyU]v?ŖkqDdDRcNI*rWtבN]!.OIJbi9}GŤ?.@qgfJ ;B_fYڠ wr ˭Hg;-lJ<wye\~{4Pru B}A9B;9vus~ (^·/Cs:/C诇%̓b7+J.}Ģ3t1d sZblu h~g w??s/rEzY4w>~vf*_Lw珝oCc4.ݢ_Z^z)_M9[OKZ ZnqHm\|ΰ-35&&)u0U#!#PE N^zFg)2'VD<>gPdɟ=w $V7 Y<@lU"oĖ\#e/n]z#W{)2 몪 %:>55&ƶ<= En^jꍺ櫢QHcq坖|< <ɡ̽ 6.>EcQɛu#/^zY/RsY`"}T̮EM?ZE"=25&HF>ߕ`^#*#NcJP?MW=;+}(hk-oEF"%3bKRsIor*&ayT ť1|lqIG,L=<#meƹf 0*HWطI)-嵽&6O@k/Ѹ IQ{}/%5rDaI~(Va놇=.55(/P}u>O;\3׮xr#PAʬYV5 സ|NT k&F<}\I$yj:Ey% y'[H1_dA|:4ouY~iŇ?4xy1u?17nvf2,x16ySNRɲ;n%!NHON9@\]QVZ\e"m!'DP!0(G!3" p~DZ|!sgЄ=<-8SŇR_^Q,)1% <2Sc̗eIt˛Io{_!1y) rT~K|fpnu嫨]ZaY R}fr,g)U.2L]:*˛iq*GJt1Q'G"_ҡ$9gӏ :X-rmNMu"4|BUN#P)D_1.5&`q>&\W Lgn}L?-ھEvQE&!v|a 0n=xQ®йvnur /U#读LPa,[~%G CWh9?yjV]ڏ*rE#ȧnfgD :egwW5ϙAEԤ Ȓ0! B( Sk:lX ln6HsrټQ:ӎc~L $@K;g99uQ" N)uufya+Hn3m&!-S*6lz_ׁ@y ,;+\b)WDYYս2u5Pu:_\ʬT&MMsy}ѼʚzٙLZ5[ (qP.uwZUrə,őwI1#|G!b^ż! }*{*k'OŽc"*OO`b`~KbNc"n7_j>ySm; @-CmJ)r-Ka2_'}oۏ\ZcAYًu@lѱU}]vPTJm]5Ueg86.˫~O2\k)\Yp^\LFȟ_nt۰3rr3Nuۏ5e֏81ug}?8GRJ![U&uՄ;.4j>Wkr4>}/rv9 hsz~&=eX{<}Br*c9,&.(.^SB yd{Jvj_ p%յ9J9$"c"@FZ\nm~5jy}.8ըU 7/k):g63\Gɵ|J?Xx-eVJ3)ӌ\kn}JWR2uZw|q%\A S}THyhyқg̒'- &- ufK<{5른wGmTbaFb$12 IDAT;Zn~weB|a:BՀ-J4! hC>`މxZM1qQ2y/L]ۥf>_o=h9@n6CNk?dK{ K{uQ?$uZETU\ Yr^&g Y}UC5un3?WQV޹OJ/Bu G-uP.Xsn.|HYon3Y[\!)GR Ĵ^1Y:R)dL\=A|}ajl0?#1'OOQ.^fyB*uQ[;y*SHKjʰ|ڰ̺̊~uCUQbcBĪ2&1<*qnueWk9ֵVVټ۷"i8-abcafj O?mQɳҽꍻ)Jˡz#U.umsm]|g 5uUXYK!(_dET l\|etӷ?f\tPd+!YAhhINJ ^ڦ%''Z@vEn+!!(  6,=CJ/Y^($8F\@#TP1-eA*Xl2eAC>mUpk5|0 pCP(,R!{{"AрP(2ݗ(JHKK[(=HKKR ,˂#$&&qF!dggCzzqM!djիCafvޜY̥ dܜyh/B&Ά55iB۴iGjծSgAHp($&$ ǏoMvۼe/Gț7EF'iKeJJvl$}LMZ0eܨ"{tTjAao5m>~tFw ݽl\l,AATJI 9?biecǍNjB&7gsp=<|jզ[B~h8.m ΖJLLvYYٌYape2OR 3 isT*֩mӏ;x} m 3.;5'Vp#GnR Çg^D|jՆ7kΜ:A&Mkr4TN]&`_/?f"##&NFj'HMϘ&\LbiiNNH׮׬"|G a(@(o[l$a._PmvYl1sQ2 |FڷeWIeݗ4 @hH0̛S'^kfee‰G MطgW   A`d'd9bP)x?FC EK9eWr5}jLO=ض\|, 7ob1, '^cE̚1@|[c?@R HII5V;f <~T6 \dEk¢5o4Ip7o׍>I:kQd_z/\|rf[-u }ОN e.n&_\зgW͛H`Yf}5FŦhe"P(=f _oTO'Rs4:džuۨ6@Űq6eYr"fߵ7thVm(!>0NXr5H\| >FM\z[VEMlf!^ueK2 QXY[CtmZbB>ɛ*3.q+W}<|$(8&~:IKKH/^}Ѵ)T  <_ ތݗHA~Ijj m<k@n馭;.j37o\ !~VN*vW/ d_3n\ã¬ϧcHp|R`Wsif Z͘E.^D6>>ʄ:u"jho:w.TJnݼN_D7o+}00g"m^ * ,ƆfOBg3fѧCGCuD_qo&M2e2n2`m.Y4Qa\:uu~U\jj ػܾuzxTF??xn?z@lH<~4iҌNmԷD I@?5z,mܤ8qumAE޹E9LBC9?`p#lJ}(ft?`i8sE",XljD"=0V_[7o$![[4?rs$&ēԪ N:Ѿ=GO>.^  Z<2"ˆAy umrr{@{D5)3]dwBF cGpdmÌO fLeMܿ vn#7~|\gϜ"em?gAY{`nʜ+4h؈ܼ^p(˺ܵ[O^j/Y^Xfy<w*4JsCo`Ud䫙ә^}q!zlh_tK/gNgX͚=c|\O;=OwiφC>詳pYFih.ڪO'N2}Oc `vnJ~q-fKr  *KcOOOOnj`z_ΙO;֍iڬ9r| ݷKׯti 6.1)̄#0ii{^dʡڭG-[떠՟s3͊\ L_?Gf~6:}r.&Ns?\F2;ϝ(|pߏ9IIN#FKnsQ)5kI5?9}̟35z$0XsW LYđrT.k{w 552e2$uFwM2?iKpb6.tqlLt4̘64c}fv}i+߆lhH0\xt^xÖ3OfCa\Nu~U6^9Tg""< V\WYס08x$ףg/k8lݴHp36m`媟ϟ2W/_"nD3圿0n#gIS~5z y2kد]L>Շ5(맱߽s4lԘΝX93̳I e7R ӦL`^$|>ssV£BEaa ŵϫV:MFBBuAy:uMn"`媟8m"@ciؤD8z0=U*,?[;m.^'SOO/n■%|:a`Rn%ڦ)GSf(55c&ON+eY^No[[ӧ4h;\62e26spg.; nŝ ._i1fd_Fwqopȑa#GSeı#$tGW/_k@ڹ>Q(d _&!d^5uzjjѶ&OmQ\K[U`ʴϨ~@5` VvQ񧮭Z|%/WjéPZKݸISz/;mA?ǎvի6}8o ૹ LӏߓS'2 }ώ@##=^ ڿ"Y8j`+t,"<ԠMPPfIil6ڦ/fWsGQ.A,O|ݎG5 <NϞ=QNll,|>mSRACziU(-Z.g?ǻ[6'7o\x8-j~+tڝ'Ǐ!~Bk\RqQJaeO'#;#GW\Zjc(fI5mnժU׵' (zHW۷6^+]D 9m͒b92;[M~,]`nmmJZ_H޼u"5hЈ9k;9ogϐ[t"8ij Qՠϡ&})I4jҔxCL۷?%@ ߠ!ܾuw~4mA꒴rMVͫZr16=i< ѿsz7yMd4#gA3sUivfiѿkQfO?BbcbQc>F#B=Τ+ԑ\,¡#'9Pn$[ٲntc܍wJ!E9Z7hJZ'EzON$[6'!۴E ^}QmᨃS:cܚ% L z 'c(Ъu[f:,J:QLL4pWr}]1On,V>4$7#ւ_dzOxC2] Q] 걒HF_֊J+mj_uɫ/ȃw5ᅧeY0(q=gO111է_7?FRSSwOSӓR  ?BMICO^簗wM)FQ%o[աSJVeOars׻sUI̵[4yU4FӧL$* 4⾜9ٳkY8+sn''r۾,#F dΈt IDAT*"jժ bcν6&QI0%NV:TQϿǘrTBCE3Pu*+JQJejoQcB!1JӦ|NeB|țSᣧ8>H>;DmUY^y]+|X}uf맭]ߠ!Me]O'Ǐ].en| -Pq!uw:ڟV1JZVlp`Eܛ֩[BtBX95]JXqgD|VeоC'zYΜ:Aƌbr[qq_}ɛ>x0aʴi6FϦAVCzzAI2j>7>"#yLr)RuQU`tT DHǃg~% 'q=wm1Ӽ6!.6+ñ[0 +MZ*MPJA䷵ko_&v_m͛3yG"vnJoTNW}5g>h40mxf_MG2aw"=0zX*JwfP (##o%ѡ] ݑɨ!9:9ANN ߋc7Ϟ!%-~nOK}Ӣekz$_}ckgm-mې>?ELB|ٲiCo&LʉbHNJ0lz5j4ݨx;s;ի8iMesUSN]Žm[Hoӕӳ33j kvLȏ217H&詳8G''v2<7#(s=C)Kjllz5?Q:=}L![ >[ϧ:ۻGgf ̥S󗸏,UѠA#ڷ@ ¹LN)?azt%kaa #FtRKd>nU~5UIVm+fgxAiyժ]-^v yIekk?۩pAwTuLjpm._ۨ#G>P)=r5.9{F\^4E+?1YvsKzEϣ"{vUvWm$ݽ .4MmXūwGj54koF,:<%}yHK ŕ.U1񎭭v !R%[g1c&2f,-(^O﷒&(!B!BK$)B!B!Dr!B!BK$)B!B!Dr!B!BK$)B!B!Dr!B!BK$)B!B!Dr!B!BK$)B!B!Dr!B!BK$)B!B!Dr!B!BK$)B!B!Dr!B!BKR v"261AWWWaDGk; bll040D*B~| Th;!!S&{,Yv~ԪPZ2/KW)KySi;bܙ5K7!K6'GS⭕+̟#۪А!jөj[B~3 ;\ ׼?TpKm]RDGG4/ SۡTdviJKgTZۡTl\0.5`T+Wͻi;J|%mUmrߧ>MP)m":"6s2gv8 E"6viK))ECdD8QQQKN6cV!1`fap*7%SXHfrv(BpF&f['U\Q FaT†TYj; Y&R!cjnBT ?MRBG]&m"Vftcm@P?fVC2&V viJ ,-HEL'8((U] ~$ A R׶*64IyLL4zT=H1鈈vƂ}DPTx=?JT(~CAtt(C2^""RR2>umBhB!B-\!B!IʅB!B-\!B!IʅB!B-\!B!IʅB!B-\-eӊY)^Yd*_x/gzw_=cZϓGwG'p`zWCpזe759wo[rLOe IUpԡ/4ϟx{})^ojrvoZrqq46 HRƫ>y0Ҕ8|<;",'9?_s~3slO&n9')r*%#S;7.~4_7)y{esSlug>Ypj51wVfQ '>>>s2.'gϖkeA,>Lcyxh0LO)Z v[U~muU97MMw7.l9]]Zv俊5O{i$o]4mxq \痿``6,/i3g?ܨ~w[u9g zzrMJv/?ߛzai11DF w#G>[.=T*11DGGJDXθX"Be}yEz$<KROdDŌבD$C{ܒ9^}u{8iyhpt*%]ޭGFTF:בDG}#e?˩J߿f ޺Bxhp|o˃;BLtkbcz}ڎnpdE3G;~ MaD{}; %޺BpPzpJb#>DsśJwQ)<~p;ב ˄&>WIα3&:ؘo1V::h6ѿӇ䐍c|4V!v:RK\Wۡ|W>CFF9KvWk{x{Zx2͠]4j '׼,zYH 6-5|&GuS0TՔP;{b?s*c3"#pt-k2@9ڽ8Ae5̛<hV%7{Nӎyx&=[V`87lՃӇQT8fseҿs2SGvQ7nۇ݇S*ټb6MGRR*Iɑc摯p) ! o[0dܻuL;{#Y]}k0+uw^ C$?[#cð ؿk-ά7LZ,@yp3R05d, $Ӄv@\l,MfvtmꉿS?}ā(ɘ165! ;/$>> #M ]OS-̙Зs73eDgCӧQ4飺q(X٤g8pS1SGvATRZCz )LCҮ(fNk6lGS.GmQ̘Y\=+ԑ;?y ֵ ٻSVbae_\ԡ~q*hDDRalb K=TJ%phftuQ(Ckѕޭ+=߿űhi-:dő;_C\\,g#",飻,=;7/3{A='SGva̬ ۃ tu۬39w+q[Z3vFr-)Fug۪G63 y3oݶH&/ܙYR1}t7^=a}[~w&H$3GJꅓDR'N94ʆs~0041+ˠxxkTE!#ֶ~4>۬ |H\tS3Ku-^`QOn\=}.H|EP*;IpPEJU)z>yȭk "k\*Vλ]@P+?.ѽ[dΚbeP(va!Uc3϶GU{T=)WT,1,)j<}tk KNbcb|8CGWȝzrQ (V8n!y glZ1RjQܣ**Yc{߽4݇LڎȈ0.?@el?]==h~g ^TWuܶvuvǐiW1C߽ [VfӊYx߸LL,zWӝEӇ1uɟ@B+1b-X3dV1nMK6i99fyl_7jQ'}FAWO]uGtѥIifÝ(W>+l[IY1Q̛<ϋs^k#',T=ӻMe\5|&޸rؘ(FX[q/q1t?˳sBã7lj g,29knP*է9E=8wKf`?w6x z\ >oò=aSV5{/Zw!DHR!? f϶X٤SJ%H@Bb^.TےjaaiK'^Ŕ+ݛ| wtk-X16`bj%SCOO.bfnecC?B^e\*lѤ[\8uF2`r)qq׋#{<*h'? ;Bt%{(^i)T\c~;qѳ֥zUq4П 4k?rY{T%.6h c3JO8ULxWJ=1fH#@9F>nҮ{8p#>> ˦SB-4MzHڅ9z9[4nk  IBP_@0ٱi։Čg ~}Vt0IJ,6e"22tF,VV} ]$ј(mzF^hMc%ܽy7G,)];޴qd6|<`}W vnXD^muס*Vkbn\>K飣B'ٿCsKkz 7sM>xAzߛϟ`Ldd8(w:duQ^O tuc=b6dnAj hҮ/l:&uYtQ#IgdC-&-ءn\l\>.'cdl|y= ⋎gei4mO}B>g 9Q126UZԜecfnMu (YM A/wtt,5 VkPDdo|m؄Yq̖Cmdr}p1.;.*O{b}>TeTd(Y:܊+-ֶ(z30L$!}j4hU [[vBAJuPT8píP71ڑp)OݛbaeCV=WM\PB-N[~t4ltF( }?Jr5XMV{b>yKVW N!A/ԩ6a!\_8oAWWǐixۂ 猡e|c܇U}TRq$cYhu$\|SGHp DkT |oZ %8~bej!k0߽Mtj`ni꿯Pe7n^=Ҹ4_HV;LxϤ{S~'oV;48tF&~6v۬3ԯ561CGGW>==}$3!gfWO;761c_h{?ܼ^Mؠ8.JVfHajn2}C122MZZRYgcL ̸Mo }Cu3>?1%0Uԑ=]y Q6UP)9I V,ٹgϠε5ʅ3uW?# 7dܜdq3hY#]LVqé$llpϵǑ%7Mש#BGnV|msU*%C#U'˿$9'j5ὛgW*>/&:Jc#cJ}OMv\twU9%XXPhnD9}N15aI122ÛRM=|&W.`_Bӟ8:9G^[1r-;ɮmr+N7FN :O:%GN7w?{hJEz|fΒ\xzY5W,l}+~><&{} l9qU5Z Mm\r`¼ ސ1yD]rȚp%K~CȐɑ91>^ЧmUA\8}sopr͋mz{uO<@OjWI'& mO%q+TSG^zJ{,uo@%)Y&f=g\ttt)Ṟ=stE98BB/u[lhe͢IܸrB%0ۜ=NeyTeh^YT'Ȟ3y g\:s=mnst+LttⅯvKGTҡA \#oaboylwKcae}oGCe̞ԓL(W'uBY6{4.&M)CT2pJ~^,1O;Qbccx|6f͞/;>*V===4.s7sѪD߿ 10L^Dm0avO$I7|8(J-  +gѠm5.@\l nzքq^.i[5&Ѫu7Oݥ+ `϶ NZT[bQa:OvӺqͧMaduΕ\sd¼ OZ3=y #GB,3,9]&CP*ָz̛Ztp/ѽ[\/5BԃScqئ灷$iT7ۯɻSM5YfEǁeNNo_>&=^G*(]k\ʅ<KRZMlfǺ<~p%7j. 8P=?[t"s8ݿ^/Rv] ґ`qNKO7Q~Fm3]_<}dʜ5P6&}ѠUwioYXТ@2fvXYmc̬Ģ+~\9gO/p' \ .%-:Lt[IIcY, =5#o;o`Hμ3@l>t.eHzojnI|} vfped ̒&R^vsErΤ32fINVR)Pԃyu^PfDoᒻ}Gaasd'<,g>X狓slvW͍uwN7]jިBhG̦j}=zͻ|Q|0"޽!ú5`(tt䵈:MG2o1vF Z{&zMz7`>DӤ]/--p(PC=n QzO֭o@¥Wzc6WZtJq>,^͝no-2tFm1'k^]j,S(85G4ZYNį+g‰x;m3hl\ql[fH{TG$ etx+oi1Ѳ,N9Meϙ%'9KzٔbU4f`Fmz%H߹ [lv@cهgΈf4El.x^fwtNr[撛.?Gro32HI^}.'BC7q`iɋv-Խd&/ڥnc 7CbciغEJUҘҳr]<+{PD6ѕRH8ٞ0o+qSy q5֌w\UҘrN0*lBRu/|}065%ACI9qv29dS?┓O*%O<2yQa;~BE '^ַ,l|MRWÅB!Sdu!B!BK$)B!B!Dr!B!BK$)B!B!Dr!B!BK$)B!B!Dr!B!BK$)B!B!Dr!B!BKT*y0HDs+[mCy_ߓGC|B*`ni0D ߃;*UQap*i; L)QUai﹯BqFJQ7F>dLCD\5oGWKPD2ܻ{SC)(?{5zG|FhX(:i2)`|/]\O'"AxD8Qk% uٿGahNۡ*a?y..}mGQ^.3,CB3 4Hapahױ]v("*yx0D  `=K''m݉GݣЊА];1r4sΞ>M-FJ?dCI5BC(7/HR%/|̉T$[^^GFa"B? +B$)Մcdd$ OƆPMc=C\ۡd!..בh;4+,, s ͼ0n4KC ( i;*,$+km!F_Rx+OJED+mÅaieB! කbn.=Kާ1~ؘԽmIytk ǯ_VÇԏcbbOTKmh٪5JQFE||F(JĠR  $8X# GhT*QQQĔgWK1ĨV*}tQ*.-^^MJRqs3:F1GIj[S򶚚(J%( lє6-ٽk'zvc,\8}B- ;ܭ刄H{=zH퀄 ժVJtYs_Zl~\Z/+zr R|^ BGGGczm2s4xxnj{M䟃a\8[6SN] eqqqTV 19l۱[=c܋% f֭{+WsrʭgPPVC__ggg~33pu#Ff>|\raiiŴ39r0˖.`̘5BAر3yCvDFFVo޼%7w~7ٯ(윝BCCt"ex#!BV3gv &:߿G'!'YbOh|7~zyΜx)Ϟ=%,4Ye&sq ,.>R$"22Y#lٚvmZ-['z>W)ӳ,11&yg̘>1 } oӧ< NDEEajje˗عc;ٜI5j֢Vjxxx-ZR_KVې@AFufΜ9a# V^g4m"E˛6kM}&]vbB=/=իߐ-ѩS4lD>8h:::DD Ν=CpH [m_jH q͑ 2۳fJ=}1߾}{ɽ{w?Zӳ,'Mxl޴ 1S&ʕ+kW%!Fe(UL_2{\-D&D2h$oАڿؘ]~pTB$ַ߀$V5kT@_7|?8*!6C%RTMT2uM2˗h,[V\Å y ]g̜cFXXXRvBp9nwUSr$[[j{ ן\zwww @9)^8lٺ7oPdir`䈡ܾ}{|tB.ݺSN]*BĄ;3dpm"'ҵkw˶*'-"E3|(esaj +kkz񜁁 6AFeNHfͦ{!-듌UwIc Q3g.˖.АC0f\Tl4iڌ&M!"{v0H6kHϽįLJѣߝ-k6ZjEƌ]σ!W\˽#{)sZ$-⧕-[66nڪ1\Jڵ;ժ`]}K!BYz5AAAXZZsƌKv\z&LOމߏqƦdi7Zck!B!~fwڵ)[VƎΝeBBBP({ 'BWW7?qn)6HKЊ]8B!Hs)Y$n`3ame9\]M8~2b)#ӧMU>tm[^ x&xya)#v6XZӭ[W1:ujvfq$Cz;Μ9C^=iժ%K,Q>[,x3w˛v꒝{};rHbC!B4%22+W^$a|%[[[nN9xK,qFܸy '''gxǪk$&&gϞamm3`_#FR8y#G &&e˖cxˤI)Z666y˗̌{x߹.Ofԩر2~'N$kZHrN{?MrեjjY/PT֫!2$ ,q!T*9HR]@_CHp0^^}F,Y,[kh;,!Ҝ't",,,aI$9} cbbBLL WvH"$ef9a ]ڒ7o^vɟwӻOlll055%Ȉlٲikll0x{?oGg^8999s|XX,P!͙bXv2do~4mڄǏ̿'O@5‚FHubnݺ̡glݲcGPݝ-7yF !_j={f<}Dk +ٲe3 ~fU/vzA4>|ƍHf-$Æƍ8qXڴ̙R:CUfxҥQKh#4!ҔѪe3Ο;^ҥ>3Yh1B! 6 IDATV-w16m0]=K,G\v;vRfMPw޽[mc8;;U $tq+FVwqXXZj<@T_ ݻsxzx}/ݽ }\?>c6?sŵ S+ܽp,ߟǏa g]]sgկO/ҧgEKY`W._FGWs/T2*UNtiK,Y5nCJ,Ƒc'ȜAhclswҽg/wCT*yyCcJq/sܿooowH~O892}}}ҥK3BCCs$ϡ9}}}s+TP344$666 -ϑ3'NٜӷwҒ2`@ ^صk' k;4CR[ȈԭO,YxꕶQ6cS&Od(QR$w< a_:uT*F2pU|o̜1Ǐ%zbKϡ3.W2nV^G,TPB]5a2ob '~QRt~Z_֯[K(Y6[ׁxo{tn d~TXs[(VZm[5s:ժTVٲ0p0RYב_f[r<<<dT\jU*2iQQQ@ŒӦjΝ9}#A7kL5rd+>>V-q:wjO|CѺM[l>16Ѿ}Gȗ$D*RƎ&22Ǐ1KiܲwQZhJ6t0ڶi+ڥ#u~KzpѶ~ ,4@fri1>ZlIݺu(W֓,̝Ott4e=KSB&ryjԨs#[6'.]۷oY?,YjyM/O||P(O;Ey/_~ڴmӧO5&O͚4]0k K8s.ňquuethߖ6T*ٶu =S.ɓGkLLM9zE٫@xD89rEV1iAA̞3nԯ~o}fΝ:u#G'O̙EMٱ+aN۶MN]pss:~ SS>D|ԩ_ ~ 9r|>ZfU 6G+wnJ,ɍ7011Q|[n9+n{S߿+Yf9unDR쌇F^z(C%okkˑ#Gɟ??˗̙3x߾Mtt4{bJ{6#Gҥ{mV:uBN]^2OА[6'yѣL:KWHh5s:,<}{`Ƭ9AA:v1gU;w*UҩS:oǠCaŴ=l޴xfϙ%Jԩٰ~Æ klL1KUhպi+..ĠRhҴ.`igR*]/2e}D'B1~sRصkwhZy7ϕdJByL9󰱵vZaG_L2n{;9r?d̘pP$Wʕ[afjjJr>[UP,X0rӧ'};889ֈxxx$YK=Jz鉧Pt5-]'?_=Kpuiڬ9˖-[\|t1n커/QL?&&&Fc;ǧ̙֮3 ??<rι{{5L/ӢEK̈ZǴmמ[n2zݻksVTpB(VV`A'$}w9|l1"yuk`Ν\< c\\ӧNj ~Ξ=5OD>IIIlܰ[ݽ;ǎeEެy ]Ž4^F1+:wvɘ#J9@HHSXh(k׬گw_x'wC|JvYdk݄YݪVO[zx*G߻W8W_۷oiԨf{X_kyTVݱ fD R.\@ѱSgZl΀>T\2n.޽'G֌;w`":oCM5r8͚4diM1yNӰAKd7oЪE30u$~i+_}5$%>>ǏѢYc"ùu3O#KڵieLlj99co@/>.]%ٳg$<`ӣAEc- LBTXL9.M}IXh(Ɔv*no]rׇf]JGHq"Z9gٻϝõx1ʺf华fį'QLJJ+Pɽ[g uٵk''}._-[tԙݳޘ|Zeu7ѳoߦsJ*3k7wBB^˳7*_GKj)B(\_o/O uΙ.S&]ӣ{lXLD7wr]366fU?w0~DEEi}(Hupvv޽GOlЀ3OEPZv:edd53˗/8zj4MʕKN]@$W>.̛;h޼;ܹu6^~֋fM[f͞˸Q'&biec^xw_/W͚5Y^}Y|͚5W(.|=O7o>tuu5&ړt9s-$01yռ5~fo/*}L5/^ӻe˕lӣOŊΝ۸rSG͙ɋfw""IM 3c?~]f"c1ۊ߳bxEg<}Zy&fĄreq%,|RqtL} *SRe_j2::;o1w,op%"~{M}'_ͥIOMRi[*8W.bbJ\Yje l 7n`-$>YMժp+ㆮ^ʷ)\HFG9]VdX|###$Yaŋ` "8X3P^jeu Z0˖}jR3Aς>XR8q0qT^C8֖-[}p߅Y2ΞNj+[gނELmg)zXefffnnaQ#000|'2՗m*H 1ygB'Ϡq&4nDhߡ#ŜiаenΜyMu͡C5k";[YYglQZ$hܤTD0IJGP!o"::SSS4a9km$**JʪL*"蠯Oz? ]h~x%\?cR!?0ɕK*B(bJH%GdzHʪO*"T^#[v"+ʩulMt!Dʪʑ%фB!BH\Ϝf7tǎOڲ3ܹsS'O|t}Wر}'[b1 <@BhW._7خt!>ƍ矶*EG*"$$$0u$<{6wn,[S]twRݟ+W.Zmƾ}{Sl ]pXf͞ !>D3lHHJjV,_FiӶqqR.ʹw3gLc\zo/O @4O2n|}ؾZ|>m }EXtIu&;on@r5 ``z`5< o/Ou۷pη.OY`;VT:9sg9u$ J"U/]#,_̕˗#%K4oFPPP{ܹ4l؀WJsfF2ћH7[,^ÇiZݱ7GoԩSY33|( ݣ+7ZC: ne1y4zΝۄGDYC￘KеKGLNEPdٽHoll8y$jbbb'11Xcз77njقΡG=Xb9wޥg)r)RCCÌ '-ⓕ(ʺi(;T{ʸ%666ůbvvviZN<[r:uFp}ͱ[rpp{.\"##V TQ5j*Co1JG"MW:D8q8&&&4oBk_:u͚ۗ1jH6kkɒ8===vɌ3U@r%_%qttdiӦ-e>SNCWW)ï?rnqu- %p+91_cM쁯ZС{$0.;V..ű]yիW4y*է?mccc]եdwwLτ+D:u!DסC'%Dfպu[̕!2J(M!!!̛7˓5T*^]Sn]<={ $7cmmn:^Q$-"XXX0nDʕ@=ww 0mTծ}FAn?@S\*T{<7 ccc&M :mƿP!GǂZ!2wEЪu#͛WN89|0=ϋ`ϖ`gg@X0> 5|/st҅.]:;wnpppw/;w$((ukѽH*"SRT̚=:`i]gΚB!";qwɉYfk&z_8w,Kkիիݝ5jEܹٷo?GFVSjU1_8,LL>**[WuT*DcIJGHw T9JW/!>nȑtaV^{-i_d~ 9fW* 6j=_|l*űe˖]P!m]]]l@Ejno "lʱY3c%))X)%C[t F^bft rY&ì"L371ƫL/,4B$"4l(E\|>z7<F6Q2%Bebfit ̭۷JGi,Q'ytacd}Խ[[julڸt;gfyPS:ϟ=&wC.3K/]u"E3LͥRݼkqmP::9ļͱ=VL-6h`Ɋbcc0Ve>rCϞpss 66ye/0aA% ҙunF|r]\&RV\JG̙3Vɓ'&L$w  ^dl])B!Ba.\`Μڲx}ժWGWWZk`a}֖bcc2{ IDATȹ>۷Bbb"eݒoqX0lL+[Wʟ?yD6J"x12tm'ۈorJt"BC;P-I&V:JyFjVcneÌ+E#{t5Ɔ.]:₋  ۋΝ:ӹKΝ kѣ;݇-RTne~6$WO>9mڴŅ3\ ,,غcQ8LO>חk׮pCѫ֯#::ӧNr߹՜gܼyC^ ÌS9t էv wL?_obbbX2v 8a7o`0?>(D:r֙/Xh;ݡp"!r'y򫤤$7Zp*!Rz,.4n? !=tSRe֭]Sr~?s0}2eر}}&}39s7?v Əe?V.]\*ŜYd5ʚS'O(QU۷ _3zXj׮2mLV|`= b,x$ӧOqӏ8;h~d24KdT fo޼!89a[vug ޽f[(OUH5?.\/y5ǎfZTK(+իeށX^p)_T"'dný >^Zkժӧ+TT#GsEF yFsׯ100Ԕܹy ZMpp0NN>奏7Vd;hѢ%:::ZK*M}F$|@R?t޽0VիWكD}JHH`kk˟wR~}Ѧuj >>͞ri)֭,^=< { 6}/_-ز%yS'O8h0߯Zɓ'";پΜ9o?ϛו$DջM6#}x-s!2޽_K-aC#v9ZhÇ9r{v3x NZsѫgVXݻwٳG-Z$<<.;d?:::TdOvn2jRdc88sn'O1#q:ǏMq==wa&\8sHJJRq?,?WkCޣ' :JzDI_3p//]lFVS\yZhI|&2'S8OTT+U/PpEĖ͛ٵsg}o_̙ˆp-Y?v [[[ZnMR(Rujժ֭#[@77ꊾ>SN=}FFFj>0Į];S| ]ʘ#i޴$&&f*T)S3v..y>\qyǎp?-[!666UfueAL6E),Z8rn03Vj̙=3ChUZ)SǫvܿzzK<}D(Zҥsۑ/ =wa0LNR5LLL 2234SNKܻQ|nqCVw24C2e֐&}}}tttHJJ"&&Fz. * ### ؐ͛CIXXXZU*{ZKqԭgo|||pppommnybcc5k6#F ON*qدt֭]@_~)R޽زyS=km]>k?vSSSllmy|ٰ~meː*#/鳗L6%ٵ {|,,-155ޱSg]:7Չ<~hy5*U?v6 g KKKm'B'KJJGE2Hʔqܺ'%Kgw ͙ZY7NէN gXyҪuk4lb'X|9Ç[n"8 (y&˕ s.޳qYnݼI^~ͤI߰`B5nLBBeɢe)01~G'o^:uL]*6oHڵW}~#_|)8yr]88<{ vIScϚzRXx!]+gL4SS=z꣣/wǛOf[߿~=SmX! 1r4J&>>}2u:6:BWL>K.bgg#)_"k~X)?bo{7~"5kz쑣#Zv:uºukhѲU\|*,-Xl}D fϚ˗PP K9Zsӧسg7L;^xA58ILLgwFbBCmZ]x /{ ,^'O(^:rE+E$ }ٳgrIIԬY#F+W.;ǵz^p-[63s=w+s*Wq011gwK z;h=vE>7FEp!7nWZjӲUkn޼S"2ww5kf~sgᅯ(VWbnnN7wwרATTsf߾9|ZMUIJJǘ7oCrǚ4u ѣ}يiy${~?sN`¿ ՛7oU3o&׻\~ժwC [N}6M`066 WL|\*UVlB.Dz{-~Cx? q/@__8Zsm^)Jll,uj 66)SQZu6mÇx<'q4y*Eh$Ν;K*Mt4#G eґD6Ae`~Fw8RJ1cTB^?\gï;݇ דq}z?Gfڌ?fq 8;;u~Ǐէ{IoNN s-`1;vƌTR̛;Ƕ.Z@h}Nݺ4i GΚci+>>T\q'c;wnE*?ݙէSP:PJi*eVϟ_R([[zB(]:._6h@Fȕ+&&&-ZTse~6 ̌RJfR/Fӏz_槟/o4nS144d[p-Y Wג<|ٳfp5K.0.< z{ܻ'Ij*A@}xmڴeiذ>݋ƠRnrzyFWW-7ȂKPTTVSNqz\(XЉs)ǂsyClךV66,V")ZE#..$:ueK1s6e[y,C4Μ9!~CBp.Zpr?M="""Ճ&hQJmhպ1{ ˳7е;ӧMa%ҲUk~X=_OWuW%w5s:|svPA?F޼[S?&::^=3lL1if4mL"hب 5R:F!ڵ|r9''>>!/y8;E2n+̶_~s| Kq%ߕGa``Jji?yH7~PҢYn-ffO jծC\ؿ*Vb̘9Hn }ElGEEa^wZ_[[E 9x9RDD];w 88 42d ciҴfW/Y̪Vj$YE&PS?fUfT^]K<} $|^^}ݝcƲnB3Ν>~ 5Ǜ[X,(HS)OKY} mZdɒZC9Thٺ ŠjM|w߭Օ{Mv`bbʈ%?()ԧgokIԟz I8!>ExX3gN⥫ɓZMAZC?xVpMUqv)S=Za5S&o22"Zw˟{'Hݼi#OW>III9r߯bU}VV|3i :wIqxrGGGӺUsYdYz\Ȧ֭[9v`mQkҒ~c_c:ۮ,H;S/ӢEK̈ZǴmמ[n2zݻcײ_+U"""а0ʸ+X)͏37w% ))޾}5~$%%2<-+111ܺu Hn"D>IIIlܰ^k*{w;ʒŋa͚+ؾ Z @Dx'-~Z&NǞw< ѣݻ'!5ݗ~>hBiۮ=K,z]~-͏ɉoJyޜ?ws!֥^WV#a!x-5lo׾˖kzG§՘:o5Xѥ2sgy!|& !2Fʤ.\@ѱSgZl΀>T\2nѽ{O9w`oEtl߆V-2jp5iȴӜi>ȑÚL͛*?S|Q>^tl߆MHKΝ=ظa= c7Hs}6t0W2D&dB u5wgJ.AٳKkAHhMvѠK~-Z0o0E 9Rb9*V(K@@9c)_&WkNƫO/._t$w.Z3{&p9\[+xxgj$ʔ)C TTb78yN8Ήظa=&\֯K/ ysC.llˤo&ңg/n߾Mq".U"g@ngoyFKj)B(\_O͹p~'Lshr\<]6̏Y3s=:yH}#{PfۍYb_~?`J#kEk{=AΜ>MTTwB/Zv:5qxyhmSe`ק8BQTX[Ú}B޼LNXxxxnll̝ɓW3GQxw"#Vf1@bBL‚ӧNT3F|>fff-g~?ӧOȓ'/zzz3VkDD8:::)0bf̚ǏˣLdtGsժ]Gz~¨\VÖ́f2sqY߿'C R)Gǂ8:LuJ5>^Zɳ՗m*HmU===&}3ҥ}JZɅ@R) 7nBMf[e&-F.]4==}6=B;n-$o޼ضm{LLdY)5jXko__llmYjlsV:rCfff 2зqDА#G?mS:9TE255Mˣ{reJklVe(=LrBGWW\rѤISSPa *t!>@_n !>tSFMרt !˳= !2)B(GDB!B!"r~?sIL ;v?k\pmN<@TTTDžzŎ)E}BdƎaJ"Gr|uvQ7n\7?U(B8R)&!!S&ٻsc޺ܽ\raXm۴L0ۛbÇ8wO2k<c%&&￘aGҼEUB(MVb2(t3mdݻӘ0~,W^˓!ХsM';_/o%Ź/_GwOq_ѥs.]|@nݼɎ۸\~w7^==Xv ϟ=˓n];q-=K?S"b,ΪU+"DuYN<yqHK9zKs%Do"?۷ox2>iuv߸={PN]f͜pt,Hw4jDk 退 t{-)ݛ;wngA b/Y@.2u: AV}\r߯b9; Hoo޼!25XY[k{yرW09ǫ*UQti&M H Ze|Pq'? y\|[n_4_[rwv++"}i/\a~X>hU5jS>VPP @J.5k%\.j:M._ȜY3ٸiQVZɜY3 s[(B|Ԛ53k&7_S:/R.>Y[ޯ\SJ<[Ybcc.vvviZN<[r:uFp}ͱ[rpp{.\"##V RBd#GQ:i7tGZEյ$V8:w|5͛7۳>^jCNٳ[@t[rt恷'W^a,_W^Gqvv@WWJ=k3=B(U:9^0zoxUm133W:9tcaa(WW`cvp(3S=W=j]ЯM%rTR=#c3oL<1uڌwBd^3Be ?U6JG"ǒJȔT*fmXZoWB!PqqqJt015S:GeJJG$+kҤҝZFG'gQT$!(1QD֦R钘(ìUN|-gFJU8IffnNJt115U:Gewy3?V:) ~Mncd(3s”!(,43KctԜpc4 O~41yESsK"f>se̜ׯ#}LMM1ٺ.?.+C-!!/.Q2%R)*BCC)PR"[t FaWf9o3 k)YH軲jjfbfnc!)S?3۷1}]Iyx|11* k|JGP&Vzt FB)#_SsKDGq?}zZX@TkLeFL/U(]e'9qs.(%SV6料Q~ӧ3Z(Bh< |mnL,ٴaOR:HO1V:Hgzzx+zYMHH6JPeW/O N#Ihh((%GֳwR< ֟y\)G*E[PQ{Sdj_"mc4jޕ*C3 k[ZtQ:H#kS:"M̤f!P֕rSsKzMV:([ VBBhzt !U!D+B!rY~HV˴03 *7"KՋIG^3cL:oKمBH\!D~XPf7ˇ5V߾y߾}x ;T+B!$[S.B!BdfR.>(6-a!GG২jL,01^$u8ёa;g-%'cJ/]n_JG:iS9g+V%SFE"  T3 &:*]pv-ѽ[ܺ>u˰"g|PfC,qb#p(X3Ao\DW^ӎY<&}7έ׺Dgt9DkeR(wͰا-:FFF_To0t@o +k-|˗.,Y*iࡲ_֯ɟҸGJsY:k4*nJyB|<H\ (xJœym=yK&cbj.σ׮/^0}\̸ϞhvӴmKg1K\F ܾyyc1ql޸Ngu:=Jqǎl޸NჲȨBdcqqσGQ>t 'O4}/!H#i)dniCO[DG;C}(]:v?{N!>&m{9EK\<ݼFG7r.s.m f;kcSkMq;ڡD\z_ֱG]דU[vP_#@ɲU5}Hoֶy4e.zLeSs)R~BE*J;R?qT5kߋf{}Xi1ɭ\yntSS3~s@ Pµd&LJ70:}s&mٵ\{%>Dͮџrc1맺-P*޶@OO&y?zjѱO\*VsʲLLL?y0v7I}}|rIkkeis)Y?G,!D&'r!{{>8\OOZ:VC_̄Bd?BdLB!B !B! ߾-J"+;kt uЯܿuE4jד (CX~\1KIJpIIj6 *k8bTNTn]]]nl7][)Kr輠 \̹s{ja#W6ٕ ,:'xRG'7ؿu9+UFTԻ\߹pv:!>D*DRDqnh\.u8WqZLc#9wt77COWOpx&In^"{)Zԡd YȈpXKg<ymsnCWҭcGJ%iLS u6(u(B:ܽsP2Xtd8 ,F[[$݅>@0$Ϝ 1408k_FINNF&RVݺ 2DP Rڕ+ IyazmAʤ$‚JJ BL0 :"L0 .2 C## ,,,}"1AP\TDrH(DGJJad+} gzN8˗/~j}/Wk<~gx=M7%''!~(̵WTx7m/Ӑa S&箱,˗/ToݼM7TߌƳgOUܾKWA6⯝aΝ;ؽk'W\!$8N̰aTkA?~m[_XBΙ="0-KFRRJ8J%sf$,4y#UC}rmmܿGBgճGgnӻW^xNbb"͚6"8(ɓ&0wlf; *F͛7-Z@ BɘQ#Փ&GSSS!5-mmFt1 eDR.|@v}{;w_];hߡ#ʊpkyy9?YsHNNC,]f͚S^}XXZ֢% Gl߾/_`hdZ<̘9ժSHQϓ۷n@vڭ;8{ .Ntѓ#F)6}±GhҤt B.$v LC. mcai J…PV-&&&~? oւM@߾ֵS1cm۶w\tؘX`􈋋Př\.PV-ttt!#iii\[[ܥj5N#iذD B"11UMx=پm+7o\cfiOrtuuS]=zb-<{VH N")هtփݻq3ڵsX[ECC66(PH)X %""z#hժ5#G a&r-…m6jLɒpQ3{μ/Ƭˍ׹p<~R*̝33}Ԥq&lAZyc d ?45jԘ1Gr܅,JruY^~O''' B6PV4˫`ʔIɓkY r")2TFټe5j`fn'8{ *U\dԗX;Rh1A@?׮^r+V}LLLpr*H}ҌeTgϙٳg07e mjժSbE444ػ>t2o8iT|z Zd''AԪU[[,Bc& dW2<000:AuDR.d(---jԬVHߥ˔Mjz!aРT]gOy4cti`cq< KKƌ"$4===nn-066CCCCBBBغe ?BCC|hFR2\u^1 dhJ%IIIR"ֻwP*$$$H |QLL IIIZ%LLLHNNⅯۢET‰IJJbe)]WyG_~q<|m[RNm J۶m8t W^ŵz5fΜѣ  ҥJt"##ILLС̟Y~D\0III̟7{>gRVӦ9HʅoCw̠}oݺI RUU>|`NĵkWuf}xqg?{ ? òMkbbbx;K-ΟVAET*R9޽{OT2ˆ Y8O|񌍍E[[H1555͒X"^$&&J||^* "4lٲVd2 ez[K m.0,^/^sdt OOO>{J{Έ#I.;-DFDHex޽MCd6(W5п/rlllC"Eޭ3o߾xyߜ6`kg=A߽jS|Y|R}n.?ϢEK;аa# ÇRŋ}#AIII&kŴQm IDATdU 4pJ% +UX2mMPꤸVMLMYfÇ !$8ѭkw\k:+mܴDlZҲP+ZP[^v }K8[ϝ?gĉܸy#F#UHʿɓ'ѽ jVC6:j qgS@JٳfФQ}ڶnÇTIV,_ʟNضuKcn&L __ L&MhڴY&md2LLMqwǏhԸ ҧ|?2&NЭG^*ͭ5k֒&x6f9ؒ?ٳ}V 冩\jcSdq=JtETv֬^R)nG؟؟~o޸CXf&7SZ dgϞR"cmeFFUMwI-t2B穓Ɗڵ\U5 |l߶EPto٪5]];v+W,#4$)Sʗ{!Zl-u87իUQ]իij7-ݚ)q .ٺe3%KDiQ4iڔÇ~Z>cV&mۻ@Mc)hB֯[VC ~gd2|:w邉 FTUx аQ# }cR=e#G? 9vz.\cפdP*_ш;Eӫw_VYG iۺ ^fll̲ekY`tЖ;o1~dZnːATIϘ={&dqTwuMUUg4WkW`a<6&j:-&u8B.ѵ[w^z[:d >hkkӠa#6xSo (^oiղ9c_@c_x<QQ,_>}gnR>|֩Ifi٫7}cߪYLk.^[[& &Mq|z͚Uh HpE^NtH |r/^drN?δ_a:::xӶ]{jծUkջ[k^SH~3 Hieyϓwn_z%n5kVq`>9uk(Jػ |q4u7g>-[v,^K""2d0&8O|)\۷ox*WNiidaa֭8{ vTPR%b͚|\sss<īWhذ9}3SN)9OŨ]&y,ٿoK.CSS3>lALڵuqqbʜ8~bŊӻO_J(JpPVVlټ&M'5wn3x%|֫WFŕ˗!11\k\mnn}]O_ Z٣Pp"/_];wPZ5l0͚5϶GA,^vMW4mJ%004$i A::c<ѭ[tuu'+6k6ND{|OcGQV-=z6o3r ?\*Wq&(጑ Ͻ?\*1g6xCN)O;5nֿbw|@]0441cgk6;@||mOtttP4v}_Nr#G}J8;ɥqpp`֬R& BAXx+r?Hv:d2FAU7..Ue% >P5_~*v=eigPRy<֯ý >[ܹsB өsKpP{2Jtڍ;osLMM7~"NˉرʋQju~~;wV^G.sI8w,EeyFIoւQ#c^Pw؉9g2~Xs'u^^%Q+0}ҷ;c=gYq%^TFuUQx (ׇmT?A)_">v1̚+yiҤ)aa8~+P Uk053` <ժc0!ߏn{ҤIjq TˇgΜko={'| zFΔ)[NU>rhƏc>5kNDdGfР!'22}Yd9VVyXv=zvv:2) 6C^S.[,X?'O-M-[b,)+tԟ1yϴl3S3iF)L&{~:?unll߽/ ̣SA޾yÔ+)_̚5GtuuYﱑnMiԸdf|}8a{Nto;;w-[>}Q37o\gy,^>޹Aۧ: M%8s43gLW׎ݬZٳfK>) YͫZOKK:re&&&9wNMd2J)ԟPPaLM>/wfͺ,͡Kn  nz%I,B!זSf-֯Wاo_ww׫W4jP"E0k}B qrrb9,7Gm͚- crV\ΔΛ:uꪖרQ瓊ݻvҲe+x 7_ 1?s fϙk Z5AF.&ӷadW &NIwトam7uiۮ=jW;z_y+WqM`hzO?y)˖.F_߀y-ߠŋɩ Z4cq@M\.}}}ǐ!ðcA5!>;!4y*&OMsY8ȠRSrt-n_ΞGO*\E5(Pf矓lټEzd2\k`DR.gff_f%,c"^R.]’RO ֱSg:vꜪ\SS]>WK9g/n~;7o6l::TT )Ǐ(YTŕ[7=̇v?q:t)ն۴MUc'W,6}H'Mko 67ժUGKK 璥yJdY\?I3!cӦ \z[Y呴*P3 Kϔy2]]=ՠ=Eŋy?<$I ߻wrrr7H|pyTZ=#upq,]#'.X[ ܸ~r+SfB4l :ĜTeøOTrE\]k=~s Bn!LALL GP51I015MsYXx8zv#*22U+&M1{ jԬEn=3zwBPb嚬]ȅJ) G<'קK> Yk#u(YҒݻwtb-ڴmIS9'Og5 4D4],$~2Ar\Ynz?\)Cu5[ﱉHSOmgF-d_+6'[W6ի/u`ER!|O&2쳵 d. ̌B )>066Ĉ!\2DX~4}K VA:")2LΔ(,u ˔:A !;ת H'H]%&&DR-11˔JeB} BN u)4!} K$B4Н#rV^a@]xi6xq^|a4НO:kIErһWw?&u(EGg>tPP!IaΜ9Ǐi٪ rf͚)s}>~ӧOT*Uܹ$''ƍtÑ#t4jܘOc='N'8(޽ ??__kWUt!B6azt d ??_VZA-\gf 6lL\G$BPkWٹ/ڷkî;~*Ǝ`-,Z?__vI=:?'ZK~cѼYcbbb~:{B@T2Yɲ5Wtxkׯe&UzsD& (EuAPRRqq(ܥK2SRR1Po'zYPP gNF.ӲUkUyU֢%i333< F Rٶm m۶':: ={6uUxD v:?'RĭEKωHysJ*Ő! d玎eއ$Ygܾu K++i|\\OF'ѣGjj;蘏yҤISL$PRN| fjs`՜D[fP>_iu$D(n-Z*wϝ#cc455о#F |R@4hؐʥ˗pvN݊hIJJԔٳO͚536HN-m5B6ノ.FC،"#EH`ra\NgdlJbb"f__M͐dRLINNj)!EGWh.|[!Ie[BC) u(1M``dš+Xbԡd$j4EOOB&m!IIIhi}LECBBS.c;8Pdɬ9l G'   P(h׮-E%<^O:XUs,FLgoS)\Ʀܾz/%ֶLyqeSGwbXΞ؛jY0ȃaʙDy"EJd9*T3Rr-JSܼ/!#ZrIu#ԦtW\΅~NX8P߭/*ז-m97/Ҳ;Fx+UZMxA~~9Etd8a!Ū7kכZ [SjN=SJXH qj姏b&ZGLt},I<}x[Ϊ\(Y*^˲+)IAXH a!jzkoȭ?IH$,$ {7/RxYFN]?d$wV͟jY5T\G"%ʡ-־>̥T&dU6FϤ\s ?'^>_!FN]Jm3s'lTJWԤxJhjj`1^=e1 ٛ hj?PR8>}J5s&v"#Gה3:E%TMAK[]=?>"CY9wN]TfOXHUIsnщ'ʟ=Kv}(VkσkOTx(qTHme+α o_gWuݨmNen߾z}z HLHP𣬭CRLC7O_lzK:G2j_2deX>+_w'O ,e$+S[3KiFT Kl?SV+UdRAE;-n_Iܿue*gEhB®-?zeV[~YZ'Ï}A[[NῨ=Zfi.xKӇ)X$p_8Bբ##عy)} ~ˢ_Т;ּ̈́1Cٽu9R<|ZLJuJ(T"mმR*-޽_9:):qaؘw x%rnAc3EE`hl9Qܼ|ѰeWfMrr2epptjPp|SjlT3Uyɲ.\p[G'n^>EZMy66N2=GlJ"j3KkR}^@yϏФMfOLC eӊ_9{|Jb*ryrqq4nO0;hزb X!]>6Mɭfyh[UsIR$fʱ[wLg!1!^PFJNEJaު>_[Z%y?DZ@Q*?R3Z8y U`@lstV-3L-9{|{]z165OzyNEJrx&*o.Rc{`qقNu#|2/Ю O4]<-z/]q_S4 ˦Qޥk4 ZvϺߦr`fa fQd2#f4c5M>N{nٳeFcf3<+USGv2gb?.e 7NEUODm g1e>Xnni͜U{AOPU>cykP~Klɖ}~&HB|@-U~e'4 _dLi}zs*G>Gdߟk)\FdGO[`ljNrU%O ,_5귐(!7)Wo|8s(kBJ4f .=s٪jRo?deZGNϺ{!cs&^ϥӇ)Y%UwTYŤL&Sk"4r]RЩϨTee\qsUN_j}qX[g!N%_b8(u8vZ (պnԻ*s/S⒒LCC-!yM>_! }|@sEKQh)I}‚ro!+/U)MZvoBOߐ2NJR~.Bj2F-Jvû7û0fdqE\=ʤGK[@GWOrFI [ږA HuDE]jY94`:)u(kU.߿Ϯ];>WJ%g q.&Py'4dĄu!{Ҧ@.! *2_/LgjnC"RY/S9#n&f8(*uq#?͙ӧUe\pAqA޾}*c,Y___Μ>%K(QDIA$ M72m/x޽K֭غu AM$88 cA]&-ɓ'qF~-K2SO7..un̜uQGGs!y__zUSrj?> Lyϛ;|z_-ؾnqq__1ā?X5o~=#Ӟ?{tkNa4_{TpMtӖ{AA%ANj "D6do(4MHmQ)}7sJx#~93'~ =42<sq U224<+<ёls?d~Ο:̊yINJ3_gSKg?|g;6lY=lGvQ(Jfя~ kd6ܺ*ssΞ _ezwkY1ws'ɥ ;'OV]H o޾SqLƍzovy_̓86/;7{< /qkA d)v,޺zzєQCY6g,i?)v4e3(,,,RqiѼ/$''ciiIӛ(/2v'L2Jž{s dQ>wGjؚ "*"BV>r*TNÑ}g׿OCP9gj9w;V;5vn]In9ut/WΡ;ؽ}- `5iĄkpvg=ص}-;d\{Ǝf͗S۸ Zmwa˷}3hY4c8:$U#W=٣Y8tgeq_?m[]Zȋb*n ^om۵}889Օ+WXv-abbB.]>|_-[FJJ 9~_矘1}:k׭$CB3g.3fL'.P#/6#,IWe{iє&JrwN0Μzs3G۸-<|hѾ;{vlᡏؾKL3Uj5˷Uj5&Cǟ Ur%թTwO_Zҿ4W=d~ƻpQBg{) M&2Efӊѳ05Spqjo?tɷzǡl] }ǿ8Uk7!>6/"TV;7.bieM5eph})QX1HHHcccC>}hּ9<`W?H[133Ύ{q5\]]quu݅%@MLZZ8o7(w:FI'%% 'q$'%']g΍+ juG%۸u<WdeިUf:-K_,[PdQO TS)J:-.E]yUw~odx#>6' mVֶO?Gdx0!xxB|\T 1$caiEjj266/oP,f[߼{,F^v/rƪ ꎣs!Nٍo@Ib"-CV{IϨTZJ~mmC6BY03STf>krtv7@?ήZ s!zdm-˙xbn^s8?+" %*J%:obڻz]zU7r?j&,| K?&] s-xyv}YAYk2?65]T6Ψ́}5#CoŸkƋ qO,1ZmF.! 5ʶoook???~OdddYY2edyKYY!<S*lȜIIWc8m6q:maݒm?*sK =Kgܸ5^~e}Uf,UD96ÂiCIKM;T,6VzX1NDG3EJ%ZwaƘ^XZZ-F-jX^dM\,6uZ*n@ScjjF톭5굠lŚ\:b+0?>[?{5;hޮ;kfnMZwN1|67VXXv CS3#&-&% f*sLLLYYTdgSZ}6RI^Ya(߁翶| _d:R˜hsp!~bō /[LeJ guɣ IDATXo? zpRѰ![ se*Ѽ{NGa(M}N6v a˷L* o STEFL*s t`StfBy hͧjQ<B!BR .lnLA޷ӆtmpP4<cœGAMͫZ RSd:)t:224ih4NGT%*s 224(&(,:H]СcW3t;(&$`ee@rƘ[Xj3its禤xT斘ThϖITD4t) 7;x<Ul߸TۯFsuS?b<Р-:th]?Њx=%'%rQz80Ȉn^9G5qr)jLGA!/_8Ψ%]o_Żp< Sr叓h4T^?yپi)<|}Ġ_d(T_hP wo^ۏb*ilN PRz}^8Ŧ'",#g@BN}ٶn1CNcIf2\ÜOalV.CO6s'-u%M:&bׇ0ΣYd:|?㌠o>ց.ёa\9)Od Rp(lZ ?[;GYџ1pLhXE;#45ii)$&ik}RTݿgqb~L:k$_q6:۶Bތ%]z $r߹Ά>ƎGy;#C:яIJLȓ}5.&*6'wFNp;2H bwkGl+?>(otQӶU$?IO@V 7_n2iFJ3`̩#{Y>w|08\+|J!O_ ݺ±_/_ i`{ųU.Ҳ~tոI*l ([v$?lvv՝^&baiEjJ S3*yno|5N*u ;b~% <+1aNC:3gO[Pf&Y s(oϋU4o'fN[; 2i_-"7(ʄxILT8%Vԑ=rԨߒ(]:%UaԡXZx^ y@.}\ͻTj*_-:۲s9 ǯ{q9Z&,92jk!+^E6̙!~EJRFLM/iC;bLbɤ晭EO+T϶.]f%)Q Kk,, \) mΊyT!*9j44H$MҫD`emK?w Q9`emc6v9ƮZ)Gt 6nArx>XYR5-*™D=+k48X;6Ş0SSN3s=*C vNTh!F9RCV-ovg yx[5~38}|?t5Fc9X'WmZ)y״}^b -,pp@Iz ˞pqQn34jNG?a#ZMu?;R~\//t|Cr6]z w/;QLe&'򄩙k5"2<#ᓧ;JPn]R7f/ ah%Vƕs0yLbֲr7&&X<}2{Uf|DVKUD#94)3lj;ir_7읨^Or!W;^Y֙Tٞqu' KQ{H)WVf+U^Uђ)ZkGenAÖo_+C@2Yǻ#5>E e*7O"?sZFP( Bk[{2cP(o"'`B!Ba$R !B!F"EyqGx!|zk8!B!LF1v&=Je4V{eܼre͋,ޭ+78ӨUg\ yqQ_wo^5u)oZVzfEv+މU^';AD>Hrڏ7dddPJ,BC~ {vlܳK2@4("‚FSvgfߏvpqPe+Ï[뤫 5ӠP9+HJg yrYLT[.$)1UҢ}<[_(?w ˷+|JN+C\a "n_7ѭHCF/;7sįTV[W4o BoWR~K٣V)ί6EJ\LÃ7k5 m Eûܺz-ft1/& L x-gf??EJ,Jȣ{8{b?+a#?%3}9Z tϝm6C{ӔR;F㖯tܽq酟W[`jf=q1QXZPTEw^_W;:SNd%9Rf#.=@puسcy(ھӏy[WyqTV6/d*wkFȣ{ܽF-;Sj\qbxbcKWү_x* k;1ὁ 'B1`d`Spa}s<ĥs'Xa?fL՝6IOg5'fֲ혚rX{27.A|_8,f@\ln]Rܸ|:ѸuWЈ՜9ߝDenR#,|3izZL lro_}x[,ږaDEx!6*7/Qns.quA3Wry֖o6nN%x6C-FKgIb<^.֟M̈ ҿ<Ǵ MK!OR`mcGPtX2N$C{C襋gMxlX> +$2"D-gN\.J> @ /Aȣ{XZYb<} ΍K._kcRQ8$VqP(\<{w獮۸-56Leeu ;kTeN.F.IWw 9)P]tv`Ɨh~Th՘p*Ldxv<ANDd6xx,۲z>oҴMlTР7|ahձ'ӯ715|:@3N#*"V{e|oZJ48m&]ͣ[|l;ՋjZ MKp(ϕD̚/0( 2j  d٘x,UA ~ȪFTҲLo?履h򌛵*3'~~j؊CP(> V˨>(q17.˲oPà .m)[f*ё?ESFҦK_K!/+SHs'RA+Q NcTV~\>KWN|}G:t_7!sL\b 6iG ѤQ(?yUr 9RIjJ2\ٍ~çq,j4ڽӏ䋉 Ou)]:Uj5&#CN}+VOjs,3rk[?r:J )ɨRk8]?݈»pQ'Р(d;w5굠IL><=IRcjjF|l4ddhXwn\b( RS_o}E UOHKK>ūF,13'8 je#IWpPzB͘?uڿ.;9V6P BAX0}uy|z.6XXZ](K,6'Yn_԰^&^PTPz\ ѠyGtZ-t24FMYBtd8>cйiMTTِ'ǿ8ˢh?uXZжK_w?!<}^,ɅC&2 5%&MӸU-+g_x] ua͗8돔,[{g.=Ƒ_v`ieMn [oU^3<|^qꎳ=?5)QA+7Usr$57X5bɜ>"% 8k+VִK Xu*V6v?x (^VܹP~v{vl@2quWwoj5l͂fdPn34HF+l\>K_y5}VA_K!Eމcьh32(_.EJcEXXZSJ\g wo?}+K!/(Y*No(VgWTx. Bh V~:5ڍP^ UCi cHINR߰%PӲ yIW155 Qi{iNzТC{&~uZj֝zQv\i2Fyعu% F͠G8q'߾‚.<ɶn+D`P(5h"_ϟHZZ*^iN?}> +l[ ՃOfȶfV+^Je_1Ķ7@IY<\_{cem#>h?X^YT$ &rûۻpQ}1@(UZz( .Gg~NgWWG; NE񧄸hL&889;, xNFgWW#g";Ww!;!TBl揂Y΍GBE~\%W77Ν>LJRSD0tJe;zy#!.;T*S^i˷t=Mluc"Dkm{ӋV:$;4hԘb%KEuuI(XO;YSk|w֨]8n=S:nW0ת(ٷgr ad6L3_k<(7okܼ\EWac]݆e_B䯾MB!B!D"EB!Ba$R !B!F"EB!Ba$R !B!F"EB!Ba$R !B!F"EB!Ba$R !B!F"EB!Ba$R !B!F"EB!Ba$R !B!Fbآ\D4B7V~P(ɵP!N+ҡ0pұ>0d!oHL,3ǫPYk㌝B8Q1: kGxYJ4NCEzF0pArsFxX!C!xm]_^HWB(:s[צ(755ӥ; ))(MUaТ)#,4Ԑ!BBBðrB6**ة!DsbbB-EyAUGRR!!xCݺ~oz+['ݖMp0v*BQ`(l_;&fkW(\\\xNH>oQZZZhű,Bϩx#܊hǫr+$i;fpة!DV)m5c>db 0.8.0beta2 120 0.420000 5.000000 Tutorial 2 Comix Canzone di test per Tutorial 1 false song false 0.000000 false 0.000000 false 0.000000 false 0.000000 16 0.000000 /usr/share/hydrogen/data/default_drumkit/01.wav acoustic MelottiHardBD-1.wav Bass drum 0.870000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/02.wav acoustic S80AmbientCrossSt.44k.wav *Side stick 0.800000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/03.wav acoustic SnarePremium_1.wav Snare 1 0.770000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/04.wav acoustic MelottiHardBD-1.wav *Hand clap 0.800000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/05.wav acoustic MelottiHardSD-1.wav Snare 2 0.480000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/06.wav acoustic tama16h.wav Low floor tom 0.800000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/07.wav acoustic RealClosedHH.44k.wav Hi Hat closed 0.790000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/08.wav acoustic tama15.wav Hi floor tom 0.800000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/09.wav acoustic MelottiHardBD-1.wav *Pedal Hi Hat 0.800000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/10.wav acoustic tama13h.wav Low tom 0.800000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/11.wav acoustic OpHH_1.wav Open Hi Hat 0.270000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/12.wav acoustic tama12h1.wav Low mid tom 0.800000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/13.wav acoustic tama10h1.wav Hi mid tom 0.800000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/14.wav acoustic Crash1Ufip.wav Crash cymbal 0.390000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/15.wav acoustic MelottiHardBD-1.wav *High tom 0.800000 false 1.000000 1.000000 0.000000 /usr/share/hydrogen/data/default_drumkit/16.wav acoustic ride.wav Ride cymbal 0.710000 false 1.000000 1.000000 0.000000 Intro seq 1 0 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav 32 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav 40 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav seq 2 seq 3 16 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav 48 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav seq 4 seq 5 seq 6 seq 7 0 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 16 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 32 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 48 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav seq 8 seq 9 seq 10 seq 11 seq 12 seq 13 seq 14 seq 15 seq 16 Intro 2 seq 1 0 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav 16 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav 32 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav 48 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav seq 2 8 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/02.wav 28 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/02.wav 56 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/02.wav seq 3 seq 4 seq 5 seq 6 seq 7 0 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 16 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 32 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 48 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav seq 8 seq 9 seq 10 seq 11 8 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/11.wav 24 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/11.wav 40 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/11.wav 56 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/11.wav seq 12 seq 13 seq 14 seq 15 seq 16 Rit seq 1 0 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav 16 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav 32 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav 48 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav 56 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/01.wav seq 2 8 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/02.wav 28 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/02.wav 52 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/02.wav seq 3 16 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav 48 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav 56 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav 60 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav seq 4 seq 5 60 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/05.wav seq 6 seq 7 0 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 4 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 16 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 20 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 32 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 36 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 48 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 52 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav seq 8 seq 9 seq 10 seq 11 8 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/11.wav 24 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/11.wav 40 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/11.wav 56 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/11.wav seq 12 seq 13 seq 14 seq 15 seq 16 Coda seq 1 seq 2 seq 3 0 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav 8 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav 12 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav 16 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav 24 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav 40 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav 48 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/03.wav seq 4 seq 5 40 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/05.wav 48 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/05.wav seq 6 40 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/06.wav 48 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/06.wav seq 7 0 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 4 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 16 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 20 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 32 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 36 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 40 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav 48 1.000000 1.000000 1.000000 /usr/share/hydrogen/data/default_drumkit/07.wav seq 8 seq 9 seq 10 seq 11 seq 12 seq 13 seq 14 seq 15 seq 16 Intro Intro Intro Intro Intro 2 Intro 2 Intro 2 Intro 2 Rit Rit Rit Coda hydrogen-0.9.6-beta3/data/doc/img/TutorialEnd.png000066400000000000000000003034131211146647700215500ustar00rootroot00000000000000PNG  IHDRibKGD IDATxyx׹?wF-ɋ}7x7`f1`0K KB I&i~Mno>MڛnM4K6MtaMBvƀM"YBH,~a4:3gf""ܵOL^'?we͚J.+b&ws,MALbe6֊(5cƥf-j` 3~~A l 7ܽ]y] BiȨZKb`Л_:"˕1w#ەwFMUHrD0 2 ð 02 ̐r3/Zh6''' 0HsvuNWU \n~`y:}|dI<[h0o~O0Hsvu-ueuq![V9fgԔgDz:ڍ4woW6nA9wfrGO_N &hkt܉^E*mւ4Є綹].5/q?~oȠw2=kJy/q켻3k^;%~Ⲻ.Y)Oܿ$:\ӫ丈vųǧfdOּoًpLb=GGDѡ0~A/KC[CIJsf%G(}²²fd1{ϼ+zu²-0*ŷVKuk)cB[npV&[KE=߈R讜)#2g8sDE |&q Ӳ'v\sL6/q'~D-; C=] }0Z0|gWv5KfHeYVZt:wf ?[ݩsRkg{{1”is|Rb9CܝrxadxwYn5I5Ƣ9i/J5-g;mZ>mݹ9QYm\qUS~-7,XT]VD3QsوOܛ3@.M ~McD-/جV LNKm%r#MJ WIN]l;ry"ID-L>%a˝R"zbxdfܴ(UbԬfp88:ᑋ]NDaņ^} Sǔt:&SKgL '~u^g0YpZKNUtU/Y>;n;۪R/l^($ކyDNVd'QIu__? WD4Ft\4%FMD_3H,bSBᶬma8gK~X]FD U” әKDsǝ:b{c_ttt`JLnDH)q4ߛTxxT\]YljcJi:֘p8W93)"kj'k$bQjs CRsRFsɥ ( CdJHrÒt*@'QV0ԦQd\9p Pg‚DH5u*ZO&Um:h8f- [DnDG&j"s;:/^ e=o#s \0n0K|l _q_s]eK}U+ri=K f̖ېHhv*YspLFmh)"RifL2;%h QΘt9xA3`Z3#_{ -WL͈)8wY'X)aB9287#ZlߡG)q!R1u ?( zyp/rԵY9a6dS^ݐdINC{:O8{>T}۬䈍K3_^d?6++uYh⟼ڮT"gT2\52 3Ft\ZndTjnҾuG7mYac7׿DuPDLb*JyFx?uӶةmŇ>>+;%>fN g*eʝ=f}Y#lipT=/=zpv2 q-:ǣ@0IbF;0DDr)0rk9J?ehqV#Oj0Yga0Y݅WFRbIDDd؜q<ᑪ3I…Ȍ&5lhpNix"HxOܮ= Wc!wZ4ӧŅ&Eerle=9z51!d=]yѾOPODy֍o&" _MJ,mWVG=qEDHྡྷ1=g񮿽<-'":dz Xps ]ңgL JDfrÐj*4G(%n|CDW"՞#tj}/:iSxi™)~}Th#JtF݌lUQRX[Q RqS]B"\fK\Qsg)H!#s62ar?!"UYqၮGj{&kƔ+׶j;nOU bB[Ur]9&cNZk+M[X<9F:iT/KMKiMD֙I1V7%*8&4PXlAfJ973Fo<0J>s}5 R5J 3RzY/wnRWXYӐ÷Ft\fEK{&kBdU6v6"nzX!6\ }#.򟚖un\9W[mS)ڼrWcE"+r!4^-j4˪qTKܞOr(!)#!)s c,x8:5tM#uZ4-1U|_LK [o0?SY#-LNl'"qϩ̀afRHa .7g]@I=0ӧψ7\ZzW\:7=ASays&lnzpΞrRP/-Ȝ(a4#.lqzlLA!^1O+hihq+РIF+#^*sh0%`@I &QR;(..&ŋۿ%X~.K111fYveyyK2 .ϟ?ҥϟǏ|tǎq]>s%K*ʄq^|ŵk~O=wr:C-X //ޗx'OQ{{:DDEEEK.uJ._jժŋG?466s= .{h…DSO=Dt̙~؛ygYf 涵G?<[l9qΝ; /K5kVccd:tвe˖/_.EEE˗/wMsȑ;vKD__ַ;'$~cm޼>}G! !ؿ=1 ea,˳>OG?8vի6AAAkxGyDVUUyYH$3gNiiC/_`0zzzN>KDDTXXx'֯_OD6l8~8Zȑ#.]DGUS?яGǫ ݫT*HՎ~'ODtҏ?8444005D"!"a #"͛3充}f966vT+sΊ ||Ѹ=4/// ̝;.@Ddɒ۷gffb"Zl{キl2o.]?$O?TpݻwݻsssEw}7//oɒ%oV\9㏃DDo֡CrssT(_dICC\k|A^^˟^oyyy?_uaUSRR-Z vz?aww7~1ӘܵO/” I싂S{o;^18/;n}p˰|uF&ٳg_4v&]pm] ioT>N7 bQf8f2H$"+gŁĔԹwhƒCnRQ2 V͋Ξ=w…=ێKMDZݠEiq>WKބm3@PPοljcB33ۺ*ekyE$X?on8n%^&~ݭ78;UmZZ+{&Z=4aXm=]mg&ySA K)Սu'k媛TԨLUZ-b$~`Cw}LҤ*}.7xo_f@@_w_dX [F,+80,L}5*`nYNb"[;]ReV)fDޥ 1uyS x:+0];}ˌ=<Qtzk2_?G[#bDz>oe[M<wE=P4sQׯQR:H/Y 2K}lナkv#/%hµe"5 >{͌*8joo3gNkk0e˖6X.X@nڴ=22rǎjF$gWTM<5ff,l|u8,uɦަf9mV+o۬6hZy۠b9ʐ ^+-63{m6hqܐf ,63,6ەyahp6bZ9[9[yC oVudy,DZ2 \g ~-c&OK{fVKD>8C!e:`=<4y{؛oo$hڼwƚiue]cX>"J"D'7o*;vlŊmmm_||q"O~jժ .\^ٮX`_˂`)/ `)]7 `%,QII$,UIIdUFČL!RIB32X-frʐ%*1+D_RIU"O2L%d2H$]JUա_ŊebDr5#*F,)%RRňRE)T1)" PDJjJ)PM)&RT]R-XMR)I7oJj0UI؆Õ8ı` {̫wsrxY-Vcy"  퓋8噜蛴 volC=GD3fhii!={?~6mڴhѢs[NggmL&b5qZfZiN8l2q|uPse|i~LfvVk2Pq[ i5ZVk^:>?N<\j56՚0ԏ1t/XD^n&䮬/mb[pm,xIAXO>u넑_W> GEEQddd{{p=rx-o%Cdi1DVL°cAvrD4caGD+COQ}|5qxǢF|l,Dܤ޼wV!=X5S [ P}`ˆ^~{0 m peUmCY4 4u]| imР_РΧvV%ǎ*x=z@7&&3::Z7x %''?c?OI|8 @r=|vرf͚2z&A8wM?ϲ_|o}Kd~roꫯL&dT:gΜo߁M~?Ϟ}٬{ҥK/VS٧ y> xFFW0#6dωg+8_EYĶ`CHjD4E5٫*/^,|ܶm/~7{;w.㛀W9x|Olݺ4**J]?… 7o\UU9 xe?{իWIҒ۷ߘ={6@Y^^޹s222BT{N(IP˃Ry8ֱLW^ƻk=s6ݳ~WϚ[Ԩ]*dWDbSD<ͪkf|Vc6ÇGWx06%B Mmo7dY… ݖ~_dO?t7nP/Yd3fعsgGG=ézJJJrss^{w/^DL@G.0u^t[Ԉmoz߮|]R:M]MM79~5qϟ?"ˉ_MJJ"`???"2nCVظq]zzz}Y!h n8p@V;=B˲OIdTsI`#RrʰĊYx285*`n7 SVU;MǦM6o<88_:~[___TT<:t|D{t:۽{nڴ;ͯzjjt];o2!LIDv'KO2)&:xJ|e54u渄&5*`yss-Z4[ͷ~x#$6G&yv{5v1x;/QKKһ7J={pk0]gI 3Oo@y#gfeUн--MBV>W^.3bΜ#5T_X/Il6bbYb<'*ID(4bJފrf bD7Q=|޿ xfVVvcWThޠEgq$ @]]dk;@ 1;~0@n@ p\PJ555%%%09̛7/%%UZ?<Lo* KhFlrssO)J/lݺ駟޼y3'?ٺu۹>}:&&7^Ǐ[ Fly^фjHBDfĹ 2e5qe$D)S7 &Fl9{9V[]]} .͛;VTT裏k_W111? Ι3gӟ>'oڴɓ-uLm۶Kvӟ5D*$$dMdBCCo$DcUvՃ,./,V㷅gΜLOO'N>}?DT\\i&{Q[[\.'̿/DTRR.@iii:uw"%`TQ5gq,G3b )g=AS럈4}ƶ)>]yMqvڵCCCgϞݶm/h"PqqeG]< {y01gq{TkoӇz.m؄ &udtK.6m1**srrhΜ9Õ\UU5w\"ʒH$,ŋBn,FZH n?z(е|"$t%Kf2+5e3K"d&~7nh4ͻKD۶m7rJ׿ul߾ZbEKKǽ9?a۶mO>e穨~;lٲeĹnwx'.ۮ0C78ޓ3r2ڻ{-6u)_K쉛\ꫯ:M8>ww}wԩ7;|so MNop pǯSqӿi)qDtPU`Thg//:\5^O"X,<LV@0<_u'8W8'OYT"vKxΜ9s|KbbÇ,X!͉'ӷ* ksaEoMKI%X6W^y^8q W^5k|<,<l*p&Tz_  @DZ%n\@&~"05uH$m6?DZ6aD"Y9D, P&Ϳ{p@V85gkƄd ZMwtLHzff2C@{[W]U^7l(jE&Z0% mzJMM K)Սu'k*5hBB/wt61nRy7 d8anVf9e9_ZJgPqrr˞HrE<8Utqa_x3rkmQnwQ}àTjBRiTƷ=Ё1Z*@p"q(J'^I<ʢ<%eQ*(9-sEuuv4]nTӲf,;0tuμQUɲ+}>㻪HnkJkO;DDk.+Xk]Hۼwm 8^a0Z8&ҒbFDfJ|.)p/J8+낂E"˲i陣Z򔮋Sr"1<+'=JlӢ;_zPyRWڥ؛C90>D.oذ-ytttnn.0uvvV?۶m 󅅅>"/jf;|p___rږd˖-S(aZ|wG&=U22RR#"#%bX,R,4,|ԤtĞrcgˢF #~CD5Ξ)/;X_7׏糄"}+?nA9s.1w\,]رcqQQѲe|h###W^-˅sill裏}ngϞmX>裒yMw9s洶~>#k lc"'LD 0 D)S""yo.EP8"32GDfbN70Knz8Ǐ>11QՎv}' 8cYևlll#^Bs˟PVVFDͅ|]k;..y-hw䛽FD5U:.<"",h4MMMff͚s~|ЛrmB188+; pg[[{{{E"QLl|\\X,kinrsQr*xLɊ BH02@ID6ׅg4̡X-pf;D<j_zPFCQ˜1 s;üyJKK}&Yf?~Ν1cf͚T{GU5ͻv:}%K|w_ّwd[`"3퉊1MrB8u?:ͬ]7vWEy`lKeZzyomi&Q3ʓSf 8 7JǀDߒ*_Ƈ?""b޽6";;ۧLϏ}VrJD+V6 'vdV===bN/Wߏ+bةS8CC6k ڣ.jۢR3t榆Ze Errjpj+8&lzMiK^ {*j$%%577׿Uy'wsGӧGDDٳb777'$$h4؉rPMm777O:'vd;`‘(OTb>\ =/Z4tYq]0(aٙrDK8e2F C,X,6YE"FL[1wVl@E(@p{,~rE/}.hhQEE IhB g)R0.Q 2't߾}6>jժUs&lTL`⼼ Q7/\{Õ8b^vjjjBzGzݓO^j}}CG6j4F)"bv'~xZMԩn#yjSSS'Bz3⋚Grɒ% %7/F"ߠڵ~~g|<tp֦#Ȁ"bfh 6,XKD3fDB!5fgGIf??vƌ؀]6nvROx" @vL[yyWNnjWP| B!HNV'&kF"R"#Nn-*j SQ}}oeexx"//)>>8;;^b;vi`DDqqAgv fώt=5G\"SVNY8A7 mq5V+&'"AK_ߐxll 57 )SŖw /54d2>Big:u9}\:ʞPa+|u]S6۵6W&@eSy mmٳ#[zz ;뻋^_k4Z݃2":Nh>=|ŊBl w&߸?um+DCCV#G.u讨v~Tc",ywlv>4,3/_j]TGzGzH/㨩 ~Oq&C0q- $L=0A R0G6kV\\\RR۠?EyT*ȓO>hq㊊ݦ\f͞={GL.+ ;;;{ʈWrJ/y3ܠ7xYY_k.a$66vş|dQQQN#c6gΜƋ/FEE=&o4QprssO<`& J$TZQQQVVh""z<},Y"/..nii!'|^RٳGpBLLL&+--t}FD۫P(o[M$M6ϟ?ԤT*7lPVVv񌌌ݻw0rzRnݺ>bQCCáC2z]T*ڵk{Yf5662acWĵ~z"8bbbfΜ,_3g_pppq) BCO&0k֬> { uح\h4677744Ų짟~*3Ltiq]ϟ??**?g]$"a"2,.1V$&&n-he;w 0 <;gdd\p!((hݺu;vZ^?}􈈈={L|~2_tqbm?SQRncժU۷W7;=s̙u֙LvRZ[[z]v #_paJJ ˲GODYYYǭ]VXPPۋv"c\pWyOgXxVSuyu- qm?GnLƳގeLJV"RI W2+^全!3{X09lyabu][CׯS„PeP+snL0ڦM-8}dIP ?yIh,q [0dy^|qy}Vj<0g9OW#y!KUsOuFoh'G?.޴"k8aչQ5uwr̻P7Wg/5]a~z+ʙj4[U^MoN @xx8uuu vuu٧ g^^ƱmztC=93=!'sJOwNMmSg9h'dI秅~)>:ƱƉWgtۧz+ǾNs|mqsඬhֿ&O w>oxnpwQ_`vr{ūVRT6ѣmmmcGe+97~8>oGD.]UFZp6-1UL|;+ ;v#˗/߾}d111N#c ZnݺFOj֋Ĺ9iD|r|˲3ILL<| <9qDbb"5{>6mpRT*^p4??6n(\ظq={VXT*y?~Ё瞫 O|ɳgdӧOWVVgTRR"b1˲c'3 ۿ,٧u%ʤYi ,?饉'N$l-h5H4sf">}zIIIccc@@׿#G̘1> "ad͚5=п/BDuuu{t;v yFD{)S+{+H >u%;81\nfG0q=#B{DtȑlZ-_9sZ.tuu] 46Vd%۷/33sc-bnF.==m.a>#ᬿds0ݭfŋyyyLX~n6ǟ**n< 3fJzGPVzzzff&M2Eηp 6 *ʁ͛7ܹSٳgO~~~zz:0.xԩSw}ifubiiiiP?3Jn\.Q0.oNm.JNg<7*O_SyQD޽ŜLWUJR+JhS. -R/(VZ,-]*J%QZJ;] :]fΎ1A39s|{3|y5SQUټZP-VQAAzWSC?//y񉖮Jnwk$`PY"Ν;c}}7GSS/_v25S u&2߿[VZ>lxv$v['QI-M.?H[*GWDkj->#4)uo"Ox``QAg13목No@^v}0#F:{ :INH#@ z qz-V\X۩)5Dץ\;-ѡv'Ϟg?mmMkUH˶NҶQle&[࿻z箝$sl6O JOS I-/M|>\?T9 6N[5kmwQ'jjḼGRPTgW>V]5|q&iSUU?нGXuklտw9K^N\Ax"rw=~7|>' A%D&6kd%4[[f"+x.lgN[%ͨg|JSϋ8/*wIuυw4y3uyw[ٳg۷SSx|ԪU?~=n=[j vp᫗ۿ﬙3sry!ev/ˊ7oE]O?|JZI鵦vAG}M̔ievYw1ݘ.9ϨYCVaB8 ((tyo :7| !5U\I_̳6jl^HysӺ[;ic;OEG+(([^aav ٕ53]I+UWw(|ޮ<[37W3_تw(>vv7=d&͠JϞ ;7o/ f;za{{Ic{yi16Ht[fY,Je6N3---"յWTTTRRsNZZ1nnnQQQC QSS׮]{)yyyeddhkkGDDL6-55PYY9%%uu˗ȀY;X*&|@Y˄#j;7/~[ zh%VW2d#:f#ѝ$ÆVeJgC~uvm[9'~˂c{ҫYayY8K@dSm/ ~;pH;m#}wp8z#"ss[n9s_~DODaaa„ÇO<5x`EE7{23O_P[[[ÒH ì:o/+;N WQY%/1|Z5sϫ~֭m޺ĸ{[Mg7s;UB5WcMzZ+g;{_Mg3CV"at~/=zد+6/= ~2.em;lҭ 1aD` MUacLS"z;#}9OH4fY :F4yT.^ݦ.xpz_Abܦ-';~bD`gq2KͿ];|, ?s }-Tl'AH ;+(66 ^N:ihhXYY39PTT`7;E_kkk`dC=f>0iͬ ,"f76eR۬JD奪'Lzo6? ,9W[OM%0AG7rh)C|{A?~2_[ ddt5Eja<>Kt P]^w nueR{wgeetIMISRRVPl`NJ f.olCT[bDԩs 3%1ލO?jUo,zvQ"bƆ]L yJl$X,on߸rE%}în_,$"}î_y|/%;.Uq+ vFo':]+,(+vvʕd2;3"O{ux~: 4\wC***3gy.3|; -9B#G45mxfkjj@UUU5أG o~>4RqNO@ {+翻ujRl?7Qf7>ׯ5hO.] g.Zg;մW_7~CD]z}J_wn\16N j t?'$0}z>t WG37ۧi~8#I9u|G0uLH'u*͞1jUu}m|^^nMsTsG<VO}nXuM_~ɸ0:62s;O[ B,6.*mW,_aԶn!ɝNb4vت|uu܉'2ۛ츸AbcCLZCKw7%̱ ֛pSV8.Jg,<u*Oٚ.Nx(Y^Cc?l5~O&؊+.+*.*w'{;W) :귫(sp:s05rNr+~ֹPyL㈱oY̪iׯu; Lx:xp`*mᰜ԰TЮnf} (#>%i|ɸ0=v.\9uG.?V"SS'äIR,1_mMDQ4maŋ/$]oe1^@@b#7kU~>BQU{gJiiG,R&O))i(++w\{yzȺO^TD>`߯W :h}~WB"RoW͋÷-/??;,ZβF`[w5Xxxj :INDm6Y]M8b[0 Lw,AFIEDvxzv-1AW_eK? ;_ו㵶d"b::tXgm,ZΦZCfsIIv ?c[?x=hD_CII*)U(M~z5h bE7=xվ%7v0Mlvu5YI?T9 Nui~_u\ឭ߂lƦ&Sc\1[8?z(LvbJK+BUwbn%7&3?T9 -:INoiƪO' wK$^M'~SlCmMԤM\?QFEY)[w1'Q?-,YXml' {N3 #nէO3IM V8*3K@YY#lVM O  Q8z >_ʊ bqPr۽Cml'ÇrvvF#ȧ?“z ˛USըS`;%+[llz; 8mU~OQQs> Ϗ{y9ݙ gϞDM5;cff>EEE^SPPP $އ}|Vdwd -򴵵HOOoСJJJJJJ)))C%"OOOf~3""b >>9ѣG!!!^^^7n066VVV~ݻwE088UNNYZZ&''geeo/HIItR޽;FDLݻ?n߾ĉ9RSSCDΝc,-- ՝0aBmv| ^x ȒA#Y AF'O&"WXXxy"t钱Bbddѿ"RQQa& y}/_TVV[nݿ嚚:;;7vC#ԩAvs\\\*++|:q_EEY.zkG f?~2#FR-8111##3x%LݛMDANIDQ rthsݻw3G$ ۻw'O -[ndt 11Ã>}477W]]$;;{ԩGeC577gX.\`Z^xq̘1DTVVO ȉ'O)$߅ >S[[̓'O~7oW IDAThIv )S>|xhwypIݵkW))))))u>}NԩSMXѣG&!!c޽h 駟v҅:vXRRpC a8e@ w]}}}F)S0Gցٳ ]tO?EH8~f$˽~0rҥǏ)¤I\\\ܹsI2CMm̬MٳYYYfRUUEkHO驨722 "n޼ˤcooommf tի9993gά'pd[r% @ž`r ߘ| Eb 6III***'NDo`g0$Xz5A-] EԾ+ 266n`@^^^/^`|>?!!wp.^X\\OL4Yom~2 ##4Mxy߾}kjjN8alllkkO ȞN:0hϞ=""]]]{{{EEE%%;w9883?5d555@pڵOWFFvDDĴiRSS SRR_TTKD VVVZZZ KN444HEEEKK 0syqqqhPcc!C~v&$T 4rʜLSS_fÙ***UUUr>/äBTVV2>|8Q R :vHD,Nj&-,,HSSÃᴼ.]9$n"|7m[x!^xAK5']>))iرUUUyyyꥥ'N eϟ755e㯭my׮]stt𨩩t>.R$0p/ *RIPaZZZZZZgϞlDTUUu9|Yaaah(1G_ #)rQWO]QQQbۡ%{x!^x5ب#t5z-G3&5s̤$fhr''dc Bufڵk966nt__#G.cQΒOo,tɀ6]>+&vڪ*f/6nXTTfΝ;`J{_EEEYYل <==Xׯ_?^_%-A|7s^Xlb^/ B/ī/wHΝnzO0'h\ѧv9~#GFFF?vXXXs!=})SXPP_zzzΝ;wܹ\.wѢEsutt}@H& o 9>|Xuu-[\\\&M$͛7W\IDÇ߼y3%''3 dee7X… =)z5kѱC'C[1nwn㈈~~~~Gٳ0sll,ʕ+/_ldd4c a={ٳg7PZ(ee`/ B/h 9ǧH Ϗ{y9CCCELUUuLZYY]v{ILN4_~ٲepMttK\\:<<| . RUUeѣС%%%06wׯٳN>68=K6"A}H`&all`6CC:wVYYTbƏolpuu=qDllE]6$$D6l8w@ X|OD}yh֬Y ,h߾uAAݻϟl\rrr߯(>}/D<6nWn[ӥ:ikku-^vƋ>5ޮ].TPP3gΞ={2t޽{<IDDD >\]]] 3y葮nHH׍7_~¢gϞaaaR5LJO466n}ZĤ.+7m dAqqVK"JIIILL\b6 sÿb[p---BBB>3"t;vLptt{n``3gr\.9sAտW Ჳ[/..ϣsɓ'+,,d.x%cccHCCDÜE_@*hTD.\uuS=zIDDD :ܜb]phjj$]pi(qӓB/ BյUc $WQJJJJJJO8uT5ڷoRgyhfEC$4 %فs0W\\9SMs}o}E0?|@8̚[ʕ߷aÇ8}6<bԴ%KVWX!F& B/ "ׯM_;]"RWo뻡<77g奥kZI_ԩ֮ޭ[+/[[ٶmZ{ڵM ׬9Ybg7q0  PÇ{ v֝-77}~IIݺu8G&=p+79u۶۴iոqÇ*(x5رTTTQvv6$ r;D7o&oڴ]l r"z8#F۲_lu}).Q& B/ "Hdq{ZݻmmݟyxƵ˗/ Q֏ݿv-VWWŨ;qp8L?];5f|\׋/4OHH(,,l0kDDhuΎb15>_~[5HhmV:+?M[-)yں_tYVV6Dpzs-[uشiS[go?$""lDԯmHHi2",,ZUaYts?X6:wx'O&$$ 6 (6xӄ }|fN:n >jҤ/-[vl4˖dr:88VVVtjbcc ##OM:.:ҥ?L2fd^Hz!^x!^T3fFWW^QQQIIΝ;iiiDEEE 2DMMM \vӧD啑1mڴTCCCee唔ԯCƌ3a̘ K ;X'Fo _pNO>ߵ`$@l0 ӫW<"277uVvvGZZZ||EXX1#G>|0##C]]}ر'N!̘̲Pmm1cƈbcc]\\գp8@D󋊊bcc(!!JKKKAuԩhii1EEE"*..VVV}[n߾miiٻwof ?p Z/ B/ċ0 c:KFYYYijjlvxx8_EEY.o&-꼶cǎΝxwܱAw@aY}\arrrVVVǎ D~~ijjzxx0WolN:Wpht ))iرUUUyyyꥥ'N eϟ755eqqq-/?66vȐ!AG -P \]]1 # ,<{lDddd5&W^:u _$iFhVXXX zj񼙨(gggmOdo/ B/"200 @piKx񢷷˗?lNNN >llT.".".1x!^E8-mU?i&mm/^,_\YYa% 1~m͛MD_ oݺb CC/^lܸfϝ;wLɓ''%%Θ1cш2 tO0ȧǏ ~>>ҥ˂ "##wڵ~;v8:::tHEE>gdd,Zۻ[.pқtx!^Eh 8\l&NωiΝD"*))277'""֭[yyyBO-3:pn[gϞ~~~ڵc۷i$fdgSTT$^Z\\*xg:::#Fp8111UUURJ39CV/ٳvZmmW^޽{֬Yg/]4| .ߟ'Op  UUU9 z!]x!^xfdi@D¸:995аN❍1͛>8p n, r-[FD _|񅝝˗/ijj~Dx 6;wN ,_\>{325c墧7tP%%%%%ԔC'3?1|puuu@@#]]ݐ//7n+++_~ݻŠ222ɓ'666H<[MMM:lݺN .>ll94Knprrr2999((($$>#K.ѱcDŽ GGǻw9sIQQ)'===00Qiiipp3gS<^zչsg"222b+b+**Jluz!^x!^;4LkeexBCtadd4xI}}A o ׿ܴ>}?>>_3lU ]MM} hsdj 3&ZJJJwIKKspp "777f~-**jȐ!jjjڵkO>%"// mm툈iӦ*++TSS+//' H 󋊊bcc(!!JKKKAuԩhii1EEE"*..VVVn=ab; Q0,i:944444ԩS\.F٭[ׯ_4lvxx8ڠ a_4LZsߘ UUU"RUUedz!]x!^xo5cZ =ZQQajjJD,K D~~Ejjرckkk߹Ɯ۷ow=''D>3rrTcVUU竫N8144I?ԔfŽOnffVYYyE|$V`^478[Rluz!^x!^DsZ17PaZZZZZZgϞl r CC100xI @0NNNkNNNMƖ@[U0 l{o-̚5k˖-P|}}VWTTj`?i_/ B/ċ0} d.ݻ7sO/^lܸfϝ;wk׮211a2?~ϯl„ .UZ7[ngWzI~CBBlllhǎ...>>>ڹsGyy":})SXPP_61nrp' g[LG\II##GQIIIVV͛7W\IDÇ߼y3-\0))ѣUUUM/Lrɷzj,dr/ B/z9 +33WRRҾ}{<%<(pʕZZZy DGG1yutt?p8h:>3rU@-^3g]|EΟ?啜5kւ feeY[[Oҵ^LE IDATx!^*@-C@^_ءC:g-m߾I/]<==[:K[mhf@v`xwtx!^E f09f$`Maaah4!WWWGSC#4+0po d-rsRjjjݻmaaID%ߩ__vv6a9W//--m^cժM¤I_\ko?^rK~y x"9'M^Hz!^x!^ lʰcӦ\lek_knPKKK>mWbsC@$& ;Xym ;tw̒~- hfQtx!^E fC@vJMmaf>}ll1xWB/ BVj9D$  "1{h(O,[y<ۏx|>T>Mnnnhf@=FhNF( x!^xo_`׌3NNN_ryyyr,>ll9 W^=rڵk˗,Yₖ dP``y󴵵HMMmg6lP^^bŊ;FFF?~f+))}7fff/^ظqcQQ͞;w׮][UUebb"v,dr/ B/_fff‡]t}vǎ...Fܾ} v޸q̌XXXsС;w?~ȑϟ_wwllDaMrrr B)bx6--m͚5Ϗ,XgÃ9BD%%%YYY7o\r% >|rI'  %p0 33޼ys./l6-[lÆ ]v=sҥK=ڳgO᠂y 4Hl\B/  >I&믯^"_@l޽ccc(66Ҳӓf?~ѢEDdmmND3fr666D'Km%ܿ%<{/@/ dyaoo_RRd"vuu7|~Ǐ3+++ϙ3WVVfX}-^xÆ Ν˗/WUU]hڵkCBBz){y½\CB/%,1_mMDdjj*/^xJ"/Tj!շo>Bl%0v.QsΩ|'#/++M0Dm6YmG_-@kx [E@w+**Jl ۽oĹ^x!^{0f['kkku$`xMOܪw> xŊ,̕ЙqPMSC#4+0p/ d́~h 9 ӧ3Gz&,U@aŸ2w˕%KVWXN[#x!^xAK5z5Vڤ߉,&MʕX{!DtQΙUL:nݺu_re+o߾um$t1kӦUyqO}:y2hԨqIIDу78G9|tȯ77mEDή[,\niiׁzf֖3h#31I˗/^~/RD[.7/V…?z!^x!^IN:8 l{!UXZZ?ztڵ[]]jjj:v4@SGC@~Y[>KDgl>`9W>Ǐﳃe(@;1BGlʰcӦ\le^;};o XYYѵW/\B B/ zOdj*Ygt A^аehFrF7z8"RWo- yXM G0Fҵ^x!^`oy '9 c)0p/ rNSxIm"+ld@D7774Bšn(__իWDEE9;;///[/ B/ċ}x9>܂It3a:slz]Ra˒ _AD9O;uf ȋݻw{''ݻ@ x߿ _#i&]D$]D$]b^/ B/īLYjoaanzС9sEE!#G Wqq1%"3{/^0˝&OTZZ:cƌѣG?~ϯl„ LaÆeff{-**bs0`@c5W^Q^^ކ WXѱcϟoڴJJJK,111a^rΝoܸ!xO!@<93|hff&|O>ٿڵkCDO2eJ@@ t8p`[lagΜ9|;voFھ};) ૯?oܸqڵ[]QQQb+ @& B/ CS:}A[u62Eab'NVPPشi)"֭[yy9-\f=zUUUlD|aoo+VdeeթݦQFiiiÆ #"''[nѭ[FAD?e˖ 0K.r9>,???PSS\_ZZZN~\AIIIfrpp}6xo&hmmND3f̨CUUuҤI ;66bcc---EܸqcƍKllln%p Z/ B/ī  rAUUuÆ ={8~GsΚ5k۷.((000>x 6;wN ,_\UUr\]]O87߬_jjj˗/r1EEe˖nϞ=6aD *@255ݺukWgҞ֡̕C˩_sNl;vh۶mC>\A8^Hz!^x!^u @*@U0U/k/ B/h  ),, ߿ƍRS[٪O--wctĤU-LD-lccMDmT(neyN:nV`^4Ș7`ShQ]8!-S\\Ҫ&Vef:siKOD-,Ͷd-+,쐛ۗo…?z!^x!^@v$=JMfsjkϯ' ͶX۵BN'"ooJn_.~SW]#huHL*++1¶ j8ifsHHgXD$AKIE-6-, |~yZ_2]l٫[VV`, qmm!|ynƝWVVc 矡´-Y>[z*!CĴ[Ǭ]ueXMTXnDuZFBo& "'p!|].pD{é_y{n ޸q_66[!">`bovHluB/ B%$t@Ռ&]3g(\rAWW/2x ӟ}hӳvjD̝{fv66ϟwdT?ҥ?.=v찅egvzg&T1iV{?45~i#bòկtNDbxݺuwƋ>V9Uw뜞CDGV8k3r F "XAo2H 3g 2o߾}tY~[;;g?@87wJn-x¿o?ī 3AD)))+Vfy߂$`&.Ey]EzGa"#SAeFǑ8:n|uPcPDY@%l:|}o~׹uN}<9]9u\G.fwI7$yUȢc   ===R}cڍ?sO=ן\ |;>/>裛//_~WU  rrtyM u?w_͟EXv39|{Yk ܹs۾ϙ3glIz1څB{^h/d_8p7[p`'sc0J=KgN=YkDkvβc*u[v)u=wq6l;n͚5gqFs_.[裏׿~?8{Rdc53w}3f׾VBAA0'/^JQJYYSߴt9Ӻ ٱ7??\C=.|#?Ϭʕ+&9N;mٲew(zwwYT*}򓟼˓$|n@`k$xVɖӑB{^h/2acfGvWϜO]p)]e{tQΖT] W I)l{g>nmݺupuYfO|98s$$7t(AO^ 9wO*6l<%Cڣk7w}q ^zJREg&Xk !EQ3h4lZkAA 1o|Nٸ3:gzm='jy˗W*+rR?[SO=n{ꩧN=ӦM/u]}յZM)uG^r%S]˖-[# rҶY?c9%Dq#Z{.7wW0V 90)Q[CCCe˖{k֬jg3\uUA|;^ׯ_/k)]tqb5~뮻{!APT>׿F3!;O!Vv*ׯ|vgz);/NRiz&'_|>ޣ:O\dخ)S\>e]vg|wޒ%K4Xt_~嗟uYv?}w]w5~.袋..袋N;W²e!LZn ?uX?=S~b).s!3s?2P󪫮n ,pm534\s5Ƙ{ w2/ٹ B>ϯ͍E3#bastA/LYrʮJZfɢE~_{7nKoF󚻮ꪃ>Rۻ|w5\C)nizcv  /A:/[ߺkcӦM|{>rŋ/Zh``olG?/˿o'zp|B\|{i0Ể" PSjFlxյ:^AA36`w s$Jpka(SqC>sDZݵ Bp/ @M݌tD*xRrBШ'e i:BƤaQPRuG2V%@)>8J@zDF}a IDAT$`umqM7p_ tw<_x}p3;Y W*浏y~tƌ9F@$ID:ƉR7@2<؟j-0# ʠFT b,wdGya?sp[6<ʐnغF0 ixֹ"ٮzX2yEC{oVx׻.;Kr{?Q_ E9iM]W]K/څB{^h/z /|F 0 c Jf5LfmrF+H)3Z/o)!@[ &UAk % 8ek U7WJS 9 Q&g c#?~]GW#UiAم~. #eZ_s’^}BUM4~X֨a&d\$a]Y`咂&$R&p$I,ᔂa.㇩a(*ajxGq}p'&{ajƂQeFMH \V*"M tTIX*e^̅d'I^ IjG /"Y+RVU*=c>r>\s~_%$1sƈ-Wz1Cu%^5bSK۫a\6/"O|cO:裏;eKeW>{o>w^}}͗ov퓟kf͚3nj B{^ݰ Io6]a/G݇9;l^:aӵzpҥ TpN 0ZLVgң[DQsp ZQЈB4(|3Ʋ.V \Z;/"y[jٲݷ駟}zl@6%jf| `N#\jK\A(cqt&(n5K5d\;V n< ~=߸ќ쿯oƷÝ3-\.AAdB!8zlFmpݽ!$YcI$8%IBwjj<+D F)iLJcNF=fNsE5BJj,sOzo /hY]7Ժꪫ>בB{^h//tAmf8cS.W}L:bm5F(J\/iud[ֺF+A^&n74ZKׯVk`T" \drxb,/  d Q=$ADw$O}ϐ)RZLs-[c~wO=P& V}⩧hRzZꍀ 7QF0HTrV) /5<00`5F6h7XX^ Q? UсAٝgm/C epe3qAs{[cS2o޼7߼X[z2kΡBby0¨0M"BˆrPRc34R0R4,]orf5 S6jS:? xwk8j B{ਅ UH0Fux۸y@/F?٥1fPFϜS$X륆rj +0i탹|!U 1qAP!@b qbQQ/^ BӰKbk/BA: Ó0)%TwQq3I/MO=q֠9G.N60 ZjҐRb$hMH/p#2FAQf)nRo֛\p}--@R( :^ gd4(=%)n(Axo_xn~ŋa0!O8n_(@e&8#-F+ʸ*MPf%5"T uwTjι+y^̱@Abvh9NR&I2s-`L1#ۨ!nT/;~gyiM]~u_.؏v^^h/ ՄF3]~icL^;dPFH ALlNDC(S ^%0$j&q?ωVi\+rFXQBJ}#7FDITKo L:dP#RP\0) kՃ:3ZUBF-83:BYǾQ$c߳ekG$cRO[tdhjO?~RYS^u{74FqPa\.yK7n+̚7;5ooQ]-{/ -{vl| k/\V J /3jydÏXZoذZ=8~|.(eG$Q'dm&dBj6\i}z8qϾɏ[SNy~w4nrU+3~~߿܋msw7 _?0gzhG^:oNƶo9}??K Z?;L\|I2J(PfcPmZS.Q^?+5RMܳ۶of Z;/oT"]z g<^ 4p1~#8*r듫W i9 S+?m'gdҥwqGkdBSk]z׻V\y ծ?8vF8yA3AQ)Ϻ>7գ=9?Y0V6HXG߸ᣗ4Sf/= @65G{g7Oxǧ\C.c̽zvʹ Hac?> C 4%ڐr)Gw6;cWjed?ocf´s8v6Z3FJF@ A/vҟvNvMݰg|Gi_q╃Lvuu}kb )80hsN.ɩZGQlH%.ewDz;zIV`6j( A6~ Q _x@  ZT,L4MZ!S奴{/ Uc)尚$d`[ ڲlDz_rs0Bzt5pΩ̦q۫RJ/   @k*z<:hAs{[cSn9_[z2kΡXKKc͔$j2n1 XƘ&sh\P <]h/ .Kq껎Zk=ݥHJ=OG yR/Z֘mC>sOM5+Wr^G=9z R(NN.vjpkpo^; KkWY@A:ŋw˾ ̓:k45r.+ãPq3I/MO=q֠9G.N60f$VJGzA0F-+øHxxx x+>܃7C=]u-ؙB{^h/?}ȗ)pדC::L\JY\ QPYTatʱ [duJw87uI '*2‹9DBjF yN(3JIcMAٌ[ UI}`P'#mLZe5TnUCw zﯜ+b/{/_ "V:3ZS׊+>t^^h/ 0'ƨxtGhZ24M JC+BuK8[ G `UPS6kyT bsq js7?~{AAY 9YCCT%L>5")yaLkQSLX'6)$4"'SDJURƝL>Bls\4^z}GT8 SQ5L2e[RZ۫˕6~@;-{-{,-{v^h/+O(LZU): \@'Tv v%w޵<Y7wZLx\\CoSTjҕh4cAAdq gwFxpHnx7K?0LQ4Pi4rY?5`(9mAAfӒ^Čɝ>^}KN^K%x>|˪}>&hMbO_5(jA5Upnh'oy@^Ep֋. B{!/;Dq4; aMnGnV"ev{wUk=6\(wFe2222.mi8oEFAUdL!oJCRi3%gEض ]a@sC@cㅻgtRT;@Z8gZӄpwۨQ y@AA^I0q=Yk({\Ih@+7;L]yeR)NιjX2yWXCjA3qH5R5NML`K$ Ǝ\n`?@ۡA'X^ Q? 77˗/o[UV+ZֻB{^h/+d2~0qzdJ(׆0.H&tQHyu=*F ^ވ#)\? e$eR?2R6ީ*NGF.6CH}໒vuoOCKVkCor!ڨ Ox5x?GAM$F97#ĨQnSnRBJp'k 1&y$Iju9aSX&qbcDŁ NW Vb)}D 4I0Z!CU˷WGf4@cSz{[ r7%/nmsiY]lץ^ڑH{u5o_]Ȥ8Tz`@R]ka2fy菿:G\ٞYtpP7 JIi eDQD=ohpw\?#h\7i-TYPj08#!j/:q`ib+O:>pyKL,ׂ˓$ync0i IDAT{|Ԣ7Oi77<,yӹũ$%z"M8aʤ/º2ac$W2<QrR2B٨w?. WP.xD#X&Lza6ф1J(B6!'Yo6$J5aAQ$UjO?   7ȹLrj*erf1F'uġf=OJ)8g̘1cQɵW$XcU[JkU%?WJ0cXpfTÜ欣~|y.PU"8kFNp۫aJW? ƪUZV׊+:]˗/G{Mvuujп:DIvuÇ4# !yIGR)㰧#TRƨSNK40c\ʭQ0VB0g ^J8&dGI!4U5ґH{5 ^AAh0VRѡ8ǿYfM:X*H.|I)clٛ0nT>pgR֜S-̤\RC 1Dx4B pTL%q9Դ^CԨFAUH^ ӦtSJOz/  @' D^&L!=!O6P(d|Xz[-g,ot8W':MSAAkm,h!-TCFJpDqȪ.in&z SpUJWP(3~{;VӲUoZܮRBB_*\JfB=tkkw޳=wfT aU+L8l BZI &$8t$JEqDX4"2ChTxyDdנSq^ 4b4" LR.Sf].ݱBEQIjkkMu79Q(R*KJ[ e\)h땇\K<1ihuFJqí@ jie(>~{AAY1n޼3٤'J̳>y^O >{9$ik L A$-Zrj0!* U&_mF`un4Dp8,vOmK( ګ! ? 软 (#.܈ Al $RBH &P3Kvƍ]շZvDZ1k Mwh=LjŤG$\ZqR&r&+* ɍF8F6cNǔz/ZASh)۫/BTOzUZ644,ϗc:BrVe NJ{z{D*2Sp ܚשi^c[ZA%jk(lB4j /  d ZT,L&2К{}Rkfg/x)!Di Ukac y%\1,ڈ$a%ԃYUia^{LB|^kmfk5btjTˎgx,%]_./;T8UYfQG ܜp4L&y6zxdxe2c/@R0T)b$4je&XqP#*c(<2:i0F=?SFHFeU5P&Hy{5$(^AAC]C>62y榵nOo:tRCNKGzlt8#hJ* 9JEYO.c,MBI\׍J^-PߓA[PnU"urjpkpo4Z  2I"ZeexpGted{5 /%>FD8\A{2$LhooO)c֚˨QCqYʅ>E' j qa#˜@%QŜkpL&I<<<^ CWo;^9jWW C 8JY\ QPi>6SAmnVhƉ"T*fPT[8,LI< =>ujћۧJkIeN"ƸQb a3Tn( }Oz/  ~! sbJl!GQJj/AZ#֦ARVs~Z5˩mDj׷>`̃:G:#"Ͽge\ k2-8#^# x{5ι?   7`NPpbTJ뺎$qd(rj##릚X +tOQʥuY$1$48t֬YI)q3f,>?kJf#z qMJqX? zYJ&V:տ:]_xvҋ2iVɖ440p=,P!)$J㐉iFiT%VSaBQD(-j>9 h4*!ZZk`Jx]fP2 8(XCZUcc!UtGr4 0>B= /pF|gt,~.qsBaӦM4R!,SI !`u3P"KYV_w|>ick`2k-csf~?/84FOJ)iXʅګa{Wg%`Av!ȫ7:dPZ4bc +G!RCJDKXʓ4MC*jQ*S(2̟?mڴB}c=o@c2,ot8W画+k[KAq(mGrIi@0VZղVXёZ|9kSSۅ!RbhǸVIVITk4 TxiԐxS{J@1!`P(~|u?ݽaڝla~/BXcj aԤl5 @(JvȬCqL.6~ΪX[AIwWWR5WJ'Ӏދ  t ʸ(f3;4pʭќSJHTd02$t=u8INljRxo{癛>{G>1PӑJjD9/X34֖2N4a5p/4&a{5˹i=9pV^xq˖=sZVW+u饗vd:^_.x"@PRBb䎏{{{ʵ0N<_FrPR.ly,:I8Tke KE-Qed{5 /%>FD8\A{2S!Z8k dٌ+t۫ԍ珟0Al|p%IDq4; aMZuy$ϭ}tp#yOZ)F}~%o:8uvDxYOX`Z0*TxaEO8~j\=LfF#\Yoc(jTbOr ]=Sm #C۫!֎H1@AyečJCR1SۈT3Z0oɨ4MbJ),߼e~z{>czqp38 0b ! [,*՚Y=Cڈ3Y:4ႷXCVyL;mQ@,ދ  ȫ$yy![k({\I-m1F'uġf=OJ)8g̘1cQɵW$XcU/VI2DAܨx\#RBj %JaZk!X `G͆a(cۡsݑZ#Mq{5DQAY/^98KjWW C 82]ֆDl]9#yBV;KRaOGbUW`T(\x-p7WcRF4h=Aƪx̓ʮnSM4Pnp @?   A|0Rq=Q{`K{oXIH((EYH6[N%UE"VЉ%JEN(%L*H$*d1M31e($ b[Y f޼^cޜ_͇=u>8LfGۭx<Ƅk1Ys!gN~陯B "W+eYN*MN+eeFQJCyQJ pAiRb[ ҃w("gaY*9x<s6(嘇`cEn :} TYi^%8qA$_A\Vɋ, #V`*1&UQ:@㐩2DE8 ;pU1@϶u(ACŻ>CYuXa-_8?'=' Ƅ1Q9eVx<Zh4FNG`L$I:}iqua+'-l)U)YFQt`KC :0!^x<[ 4PVjq?|뛟/|?3#u;|exyA1UD- &t4aL#I$* 0 )r 8Bi+:[b|] =_}<o사aF+@ѭܝ?>ƛNF?8:x8?lR"[9 D NWR0ai ZUNEA;Ў.p3f7G>:xg&Oz>{ }^SAA_._|=~&;`# ۽AUY=Ư|golL}?( k1X-Lѷ<ሉY묶, e JiMir `6a^Ly , s$nw؁hkT1oa8mCbQJnruX?p eeh t[ƩԾ푣Zqv(3֌ƣiaj+/*V2ml\AI"/nʢ,0PEa¢ETnZ!\PBp l|x<d"( " 2f8}gaVoG9lOӴгe\P5kkEɂbꬡcz. $,', (Ya L#9! b:`ccakhA[?/ x<s6!kŋzɫe3sۑ*ZE^g6J VPV $Bhuu0PLsk_$ t ?wߛc-6U9}cc5uyEQkWÄw|'۫\~rCx!Bk`sxձ#l8Iq$,Axe8! bh&< g~9 m,}ů7~#TIh=q*kL@(=hJPPNY@sx<8$}¸tvXb!{F:밖/^"LVfPZ `4dQ71F u%v$:NaA` |_D(!^sgSR*,2;PẒ(h֡, d9x<s6FEj&ZLU)SUUrdZkp#)\s0q0 y֕eY|}N IDAT3Oų7 {N !csb! <w  JhR^x<;@Db1Y- Jc,(/5SŌgri, KJJ BUyN;:N:ʥ}緷7?G_7鴣: yvؾ\kv(uXZk|C!o +@s(2tUyUIbăX,CxVY~=&Z+tr}mTZk|aa@oY˪\[]" |Q<nw4ZZvQmLf\ f$+Ή` XiÐkxb%SѬJ4JZ([:o?^x<Cf*8$Oe@Q^ū8 CVUar`!4|mC5fTXò `ηSvs{[ђ qb1,n4@0P<xnC2s,vwpVMV 98BH taVIܷ+) 8yV[L/YoB-xkoʕ+vg :tt+GO'v`d>k::뗯_;qx2 (A ,Xm lDI+ֲ6.^'VU s ,\Ydq{w,eQܲxk{ ܣíšvSx<ďt;A0vʢvz%C!eQf"ae#Q\~)gdF9F`?ė?'UGh VzU)YNSB^n^z!oFqk'۩sQKC {w8LD?Iy<7<6-F+ @YA7"Bt8] Rʂ.G!L?O}ⷬ?wY)uŧϾ'G[O*_{;!0 QrQ 7ompwRڡ+J02oaqiqwz;UZk|Cf/YŒ؋)q+bNl:lT6qS'D_/YGNSd m'?J(۱Fc6"-88?=~ûuN֡p3[vcjqwx<{my~FR{<]RIӉENf\be|RZp2j~/gFCFη$LoePl.5{qKjk+x_x<dzDnߛ]ggVzoozQя~mo{ۿ{F["8pүY/LBHKFPdJeZU #1D4@kM)v{~ Od"j8m\8v om7pV{[W~'v|m>neΞ={]w;yW7Wa x<O_+@G9$̵]nL p Y. FSx2fEUrg4c DLz۩¶9't1QBfl|PNgN|x<[d2veksHDQDuuF^f~kkU,HFTIUU0q:rB%1 Ԋ|{yVt;~FsLJv(mYm1"t|] _{≟_R~o|YxԇY.^%nq0#V{ĩp(T8@:c8T[@0[QfY).9!ݾrc;,-eެCQdA?_{s^k}x<g}+Ufc~@9r䈬*L˜0bR30Ɣ`c-cD)yĩ\%KY !=zLUUNy)ۜ yʧ>M+Μ:҅rsOz=.熫ޮ>oq 0CBq^tN"N)ÔSdE @BFsl_NߍIdvO=rqٛ'McaS_Ǧ}z N^ڳåocs|7Փ`JdY,aq:N/3xYɘNgO7_y];}Uϡ//졭s'5s;֮>gO{eC`NV^iQVieNIɃHɔ1n)LTD%ZbZ)* rk'~軿!o|ٓO<9L6/@:dsԩ; BD N),aqZ|:<8xn%stỷO7~ͽΑ7]Mr9w /]z=``Wj4M .3 ',+d+JPe*D w[c|&X+J( 7XYTy:@]:˛v&Jw̩3O?ԩS/\8_8R@(lN/e(`؉V,ơvd4<8xn-s-_:{r0˟{g<ϫv/^_IiuR>m/ZQJxWfyI&)v uUaDVVYU^TȼPZVYƏ DOni::ϲݿ^6Ǧg=:w[Qɓ/^<Ιdh4ZnP;߿8OW%/^Ixū7}<Xؾ{>xn; WvjϷ_oA hĹPڄIi)VI wX!W12F( cte lpdF;=3'l:PsJ'$.GS+Aڡ86CP8ڻl+N=MoaWM{g}6ˊv67rׯ&tj^԰>M7MxbupQҙ 7SΚe96CU|.wSӫSs]9v=L~"04UXXȋE:Ც8eJ"c1 88d:]+8F_x_@6 h6jrHLH)5#+LT"X(R/7el7ExoNX0/=ί*ZaJ[g#q*`$Ms ]hf oW1Ng#WyZ;sqRF0"ec)e*tvnS?:u;Wg#V1c$7.^<7=:(ɲd1rC02߸8l]裏ЛNu MҷCye/dqХޤÛQft8{[(/=ݠãs}hk}'#Z,W ;oU]mnl>Bؔt| Ge9k4"Zp c\hmBtcp )s>Ūۿ8ly[)VZ[Z/|+_y?N7ne xgp,.rƔVTDDeS$ 糂*G)e llN X'0A;yjco8.T78碤M7l~G+<8-Ak4dYT4_p5nZ0XEqwǴʗƣ?ﯡ #} h4|a8vfځq^dGIq0fY-u  f :0b[6IZw88Sh)5*l0Osł!dTRD{`5 !*e e F4Ц$`,p IDATpY0dU|ApJ@|^MÍA+RUaDuIYYKjjW"X8LhIeɢYLX+6\^nojNF8 VflWGí8vfڡG6|Lb<nKr8PΦfqnRf9LM֚RffA<n6i;CQy1hyh<\[]Qma6tn) 1,GZhiuFO!X)iI ֨ ' r2x`֕ܿv%D[}cx<t"Ox AѤK0ʃf2uHrеQ:n6[W8 !6N=,#t]O+ݕ3Ywm9JbL0BUYLƘsU(rD(G`u.쪓C# iU$r(-rFW"BpKȴΥ}+ʗtٕCtJ閘:D3=[J$j@zg ! X:5[nx:Pd:4u/a#t-~ ]5 ̚uh'Q4b*86sye]JgDjg.5I9Oc!BF^] 'LՊԲ;RZkSUJpXkHHDEDzPl@JFY:a<Ax-/R {N'.$yf} @YbeWuҥ,ru 6f"u:8̆qRi!hqpn25`r]9 fliass]١\uO\IeS 0$![__=^y^v;\  (V,P0($yV`VaY9r 7U 1BY$$TvCeZo k.uX$]v%YDBЬC}d6P'u7 X7[J[l6jҁ`J[vڡN]7PgʛuZ4ntAhVS2g"ssV׎:+XB02G:G&LpfR1'tiZ<p=c ,+*a.. "DB.`xk{X<XXD΋,9Qs<~?_ͮݻXFo RJcj)I:IvޠCD4A׬C}d6P'uFE)i82ujtí9G: 3zS֘A7" Q80 PJ*(IL9'H)%-f\p҈st)v:,;,8\ܯﶓ$9ڞY39Q(ˁ`ˋ+p)mrP.Fxf{X"Sat٭CtJ'7Pg}u٨Yl֡N6|<0M|Q!`",a#tN(u3:Գ2С#uJ&CvVZ<ډq蠛E51 K8wJf1 Z2,Pړurg*) DXر& % 4PV΋,Β{Nx][YӞ|cvm8>ufYI`Ss|eau#Ix6_îP;[ӢY)Ut&+ :pJ5c ЬrSެ bpQ(4:Ev.-aW#tPFLy)|L|۽A(倐Add)+b{k[mcTU ƭniő|B<  ҫ춓AJd1My'^o,kyE>f  nN9T,ޯ} J.G^.fEKt]Zo8f(UY4 e6Jf(i7N:LR%YV;+l/~F+wJ@avj:uݰEy5zq!L)--e2Yă|: յ#G(YPL87K$1rTPJi ΕRcʜ5Pͤ sʶN|gl6m;-L`!"^OQ 9WEYy1"Xp,6 Ί U1 NxT7'pZrWݳ@//_MF*3?~~׻ ^yN0Xk8GV0:( q׬C}d6 Yvkj!MNoY]Β$i֡P@uS.m[T: @;tX!ch-+Dl2"6'#16 Jht,NC1&UUQJ2iҌ N :\EHE {v2Opkh0PQUd XT{/?X^@fu^dѸscq XV;-km._ @YA_Ve#IUb,ơvNfFf04P: f0"ՠÉ|66[↏sbUfr *2'vPaP 29 ֌"0 @)*) '"ZkmYff!R1M<)YD8AN$C]vrv;Jg-FJmV{2K),#̓kyzNwIꢻ,\^[\皙s瞙8ͥRtnhd2a4N8b `0Cc916C0"7ZqrMrqwF;]V[%Q}`i\HGah ycP]Lc/lMX2ڢh;g?r`F °1S`(O 2`+f)j 42h%xVgMr07d(2ܹXw;q3њ3ac@ D)J2Q>T`c^v Mp=emM7IY`߼VHL$U1l 4]Y/CfjCQ2^Gˠ |Zqby@zhzƃ7h@ Ӭ$Cq`\rY i4/lȕ8шӑ4iVi8.FF`%J%6sc&s4 sd7;t66 T2~pYU2~s8.v;nˋj%[1 ?yEX`,#,g{y#W St97҅9PT @۫{dHPDjf82V_0 jf6zF*N S^/CEْ ʼn00+$YLY6x-0A+Wn.A#N(sF[9uu6B/q HVY]˱UQ[@-P3*dKSY($>|Px0cQE?yQqRt97E[+^SX品i"ehƢե AXo425J̐ժ^I{hV#d,ԛp:us<s?+(°i^dWbm*uU`?/_Hb%wzd2^P/CO12Dae(a S/Iy JAwV DkCezQJ_:R"h! !4j4cpYD,pv4=ϳ~<8oS8wyqƤar8a%e0-qܳg0Jidq#Ƣz* $>|SZ}^d6+ "D7nU`߼VH8PidP/Ca EePš ^4 6Z@@* 2YNco],ðoR>Q]ȘDL$tȬ#T+9 Sd #۾>7o?&d>lGOz`|Wv 84Zi7 <5 nPE[i6[vz£BÔ.%ta:͠BqW/zʬ!Tˀ4]Rs_d1c^4W`z|SsMz#e Ò {t\ayK%rpTZd"^ƆŒSJȭ1`"c-tۭi<Yv£tOM_xmFȤ Xk0 ^ۿ:<2`2{ޥhZ 4}ȧVX4{cw2yIE({H, dUEx>z&f3dHx98rye}q!S1KCdps{NOڊ\;t޸;y4xt"_ZZP0 ,zս [e(*^P2ܵIS/1Qs=PxPy!5_&$LeHi%fKI/hgXBenf@xYZSt:` B;N h9w%nS V*B&RJ-2@ FGm XGm ,طFeykmx$"V|?yWna\xK$?Nxxb!@ˈ1:Tl}r b0}=>Dˠ@ 0^GːLǶXsMB<4}`XPkv46d(t(JiF0Qy]`9l:{~d1[SzdqI 2qIfk8h/x[&V'v4o`đ@%RNf7OfNH&w1;R‹; KNSœ;VX,SR"?Nx,QT2/{GGmmbuC2ƒd2']~ tAt1x8l:..Jkt am0`0waL02*krK2iU&9c^FDkuq`Ĕ ac4Sig~zݳ=#6C1@D6{c*1(m(<1Tq7dE<$C .2bR/Ca}e ^͛ kf0Fy~`M QEk>/k{Z̓=y>sܚQ2kJ2~YenG#xӘ(ml4Diz0%>G2F,j%}5|8#Y>rp(GAVZ 0ӆyc?EYe.x)v/<ȌR؁(Z3h<>1'q.dr8 B \C-OGk'=t8>5{>H_|_i0_V/2x~R Xd&$9t1X"]C!]|TakpZcȫb0ZaLù> _CG(xi_s7*缽9 uyYJ!^4 z! ^ (Q/C晴0ans.,P(k7 #h&k-jm1$ VBh5[BL("!@Zo"t D7]ٿ9l6x"QǛ ƙӰcyk$h30˝‹̼hJs][(M'KPHdJ CuǞz=tn6@+?VIa~7}Jc,&#B*@OG 9υ_.BZ+8h/ݿZN|s'9&Ce a];fh Fo|Vh1<+?Bf)v/[zd3#h@8 ikfsz< "‹̮> ~q2Ѕ첎.. Qah?]zҳ $2_8Z'AճRܹp0/0Ee[oSR!,C4k>/<7FE~Ю7JJBY H20l)-u^|o||ε_{kuFl M:ݾRXR#I)ݕ5ufwSyMDY.Ͷ͋% kphLc-LA.ƘqgҠMhhKΝ/q|o2YSipF)c Fztu><j"˳ $I /w$huzPqeW(4+#]C!]hZq\tW>}ݥF`+dh4{2 xW~5㏽١3H2 0Fϩ0EeFCh~>B`苗۪b܏k+{B<{灹<[͵Ѹ^B]PRׇۿ +'`Nv1Yp9J2t..N!Ƙxmi˖l.E a* Wm;,X#];$ S}G1 LN:4Wq0Nhq?k{p '542H} )0!4<5}Q^d6F3.@xQh.2QhGeh{Y2=*?Ly̓FqkV:tjp:-p;mӶcG+>{T2뭇BYW_-3(*gWk†_ 5/W;W^Wy*iuꭇp[/CeV}5 O|y߹گ\QcL2Ja$[=f+u9ƽڠf*OHq&eryYB&(ϼu7^wxmOi˶cF2\D'`<0Ywv7\ⰘXk11̭C?ycPXk,E][&a,0]xf#n0^[*#]C!]Ȗ?}a۝/?Y; W>{wyjt 8U10S'a7J: w~˃2,:%JE#\.&)w2DIN(+8N#hV4iԛk) X0ڽEk8Uo!5wkINlnN[4y~n`tdfGx:ZXQF9I&0k7&`82ZeYiɸ;fmn4Sz-l_<OVr%ϹU"f*GknD<dmbg&h|5ytM~vo8a"te8MQݷiH p9e>t9 t2aˈ>~ ݴgb(O/|}/BuA7VBeQ8,=w#G=[8a[U \X@h:\ik Y&@XZAH5URPد7چgxɯa Lؕx缢4*7B* }w|o-})ݯ^]aZ%ePñMrZAeVBNAX ǓcLi5`Qc81Q2J=yQ \yNɚPClc}/ߞ~ŝnWYa,fBH8t}z2\b=]Y(1 Ò -|L"RY󖯵p2:y]KNO$K/xbZcKK{z[,IRjuKRfI8eT)%erf֘#b(e߽G>d&YnڰVr!F`?"mλp(7P (:^o8ܡ/c?efYj{`"Ϻ"mzP H%c==`cZ)W_+deRS7M6˒ ~o_ w'v?/{/e,BtBgymt9L X!U2 ۺټt 4 \Ca}gؿE!FRT`, ߹sϛk?ptO?酯DTPTfش8Dp;n;N~jU ,eeOGI4ٶum߹/O ed_> *BHw}0ZLg8UF`  *r0< S|AxB>ћš,\2Q(w/ -Q8i)$p8OeR(=!AsƈPvƍy.1XkM0c1 5K*k Sdd2]ҚS@0m#9{c @5tА"{Wa!c^(baJHPH4\5!Xk F>w1'UŰ\3~ӗاq=;~ӟ)L> m:XZNFٳ^ʅGV+8Y.Ç훶wOgz:gxEo$ƇC"k0e^|.NsοUW!,.O}y+σ9X|}HӴiˠA )/;ȭ5GkbLA%%P]H)"k\.0q]!6~YR޸{ݞ-,)AJiQ47^o֢ o`gv ca&Y:{c @5g"ϋ[ Qt V|_ᵿ<0s3.<*!>7߄L^w|Kbك0%a ]rT}!aĔϽ_vwz~/DQF( '`2 [ykQV:,!BYyGRzlřZF;vB~*B]d@A %q\/֖wʯqu/*I_; aRJTBx+sMAM&7ا(&DcDAFq~@WZTsϏn 8t"ʴTjWM`><jBF֦bEf;cL^¸k>(e@ aӆx^<w_u{zW~5jw<_#g? Yk*(pR*$Y^yT6 ޾H3~ޫݞSxs_[T&\$ZY0eq'4R2 @.e롸m3g26MCo%M 7cBA4춂=ko*pǃth\ن,\hyl%hjsӸ{@6|P@Ą)/<\%VxHPH#\ʮ?wꙸ:xYP*t]o_%2P0^as]7L@+*싢2X_{I$f=;ax_,׾0m|:]c<\+ 'Aj_)gTPd=X@S,s]/S:aȚ2yx߹~Nx+<7Lc\-7`ba1GHH AID'FF)= v $7x3{7Z<^,B0 ژ;Ƅ?(G F efk<(cyc>&|F)v/m(2"žx,Hg}҄"<9t1:Yle`(FR(À1Y޽Z V1v8w()VN:p{o*pֹ֛T3e5(>w7WŀrF`Nʰ-2S'õ7J#1BˢhQDNd2 Z# `]Fr|/릣[o1_215Xd߂{fdTKEoF9to1F&t2B#a|5y'ՄÅ~7S"GL2II8\#~cx.2J °u/yW~T+^} ^Z!HL/xs (ZPT!aVϻNWT֛a ^{MLkqk*,fLԛ4W`2 7^wĸE֞?w0jrqV2Gy]Xa<ƣZ32a֣3t\ayK%rpTZd"^ƆŒ~Z`QY1L,TrE0:ē'ϜrYڂ֚ EV6zJ)̖8V% v쑹,M}4)Ŵ7^|PM dk /RqCm' Ns֖tΡ fLt)x'Oyi\O+_^?J2 _gwQ*P0 eõh 㵕,M*d@V6l;7Ԙ2pdP{J0cWvܡY[a-Tvv̓52 {|o8󗽧<XSs=PnԹy}o-BhD ۋC>Ɣ))e2\_׶ƽ [~WC"L]~g<T Y.}(2pfAg!46 u2`(REPΥtZf]߹A\G>G=*!RB=?ls8~ L&"QJݖG.CkOna\x{~s#H6TkM1T"w E`#̓^k0߳ghUwa5jW4c6C 411 7'>yrL$9ܜ\s1A Qv "]]kk|ǮnzTW~kjO>dz;(ڔXrsVm .)m7L;qRbB)FYmZް5j?攘: ch{Y m=8w2Ҫ<&Y;qϾ=7aLP#l@J|.¨S7͓3(1,(?,XPJ̵`Xzp9Pc-0йGPTԳ/W}_;/B X g:# :# [E:RrΖ1ZYg9[KB( jEXᱼd^TJc=c,s՛.dz'Zuw]D%6]4;>׋yf|i_{}Y{c?v]ϣ47pƴee^HøM133N1ƬoYRUm#pҏV) ?gƘ13,{^pyY(%KNuǃ0 O^o~ׅi2'~W҆-'Y(oNBʩ䗼ֿ(Y_ȒXx4C6&"e1(˝%֌V*!Ȥ2zdh0h6KKK܍!mv\+xx'PJ(n~b<i+v|;w9 J9^{! r81 ;J_dHZ׼_C2GXYȂ32Mӥs`^\RbRl ˋ^7|k7uJ0Lan ?w6n 20JxPm6nN9Ѳ@(7\2 Ȩkp37}W֜-ʧ?Rbٍ z<+޸oϣ'yCU1c` ;^=~gq/-+äS>՜\y_%Pbu7dd8c/k,3FqLic]ݰ>c1JQKrƭB)MqؘFB0ZC*3~_Cȭ[NxѥW燡' ZngTX-xّ;89eFLDa^pPx᡾O!bYB>?%^{8jV*.q/u7֔ty4(c"95r\*ɰO:{3b!,j0sc4{o?7sfҦ h4M [_/:p΋LV[i2*e Hqu Tɩ^tܵpO>3w>Cv?..+3|򿿟R5&j̎ˮw VK˽ipMdHM!Q!Q1F5gC=a2J X%YQ׍qg6Q`́G_ǏoDE:ǣ.#ΩֆVImXU';#&5(ԯ10x^RC}'~X| }2C%oxL.4M+trԘi_y;J0i0΋&åzc<|9u2TZ#8 j0d|i ՚q8ChYq&wZIK{[>qśUVY@yuh%pŵƗ??t^w8F7k׿Žwk:,?M~붜w٫x\VI| {OĨ?@bԙJoP!њ879?sbSC#3SHEtG7: ƔBq==I<^ah ff<#l?HF$h<=H% pΈ뇚8Vw@9Qb}'Wox,ɻckc'⚣oxk2Ϧi8no0cujYƘ3SnOTu,pb9;"O6uJ2fyP0;KKQqΉenHUQJIiu!X@5{/3v՚I˙4B8fjCu->@E+ve簷:VR.K\ZMC}'WoxPJǟm?%@ixV?Z%[M(K s]OU 4zK{[o:e-/q3mui2\o;ֺ :I֛9w}I葇/1#+ >Mog_^}ڎ{W]eep3i2|WV8eep:W_2L:d׽}"FkYsI۬{{pLnia܆M~j3YAM &/dPkEwL` hK aIyy5B;lb%}i3dMd. {LoqT?#oq\חpi<ThB(j4~XEVkxu;?>[R+GucMK}K.xW2PRq{M7NYțd3L>dp4u {K%fS&j0~X&Wn/jq'w~0iN{۷|Zs+F>]Tsuo߭}08_m5GsM $wє"KYBΔҏDBJ餛?~q{vvkhl6݀rWvqxJ+j- @%1s=|7Xb)1%q^՛.?;{ş|[`8w}j0"Ox|gߣI^VIg \qvΥ__B?VS+#ܥ=d0Zo=tcSϾwXL3]$5FF`jǁng;<*2MzK w&(˟1o|gH$dTs2m9eaQXutWp>7_Np_VWrj/Ҋɸ IDATX锯Z̈́(1C{6,->c/JQGcCxVFK>C1Hㅄ iquAK5-o=q 8nù&I '#Ǝh;[ic6 aWvꮔ"ςZs|`v]8y: k3p[!pQZp'} )k]?ʋbs*r 8wox,׾ ~duޯ7]y0^n.`:8k٫zdŏs}ז0zNRx~^(mK.—*N2$8 )0 $!I2nգnoy\w56(lz(k$^jY^x辯?Չ^_di['9(Jap-~.(Ƌk}JuQ|3k3Zp}9{z!\ )!ʪi/> &oP/>g煿x'Z" y‹KKxEgĹRt = @dl@M|":7ƹز2ˍ挲a23W0CV=CAsogjԂs.%#֪CfvQw9Ʌ@ q5:VX%%Eg|]vKֿ%jjC-~HE tgտ[^c`8*u>QSa@4[VZɢL/j-v:Ftj zw`RdYsxEykJϟ5g{(ژ7S%/8&;(AHHF[> G)M,Q2J^{! rdynn6II_dS6<\䇵i^YRc0[b&?ID .Tm6]=Y16^j0U3tvd`_!riz(eSˣP\LG%ց`J밴?jW֮IJbN:^Ĩz믞Zs|(!0i]W;'')Qgx/w>9c )I2t.MF]JE¦M->FcB" \e ܰ^w~/riПVx_I5jxLL07]μƼWw~o^JJIYM> 30 ĒpoП|>zƭ{ "BYqZbI0~ǫdz{n\mJO|qdAm#֡ngK ???vs2.z]vo [O=/ϽߜG?3LZϔam$m֣ŽT8@f)r`M˸ȓqP*5ZtfY5Z@v{4VRHڛ4\KQ70[ADTf~:ܵ&P]|}wptm=X8L:9徔wπ" Xk,;YYkC>cqKv\F O9YHԩv>ԣ`L[R &zV( eV"n$X +Qsƹd%P׬ 8Rr8I ֵ1P(Yb=;n롋ٳi+`gdq@ؘkY !\x/2s𘘴amdi?TfH[mI :^ \W\kn*zQt8^4YªͰXoNa. ʓA~X֑,,쟙۔gIz[&nܰ>ZeYs2.BzE 813FQkn[\O)jIF#F_q!\\PჁI_nx܎=UM jة66a6dfVa SiCUs8(?u!jk+Zh:L\Rדqs]}0cM`dܺ Õ6T3}{,o6@Fc 0ƔZ]`\65kt (/> Rd*&`n)O>(m.R C:˞k/_ Nsuv|oxL>(BkM9R71RxQup(Va230iVh.6`CihK0+?>f6U||4kSfX9iݞiuYc]%rƉ-(sqgXBi-ef`\9=W\(Iɴ7q߷mmaX! F֝2䉋nw 6p*]sͦd凞xyh÷xsBci^|ʩ uE?R+6ֺUnPzɧ9W̜익vo=q*{73pMٓOvƳtO>Ub*,oi^w+=&GP0\.yS 697Ms `p]kǔX*Bk % C-Z j6$#W2m5{KJ5q1KR)@;Or9iT0[pˋqKPހ3DH G#%8Iʥ!YBp8p8nr MmsZ:1|( .-4Y 5JFު2UaG&RY#&8FX c8<]Fsp8pnrs9M 0<5%r'WZJmu:'L0+1%I]SCGY\p (ZsɨOuC #@Ff^]9p8p8S79RE,6ZQFYz ,DphFF5ZQ$hY.֍#Sס $hb8B%T[ ̱\ksXy2b~ݭY.ggv^gEm۶c" 7p 7i wi-~7=͗)P%>ᏼok6~1\3ч?o oQL.\T2eh-a5y^1[(%"gnqI>+s! &0dlz}!\mý۵k׍7ވ|?0ˏ~~?u}g|`_ih]H=Mf)^QvDoO_|r"Uof2  }>;J2qj5 7+4Xҁ_k5x\ YqΘB c⒢ P^8og5L0ozz~-$9vZ~'7Y8}S>MQ`0LxE[[ۣ?#v'1g$pPB[c XP~Y"hkM2F`2Ḋ~ }YNjҁ}ٍlp~(t@ϋk'Q6ol?yDg﮻wyƙS~nqsshD]1EHYbugrg5zm~9)2)}_p"rO*-qU nTp91~V)mjdQxZ _ c>-'<Dg<8Ek˅wp۟;6ol?pg~b5beFc.nX1@9(,1:F+Y#Wو(lju * ?T*_B(=')OغgO>gk\ z|;D[lS~y )i:$*}0*3&pb'VFI!"ᜳPB{Yqd}g-`4`nqsWLϞ #~_f8q.bM^Ƞ֊-50XdثF).5Gsq*]!ܫ"j- !*; Җ[ k10IDAT@LSu|lݛ7m2FO ?O&g :304ɓA؜SyBW ]6hG:ڨSI*e(&IAK5 ܠey%U .J3_nq۵+@ks&:1R)6 hlϊh紶z(tU! "MZaH)-mNQΘ"tg"6Akgu8'21&ށب]'kmQF jˍ挱FP¸҇;B#;~n"hZD|7pC~pΝsν~rS>ִ/eRc nqcbLt{7xc|IAahQ[77Ǝ°\oƃ^^;"cq7j*6 f\ζgØ ZןiDI>{;]v!znz=;1`ǎv袋.‹/p/7=瞔'CXn;v|_֬ղF(SċZ:ZkCy5>+d6n`(%XF ~2\b&Ew8&rwq!бh׮];v: iM~g׮]!BǢɯ4`?WB! B!B?GV!B!\ B!^p $I"!B!B!BB!.B!B@!B!B! B!.B!BU9πmB!B/`x!B!\ B!pB!B!B!B!\ B!pB!ZsG@ B!wB!B!B!B!\ B! GpƊ B!wB!B!B!B!\ B!pB!B!B!B!\ B!pB!zx'~+B! @!B!B!\ B!pB!B!B!B!\ B!pB!B!B!B!\ B!pB!.B!B@!B!B! B!.B!B@!B!B! B!гxmZ B!w|ͷ߉@!B|P>IENDB`hydrogen-0.9.6-beta3/data/doc/img/TutorialStart.png000066400000000000000000003023071211146647700221400ustar00rootroot00000000000000PNG  IHDRibKGD IDATxyx׹?wF-ɋ}7x7`f1`0K KB I&i~Mno>MڛnM4K6MtaMBvƀM"YBH,~a4:3gf""ܵOL^'?we͚J.+b&ws,MALbe6֊(5cƥf-j` 3~~A l 7ܽ]y] BiȨZKb`Л_:"˕1w#ەwFMUHrD0 2 ð 02 ̐r3/Zh6''' 0HsvuNWU \n~`y:}|dI<[h0o~O0Hsvu-ueuq![V9fgԔgDz:ڍ4woW6nA9wfrGO_N &hkt܉^E*mւ4Є綹].5/q?~oȠw2=kJy/q켻3k^;%~Ⲻ.Y)Oܿ$:\ӫ丈vųǧfdOּoًpLb=GGDѡ0~A/KC[CIJsf%G(}²²fd1{ϼ+zu²-0*ŷVKuk)cB[npV&[KE=߈R讜)#2g8sDE |&q Ӳ'v\sL6/q'~D-; C=] }0Z0|gWv5KfHeYVZt:wf ?[ݩsRkg{{1”is|Rb9CܝrxadxwYn5I5Ƣ9i/J5-g;mZ>mݹ9QYm\qUS~-7,XT]VD3QsوOܛ3@.M ~McD-/جV LNKm%r#MJ WIN]l;ry"ID-L>%a˝R"zbxdfܴ(UbԬfp88:ᑋ]NDaņ^} Sǔt:&SKgL '~u^g0YpZKNUtU/Y>;n;۪R/l^($ކyDNVd'QIu__? WD4Ft\4%FMD_3H,bSBᶬma8gK~X]FD U” әKDsǝ:b{c_ttt`JLnDH)q4ߛTxxT\]YljcJi:֘p8W93)"kj'k$bQjs CRsRFsɥ ( CdJHrÒt*@'QV0ԦQd\9p Pg‚DH5u*ZO&Um:h8f- [DnDG&j"s;:/^ e=o#s \0n0K|l _q_s]eK}U+ri=K f̖ېHhv*YspLFmh)"RifL2;%h QΘt9xA3`Z3#_{ -WL͈)8wY'X)aB9287#ZlߡG)q!R1u ?( zyp/rԵY9a6dS^ݐdINC{:O8{>T}۬䈍K3_^d?6++uYh⟼ڮT"gT2\52 3Ft\ZndTjnҾuG7mYac7׿DuPDLb*JyFx?uӶةmŇ>>+;%>fN g*eʝ=f}Y#lipT=/=zpv2 q-:ǣ@0IbF;0DDr)0rk9J?ehqV#Oj0Yga0Y݅WFRbIDDd؜q<ᑪ3I…Ȍ&5lhpNix"HxOܮ= Wc!wZ4ӧŅ&Eerle=9z51!d=]yѾOPODy֍o&" _MJ,mWVG=qEDHྡྷ1=g񮿽<-'":dz Xps ]ңgL JDfrÐj*4G(%n|CDW"՞#tj}/:iSxi™)~}Th#JtF݌lUQRX[Q RqS]B"\fK\Qsg)H!#s62ar?!"UYqၮGj{&kƔ+׶j;nOU bB[Ur]9&cNZk+M[X<9F:iT/KMKiMD֙I1V7%*8&4PXlAfJ973Fo<0J>s}5 R5J 3RzY/wnRWXYӐ÷Ft\fEK{&kBdU6v6"nzX!6\ }#.򟚖un\9W[mS)ڼrWcE"+r!4^-j4˪qTKܞOr(!)#!)s c,x8:5tM#uZ4-1U|_LK [o0?SY#-LNl'"qϩ̀afRHa .7g]@I=0ӧψ7\ZzW\:7=ASays&lnzpΞrRP/-Ȝ(a4#.lqzlLA!^1O+hihq+РIF+#^*sh0%`@I &QR;(..&ŋۿ%X~.K111fYveyyK2 .ϟ?ҥϟǏ|tǎq]>s%K*ʄq^|ŵk~O=wr:C-X //ޗx'OQ{{:DDEEEK.uJ._jժŋG?466s= .{h…DSO=Dt̙~؛ygYf 涵G?<[l9qΝ; /K5kVccd:tвe˖/_.EEE˗/wMsȑ;vKD__ַ;'$~cm޼>}G! !ؿ=1 ea,˳>OG?8vի6AAAkxGyDVUUyYH$3gNiiC/_`0zzzN>KDDTXXx'֯_OD6l8~8Zȑ#.]DGUS?яGǫ ݫT*HՎ~'ODtҏ?8444005D"!"a #"͛3充}f966vT+sΊ ||Ѹ=4/// ̝;.@Ddɒ۷gffb"Zl{キl2o.]?$O?TpݻwݻsssEw}7//oɒ%oV\9㏃DDo֡CrssT(_dICC\k|A^^˟^oyyy?_uaUSRR-Z vz?aww7~1ӘܵO/” I싂S{o;^18/;n}p˰|uF&ٳg_4v&]pm] ioT>N7 bQf8f2H$"+gŁĔԹwhƒCnRQ2 V͋Ξ=w…=ێKMDZݠEiq>WKބm3@PPοljcB33ۺ*ekyE$X?on8n%^&~ݭ78;UmZZ+{&Z=4aXm=]mg&ySA K)Սu'k媛TԨLUZ-b$~`Cw}LҤ*}.7xo_f@@_w_dX [F,+80,L}5*`nYNb"[;]ReV)fDޥ 1uyS x:+0];}ˌ=<Qtzk2_?G[#bDz>oe[M<wE=P4sQׯQR:H/Y 2K}lナkv#/%hµe"5 >{͌*8joo3gNkk0e˖6X.X@nڴ=22rǎjF$gWTM<5ff,l|u8,uɦަf9mV+o۬6hZy۠b9ʐ ^+-63{m6hqܐf ,63,6ەyahp6bZ9[9[yC oVudy,DZ2 \g ~-c&OK{fVKD>8C!e:`=<4y{؛oo$hڼwƚiue]cX>"J"D'7o*;vlŊmmm_||q"O~jժ .\^ٮX`_˂`)/ `)]7 `%,QII$,UIIdUFČL!RIB32X-frʐ%*1+D_RIU"O2L%d2H$]JUա_ŊebDr5#*F,)%RRňRE)T1)" PDJjJ)PM)&RT]R-XMR)I7oJj0UI؆Õ8ı` {̫wsrxY-Vcy"  퓋8噜蛴 volC=GD3fhii!={?~6mڴhѢs[NggmL&b5qZfZiN8l2q|uPse|i~LfvVk2Pq[ i5ZVk^:>?N<\j56՚0ԏ1t/XD^n&䮬/mb[pm,xIAXO>u넑_W> GEEQddd{{p=rx-o%Cdi1DVL°cAvrD4caGD+COQ}|5qxǢF|l,Dܤ޼wV!=X5S [ P}`ˆ^~{0 m peUmCY4 4u]| imР_РΧvV%ǎ*x=z@7&&3::Z7x %''?c?OI|8 @r=|vرf͚2z&A8wM?ϲ_|o}Kd~roꫯL&dT:gΜo߁M~?Ϟ}٬{ҥK/VS٧ y> xFFW0#6dωg+8_EYĶ`CHjD4E5٫*/^,|ܶm/~7{;w.㛀W9x|Olݺ4**J]?… 7o\UU9 xe?{իWIҒ۷ߘ={6@Y^^޹s222BT{N(IP˃Ry8ֱLW^ƻk=s6ݳ~WϚ[Ԩ]*dWDbSD<ͪkf|Vc6ÇGWx06%B Mmo7dY… ݖ~_dO?t7nP/Yd3fعsgGG=ézJJJrss^{w/^DL@G.0u^t[Ԉmoz߮|]R:M]MM79~5qϟ?"ˉ_MJJ"`???"2nCVظq]zzz}Y!h n8p@V;=B˲OIdTsI`#RrʰĊYx285*`n7 SVU;MǦM6o<88_:~[___TT<:t|D{t:۽{nڴ;ͯzjjt];o2!LIDv'KO2)&:xJ|e54u渄&5*`yss-Z4[ͷ~x#$6G&yv{5v1x;/QKKһ7J={pk0]gI 3Oo@y#gfeUн--MBV>W^.3bΜ#5T_X/Il6bbYb<'*ID(4bJފrf bD7Q=|޿ xfVVvcWThޠEgq$ @]]dk;@ 1;~0@n@ p\PJ555%%%09̛7/%%UZ?<Lo* KhFlrssO)J/lݺ駟޼y3'?ٺu۹>}:&&7^Ǐ[ Fly^фjHBDfĹ 2e5qe$D)S7 &Fl9{9V[]]} .͛;VTT裏k_W111? Ι3gӟ>'oڴɓ-uLm۶Kvӟ5D*$$dMdBCCo$DcUvՃ,./,V㷅gΜLOO'N>}?DT\\i&{Q[[\.'̿/DTRR.@iii:uw"%`TQ5gq,G3b )g=AS럈4}ƶ)>]yMqvڵCCCgϞݶm/h"PqqeG]< {y01gq{TkoӇz.m؄ &udtK.6m1**srrhΜ9Õ\UU5w\"ʒH$,ŋBn,FZH n?z(е|"$t%Kf2+5e3K"d&~7nh4ͻKD۶m7rJ׿ul߾ZbEKKǽ9?a۶mO>e穨~;lٲeĹnwx'.ۮ0C78ޓ3r2ڻ{-6u)_K쉛\ꫯ:M8>ww}wԩ7;|so MNop pǯSqӿi)qDtPU`Thg//:\5^O"X,<LV@0<_u'8W8'OYT"vKxΜ9s|KbbÇ,X!͉'ӷ* ksaEoMKI%X6W^y^8q W^5k|<,<l*p&Tz_  @DZ%n\@&~"05uH$m6?DZ6aD"Y9D, P&Ϳ{p@V85gkƄd ZMwtLHzff2C@{[W]U^7l(jE&Z0% mzJMM K)Սu'k*5hBB/wt61nRy7 d8anVf9e9_ZJgPqrr˞HrE<8Utqa_x3rkmQnwQ}àTjBRiTƷ=Ё1Z*@p"q(J'^I<ʢ<%eQ*(9-sEuuv4]nTӲf,;0tuμQUɲ+}>㻪HnkJkO;DDk.+Xk]Hۼwm 8^a0Z8&ҒbFDfJ|.)p/J8+낂E"˲i陣Z򔮋Sr"1<+'=JlӢ;_zPyRWڥ؛C90>D.oذ-ytttnn.0uvvV?۶m 󅅅>"/jf;|p___rږd˖-S(aZ|wG&=U22RR#"#%bX,R,4,|ԤtĞrcgˢF #~CD5Ξ)/;X_7׏糄"}+?nA9s.1w\,]رcqQQѲe|h###W^-˅sill裏}ngϞmX>裒yMw9s洶~>#k lc"'LD 0 D)S""yo.EP8"32GDfbN70Knz8Ǐ>11QՎv}' 8cYևlll#^Bs˟PVVFDͅ|]k;..y-hw䛽FD5U:.<"",h4MMMff͚s~|ЛrmB188+; pg[[{{{E"QLl|\\X,kinrsQr*xLɊ BH02@ID6ׅg4̡X-pf;D<j_zPFCQ˜1 s;üyJKK}&Yf?~Ν1cf͚T{GU5ͻv:}%K|w_ّwd[`"3퉊1MrB8u?:ͬ]7vWEy`lKeZzyomi&Q3ʓSf 8 7JǀDߒ*_Ƈ?""b޽6";;ۧLϏ}VrJD+V6 'vdV===bN/Wߏ+bةS8CC6k ڣ.jۢR3t榆Ze Errjpj+8&lzMiK^ {*j$%%577׿Uy'wsGӧGDDٳb777'$$h4؉rPMm777O:'vd;`‘(OTb>\ =/Z4tYq]0(aٙrDK8e2F C,X,6YE"FL[1wVl@E(@p{,~rE/}.hhQEE IhB g)R0.Q 2't߾}6>jժUs&lTL`⼼ Q7/\{Õ8b^vjjjBzGzݓO^j}}CG6j4F)"bv'~xZMԩn#yjSSS'Bz3⋚Grɒ% %7/F"ߠڵ~~g|<tp֦#Ȁ"bfh 6,XKD3fDB!5fgGIf??vƌ؀]6nvROx" @vL[yyWNnjWP| B!HNV'&kF"R"#Nn-*j SQ}}oeexx"//)>>8;;^b;vi`DDqqAgv fώt=5G\"SVNY8A7 mq5V+&'"AK_ߐxll 57 )SŖw /54d2>Big:u9}\:ʞPa+|u]S6۵6W&@eSy mmٳ#[zz ;뻋^_k4Z݃2":Nh>=|ŊBl w&߸?um+DCCV#G.u讨v~Tc",ywlv>4,3/_j]TGzGzH/㨩 ~Oq&C0q- $L=0A R0G6kV\\\RR۠?EyT*ȓO>hq㊊ݦ\f͞={GL.+ ;;;{ʈWrJ/y3ܠ7xYY_k.a$66vş|dQQQN#c6gΜƋ/FEE=&o4QprssO<`& J$TZQQQVVh""z<},Y"/..nii!'|^RٳGpBLLL&+--t}FD۫P(o[M$M6ϟ?ԤT*7lPVVv񌌌ݻw0rzRnݺ>bQCCáC2z]T*ڵk{Yf5662acWĵ~z"8bbbfΜ,_3g_pppq) BCO&0k֬> { uح\h4677744Ų짟~*3Ltiq]ϟ??**?g]$"a"2,.1V$&&n-he;w 0 <;gdd\p!((hݺu;vZ^?}􈈈={L|~2_tqbm?SQRncժU۷W7;=s̙u֙LvRZ[[z]v #_paJJ ˲GODYYYǭ]VXPPۋv"c\pWyOgXxVSuyu- qm?GnLƳގeLJV"RI W2+^全!3{X09lyabu][CׯS„PeP+snL0ڦM-8}dIP ?yIh,q [0dy^|qy}Vj<0g9OW#y!KUsOuFoh'G?.޴"k8aչQ5uwr̻P7Wg/5]a~z+ʙj4[U^MoN @xx8uuu vuu٧ g^^ƱmztC=93=!'sJOwNMmSg9h'dI秅~)>:ƱƉWgtۧz+ǾNs|mqsඬhֿ&O w>oxnpwQ_`vr{ūVRT6ѣmmmcGe+97~8>oGD.]UFZp6-1UL|;+ ;v#˗/߾}d111N#c ZnݺFOj֋Ĺ9iD|r|˲3ILL<| <9qDbb"5{>6mpRT*^p4??6n(\ظq={VXT*y?~Ё瞫 O|ɳgdӧOWVVgTRR"b1˲c'3 ۿ,٧u%ʤYi ,?饉'N$l-h5H4sf">}zIIIccc@@׿#G̘1> "ad͚5=п/BDuuu{t;v yFD{)S+{+H >u%;81\nfG0q=#B{DtȑlZ-_9sZ.tuu] 46Vd%۷/33sc-bnF.==m.a>#ᬿds0ݭfŋyyyLX~n6ǟ**n< 3fJzGPVzzzff&M2Eηp 6 *ʁ͛7ܹSٳgO~~~zz:0.xԩSw}ifubiiiiP?3Jn\.Q0.oNm.JNg<7*O_SyQD޽ŜLWUJR+JhS. -R/(VZ,-]*J(-%=] :]fΎ1q3gg>=3|. ׯ_x<UU>ͫe8k4ګw550h銡{ um; H233k QsXo`߾-_}q/ ;FKJ ++-6fxZnw['Q-Mۮ>H))*GYׯ ZR}Gh RD>cfUST,66Qֽ{עGtCm@2$w|H 6ĉ Zqa~O>oK_Zp9Fڝd<{-7?T; -u; H>$ V @ (/-޹kߚl>擂@Btb[fS-'~#dhA&@q\uz,E:uv[0NCne%Ẏi;oF(>|~'NʾW=[D͒WEWw=f{Mdl>U|"bȆ52Βo}][f ]<OAQqݺInI@OOObߨ^|>?>>Ԯ];?jv^gVT3^ӁEˤBI€;3-UrLw[ٳg۷SSp|ԪU?~{V{4xVmֵ׮\ӷY3geg?n:e͠JϞ ;7o/ V;za{{Ic{yi1~ofH +)*j?/[wógϴHWW^QQQIIݻDEEE 2DMMM \~ӧD啑1mڴCCCeek׮/_E*G,VDÆVe7x4vD~=)7bjkj :wϬe'ښWE&^={@ney(** -.:f;7|~صmW?{/ n?KeyϞeY*mf``ہC_P[[[Òԯ@@‡Yu^Vv~-qa߷R]O&J^B5;k欟Wܭ[7"ڼuq*.m7ׯ#\!@nӊn\=;c]n>sIYhw;{LSaj0m^{ک ~+et3=_v؜[/Qkohׯ JsV''O91}f1ӈf1v6u;7b 66m>=s mݎ"}'X_fiNkςEg}=& uiݝٕXTTCD񆆆VVVZZZ oKN444HEEEKK(**7&beee&''$ЩsMzZu3Ì3[YDQf,*DTQ^N}o ?|x;kNf֘s yMi=HF-eva`>oo?(=Oƌk뼁\²S-\;./ٻc :w۲q \F$*))+(4ӲRuuՄ!N3ؽn)(*u}Œoh=Oj|U[/]>{ذi4γԨk:Lb1c^ߝWܼo틅DoK5'gg#*naW"MrAѥrj=$_9K;*"ھW_'w] vaF?57npY^;K $mKxȑ#+++srr233MMg555LPUUUc͔]ѣ\ww;wC#GOԹ?{9 ~[$nr\mv3s_FL,|4`҅YpuC\M{u7DԥG;7~UcO봠־ IN]sB3M y{M v>ꜹE>}?᷸N3rzt~Sgyw k*Y'΄:tRQW8x %\SQWINNt׿ZI> @AkԵzZpNb\?n:}lc+6(Ncka{o<:?C\⣚HSo>"SUUXƈa)=L%yv@ =ZQQY,@ ` )))cǎ mbW< ][xxr+jF}Kcx;愘u c?''D 3k:_給vMӪ7u mf l0ee u9W´UkOF]]ͫ¾b9rw2!,w7 }fRA [y˗mXs;5vH~' X%&&;*///??_]]477wĉLl6;66=&=$?Sҝf sl@5f.\+GK; πtrh[S]x,lӂ?l5^qϟL)?_\VU\T|}Nv+ZAu 2toWQ^&j|ɸH_u\ឭ߂jƦ&w.^jIp~HXVP╖W/.+ZnLfvA-v@Z~$w߳>H>}N8f7#V-p-ުOM]5wR4qk3wGϞ=***(+++!!kv&}{%EEE^SPPP އ}]|Vd$yyyD7tP%%%%%C'3?1|puuu@@㓖uMcccee7nܻwOt]YYY>XYYeRRRVVV˗/رcD\]]ݻO8ȑ#555D~9`]] &Olmm۵k/\ |h@8 :d̚g 2L}477W]]$;;{ԩGe C577gX.\`Z^ti̘1DTVVO ȉ'O+$߅ >S[[̓')| IDATO~7IvU )S>|xwypL$ڵ: O>]pԩ&ZkHKKKKKM||޽{O?ҥ uر" qZ[[ ޽{9!ɃH@}SLa׳gO"|~pGAA!((h 3H2.{ ;;;t rǏ+¤I\\\ܹsI2C]m̬MٳYYYfRUUEoHO驨722"nݺ˔cooommn$ cnvqڵ3gֿ HRGGÇ8\\)~@І'^p~7桇'|nXÆ ;~xbbĉ! WF'HKW_}~!AƭJZ[d9zS񅅅 tuu-33tPwҥb|bZzAk&D`5*}9qℱmTT>1 {:uN@ ў={EDJJJwMMMupp "777f~-**jȐ!jjjO>%"// mm툈iӦ*++'''?|P.]DGGQNNNQQ>.B=u66x]׷r8^z۷=<(vl~IIIYYY;v$"ŌE DpZ~NNN.]|7m6-B/ B%ޚӓw8vت|uu܉'2ۛ2ֶׯ;::zxx\|)h @_Zgٳg"##h2UUU;w_iNhVXX: dLv56zi Q. wYWTTv(xyyv!^x!^ 26HD&]қ娜  fΜ,V^^6ѱߣzLC @v#!nc6ZoNJOO=rB1u,iރ`X h#ڮ^bNNN/^_vmUU ŋ7n,**bs0`@c=~ϯl„ Y,VEEׯǏ/ m9/,n1ox!^UG @io%s۶ 9ڧ677C;w?~ȑϟ';v8:::tHEEfO>=eʔ|嗞sΝ;w.]hܹsE"IrK$ǣGR޲eˤIDuʕ+h7o&|0,ss]pabbѣG333E4f͚;::$`h+-ߍҷ~#yoѣ={Va*0[r+Wf̘!g>?{J ___+**Jlj2]x!^ԜSTT$>w:~xܮ]{qפVhv&}sX'M/lٲE&::%66Ybmm>y 2OуfwЁutt6w7nٳI'D@z%x>$R 88);995XаNUVV2+eXǏOJJ7J68q"&&Fx@΢E֮]"ӿx 6;wN ,_\8'"ooNQQq޼yD4k֬ oں`g~\rrr߯(>}/DvnWn[ӥ:ikkm֭[xqee% }jd?]vթ#\0gΜ={ :TIIIII)%%%99yС{.((x9S>|@ c.5㓖uMcccee7nܻwٳgXXTa[G_x711i# n[wc``P\\Ւ|~II %'''$$XBV_1-XHp8VVVܖIIIAAA!!!}]|;&,8::޻w/00̙3NNNL;遁\.JKKϜ9@bڵkFH\i:hD 5^|FGGGAm122߿?0'dee˗/<0sΕrظU3rEҔ?~<&&sҽ{7n4*u 浿p/oGD bbb˒|U/k/ B/ % fx sIGۻwo"֞6mZcM)ƂR1> @'$$xxxpܧO檫dggO:ѣL!""bС,… 555]fqq1NglgOm]zzz2]x!^*@ _,<}t©Shо}0L:SC'4+0p/: d&ai-_sL6sÿvv$15=ի1oÆ8p,:lx ĨiKxm]aaĶ.?52]x!^a;~mZcEz{_ 幹9W//--m^cժMNvnݺ\TMM}ٲw>p`϶mhժo׮O?m24\TTf9;A;DžiMs_/@}=07%|ح[w"Zk8WWӧOn&&&t=-!SڵXG>~ذaFI&L3sqggQ&}lʰcӦ\l%SkWW^OPWoyjqg./_puʔ1˗/ {\B B/ "\gϞ15JJJwMMMupp "777f~-**jȐ!jjjO>%"// mm툈iӦ*++'''?|||~>d̘1ƌ аu=nq̈?.p ]YpN32p8^z۷=<(&& ޖN:ihhXYY39PTT$A!beeeZ[[߾}Ν;{f^Hv!^x!^KBCC,9rdeeeNNNffib^*fh@ ڎ;;wݽ{A fIq톆IIIYYY;v..D D\;uDD^7 @aY}ıcVUU竫N8144)?Ԕfֶ!C2 ܋N@Gruu $Yx:&ZkLD^:uH Ь;wy3QQQb=B/ B3Må-@v>Hu%ooo///oo+W|Ɲ|r ]D$]D$]b. B/ċp@ (@[~۴~?~|ӦM/^X|- Kp $1~mZ͛MD_$NNNoVVV^b/6nXTTfΝ;`ɓKKKg̘1zhD@`@Z6 fff‡~Gt`]v_~ǎ...>>>RQQ!O>d-x{{7ƖK>&]ۅx!^xf7t瑋ĉ>9999ܹ9BD%%%YYYD@Dݺu+//߈=ֿa@Z_ wZ={|𡥥%wf@ k׮o^s9@ǧH 0ϟ7X=44TtttFp/^XUU/U4;#zL;o/bϞ=k׮~ݻg͚%|ÇpB:<<| . RUUҵ]x!^a@" )((ju lĈnz葕q3`6`.l2"RPP/^r%((HSS'ŋoذܹs`9F@(//СCRRRJDgDDA\\sOZZnHH͛7oܸq=222ɓ'666HS~anZŋ,7D0,ñ!"KKˤ>._LDǎݻx'''EEE@.KDgΜaNzUΝȈ9@m]QQQb[W@@Lnx!^Ep H ɓ?((4-FFF́***:::@AANVV|RYYY/^1b'O3A+ 30 S !ʬt*X'N0 D^xx<"b0UVV(tttwo9K(ccCUTT06L!77w7o֞8qCd% v֭O;-- (7tmx!^E7 '|Kwr>}^RR=uԣG2CX .|ODl6ʕ+J0t: 䐫;cPQQ!ot׮]&'''''Yx:SN5Zce"ze@*L:Ь(13<uYl|Kxm]aaĶ.?52]x!^U*dfJ}ZktwԜ|}3w`ggp3 *@Bm̬M뷜p\nggvct>:\ |̯_9W//--m^cժM aҤ/^BD׮]5j9 [`eֵp2]x!^a@z iӪq<\]O>qO۷g;/3?h&)iMĿ3Э[I6""gg-[~.@Dza\ne׊cgghh_KsH ^y׹2U/k/ B/z 9ŋL6X5""BڵkHDÆ SSSxbUUMMާ{}-:  0 ; 9h!!! V300Sx }߿\\fkٲV}ʕ!2T 3&ZJJJwMMMupp "777f~-**jȐ!jjjO>%"// mm툈iӦ*++'''?|Pt].]rwsgΝϜ9CDcǎwL^аU_hkJ;\B B/ "dpzꕗGDoVWWHMM #"0rGedd;ĉ555DyEͲPmm1cI.\ PMM*** !0 S Q||BҩS' +++"RQQb&D?(DT\\{2w @`YtshhhhhS\.9[n_NNNnt pAAAqh1DL0\B B/ "\k.uǴ=zԔX,@ | MMͱc־srrLLLܹӽ{ $ Rǎ[UU^ZZ;qPpy{{{SSS6>"JJJ>|YeeKX{ Q666IKOOO& B/ ""WWWЊBbh@@@u={N!22+7X~{ @[sssC'4+,, 2g$y0N ;p7_߿5˝h%‡-! l{o-̚5k˖-P|}}Ŷ(}/ B/ @ HU@1wWhw=_xqƢ"6=w]Ąc?? &xzz" Wj] !n݊ϮUWWю;\\\ }||:sǏ9222Dt)S 8/l"nrp'%rr3-f dffwQRRR~~#G$++֭[+W$Ço޼.\x̪&Eol[z,uyyyv!^x!^~3r2V !:g???f},yJxPʕ+8x`q 3Kbmm>y DGG2uutt?p8:>3r2U@-^ƍ3g]|EΟ?啔ԙ5kւ feeY[[Oҵ] IDATx!^*@-C@^\x:9kYOOoLyҥDYY"|rh @03Hҵ]x!^a  9f$`Maaat!WWW ȣSZ{q"ܾϺ,\mx!^ED 8 vvL!-;fgg[`gg!\See§vwvwvwy/ B/9-C@.gp.,XXXQiiɃw /;; hXnnKKK۷Xj~'&C4鋫WcѵkWF;g:5jlTT\9|#!~^ӕ+r=bf _67#00|.wɓAF  kGwB$qiWW:ny„)jcc+]dvHl[#ۅx!^x@Є[FMDή7o.@Dzr+뿶[::o'VUqw?)麓39;AW fCH p|/+2>**cGѣb= 68Yem/:,EGiGt|Bt?o`ϝ;CD/.U/k/ B/ &,[2,شin'-[ڗ蚛200Үҥ?FFOv5t5f / eC6V~~m5:~Ffhz!]ۅx!^xf\ @pȎcnU>66HU/k/ B/"2g7 DD7)OHdD`^t: Ū|'G<>_VV*d:Yaaa(1GQb[WTT ۅx!^x-XkƌB''o~;u6@ pȋk׮9rdڵK,pqqA8ocQFEFFn߾}Æ ;w?uuucbbn޼iffqtt,,,9tΝ;Ǐ?r_wwll9b5ljj5kϏ,XgÃ9BD%%%YYYnZr% >|Ѣ7$`fff>>u޽ \_ l"Zlن vz̙K2O=zgϞ¤yU/k/ B/@I&믯^"_@l޽cbb(&&Ҳӓf?~ѢEDdmmND3fr666DC@^ۗ,Y]]]E7߬_sY,w}GD/ްaùsUUU-Zvڐ={@*|5]:VxŋWVVѮ8ѧRb!0Ь}6ee-; >z|9Z>Jj%'''$$l۶MV%--{o8@ #oPTT!___&**Jl ۽oĹ]x!^{0f['kkkm֭I>>  U5|+d[+3'2 NNhV`^tȘ M!@r3 Owg iiLM͉w=Sxvv ѫ 0r?Cw˕%KŶ0F& B/ xk@OO=#77g奥kZI_YLի1Cڵ+F3gaڙ:uڵۻurR55eV޹s=۶CH,9 cצMƍ 3}ƟtdШQom;C(-[IDtZ#>: ׭[I6""gg-[~.@Dza\nek4ȑۙx$׮]Y-[Ŷ.7/Ŷ B/ Bޓ q0 60BtaڱNK{pzޥKQ555;!@ EG%VV6ӫW2gHVN-[2,شin'-[٪NxqppիRzz!]ۅx!^xvKt3l3 Dohy*/4~;G=z@6$(\B B/ $@|0M{ (s툨O:hQn^Ag#"F k k|}}W^-7,uxyyv!^x!^D|+q L S0I8d ^DTPʴG"y٨w f@^޽wWVVkqrr޽; 7/^N.".".1ox!^UGkB SVZ[XXx[:thΜ9m"a{t>ǂC*..rDpfϞ fɓKKKg̘1zǏUTTM0ӓ6lذq޽EEEl6{ܹ hl|>իWDaÆruu+Vt6mzҒ%KLLLܽ{w7n444Dsc!@|>O7oފ+f̘uG O߿v={ӧLwAaA8p...X~-[B̙3ϟϜbc~mԨQ۷og899|W7]VrFb[WTT ۅx!^xաN[K>頭Q:t"{ِ=z'6m'|uV^^ND .dG=p@UU9%%%>|{Ŋ%%%YYYuV{nSSSooo(aÆ۷#F "[[۟~ye ХK CX ,?hѢ{FFF p8Db+Wr劑ь3DQPP "@ў={_ҷ~#\ l \?fdd ^䗖֩Snܸ!s3iPbbYܹCD<[ Z[[Qvv3PUU4i/BD{!KKK%7oܸq#oo[| 7\B B/ 5'\PUUݰaïgќfZ`Amll .^xÆ Ν˗/WUUmWW'N|7ׯ?~˅;vLQQqٲe?gϞ 0ap $ LMMnZ'suСvp'ܹS;|m,WjFҵ]x!^W8 \ \ z!]ۅx!^xAK$`MaaatHG7oNIiIe>}4ߍӵkWV05QM<;u<ĺY{Q cC'H_NѢ?9 qB,[(.bqqIzZUϝ;%/ٷo?_vlG4ڒ%[g]aaܾϺ,\mx!^Nڵk' vJʔ/WWW7[W[|~?ehڮ'Lr8y{{Urux56v;;=l#l066***ƍ6m;>  c@D@ ڛHZcm:|7[_X%ի1o˖::ee 77$TTTHX΂. ד>|!>oڴ];n=u奥%Sg^WRzǎtʥ\.GE%"u**ʛ]紛7o(++ZX2?'b&"q m[ۅx!^x' [PtD,dF/8^m۶/>ݽΒУӧ{ 4|OOftND;GHzs;q֟'L2zӧOFF">֭{KVѵkŋ8}mkmۇ  ynƝWVVc 矡²-Y>[zzZUW!NDdbbZVVJDII׭ADc֮:ͲX&V*\]݈uֵ L@DpO… cbw/Q ~#߿#|x_~*l۔Kxm]aaĶ.?52]x!^ԤpysAS߾}߿BB.EF""p|Ν7s:+?MI%%67}gO g=Ո9C;w lll?ɨ~K]za uL"7cҤ/]EL? 駍 nWn[ӥ:ikkm֭ǿ+0N)t5R߽[":oXS0jEbx/͞=s/GH-78{6^KK dρ~sΩ|'G<>_VVp-~W3(999!!aŊ-^"b[txĥUک*jYkj7(Zr^tB6!B’Q߈ uq8:n|ȸ0:_g@$C~Z~NOHB~ޯWunS>u>n9NUu,XW! AA y5_xa1lO=4Օz M7400\~|Š+jJW\!AA^z:c xU [?kowۖs!:G7q>gΜֶg {$g_B/ B87܌;?5o(37vnߓf/_TmoܶG{Oܼy3xk׮=묳Z_tM^zˏ?~v_~q/T*c~<㭝3f|+_i4xm!   .{Y(%nxSxyuso}~D{̓׬Y?N[Fo-Zlٲ˗[ߊ=yw߽vRO|⪫Jz衛oWr?D-\gmeLz_~_ȸ >SZa>}\=z>yy3XZ9K ~cS_͛744$ܶmGo۟ԧ΍7G{9@6>}zB/jǓvmxA GxAPwPyg/>YO^z>w(JQ͚5b%?sElvZ%  `-Z}mc][vpFgO'DsoŊjk[)E]s=3u֝q/Mww1^Lr6nxuuԱ{W83Fe-_;s  ȫtI'-ZhAF`g>gj[l˻o{}͛7z{nOO>ӟo}[|ӟKn+W*YbEZjUZr儬~_/x088ضU?z3/wEG,w߼lCէ<_z-_t_<^wbk~> Fs!N*Jkc}P+}\pڵkE]tg?^{mFo}n{6mtUWp .O|>΍7xB Vw_M A~Jg3o&qݳ=|_Ogw>xĜSJ8M/'?{qǝr)K,jʔ)7t3<}~.Yd``~w+N;ꪫ9e˖ܹwuYǹ.(>]ve˖-#z  /knwVFWqEGfM=u {L>O?|/u+[_z0wW^yڵklڴi]Gy$<BZmͭq1gN8e˖F;c1}{߄~_L`cn{v6`eg~a8R,8b6W袋.]tw=0`48ԧ>U,,Yt,r[^~+r;y˖-ֶ\Ƙ  |b_o[6#bo?ꨣZC}C=Eɵko單V]kзX`~ .`˖-W^y孷y^k8?믿R vAAA&$}_7q3ƦM|r .\`@__G/򗿴~%\\q8]w]T+s~馛nf҃cŊm{jժ=^re۞z^~_ן$ '7t}`?Wwn<}g}ǽ_ @A?V !6dEAAdڭP8 858J\׍4j( t.GTHㆈfu+V'"50%<֖:1(2|b| B/ B&EbxxXJ'U8 0.aQg=QAsjڐUY]ƸRi4 `Yfw1Dk0 .pxqzA'Ool_ 7B*a­LMRZw׃H,6Fw3҉ ֪JqXe AJ68T1ITJLWEq  {qqIj4E$ q\RiR2ō-ii EAUJiו/7dt=KRsp˕$r6F9`q/qm/' A`\x#HWe3UΈǏg<ST1}T;w۷dιl4„`$I"Ψ&4Ng*,m”ѕTk)P+,zF0R/ĩ^ D IDATX|ȡG mD۞{m=4T5v50m`TKm/@cN4ZyTCPahka w^/-ܰ]ܮP;uʫ&^/ B/x;~K/Z|F/y3L`Z5q3&vx_]QIN-fj 5Q2BƆ͚+Y )ad(1ftj ϑݴ1#:ܪd4z{ Ïx_kcAA ^3\RVgc (ddNtԬ wwmFpTa( Qu42rFRiKg/vV+~; Q8NԬ;Y ˌ{ a׿/> v~_׍f䑇/p  2ZUo^&5f[Aڻڼac#h0J9zZN!Qjтs?ϝ7ŧ€#@Ce(= bDM VX#Rk5 UוTxfq2O-rb,; _E}|iҥO;m߮On<ۗzym?ۿ]/ lg?/3gO|m| B/ z1{fVOPWHi߯Ugt}|6ϼF N~gR 1ƀњge&r+l[ff:A);1ujJyxɛ˗՟'<~ou,Yd]=2Ad1됩9lظ J\Gz(v-24p?|N![p_uh^B:oxb?`)\Y^>z|j +!pHZ'br`E!8~f : C6´rR6v@+d?{{߿lٙ˖W .8wnڴ?}v衇 #fn;tֺ L!@J\xYVbm>w&%6>D޾)<̎vd\("Q$\P Ħ!@)yq8Ny@9 jkӴY+W5d;YixYJ]?-3Z=y:Z36r 7s9n!p+?7J)SQ ~Pn *qEiJ mD$*Qr(HR\k֖2nMi5vLI $Du# /k \sӵ~_勌5,Ywi'>OߔR?~ng}xǻ  :LF3&w$#whc`)!3g\nͽ?R ~ڔVk5 4-:QpuB,qũfЉ2ך /Րq@G54;/kq]ӿ[f|}EZ  k&`(vgD2<\cB|6h&1:cmIPƝzVce(\(6M Qi ǬIyhBR )쬆L2g4`m%m+_]{g&d/ B/@ OJCR#7fqNRYǞ035Z(f#Bf(R*ql`Vw0VZ l!M".4n508h_ۯD A@50 Ē;Yl  5FQ/ݕ۰ϐ)RZLkm۶c~}=P& Q{r:0r~4sF3M 45:\U+˪D  D#n2o0&VuVC#ND5l 7`MơF}8`㲕8ُ?w5czq);oݺG?) l4G AR 4*nP/6+B1J{P`(6ivO=໒vuoܹ]CگB(lvPi_6^z_~_pJRu]z~Vn%{IA>-[yc=cv 5t!N;(I%!V'zZC)! L|~`._Hg%"CL:`%TdXu@CXbTwVGf4~ BA&GqIp.끎\z-vO=enjICBJ (5S": FicLQOi@ 5$J+5L0@ F¤RPl(OP ĕBs<'fhxXq2bE I%Ŏ*7i%Qc?{֑Ty:A8>!v4܋9at۾?4࿾ΗAAW9IN=]LJ]`ꄁb1 jL(kI85:UIU깎9Y ""%0Ŏ*\ϞcX;:kjҕPrm_޶ ~]8>[AAԌ%T0u{?n+1"Gʇk󆍍(5k9!FF ?w޼N(0 $y{w-+-~K^z_~_{pF_Ok{-fWGq2gVZ8u} nGzr~&sļZ QP/:ۏ\J Nļ#z)ry[j(/ @(T: c~ R)8Ng5(C mp`V>/{o?FCO<}swoމ ?&!/Adp>?7Nb| B/ B&Qe #%ڀ+F:qSrArjQ4RIG޽y3,xU k@@[Dag5 Y; AAqQ 1V 2-/`ZJ$!;jO[e|qy?W*׆ңۯsNf6Y jMzh@AA&WZ8UYW4!@q]3Κr͍{z͍766m_i4$Z^2(m$Q3qYϘh24Cg5zuh4?Plc z1~_~qxMÙX`bzOw)R3ӱ'߲u@)y10Ԩ:3R nuJ^5*'گA ʼne7?I `MyOp}i\xj<  Ȅb_@BΓ:k45r.#PqK/=q֠.sgI+"H #`J6ka\$I<< 0'ƨxdGhV24MMJC+BTj K8[Gͺ `UPS6kyD b; C;0 @8 8n~4`EA9&JB*abN|Icͬ`cZk%2eJ'D8ƒ8aH!9I9'PҔ2di ff墠l"Gn;VQڮaʔ);Y ^ Ӷ]жBж]m~_'++LڨW): ܨ@'wlzTvո t%wjfbߜ-viQ2rY v EO3Re;aJWܐјix[:  $ e3UΈ_Drnx7u h':Fޞ0NT8hp`5!'API4m8ZEa |g50 qdN4;5ֿtW^ye~ .\ض? Y/ B/ DJ HvdޞJ= SƬ5Y jCqYʅ> j qiDq}P(IE3w |7ڪ35ZKz6kP2JUc32v2|_ p%`Ad"+O:>pu[Jԃ˓$yvc{|Ԣ7Oin46?'.yũ$%z"M8aƤ/†2a+t (eROo)Pq!lT,e*W I#u6QA qxٱ;  'F5 5$HpCm3R[?s9C{zz8RJ)k>zV_ϯtc\ 0GL6G zwXcm cP>X %m) BNL8lIjI< ;v" L 2ɩѺ[@ _ IDAT1GΜ9<)1v1cƌǽ7\bUil *ID'~DaDcU91YG)y\BDp~ frV5:aJW; z+V֪UVʕ+'d/ B/dH%fnOR+9sLwww>Cs.ql1Zj,CCCf)t104I8V+!DFJ Grcr͘1Q䋥6kTd*#ZjձӀa+Xm^WZն+Wl۰v B/ < /Spa,\12gOz;ŹI04h1԰Je(SK^o1D![׳RF=Ia)~RnMԴUIfm֠BIvVCP/  d zT,L$2{[W7q\ VJkmjCoޢCFBkF #h` )5#iجw ! bVzahԳl.*Zg5ԛT:ng5T5eN6^z_~_ȁ0:NUe!Kn%7MSid|>\hÃ(3G.rL.JNSIڬWth`I*;AP <L#Y QJV@ Lh"9Ր2v"  =ݥHj#ȽacL.g?q{ԯxt-YFj=?wkFH3bVJVkpʭќSJHTd02$t=u8I!@Z=ĺV%Z'G&NM؀AA&i@d6X˹N{xW7@~-)97# " s&aB{{{*0N<ۣf% Qd)ng*2Tͦ#CcDqsBڬ2$pg5  &N_r8fY!ւZc-T*e?#U*le,^Pn5Tkz-6Re;aJWܐcyEAqpܾlfp񝑱ĩCM6LWL"&Q'թfBY3,eYO:|.W.)cZk-XZY]#NXFTi900c#m>cUKpXg54бӀa+# WdPV6cc #+G!RCJDKXʓ4MC*jQ*S(2ϛ7mڴB}cl@c2,oq8ij#画+kۯKAq(GrIiVXѶVZնV\9!~_~!( Z~XE^Ƶ:Mbu`JzXpKdןSʍ1B3{5~w߻qFT aתL7USR`,$I:!IRc[/  tIPK8l܉74%fs&d :``H˼DTan7((L^~P?jC1F)x~FJ9Ax9k  tLY Al  DY8.*j%ڤ)Kv%`1 V a RCDQ*mN3r'NRgy[z:zf;ijRk 2=+A*se)=}֦+ QT5pFo 5`m8~_ hr!u7J34jkBD8k`35#D8; |8[lyv˶o=?twF)thhh#aR1frF%:2sj(W*c[/  A0A Iw?;md#Cq0KRW#Nl^`&qIEFaHD3mQ=w=s_;ߑ4 CcZC TRˏ?̡aܓfH6kp]ܬ2Ʋ.Q \Z;]  rL'Z%RBO_ŕzȤG5V!Zk5ZfRϸs?WsEqj- ;qusf( K\0ʪp=웷h`P* ~Hq~ ZA6´VӀ ^~_2J@ĕS;X1&X4jVCqxQQNfFtq1HB8~Vrx4L&y6z<aj4j1%ޞJ= SƬ5Y jCqYʅ> j qiH%c:N{xW7@~-)97# " syBњǡ_Ci;b!~&4U)ʳk>zmэؗ XDa(d2Èi& z2HlXg #n gZ3֚VF|.ӄ f z+.2YFX2v[/  ,y ZEQJjH1: Mc9syRJ9cbƌ {o:18Fx$MJ$ f䚑bT[(QBC֪RZ n6 D 4VǝE!5v6^z_~_$ 2]և*D]lȑ>cyBV;KRaT0*aq.L+uT+Ì1 VTiu4BHFAicUp@QZU5_:!{',(,Jz RFk1b`LdUz@둕" nGg-gx0vJ9 ?hԧ>uhg?{GWP_B} ;e"0 @KGWIK48?~2櫗] Cnhk{ٮRJ*mgwZ~_kA3B @ {u24+cRJ|?}e#ǿ$B0&x8I9ƣBZ@81OqFcM"$˲,0.v{dtq;EVVu$YoGcML]&9@ CDDY^[ՎF^{-/7'{=,ՍYWVE):J:T Lh<9Oh+ODH )+ 8Ji3tgv6V:B] @ GQ0#Mz Nϟ?oWk[<<H)syx8?RlhD'LřJ8cFKL]N2֖Ua;Оp;Iv6G:xOcO?=SOc_B} *a& 2ZϚ}szW;>̏=,89gaG&#Op8b"ygj+J[(RZSu#! cl!j%Zt|9ۮэd|p@ k $ZiYoO}tv,KkΆyuǶw^7h<"Bqyu1$D !X!lW]e.f2V|vluDD0̬qZ!F+WP_B}peYc\=9;jtiv2h<ڝN1Nr9㌪DZ7ݪ*HYWuǑ֪"4-^KeqЉ) u ` eZo {0LDdQ!L?ӟ7Ƒg;<̬| Fr ,TU(zg)Ϣ$( !ZUQ#(J_ a1<DՇ`-c1:Ѐ@ r_xavxuut:u*c9JrĉGo!ыy1Gl'^s0K!C zq{WP_B} zQZM\.b"V tvW=q[Ӫ*$u.=E1Bރ{=`0o'VꢓFރ5J 8ЮCۛOX a&@ Fur: d"A8g! X8&[0ZJ >cccNg<cBsZ{3O'Yfd}Zp {u4>8pZ >p 'a&wNyg|:Zn"J GIjeS0͋\bQJ=&к*8gceXѣGz^$eB0L,/K/+>]' Ƅ1I97~1w %]F)Zo 9E(xZ)*ku5cRYȑH*DhYIuE 餗 tk?}}n1!,W7gT]0e>9|ζwCh@گP_B}  wXNi6ذr Es:u(H)UNwiU-)Aq:urѝҟ?>ݯ׶>x2x3R:;p8<~}yi IDATk8OX,;ul}8=dTsA߮Jwr7@Vw<&cY;RP"#))Jc@$ BuR ao,VSoѳ[/}sg:UU9笵9d2Ԟ~GL,rF+Jt}wWU1e3)s\@ ]28P1N #<,>qWe%#=f1! <9 ;(r?/8zt Ϟ9$BP&t4Pk'Y][;x"F :N92NR@گP_B} 72J:țc-+ʢ4;yE(0F:(t*6K*HB~qN=ǎ]iv.:;vuzS{Li{|dY}x *uPs@ ? zm!}s\UU/~7/0UY7_A8ƂHK՝4KmJL)G* p'^7tH&zp{}_; o<{'t(@ a?D`Os=~ _SW^?OߺC^F8%ND0YI`sYYbģ:CxN-J;T&hW#ƘxLVaYK ѳ5'(ʂ¸8n}u <`y(A">@0'[';0q<eܪEY8dqb#@!ٝ;LH1 C]+ZDqoe9=@󢪊Eu4KS8yĸhŁOD=na`E40{fzL1Yy㪘kFU:`:YB @ {(YUrX4kcV׌Gh!lkkZP "8;ՒRR{qW9>~.B:a~VKi4iס(Zs?hԧ>uhg?{GWP_B} ݽMwjYVeYA Fp0tH^JΉ`Tːtx⼟n7&Y]iuفQT9wu8uϊ`z94@ K ;X?Xah(x|< oџ9O~w:.iqjr>=|eUC5myC8IaԋkB} +W`O=nߧH AKJa,DvJ[E'Il s A9rtwZiDh3=!RZ1Qz T۷Ua8;r2<@`Qn'@;v|Ҭd DbV*(:{B%x˯譊h:g/1QveUhUOSB;84Uu`"AC8I@ j&}7:;kVi߬2FRJN?f]kVNX)~w~}SGk0<ۿ<|g|~z/"(8(IoFJkx백@!C'3?{; E}s /&JP΋x= :o-gZQ KxѬ9U1!;vw\¤*u"J:Z_?}޻|mρ@ sWp%+c c+[ʑ#G01%`Taa)9ƈzkgSZJִ3 #i{)uYwݵ|N]@Ӄs^gN{ _v{@;ˇP\ W[!8 GA^tN)ǔS 1Ҳw@7bm]ώ:gGIӘis?vO][<Ĝ8)Kp;ܹ-ͣd}'zF+뽪e9^W+S xYɘNgOkBo`BWg}!\ןիϙSx[ (@+cd1By0C6p5 ^\|Ow>O8wg;!Km<of9*m[w^}>?7 A"Z~ˡqNg<u7gg_L&ۛ .:i{nԩ{, ERX~ˡqt{!^r1WOΜ$zۿX^> ɭ\}Ν>89_[MLd"+*t )Vu9Qj+n7x˯+8uY!.TMtzԙ^yԩ.oGNf9 TLvoN/oe$b؋N,C )h|xoɘk޸xٓ!ܵ3}{%[ׇ+] ;)"*R£TjWj/0.1(LfeQʲȼFYDjOnhyk1,rm\mnѡ<+'O_x;h,C@>" x'c={ Phlnw}~o[|獋ݮi;:db2u9_][{Hx"(0FEsRx2qDO ,!圐kĕ4_p^7msя~n~ӕU5L~_#xΥT_◚/+Y'~.c`ل`2X]\E7 lNsdOs^(o?z;,Cw\9|_hojpz .]޺9^> &0Xn|>VW3"B)r@@IҨ#\K)FWTl3,G4tWpj>yS'fӛ}1VKYYvnX{ Xh@ wupJaί=9AJio`L2HS퍣ǕCd$(A52A+$o}4f8nu!Nw2b')EJpқ'6N||Czc  _xC3@ p<쳏=Xn'7\iG3-9^I=&Q9x12`Fge|͗Zt?yy_/|AWʬ { u#KDN¶ B||D %eg8g "9Z+k}cBtk&8(Rͱ,3(6'"Ԩ{g_ BFE֎յ,"gLyTEE nlRW%%ɒx>BpDuUJEV+7LuJJtF肼Y{db]w8rX] y-:8k0&rQ"w8缷vrY~<ٗ6VV6+ #+0Ah6hYߙy5[d'Ya0햃jׁ 86]nсr2ꬱp/>K͵8 Fts$lsPvW|t,9$Jaw{j:@ѺZ~;[h:[͑ٮCLK+ 8Kzkt3o[y&iǃ9uh>l02s79(msݮC'a[v=:,!\£d͓L[G 2EΟ_8J)rNDc( H,(L)ey8ӈ'Iq,a3C7M>cp\{+tn90F_fb]Fy>9[+ծü2,J2OtaeYa !ODYn67G~8M v]HNi IDAT`LhdeY,ޚ k,i0(㬖`<]#'o_ol,(! Y{z@ Kg&/Ҭ9GBZZM(n?~ƒQdZyQb+IY cD@VJ턈U 9C)ѕAQI\i9Jcɾ8ؚhtkmkeV ,FoECOx44iv.Zv[t G*vh6k.#]&A[rЍH:crmĺxPvH0 5SEmuT۪:c9,G%rYIw xeuww 3#yn$UJ Xzcfeueww1܃wd^ysN3`͟:=`Xs%x\i,6Vbk-1C`9x뺾iV~cDdwݤ?uDu:-Cm^xEr>/.t4/ u c+~>F5F#6´c2/%r觃,-wr]C%-px Qjg{s Q/@~\!X>[zeZ>|dYivr]5] `֮C7Kr!c{_JfZ,M8#xgMm;!|2 3Jyv=Kym,{+,Jk1մ~_r; ޙ BƓi"H[OxVV2Q9@Ybe_MҥJwu duAeY:4 v_rPŸ+NP>89+)hx(vrcpE [Nx4\`w7ڣ:o~嫋x #gͲ.uX$]:8lԮCsd$[>5er>Ҥ]ixpVLD'3:4vY#M#kgGMn!+clOzt_V VSA#{%FtASi}^r1mZ) DXs&y 8DDYn"-'<ʮ.i\16]~;MfYI`#YOF^k.lD}C㰱ٝV:(7^iсS\Kn9XvwvX*uHbmס~5BW`dLduL{tXd|F)@DU*VwHJxi+q?/4ODI9Ok4|,xYQQLy!e,:~_r"" V;Y:1y1QYW`9_ˋ,1@pNGW.;@8!jYIkMe.M[ Q1|nׁSm}!9bfi7< (c<2 J*y9X ;0F֞d2QL)! rn~$,n%~w)֌ÈPe\Nf9q{rH8<iVzc#=}tōkGNfYVҥF^lKm׮OPB[CizSku(eVn R#i.eJ6 tΚ`\ox\/Ce(Lyy-2 38(KP9&aQyS#6nڜkkXFn71X@9A )4+AbńP}hQXpui)7J@҃GZdbǰ%X;{c@E1vǎ݅ Ċܙ08Θ5D֜u<Œ!rNQBxrl9c7,wlظ1NB Bf"`P0iz2dVsʬ2>^mL;PB@@30,A^Jpf% 62RXHIa]ljF,VLagNCJSq12RdPoQ*Yc5!˥tH&CCg}z@%#w5P%c7=s}Rn'qmyQYD> &|SZ}^d* "D7nU`VH8PidP/Ca EePš ^4 6Z@@* 2YNco.ðoR>Q]ȘDL$tȬ#T+9 Sd #|MV~ m6p :E,7>8N&t2B#a|0yt-~vB)Tx~kV!<0(0eKIz|!]N3!~Fb 4D^2e5B2t;(2`MY̘!^!\z8#$-%aa!uXR\#~i0R!rk XX vk%*E'ȓ}s,ÈԀ1k fcWvGFLfhoivZDV,M}4)Ŵ7^GsăL}^d v@@)*GVO¤lfRs 7G.7p#2t9D wy7ȵCOڌN;hIGI!򥥥 *`ՂY[^2e5<^/Î;z42s55B[[0L'aR/C"L-0^JzA;˥(s4ƒ΂֚ئA%=ctJ@#̹(v'jS`,Å6lKX(nK#)ycPUtg‹o"qc= \F,S-c(Vԛ!Z/a\/z Y/C2b5 aO 7^i $CqCT07L3ccak$cQ/@JǜՕ#HL唹Õ&Lf۷X lAކ0>?`2|@-2(t5y6vG60yp8ܑJ^8Y\'v:ܱJnfXY0qcz@y=s8jp8+: xtI2"/~~ vF7f`nf2ӁUA ^{ z02^B]|_ː$q%f25 $rs20/F^ЖR:H4(Fi(n/WjI,MBYxG /Lr,f{(2`0xDvc5ԖE| `/* !‹'18ʠLXЅlt\FB`+2֧^RR/A^1^G֪tR;ki, Uy\/C䌱zA+e<)A@qm1`Ay~#RJ>HkM hLL4c"'1#rY^J%Qb(BhĆ[[aq(%+nydu4[ݕ=syc(I]Wx~XSxtz}0* p0&ЅLKWFB RzZ@!u2z YsRcZ/CMF Z+kIK)eȒ?/;kEX)`o4V*g"I)% O'z!5řU{' D0@>јr'M<;ت|;_Kx !ɤ \V"<ȣ!Nr8 B(B Afq3 ʬ78W Leh%ehzP{Sf1uz S^/.U0JY18%8G1!FfRq1!yI.E0)!s rݾA'KBh; <n0Qim`ჶ88F+(%Rl1ןϽ1`f}&^!M Eq{A7R {!uVky׶)Bu Eel_T4I`yG 1!c\%&P/Ce(Ly Cq 8AX5{Y8~SY 7AKX(m 2Sx2q@#@$2+sһb-`d$2bBmA t1 V*SFw|5y*h^dXSx4ڝp-iZq&ҡá"1(#]L8 O{EGV ^ So(%+pօ\{Ňw+$W2^Yo AX/ц͠4\sM2Vwː9;ùWV (,P\^ؘeybu ih12Aa4\w(Fy.`Rj"߿o\?.y`35~Y>y>r `ˑ,9Ns8EV J+l-qe<1~3`qϋ'BdF)@idǙTz4 I YFBBn+pۍIO8R/~۪b`YY^o2MHe(|d &)͓J PyH$dq5YzN$BμYڳ봦 Ci˓IQ=Ck/t20LH[o^l?G=['<]l=tJn; &C !aўgyn\B3)S &ThcZ l1BB"L!Hsc`BL&SeZu=s{wZJʴ öoKWc1Oyֹ|DU ڢdRa{{OyK>󡿭0Ee[ \o^E 0vWy6`Zo_Lø7j%1zTa(e(Ly YFlI4sBpEq?Pm6Pdɱ1?gDH_R ṐE[kE%WÉr$:GIPCqXt2 •o:A7MOo~uTX!SݵmWJW (Uo=k-;0Xk !3><`G=2PM'z#B L\a8XbH(0s[$)Ơ I 4,nPFV$N2Zu( ͎3%o\(Q8Z˴1.؛xoW{f&F.mql>[4p@ CJmxDkwz< "‹F5B?hyƸcr~c6#5%`(Keenie<9Q q/ꭟG-̓ɠY)vY h8hwzeN}߹՗zO+*CQ۔e@`8͚ 1i< j"˳u$I /w&huzPqeW(4+#]C!]hRq^| 24=mmp>WFKavwB#T2Z!pp4X;}!x|YKU1`GzAg|ڽ܀`Soڭh\/Ce(Lyoݰny$Pdgr<>b: .GIΥ4I837.mڴقH!LT-GEBk8"B|aj!IQ: >g ~65;dY&0!&Fw><~??g)2L+E栤K tA5Z`!^LO:i? ,*s_;{Qv;Z1N0\N߰}];U塨z˻`8WKA ʢ A7Õ,;7]w3TX df;0!-/(ٕq=?a3)eN AME2>VYzZ2G#ٱFA3MT^m6[?<lǓ6Z$rh/~ʑǚ60#5C9YGm13ad4tis><~??o8a"ɵty8MQݷiH p9e>t9 t2aˈ?ѥ ݰb(O/z}Y/Bu7!VBeQ8,ݻ/ G=8nKU \#X@h:\nk Y&@XZAH5VRPد7چfxa LU|羲4*7B* w}o-})ݯ^SaZ%eP\ñMrZAeVBNAX ǓcLi5`Qc81Q2J=QyQJ\yNɪPClcȡ,P4ڋ5c1ywx>/23k p SN18C,5HPH,M*Ű{ۋ폯⃧|?*d ̔aܑIFB0a8/G{6>WVȐ$)Tz;us VC!fxo |0_=K:ݮl׶,K7[\H{{l\X AX& ^Ъ&)ef?m 0Z^88/.x[ri{'*BikzP)/À0~K~ WKZ[!FQX2{'֨j%uB=0:&Oc Zn51Rwb.d43/pZ~KūnV^Du<B >nb[KqbH#d]WV |L<1@r-޳k N(L)S[(B6>t9 ti:ژC2OrO!ÖKM17,Kb`k3}q ݅^pUCQeg<gt/\C!K֤T^F$}%ژk>ι\~_+dpJ71 z8cڢ pbw+Xd2.9><=Me GazSwnoUȀ0ry(.4Z/CB1s5!ynkJI,%Y)Q`)úEq'Qٵ*Gͦg &cl, L Eȣn8Oá k B)l7W'i$bN1y &X躅Ξ +Ph201pbT0on8fbgQ' ЀpU YX%Ji{kZNk3|?oLщ'? aRCQebÖu;O:iU1d_LF/*GC<%dw|<+I8~š,\2U(w/ -Q8i)$p8OeR(=!AsƈPvy.1XkM0cʃ1 5Cv*k Sdd2]ҚS@0m#9{c@5tА"{wa!c^(baJHPH4\5!Xk F=o1'UŰ\k37y˗sy3^)L> m:XZNFٳ_GV+8Y.Çw|E`z:fxo$ƇC"k0eԳ_rNs/UW!,.O}*σ9X<>iePyܠ^”aci]R֚#ysuU1y(.Ls.$єR SD.\Y].0q]!6~YR޸{ݞ-,)AJiQ]4^o֢ <(&n44vMt>< j"ΔExٷ-{#8!^2,6~y.a1g?/g_tLU KCNamo\wYn>{vwxY/"g!c)&tqQPS8p]FU ([0,n:SfGiZh2*eaINfgjm+?wmt/Z  / u] 3PqXݳW~_GO}y_4&,~z(>aRz\k n2AȚ|ZKҹyePJ2҆1=!Է?\F1, F# 2ld֢{tiNVݤRh<1_T063/2;+2z 1 * hm;=ImAKecv'2HVwm]۶ojDKR6L_|?xq{s=%^d|m}3d/(nwrh=6&90(Z `DP&hӈro>< j(`TxCih%!c ٨経e`( %T>|ſ+ 1@ G{ҍģO}o|#*0 è޾< a@woݰލ00t<7`!Fx!0.b g ~#J5gyj 'k3-<|2U@AggyV_x|+/> ]]h)VN?=7VH?8N$ayJ6 r0^;߃x_W&qy;*gxt!8ի?)SNO>TPy0`?xO;*N ZKB1DY=<1 q\XZDk4mEJrK@8Rh)rL[7~R+;}䓞/_ /Bv953{mqri-d2^cϽ1@ϋRZ (0e`(Knh&z4vC2<ѧG6[]!e# 2dVs,Ð#r/ç?wg U1$Ą˯{gdz^kȳ_oAw*6Æ-;؇IE;nq/biV& 62RXHIa]ljF,VLaG 2_]]rI8ZdR "qQM/xś?w=yu`voq46 T uW֌jp(4PhVJ$-/3վycS>/R\[x0J4U"u1!ЅG3 SBBp4,,q\^Ca}Eo//ՙ4Ñ/ECOWw7f8gI\!p)À +dg ++D_M"2$W̓HqWwoVX)?< 2DQ-P\P2OrŔZkSΈע RdIm5in8 qJha`2sh"2 @#ǻx䇷ĭuKSY($syc&Fq"3`4`V A&ϧ< iJ2R.r4Q"Ϛ 7 5F)qspB@%4 Q""L(?+ȿs 9%yYSzV.>lv8@%4넓ʙڀh^|PM ʣ0vڅ5ᜇaeaau;nyQ?7B3Lԛ,bdCFN{m뭳6FOG2L6lrlt^W! Dpmvu׍蜋TIE JAwqyi[pY ŘYY2 p4IEC:W~ +.y~bN;nZAt<1˜4( [1u:m"@$1J#^:lG+֍@O6z*9Z{vC/:pmb9 0$,Ͻ1Z"ř#`,J4\Ѕdqᖑ..qJ dϮhlPln`m@Iajv;~U1Ӱ<4ΥZxSQ!Hj+Ҩʾʨ2yUoe}'o3/X6ſ5if:S!CoC[o= HcъRr/\(ukRk/E8yHܹoR>Q]ȘDL$t&ɺ:8 e#2{~7]?~WR1Ƣ<=+&5#\*x|34*P~o42i"Yeosyc&L.B)N-<ڭfILrCNӨt9UPH %y뮻cZo_ Fbꭝ|_sk<'ĿU 4Dך2x F t|ǝt7Bn<`M K0|wRdZMG ^[Y_d1c<a+m,aU C)U7=ʳ q0pX&6w$/,Ҹ\*k"o4m7f#bdb-1'<>{igk Zkf&i 7[A(A0X+3xp w[ 4}ȧVX4{c@5xil-Hq m24:5BX[i8.0|Ϝyqo;C:XEaWr,W4Y[Tc,QC!-`]~fuiPavo7L2 ;]'>/\ 7{`M@R=w}X k3\o(.GS UPr}1^Imnv^e 0Vwie0PI/hg ia,Rt:*@ʀUƢ,KAf;fBk9kjvz[s-7\GzcjwJ)~?p8~ L&"QJݖG.Ck/na\x{~s#H6TkM1T"" 3yyy-AK0.p8j`Y[/. j%n5 67Toض0PƧQ0FA5 aO M;tU~_z<<oܹ{{diZ/x{A{{O<[r]Rm,+B"anf ƞæӱI^0)f[6Ll^)_W~Uo˟=)gRJ109Ž.38kvA#Nf7OfNHf8yc@19w҅W^#ZHTHucp!3^x_mYp1t! E`#̓^k0mt2;7m;l:-]>1-. ]F7gi6Z-޽kb(O>ﺝ9HkSaV#JIy0;H6ZcaTȀ0&+ YoZN0,l82h/K_$DUrRo$NP{rQbҪ<.S= =;o7}]U1I+À0P6Y@E#heXm@7ObJޝYVz׸]=ӌ "-Ҍ*18D4997'$Mx3\u8c#HT$"N DvytM7BCb]~o{VUu@ m1`AAg)gĊRfk4Z ˁ2k}?"JRu?wg%L(c9#_[t,$F@:$nqH9[@hgVo-؇^$FGn9x`^ &NwJ{X7]~w|ON?oG?Jl Ri?~o.ڲ2ƢI3,GinicT[q)j&Ccf9gJcY,@FYqRI^ 2ό1Qcf4X˲2PJ:jaN᫟Hޜ %O dkO8. [NPޜtS5/z5Vk_uo/u%i2l;NmLDc#8P>[;KԭT3nCII)%ed|O~􃹍[- <T[7uSehm.j,Ju׾ (?m2jj .~B*u o5g X~g}vci:~4Šgwݷy&Îz?{Y-?嬋0O5'wW{Ah 8rXy] 04y 2LQz1Sqp7cRRqkPJd6fQf5֐ʌG}?sǗ>t,rksa CxV?|V˃8?[gv}`FtAQhB(G<^x/25<>?O(e} W_1Ag颕K FG5%6]d?MgsNͰ\bWpi2އ %`-幘d˵z: X3MG[/ \)-l#Z,MavÖ7oDa .*"A*#h 2J{d\n8x>G)5fǃe {YV4u dHM!Q!Q1F5gC=a2J X%YQ׍qg6Q`́ݟ?_G_7~ "VLgfkCꤶZw B{Yqd7<&qpwo_q]j̴/d4]EQLW8 oǿ9KPHCT~\*ct\buhui2l>ᴅ}jY8! 8WL XIK{>qUVY@yuh%p׾8t^w8F7k?^;nyտUbdsן&7u[NrsϽ䕂q<.+äSz׼~XZ.1O}:Puàr= T,mf)x4MhXcj0RQi.N{1@\d|{x5Zk,?Ov3%# Z(-a6RB83&`i!/k/pPGx`_d k_ٹ/+a̳i.1Ƙuݲ.EO!jO?s1gpb9;"O6uJ2fyP0;KKQqΉenHUQJIiu!X@^ҫ>SOSǣVk&.g8ښ Aסx_ەŞXIẌ^o,q!k׳#7 ! @@pfE&\A)=w¶ݏ)'ZujMo7n6Zw.YVbfj0dM8wju]vUuH$7ux?|K2L:dxk/|"FҫYsI۬{{peWMnia܆M~j3YAM &/dPkEwL` hK aIyy5B;lb%~i3dMd. {LoqTw?#oq\חpi<ThB(j4~XEVkx5om_W>[R+GucM}{y3PR{}KM7NYb3L>dp4u {K%fS&j0~X&oY^>ї\}mY& i25on>Wk^r5%hç˰vuPjNvo+#K!s>]fmw]G ATv7-Pp\r`tsVt7\,.-EQ4M/{oOjGdx{'_ho̲<1 "F`p8e Sp47B~M+%L*è^H)tӴW]4nΎ~͙smP[Jy2OiE! >$z"O>YC\wK5e5<&$ zg?Op[},9/zmYMXi?s{Z?0Lˮ޿ξS |jeupg F'n,zY|idF*uLXu0@ts1=,3pG4ڛGAu3@Coi/E~1F> ,jNR?rߺ-,?D+Nn'_k?W:I~ ]hН|'?rtfa"G#i'9p8^mю!Y0s`>gfiVBbu޺7~}뷜3 ì\XQ*Ul=8*@8 P}#wZ,mJu&e$i^Z+EvqoxRwz6ݥU.܋.֛{+,`kjSzN`K^ƏъR6Mu?i=ց­BF{c4ti盎?yeeoQ5!hbEMW;bTW @Um,i21j 0i]/.M} rNuo$^~|oܫaiI|T B8³0Z9-eA"/$hUH;+|?j\G,Aoy6n>XHǽŹuιUIP<1vDJ3 SwyԚřQX#: ! Ъ;\mxH)/,\Q^ίR+ʓ՛.K?y_o'wvustqkmFdx`t[OJH㸬 SELuRgk~Wi.KC[޿J;rC5-an8nҾG/o)+äYm(g7 jco^: 8Xì}Zc߼h$Y;oyee0Fgœ̇T9^z~W6ny]z_'IYdu|aIR $Qnn;̚s`ToN^gfKI /Je,j/lm~sIJw~K?Z躭uRA/ڌ\imB%HCJȤ/*xsϽ>Xsy˯ĖX9B5Q6]d!Ox`)=87R.p4C)OD@87[V^wќQv:Lfu&u uA'0u.PZpW:|Zu}̮76'pRd6F 려dY~m2B@ATtI^,Ϳ56 RC5eVI5k,,bcNǪЬGyAp'6-EM:gWX[ZsquOy)Q?~cT-$ԑ;jDpe,q?.B(Ggf$EVZ=nÃ~~X񮯞v%*%5<&>՛.hBt!`hi(@zKfk33Ι# Qj E:_5CgaO0Fkz_Y"v{˫ׁR9< 5tQbKf{ `ʜd-EjШ:5χ"RJKusr)pVoorC؜30z`:bmO$JRdԥ:^,lڴقDʥTaSn:ff(RiKx>_RƙkqdS0"lqp%fyVX dN.-|tjrwq3l=w|~E|d<᷾tigaҺ~ k;'h-}2OY;n\EVy*3r IڦK&_C!L Pm$If4`UuyuV7UAU|L% &_r߻hΨ<dGq=OkMy$כŽ~kA s)%Y <'),"n?nQʀ>cZƽe֜TaT02 ]?jnG@Y>E.3ZUtj3 j3j3Lff& =f\Qm\?TU?Zkn| r^s1i]W<&f A5˥!z==e;ilF̭`M8\iSH@<۷΁fk11clL5z &e^F2^{ϋ,Yeׄm9egE!sRgs]xx3ktݠn@N"O> EQh)6]6]0C]?Bj3Lff& j3-ׅFpVqq(6pmI~LJQܦam +63.2"k$ל\Y8B0Vq.; K(@ha...Xfǩ2S Q%|8:[7mzsν7<~am GfX7S ҊOFy ,A26rQm K.-*>>i:lTA1j3L:fA%Sf\[d<\!Es tyyng@5W$sGxQq&;K0/2-.2NPF0ʲ1F-hsBL'B2 fWFl- |d)^{!T<;v#T̤/RHuME ǡ8 }-GMByy:N2I)dsF& Fwc~y/Zq bI2\kfRfyPc\ww)>ú>'r*lMwͧMCN]kT2O9}5pͧ43rO{:_w,͋O9uN1֣Gj%FZ͕JO>U1J'n[ef.:2{ێuxJ3swNɧp3S]ptSE-^0n &Q 6s8ab<ظisk-BKEh-d2~we>X pPFdJfsOI)&=+.<:=K~ PaV*hI.' f yy1NspFژ(ihd'IRB4D0Kp8=MNwa x2UK!Ƃ/b4ee"Kq}pBF)h4[u_Yfq6(D*KtĄ7~ب7k1^{!̺pGkըx"8p8xMw.IaX'RZkSΘ_焂)fp=f$ɔ־+r*x((˕+N!Qk.)~ؠn(5aѨl>ܳ!PkT<}p8{&\cPF+BY= "C9^@Z9 ¨hQ7? <˥º1vvvsXbd:Z ^b<j 9BkmkT:OF̯6rx"k$f0'4*v{[d90!@m2Dz`V.ggv^^Em۶c"u]wuץi vi-{=͗C)P%>om6~1n[3ч>o~_ڙ\ZeXZ%Vk&, "cPJEX :~}VC$La5Bf=BR҇k^w}]z<#xn_ϒ{kL=#JcEBZ h2K =kw&zU>sˉTsQ1T /`3(~@h^(ܬ`J~ZHqk'Xg9c", )?%s#CK҇Ãܳ!\<#Gټ}wugN;=m\?wKDŽG &"e1(˝%֌V*!Ȥ}L =#VXaSi9 ZƃEk1.zf-k#([|f̣}w眮,-nur&ڼ{EԈYfz?Ǝa}cۢ(:0d2_e#&],R&Pª|MC,>wus-X\M :w:mݲ E2Iꐨ#3Z%p,fsB j>-gQĩ_c` Ae2 PJlA!\yt&/?-?}cc M;vm;)?@xUPҙc?},\B)KY :z3ڪ8'8E142p֬{yQsF\?,-D0(ʝ$Y .ʻf<{[;xػoOL BPƙw?;"O6uJ2fyP0;KKQqΉen(-­~<s%~XBjg`iq^5f)ysj\rJFc釵҇C4QӶ}wl= |;_:3<K {6l}U jH5y!Z+#dcwcRy *4K̈́hƅ/V1@Ab8<# _bSwrܔ [83/?]4,OvX=,%F jd D:6ǩtsN"2p\ DpPPx4tH[n*y?x_?@:&B4|;w<{U}/cp[~Fgo~9gק%IYu{ussaa- {fkBO^tw#<رc׮]\pO#dK|_3_cǎKٚZzHexQk1ZcUkmh֣<ܠFgeu,4D(aOKD X.;4iRp8U1x _89,sBYlǎ/| 3'HQs)h2RJ/w6mlqR*b G$gQEN! a+M QƱJY՛҇ç!\,Bgw9XQ@!BW1y`ǎ_Ν;C!Evڱc!\Lk?v!:M~.uRB!iwB!r "!B!B![$IA!B!Bg%`B!pB!B!B!B!\ B!pB!ncEB!z;!B!B! B!.B!B@!B!B! B!К;}:V!Bg1B!.B!B@!B!B!tl8◀6V!Bg1B!.B!B@!B!B! B!.B!B@!B!B! B!Sp;?XB!B!B@!B!B! B!.B!B@!B!B! B!.B!B@!B!B! B!pB!B!B!B!\ B!pB!B!B!B!\ B!*[?n3!BgGco6,B!Bz߾?碧ogKIENDB`hydrogen-0.9.6-beta3/data/doc/img/Virtual_patterns_menu.png000066400000000000000000000570151211146647700237140ustar00rootroot00000000000000PNG  IHDRl\usRGBbKGD pHYs+tIME $ҫ<tEXtCommentCreated with GIMPW IDATxw|uצWBMBBGz1 wųwSO<,,*(P@ U-HBfGؐMlM~>;~w̓sIDD}"PaޭqCQRJ6Ӛ%LrȋҚ5kX2SOoI}8wM.7P^=f/UA>L4R(PWېtRة;K>_w0dd7nLPPAAAD@@ "_pǼG- 6z.oe mi#dq< ,wnYc&yK) QmR&"!f<M[t.c{XQ$&y-5  9us?gƬ+m{JTK""5kՅΧ]=YCV]xmwr]}[6*U8eٓ53l:.e)~)O[w}VEK8LklΌf^7-S-9.~wkf8z2ͥznECSA rxΌ9UnVa^[r( o{z5r^[13/*8`0/ M˻\p3i}=!;;;7?A#s9s5˗|rΜ9S&6/jW;\+q|M?Hހ-%n y=Wlf̘f&OwV>-_[׋ϸ}cǎرr&34|Ϯ/~q]]%]OIUـMǻ\s&lp5r!+xhՀ`v>5ko׳o1̚5rז6ʠw;_n7ISvQ_x+"ᐨQl鸜"+Gv>+=8+܊:W"̘M:S2grys_[̓*V,naӳ2l"FT4I>!2 LGzw{(`;`޽{_S4kas|oߞۻhQ"wga+{T 'n,WhҍiBz.ѳik-UOkscߡlS蚙G̬6uspH :wEhh(y}#GH``5SSSZ\MsΗjѦDڹ|u>w-(m;_}@xxd%>$jJ[6/aZ>YAڧ(H❈9—{?tgoy?׺{>WSzedl~:{`gw^UZa*|=ϼsShg>_و{ +2p(HXX4n`i.G;lٸ7s{?ޑ{t}m'w4 [yGmoW(['dy+ ~XVuUëu+ЭܓmLL8M7׷LgXHLLt'eܵp*gw4iܸ)aaal6 =G6=Wo3wUm]թ ;rnmNd ðQ3lW]ta5k^ "ya//5!::rlʦKo3[as׹r%-ʷ܃0:[T:KyN}^9e˖]݉8rT2VWk׮e巳6nƌq6w/>:f /8q͚57E-%%ᗶ [y_cWYk׼߷/ق9 IJWtBw.WG!b[h_ 飭о/klzd˷9?) {8 vg)))f͚2 JAl2V ^+Eo+ޟMV_HPPn]G Ӈ>}8,owkK{gU|nu]ǎ] [E]cEXQ]&x-q,\GLlGŕ٣%&6##!q<6#91.1wu\L&Nh[*(.5jT BᡜBnsN㉲X,L%Zj!!!ey6WY{e}p/тǎ>S-2ljz]ޕo3%KQv=a]JYpfPjqӺNǜs3@'Vr}~A˗oٜʒK]n5jTCUM@`h]^;Y{e}+ )))n U [y-_lٳ7ܢe;qhB_| ۉcE/j-3ْnRjvJ" l090>ril>cbb8q5={p #G͊`(p3f(kUa0x~Cy걩ϧ\z\>TxY8{6`FGRR5?866Vt^m_¹1eʔ"u*l]>gNe<,x] ܹs,avS~{2l%9L|i5wZL:iyLW,W3l\mĺ?6[9Fcߺ7: /a+*sWpZU?}=֓o?ġUM(}JZޥ`3sa.$6f}Pljw}6૯f]qX8=̙S䴒ds3l`ͽ yiЇ]{2e [y|} .eْ/>kU'svYxt.m$eԎBud,Xoi|m%^hѼ {5sew8|Yʒa[XV&O\4 9ٜpd֭ ju|&N[琨)RvAZO=ZRU^G4*$VQQ;W^]ʰM0174GWe\a˝{j]@&ou-z&_kYl.y_-E3A&LP贫tzȬ[ &Ly0٘a)}=R6Q jG[aٙqaZYy+0u%]Wޠ%!PG ˰ٍP__\hQgܸq;`8kxbbzk#{f1Cwe؞Hg9?[Va[wlX}˰Yf4fFi5cFx}#.uϟK{q_^-H-imrw"u7bܽ3iW +ۿʝE>.@`۪cw=2xu{JZmەx m4L̨Qs46KH>D.Wa9>ƍWʬ~2ȰYsɰ9 .4~B,hVMسhϮ{l?+VNP>l f#.M/!̘u1=*_885*_Ru`fԨQJV.}Ͷs\oaxb~tnԡPG=7h-=݊w?C.=JJsn=\Ͳ)++[{k0<`)OO#>19&m;u o 1G]aIS'\u%ğtb\x`\}m3-!: o]m:Q>۹dd2myu̢c+l+9{wLY|l{͸?eV-;;cCnf W3 ߓږ;}֧҅ ;{ȭṵ[qw(|r?>@  P,-Oko~gr묬,F#7?]y<{={wlF Qڧ?̣>\2f6_dN:Ns̎c׼~[AΌ~|y.G;WREq;ϙv;Cavu',+b]%oaU׊\'e^zu&ӟy^ɋ?|5g^zu&\&Pޣҫ3iٺq+oO_e>}l&9'8#PՂϕm$qCΩl&0XX9Y}=GGrh^I6Sh sL; `^CDzzU]=0s]y'>NOΰ|+:-ڶXfٰʒaG<0x6fؤdAqksyX,LanS' ًsBk̷y9l݇S块MLܹA6Vo~qKYg+Jy^U`^>NOͰY2e9?jN;ٿNֹe_ZP-3l5w|% [ oee-'T)Ru#kGlwSbͰq)eyrH W)8GD6}$Ɵ ' 0VHZ9Z͇=ػg#6i\׼FZDDDs.)N!"""[hhFBDDDD(` n@-""""(`l"""" DDDDqIT)6 pEci0EDB3`զfK5gl6ȳ3G[G5fg^x77~ PQɀ7tFDdZF:uHNNV}W}W}w{}&"""tOV;թDDD<2lR5~7ZDD*eؤPoR2]~i_P}W}W}W&% ֶ>IVMDVy&""RIڶjžGD_HsؤPƪӗG JK6)dd27ˋ1oǟszS+os.U_DDDIc41KfKO̲pT,=8{))s|ϝMIX /-8f."" ؤ)M `Ԑ75˲f//7g3/?.U[alR%&f,K>>ㆾԨQw """U`_donn-++ \n[vviYYYdee~ AH z_T7z(6zB:wT~emդJtvڟ8v/ ؽ}g/+WfEDYǮ]hР-GQ6 \6,COפMxɖH: s>n?:)""U0`h۪ { /<Yu{4hY&tGRҾUM.0l0B#5a䝷P|ج-Og)^?_J>! 7S0|v"ZE_nFt҆fup0;~֪$8s%&ӵsk fɃwNgXKyX_Cg_ln:ѣGKÇq]dZe{X2ǘGk[:Ogڮ}3%f~ɃJH~hcǹDMZF_ :xkUsQۻO$]څ:v%n $C?nlas1>/aG0$dgU!A6߽ 0z0(b⟇> L&&ɩ !3NQyGu^p3})I?Y83FqZnWuM5_l;ZGq[cbt'6n0p'1,w"e^iəV buޗNqlXgeRzW͕x/NmXusxC|9c& )UK[q/ FS7?]re+nYE+/vK?cGLۻ-lWn卷>y;̳O˲ZhQCzT-4~ek1b4CZ1qՓ} L{׷nlvKg഻1Cٺ4(;!T٪!Np\zOp48;Yl"GJe[3lf Ԣ6䝗gWѲ xՙl +|; }]%Ͱ<Խg<Խ.j2&9I߾QCzFgg{04qt^zu&|M]S sSSK֭)gZj(8&YXY! ڍл/ֱxsY*E%נg(n!0ZtDx@*>;Csyqll |ҡc~X%n/#{ˉ2l9Y;&3ޢm^e1y`-.V0 㨟/A{| -im΂c`m΂.j?AG\j+?a3Y# y 6'hoﻔ BF ضۚPI֕5b}rH")UkYXl|ChбԲ\6D 5L{J6ب;CErzPk>ݖaL IDAT;mլ__yTܺx*߼m:9=Nٜ'[}y˺3֠aSN8,3MpdE#WTŗޡAæL&4lʋ/R.>o\1/aX]כ]`+[rRmQ*0f$qa;|ʘ|-G[՜Fw5 ؼkҶsMNo9IzˮP ؕEJw5'f6 N+nz+M~Lυ)i-9Ӿ–QQ_7Öi4b("DR=B]֧WpEޡi׻+!8oQїMO7(0֢IL=ƥj1а> ~w^/XWV\Эyوf~]2JasEeʲNh`ɰPeeggSاGnSλ)* 97-T,i$_TŒ̱K-7!ھV2ۚʇ8ؘ^&1dg|0 Z xҲkɻV>$Qiʝq sWp$V?뿱? \=~|^Y{ۯ9qDxxSOl6[DwoT~ڗm@{v >]vpi[aܵk`0Nc4%n1mk׼?yx!y-~޸:; ""R̰=ک'/>@갣{vq[Y}*ݱ߀r{6-Ue-ڨH pؙ{rP{}}0]ϯ{yycf^DDFV{rVUn1C!Kw{m̸dj'-'ʝLRkTʀTx3n´|Ӽ!3}F Vv/=v YYf׊Hx[@l6V+fŭ\Vk,?壝U歈9†u+u͚EiDD}rc!+#г@ D%g y.NDD<3`y N8A !lJ4*J?̚x`E|BFE &3# #6=v߼9dUi$s :֩[DtK.WU siU_;  gTmlY\NÂϖq2JWv7W4e|z'KYK*"""nR~W-N>M=-V (5=z5~!fodwҳN*W'IPqh~!"""2`G^@:)-VRΏ Z>iM>(`seɰDCG=#G8s\LQnᛙ={,-Ф;f8n5$*>]+w'݊zD߻C_;+.jf IXUs` kECFΛD5;>ͱljuc2o?Ho#n86AiV3ڨ={qw85.ڸEDD;xullE7{Y^1c"1K19NA8ϖ[9}ٌ9V̅[="l۸ tl gO"}  jdr)Dټ~` o`R:fv7pe~T3ۚ1&'EDDDrܵ[|G漽i Bw-Ŝ,n&)j W3J˜|5ߕ},i@L` xl K7 .eA cqA[&y5ˈA=hUB`)6n IsGؾ[I̸nKqں1x[I K.C`j{CfNNhQ9BYlhun}YIv8.]"Ҿn>aѼAYcO~8|$2Mxc[ EDټ 8[ 9;5^M`=^ÒبǍ ߐ0³k~ݖHn؉@èߺ7#%ʿ&b,ft'㣛S;o`6Ɛ[ܿ$2E~io3r@:Fzñdd["""NeجX#L߃p| ,ՈHl;c+iCM iP 5}l^41~][dfJv ՠf;ߕ_ZHRx+ZA$g`&槵`MDDDJ'%{9ۿ) k7&g .d@s+v8m|w䍴 H>eTmp*CEΥMh7vb,",k3IpuXXǚg6 ͇OamAсH^rOm;Ö@Z6`>˞gQ7n7~Guc4ivNXfl";h4R+ۅ(̅+^RŠ-?Gq,w'a=tQ>AhFȈKpq;;נ PDDDW簙t7l]-<3_? a︛iBj QמD$p:y?_~WSPiC^K,\ ^D/έ$vKƥ$_Q0^_o|35i?X{!"""2lR^9٥c?R>ڙ[֐D=:u\d'0g`<61۷pxIe]f" 194 'ھ l~;ـo}z3}ތ$iC=HKau52iumny+g.gqX 'E,"""(`+_үlk ]\ $ S7.u/I=Z .L{Xѣn`LJ8D^GeĠ_߼es5iR&H@/0:Ҏ˜|5w}<@ݐz䊈H ؊ L.w!MiCq̡M{IOf!| p_sltI°(ԽZ8L3x-Ledvg'ة$~;A.ti__7sKn7d,;.ϓ`MDDByo mdĞy ;Cn~PM;胷[fԱD5`tF}gH8Õd^6YF>hݯ?Hi5DfkD ͩo0uucȭchN#W]zA`|}Pb#a6T(:ȊcֳNpv/eY8i6e epQB*"׾Ҡe47 J>e>"""ldӆt `3rz+:q׫mW(V/s>5k=oՂ|kҤ4X}Sgs|%`q>MbC`Z87%ˉv~ϓ;¼eDDDWL[Rz bɲ۴SЊkzr/#". [Q9ͮmxbJ7|/d$o͜IhKm_3I;Ikq7&wЏOqXi'za+GxUZozѼunEDD[Āvnq;Yӹwm2޾ g`7SEWq9df<_|Q7Q0ax tN@(o@C iFͥm(xɯba3[}{qlk#$@A+VbƧ/Jd-j%A^G|r"S [zhfI#bA-^vXXDҳҴ[.ϱ)[y|֫˚7S'""Rm6'fZâ#fBoGZ^`,P(+5|ǁ̚te_v>sNleFO( :H:aNĤ5d3Zj^+le " Y ے+(Ku,isΏ j5#iL^ٱ4~uczR+s1ع=N#D ~YIN@Fwobgxe%mk{VޥL|NgDDDE  u0i߮Ϟᗀ\c"YUdզ]Cn|>|+e4 Nۯ7kͩ?Fu@Eg&.0-K<t$<>el9qKg/w 7}OfhFl_u'ɴiDDjPM*-oFrz]GDDT,C=N3F3Jf.+֭`y|>}QѼxe^ 9}pGsI| _d@mQ&R&1Z(Nzx~N'͇d/ԔQQ3p ~==ؖ@K+gF$/MtUDDQ7 EuvC& ]oF22"JS<_ߒMe{ Eԝ߰8 m::㥧EDDfl ""Ļ2!Dp"jxe>ŀz԰W3_D\ ϙo9÷ Ix*&"" Dg<$Zt7\؏_H/$$c{I<2FX`>$a `lH[ğa散Ѽ7o, <ǦBxe[gV'c[+T ]):$*Rי@zG#7k""RqtHTđh[7`6iHDD萨U:$*C""GDEDDD6l""""MDDDD(`l"""" Dh[:7k(DDD%*Sp4-]r'XHM_2UN:eؔ@DD^OyMCoچGNY,>mHCR6pd;ޚG{Rpeo7?~Xt58^Tae|9͕勈(`1r|E?ZnHQO1;s/=ޅkc"fl/^Aâ,_DDDDk7gTlI/dͧ 9y- TtliꈈHIۨkDbHz6F㈦--d_W\)[:""" ؤz;%&/l})sѼ__f .qjl!D?ƻc\,]mDtP|}Ӳ7wMnAR\Yk&-5h5fse"""% T^W~#ˉ1ZzJvg82^}0%w?`&/*,GY}&o|m{>96WGDD wߡ q34l\Q ĝA4""@DEDDD6l""""MDDDD(`l"""" DDDDD(`Q&yo\.KDDD4*GC 60[7䛸#Q[)z~Qw1^# 7}OfhFl_u'Ԉ6ScSz6z]tSNHb&xS3r;5""MMyoXLyME3Ԡc_C!~wγ83f_Yn|xlLG" i6@`^-92l:8]G@LUSDD&Ւ!%'P:&k/{xΉ3G]5=xqRȄ!7!}+<ՋZ+awi;@M6B:y&eKFZ\{D݀ .g;^3dͧ 0s-v;WYl>M\0+9p![(`*9lL.{%kǷ$Y MADxCO#2vܗwwBe~d}Z7`{N;;Tk""M=xx WߒJ\q>9(Жp$ga=%9 qajOZ1c8acuQ^!4hߟ_xnA`:ҵ>ID7':-{srNъ] t)Wk T/B |5ŕJ?6$i'wb,f,~WnGޝ|'~Mۢ]D{ muuUmmWZgjZp$h-"UM Ƒk&GNDB#61#oY'c\ flbc|8[#Mο^`ﮙDbw#<e8Y\Qұxjש %*ws]5dמ3 k""RnhKT,YhDD\ (((((ȭBkEF :.Q)g+(,Xt$ᄍ]Vǭ5Υ}Y>hQC慐h""rմ&Wz,axc0]2{7N@5""r  CD~m l崩5PD2A[KXv8=f,#64~)38)~`>P=L}kC50| iNM;w,٫M+_OX%,xQ\VZQ_稞i865I7΋)!UpSѯQw3Iu{؞lK!$%8$^WKvj/[F8S$G2dVW{m:DD;wy:<05ѽk+qۨ ~7|=06s@Vk1x|(zfQCF }:m˭D`usə6c̄A %2=󟈈ܞ&wLb>Gcʧ&߾?8@"]Q%`ҿSF¶p&?H%c>Om"d YW3ȻS5'& c_YJa[sد5; 0wLuq"1KGn劒SN}MM-Q6_6OEiMDDDDMDDDDDDDDDDDDDMDDDDDDDDDDDDDMDDDDMD.W5"_]M(n }=; xZס<Q`c 2ٻ1ub&""ׁ]nK&zˈ !_|w$f&{#f,g㣹Ĥ:KLYHylV֜¢3 4kyJ ^$c?\*R3hkE9^ϊ͘n}AJ"qw$S_gY}]'Շ57|-ÊXЎ#93f8䎫6?#Svٞܫ֧4Ҙg'$ qkF6oW>sQ}[%؞^J鱄 *ؾ,Ҵ#viYn*IqD8%I_pG.L-iKTn?#lE>4הF®+f7l[v'oPxԏgC'M3_̾M}u~6bY}9m˭D`usQ>+,+5[<>uqw(a#i饷\Dv6).چ,wWرiI緯>`;:f Fl#( O_Uǒ̮'XV_ì`cǫn225|3s-!D" Ph#}ẅ́\'?PqH:O:5""7DEDDDDDDDDMDDDDMDDDDDDDDDMDDDDMDDDDDDDDDDDDDMDDDDDDDDDDDDDMDDDD7M۳ {;)BiF]op翬[|LqS5ֽB‚ EGeu]wi_@TF)e""rH<ըIߙS =8ˀxs |<1܋;e+,wcTӧLDD?{)ui[?&o&|RڹDmY¾-O2Y C Xppf$oMt;Il<,:ڙ?Ȇg&)>ͩa%:{ie-ح`1 hFo㈲=T2bz kxl%e+m5< |" XEOr`q7c9,%CGHs)>1ѹYK8+<)t2#FoҸ6k3g܋Geu1>f=5!b -6] T8dFBtM * Yu0cȣ_3 aΰt>2!隈 {U'y|۬2;.f>un†`\v{#fSnh㣹Ĥ:KLYHysl)4"LToJ'FLHr]"Bxa4c?\ 'KÐ6Uؿ< er$傗ukԣoZO+TlƬu R#פ8KZbL4N^r3kFѶ䎫!6ѽ~1]>D=s$InyvbOr>Gfdcv:3|8 ];iZw~䦒GX{ucH%:-MK`^.-+kL *phKT'xvmF}_O\ܨX?J}$f&Wnٶ 2N4) mJ6[zTPzdcᬼXՍCi]w7 ~6^8ֲq.E9&)W&F|\Fɿ&X.{sw3u6M1A1FQQ;GYƵb8Uͯᓘ({o &N>m:2a? 6fF,a!,,1)ܶLԾfB $v@["""" l""""&"""&"""" l""""&"""Rak5 w34 "" lR^6Me""" lrk5CMDDDMDDDD~K}לs"ɮcADDD͉zk OFhQDDVl7cZu6K 7TlCf>Q진كٜ>kPHEDDMnvr@4Pt*GW> |4g\^հ4 '5d7]{yC\p^c7b""& lק ~zΏr4!&Zq2=3pFܚݩ4sEuLzHb)UTf\5ҶA%ڿtI1UyNnU*n9>=KW%f佖Ģ7~t+vIF3lZ$fiQ`'+i/RY?3?Ti :obxoNF=x lXȨ٫bu W1xПH2韞Cn$G>tE׺0 GN:qRmK ""rshM\ITَ|N/Ű$. y+Xů kk,3Q1AOZ^E #(|WRM__cb/spTbje? hҡ ۶s&7oݨh1˶:(*spRTbŔߎ{-6'wZfjn/+lbKW{]lP|  Z] 1%*7$ݜ'ivtz%-? gecsd𤖏kFy~KVv5Sv}QP7,;,n>y8-s\SF%c+=Df\]ՀnhdED ܈vI!t&6O8k\2R971zY8ev+.ΠGlٳs?If'."}&YٿgNdUkJyvKkVI!q*wDQR r_},%jDDb5r]HL 0M rBjש &םDDDDMDDDMDMDDDMnȦ)Q`[:iMDDDMnm996UyW̖ 5w{-"" lRNQ`66?IENDB`hydrogen-0.9.6-beta3/data/doc/img/add_tag.png000066400000000000000000000200131211146647700206710ustar00rootroot00000000000000PNG  IHDR!easBITOtEXtSoftwaregnome-screenshot>IDATxyX8&p99<}ѪTE'֣Zmԣj?/īZbQODPp#;@ $@6Yzf2켉GB6,mg1u !zaC^X1u !zj߾P UPлr꘬ %t Ajɩc yFZ2aR\$(-)RWH]x&J`C-EjIGICբHڛlP Q+tijB:x!(y ިŤJoj/}/ׅ4!55ؑk6޿Y_6*VKq(' 6$I9=h 1Dv-\ x^; óH^M i2.eq<$[L}܉DQSSz@kH}@d/kf:xX%H*,)AΨ<+_&ѳj;m +Jˑu"h7󠚻T 8^ ugkņPᄀ( r04icX[y3r"~tиm²,CScH0p:׿FCSC #2@ Ta콄=uO>P~O~$7®&y9ZC.nZ=%(uԞ^o2hgmǏ߼y/.yUZ`3˔,Ͼt[KՕ^+,MO-6.3f{X/ u{'ɂgltolGOs^jOP<U'T}H|ֻézsq_J+{?HDRGјAPD<ž|dͷ.;uG@vpufzHT|xLF#dx|:|l*MJTp\-"vPHRށ?Pۮ+64%!w0G>~#5c'D[uL@ A#D/|~ !z)j*+*$5tut8MKM 4X\T l}E5&~[uHƏ).xxUcH]*E\=s,Y|5`+-)RB]VHje4=_!D/VD^؎!D/!D/ݳ{ѱC[+ao8'oC#沠ٙ`=q}MDž>P5á_D}:^pkB4Ps ʬٟi9;vq,AGK{}>ׯ^I~W #KnyĄmS=?t;69P`s}RrCQ|,cu7NG**:.i\zmwDkOI/MPخ3c-<4UvҤQC.$@O*~GBA͇\+r!' 2$E28ѻE"}'w#o775Zcץ)׊25#9\]Ņc33sw6cY%QÝ+yU~JbAafb#/ݺrm^q}_X /鉐{!-ZRA@v&(*QdyrYRaDnIq>.eQErbw6;hHOuű,1T?&~Y[GP]Z[݂P?UO`Nܶ Mz?9:G(t\lP3ip`Wz-Hv~#Lڽu(KR$ 5;8r5!`@RrhyZ K[]#Uw`U "v^-˸ys[0{L޲F.]6*no;Dž̈gb}pRzv$D+m|# zjk±[{ !Վ K 9\;b ;TؔÂ'5yvk\T ,-lT;85-J>gy3~*?ҳjj5g4OciI!%m;=?ێ"Bin\Qq[j44بiJM*EJ !Zc8a> cZWmi>ۂZÑw iB- C^8!za;?4;(6?f@VY$Hh"<,:*TI܍|pUk6k٥wҌWuP$ئ3-8Pҡrn^+ǯ tYX?m\Sx].j- ]'Lr)-l΀,nK9@ֹ\2 r^?ٌ]%1`Ѥ$Quܖ?m51⸜VʣFۘɕ >oHm [q{mzyCBQ̿Η}+>|KYl=+o  N8]GIJHS9г_6{p~غ)1Tcܖu8?ؠw%9bJx̀I#IʺIl\z->[?oQ weL +|V㶼Q5ma8 +\ffma8 +X-u]Fknð2̅q[mA^?z @^!zaRfs0n B¸- D/KC^8!za;?V-۶ih#n p:|2}s{3.@UAғG_Kn*̡ ai(Rȿu"*5O(շ9&`*`eq N~_}jrq>p3c?6)8:a1]LX%k $;ab%292 ?#6,g\޾zVAXZ)cS,} ρf1yfbliO=%q|v7AcT؎Y`\TIF u$۲#~`f;@Հ -v*5m|Ǹ8 ip{vJ -$H+/Howm[_n|‰|t ͌qqi9yE>k\K,_Mf&F>ۭ-f~E Ҟv y߬137nWrwIW=Tc27!L$u}[cKgۦjcn@޻#}m {;/UR ZB 3 2^+v|!&ɕL-q[D@|E3xu<<{zu0¸w򙼶Q~u`<w8CY!Xv1x.ΆTAInJXh$珄sCsEZwFnqSGc%rRq[@Y:3=y QӓEfϜܷpLngfjbӞ]^$il *i?FVxYP/BM,ή4n 4⵼oކUv=g$g!;LqqJlrҗrUɷ7[^1Kkq[NAX㶼Q hau[T !iR5ZKۂAX>(!zajci y4Py D/ۂ0n BjǜzXq "ԧV$ A,+_fao*=R/|z %E%EJM\{(#IRàbV0><0y(3hn\ъ\cT'>dL_ Wi?@؎)@Qyr۱V O| P$J:J'#Oz*(cjbXL'>j7X@辭2Uܵ"'Om5ߦv.c|xϽ X '>H"Iȁ9]ZLɸbU  'ḢKӗ531}vO6铰c <)1UQu\u_aU^w;ڎ-ؽl/^=næ.s@xS@y Sϸ"@nfLގ\+ϱ|ڛq/=w3ɮQ9Ϫ= 6f(/9ţגobŸ 1[a={WkfuА_}]iR~ _n;Rʶ4yf}Ui)CRX c8f[ |kfW 5=6:vD<.nz@&߽;|:V\=G|5eٿnXtbNz )Jݷ~cob`P7+.eĜ;x",zW T]j6swK?+]ϨHMMI&v _d@QEꗻC7s$͵*tȀ"c{;EkoK8:dXngOZ=9s޷;lYi?J \{?IгB@xM_SO=/i?0`ūŠ3jR}3|׽̪mTI܍C|%61u{6k)֛rS# cET\"6.}&&)({‹ @Vtijfֽ_/OǔS238l홛=w\>]nݮuBӈX g:P[@/s16fzP 2=kίpn ִkEfcSre Y$H2//HQX׊KZ8#r.TSZ:pvܲZs, tU0n2*o-POs&_(f@o'+VU/+Ɨ*[(t{%3E|AߗUT7y@{L(,UTf@gk*~]]37KB\PAQdAB[!ȭR(.+|V7SX^c20;IE5bsiA|D21ͻ^ae(4܆_cf,]ߔ6j1(d7vӷFtvrԭ_?ڳr)ޝ۰1^ɣndA̩(Iz[[8yjB<9Y}S9Z[t8זQԘH}m?Uc=:5m^ȣGEow"WifveyP+4pD{ObCJ^^=)Q}Fp&>޷AŚ"̓ YdEgPYqwDwR(o'ǘ vH @Ԕ$NZ,)KHǦ8r;/&/c_(ӫ.)gЀ^iYeXXEk;T܇7CkŖ1PSE n!1H܃AqE,,mkڼ{<5XXk0WKGKJN;)2*,! --=S>@+67WлrlAAј)U u&c;IDATxy|SEMt҅RR(KeEA@UwYdQf) Җ6M4iӤ͞;钆&Mds'=wbبI`7mZi1z0۰! sz00cX0 *&TA:ry}XGn" G N@0VBzp܃aV9X=昋{;ߔ_siMں;_K\rɢUzC3n74U|XgpʢbYƒm?YKSR p&hEyvJ)[ԹK$riiqo~\Ā`l܃-|_7#Jr#mz?̛+A <&`Fx H–M?+Ku\oR]I=: ,Q Nf56va#Kr/B[tnSi͓_GP.-yǸ#8Cf$ԟTIUcȨX]o~,?/`^GfW9%>l C:{^ oߩ֪߳t@:Y ~⎛`yy2 58'Bh 9pOInsb)^,]!8R]_LzN?_{9A_2 }U,1%jc-Ϟ13g^4OXVoN>.\{D|JtKﭯ\9 텥*m2< g6NO.\x:jX׺KB|vTך |.qGs&_uhMPXjSi/^~igYRK#e,=k@ψp%rKY:MrJDW~|3I\d98s'$4Y$}[bAgjH?Td:QΙWxlS~[[ ,FdoޫkrNaM~Uo;'ݺ<~U@uyˆϫF$bSWǦ6XjJ=S/~eJ2?vu."Âo ƅ sz00ǑOJ$"ooWEI$"BG,^SP`vMΡa{00 sz0094$  qk(5)tz Qg ?r9R=J\c"CLԃ sz00ǰ/+ع~5eGZR'C]mUM7V"ؠwf1gTZD#ck Nk:cƥYۅ`-<gs~??3yHf9}޼ [rh\3 's,{*vĬǮU $`}-9߾t tPZ{ӝcV<koV@gn͛ApNwe {1GlFPvra;h;B=Nc[CM<Y -έi=ɼܐh/j-Zpѥ2%8/ƃUw*Zsh]{~v@H QzM^yQϮ~ׅ2,rh]5hܣ|.^g|l(@]Z%hCE!Z,=(@K[>o_ o.#iZő+rM}cXpssƅx0 sz0q䓩Ua!nnc%1U&T!٘H! C`ՃaV9X=``ՃaV9X=``Ճa\8ks_,01  -i< -/ 0!3+=-Ds1ԃks`>Aoڶ}8u ܋u+{7 K(7C/>>mڼ+Ƥo}LJ^v}iM'X7Mlp[GϾR.` )0!jHEco霫k]Et_C/uh7'q:0.ѱ3{Rb^Dpڹ ,}9ً@M:2Ԑ߃pяTPקoch}cm٭.~aq1{Ƭ[@ur9Mi^Ҳ<^BߡOI; ʜ{,TЭs%B!s6TUo,%!tƛcg<뿫A暺3xŬ;!7Izdx{#5~>l >k|,/U9wcF2R?RRCFyK^PBxg W  G_ 6* hUE-Jްّ̜lq[̀"bǭ8g]ٟdHr691:AzE~|4'.!8KsDXUi;tlQif w,Qx 2:b'&ǰ\ZDT] 2d9Vݮz`UߣMG.;C&{s|c-J1VQ?ڂMq:@тCj 7qg'7n SVai.+2 gj J 7Cڳz?dݛgms IEL(Np󦠉uS؝@tGEZW6:RT*s3G?+?*R%j=kٞpҫ{\铟z BdsHB 4MkjYZVQ{M0_Ҽ}8rhhp=qLX+`RK+. s6>!C:WJ 4ޜbM"~MAhVuUW=W6flODdQU=5Ѩ@ b3ʭk˸zߋkf?hxꪵoOt}:\.U>C=~ѽ|}&̙51iIyJ%^n\’%gB{%z`FA Y-^R**2}͹u+>(AXhE>sKZ Po@$i1EҿO9o+⨨VKwO+KAD3F-y7Ny74MY"۬Mg6 }^r̛ժhh늯=[\5P}Go}Wݽ.Gӄ1Gcl*;í];SOG]MWoo~vm;3DjWeɂ0m9˴Nf6?{'Jhjml GWhDX3 @k2q%RP{Z,+&ԓ8? 7 КFqUYXE6E(>"4%&$$s&ѩ5,_dL/5:"0fh~9k5G?&!WW'- ](ypգi!<8D=ιr⠻ lZØb9~21xUXT|yEՀ+9w 0rXU9S kvFK0 8g*q9X=``ՃaV9X=``ՃaV9X=ms/1HTWX\fRsa6- q)A}D@8gjfӂ[YNY%k/9S <8⍱nഀWa7g*WWYrr\"{Cp?7@YWp=Ori# G%VWCB̜3 ҿNJ+Z|D{r acoV''#]4]%]ZvqƭߐTt&2 axe[wuKf-an퐁$%k[ʵ u[˹Bg1v|_?u}{d#33ORd(KiV00tZ='}F?;WկQwj_3Ϣ }#b3NjOl9rubpHёW*ŔBFpt?Q|{,vn+{j2l␫|jl^b>oq1Ńٓ]qL^e `7VKG'm TGъKk xX.vmlܙ^:_,%R n@p;v ]r0/Ү޴z`np3?iߘ=iPtdxhsV}wNKZ-BC{@p"Zs~<90,721y|OB}4]5%Ftu"jJ¦m\3mtBxXxԐOoxe>Сto}Yyv)j@jٷ_͜3壼TuY黎񕒲/vzuE7h6 e7vyNZvaD+|tgWOwHKs3ȩ溨W3ި:=Hԕf3ER h+8[X|Ǿrdəp`6- #.V3'&'=q!Kj̃s#}O*Te<8[;`bB}O2N36}Pcvpp6̦5A$wa8>!"QI!Ιچ5kI ښ]Ksb sz00Ü{I#6IENDB`hydrogen-0.9.6-beta3/data/doc/img/background_BPM.png000066400000000000000000000046701211146647700221360ustar00rootroot00000000000000PNG  IHDR2g`bKGD pHYsnd XIDATxohTq™-qAȴt Š.KR'mJ!ABKR(N|؍)Ll!n,*K&4ҙaA/M?;2{gNÙ>99*@⢋bU(\tTU"@ZPzmݪ]ur̅U:rB镶vv">i<4.Z/JV{8w-\t1SqfN@Ė7[.A6F7 [XN ?jfdzyjgi=V0_V.n+To=K^ISoKBu+MOMh\TT}t]G(wkt¨|5ǽ~ķ<0s'DˡҎ }̝3!Z[IR%t0yEa_ϟ_́x ^ybl~wrut;!jMkk^U"K\X{wpV^;Zx}QZd/9A%-F ?jЬ^ޗ]R7"ؚdd8o^q49Ze\ޛ01~s-07ߪ+7㛥24sjMBL^Kq,YvMFt2?3:(c$ڨKcgij07ߪ+7V#9vY1]F,g))_d$ub$@ I;dq)|''.b6+ƳˈtJ#)V cVdÌF' kClHmڛN3:wΦkЪn+6X,R6s|: h:"5ⱅ}vWm2U}W#UP#%cIm4fǑ6FF2BK2N4ţ4]fIF44S`\T8 f4=wGrabNő*ő՛@pт$igF"+ Ni$ʽpq$:v"S-+{mjRh,V8RBOvWojrYk+)tbHMGHJ#X::Gzi+sNHnfi/- Gzw'%휐uʫ^j$~EGћB'$n'$[H-G۲{f;s{۵+hzW{gEO#m[$G#x}.V̚|r}9fx"`x t"3κZNr|9F9mG2<Љ Xm_jΏ.ޔ8R.>?|jYO*>ȍvIđ;f,V)H.8lo^[r Z.ߧ-ٻ#L^[Qq/^!8'ȍz^ogSJ/ h)7đ+"#{l+Q$'jNۃKV+8kW464L XqیDdD\0f?~14flSawCzC`e864糾60sCEl7f'Xe[Ϯ^DF?w5v7;Dyr%6LH:1?5(O60=90Нrax 4Nr 9m2S?]Aat=<୿" 5iN<T;2Rx5[WvJnK>8rNIENDB`hydrogen-0.9.6-beta3/data/doc/img/background_Control.png000066400000000000000000000044121211146647700231320ustar00rootroot00000000000000PNG  IHDR2"bKGD pHYsnd IDATx]MhGFfr! >\lX1!ӓ9L氊Â=aqrXvV`͈0u=ݹ,!c.K`b>@UCwouϨGTx{몚VO1@0Hvp  'ƪB @m ].oY(zK[e7 lx,M.oY(zK+XS0 (1/,o=L fRYderH.I#H*q ^"&"vS?WU8Tr]Ls]Z"Z$L91? ϸah vmhNET/A LbCkkukG:ڵX^a~h*(xU~WKͱ#, ufX} }Kk. ]9re5W߈1|ZzIЋypdf;Qd!T0L/"_`zDXr%.ڮa~l9;oqV$X*^f *Z:ycx7ʫ,Fy㲈+v&;gkq=i/D;pw ؔ\JK4av0> nL+D,,lJr]܎[|^[4w%|[jb.u8}Tk2b#GI탉Syⶇ{~l9?P65Z"Vܽ+®a]ݣvytٮa~*Q1bNno V^K^}ۇ0j@e7Y+~qvȦXC\@AQ}X_)TCPץd;8D9gD[ohɛ;5N;s=R୚ma0|TNF qƟ7e"X_ӱV~G4~tE^Wm vl^i@{#%|;"oN=n郲z>LtH~uxK ~>v=n Fֈx$sqr1 X)KY$g) N$RP RQB&QboCYr. UR2Roz&gm,^@nIENDB`hydrogen-0.9.6-beta3/data/doc/img/background_Control_V2.png000066400000000000000000000031111211146647700234740ustar00rootroot00000000000000PNG  IHDR0bsBITOtEXtSoftwaregnome-screenshot>IDATh[]LU> 6`RcFcyic+nݥ+J*4Q!!7ZHYeMCjI &j2&,sww;;6ssϜ{fvVH_Aaj& y/eG뎬6 tA&2! @ Y=4'L5J SD"+e'm S͟:Ѳ F.'G]RZ愩_3Bi0ryXQc4]B)"员(yt*z#5⌁>ϋ3; f -;+\.pKl'cUB (rǦfDˡvKu]D^/h4Y.E ,˲lu)"$IJ'1Xn! i|Y(»XP6md cBHZefOOw;D Koަ#cM a7՝針ghMOcBevKKC53Ƙ xee%SLhpL+r\tSϘ'$YzȖhDS·555L%Mx(Ƹ)H(>GQ,+~(;¡*L+C8NR |'n<>IBb}hm6_m3  ?1V(J4&$p8$+%VWV%`> N})ųXѫԘѫ %)Y6?6IfcQZ/(?0g[***9TF׋1>$zJf,Wa/GJcj(ZaوTyV f} ^WĄecl C"@0қr>'zZ#,d'_6nPQRvb=1竣BaWg!cEk'pznUO ( n/3K!Iȶv\., @[UǓ_G _m'L.$sE¼x;XP۠k+qq.2m͖WF(tv<Ҳ榆8yhn:h#j-;+0j«I&pIN+P7<*+X ǯPHs+&`A}@fr.+Oݷi~k+B:@מ".]տ솭2 P#@|qIENDB`hydrogen-0.9.6-beta3/data/doc/img/background_Load.png000066400000000000000000000037631211146647700224010ustar00rootroot00000000000000PNG  IHDRs2oG/bKGD pHYsnd IDATx\OHW0{S` 9tMSVhC7iS}94eS+Dך.5b̊Pq )C)|!j, eC5w>h7Gpc":RKZ4 R\^yDTН zdli@k#9`v =,,1sj5߫, 0E_xCMLc:g8fj|8g}[}{Sq|>m 'JvHv زp.AmyTDBc4Ѽqk5WzKn;2]?C !ș]"}ho7h?2Mbsき < W?oCAf]L;w) =_ ·:۲,TjːiAA vxns7zv @wSoEWUP Y^{MpɗQǂi'o$W93uIc5L@+ ԩ"~r6^?0C-+q&3VW.gc3!=-LvV+E "Yax{Cqf0V.;TZɳow2)M}ڻ3M@gKOQ(T.B33Ǭ+Eبۖ0Oə 7D L^8m^m D_%'oG&mt>z.7|_Z38S>:nQGf쪍qVENj^|NA38f{Hs&jb lYJ*ё+4Lj4)q&+1L£JX,~hZ)wi:3y93?8!1?6$ uMERYZ4- YIf fyfxvv9}!ۡot+̆gm랭}VPS?h ry֘k3BkC-ߛ]:N 3%g+dWM"ThnLꏯ,38΄ho7rVF]g[$3m?hP{TΤ1=۫grSy.C<b0LB]do 9,ܟ$E~4w{֊'JGLWYX3WǾPCx^&Kw4oíl:"oE'Kxt~IDsEj/ I({#:ULƙad6 ͡0Jq?\$}%s̘\"|ea7mx+߾Ӹ'͡,,N\GIpII{'|4FópeqIr:|3QVXOwkeK,%!);Jv^׳߰y&ovu/ē<IENDB`hydrogen-0.9.6-beta3/data/doc/img/background_Mode.png000066400000000000000000000036121211146647700223770ustar00rootroot00000000000000PNG  IHDR[23ͧ bKGD pHYsnd *IDATx[MhG֬a=H>x 49Ȧ99$%IIC$b&Ēf Kl I{iJdhUJ 6l=]~l.ovvfͧrK"]e5!ݕݯsFt껍߯q/dhn޸kH8{dr @E 2>?~sq]L^z6A_coW[.La_dd8LRD 4-+ GRhT %К-%szBR8*1t'.eB.g3}BP/!+$q*ҟR@:?a'g=^soV׬UlK[ug[]x{qhAVXQ*O9P4T( [~! 0wg="8Û?`s 뿬C~(m4y{NW/qt>)F@` }( 2`@+`25\6&P^pY Ï-YU_a~a>v,[lCGy}%}nS8"=1n1K.jfI1ssxQ[2 ypn8xN巛ƤPJqOp@ QD?~5&VHCz ˞08qB l40oAdlax{?A2}D 1/D5%U3'[Rzo _3xlI%WI2(Qe [e?x0smgC|{`Ύd8g,2uqΖ,\OH~=~R Xh򳥱4!SҐ$NKLi g0: Jl D"iD4 fp  T @ `/}>uP@t kh/z8!HPՊ?kWQRry;Pq lšr#N,J4SRSPR\a:[{S >8H+7jn-?; TTP @p<=U@:U)WrV(mVv/❡qsvglH2~֘jW*勵Pn5oR:>&nϾ=s(N? ?|#^]ˍDs#~]ly.7i$^mӗ&lwH#Iܿ^\id&Iam٭behP,wLNƅ'ϙEb>" Y0ۧzg=] 4аS~?;+ds{UjnvAX:(JPvω$ {)guFs#YB4:.^p8iSpo?~cwcƤd-gBUus7l#f"\b{bLd?# >Tt\b{q?pᔴ +bVy>Ir(@(@rsko8t_Ƣ龜LF?R o  1i1<w!Yx~PYU$~Rzs8n V6@6Ću(*-ǕGφw_'֜ `$Ƞ@½L(=X1c x ̗M! @Sh,7iռoȂ IENDB`hydrogen-0.9.6-beta3/data/doc/img/bpm.png000066400000000000000000000010331211146647700200650ustar00rootroot00000000000000PNG  IHDRbvbKGD pHYsnd tIME  kKIDATx1n0 ֲue#DBdХW cʀtۍpYɆt)mlB)eǖ<{Nmѐ;;#r0L`x A4n l: !vW;/33t+"L? MeUa \X w²`Ү #b߬b%+kvAYa6persطJOw)~ ޱɶOwuFT5';kR!.͚ʎ?]ʚ_g#\g*~i J╗-19g:AIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_clear_off.png000066400000000000000000000011421211146647700220730ustar00rootroot00000000000000PNG  IHDR6 %gAMA1_IDATxŔ?hQ?#A֩du)d b)ЀXR pCI+Xz73ܐAx 7=Kr4 _~4=#P&Y,.^HU* ,י83eYHM7_~?=F2aZk4Y~M7BMpu~V5I=Ih5?Kcƍ$@އ/Jac7H0ܝml,G ]ɡi}|V!C88 Y8J  %@SEc{g!ng{g!oqn ݷ RU)r|nIWWJ 9?'wTUVWJ鵭qnj1U2q9v 9RL&x Xqm~ /_<21I3Jamw k!QoH?Ov N:G5# q,6sRGBbKGD pHYs  :ݙtIME - ytEXtCommentCreated with GIMPWIDAT(ϭJQ+ "AF,d h`)V >`c#bgnDA Si!{,]n<0̙Q@`D,.΅-κwt@k1c Zk\`-\F@Vcyk-QP˥ YQ3?B^4 aZYT:IENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_hear.png000066400000000000000000000006731211146647700211020ustar00rootroot00000000000000PNG  IHDR |sBITOtEXtSoftwaregnome-screenshot>NIDAT(NA7`W(P ј& ־F!Z6PXjLJUVe, X``)?Of<=E1L/MS?iهGY4[زӓF6{kE5ݨmg[TS8QwIZY]{z|8$&\pw[~`9CP,>iVt/NVq^BH8ǓHΏaN6 #26M,luDpu]-5:s )>MNq,3@iwC3۽i6i\n0L ZNVdYյ !^iIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_hear_on.png000066400000000000000000000011071211146647700215670ustar00rootroot00000000000000PNG  IHDR|]gAMA1_IDATxkAnA\WhK *(H!C1, zX =RAĻ[סblg_9XO}Lm/Yh~<gFO2?n~уi8/ˏ} a{ixx</zAHu$B^׼|-rϾtRcaf/ v?mO| ?*+sIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_live_on.png000066400000000000000000000015751211146647700216200ustar00rootroot00000000000000PNG  IHDR-gAMA1_4IDATxMh\ULL1`BB "bڅAJKA7ڊ)D_  Tp(" "q#FkI;m{}㸸3δ?ϖ;!w54孃SYbEBdZebmJGxk?|"Z70֢}Ҕ lFIN{Dr7ep|OY,cuuL)Eiޯ+Kcf'Pc nC_t…9E0TSc#=[$#:I=k/ f_os๝*pkjmk*@b({H.v(y>4ԁ$[}dCp!)!VJ[(Щl?wT7/bP:5' ) aA>z V[0zw||RN&"ă@P ܵngdl o  ؽ1! "t(QI6zXK }!@ۂ) JAϜ\": >za+˲_tR(gUU~ ӧgf_\YIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_loop_on.png000066400000000000000000000020171211146647700216220ustar00rootroot00000000000000PNG  IHDR-gAMA1_IDATx_UU{b=Ġh%Ia5 Fc`ceJ/ fNEJaу XjC IaQhs{uFӞڰ9Z>Ρuj@ +L-T@V cs#$(G2kRxM~ضgVus&WBS!s+6n"K*h gÛՄ8ei$ER+\-F[C/@)BPן ` jf5(&p9ѿ(8Q>cS4dR-iƣ|,ICU;+r'8ud/xrB(u4@)irgߧu!߅a[k[bAbT.ӻu$sڐХ& Ã/qT@-5z0k-wJ#(T0pqO'?cdED3SڻcWܻd>ĬqxG)%lӸs$"3\JmX'BPSeB@P%H ˜{+#"cEPwՊpҭPvR\W)bA8}nVaqEp5P6ADPOѻe53kadJX5<cb X3M;އi Of1D֤DQZcDXҷצ--dZǙ|z$vuxoQJ8dFR>X<ڟ0VGa?{sd./gtb=U$e&Dp^n]ËE$Z`Y+/PZ4۬; 䇯h4D pAF.wAq$I:=5fًhh1I{^n)ҺPQ"2`IENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_mute_on.png000066400000000000000000000006121211146647700216220ustar00rootroot00000000000000PNG  IHDR *gAMA1_AIDATx1@X_a׉xBzӉB3\#5A-!+6Y{dQ#(ۑ4XlG>߈P 9 )nx4DyTHatL*.)vz3(۹9t Pdj( '}<Cg B;Wfui {,HSƣ!nRO'}@ ZͨP׽k;V ױ}L>kcw'nZ\N zy;dG& 2N<9GͲA/? A&IENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_new_on.png000066400000000000000000000006711211146647700214460ustar00rootroot00000000000000PNG  IHDR Ě$  wLmDo$"{SE |kh{ż㩤@++GQ*xv-(p.m7@(VTuL~I[>)qij.Dbo:kۦN0CȤ>DՅ ބ7 UQ|l64Mr#NˏV8c.=hO1ޞ тF^`h|\Xt/ {s0#J_SvqZ0>X}a:7 t7*?IENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_on_on.png000066400000000000000000000006771211146647700212770ustar00rootroot00000000000000PNG  IHDR *gAMA1_vIDATxKP/t?&k'q? S!`@ǠKM "8KA:Jti($A,< Uνwy%i֏# r*aZr"% +R%Q*Dy|h!aZ|eOQoIVTm .6iA aF1S>t ͬ8di.uW>r5u@8' BkäC'JbsA0e& bƽ_Uznc_hhVх X;|ZG bgQ(~f/bIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_pattern_mode.png000066400000000000000000000004701211146647700226370ustar00rootroot00000000000000PNG  IHDR N>sRGBbKGD pHYs  :ݙtIME 1YtEXtCommentCreated with GIMPWIDAT(Ͻ1 @EM%E:s+h%V֖+XZloc%$QV`ϛz3ꊿYtCp"ߵ \zL폟6CrhBZi;i;0ʲb_1^?"ބIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_play_on.png000066400000000000000000000013171211146647700216200ustar00rootroot00000000000000PNG  IHDR-gAMA1_IDATxMk1?pؕ?@p#.]H("qӭ;Qֱ-νdՖa<'{ (ҽ"!^~VGʻoN@c z^) `v`k'i)s$>PYh:Q5:㷎Ap!VZ\ʁVŚї-݇zBR-i`k1_zl v{GY'F%\29nnn]-R?q'Bw;g@J`#RwH1΄zxc @q^[j.ײ`Xb+\OLJ'y׍u8[-7}<;3P>c NKy{*H#=hִ6X{ 2ɰԨSt.;zJ!p3Ι |H>AЦ|G`kx/!Qn.X~ S0jc Bxc=|c\HIڭΰmɀ&!M5`4ɰ c@Dl6B Q#i qHGq>E +SeilIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_play_on_mixer.png000066400000000000000000000007211211146647700230220ustar00rootroot00000000000000PNG  IHDR *gAMA1_IDATxK`?)4H= e@`yË@ O(x,.cx^`a=x2l a!i(&9W'|y?yx^L0-[f]4@w4cZxuuÍY uk"AE)jHp_ˇ3uX`u_y@t9w2VLI aSaZ6 NVu3/U&ilΕ}f>k 4;2j2L= wqٴn5Y"O?>M2˽|R(^ 9|9-lhEFOQ2\J]F!R Q ȴlicLI|IENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_quant_on.png000066400000000000000000000006001211146647700217750ustar00rootroot00000000000000PNG  IHDR v4AsRGBbKGD pHYs KtIME(5/PIDAT(ϕ;KA`!V۹X)a;E J>DK >?$}ڹi~Ǎ-'CA]$W+Ai$!VSJI\RǦ{ԁyHJN3F%Su#95Hm0LvC.?ܟp:'ƙt/Q^>`||=̄8HD*.62sӃgf,{! /[aTlO Mj*W IENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_record_off.png000066400000000000000000000013431211146647700222660ustar00rootroot00000000000000PNG  IHDRgAMA1_IDATx_HQ͚Œ! L(@* 2C2ĠE zJz2(H *_QNNj꽻Ln3swGo_dvz̛2 @mn튼(ыa$ _u0k]{i;Զ^RR<kVsk{G  0}ϗKCηjGQprOD#4 G<X5mY<]/>?QU7(FR"&xP~ W\"\ZQB (7|Jf'$ gkY[_.ILU`r-Eo*k:uŬl3` ΃q;O LL>d&CvǤ\˯Gi cR =(e0XbdGra1\] <w#1 462] !WQPL[w[<Q-.GȰEX3=d^>Cȭۘ.*uBH+R? R_K`?J(įT-SƎ4 0OܦJ9VX⨘( p\L|VIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_record_over.png000066400000000000000000000013651211146647700224730ustar00rootroot00000000000000PNG  IHDRgAMA1_IDATx[HTQs:1L@RD$"aH*B  HB7* # ,T@rƜs=g3ba˿ߔUJ (W>~!Yԝ>l¬*'E?'&FG ƿi3#LjvLh}=0/{^=]X4@aCe1umP̀[)hiU|Ch^CJxlmgٺa8u޼{< eh哊w0ɴS!ki[c/"j"w6+QW/cPc@yށ홳j D$odjh820p@a 6 HiZ Ft#17e? #2.dȑ)&H8)$ 'P"S[QBj|0lc)G fup1/h:'0kl$lk,Wwme!d),\`6ܹ۽(&U@ \c)+ X]8.ΟkwI )<zQ W8mgU#`K3i|$*mi% C_(PK}b8Xi9 u[)IENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_select.png000066400000000000000000000005201211146647700214310ustar00rootroot00000000000000PNG  IHDR %VsRGBbKGD pHYs  :ݙtIME ,*ltEXtCommentCreated with GIMPWIDAT(ϥ @DI{VgekXXh.+X jN˃e`aaw Q@CilIi,i:t<$N9sJ)?$ydaI<͡=j9[}F?VXkw 5u]w7zzT+DIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_select_off.png000066400000000000000000000003671211146647700222740ustar00rootroot00000000000000PNG  IHDR N>bKGD pHYs  tIME 1CIDAT(͓1 @ Fҟ:;7(" zG Yx|5`Mk+̌Wbسnar}@i` xD $"|ʴ4#U_ETG1zMR.惿"IENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_select_on.png000066400000000000000000000004311211146647700221260ustar00rootroot00000000000000PNG  IHDR N>bKGD pHYs  tIME 23IDAT(ϭ1 06-Rg{ =A<@IPen"0Uu 1HJkM{*H\{9haRO*z 9ˠM9\`V}9ђi4eJBE ^8*3&Y,{s[{zLmjIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_solo_on.png000066400000000000000000000007111211146647700216240ustar00rootroot00000000000000PNG  IHDR *gAMA1_IDATx1KQ ,0Xn%mR 2vd_,lRiLAS%j +^p-y3{yiPYx~ "v.WyE9/p NQ^B|Y`0LJӟ#?Z1sP>?x~P&OAti+k|KeֺTm<4MZlR<Ţnpn%IENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_song_on.png000066400000000000000000000015471211146647700216260ustar00rootroot00000000000000PNG  IHDR-gAMA1_IDATx[LU3 ")umRJ)Yl$U4q-Djk`SFM51XM[-/44$bkHHڊ6`aiiٹe+Cd3|P'Nޓ@ BGٔ.*_:)Jǀ[ /Svf"w4{%&FȦiP?~iH-jV&C q dfbQ_5#Č81#N1jң,$f1 U4 ^ WM4XwbhC`uv?j(} &noL|AB,ЬTq%8Ï@PJĄ d|; Ms3츘"ZXnp˧F)Qe˦ m+g{=]ݜj¶mlvv?&^Nqp'0 fr?aFʣfϮԫ(3s YMmMp}bbInx`|gB1W0zmoqL@$IJ& r |\AfRCS7(K? :ZPs\(Yf/6VQ8end^r_Mxk ,O`[l)Mvf~Z)?y2ЖIl=~{ I vo ?>ݴuyW_SxЧ! @tYIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_stop_on.png000066400000000000000000000011201211146647700216300ustar00rootroot00000000000000PNG  IHDR-gAMA1_IDATxN@ Ay! JJ:*h%C5 -u=H+33geÑi߇<#Mz Y+sxώ@Sކ <<>>0aLs>#ݹ#{{BAYS#eh"f30''Kf&{ɢu/PagGiG:[?wm@nn ~0 I}w"PUú Ut9:Zndy=o]en\YEQQ!M\Z)lmii y{V؆wU_Ӧ; EqU6zhD7qc-sKt+|_y0XLnlU}Jh7y/XWY8JX"薿0˔\7a3%q ƴc`յˋ|}u-V6kֺ?p$U1FIENDB`hydrogen-0.9.6-beta3/data/doc/img/btn_updown.png000066400000000000000000000010521211146647700214670ustar00rootroot00000000000000PNG  IHDR(bKGD pHYs  ~tIMESIDATx͖1HQEDcv%R A N!N $88:8FD4 IND44mJṕD[y+?|p}qַ'#$hB~5K!a65Mz׷6#H2IS0T'Q{cК|OI !BB3iVxX1k9V ]f~W$^qKY[M eS7`gbDkOMǧ.T;GWiůgptIjuѥlgЙgmcm<m<^W=:3e>άRjnAUr#z}E*aZ.U*~D\j[$AYtnc{L~ ?>r9Gt S*F?bKL#p<^ʗ~j!WVZ mbQǁf9]T&c:N[gX8{ה!IENDB`hydrogen-0.9.6-beta3/data/doc/img/bypass_over.png000066400000000000000000000010601211146647700216430ustar00rootroot00000000000000PNG  IHDR ugAMA1_IDATxOhQ.R`N҃x`*m ^<(E=Tr / ĽDE H(` ԍv_?z?`fx,jrB?KJ5-\+ZljVA+ژ V ,宮u]]R,B''uQzd,P/W|[Zuw~_E?;uLAM.M<%xZE>rlixZYƵ!?ʹ l0Ž# BD6ť /qGFXAza[DGXb\Wyv;̷~":cc{wĵ,\" I7WĦc#~C7\~ [7(,8ͭ. E/5?GGX}|ߟx{wÉgtxJIENDB`hydrogen-0.9.6-beta3/data/doc/img/cpuload.png000066400000000000000000000036171211146647700207500ustar00rootroot00000000000000PNG  IHDR&lbKGD pHYsnd tIMEznIDATxn#F ޢI-Ql ,yQggo$AmMs?&6HxH2fFŗc*)ל ]<.p11hƓ'fGDE8cAHx!᠟O vzFiZM{Ҽ'&mPZ-gk͵{װOϏGDEhh83ώ&7mrD {=cwg 'U9n?1|\q]?nW>o"$u.'Un;k+쾯>Wb\p5?oEpY{0;9;0~ë/-ENnlH٢b߶GqW>W㫽j 2?}Ua' 68}J+8Mі^$hXY6[.̺&Zs~ZUͲ{|9a'o_.^< R`Y9/,E5(*Jj}ZD ;5 j|;;NbU~W>V #LJEiEbOe/!a8o? Ds=k'H$RҒ} Q8NVֻS;oqD|fQśʽmѐъ7h'zFIENDB`hydrogen-0.9.6-beta3/data/doc/img/director.png000066400000000000000000000340001211146647700211220ustar00rootroot00000000000000PNG  IHDRq<#AsBITOtEXtSoftwaregnome-screenshot> IDATxw@]A6 ("( jjUն_Vkkk]Zp{(*LHrx/r{9"H@!]BH` ؄bf BM)!6a ؄bf BM)!6a ؄bf BM)!6a ؄bf BM.RԮá)(/;;YfnDKk3Eopqw|P꿟Z(sٵ{ >! ka1WK_.=Ĝ!ul&6Ye^V~QYEu&8zFV 㨏wYu&S:+FB2#/Ӄ0dfI*GZ ƁRy7'TtֳБt\eY)s~{ZA:OW}D/&}BXsH/UVY; L,+N١s8(PݽƏ/fi8#u4dJ哨Gصu'B{>=}Tc=|VC%lW~A8Og]UHJ@ sn["2xB5ɣ6V9ʃ$ԍ4o1 Й- 5AW楌6Crk<#:Ri]R Ҏ]jC*]^)slR C_Ⱦ|4fCu^e~ iXHOޭZ*AXY T'+?itdO&?ML*1qtw4 uk'rm[-3`v%$T[nC !r1lI:rAAMV!x.sϛN?NϞ>v7ʎ;o \cPi#+AH]V֦UQi]ir\&EIM[ :x6&OFrTI̾2%u4t8}z/8]AyiTi5iO'X^hs|O@Yi¹ 񷚍\4ӳ(@/g;YNʒNlZ G+ @6坞̍ٞxAUry_^*שݘ)NѹLr[]؆p&z#SU/zfL k?`H=;q5o~Vl>r=,ll Jb=MW1Wz+.f~4jzo{0vR8Zu詻zPd:Hrn$jo3E2[ouHͨ/fݠr#j`Kc̞Zǰ- )?IK7ٙ=ݳjف&~7.ۺsŋmcp2緭BO8QT%&ƒ]`~&B߷NoU'ˋ9={\ȳQ?WV-{ty+rPfÈP#KCq4C~1-5xFGJXk3S%78cfF87~{k|#]17t`Wk}7g?̡x%gŪI=s:FqΩcx§*Rj9l1@ٯTCms9݄]0{=LG#5wO7tlDgTƭ XV]lqxFaϳa,ȍKR.GͤG>N^oc/)USU|!SO|c[_`,\c+5LX|瞟Z71yߪ3 紪WXX`妸AZ$0xE#Qnt~#[-?Mkh4ǎcG)4%{kD{#N]d&w1@qD?/M 2kp#!&~=YzBߪ.NWvg%-}ΜҢUʶ hnp ;0۔y%85-3M3!>'/>ĩ"t7IWu@U?AVƅwgƛK b޶=q:0'.l]{5xRDbo8K[siiv9{Ũ;cܔ=L6DckǕo4ܑۢȱ Ga"ћJu7F4޴x9_r1"lB<(n*o]ly*N1kZEw3;>Srʍt+t1V =#{4FyT_K/zXFcIQ\8n5Xe1vNP>"5x klmDpoIDSL|t쇂a}/^ RwWUzk|ɀ 黏oR0'0>4m} / IHr[\=N3DIg䦨r9 u_y\  G{j {1z! ;udGc(@T1;CVnt$_$jӫ$"_׊40o^)PvLcqvu(|ar#"αtK,qjQ+x b`T6Pè4+ rD=cb8XX@%k4~w[S^j\u'OEݕ8s }ӇZy7T'^0ۨ0B]tm8LgϜM|=Mm*=Ƈ;ׯ;ډ&9Ҭ3~Oa.#ǯӇ},N8eφ'gseyѯq, &z--FOD%\$UG#c?[3E_?g8t"OJ)N*94=,:tmz=RM?_m6Of qr)+`ȴr__Lop._VW.##Ǭ)֊NzXs;Ҹϵ?E3q>K~kÜ^N/cر׈~9~;z#_2,K) yV$qϲU{4JȚ~t\EЬ=4=L #s[N>=-~f:*ܾj/0極_@RU^M TϾ);S+̔kJu,PqG)jʳGvHڴ̥ǿŊͣSXe1iY|1ڊ[b{<ʵ |i}rDzdbeqɄyF zdIG/ypll>/ŷ]o9x5$}~uhkn;_7ɸRԒd]\;oOf>߲GxwΖ<(JwnŔD7mztW;P}?k Us0N[`|%R]~mu 2`@P^-K=t'%OU&ElXxacBrm:i^'O<0O#[")޵*kxwus3-*NM}wa^qHɴ9h#ۻ&򿿷Lxyi)OänVvNvvf&F|$d(yFZz^k7ٹx9XIFT]V,!1ѝ5c]뇩"WN{ Ql/(Ɣn#ٹ-XH+UvYo ܁1ʦ,\*؟Ү# +O{4L9r9Pw:76d԰?|މSY=HSX]Сv'˖ۧߏ=Ƀ*+ i -)]"33ffgB Ca9.xmNgT_҉cA~L4ѹ?HM}F!lqP+zt"40hfmaQo܈z!`&WߤcT_ӉLiƵ7mZRRޅ 55|c1r H֩"N4޵ 5D8|pԟ)t:)II)ݐޅ EtB&w/I#\4~C"w-HC",)aAt"SDb-w4d{4BrC᪏e+HhȔ"ۻ1K9*\u:t:z4NEHI<^Ut*ٗ/I` TC] i?-/2 |'S/+*GCa zs6s0kd8s0S̝pkJT}I 3! z7uGMף0S;FRѾL}4f u8:/l#T_FLA:mU۩T\LA6qM/I ` ݵ-aX<qIDATx$>Ά)HG$M&'*\U#:^h |GlU\6LAh=gth\ %R$tN9f,9ZMODףe0SnoJRq=3MUPDT2՗e0SJNJ Vj4l+ /8MUq= 3aUePcvLA:a6V0Wղ/Y*Ga J,W,u~uPh78 *e+T_vLAZn?Seyzf fD)\'I괊)Hk=g3W=)Hk-&y//we V}I@'t9/,Rh꒟60}˝}MNg>!5yv` ?uc0SBlLA 3!&Nt^orx@ P7)H;@2\JU)tj P7xbf BM)!6a ؄bf BM)!6iqa|#"H|XԺ|fY2DZ)FB;;vYk_RQYn -ç;rE/Cl~c4Acl])޼v'kDҖhHR_g5&-Jtp  pDy_Jijg݃yԷp5pv]G\"+JUT3Eq8W NoE=pԸQ]@:OjU[g2ZznS7I=K/%\FM?DH喞ЏMPԱT^&L%KE~p6O.}[yۍL<ӆu[j7U俆L{'f:㹄 :$/Wݼx~^ϙS=m|$z4d1c/ #ϝͶ]BS~Sgv|s~GQ̎VOx'n,޻ygT/C<uyGlT=xƲ?V7sΒ1\ Ѫ1/>y/!)=%̵+])S??{^Ҽxo=ߝb5ijCVEN.P貸Y?;կ}[Ta4i埿- =ٰʸ߿5Osas^wځ0/?oO_{6߸mҡō7L)q 8/ \1Kz=5[* ) FFFFzPwAr98fɏs% ~8525)1z=_D ^@W>kwo MG>!oOggKqT^+&aRNe uJ\3)(lx6Iqz  ! 8Oa5kiܪ}׋+kRri[?}D[R߸Qɨj$|3#0S4fX\19Q; 1J,A;">euimiJn0Sԗ#|~osoPTuy$@pH5=U]*0;JQHѪ-_mfť B euL9 fI9Y45s0Ey) 3EmqZrg: U\VZ7صOג:G&=U_s~?KWv -RS)jW֝'5>X \4!)*nzn-}Ĥq7G۱]nSiEնTLN5Vq'x׶)Pp4 fڒ=~^ܰϙy\>O놇 , SE}^o#>l0DO' lp48f@Uq>ZE9U_qڶo|_7w8lJxo;2%WcAi**D$oQ30fwIȩ☻0c#'Ў zf#i-? a~X ]?'<,v5$tJ?{@٥M#U43˳wsQtG?Y*)*ee5,Lz^ΈX{ue?B%=]Ê쾛JXaq D-Sw,\:rvws4H+sRߎt$"I#~!l}k@ř%3S|Bm}:ߡUOϊ؄>ڈ4fXܘ+~zp)xP혷qy)MNFX<כ`^L =/\;X.©\wM )jUq>$Ud*/}Qa:%*-s\ę 6(ϸS(8\%rHcЉ(|xl  @v> űǕiCrj;OAjciE߽YQwCUe?~9ur4ĭU౏ 6tv U%<}W-מ!F޾Ewbd//"ƏgF\|};٘ HIE^۱rDr#;u63%*HN(ZRK+gFdye20 H-ki#@ )|^-#MllعXwjzULvϞPSP16t$(i3ݠ2 Fve'{"ڻus 19sX@p- Td%WS|#kGkw?kNON)ngc)Xp@T!@)ڀk5UαӱRZt a2B۞PrĹy541r0|>\(MQ4##亦ģQaͺv1=_ 1:ߊ +g.TԆ! ;^ִceIցUPU"\z%aKKЮgaI˫ۯiYy4APrfj UR V];Pٱѩ/̔wbkFp,*'T`hlh*?=% yK4x #f(L+Z)qvQn_ɮߵ)IU OC6zP[hBpq2 ;{C5#䴮y fv xf~=<DOA4\̔zfk 7iYYXZZY^|~S1[AF ɹy"10S>v%G9EbZ6y,II0G\dRQДD$r^CZq<ҙI8*E`h> SHG,&/aQ$m؇Frv*eIqH[Cߐ]&Kr9 MZ۴:id-dJT\ 2xu{2!:]U (')0pa`4ػRݦʐ=J( m{_PB޶$@ǹM&{wCuŨB\؟d팺|UFY;YĝP;oNAw޾-̺q9%5\S;G+2]a+Potcixk̜R1L, y~|\IYAt|۾cBq#`Eah2)2 qu^Z"ݾqա=Ş:]JZv'E6CZH,YInnζnVВO{\_ ԕ^+F^1sy*{E+v H3{ c01~T*t0"2Anv62s7D4i(OJ 0St4Adw#'TxvAt\1F bDZ[{׀TFZQ74403756֧+3oE]/^+!&bf BM)!6a ؄bf BM)!6a ؄bf BM)!6a ؄bf BM)!6a ؄bf BM)!6a ؄bf BM)!6?EVmHIENDB`+Potcixk̜R1L, y~|\IYAt|۾cBq#`Eah2)2 qu^Z"ݾqա=Ş:]JZv'E6CZH,YInnζnVВO{\_ ԕ^+F^1sy*{E+v H3{ c01~T*t0"2Anv62s7D4i(OJhydrogen-0.9.6-beta3/data/doc/img/downBtn_on.png000066400000000000000000000013401211146647700214170ustar00rootroot00000000000000PNG  IHDR-gAMA1_IDATx?kQov;eXe`T!Qbc@&!I* $*X .`L;x3f޻sϼٚ@Q KO +3DzzP 2Q6^ SqRE#L6`}RKB#ZsFke("eY$[s)UHefH9ŽmtH7~nIۖnߒ,EQDk[HL4#}enNvW4[3 rOe"  L$qzAq ==n HƥnL<u ccVs0ᜋ.яԫ zc]mIT\NBQ ,by\xs!ܸb&vLqB?ϰWv[4)/;U$Ծłr-d jkM/ޥpbQرv`C) pq~XKwhίRQup x!(VAxh#* }1^喡^_)2@*Vq~vS2Õ ajGQuY7`0 02RJ6 eIDATxy\Gg7'I rȡxUDUSCGQjTZ֣j=PkkQK=M2$ IGFL$d/ ~sga(@:;P g!8CTگo'6ȡ@>` yOݤFJ]d *TSCAIU g!8%(A@ BpJ3꟎@Lzp3%ؑPVwoQکB(R9i¢ mA@ Bp]ѯo^VVdAtj6/1J64$H($Djo}TR*͌ܺ_-6_3 >-;vGkM=hq=m@*Ⱥ+N)40E`ŒOgO}'WSӮ/QLzk]$8lh@P7 d8}k RR8;Wd6}&Czsqد2B1.̓'Îr4הI4a稓WFrHK.vk ÎucMa 'G]7o_HҹNv"Aļ=Ul nPn ZYYN9K汘(2%dpww0D& yh/QG}[ }"#BlaiBg9cD2n.׫k,U;?\[?\q\_n;}Z,&C m *y=k y.)sWT*+v9ONA~M8I. a1{-0ύw\vGQE3ۙiIDvn. Ǘpc1CBfN+}ja۠̽!^n=}2E^^v].$ku6QKҿ/5G%|ZVf3.sS?~~l̾LI'C"B~/Lq y_08hB)r`SJ"iPHt;ks?Tj 5J^D"q뎥03ՋvN5PTS#i)j~''* j Bp@4Q+vb,,H#.B^q;3H(gitx,WݤmA@ BpJ3P w0=mmxGHEjg&P DjiDch ;J54|t@S-ع8}|7!44$d:1VV,&J֎@'!t*&j ~̂o #@un9Wm:^*ػ ?yExF7P.D/ޜR ~. X4)(-|zԉr馇mzsV)ӹ7mHR19rşeRA ]{NW+e/4ʬ])[T]q ^p.U2u^v_P ik6w12$͸O6XOɺUU17KӍ^hj\x߂6pldeppnn}]7UM*)GQ^l'&G,L 9Xv,{fat0/_6"cZWMFyomG/ 1ȎXXePQhWԺşGcX?(]}6>ڪ ю&]ath?zY ɛ_дMGZW*bL`[3P g!8%(A@ BpP/ljm*F=ݝt1| +pDJ)3D˝>TE2)9G: `8DNlVzFB^'/A:VZAH܍f8 ¶v4ٻw ]dM@Zz`LWh.V',>0Tr:aۍڂXCm|}D{T:vu3(sD(>3|˶%P';5Br(Np- Be 3܇aEGׯz=Joæ%gP>3FnL/`X;  1A삔%$n'|q8TUR|(Qb&1oqSCp5siӑu_T`5`βUs[^_/ .Eg@p{qJ`./ĮD F`t*P^;R aʖv9GS22mHБ^ *Ur `2q UR~LZʼna\jyū;!`{vwč.-}$UrÉ݂71~S7~[Bhe sԫ+ )xvogSh.>Z#Oޫp3ft:mKH rޯf2\ݴh˜0GNs?$telH ^=w#=l=s[WO6@RzF$o<kʤ ȭ#\Y/1k1V 䧞kٕrȱWb^QS5z]Ѓ21C7Ճ)_K-0``aIZdwW{)ituDoB E .%51CӝNXd}_#zN_t ]d y|\=xf%пZd>_НE{˻7&.HP96п!2Mn i^4g`[3PR5=[IENDB`hydrogen-0.9.6-beta3/data/doc/img/hearBtn_on.png000066400000000000000000000016351211146647700213760ustar00rootroot00000000000000PNG  IHDR-gAMA1_TIDATx_hU3n֒}(h)R|3bb-}*ԇ"*J **/}PUTRm j -56dvfws}DK*es{7|0 j@Y{VL7mm g< QJJEp{8e8E']^YxSs~ť_:?5MoBp{<پ7h`cls&0c&eE?Lc-_`Y3ðȨO#IENDB`hydrogen-0.9.6-beta3/data/doc/img/instr_ed0.png000066400000000000000000000442521211146647700212100ustar00rootroot00000000000000PNG  IHDR]bKGD pHYsnd tIME (&*M IDATxי҂0 SWx!ėH65 o݋P|M^y6+;!#½',8Ėƞu2^J6X;m^k]"<*@P~qGwOw|@zSs:ԩnݺu A!ۇq _ bAٸ @R;`x@@=PBG[z v앰h Ɵ:ݫ Qcb Te,/`}c}pg!۔;ټ/:a~ P (0ց7O&2Q>Xqr'7{C{6w K۷/??Z=QzdOotкֆert,/2*4 YxHTebV`FѺچ˨bz sLur4&|8tZn:rz|N?kyW^MTUR啧4L.IiG_=⥕epf ݆|~qN6Ez"YӞcY:Vy-C\X8?U}T #)W޲7 !K#5'sǏ̷=]ӴPъh`/ 2řvN?x8NRi[Q'mG @ ݥHmT::]n7dx'^I \ك&նpI=@+0߱9 )@ s$T>b /l4>k:6P(M@Ep9!T#uvH+b@mVC:W ޯTX|+bu!| f qa5́+-A2L;cD5K}\^M`|A*xX:6'"HAdy-~9Hy^5f~vaA_1 kG|kah@v8x\H]Tlo Q' YOA'_D 4>Ⱌaܰ`K?_6(Q &a<ގ3>ARF4vyq2> Bw'/7A.fA(fM#-(I'kŲ}nݺn_vBh9I'Nkt,YzĐFdI'B3\NڡJp11#餓>vݥ!;(Pz. ۓ{t"]?= a Im&K2?2@H3y{s'^tI߻ɥ0Xv̓ !gmyFI$Ř'9)|⸟+E$Hi=9I ė_< 9}Cbی>719# I$*;\ d"yg$I,8h@H!o9OUew.ų'MޟA !GV@n}x?Egsp+Guns zOg^x9pGU>\X-6ǻ'#u./-{yžGzW[}maݵ5$3xZz߫?%|A@=(:J8w5v[m`YV\o Gsڎ>X&ZzqT⧯İU 3DC>q(:28Ybw8|PzgmT¸ ӴPP6M0 mJ߱{64vzn}@l6PVva}C/8U'fkqL:;T9ZW`ʁ2Z 9eh6Q?>Y|=- 3.vi%Tנ߭c݋L똝E a`&f:_CFlu` @J s΢:gP:ar֎ M+a<> [Wǫx__?u>o(+y_wqQԢl ="7ڰ,Q9PAZҷOac(k%ԏP<QrgNPcBwFR.ijptQ*8),ma'p3 ΝXzn Ǿ\AA*C50qc)U@ώoq`"xFF OZ@ڡX+ <?qS0VJZɹcڡtlTPsqmR431ֶ `Ux$-Js-/./}tDaRp8zbXXEm̱ó7hSjtL}?|kn@ >-v`֧sWh\i@*aT*1H ~Ò=WI,xoバ}C#~buJ-Ҁ;Z'XؙF0и+0hs^Lą謦{1;ϐ07(YAU|_`73;qɢ{S^}ҋ@1=O^F NX׀vW 3h|tlTD9 0S pç p@<^OXؼBV{%MqV!锒[ŹW.`$}މ܋9>Hr R3j_7;ЧCmvh;w$:.gD7Ҕ&\[m+mwv} 3Чut tFnﯡ}{ p: Ԧf't/5G ˲7BQj`W+yxN<6hh\ǏU|gzo} "BdW>gT-s A`\mxS0Qgթzu>2*zxl`3  &ܕa9~O@ѧ##[?cu:ҧ/'ol?~]#:'06(2Lt\Ĵ8'K ܀Q*B9K§"6.⼷ӯCbe3tft?\ K˯F; ]Bi8-]bdr╁ut7H,=#u΢Վ j?1ݽsz#W78q:78aq T-v~ҹ(K@:pA-~'|`:zF"[1uj813 );.t` > -;}D2w,H0u=P>sxB:mޟ{MZFrTO |z2x'C0xfAuo O^J:D<qHaz b O.OHR!t'R:9:;D$ɽ#!d H$%~' n; CAY)xB:U}Cc(>%N7>X~{(>pI'}oF"Ƿ# 餓u( Ce´H$9R.C1胐Ûaz-AL6:*܇O BIA@T 8fIA"?ժ1~ ;ؿC|J~a p|ǐ: v]b؄|: | 1 _2/n@>  % 4 = PB>  % B aAk!nCAA|A(!AJA'% m#bA';xY5 "Ϟ AAAA|A(!AJƹݬA2\}®׍ yo7@f D`f[I Oѹ> A: : : :  % B>AI ZAq~A+) brWR$"ZAZAZAZAA|A(:ZII B8Š1ОA$C PB PB PB PB>  %'%AJhAJhOJ =) HAAAA|A(!AJhOJ : ОAA{R B B B B PB> ОA(uA(=) $"ZAZAZAZAA|A(=) PB PB{RIID2 % % % % B PB{RA$"ړ dhAJhAJhAJhAJAA$B B IID'%A: : : :  % B IIZAړ 8hOJ uA(uA(uA(uA(!AJAړ % %'%AqОA$C PB PB PB PB>  %'%AJhAJhOJ =) HAAAA|A(!AJhOJ : ОAA{R B B B B PB> ОA(uA(=) $"ZAZAZAZAA|A(=) PB PB{RIID2 % % % % B PB{RduяbU'S$IrX;ap'%I'}t}9|**UVHI'}rtlwfa(>ETTDSI'}v23 b>YI'3hwoDtI:Ġ; pI'}o"\gAryq1,ą!t'f7At-Y$If> I$#!P|'A! .{vP$t& h_4v!t޼#]] 7tIߛ3=؝=)pI'}O⦟'e& [nas޳ f t'LއJnߕ 6>X71xT.AފA.9tH$KkZn1vi?`ÕspxVhб 1ӉOK/),IϞNճ#}lwr ")AfSxФļ wF4=&!hp+? C,_Zzoz[q_opZ0=)K\n ,zLBN:Q} гBac`޳1?zVbëOLՎJ_>q,bK7ݬ珲|wnmA"cUĎ)b蝟8gJg2aN;~ovSQ]B׀PSB23Q.T nԞ<%, T;3pni" >q,r|8O?|~Y Z~AuzbQsӍ0q)HMEx8-3]LEx%]Q{k:wu&=PrvkNV^yr;ݾK^Jl`x\˴9?KzGcAJM"D6=?>.տ1\!էXa|pяtJ~HbKݢYO~|?ߝ_r,.K=)<>1Jwz8|_K;ㆳTR$7,'Ew_{b ƻ+pg{n}@g"g! %hwU2Ɵ G=߫bÙdKh'PHJzr˫?0n:lw['K]A|agG-9LUX_z8t]Իn=VםKqJKkN:q''\>}eֻ+$t~x(p~1-/ @xhS{rI ;[LzqzO>ۍ/V|Z+)Q,Bse3*|/zt ˫^I?,6x2>|+lRl~=UY.#חV(ӓz_'AX_`, ,^/`W#*ҋ7޻cb&ɭ xistIrGM_u*<)_ȢWΚS%v)>^/}ˑ J4pW %=B'>~>LKE!_i_^~dD˫^xR:iHN|g}zb/7Ur~r"T>^/}eB< 3Kr> |Uzo%rx"$tVNllɱ ])Iɰ3\nA]t~(=z17C*~O|'}e-1}^ywt7}pq\mS'k~iyzˡ[[cA\#FgMWr!aJβcF IDAT^:;n>n:ƌI'^#u[4=C{&ʗ>v~+=3!Uzy^{dɾ"܋=JDi *b32L1/9h:?^rKv~A홷T푵>~fM?~10w,`8ʈ"_2sgIE#0.OK/o?>^zϠ3_~1i{pQ,0c,1 ꑠCzdݏw=O{}'ݾ1 lc"a'҃t!f2Y{cvwiXJسR|@YR,,r@qJu_Puf*YD\oOgA'CW_b lezg1#U6p_݄z\L?%~,~|+ON/?o&AOeɷG1 Zbn"\R F4wgBq/MHW:?&l(?_F_a,ݫHW/\{)o=|*X{O OK?CyTrŴ*U}TGؾ cvw!  GHdsܔ*JW #CdqQy(Ez_Yy>f/сKؓŤJ7Kx؞z5Oox{STp}ꛔ~?'Icl>sPp/w)N =5@ZOǝHPC>z+v; C8H ?n6%^~zd ŏIaGe=ӎfc31}o_٭1 .~:śѠGQ/.Ǥԛ4u%ޝ]Fw1q҂'/)2g%KI yt?NRaGt!G2Q,f/~9}Ug{x]Z4_o_YL^=\,h_Y3Hq[n{>|♨|JSYIYɕ`HHz|k-._ֵVdLך7oA~L)~VT9-ݬQA+Am,>s@Դp_2؎={vEǧ:/(+:b)*t>izvx{ށpŗ'N&N*9##֞ UK/+Ő=\3 : m7\Sʀc*WEҋ<%\GZ2YWP/Oh~+F Eϓ^Hk4=?n|gċP~X\*e{u"cΊR_\' G?)-qOI9\R{iw'v}m,Anp!ú#or\Dc1;6wvuWp >I{[y@~y ';OvLN?^qawZŴO^3*VeA.n懻 B< Kޓ)L9f,½Cn~Sp|7nx>d ^Bppx=𰮴S8BjTW>ķzd*쯬}UקhP4b7-!_Ê OC>J?^ϛ^agA˛?osW`w3[VdRf@>NSdˋT#6`I3a隷vdr}فd3ҩ{E;ϗ+51NJb >AȠyY 9QJ6F]>ߝ#BLa ӛ",؁*|4}e>ھ.n7_r cMvW S,Bue)ɓ^ݖyv?hߠkvX|&X~ƶal'+0Iw|Iha/|q_?uꟖ^y־sw+|ZO/}]_^#_Wr`^(wGfywy='Ʋ?%+/7Mͧ􆨇^K?o.^$AGΐ%tÃ]˫aa#wyǝZz3Q X =%DwgQcH/.Y,2Oi秕cʓy~Yʋ=-${|ۜ-MHwd$pϥy4A;4{-ﰯW_1yNJ LwóaC$IOZ<]3餓;:ebd>YN:3/y& zN!8 F ~N:M=0PS V~w5c-ȴ&?JY@$oL+9JnҕrnwJ$y'ȕ @T`9?gD>xa'$IN}П)#VdJ,x8ʅ`;X>Km0JνrA=HF-F#'g/ĿG!{GYjQ|1&ASqS#R/ ݱ  3WD| 9 v!۲el@`m0>o]q w#ZR=\͹ݗ|/GG+޿F˯离,zJv|{E.m.l:*kIX_*rdjKfADIA|-*~ҜDv@7xG0S W _C =j571yksfn9o[n\+|<.28s| uϦѓJNOuoDwAn9㫘]%]._X=^6HA߷͹3 ir+8Z(%Vuzÿ#o?+*fZ[><@|*'!`Ɇ'^ xkVZ`c߮+>V*?.N[jo@;}v,Kkx\݋3@vWνHKqsp{ZI|Uj3x?>.3Q 2@d=\al g^8qMŴy`^#Z|DZ /.?S/ & ¹8qnbT): Fs˯zh-Nf=36\4Mħw ,;+?99T$gNC9p"P 4czn|>gNj >0TUJp< b&xxOlĸAu֭vrucaڦWxoiY/0 $wO :j1b/*zm:?[c:jNp(C:,=bč$:{![vV & b &jоhB2,MiNJǩ sQ>ުrqG[`зҋ13H{Te.cK V~~mT;{bDZówD$=#1 ^n|^V#EWϭ$i35k C9(> 6 4Yu_%H)?{"6>IlG_UѪsIO.=% ApYE*? }a$IABȡ N.= n3 CA]~lI'}믜{AA 3]YH' % !NR,9I'AĜgAϻx[g$Ir^?fCX;U,~_cOI$r_ְױ)6ADd@H" 3Wt-:@H$9Vo ] $I 뻲D$j% B0O!#A8G:8 %I\{KϞ7I|>A@,^~Z g*~z ""F8z:#$]ڷs'ʵW{\qd\Xm':p_izF7PVtLxk9庣$v||rjb0>7m\~}:ڟe ٸjz Q\YҴL{IWܽHbڵR^Qy_rf Tf*d6 !Q䑳8yg4Q=yDg6cRvhu3\c V~opڀۻ}qh ` FJyqw.kFj?8H7S̱ BW2I¿n0oqin ,(sl8p˂v:*`ү=A:;f@_?vKBboGiY&7V㎅WBRֱT0m@ vLo} k{+j-sxk-~#uC;P4 %O>H=} ڻ#ɻ$q7:ظ2ccB@ Bp*Ƹ&bmP]~n䁋$& mw?8/Hj@wl 2!ͤA>24&6.=`j6Y☦Ć6-p{c XCžgIwImbcC S=<'0s6%vm4?j8xQ:$|B R.гB1V #{vuQO?x3nzrα^P 5TO~8yeǂ^QgѾArӻ4(:֡Mrj6:=5؜czppřgPFmasvW6xw 됻q 6UB7N9b$3lt>X.p T+%0FDŽʈCWSXO?n`}N׳sܶpшłiX|8t~&[;ڟTP{hD )~6chP`8 92anwD(:i2?} {x@M \Ft{&A$ E),~;h''QW|kB;_4G΋ӲLl~=SVk5t4&~ z>{.&eqު#+g< X`%p@j0s{wS[,*A2+sǖ'ndo41mSNG:2MTzõ/pmƊ{XϽ[yǧ E>3!7PߐeƇП4[-441,lqĸnܱPG?hSIDATo|,ٓAAN@7"7ptizM`sC[3N6h&' AI T%nݺo>7!6):sW㜣VlCՀ#a(Рi%l~Ԅ(S"~;Ɠoϵ3zdJhp֠8llc<-5Dx3h&fpT ֎Tm __{8- !DxO$^n.HYצe`@@Z +M`r 1Sa֟(]ۜcFgJkDŽ6Uc&Tؽm! Im`Ik-P=\mﮠ8w6]F\eдl0op"z"Ds6L"sig{IO_~d ^X;ck@[ @V`~eo5%#FL=fqA`XW;?Bd]2 hܩDfaBq7~gY, fXVK0ħa;XX ٘=Reu`\H # B|&T>H4& 3! \A"qYIeǞڟ'%ˢn{wemO{6)ͻ f?v$;-Ɗ;_Sdy0D{ Al?Ax%c Ձ.ɒ៖}a~‘,O}ȸ߶ev Do1&\5^^;c2ӏ z{QAF8pXwgh~ N.[ϖ}!z܍t'p; +o/r2ʑ>t=%bqzR~|>F H'Їp w4;ӵI$ _33F/KOMFI$JU8 B.X:| Ac|@'P=4XR tIPuu(06CN:O1pI'}O<|`pI'}O"HA~_ =̰|Vޞ( 餓>~r)i3po1SZ$I:B}&6J$Ir8B!MmBoH>H$9t9bЧ0# H'D7w,$ B޴%1)=N:鷍AxNۋ餓~Gnݺun/<#餓>~v/|A:ߑKhNHF:餏^ұe_aA2?0iIENDB`hydrogen-0.9.6-beta3/data/doc/img/instr_ed1.png000066400000000000000000000635711211146647700212160ustar00rootroot00000000000000PNG  IHDR,bKGD pHYsnd tIME*O IDATxmWC n" C BY؋Z\nh,,u?K,mE+ǩ^-c۶eTfUU~t=f4E)HpA$  /(Í|ʗzS'^nso]hhhh4!`VCCCc7s}+뢡e+=k¥4 ġ^ȺWRiBw PO~pC8uĮ8T*z;*{఺z].WKn퍋9mp ~wx\kSKo>Gr$Ϊ*c=U4gyXpkawڵ1!o:ԤVo6EdRF>b] zD:m68$Sb*;rDs:1嚕na|GE}-/uաg-{շSt*y':]@}-3|?t@*QJ^is:D}QCh[vɞNmGrvk5lDDt[7t~YJ"uI0H=`y>*^ћq=7Zss7ӭ۫=Y~/ek<td] 'd]"Trk_ 3c$nbP4DN)_CG4k1:mpG "& ',%҇ +aufk9wO@3ACAbO29a^Nj*@z9ELBCci~oV s@Ipqǭ2I1(ٕVЎfY|گU 4y# au\8`[%GMHF!Q|Zz^4>^'NU~/4_kкk d]C @`HkT3o!!q*ߵb=ozysм[X9kĞĖ^68߲<}`7?ªxjh(*wڶss sp@CCCa>?3 ɷ]MjUINZ׺:=} /r9.ukaȰ"Aj]Zuh>bi]Zz=} f&bi]ZrTh #)B&NqeC$8D#`OgeRK& ׭Cpd BaOкֵsS?!tZ1udC0AEIRK-wDxd;Am rRH1Ăm"a-+9x쫤FRd[8hR5CV#58h9k;Cߖi91Am ,c7Hy~ g"B,t-0s"砶7Fg= B =O@,Os\?a|/ rT&=tv Ed?#}ث`w[8e?)}5`$j_EEL<zҡK Z!paѧz JZX2XK[j}ukŹ7?uussP0/o}װK%žh}>W ox}7^=].0yP97~{P5jWCmP*{@ՠRkWzФKߔ%*o`xYzk[okD\MүH).灗u}/ İY]2Z8GsՐ=ٻU"*GWTW\?a@JwKFdG,~^u{=!HOrUH u%}Βtp4s14ΒS`Kx+~Z]:s.1Y39Ğd?5kWE@4S=O/ƅKoJ&II<&`KN  R{M#) H$0Ycgƾgc3I%Mo>B88%}cZ4M5_]u c0{6Zgq]^cGGκ! o)9cZݗ/ݿ9u𵋠ںФ>#a$!"gVrgk!L|ayΝ=mۀ^I-RqW"p0}4G\ iu3$$(U`Yvϓ10$l r;˯F<&0y?2W I`+Q*a[$">~#s^'9Rg iש.fľW`'OaSTt1GU@-|}uhg$F Rȩl(@Zľ[B1H%S"'^B}۳a2W{/@ z8sg`Xt~l/ B?\qxLPK*I*"N F"'Av"OÉ?1 WD3ir;Ǟ=J.q*.?^?$qM;{3/kamVt: 捁- x<{ϲ)tzcϝ`,tPu,ˢV\}}BʪAX8>ijGHw!ܗ/0*#5bԲ8g"ӎ ZwYE~89[t`%"<T # Nd'5b׏{5Lu&/01¶C`< =JwW8N\.ntqUd]c ^Qҕ./k>^+9w^eBqtӃvOt, \"1dlI&β H܊̍i.nExS3DH&H%S|}=kHz꿩z,|( 5?>19 //#oNB"b|@dg"TT]9!~êʈS091W7Ń/bc%#{jtkū]҅Ӽxtӛ+Ura5>Js^{Q ^)(ga/ـH4%i2ą= DL0lVj6]bWz뿙z/1o ~89ļc}Vzu@eR~g0GM,@ c]oJs $vI|ܦ׆RJ,+M.6s73 Bu4؇@j*x b_3n79 YxJ@˅@Cu J%EJ&I_+bZȺ ~IVTU!U ˻jnfXkJa?lMb4ӿEupQ)`ԏ]>} +O*հF-&3;E1C㏫nH"~=tb?LǾkD2'R\}ĭ5du5y Ó!Ac}L9~1yxkrH"ޑ!C[]P[q!8J*.e8=4 AMhJd'o30tpE*B gʺ].1{Owpnt0Ɵ' Wsps{&r++9z)n\/?):YGR[[6%z5Lj^DCyRa%M N0WHH> zrE1ʎ lo QGq(ϐ \׸p-$`Z2hcqJ\$#eGsSjIG#c굠o3,Z v,N ĥ 2ɨsH~Ԧ]K0``Ӳ~NܐWP1"(Eִٯ U{:M{"G9P԰1mL̈́GN-t@H49>&],+ݾ\ H y|Nm&3=o%s6;$v>mL$$)ƞ6zA'@{m?Dw-N(=7X:ܔm}){G!Ld{8[Rj4L%;2F͔]2ZhphAh9Ljo O%FHОsXzy?MƶD9do5`94sv9hhlo-pshA8{lיP0Վtcz̰3 Z_t=Csb9mc?=[}4z@tz6;fA?w&gN)ZOvh^1t@z^)?A㛯mӁadC9914sٙxԧg߻,.t`>aE;֒~[1\s ^FGAFC߭МNvwvY`МƎ~%9пx<_q?7'/az:Jvx;"S}5z vڶ˯\929VVsSJϽi*j1xRsx9 МF[444Bsh 9hhh444b9-r[M_Cԯ.Iuk}βs^sʷ2]]voֵa0LΡEZQc_Z2+ګ/a<9|)Rny]?^;l/#O n<` 둥:H, O"C{! CՕu@fv)=A}Pۻ! RK-"Qr`OxPp[XGRC׺ֵ^})9 9nau@"CGsкNK < V s:~Pdպֵ޳>yβ˖~RK-#!9yZjpJs\҅hhh ۫%WZj嶖 àFz4MZ(9 ֦[kZ>rC:sn_PoCx0t!@֐+UeREUq"{_~zĞʶo]I94]#lhx3_]Vm*KhT_a_ۣ{֒2V'rks|u}䊤 *Qo?}VtT7TeRIXҌ?51Zh#kk{:;LFY{ibpz۳UӫRsUgjgl9l-CV[u+fl9ҙI̽fϑ?GNM'9wc=#P]q1&G?^*hggW^QL>ؓPd({w\D ؇Xg/`LjG,)|4K$c'ul_T /:*&8)Ν}PâP]v|TQ1Ԑ$ Ob37G$U'& Z'ScўڗE 1)&iO0?mZTo\cRJ,R 39+U?~~sg/"\,.R[q+ AkA ~ց8~wu]n/`Z uD *)2}c8s ^C%r!Y`׮ŀB>^F&v٦X,"k=c;T*92*k0S4@Ř=1QREn~l-6B~՗"O(]ľHhҘ"gTΒy:"Z;fdɒM1߲gXbYbwAG;R{SKS]Q3\J<&{||g^W>pkJb ɞ8^aNQR t렮B6W{lԅ`8߶[aQ^,(Ȳ,5Z udD Ue4A4ۭSMx2qjO5?E )!#LPI!N5xuۊ 8tD^}e.+ՖiY/I:$~w1f0'FfCUQuɴ1jEk `4qQRqt !̡=zE_WAuHrEܠ^a#ju|h/; @y^ϓa?`$.r5ʚTWG$si =aRF&N!w}֞ИQ":[NA;:)]@JuÕhZGϮ_vL~Bɴ1j8^bn9O1xG{5T`l=lO;s>Cd%5ΛЫIjM C8yILo~s_V3;Io餺&]l|^I%TsO,IƯI"L AlBAUJj^]쑵;&sxgy;*=~=Q˨lyw◅ X8QR%6T`0zr]C_q5Tԫz?r 5)5e*KeFrE5 NաTՐAQ:jQ.E XTq3Ba){T[m,;)FS&JcOKŎ銇cb\b1qs@"bX:bH[{V\R_.B9 a$G- glPϨ6s2v:?Ls/ƞHcmolJ~W2RCJ! xk'gnA SA=eM0Mu@{En5D lPg!r^ twۿ{"1 a$,t:M:&8IS:=qA۝I]vqcyn՞䨅nCG]ě:(c'δ=F:8~є?"fޝk:z)զ ?vHvjS~Tt^\;3KsDuu\P-9HwTPhvo k~hlhFgun_3-ە747qC>VMpyfnB *E3YoPc'0;vp#A9)b oߑz\1ŹWP 5^jC~(NחW:`>hv U/=>j coi?ݎ?a :7 9]m+ q,Y o܍k}HR,S&RsC,tJf C\K-)rs9RK-s{=~pZn{ 9s8‹$&C <6VZv}psK{vZ׺wp3 k];Josh7FѺֵs̡8/Zx \{7s/3->dwQKݭ1ϡ91CO0$βK -rIڿ1߭.Znko$d.FCCC^n 7sbh!s8vqZnp_S 9sMNOx8? P1vp;^ŮT,);c 4A,oպ/rp4 "~1kH\OAoa~$-p+O W/IJ+.1br"KjHv!5* U핿!kH5>aL  ~`7=mu{m[e>?}VlgTeRIXҌ?51Z;iٗ4'޿ǀZ9W_.(`cց< CV[9P>f/ȏs3{͎Hߤ}LgC/O}8ADъ M)Xju g.WAKea011 a8 v٦PXtaQY*#DB>G⹣a6{Rpw}:4?~09 DWܹZs8z|Rϵu(͹SR֥ &+.f$h3KerRRW"w-99~]<8S;{1`EJwK8n$z-(0$u 'bku]n/`Z J-p0D=s!bNIHEZ+J#7ѳ74?wξJ׭4pr~oS|AQ܇Hs.EdM"z̢tgJ4XfB6p.V}94n& yܛ?/!hdA#畁7?lǩ4#LhJq ͓>4eYM%bګ _HœncS|g8rzd?C4P >rw`o Wo< {̿3]o[2L0 uՉERZ8⍁k[H&H$ j#I˨i9 V +SeC<*}6sXk@S<Ƚ3gp~v.RJJ k`,V/1T!zCV19jRKL04)KA5mh;Q9ԂWs'Fq khF|*}{4ppT55ߡ2M ~{!$ G4XG[~89a_߁CA9t6s<{!iؾ=Tm]ʱCr$U'tNˎEW¿Bkvs CӞsgH l94;9T5Y9@ 'TA.Ib*0G>㙆@AjRRu]qjM?BPxRHl? T9ps|-#7yCw޼D;dĊH`E~mu(kP1 jHlh,ޱ>ο:e?D sH?Ods|a9@|wok=yC$P<,_{UpX]Pj0tDu%Jח+JgM*"x:@ ?`w `ԇ98mHڵ X&Qy #,i ұVCT"1b` JH/ `#&~tf|?3)ku o'Ȟ9X9h87a` WWWՓ%&[Ĺ] q(MUg,fXM=dIIٶqR)w'Auťbc2ܮbG9Org{ë9s!oFrrYTH/Wxwo03FB$kFH\Y ` *Qx]vQn~8ˑ玑S8ЙeTP>/Šd8(N{뺤Q-0C}Ej$1ԫR,;$D52vn%5mok~9p̯9!THץXZJfgDg_FgA[=JwռgcG?0A◷V}_EmW9T6pCnEarc{C<oJ7u9Irݹ290$jv ΡVa=w .CfO~9\9xi7pYWNc,94}WEn~pL+y_}t޼;=ϯe]zD vh9MAndr~9srX-R \E. jA m3cOn}o˿BX y>`mA"}7/s7W[yѻRS-o0vÿn} HLkS֯F>Мns>qv C__o^/<znxFH|k=>7JP]Ƒߩ6g }{`Fwח(Ghh__ ǿv:a0ʉqzC{xSA͐t*8O'ta@}o5^S\xdO7Ә1PN@׮Ayc7.9xi!ڍs;WfT]܁Qjm|̋BNy*)&]]JwJ]߮>yE=AtMB04h[ʏd4WߺҠCCCzvڶDwa,Oe):?n㺅}*/]8 &HRT̓x$1P-}lu=zzH=: uIGY;_5oR܍kdgdvP?ЀSu{IzzS܉:Zz"c`K8Uԣ~~~frWSϑ[S0b]}I^ހë^9̶;kWI%%j];Wʃw@!L@E"oSF^pp9JK-\Cs/hA90\K-(/rM ra `s2nChhhhlP+o S/3jFodwQ 9GaIewTZjegiB!V6Dm9`?CZn$wno+S=54fD'0 EBGƶpi2*C}8/N o9p"aPZaUJʒOc 4A,osjkf]Vq׶I(o- 7iCMy&aKo+[dVJ!rݤ$6#)&' N";6pW\zm!2\orzCzN?x#ߗPI6׭2þˊaibp:i2wc@&1FRk 6EC7TeRkٴEDC EQttc`6!)u[~jK[9jn+n^U.a D}g?l9ҙI̽f`٦N] j8M[z]Ѭ!Cf?;p IRP<|<0P/d^'Vo){ʤ 82$&&1XCխTp6;EFA $ʼ$9 uȨM2Ͱed,bS`m JwHf2M[}h/݊hʼng}xRϑS"j%>:{1uɺTbMģIRgp>Y 1`^{G3lcOFHs|֡4^jc7I=d RG>+K{%6mQ|gЃ M5V<o ?d)~@"g}gڍ"&ewHT?7 Obט Tg+.W)Ox7q_-P)0'^8Źuڔ0 ?iZܸqYY*#6mQ`sÛG9F>\!VO@fSŮ  ܕ*s52Ȝ"%da ^Zn8s ^C%r~kSRqU65Oq9q3^ ^d$09V}9V\rѿsPb!9rxuA.t3ЩT(k.# %1jRz:K9 Tf }(2) `9j2t'sAϦ@ CuPqV)~ `bL` ߚ"֡]Cj$9jbm"&S,(%UQQOse&ToOs4 &0,JwFTAOs=r5Rq%9cR]? gx( N: HWT*pkJbx|ay҇ư}%1('q*)@5 8K6ơ#M3dI ɦPlТW! 9=}#8epazՕd-<>/~1uW tb1pI'!,\ze!5F' Sz$IuIIRb)3pk01DFMSuA:7\;11^>w"P9xK]Of)Xμjv}WAcaYHaRtUu Q6HH)+U,.LʑQrQ}r"jݡ3IΎI 5/iKP:A8luЌ!44)ïbV$RJĞ͛Z/<ɇD9 u5ܪ Kv]ĪyVOóY9x5JC S0ꦩאR\Eݻ{52OLJ&u"85ᦆ5uU>EJ60Td*9,^`p\{яs_j!:"m |!9|Y]! ;2Y:G;6 g f7O&]TN# ~q4yp@1'~~'ljA 5ڈAGT l|p.3(ǟVs1$MB4*63@9m 9k=7ճhAA16v'{|[Tc >uA %@x]R IDATj8#dJ&ZcdOP,ϵ}WEORu~G.!J׫-zBvHeLr(pß1YMզnA8-I%7-T HGM6 =pN7/-&^BL+."!@9jR,;:U˗L e1knlcjPL9S Ib%88ym}^<:u׭H?9ѠFMGM~Rѽ9Qս-N-6ɕDxx pmEK7s ¦#֓1t $ $P<,_{#-.0x;WcJi䊋C{~[$+NCs]3nyeyM6]y ^pE{`HR {%+.T2W$JҖyQ޼aPjΡM@}ëʮ3KmozNc笮ڵ PN#t:B@p@H}IFR#5E.dG_2N(21g]AJŦfL6~y10P*ZlZGQn~4ˑgشQm{VD*s Xs2H ƨL$Ucnvġ4U"Dtb6GS$aMMJʶJM+U= j+./I aQ6S'Z6Z Kwo"6g2,ºm\glP`shng;smme#9r &`cO˶5RFcc]"D[ &jZvgPѧgkɦfLa Tq>j)9g+AQKDr~S8a$ Ha$HΕu` *HPNQn~8ˑ玑S9tCs.Wx{@[: + xAc94T|vY #`׮]~0 L?(pLfH"q\Gهw-!IZ]RrQ2v.U7p3ljFy6m9~9oes މf 'La7IޑJv gA%''(|`$a5ym}z`m³mcSM-#VSqr·;@~&^[BR#ׇ"UovgeA'!P9u˴u08fS|?_?9p I ]RiMYi2s8uqȠyӂ(YV'~ykշEve?fٴ] rCS`H?CA9Y}aJ+ (}SR_@B"H>`Rlv+U?__9ԃ0=d8Zn}s^9Carb7sg+G5Ε7?t147nrmf[4T^vcy׎UhN#͎a.[Cߜߎ0C93VebG˛\gMfn5ՏT^54dfߛF BxN+{]ˎǏ5;hݯuvtPoh{tp#\qsmO8vH 79ϫsT0.;߸G4ek7MvvEs9bT9;r no֡f}̡6{odvʟ1̍\x{MWSA/;!H5/b̬Cap}s 6@Xvߨ߈'q t_gLQ hZ~q!Zp4׬^44砜C~m!kuuuնm.^9̼Og{*s`ܻ4t _vt4GP QSq( $IF R͗ӊYQpԣPdtRȯ|W)^9wY39p ))YW9@Si]뛣w A1{mpu}; )ym`GT}`~]+8W_J*iץ@u?P-8 8l<ؐBK-lDO<3pzp-Բi7sȅ5447b+dr;^&)É^dbuod^K +0$βc*-ԲLc_sь/VZCFo9S٪y[zjh<5҅dguhC/s1mE6s8=D:6CdzRdUeƈA*iYV۫u_@eA40Dnshpܷ҃sC!JYRq+:ஸH@.Hɉ,fC iP>_}z~hF z9ߧ:@_ z$\|~ZH$R.Jݘ:fIOϳM~d+ji(\p:ؾ8C?+laSK[9jncBd#?ΑLb5;#-}hFgz IbJUԷ?Kea011 a; v٦PXtqU0.abP v2xa%k!kae]CpvXBaIDHE0ȸ 2ԀAUp tN?ӣy̯ԩS;֙j,R 62sNF|VTNu}l~e#3oxҹ`N &vbols?oM/{-r>f e=͡Jr{`ZQf9 O?G߽;`D1!h3+?<.I[A&\wу+rxp*!i Cx ktw^lw[}РӤu=Vsk|ˏ'8tKQR89 W> {489lm[VV^;?|*ߣYV1O6~]wbڋm.oMl`Ջkq i5wBP9P G8wEtEo^\4*Znh\l~zﱼr\c 9]YܞK͡ha?`}g 7n?ge:NTIR*lwLHA1= i4N 9<^`O#:kF"Lpٿ,ckd /{DoMq3/?%@q1a{9yO>->s }.j2 5KKK[{-$ >[6)3zח7WX}2I5|Sf9 9^琕OBn/.vj{_t~I%"TՕ Z/xM#2&Z!~go"ܦG4yI9|N,TCJ50x8ϗ0<ƕj`ˇC$_Y"L+Yr B(ak cLF2q*h79Py )p>?뙷:h-}uACJ)z{t?3r2w{ ~WVHN9:|53gLe=6++ -@ơWdRA&I5cN*IZgd4C1Θa{(}2I̋ę(`}>O6_f#٬=jVux.wGo/gl{$s'CþC\HTs샔8Y˕r4E.q n)vCc8)Aq}^%I5IYci5_4a?B1Vpյ=kWjg@EYl p/Mܦ[d y}jof+WVi4na5E!t[SFu<_V5i4:h|294N9$.yV'|&Vs(! LgA?9)xY=瓷!ܹuo۷'OZ'zxn{տW;oˆ5e ¾r]w~wy e1_mǕx^>0ҎRퟣ#T;OLOϧv3| Ƿr?ϳv}0AkAkWoͫۼy~>H?|ܽcl5>8a5(3hJ}蹳!qW1yuެ "ʕxvQ?<=FzpR_-A~>2tQoxqYbVs7`ÙO> r痿kk~{ޗ?/jRƻ׹|8ʼ,uz~DBrBؙ}~{EH5kF؏5jc'7~Q;>b5VWVkrنy/2{(-1vq*ӳWrG؟n *"EݥG9\5__6+-ؖO78AXlާ agZ!.bϧ]o/AAO.bϥ]oߗF)Bs(TVQ=gͪ=*ELOg\RϟIW(L{ZgqF%s`tS "0PIq󓲇y'ap:+NBL5o)RNYqf9{ +"bϧ߮dCJj2$-eePnub`^CԤb-\akņqwHJ"޲֠90:qRs(.kY`H({ǝ[΍|٫MPCuǵ\B̹UE:ɚpb0` }3Ts(e{jx͡(6P(ܛd}o&YpBpo>1ۏDsx0x% g_:f͡R,PqL9`w"}٣ Z{7(woГ V?L94J(< Z ZEkBkh#Ph Ds 5hBUA(V?9*G4*Z ZEkBkh#Ph Ds 5hBUA(V?9*G4*Z ZEkBkh#Ph Ds 5hBUA(V?9*G4*Z ZEkBkh#Ph Ds 5hBUA(V?9*G4*Z ZEkBkh#Ph Ds 5hBUA(V?9*G4*Z ZEkBkh#Ph Ds 5hBUA(V?9*G4*Z栔A(< mz=c͡9LA,iGv]݈x7s~sZiSEsa?`Qkyy۳n--F"ƃ(H'# 1,hi5_zlpad;9i"x{RmM{N3uȨ(:$p6[@2 t/os=RE-p]oZCtif8!O959uk1Z-ܦ=H~)WMig( î 7?u?Ds8$Q[\X2K%uN5[hV9MW.[Jѩ`h7$•\^ q1WW. !h`Ϋ'*`8zpZnۜ6Lͭr:P vz7ЃRs6,266CǑqhͭY_l2\&tl@j5Oa.gZDkb\Q]9DǸN9T** >a?(7_k*N5~Gh@Q 5wHsH򫉻0ھZmf$k;˽)P֦Ja<% ቮi #Zr0Okң-I)(1Y[O6`"y6&d~ot?CC&0{딁|Qh05baV2켓ALMlPGMFlE=xX(ͅ1S{/GqlNRWbu&1<@`CQOhC=spT1O _/Zn{IDATꌥ0j(b_vkPdh2ڢ&_YhGy9fhs6=Ȝq̡KǞFsW0Ρ]fggP>0Ϟ8 .k\\Y=q4O6_O4e2/~[Y]Wf|S Ycz_d_YacP5'iIy}@׃9dTspȔ'g$z$믽22t:Ǟo4]jQ33-4i4ebM"\Rqܬ=r _9fP4v#/u{3cVw/M2[\gY\X%uQivQm n[ts5sUs]΅ejsz},J5ir-#OR,*~/֠2xMKyDs8, 2^p&6/A`\~j4*J)VV.ǤYX;^=h>o¢99j%=;6h\cii=H۽J*vwhk9φ9^hRth䁏biRq{xjpt"{+;ƪiwJ)?-lqTtC^ ͬjr'ngջhtC%+5zIǫbLl(hSWNuq^`s%h[w`1{4! v2?-)ae@213hwc_m_ATZ5=\upܴڢ9 G=Hl!P>pL`'qt[> TYY2XYk-éjz\b! B /4^zQ&c8e:EsŮ؆Ys5TM5$Ю]$ƏS+"W 1ۇB(V8\ܞ5w9ׄ! k|7 ƻ+9"ÚB%́O5898C:Ph)k[oqBp"o{~~ T,EK0f1#C lDHYvLT0>{bq'z-EB4}aTpHxثndrƷSLoDDcĦfDJB1$|ʊAMNio"䙝evv.e6˛%J{R&JRٯ[VKe* Jžw>m|^tyU6s:~odh"Dg2Ƣ\LG] 4gUo]V*j^,m7XU!+o[ɮ]<6}ϧmϋ 319A ?9fNV,'d2} a꠽(aw  | `~P{n|,;AA(}HW riGF+LUJrd"Ij.pلyt1??orsּ\5O>ٵkffT*Tʕ:IR.uշ,LO&gi2e<;O.?-oYԥVLd&t/߆ >@< [v ̯HXZZr~3eYVr+,--C keiO*"Nc{kޟ3}]  *J:9xí DD"aG#ǁoWԼu|@AD#i1%J gC09ڹ$f|?lu(ԥbJ+pc6 5-^'My,:QRdq_~%gI5'85LH&oLLo٠0>Rm|~f/}dJ/7N*:c}։b\nw=n͛B[Npߕ0⭛07s#UFe?0Zr"SΥIͧHӾB+VtO<7X$Zr\;owwae67_J\b~n-TUߓZDǷ &Qn:~E?I-qHH# gS:О;)o9!:A)t|~**_/_ZZO>eU]}2t| z  : 7xx}০ssj?i탾ߑc]J\b%WYͯmjd0LRa弄[Jvl.멞:r qtK-nUu`'IԬJT>m:>s45ᩌ&?³A]XYXX̊)W󫨪֮T.@n{0?I=qϜlN*1w7KJJ4ѶE 9{.NoVױ|>յ?Igы<(gc}vvf_ѭK}C,nll|)'߉h?j2Fhl JJ'ض䬾u|݆+\W_ww{#-~`oT2jIENDB`hydrogen-0.9.6-beta3/data/doc/img/midi_in.png000066400000000000000000000033731211146647700207300ustar00rootroot00000000000000PNG  IHDR ebKGD pHYsnd tIME+,IDATxn Z q Gq}]`[@O"=BBE/?Z XQ)IYLˣa/H%Z,@Ñ8mO.5B"DiťVFF @c?Gɑur!FN{wz"Ezx&^%-uD@㍀ 2i 7wpl+g\Qi|ӗgpAiT{@#,XQK`[p|߸[]\w)—W>Lx 9?'O/vKSHk, RHJ{{.k  j~{Nkssڝ6h{=:Ng{yH,ҷ$3=}쉲Nwc|~O.w76A]I}{=\TUZf L c?^oѪPj5ɔj*g ,}KIO?{"3lɧ9=P=}-g JY[dn"+%kY;#:B@2:'(T*Zfrsӡuh{m<nW%+K'g*j%o5jǧ)kK8hvq@.猝ؑmV(B;Y  P$Dw]I:'׏7}YGJ27u` Pi{m:JJϮ =J)R>9Bi5LEs ~*)Q2sǴZ $zŅ?LB%2#p2-Z+TϺp{ݽR1[ȩu?~aa_d]?(>Yo1G$a1mX8tIENDB`hydrogen-0.9.6-beta3/data/doc/img/mixer-instrrack_btn.png000066400000000000000000000102031211146647700232730ustar00rootroot00000000000000PNG  IHDR-ʠPsBITOtEXtSoftwaregnome-screenshot>IDATxyxEǿ3=w2/$p(/\*"] E*yL2#9ydGиddd__Azqr %ICssҀB[hhh V $Ih V K".*<1./vewG=ťǍ%QңVeWVz*++;ZK.OqWg^I<&Fwio]jxOh=.!jWd57Z14hf3 XKs(|?Nje:/e"˲[m6r*M@R?Hm*~k5εR󴫪tbK[6ZsJY ;Xr0 o>w51%c=.Aec턩 7H?k0/)@ѾSҊjb6N+=l6!Pט2 G[^ۚJI)zӿ;WQԞ_wW!bgO+3Q$>?UjqWuIaJe) PNy|[w-`ݢ&C5Ja#w)GĴ>vl?n|Ӊp}3{ӿڳӰ 5b9,zaĞrM sMg=pS? SFE S33?V"l~gغ{E&bg{rusƅ 愄/)&'glpŶ  ό>6-}KUn{ב/0Y=ES |oA=Cc]a5* }2 MV 8DCj}}tϾNW::&sGs 8bCH>[pĩ~{Vx_ul1}C[*RfRKZXєA\RԀ֫?+(R n |xY?Wee+y0Ue3F>'~:wGuT~n{fNFRMK]089gS`*-/PsAؔ'^{,ܝ/峂98N7Y< Ų4wyNcn7spYr'j=!  8 §N_3^ ~Ēs߼o2{9T.Nbզ,[w&'9閹])L C}\W놂>o yjyU}-ŕW^zKP{"~$s'b>Ѳ3*`ɉ0vIBtxP15!YW[YtȞ#nq6֨kLVfP#eY;bpoc̡}ȮEXad)Κ#p{\$wW۱u(>[pw-)g omVZ7Jήy֪̐ 7 KoMkWyTkǹ? ؓߙ< Պ:pk(Es]Cv6ɌZegƲGsvVR!n>3֔lzm7إ^V%H1{/O}/ވ|pSkJI(3FIC p((Y-, &x!}ɶF8K}uHDܭOiߴE/`t=u6]C#FQ2rR70Jze]z.8}9rP!+ToO^苇TԖU*^9SU^&]zM mjhx呉On6,ؿkO.A2G4XE*t1!>`h"!őm*q[Tl:G&|)m|eߎK *a =Lg۞ϯ\VO?j:;+ ?|m^ʇKW7fۏُNMUzILFCha.' vA䪓Ag 8qR@ЋF(\u1&~Q/d hh$g~WԹEWI@fTY=gZe1xLJ 0]lxJ0]ST߂S0*Phx\؝Ejd123@,:zIP}'HJ^fWnC[(48(Zn: 6ڊ*{^K`.UsA`18hc;:aN5i/qCH]Թ&MMi"h W ,ЂFFڍhA<,YێW tN1 8x" mIN!Y7xCO 5( L JD{:yRof Uuu՗kZq rj <(#и(_|rKjIhE 4447@Chh@s hn 44Z̋YDm}vl=HC)3&w kOY447g&tE%dO|IENDB`hydrogen-0.9.6-beta3/data/doc/img/newPatternBtn_on.png000066400000000000000000000014231211146647700226010ustar00rootroot00000000000000PNG  IHDR-gAMA1_IDATxkU?3n -]u],!q#PS( AɢUw]vUB0PJ]>ZI&̼sw&oĤ_9s~|w095-@d|vȅk!qTt.µPv] B`uSn>im삠t bV*<|3sB$nf@jHEQ+[DE=G ư $3;l$Egh sߠ,2x/byK_>)0qeee֞ɩiL)@j{Giqqw_A}8(PUo+#]|g<ަ>.,Xk)~ث'y9:c=Xkl9Ds\qX7$Y3Lgj?1L(0* & C Cc|O5LGKC ֶ#U#Z"#4@R@Ri!FJ؊1o>8ōIuJ+ M Ol ^up4x:a v[\G&ߛ-&NE,xp5ʂUGDpU}!wfr~βlaf3 3S?ԴOε(IENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/000077500000000000000000000000001211146647700172155ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/doc/img/nl/DrumkitExport.png000066400000000000000000000307421211146647700225520ustar00rootroot00000000000000PNG  IHDR] pHYs/ IDATxohg.0_ RȔ*sh`e/QȁXЈ.jyEBjЍZh r8p*/r )R! $D5H \`deױz33+%1>QCt)7UuD}T*7MS{M SYUjHa}<= CrRvjjH֌-IuEo?jPݰ%F]sD;%U|RFHlOt< QǺDy mQL{M [F+L?(+Cn٪U|Rm(_~Go[k io9ٶr)}LlfXωw`X{9IƦձ:Jr._ ڐ솭zݖeYm96$[xpvz![eyn0w䊳fl 6`t#r҇RqEuVs.u|=!w|: 7uv2u.=))kEnC5sEsEFACJ*4ףuJ~VNYGӍ++'5c+},!EC~݆Sҷa68ާJRVFp@?WSf-P`2 =rT5񠼤>z' ~tT$^xe7)W8mNW C,/<7e!׺؁V9P[!Z'u$zƬV"%g2dhuwc*ifa.lv\WȯݒӶ8Pe𭒺 ѐ"!ScK@[Xdo=i:֧m+y 5fշTMQk+}ݺ"zu_ũ,|݆.(H !L[z8͂)CA /ab gdP%CnnC*O,~sEҤ Zنd,$JGvͪ*%U2UWy&_O{Mahh9k5fp9wkB㲤GNp(LJrƘtRm(ǭӦu)P`5ÙGYpܔعab!bK1+R!u5Yߥ1~b꙰gNptInnI,{{Z:\A7do^!뙿ݐ&Jd=2{+ֻ0tR9\kV` 6`mzL {#^ؔ ahݵq_T~\Uzιfa ?5Mn] 2>ڴF,=a ږm.C'TXQfϥcn=doeַ^ύݰ[aϮDY_wiOVwEry nC#_K.ehak^ucs$5K_+'f LUmylE%5`ٸo!㙱8N5)*ۣV[mV53K4ېX{_Rݪo^"`'@ډJ/Z3sSi:jT4Fj [,Ak&NH)*~W珇Z^wRGVQ{5p8 p"uԺ.y)󟞗5QXsgvC&>SҤԐ2 C=>UpN<Һ;ېQi:i>Br`>^ץwa+_k♱iu4X*Sa?-0dXLq\n*0U,Wq{Rf!>3a4[u_es' LT^N}2MS;܌:[5H|s'.wwb-"/I2qehm{*Rf֌s"+)!ՔY. xAU5pTܹu+H)^'/nzL/fԱY-`H4Q @ @M*\!A譐4^q46׋DA"߳CH  ZAX* ?:~!`A">:J2`D3D` _ V-x!8҆ dzkCaen2%q%]6ɖ]eoln՟K]CJ->dSшrws>[]Rvʷ˳c:<.|oGg#awjl6SsܐߋdR ɶY?й/Scfn;ѫ gn[Gz$ܕaUL*w7|M{M RFQRiGvԐuy<K+|(,.2{4lVBB>S]4qkzVQ}SnG'?RD>>n-WOV]s#r4".~2?d@تjɸ~S< kp[ٙ'c2Mo/ ;D/|e~HXęWdK)gqa[jɲF%e\Ϩ/ląĊ룓v^vBeI7,}rr}+jQխuֶ|~[ E/ϣ䥤MY>RXGr^;x[$˲T/incQٶ|iL|Pݘ&K85SmA!~2ͬߤ5YT~ĝ%YeDzz/+MUOA^ٱ&KQQyz|^_%?O*a\I9zDUr4Ab+ދʞP~Qc1]EKךc|JS2ߧ?WA^*&>Q#,/_r>¤>3_ʚw bKz$T,LjԀOtaYCg5p&VFFËڹ2Ն+\N*~rPE{i2?dt{*Z#*}5baRX[I(;U&>ka^Ik\X۾my^_71ŰԐN h!%/%e5۷coO:މ6\yVĭ >oOCg_×m1A[av6TyVqN+x snHB\=.z,*nΟsD^LC)ȷ )Ո*O UYE^:8GZV5=NӃ)ݨF.=ՑG$IgOUKy=m\sxV,,b9SW갎 6 $3>zkNVo˪od7M.g*>,: ]3\F{55@2sq=˙,O.-ZNy`>=Q*|8JO/\Ak,aAq-oPs)w[yV_)ǵqI*?T~N9}G?֯+us'e W26g _kol6zqk^ T̢W|DAQ7s' ~L!s/rNrVA?ot6dˍϩbY{q.r),p5mhЙ]Ku?P딢1 yk.FTlہ7g'[Ws jԠRWGrDhNʼ,VkWVzPjۖy6:>xsDpDcQ{L~GٶK"R;]Sv<  PjZi*cF7Ɨ%0T.U2  kRWRN=g4v}LK\˞lp:lXGmYjۚ\̎6UU~^Kgl!y‡":7rI ji  U{Vȥo g),ZUA9jϪ<(ueT?x@P_[SUm7iAԤJ)ŰjϪ*';-zs'e W|6zZ]vܶ4UUʨ&nkUm*˲&}[J-{;A(yBF$A |23Ν)sbǔRoH=i yoӊ*aL^MܚP"G#.'Np3gtO</t=8ąsk^IjX ΞK(wٌ^U!Eߍ68йѣW)yNeY̽~~sM;ی~H+MJCe  hʨ‡,)<7i c7ziRWSrDn[a%>K.'ΝyY֮mE v%ζYf:[9foLlxr^_L󤒟oKI%/9kf܁gateg>0 _^q^+ճt\2]R_?=/kZ`b4;~ͬE7Nk^%/mHniuad+\&XkY9 |2@cT,UC4fibϑxw@۞0KҮ/e/ xu7fǭɹڴ! / $lu>f6| 6|lCN3`0m23[~'V7fgg:-x5=ci8;`ڀ6| -MRu:Ec7t$K:yZx Xſ^l $ ? x@O!~*+Hp0 H HA$A$A  !(*yRmo;n8˕⃢5`k$ _OSM&q;E\O=$–vi߷ۧ@ 23qpyʶeSxL3j*ǣILLxkMWyVq.;p.;ԧx3z|1"w[b-[vq{ {;GZjD%Q9g)7m+z,c<5F^N_zZy*۹tKSA^CE ^ ˲T>]Wu GQୀbV8^S)UT/䕼bXgCa*˪[M+I>TUy?K.-3*ͬSUNi ^ 1tnH{]{]^%>OX&n}oI ) j̐o~0:Y]EU,}'J}Z=C@Py 1Dž'u=ޏ)u%@2g,7v]R_?=l*S}k|`T,UO:.˗v #H fQ^!;=`ÞKV^N_ʴ0o>eu6ߞ&9.ֻ/({f Yk'/~BJ!b8R_׵޶-H4CD!BiTfX2bjFv Cx054˸ xAΈ7ǷcSш&KVY˖oG; ϧ>]oGM[m!H^T=>"yiXjS}7Yt#xI{#6햧#OG^SKò,K9zu0K`9}ﲯWkUOQ_W?i5~s|@SOpXBm>>GKI7UUל>]Q懴Ee -bKͻ`Y5kUK_ +r4`יO7^T?fե̏]EZU}eY=~[4xfI2fSf+aQT钗4ԗ)4tfPP|}f7G%UoW}oinf4g%Rwgʳf%M> J^W^%/*SUMܚW)Aw4pzH7CJnoXT^Mw<#N3g%Iryڍ iH _UhâNeMjt[Y%?kNVo˪Q~%?O: 5Wh]yՙ/eGԅu-}=X2} @ov/s~NGe>KTy\i+uz&JyR4 -]:wVmtc$[b3麬jrs:ؒgb1jU y K.ɶ%6>gC*?,\йz}:{n@B^F.'5~cLoW\֍N"GE[]BB *z<KAR_ _s VV+J|6Q݆:Wjk5%/]tcX̽~~sM}.Fum$[x ۜAO?]Yg̃\cV'8~ !vm {IDAT4|yX×/IJ^8{۴tnd:CZK"s$2l/z$[AuU#xd^%H+_(*- //S m7*|0Lmܽܺ۶2e/~eYVG{[2lzk$,R0l}i$[^R  @ @ H H HlsyD=#M>.KP;Ώ * LӔxm[hO5ءR_7N};"""46;nsgfmVD/ȾxT7fS`X{9{6/H0F^EE;.HqDsؑAV[Cjθ$)r_ϓ=.I~)kjwUĺܾjԠ }~6IR콘تu4$ϣo)z,wEIR@ٹ}NQ~n|}۾0"T\JE3'I<WoNtzݪ˚5ZwR }GJ^J*r_9 ǭ$)yB9eoK )~2&p+q!qkdi+$ѫ^ވ vW|ݚ**2w2\Ƌ19>.Xjܝ e^sO|TDTZ]v^uOGN: -]yuR⅄=X+?豘Ԑ2ߥ5|yXֲ T\BruVrP|W2z?em;zhsyE߮S4)_|WԬm0 ]U_%4;SWY*S;=E{aQm/[߁>3Ybթ"G Ssi5F^鏜SiָfxL{X3*S{TUvnX~T=c;"\'rD}.˲ZGǶ2 .c74,-׷|=^eiVn!n uJ%\Nj\s`]f UyVaWB5ʔS,c~.8>TFX[^s+:UkXޘ"ǎ8!jzI/䃧 aX؛[7`{mR "6Z_ZUm_F:0[Ӗ|^=^լS\t{j5UUo;RZ3̽Υ 0Tv,5pY<%txNUVQVǷU\}]\RR^Rnk5y~1})~:.04tn23a_8W)53}d\=aq/W\(0֬c~=~D_髩eĖqqwNC| m7,?ҿ/==Y3SUYs5 3q˻+۶vk=sglYng:wP̽f._OnW;a˩̀ cQW}voDz;sz%l[>OZMv1uJCqF^RFQ?^VRPX\X=ΜUIRxTe~7'㭮zC2\1n QZ !EVlYh2<,~^_&̾ikZ~{lisk̹<.ЙAȿ?: m~iMV0N#ϢgY ,X<AkeY[z6:v?مy~3Kқ[uIJ]mX*mk 6o>+ka^F{ Ð:ZApDǢ 13C;?bUO+4iS׻ݰ/i U*2\ƒ08T426ˮVzlSyRQml-ߪ4mh̠*+*? P \uI?֯#s[ߦ5vcLgO?hj2.*ofUU5v#i hJJ/'{?\褎EF2TEoHJ,˪Ŏ=YFVu]zy}Mזjꜜ6 3@Ow*?)s[}h\ǶmUY5ݭ1Klt9?Gbw>ąGXr9 I1뒔TWwdY=F*|02ruijݦ/ +r8*syڳy*e~?sv]u,l׭?8c>Ed3^Woi yegٻغF.E+ 4\{4pR4mq 5Qr.[g*Rc~w{ۭjU۔ϻ|=Fj=n']R_?=R_Ve{/ g#{"fl6nN Qܽ + lYm\ң k=,{Ѽhi 6Z -ZZϢyX[[Vw2 ?4u5˺86Ed.7i234!A֞LlZXt+յOx-C}5wlʋX 6K*Wo't$֛+s#ha*ꆦ+i*w/ezB^i ѻ/;tMk_߉ 4ֺA薂 k [2ͶU4 H HA$A$A   @ @  H H$A$A$  @ @ @ H HA$A$A   @ @  H H$A$A$  @ @ @ H HA$A$A   A H H$A$A$  @ @ @ H HA$A$A   @ @  H H$A$A$  @ @ @ H HA$A$A   @ @  H H$A$A$  4 H HA$A$A   @ @  H H$A$A$  @ @ @ H HA$A$A   @ @  H H$A$A$  @ @ @ H HA$A$A   A H H$A$A$  @ @ suR(VHzQ?h1^R c}GA"x ؚx9 $abc$A$A$   @ *\P!ZtSABr5SV R@PoxQWk]VIENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/DrumkitImport.png000066400000000000000000000473531211146647700225510ustar00rootroot00000000000000PNG  IHDR] pHYs/ IDATxh?SfB\p(l 'a9Bzlpa+ O'(x . ʦxH\#(FBo'pL3mV|@&3y5yjڿO(ZprD\klF"""{7 o """ڨDY+DDDVkO "" Z UsKu@ݣ(

߼Rz{[cuP_F\(HNW:@"u?M^(e5RQ.fJu@3!)kI_3QAPQ7KuO>PxQY{eԁrA 7೽Nq@i+h0# ? H=gP*0+!cmR*֖^ *T@}Z-0 GH=H;s"7 t,myK0;:` jt]a=$ +fp0G!9ngs&"$I$+Y}Dˌ>n_pժycfbbt:`t%.©=/CƋexE~n$J(-h8DH=PxĴ>C>g 5A[( HM( \Ց*6]:A.UFA-ݾ# u`G Otdt2r˶AsFA##W*u Vٯ@rU \v1g]""mhZf Z "Ic@badϣoe]݀$!t#=ߡ{Tx{PX6mpH=.2k <"2DT 0:ϭ`bZk eYzEcۏf/yx*|@j%[Ej|0<]7ltAp~*3".=P3Qu#c C4Xz0Ü#]fP bQP~[Eoe~-#_a]²U/*(Wk랏aaW *tokV!6t K;y֜n_2O=6& 5Ғ 3pfsL!{DKf֐zH9Dνk SH &6D9"ј`i!:0Ż4&(jekd˜3Ll"ufnf4(ƒ2N7GCfoAֳ}dKeP"$QVX1ݥ4ei_kV76ޑv!"ih $]~Ak&]?"nĭܺ2!J(.{Z;VWU_TQЪl[;f>!2ҳ5$nIB;$\@k""2FݰҮ"k;:Ү9>"朇y`eźs励9b^R,4w^B$5Lex8kJ[L#+`-^iTfPnLrReaD,PԐ̿^"m$bYK~0j !22%-L =nN]}wu Xcs$*P x ʳ :-q/Tkqy፰< wnxȿ@%V]u*^FG߉@x@*R^~DmGv:NWZk HDNy̻|Uc.s' 40,v_#WzTpq7#Ύ6JU70K/_VQ՛+3[%\0KUPQ5yOh3FQ>\8nTu#9UDA'Tɺůu 9 KY87@P)ȗf:9 W =27{dus2`MM=^ %mx.rm_=u]z7 7N(‰d'Xn@B'/D-2dye "n4 :PMcoy"V\Q7Uy"9]A_A`7wv"uclDUz8}6HccFH4&Q#DDD@H """ X>Qxܟ:bE ]`ecrL p5]qލ/D~b~3uG>;iV69 h "mxVVfjGS:Jxϸoc 3Fa;vz7 t ,t4  ;/Sgͳ hu`zx%DD@*ږ23$i"6* M]23`MmI[~Od( { Ȼ-I@M]Ҋ? :"Zߥ E}uB68D bc=0 a6WAis3Z]^SJ@н-7q> 2%'P~5ʶ 2~ &?#3LiC{mGD393ʶ8<@%/ua ~ieA,K_C=:>K q6#:1#3EI#!\(o>rCn黩t§(>#}7ba_1-;^1 ~Dn}V{e_x[F$bcB(f0r:3#xЙ<=;șQ y=4˂uճe7qahA= _a>u !ޖ8t<7aȻe cذUo7edH^O[Fl$&i. C.+@EB2&L"u3!ι(ܟ@]:]/x$y wI;躎l `lR(Gfj u#ba#<jZ2Ld̳ iS:>,MGvBu9u2u t4ylXF~ W\P~SF9nQP,呼[sR!J{%d&2 h 0֬g;muA>#oZX\3i^<iLD^1_tھb_tֳ((udn0;E|ixM\Is؃3adeGߔ}Ef"ch/4$X Ծ=l$u ކK;00| #(oʘъM8P?3?NEQp75dJ}Q3 bS^݇MipFp8a/|^xҘ0oV; {!,{zQ7Lh 69ʹ.׵v:v~ NO7WpD/ YǭCeLNM6'JK7r|X> 2y(;Chqxܮ%ŃFOk|'){"Op0K,k&=AI'9 v&[䠽А~g 1?|fJg3߽2eG uɛI w4/P|1v5`"G7weBz̖yǷ &O" 77٨} $ ? MPkP*x9An:2☸7Fێ=A1߸ לh @p]A۵iGHZk9Jym831χrе:p(=qKX< -<#AQx=ص$O'R?Lmo~J"z.!i !ߏ!Mn)/I!f?4P7Gj'!t Bא{5ϬN=YfK !y=OBݫ"=n:OBR!'w Voo`1_#(4bc Cus[w-/zk78zԁ3'7臼[F~LϘDlno\cWP &1~R>[WvJ a5v1fޚoȇ)~w_1U!!*X<~}Q B;C\Yۈ_iU1~6܇<ۦboď)n%=7K3'Ư;oY>p4#P(}6܇yȃ7DQߋxK:Nkz<Dy]^PV}lΖ;0+qį~/;mA@jbmZ+;6oWT+{P.#v1 c]*Xmo]șjwk<Fo) ydg7||+DWs :Νg< ⤳gkpCjGC;'`gیl :_ܓ;q}rf#(׬KE~)R|#@.@yim/ [>N@b?wBG.܄>o—v @p ہQYߥb. |B#@2k7'h[z'L=b~~G X!D cNG䎯0?w%3羼}$o&Y mŧE 2m G"oDDr鄣cD–?_ $xm """b ADDD $1 """b ADDD $1 """DDDD $1 IR. . Kq~J\7y}i|*f[U!5f~DD H\Mx5fJ3_crj# k x5CA()lm|-6(z%wy !mJY_"""Z{#!;d) T+$ Kq((h/4H㜵^Mi6kŧYNr9ddr  QKm"|"l~҆ (N:OY@| >. /|"V~UUE|i 'P3Mĵ^QU)o5W!Ȳ UU1yl6F˲v&"( iK#S ݊9="B_093"Ʈ C~x~H|Z{ ʢ.r<7#gFPy[1'Q.{Cz"Rk6s=eH;GH}No,t,!׺  7胲GA 9ǡW:䂷ku j!?Ng X!"a(BBwa$o$QHLuy(ܟR1;]y !s؃d/QB!)X:  B-¹ ҳoM0~m. Ǜ56lseH;z_ubэ}Fn)h|:oзxܞy0qo<fvlm{` o!?\N׊&T[%_Q|EYّD꼭|-J۰ue#LDDDTl鐄.a |>ܾu(6y[u,3ڌuJǚKd?#M-#4BT À߃kc{D{[_tnV؆|v,DDF$* SٖkMA`vĵs [<Ľ AI~õQ4*/iEYi{e"#p9]FIbcP"q-ޟA{u5!FOVޗYYo6N> ]Q6[C@p~DXhG٫ y#2ŧ>EK1} oߺ ۅ(:H({~7>E y3j;Cj}>'HOX}HM?GTC.deF\\0b Kq FoLov;TY]J__fk-CDDDb/D^/""" c ADDD $}@9("7C7>cL ]7 ߘf^/lvгFqjDD||"_DD ޣԺ {7[#cMA1gޣ &g ADDÈ'[ѻQg|m@HrF܁y|"#0Lh-3wI=mx;]23{a ADDNϏ_I`k<{DJ0TU!M>p:UL>l.Ơ4 z/䛶#WP*P*T+kWA%L!pgѩ"}/띷;b]v*jՊ9k |p94ξvCǂ{ed~ʠҸ_q{*Au<|9;ҔOQ ?!L#?g-FnF݀+!|:dk8WH5$gGu{ ; "|~ v>>g}`$DQD͘Ns@Kgc2̼)WPA9؇Մ( ;E$T n3Q8?s#u'մEf IDAT }Pw4\(i7Hчs$8.=+"r: }vRM ]@DG~P~SƌVl:K״SupӒaY*lh=EY\O%3۰wn0 "3XvK #|g#x8@R|'²Bc%oBBBڣ.nגg=-m $߀(-䠽P|bO7ܴLgLp4R4{uKFFCxmtH;~Ɯ}}jܓo#x4ԲkNT4jB!3a 0 3g >DG=+Bf=mJG٧ BcMHeGܺeIG oZo[-u :\N65"" "@'[ """b ADDD $ """b ADDD $p[Ү" XDD!n)ED#|a }7w) &92[F\fG@U l@A-mɛIہD# XyQq (zH-"x^sPt.dK"""b ADDD $s͟a08烁mk(n|ߔ: t NeHm y'}K ]쐁:P`~ֵ:2Ql [=c2u@{밖iƪ v8d3X!et^r{EH@.}VG# KB1g@^!;d8zUTV* ÀW#:[EM^t({¯{UҋJꀺ_ ,VK:=fm7C-!:PQV!ADD WkvRnb#fԚ^0 EيLu(0eTt^ N49 ,#jsyMX!0 =G#DDzsG.%Qj^.a^ND9.syA0?`ϙ~+?]f`ti/S [2m? .K0;zmo\}}BJgݶʳ>NqF3n\h\Xm;t sS~UFm%ͮl9 ~_Li+qLNM"p$^#w x5CA/_#x,n#y-ّt?:!wRflww{|NJkyE㎐ՂKĞt @e^5o+7궶Q!."t::B^/%"ڙ^ٚuG(پ+6WC)ujʈ(T+5(Ȏªlt=H ;d)aA٧@%;E_5^CdY?J8} } ZxMi6k Ydr9ddr  QV*'V6]f{I[̃LeFa(YWAk oCe($O".։XYTUE6NNUUǬvurٟX8-9Ab$Ij2蹨>|ydeӎD%ppZ;;;6} ԽjIMu gN8?sZK(ù NV>oqPPgNӻv:k9;ϭUtT=_|zTyd&2)7U~Ie琞H#Cr{id~ 39="B_093"Ʈnq{y'u{3ڌB~7jv:ǂuGY:?_= |* M0Yd&3MPknu>Li!?FΌ3#=;g3HJ!}/md3S\~!75 'yV22HJa4B_}tyv$0.>J՛o\}wZҁ}VoI~n{][nlޜa-6Yl`Tjoʘ|0\\wˈmGX'7qT._olX. Cu1x4ߠ/0 __ ~oZ?\i\E)l.ax|h8dC٣/Z*o+>b8\N*RwRM޶X^#AȻe\8wPzVBbvBn\d&3~l_'(2KwK fj|>^.TIxfF8@jbSZo۵#O]׭hθmGBIu,'FM-5*:7hvA#9#~Hx"Dʠt2 UFb)EQ/_ p8?_6SN;eXO9?~/MЧ0 DAT>7=Mix{1`dSZOWjG¹i=#vh Q,[t3L듼Q]`բoЇP'ODH`Nf< R ?nW2 / 0@X 쳝j 핝B{|_wV={KLbe/6fk(JԧywLJOTDᗂvm,׈S[F@p88o='G%;d撚}51 x83.Vu9DD1 """DDD@H u@$dd61g@efk$ ٩춭F^m@fuS|Z u!_n]~Y-7Zߺ+"*^|ƟQ#^ މÿk;h+gǶ"؍Rt0zٺ)mED;wDb}DN !]TUEI<|QgE?Z.ƠS q{t!7CA. . @zXzm_NxvېvAS'ZR@$/šSSPVr+sl 7eHdi*Y*&O6-Rj?Ce($O""8gNKgS'PŪƛmWjYohm/>Li!?FΌ4ٲzUhzuro)AiA?FN/>FA[)̔f8@P VBq{iRc_m>Fi fJ3 ;CfJ3`Ȋsk5 q5ԭ| 2?e@vmJ<|| i2PP"3An:^[W.;  BudeQ|ZDh|ٚѮZghGc!!q@Yٖ3ȷ|P(p~q2SY$'B-#z6WG i ˜30~}~|dtxoʘ|0\\fp::B02߄1|lgvѸ ""vurqr+ճ邲WAʼn'2r9_z@F_mGY_z@ENj]hg?\Z?SB!kR(Yk?;m+"-(&P/{-Y\ޘ{{15ų;GȻe3A0ymF̮o-sC:׶# /Ne t,ԒeoLl5)+o+u}SuZ)On:S=o}N_u;vD[@"<ӵK٣7CL'yTVI6e3s()#~){•>̃ *o+HLbg`^r4 5f{[ZG]*6CH1g4EѳQKEh5DH){21~!MxNyĽ TVG0Ѕ`iYgDD $=έ{YCANCv*4|C;#|* !tWkxI9Fz"2o6sdfz<}NG@ݜ|?C N~#>O;~o݆O52`a#uVU!.$%Cb Kq Fgg uW݅UY7XkGvWQ}b8BCe ÀOAQ~'T*5uj}j~O$ S,Q`]]%Dm wDp+qߔ=0rfe;ChHPG\\2.ide} z!N=ܮ(}xh}O^ Z,QT}ɝDDu8"ADDD $1 """DDDD $1 """DDD@1 """DDD@1 """DDD@H1 """DDD@H1 """DDD@H """"DDDs IvIPUsQs;CZy'?[m۵6[[WۧPk<:е]2B f}NDDH 1~cC~~+!u'7amDwJ!"Zm9GB%d&3M y}vI?2;$I(t$Aen.$I_a z. ebm7k錒'T!_YUkȽo. ŧEdprA%;EUiԝ\N{!Sٖm'o&!2\\V-VVKorg^3+I.kK%"[}_2ߐ'ycw5kBwwIp9]DD $6urKϜP=;Ѝ!t0?S*`c 013`{_WFʷZzݽQI0||Q)e.@٣lzF$\C_V m{?buu}C>$O:u.2C$^:2FuBmtww8Zƈi,#_{p-ߊ՛NօG|}99YW$':lde"(tGֲm`!"Bgh:;D:L8F@b!H7a} c$DQ\3cΰ߾qcgHM[Ro(AZ/_?Cl-c7P-xY{i/#mOYlʯʈ"y3~de7-W f]t鍈#m1#Q7P,p~Dš8B!̻9@AfDQ{EU/#kFNO{)/4C z.(FΌ =()oY=FF; ۃmjLJm|_K}_m;qGU]\CtӄإMct)u=DZEi >ź#{ػ}hԝ5bV܏bb;ETDᗂvm,ˇOo P*""ڑO"""0H'(V[F """b ADDD $1x$I$IT+.jyu6+q-It٭?[in+"w탸k@{5=ںgP{~(-bFD $ށ+#g߅|{N [t"wȋ(J{!9^$"[}_׬|!jz3%TCRaXXw I|s$ ,[o_C$įķ|e $IBZb1 {A$(Ι> iߐ+mKLBe| y}vI?22^ "s?Axf/#r̶<2߿DO,iqYb]SYxQ~UnKWϴ|C>ȟȐvIP-mFǴ]EQ=my{w^lHO!p:=pIo{jϖ @p~DM'OlAorYN{cܴҦ\a촲m7RT'LZ6^:f$%Cm߻ꈞ]۱1x8N̿G9U{wůđf08rv'yh/4u "gT+pލJW!Qn=:aoGb]:#k ow:;C~/t]_Ƭηșߔ= HI!|zmۭN}0DJ٩,β^CVZf8Gm?[*mrsn AQBz"2/U J-7:sOrMHmn/ )3}ivɛI^SY yV82MbcVrsMۻ8S>3L=f?s3:_N^rO d{Ṙx6/ct׮|qqZ3Zu>nɨTObIic| FnԆ0Xo5V]C }S;}P}|5,d/'|zYcGr#ʿDpŹق#e˾H>S b(DB4['c}Փh]If?""OTl;?pkNՌo#"ԛr< ˍ-p{W"**]6\nrY|> ^e38vX:ۑUsY{<ՌݛO:1շro4Vۍ@/~2?~_V+vDDH9jo:'+̞Lg5:o;9'1שLjO/vj[b$=f|> ¦ {=[UckB"y 6Z`T#815fa{|#7vD+2LJDfo& ҩX8[pOf,+n}׊ҡR>>bgax6ʏc8 p3ɫ_Rv-cW.TOt~=:է7.*Lybh~*&ߝc$H+OT|\;.f>CbRf[kJg_#nckv֏wzAc+Bb" 3;8ΙFǙg)]'|e$'4j=m>ه]KvxcѸ܈\.wSyP~z.ՅXål. 49}՗1}vHǞ&"7s^i3cQ{vSb7jnzI=1{~6Gl5 /kT9}t_']exzoj1=M /GZkˍjk6{fHՌcqq񶿻crQy{ciy)GE4wⱞ[+GRqMP32\ޮ++w-3{2W`DީE>O4|f OI^JqGc╉;{dfQ=cۥtc1Τ2]d0̀ H iaZ؄)0 .6napjԜ=Ѝ=cZ-$J"E9񅇤`I -N) xNcƌm>43\s BiAAԂԗDT+AA/#PV  j'iUAA{~ AAU ~o3|'AA{~'y-v" )  k`׌.AA#,ל^rnf!JBz/`#pMXjӢ_U9$2ԢQdOgH_h" I$AGD8:5xcC쇍] A<98!U0`Zzj*:'!:Yhj!8Lk"5 UDpYA) v$}ک#M_3ZZԢBA(PUhpeT P9RM,Džpʪ H0Aiq8yVlSGs 絩 rRS쪣ξ,H62`G M\"4Evݣab#<+!r1"<'eU2g2PJò }6yajexDXDi-{=?#,ĂTa|جMe$_5al$J[x$V@q yy zKv?LSYAdpPECPEDi_-6v g2לZx0aJa8c*lyMZͶVYVTxDx{̐gh`+V9BD&|&=2oPPU@q PV, pnCrde`d* NEn. Fci5DC}V_)l.$" 3b|nZd#0h2_+>}*#]fWX+̦CR/s]#^j#R@yL= R\dt40 |ۈNsM3g"tKݗpHh1&`YṬV+g7e`>j?sH fa_څ 8bb"bGD)R-a E` Oig2HPWZB8 p Yv P@QԲ2Uwhސ7k 9ZY֣<3 42[-2օKyW zM{kk@ٗv! &ވi} .W9'ڜI=0w[A^ٴN Vyd^l3yC까JN[5YEH`wBA7Ԣ߇#" vmt wd=f=PKy"6ܑĶBgy(2PϕSL#q^s73X+hXf2U`IHHy6 +*f n)&89;E=`h?€yl'Q+'7'y^^We# Q0#8"u_Y)"((N 7!DAA~Vo޾s`[!hkA{USQPd 0TDb;D=ATd^S܊l"+*"sz(yEE 7R+LAA\-*]MEt 7̾(f~#Sy$`1 H28؀\^6PX]?`x{Hs +&>V"쇍r  R(QAAy$  !AA  HHA9Pߙ Oӟe%YOYa9m  "$J"bϲF~A!Q8>7_[~&!AA{F~*1%"KOv viBlJxGBwTDY; 1A\PWUxzTp HH|VKuH@kT lGU@H@a`__HqbS}`A)A"UAB~ۤ K—<=$'=[k*#{Ml2 d2%]AF-4|Ѱ;1Qg]_/U%bpwa!_~@g0~gpX =Ί p h Dms\@pG8'Eo i Jn<QW!;HS6V0=\ ׋H>N,@8*`1c̐_8Ȱ, 44LA|`!:낢(H&Yܒ 2D#Aj!X4"t ;x.x]DwO7/"{  J׼{_Cya8z`>mAl(z"جmY`.(1~;4r:F&?KJy ȋjAr.G31^}.®uMUxR{ fzyēu<GQVv< V<9$6֜}.;m@b{=Ap1~{qB5ͽ/ɹ$oC׹ySOSm݋MAc9]м ^Ln(װeZc(=sڈs΍L6Н ;/kBK08Mb{QMQT>7f^_!1ȯ%XNin4Z\}.twu.!|? y{ouhHSVG^;Z}}j fB `kAU~##1@,j[!)?wf"Ƞrod$fHͧ hל RsIclt]k"Gp4[ =H& Bh-v%HHMAl>7[pQZ-t59![  0FA˲X+X6$fX`~L&lv8찟6XV_ 1C7 RFiNi21k]k"Z-/SSy^f^0 (\i 6Xm v/|*.mVvvsj׵naopu-ľKBz!aI^ҽcDQ~ )}T"F$;v%/,f =F|dD'-琚O<"l ޟƎ{^$璐 :xB|U㴈{/BwCPV ""BqnM,`>a֎Oaf6x/ "2 #iRIH/%DanN]nBvSgxkI<ّ_`8 6"E9;%jg%$|W}h=jx/{a9m߆D ~n?7:oaft;usyAwW7<= 1@ADbw1{i8OŐJF8N<ĢQsHϧ0xIl kKc:=K^vWYӁ^S/=tKC۞aȯ$(+{CWal4Tm-TE/T~J*0xyN] "9@|*FmQK;!g_6 "+ƑJ)nBw2 BwBpٻoYKO&~ 0|W30eq;+; C2EĽ X۵1!x3Н1ea-Pal`aG#AkI]q@<.bUu kt L 0:%͎pTc=qu&$cf|Gu`j 4 0/aABxc⫥fsG׃ }BSAA ZA= .PU Co'A ] l.'U>2ځ 1qwځ0J SkvBaA)1ˈaLBb\IA|X"$+!AOmAgHHAAB >g83~p-|3Zbӱg2,dfkc#3 @A;ҫ%,Zbv3q8{ҫ%zUH 7rMiwGaix?Cf!40Al^ e5qwlRϴno"#($J"j !D%&6Ûx܈ \>6 CBaIf!{LodXLܛυJZD,CIB J#7F /˰1qoj[ijC6]qo88thxpYZ{"/&Ymz]\s "0@d2EQ 5E.B8B$"y?c䗑&$@<)VD&#,l+p#НB nN`΅[c""CwOĒAϺkKVaAd,ڰDA&A^1QV݈D#pt wb$awϺa1[v-`\}.8ZsA]U1~{q;^Jc<{a6`cڂeY0g>놫a$I[\L!;ys"x3HADAvF5Pl#k_7Ѳ51~} †'cקRJ5ac v NѫO"!ADD*b68Fc8p81pq^gE^>K-{gqX)TH0 wGGM<"ss;ؼw⩌4<\E(*d$dCwX`;%BFt^2`QL@x6\՚//4s@ 琘I x+ מJڷr8{pb RzOj^T:eX+'NA<.҅F|Vx"t7txT(.3=Mj0 "l߷SKQ.3zG~ vVK=2C-B#i5>+³ b(JazWfyz@8* t'I r*% lV]U4$6*Ee/w#Oy ޑl620kR@l^̂mdvzAYUO4vQ( yڱL=`?! ,aJХN6jPtZzm6ou"1'MEbwŇB0#Z pF ""'A&kJk^6_~(jV20 lƔρ!4qXSvQ!X>伂L02{dDXD]Į(jd&jZق\rK\WqWM;!w1+>ݯfnq*O[Q3 hxZDY݈M\VY[~~o2@Hۘ) 2e`BQ %H)?nxV9llDI#:'!U-  HHl@lYtcj42PU`|6RgSNiJAN>"thAWzO; SQk(0m#"˚AA!Qr;Z@J#_.XO)MIdd_k%B1% izTl_oj# >9>ʛ-բ UU[ԼM̮+zn4+JESoc7Ɔ#<+GA b3~ιԹK+E@o0ȗAVM1WZ 'C  HHAAB   8CuhZ⃲b\MuuuH$iPWWچvLt2Zě~8pGc}ء(Z䅺: w?ݥfr;A8& x3XT 6 Ɋ4)B?am;s\~Ua_}ލL~rH-G|:L6e 9LE1$ҮKt6 Xҕ@zOP_UUػPVO[!:E>G,9 odL&X}(J#膪~cEY#w990 {$\.S5۩X,-6 IDATg y$OőJ0!'DMp:O5#)=d6OS ~h0J( =$'Kui]K<\.Ds*Mf"p#L{a,TzcM`8b]٩R9 A|VB"x+]6 p8*H<6NoDp|<\߭ʦ6꾨=$vӕ@z|W|`Y+ms\@pG8'EowRqѣ-f sIĦ7.એMq\|;(Y@^Na5r5I:XAZҔש{dY_7`kyt:+;VՍ,mb[Ŕ A|rBB]U}Ӿe 7רƧ, +my|g:f!{p!# BWqaYnM 6uL 1@f!w#;BfWi p#K,d`2>Fa2 nmuaҶ`k~^毘)MiEBb4 EQz K15UWU=>o:vZ Y772Ϊ1%1R.6G+F>7|6s#6ӧ7bumQX)n(y@JBA{gWnx\"h0cjMS}.8ZsA]U,-w؍zkv,Gl&U:Uw4%oO_ݯOCԒfM]cc0eb1}Y/[IAv<4XX03n!ORH -0Т>q:(NFsny+_jaⳣ4-u^-~7D4DGf9XڮːMg#s>wWi"XL6Lw&4 LF"H$jЯ!x( r42)tkhhq˲[}v)ˁTTP ptn=u" !4KL|Vp, Q|aح1,gH&wf(|((V `0~Uhp[NkOe{{RBHETOo0 -W ucxA| &"rڂ #x+6sl%^Mz>Cq.EAISZt7ZK@E(=~xTDA0QKi b ~boÆGl]Lܛo⑜OB<*"<ةЌjOko+?J,REA|(?o; a4[S}䗑#PAvL6tMRZZ  =CB  AA  AA$$  HHAAB  AA~mTUE]]SWEb 0JWAABb_U?r;;ꪊo}F˗A>DL#Sɰk`2>L>Nb‾"AA|/wCuYmH;]14qu l6}QVUf󨫫CnggPE/y7*|W}yu_ԡd[MS%8<<[`JA$$3~I$fXznG7lF΅ ,IKya?C]a=ϻ!k~xb\=. \@~9p# WKp΅bb86<AABBG~##>Gl2V-6 V4e$f܏Q{axy(˜uBhdq =pgȯeħ㘸7{] \?b 5v.uZ+5|Ѡy12XEVtx\߸Pܰ'FF;m6v}z#}JqAqhD04L=kjQ5B, ϒ5!Լ"L&_#0bH~*#IӑO'璺۷ AE8p_p#8 5?ð-z{']1AQGxmL#;3L#&0D>]oH9qM93˺_eWWU<uU^_]oABh |;3ȇ\ҫ%z\~6uʞK|ʬ/nh Sz3+3T@d2˖K/[~?{#k~7sI|J|0!G]]ݶU744f!4k0Р)rr aa9Zl*.H/ݟg'dH/%8{p8\ 3.p'5pp{tjWvs8CF11|8{rU]rV 8a8zp-H%b;tRmUU9lV۶S9 u?̧zxK˗xRDd2R6//Ӯt|jm#;Us\@=O[O]SE}Zxei PUw>G.?0~gb[t e7Tf!1@&f}W}H&K!1@l:5߮ltۍG3F(-< w%:dPU؉%i D6\ B,bvNrb82AbxW K\K6R/ "dчQD&#W_d35V5Ħc c1gn$fR<ek+F҅N6OH%yE@Fv;5T ^702#&mŲ,F8wðoIՊڊ8绖\PWUx\{U%I t;{];}NoOz) Y">WUG/=Z kيn97o!^CiB+_JzJ@z-A^k:O-6] ?FAsᭅD6"z;v+lcj]S9XmR "p=d;!>phox7rEu˲T:ȃȖK gnovmOm~ڥswO!k 8Ԇlz"94dYR݆cH$J(~Tjb-߷ VGϹ!*ڼb5.V H%1a ԃKea!h_m (P$pM_#>7\ﻱ媅Z'sܕ <,d-lVR |e20e޲O=w\ fwGʪ:;^JvveY=+$JK?z,~24F6 K-%!9hb Z87`Yb ޅ缧bFpb= ZF*B`4P٩1 $IBA)@8*iɹ$727NF!I-v\{-Vn-]x/{O!CV8WkwǐOm(+kgr9wW-ptntrLzsHͧcGAq`ekf6Eҫ%nl$$l)3Նo <Qȃ](\K%o<R_RF"LͧkX[[ã?s15.DZ oEi 8qo(+>nTv }֭F""9ZV#6Cw.W5Rw%[h3!1c/#\-2t;6s""D#H>N<"[N[0aofnG®zPekYC0F'D]`4vmdn;ٜ"p:DD <[m _N֮y;㑿h?r@hEFAP@ivGiG!XꪵX+k7SKyRF~GoQ[ +kqϹB>sdk7[L&GH%'7VOs!4yDF l֣ !$4  deY0 _>Bz)šeyjAAC'/¿ὢ=G0 ZO@<*b8O-6 D}vWKnrXĽ mnvka2vS ġP(PEZ  AA  AA$$  HHAAB  AA  ćݏm?nohhjCi`S]U1paǡgrkx"0xi 0xy(vyvtzSuuuH$j>GuuurA]]TUply y" HHZH\#@{mն)p{x4"`Rs)$fMەjy*}"ȁkTպrv>UUm72 R)2Wא' ჭ4205 ۸F&"& pG8$pti'f KsG؆4X*BwC | Z;)" "Bm!NY ǡ:_eL_6E>FS wQENKW+GEĜQD"OA F& =r?1ZAG?4W:o7l(+>@/l;x42 =ׅEQOaIZ>=~+螕ȃiw8""Xzw\O+ыWKp0pa弾ng7 "b;  !ϻ Z*sI0̆eH/%mh=֊Lt o`cJdA<_I p8 9b8"_[a#"zQU LܛxBpT@&JWmbhS1,k8&Mi"`Bxвqe,d 7Įlf<A$$R`㒼^,  ^ y7lV%[ ywUѰY\bC~<۷GÐN< F!S[0 N/{[j} [hCz! .6OSM _A A)Qh0~g6 vC~]"5%:\~㉐—BM6v.WzPTH 8ϺMg?\ÔhQ  BwCzD  !. x^V m)PL# i0 XʺPV7Q{D28 酄| Y04ݹS C? n-n  !q0LKOX| W _#0h~е!HC׆ ajV'00=饄_o9i~?EnX b/G >1 +p0=pG8ײ>2pqI說ݯOwج)NAB CLF ,fӍ˃@=j ԜX.۰xץKQD]];SuuuN~QEN1^G=׵8c?}L|\gp7: $ \U`Y\L!;ys_^X C呰Ymۮ["eåҁ8 r{[CUUtۍL6| 6 t3sIorvd_d" 8Bb ?+3|L&0 06;REꐷl IDAT /$꾨ϻm7y_#;8Cu䫮B}B邻ߍTbikuUApG4[vatIiysrjrtC0ZjymXܛ!vcU1g6+G|6.Sa{*x\ "p B3ȃF'0$3 Mw١( R),IKwՇSk6[f_[>놪<Ҹs!8tKxæ/_^ ,Z w.ħ5+,:C$Ad2l[Zk5t;M |'l53#pt9Ej>r[Aħ_ga@Fl 9,owuSf &M@Mc;vt.5yeYoa2S [raǙ% pTٛCIͧAz-wGW'υBApM <{ B BW  Q\ "6  eQXFѻ 3܆6&G]Ȁ# ;E,lYBS<0NиšpmV٬xi ^k\p +pNLH|I^PG8!-$:p1iҤͤjL&3|g才`<D><}g@EUtܸv5{oCǵq1r/B} e  c)@DD;7H. <ɘ7#("2O2jSR.zBl,~5ӥ,?ٺbȎ4Gue60^혶ҲR]\̰|+Q8cu6Ӫ={9 9D\7v^rXu%E_1`!Ά3|A@Xh`n8_OͶfʺN2^>!S 3A<<JHϧQ~]7蕨Y^c7&Q쿲fˇy=(F: "3ɺ{׫w2G@[mhi0Ez> QAܾu{aL|3pčX x!;q7 Ӱ w_.TO[PNhʏ 3IO>,JAH7B7n߹ eZCrHBǤz*c3~ qj=X췑/Gךv Y;79<1цѯG"wDDob}K.C}1/"""Mc """ n{_|(_ZnG~kևrOtH#;}*ˇ` -//<@'"@[[QJ> zYb 7c`etPB|,j4W.TV=SYAʃ]<^:$&+?(p9]tY֟Ry,gFS0rhZAL(BeKZ4 ѫ=u)8}>|kk.>S[`?M}5I[)rB|8<#2Jv;bbII(KZƃfy@ۚl۫umwU "zg * /TD.G?釫gTUR=!x*ѿ"TKQ|^A  ĭ{JN3t! Iz}c??5sy4i;]! ĭ  "5W=v-й Oc JK ˳Z+iFj> YS1tClk^Di3AL0 垂)Q',l۫umw߁]pBD;]rΆiܼ Cܫj7P_pP*;=qѡ3IS}~{3\ =FVqTx7&nW*RSH$D"(\D|<_C҂ S7&u= l3U۫uN}; AD[WG\<DitH>L"+ܳ3*q/p#Ї?ozsĜfV}D<;`,f_nw-uVW.+UYZ!fh `?K*gܭ^m6&߁6v`;s܃u<Dz.2O2}o BǨ) "˼ܱu, 涳,ukP:->6YֵZF6=m{{>u ADgyL/=;pN{yAZ aY!Sj&dX4w5;d^/>/nXLNlfuT64@MKrXYʺ۱N=ۮX^뭨f~;켅vqV,GOh?ᇪ2Q3}0A@4MCj.Q's׋0nLA$(wLߛ6?G/Cd(ɛ_{7FfB_ fe6w۰.V>C)PXbXZ-ʺ۲N-=ۮX^m뭨f~l .r9>ҍ0]wFAznDFT~ILߟ_OazQ*GBRs)(wk׉; 8N;C\&ĝ' ٍC}J]|[e/Ů.Ka +߳Oުl7SpOw[? ADDD DDD ADDD DDD ADDD ADDD D6mQnGQ|2`ۑ|{=ͭ?]P)IԢˀɆRR/#4 jۛDQ[~d(qq?)rZWjEOr' ADoUE?J`6MJ> z @ӱ H?҇/ pu[ks<@<\-(ic3m ADΑ|Cjc^Vz> 1JRô\>쿲9o^+Qxu۾AW2>p9]pwS]1H}0E l;`u s!yZ>"#~=^7ӥOeDDvN_sig9x{dZ56 ٪#8ٚ!zu=nOedå?1O:jUV۠;A*#iKa2iFX}K'/e%Cs׌q{-js{m]Y/S$Owg.vV!"dY6G% B\'i(w "|'}4a*Rs)<_G;E ^0 HJ@;VߤlO!t.B0/ ]!4t|^_wU=__q$n%䃤ټ?GL9804MC2ٌ>(T򷻎[K:(/miȖk.Prty_O? Ƽ^kefj[bb?яK([_Ο;UU~2 q'El|$Wo65kMݘBl!,S @}b rOsz/S0x[}va ə9(ad(EPƯq{fYul,UjkB_6i徢& y\kI[j8KRuP{:I$K ,mYCz>| Z3yc0H~gEsGo;sdmQŇ?#0<*rڼǽp?q/OtYN=h4{7]DB==3lS7,q/BgC d򷳎)כ-6aaL|30[ W={`h#ilkI궑Qs|ƺG xii<=>[ A ;2O2}o BB֦o)AX(0y[|vz]nLc\=ˡPiQj7+כKHͥP*PeZA>"5jz[ʫ:p8ڮ{[ۺSjf3H}(dY;p;W鐄|5=Fygj<'Į  0F̎{ol/S6u,uwDFrV깩^餸cd&\"F;!vlX'uN(.j; h3 jϋMo1uqAt9]mMmyZVhאJb &oLn#6!M5ׯ]iOٹvL@> @4RpuZNA/tb f cru^/1uc $A`4 Z'kb/Ɇ_χ07g` + >'K) X*;rސ)@DD1)CYY |1NQ't6((B#Ru[| E0ys{ks rWljg.~-!0W #_ ~=ng7W]a*7'1}|}>bifV+z%x n( iV !z\HͥUpb"ow x.ng7RB'8]Рٜߪc+ڒ }"^x{iҏҫ VUv]Wo?bWcmJNN~N:Ţb|9arv Y;{ֱ ~=ᦿf'"z?e-{y"ADDD ADDD DDD ADDD DDD ADDD ADDD Des̃dݟE KaHGv!y.!!"@ÐXGJv%Cjmn#(mT+ 5Sk|#;dYԷSmoϖhmշODbjwA)mQC` ti?ҏa GzBR4?&y"XWHϧ1Ybvnض->*( ]Dȑ;Ed(RWfۊzpyQEJ= !yHϥ_}丅 AAKϧ9ATjWS7B+"z% ۃxܜo / @:(a _W2Z'0|y. bWcnj[%l6[WaoFZEIfGm+AҬ~[Qoca{E,lϖxO[*K!>|X|XFj eQYN D\J7lVG;;~/+CghM=5YA2W2j4 ѫQHK8gQ#йyG>"#~}5\U Nz}Co BEȲl-P RP:S?^)Lݘ=,㭶mP_!P,E[ ti9}}7$m9alm=ؔe7'I"@}#4l\.KFY[ (V).aph.[ݘ> !$$K8S~k&VHͥ{CTEi5صBB( ?яK([Ο;UU~2 q'myz7_m] |}ZmO+nVk~;wQ&oLõӿ Dm<=!/T`P)u,oHfiKڒ>cMX1vKڒyYE+Btzϙ$޸/솶!=6ˠRzԍ)xp"CO.ᘖ@7&!,C/-(MBWt{E\塾ROc$2\N&oLnٶRf*68(<+elַA>;` HOB/;00ՃAz\(<+kEt` 6ׄaǽp?YF\6[4v WDY!l6 eeLkNyz FiѫQrϗvct9]oEKSz7[{:m5|y>Ac椥ieѲJIN `ozxncNn0H[%헐KT*kʴmQ|P9}n߼ q"2A~Yp;iz/̓ B[Ep ЅP28t- 'ǃ@SXںi`l6OK,c붛z7[ƶ2=8$4ZmO+jo-A t f` F[=E&ћ;33ם~ko[]uAzt9]< v-)|5ngJR2ZG0fje7M(>/b,"#Xmkg>]fnfn]NNٟu/>+fl$Յ 㒜h9}7|7$hA@JE."t!byԉ 2 Jfy6:BZ9ѡOf8W*?KyԹuwfχ02O2(.!~=3^6,HQz][Ruz0>32A.Cy6pr{ JKP~P0/ [ޞ-X4x t ]<7\=wwAq@q/4Mc[?y? Y<Dn">,+bbGۏ՘F&oNb4\=.|$ ʶ)yaS%%q'vv#0客?Xk W #_ ~=ngّp*Z?0&$t:smݖLaĮ01>ng7&nL`$eK Ɲ 菉+մE cxnj.n+~rdÔ5Zͳv~'}ѯG"wD4R}YLѾ%!SҾǘ-DDiq3D|: hRR<|"ADD<% """b """ """b """b jGLE>9T6Gv.Į00J]^uI ˈ]=YDD|<I?Z"6C@Yq,l!,(2ٌ>GGy\.#z-ץXxjՅ*f1kuԌtiq"b #'8?4|}l t:qA ڻ}6:̓9X3uCwl~"gB~IDAT6vi1՛?4Ωtqeӭ"P~>zCJ@˛$>8jQ}"r9I膡 !$$@!_3A0Q|^A  ĭ{ 㖦K>"ZAغl-) XҖrp@:qhQ,DE.G[lATIPşTGp+9ݮ_jh5] 4 xypn/=Ez.a.T!vv AG).aԭCDl ܾuJEZ>Y.C =Ey^q/p#@e/Q.!,ML+Vx/y³BgCl˰~9bb ʴ|2|FD[чp-SH=L!$!Va69-Ž"x@}8t-wB$T ae"b ,<㗏:fY2ٌ~v $صòB0Ո!v%?pë-FKe@ņy8;r"jvP,7oKz307$ ʏ f@{o& iRs)8:MR6MC>GZΣNO7|ˎ"#H>H"p2,x:o&}N?$rQVnC%" ]ep8<@@Z sATU8;U;?g`$&O`Q:mz[nl~ ~D/[<W_e|<S@x(j R +$$qyT*~$v?/pt9V``VP.!^ ] /m%3dZI%_Fq8W[Gl]6mv ""AUU`rpQ*e %`l*jjż4R۲!tЖϩ B`č/'v@Lb} U{E8lerbZLw?׿D;NbbXZM4\IKsr\yďHϥ7]Beڵ~Յ*[mB!ӍK K[7V]۷B[9PVVbcSu6y6Q>YC[%A韯-ku|- Tl, <ע=`~k ^f7oD-l6J %qP+K |{;luA?k˚h0Ž"?!tT+fKzguacQ3lvg\*}k޷6t xq"'89r_At+smy=u@wtVF?Mw27|N=0أ~A^okZc߰|o>s:r-$:DOQDюX   bhGQ|J(ڑ|rY@#}>]Hϧ10 qS9N !i|O#tu)K]A%pȘgiЅ $I)cLOj}9>/2ٌ9٨jN=_.ww.ժyY j4㥾PQ~]vn.n}?]!F mQ-ߛk ˻;[P|^7y_Anh!t!|.B7 厂gQ|e@C I/\=.$nN5L/<-bc1L^lROUHDf>F6(C67tm"$Twn>[OlB;%VZ$j\Y6\nɴu`R3˷}-;et{-;u: 655\}MP7_^"CA^s@=8x|#v-e_0MZ֔15Ա,ԛ]G[֠-hO_ԟ8kRѼՅMe Z~agZ;[nr\ WߴՖim+| /"o|ˡX, r9Rq//fP~]x 3_"m{NHKO"_jnz9(|}~$~h}v=y6eS+^ +"aL}/-!$K Ʒ:. 99Bl,Q @jnLyĉg:ӸɛGbc.1y6=[Q]PmBowo#_l8ԷSh5O+\D4 Gi_P_PU+cd3$ɼ+n#?e-{y9hѻ \$E?ImmkNhg:.}ضcQ Wl|_A{$ǽ\DHϧ=o%":݇\N6e-Q7 -5C/AB\N\N&z\h+}{$hV艈zpucQ?qsRٟm_$3OYe""]j3>,_`+aĉA$A$$A$A$$A$h>-?Y?qsm%ٟpuW=ҙ~2 Zw4}Ze|{* =phF)c 86TU=!>'0Vxz߹"|ŰuY!ߕUs8ȉnkHN ٚ! cʷ;½ڦ=ɰ䵢\P_۪oc e8Wzw Eԙc~8nWe$3tZQjJge*mxPfE5Ν iۢs5څ/abmnbFB2zP+Cf%4T}\WUP!cC/b)OPqCu;lz CcO ;W5F};jXi(rYIn0MC}3eNJZ R9*E `g HXFz )-h(%*Ȅ;v+=7;lv #H"gѐG y~)UdLY%uf˃L7e؋ey_w:o[UgS=-X>ͱ)A>jchЯaUהLz歋p7"|sO\c=Vu78WR~m=O{g+=p\C"[RNkS~ `˸M=lY}Ado zgqߺ>"!Wޚs]W[Z#a P5 i. i S_S^MC>%4 J[̿@/16=,U['M=T[1[yC%U5ʧvH!K֞SJ=ֲŔghi1tջkhHe瑨>%=IuU$`:Z< be+)fDGuO1d<2N[#7"|*ܯgZjʨ; U9J 8oJ'5‡l pQ7~د'o_opAb/0NFhuFj ]M+̠\u |3*3SѹMmjmpYf˿҅qㆦ*zد_Us]Q.DeL*)qΟ T䍒jx@rOV?p^μFa?GMu_U(JM)|VXa&>ܦ0Fnf!RyY qZ=ؾ\E#zw łrM+uRŧHH!wQqCfJ.`VReZzU;^ 63r2 wQ0NxIضL^Pٶ--܌2 a[L->| }{=ޅ$אo5wWf?Vhm™)b!mMGaKbrA[bSO^s3PUvZ7Lh#'}\ea3X4 xV+F$Z(È H Hݠ*ظҝ? )x$HEAQ26.Ha[+DM^} 9H%95C ^Y& KD+D.+l b4mMAa#HBj1ɝwmOŔ%H`w :Shl.H4%z\ מ4G||*]~;yWemI{ H,c){-/4-71]FQXPvAbgbJ^LŹ쵬|{m6JwJ*)66vlfn|=iJYnd/ucg )r4slM|(]⫗{\uFh#XnO}o#DD# F4IIRc!˲:ȱ=2W;Ϸ6` (k%߯=)vBm{+ijC,]f<i}}`A9}5%M.-7x7.)kcqyDGT(::AR۴OF Wt[&gQКD;_$4q͖g5ވFUFNTGu9ޝUJZ%v:&qSNISq] ÿl#IOJlyVC'4jk?NjK捬¡|4|*XDOD:U})2zo>Ťlo;G{G]퓫S׶ܭ7,g )r,,5irؐyG K/T^ojW曌2ߤWx/ҝ2dU**r,Ct/yKY 8\7|Z{~7ub;f\&S 9}FŐUye)|4tV7b.~Y~loBRQmmWdL>лHnyKp-KI%UvIf5uuJo39WU~*i(x蠪*O^7#j[{\Sƴ yی?L^/kDcb:>$I:9Nr,-k5d^7WR,ۣ1B)6" Z}NG툲7*_)ƷYdK2M*LY?N4t̫1}XTbJ>ѰJcJRMW\) ܭSYClT{M~mv>CT{T~\VΆrn14̟3,GbJaPVN)|:80H@'YμPVV?WT}TlReV?l?ئ᭺P] _b'h.lI`}~S)po Hl ]P섗#ǣ>5䡤¡tKXVt+}1F~7)9}fłk:);w;-ZLޛ}կcJ}V^#?W姊VG**f;}Sk<^|OJWd˵/oDy3ܫq2Mvmev^{eԹcB^kR^ZT;۱M~UfK^L*{;3<VjF5UT41Ȋ?N*{=&)kM|6ԥܫ(w+$M]RqM%JH=j_m^tnZV))(Wo|"~g'_込*wg5 ]+}p؆֎֟$q EdT\SvAy;JMi`VXTcR.rwv i9lVd0sgGT]PQM6e]7 %cbR>V~&J~T76MFL;lCa]ⲦM)x$lVfKru?+iJ5񸒟$u5z-󴧤]ϪMkQo_o>\ܗ4eOksO}n0T_3x}]ngک7\(r,!%/,mY)6Rcq䕴*gGeՕ:&.]޾?KcCmOiey|>ӒׁVp)Z՛rPxLP=U@[;/8u_g3ݽxjZWs +˟_VOoutgy>gJ^J̩8'L_ϮrrJES*TcC`S?3G`3:@ؼ/>?˴@Xs?Fgi b\ $~E|hzw]"7 3҉ؕA6Օ5֟q‚r=>L ;ݚՕ:RHnG)c{rJKu$JwJRt󻺂x~Ȋ oӂD⦞1z=  ό   @ @;CUb3yPxͯ`Djy6WUZ^ ۶e$hp ;MX$}[!"z,J@r^ Z!"zv!M|6uh_`D}$X# ˲:X J~뾠y׳]_SRN=PQU_qM3{-+ ԥj<ŤoLk܆5#=P1Io7>p%خjkrG/R^Sils} x*k -?j4MYV߾>QG"\UՀdnJf)cʃ>c_|+󗌗&5Y'Iٯز_UWeYo?M;\s YiEODS'׳ X Ԙkd~o'i5a;ᆪg|(?vBm{+ijkx6>`'r漑;u]MO=ޏنӐTUp=y +)&yjZVUWt͊e);"HH_:xQ/YevkFUNIk\SN)s5RO'VzMC'sz+%y3+>f˳:1GU{\$N8rr*))~* ycE7<)MWiē Ð3tLC8s,RՀ|>뺪K$rg5Է_WT7Mu{7U V.?W0T΄;SxT>[7br]]  *2Q^gh:1@ j8LӔѷvcO;oO?[GWZuy ;U;8h͹ޞ^eSfr3ejs5/l,c}~s5iʿ~iVf^v/lq}fm_mtR.- _xRSӵeZD=oGUJYUV<>eBsweZhD\밍>CiSY-5V}յ0M,?"q1tM;u #˔ʥV]7u57/EGՕ4IyxﺮƒaM|:!Tt\[ ocl&-μ64]^ΓkCkkKY^**HVny:#zM;Bbk/-6߼aÊiFUvak#?W姊VG*zf :iVo(]ו3xzޕa۵u.2-)s)gQ^ikqg赐7tΊװ6/-pGsj܍6p@F{/&U}PUXPbr__Ӕk0TTi@$ijk*.(VBQ{}H7Vg޴CA|iVi@itL(FiȝwiŰQj5ѳOSrUUW]fՖH}8ǖ>['5W;;`((~ 6l.bñWD݈&TXPVnCeu?+iJ+j@OȪFB@m aI\w`jyhKiz#!{>?I+F< Ð=`{S͚ߍF{m^vH^LwI .#`M*Vw'lV\Zh<ȿ-XY9ݚ(kz-ZGQ~LY.1m66O)i۞tU(XE\RF~7nYmY uO^rܹezldkݶqO@`=Y#y/tAxͯBbK`lR]oo۶3yCa** gc&H`[k lv`MO^۶mA8w@vg[Fd+Ճ-A$A$  φSdc˘L^+TlZ H vB$I\K lV2z=& ` H H<1אR8~2JwJ*)b 1uuJ^[{gߨJۂDf*艨:M@N\R^E'=in~wޕeYoV}TeY^J=$wQLۨ)4.[Kc [dY$eb~V^c`SPHP7r]W PR7x7SY͖g=п rogQ\(SY|l єײI|{} (MoXވi2 UU5}}Z/  ʷק:j+*x[zflw IDATQhX$)z, ҝ3wܕިêwl hkX~鵃Dg+2z(te˦6s g:h4:O ]׉7K#{U*㚾6텃g(l 1uuJĊF~;GۚbRU%/&W*NC~[c?L^GU%?Ij#ݔ aLe=m/\.x$(˯|%5`(cJ~݈&T7M&CJPHP[9et=r۲5;o4x\wP.Z9+7[<`HA$AA5 @M*𚟊֞[d0~(D#r H[qbh.8 H HA$A$Apll4ɫcv\+DC\kiZWZ: H`˴BD0Cl H H H$A$Ab}kYYٯزX: Q+z<ٻ:lsَ(r4"߀%H4,Kӊc+mF;#!$u]<ޞLyDKo'4[Љ!?*H?$.T)H&UJZY V_"L+Dt\1tJ"0MSV꣪r7r|R|{};;SJ]Jr av-s*w+p(q{hDʴ1HSD+Llpq H HA$A$A  v_E^Q+ uiEjt%t8?}åIENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/InstrumentEditorInstrument.png000066400000000000000000000630061211146647700253400ustar00rootroot00000000000000PNG  IHDR bKGD pHYs/ IDATx{hWІݠ*P p]lHb Hp_|mr fg`sN?f\3p}Xs`#܆?<!j " nztK~H-{/Kk^߽{\}^[mE)jG?`8X\*EO)Xxk*E0ޜMPHf)^QH".d< Eua&v6)Mϣx]"IdP $UW"E=Й#moire{67 XỎ,>ro7Gu4! !&jI醴&^39})Ls5+0 "B.2-Cp_s*S|2{Ehno9sƖ F1D`ISȚDDFCr / '&eƿ-?Re2QeMn, FgV^ dMkB4 t]l)Kǧ&]p]wSw5%![Hb?R(+6RBL*^6"Y-[dixk|Ѧpߟoe_764&)=vvǂ\ 3s,x`v%MuE~>˔UJSec⠁1l Hikc^0Ro|D+Kw,H_rmͬp 2st-iScw`m3zGdhE/ٿVuu]t]G85^ F)Z}lD" .~2@$|BH$7aLM_.3%wxGӔVt4n[8:ge$\:Ch1/Zt9OM]y*9;U_I 8 k˖?7<66"eWVL;1ߊTלsM;B _癣:{̱1̔ƕ[eeəw2\h2F#V'1'>"$mDGjG;6+Ħ^Ц$ #Yxkå/,V%O[<)?vx.{_.QybXQ=R2R®xd36󎔦ާ1<$|gJwܶykQ|X!7nңrU4F[cVE$IT,}]dّ!fT*n;Njr Zkգٰz?v7Q \2ϋVB1Om۔~faṾ;盖]&RߪXk DJrHcXN.?Zz\%+))uμ`V9moυ6w7-:NɨW_ 06o4֝HdITBDRJG pۑ=LƮZ\햑o3uC=WxF0c5/ e3poLR 񙴡SGyMƢp04oĆ5A.$|>Tkd RiW~f"kE"IE@<,+Tgk]2a7M wDg{$O)ʜ{?#[L0"WH4Y)?L6)-XO dOTS[ddɚdB>F[T.Q5{Eհ Ve\\Γ= {Q\q_0i:npFoC`':LtE(YJ޵8H0eDS7:OHY*v`aﺕC្+i.e7 wWVƭyJ>ܿ_L֟:Ƚba4)rb3)?gOW6vmY実\X. ,4ȥߝǶm=ȵ}KEi3͙8^0͝z jM"m[V7[->|q|`җ \=i.E>݇XsxR[Js:/5(~ u Cò,̃im12{W YH&3M>&8Kx^Lf @YxBqj`7&5IvS #ePɷT$2 g̖g+r@;Ņ__0 .Qy.Yxkڈx` ƨyp 8؏m&aRס$$u'e&Bװ- oEti47}SǦzOɽa[KÐsaj^@౱9)o-/=uq9H6 w ; Nzd 5t"ߌ31E|R,rmTGʝ<>  8TQX za?Zdp\X2޻[/i.agOq1^; k}t s1 wW8yb׽2c!kw%,ءs,}FՑK^3ث6%{%#}BFryrĩ3d njv83FA^^SwmMn0£Z$`9ΟE$X\F,3]3~$ 9Ի"@?W_IoQə={cȚRqC Νe9̃&7rH⭹?{3`SdɑLB =c}vONs`RPሴhH/#"&c*% A2!04#+Jk`{7ƆAqUr*Ra 뉍m[y0o,-aV4A6cd$W\$[GY[~6SM8'yiYVrH҇LΚfՖ%%1"d&)K,u#ؖ˫_ׁ%tD׫PS&8~d\o|d4EOo$w$GN-?)}0M*eP}5WIc#̓&9m'ޞpZ.al.>/-+d8.;cL X/ݘge5VxgV7}UR:#'!"O%I]#^ikbDkS6jI.Yaϟrח6/'=|#[ Ի3ʠ^M@y<%㠮>2*};9*72fׄa綾K)n^Mt;ccӤgP_EB xk|a5#Z@mHuyu)WwXI43ًZDJtz}BlHwA|>d< d1Oy OmME ;oX40bOZ75^&+9ȴ[0|3 $>s[7,vNa4ƞdzha=b Ms^% `?>ޗq٣S,]$FSyU;H%ɽ3g hcPv{@0 6"LJV.atDDJVw%0Ml0ę0 e4rյ*sT=6ŹȐdL29AUV)mj%*FJYP0 aF4oOPS+ˇ22(Y5I$g~9GyJ0ihY 8`rRL Gɖ>3M{TSPq/:`<@D?-b~ol?Jf}o̘?H0Pq:?\tb0696w |2~[:v*.SJW0v3YmlۡɟOu(q=ґױbs?%/S_p C%yhoTeH2O;җyۇ?#)؏Xoʝ'~IU PƋ@K7|c091L1np?;_8Wu)I 0T JS'ڃ_Y*o _WtYߩHa PHa PHa PHy*C"E PH0)R0 a(R0.0 W|(y0VRF}:JJVHz`zx^e_6}ܷ{}EYÐP/ $qi5SHa0.r4w5d%V}8X ~l~d%+ywʃ0:0T"E wKd%0*O]/ Wq+PaDO^:i5ThW0a4{f\3W|xyLxV+>ޯٮ0_@VI%UnW䭭c[;|e!'T%rAHׅ$9 Z~􁭵c8COXe#c{Iz06a&םF7+SgFzȚk}T'2!)6LW(}G0/EUT:^p*rͫ>h%yT#9R$hܴ|ǥߟ̯.bZɬy!%:(0/>6P\󸼋ىU.DI-%!# A\6"co֣#exckLE%qiN>+kXAJNlz.<)3CNr)}.$V8mHK@&w(#=ϫtm=,#۪},-~1p^\* :TFIdk@amx?x~3_ {$K&=FRp*mR,b/!e}t$`e9tw1=suf<ֱly}H==3/>nmb~ SqXpHZm0V"rCY <oob3<~Gog`YY/a}I$DK;vz/IOv[-3?{.R%q<io=E"4Nbiݘ5~ pv[+ʜw}KtNbidd _95L&w~v^bEp,2%XX ]4_eH9ybk#y+wZA>ϑC}NH|TlHc^4ΉV#jI`X}N`{UF7}v/J)w+i,> ]-I~&= !ak TU>y`7Q0,đ\~̑c ༕%>7 -=62v>Տ:øX~F|.6 øѲ?+{$ݬ-%|K>g?ܿbCifpem۔+~=̓{&J@-,ɼ%#rsʀ F|W *}JylUMԏx=MIS!6gٷua?ۨ?fw< aq9Z&"&D剷rLp*!9 3!:;&ZmeMed^[G\C$hIY6Gv*6Z @xڿчNх>D Qm IDAT 0"o\|Eu2a?ۨ?Jd`׆dRL d<{4_](%t@ZcͿQ7yesGڷ9rxX߄>r_BM|=}|MӰycp{d,~Q u^l. .%DWF&UycܯT.3~(URý~zP~(T2$3e6?}# ܄>xg+#S&^,kL ڨߞ&:͒tF!1d+O 5F[G']p\{eSIZAҟc6x<#xj):Ț@_mD!X1OePoDiFchG՘RB0l,Mh>b atyȘ%n^Oi"_8ΞL*5IUJ]A_'}(T N. heu#ئȁ>zӞN?-no&]_.Q:ϩϐB$:` >1K+?ԏTXlm$P\r>Z{9ؕajMt!G{{4Iӑ+A= 0Asw?*ēYߕ?FlE'6)IHO8oe)_a^jk.">!!8~$Xh[w1>a0w6ndT[%=hZH"4g~qmԨU;l$UkS@–Y}kD)W"shdB4N^$} c4 m{f,=ޢ&^?{wCatǣBUq4 O,@JQ*0X؟f~X0Bwo1ni=O,j,yOLDB;c?TV? 0O0H$`4!de%D}TtM#ZLL ?׫uߢmgiϞ=[c3YW귅h` e{{;A/7|#9M`iZy` WKLNL5kǫvB`Lo5hk|]$n.^x+Ca$σP XTsy6f y 0/_`=y}Y2f6ZFSxO[]­G.Oo'̻o0aT$+Ft7kyG HFi:q"JʏK'%Hp~p ?HFjrxؿ"g# д ~řq -Y[ @6/ep/!$۟#.i#saz56G#G^2)O\ي>a4^ec`gz%9ȝf +}>[ѧ/y:M?'0n#"|Zo~:S,ܸ⍥ eֿv6#\т{_X XfưNϷ})ZъLk~x#߳~0S$Nw,0#b/׋-x~>Y(/ Qy-r &+~܌\б~}7Zʫcz_=b{>{~ ѝ38??tcrdHn3m_V\qŻ~38Kׯ0q$W,r70W\P\qŇy}+=c3h RJhC rgèIv_#ڈ(Hy:F?,è$;yy5Uj#od|"<>k8՚_ 9V [x) 5٠[;^7+:GXhp,oT%XI5 MK9ybkA}vfHVr 5ROEӍbCifPjm۔+!D5zL*:ZXΓy3:Na}^z0_00gSa 5y[eQfz4Nu5$w4a|CNCүP 0^56NR<}'gFF<Èa!iU嶞EAYu 88\*ʀ dWtXWJ^K7tj~]醏cT<Ԩ(>FۏaD) c}ed0bz A͔&"4,Z=2Nq"FèJIGI y`q` )xOд$Bh:IG@$~nƋLO([Q;aȨ* ccO`va{^$՘g>DaHYE AK&V%t)η]ŽBWKXZўA4IP1 =Q[a ; 1TL9ST鳋m,χgηx"=aACO* T\EI#1c 秝],FOSVU~ uaI0Fu0nT f #lppa:1C$RHއjLRAhqUmsޚDOJdkɏk 0NF`-o"4(=/ka$q*\liěY: /s7m#>03o w>U,`yxwÓI~.F8ŰYkFʨk!|\ye4a(NFa\%7%i+><Ϟ=(X. Feq߬ c!ƢV7,  ]ӨIQ+mO)o~pkU` ޺0M@ϟGF".?_=,]A;4']IAqߕWm}ڈy LkR*:fW$y,aK{IfQM쪵X8P<'&"!p~lئZ:52]}"Jw{:7Zlx1@ co}'0{/.ti?X Fi3A5mRkhu U5 !}򷅎۳gw"aK. #ZUa۾dWpIaq/cv.2bW0{IB (=0 I5JOqŷ7u0uaȚ3W_j9DdW_0a@KNޥ|%n.-0OZRϛ_j;.̗5in|ğw>3Gl#+O=0t1@ Z=KyCyso.a=ocD"iHWw(R]б7M?|(y9ǧą_k.Q.[~0ZmOw FBzZ<5٢_A9W4x Nr*Rq_/d0@Q:o1OSZGއv}};>-ƣq1/48:N'Էٳh>76o<42~gMG$HGaKb{ s0v<2&qz=NG]p?[jDlvU3~+!ھ{9^1 ^%c-NT5 {(bEh|69KXM3Y:ea^q<;&"V4-~ս,"ahÂal.32ۂa,]BHrXkׯ4$Z~|L`Pt6jx7ak]r%WxXJ_5ϯR[ҍy&191n0tRDbƦnonUjҽ"oi%nM\^n ʷΖ/c øT*Nܥe - 3VnQz0>ɳ~q0ϮJ}C*Y/ܗH\Mq|Oz0N0*CqŇ~|z80 eF"EM=b? }4)R{EU0D3Q!{4*C!׮_ɽ$GTj| \I; 4ck뮸o*I' C =K&UAW*x+GroWe7Zb惙'Eb?E^X4{e4"kvYB櫾wR&$ņm~*U:UӍuHo{IZB!/J6jN2;Cf$͆A@q2 =} {$GU3@یF;t%步9g _J$*22[>EbGay1:dhe#]G>.<)3)_g,+ Ԁuڱ϶vr\AOE:ӳ ${9'=>={՚ޡp'<.zN* x8O8^27Uy&YW0M2[=9.uLNFPHݞTX\P4'?޽GNjpuf<֩ly}H==܊c۸"G〱j,ޙalN;P]oDus-y/"2w,~=C,f5 [s$'qVmVK_a8pũ}&c9jalNӖLύNܪrr7{8|Wߕ9X ٳ\"4㽓f( c}e;9aU^`|w/=}8VC k(ܑחʪx\_?_ɤ_o5Ka=4`?xQs[s۸}\J}tS.qNbZU; IDAT!ѡU8YnAa2e]}tY̗8\"~s]d|byҫx5޸aTc !e>9u#*3eb?$hԚJK~d{b QRJ?Ca7) cwÐxkJ՜o$jUN?5_ S3\=Q3 kn#DA/I &)-"Y4͈~[ʨ<I߼/=ŕt95  DBǭz0"A5H_,w !Tq믒Ht>j\AY1: \.k]̿191xݚ#-񫚫U`le+=LmDOBߑ > rTa:U<<*`Qx\NK/C!y3/d`F5/'aQ+TɖϷϙ.blhǥ߷O#ӃNBI`H)JN!*Pkk@&XՓc~jn F C$^;sÙ0ߕj#F: 7R1bhw|\Ż+L?bX,5#eϚl(=1?Wx=Oc=c Zb::qv`Fc) c 0ϯ^T ϟ?߳gOɕ` Ryc7+BzǪ;BEC4kcԠJ=6/?sn-5z5äS7M4%b 9 6UQ4 O,@ qǓ.ɤ ƸAÑa0S&>᭹ʥO$yլFP NiH0P{I6J28böl?p]P<'&"!p~Ʊ؏mU+ =L&;eKo]ޝ<^}wf7~`Sv#⍥6#:<ͤt#?n.a,mJk7<Γh'OL5kW<-% ߣ0 < z0#]r^:BgtLYnEm~6#q/.] 7X_ך?ْ_NGSqծ|q'M0Oas/ c59lag6iu=-#t#eC?0ƣ.a PQklj.^1_4 g{Mxn/nhǧ;yW[y6V;-7҉9ràOw~r,.3K{em>cK5RJv~b30^abmwøE*{º6r|:1/~q0ϮJaaJVK&e0~!0}.W|V=qU+><:v0`]EuI=b?PH.0Nl< %+Y;-oX~e0GTjCeX;0Ko*Ia;~x cU%_5 F0f?9[9{}㤸/;3Rq^0Np?1tBSr]{eTNm嚇]qpVmį;}Կ0=U!%a(Pr/Ҙj\>m>{LN ׼MޚG>j=#_1΀_hGǿ6# An! dD G$ёղk%6<%wyz6/# vEZp4`AH 5̌4O3]S_U񺟈>jƄzCa%%`@Xzr YEzwlKP}ysoúd@Q!W 5U`giMO dsaH!|c0~yW\zC#90E:JEC~Z}7Q0c~ˇyX[_G (y#-X{g73OP(+/# ⚞Z*0{Y0TX}T`>x^xH{@¹`9x[,ckiD G) ޞy\s< 2n o] _Aܥ4>N P=.$Lͷoub֖}gzmI3Hx^yf e0M 0S;K! C=^L7;j:$"(6vQ}|xO?XG|҄XQi|x[ִ̝0\̿տ.F5\(n (lQMgxYU=u}qXz \}-Rgځ<o7k*6h2h- cȣUgat0~{4d8ŎկW1{ls머7sY[8eձo[J #e dOFat]֖uZ"}z*T{2(% 4qR!T\5ߜ )U:DLs^ОҞ+3 " 0zLv$ȩvتF;-|ɽ4||T`:J*zJYOa(]K2>oRs0|?C&}Y*RP**0'-x=8?֖jݸ(%AvP|P)(*el F0Dʣ0zyiaJ==jwLh|-e~+𶼴Pm5Ul4F0"GIX?#OŞŻ 椕t1?4C8mU,ϧl4F04N 〣$a?c J+ڣU̿1ګ=r(k,6MXLX Vp4Y+u?`'7%M~ቲ1 Ø< 2;k,Db/T ÞxY*aV`m} e椕z3v cõ]֤`ӛfQ0sI8LE|c>rȶ^Hvm3SR6{X6f *A;Du"1m;]կKCc A(adO{5aRZ i!|_€s֑ Tqwdۇ,!, R0Ky(AxjqɐQFaa;Jb!T`ȝ }?-R؟;eԶ] Q 9idE*=ΜRO%mwکǭso,QFaK_#2 Q6~hq\(4?*صOt84?2>sIc*RrەJ=~a$aK2({Yɭ}JuO e,-~_~pBH>}r^xG5XFIjR>_CKue|e*H v>^=\[7 t(I!r|ny<cLa ^M*~RAX\rW\DY>.*Pv{}+}k_,.M}˾G0|0F7$a7f<,o-vt|ny|]P 6z}FZ{~0$Kg8|'{q$jz\n||ӣ4ueݨ{qⲆ.)G!J7(ga}fzh~k%Ca}z7߾]_f*W9P>r;qA꽏vd݅]vRghmn{ϚX?d7 |.e-se1Sm; 0>Ծݳ0>>l*EGϐ6fe|&0*@p#:*ø8(øM *uއwǃa011w:IqwXEg;5ѦM{<'0T=mӦ}Zcee}ڴi bli:Fi>vQƧyЈ鬥Q1-ōJq7L;?os|vܰXB PjG{r qyΚ'p7G;;Jv(P A'h*F0T*(F~*;F__A7* ڴς߼7Zi>%60hӦ=8%amڧ>ֹ$_|G#&S/tdW0F0:=N> TY֕V6On=n w1*:t}5B` #MROEb1qIRGIE~aL7'*J=c0f k3*:tl FGÛDa'/ϖ:ڹYaȾ$dT*ƁA~t/;#]@[ c{x[HoM̼TIblq`ax[>6Mdgiq"sI0fU>[q)j0&=xO0M3Wk'^suXI`%? #0\v RV0[zCf`Ƒը(Vrơ =KX0lH{҄5ncY9UTxzaRT f/@Trm뒍ks0/o[}IX‚{uh.?璍ګs0t[Xv |EجW0dd]h>D71%` 3.E T!gfN( >*=O@È@OgQd1zuO7(T;_cB Hlj$ {@ߩz, hNh2 2Q7+b%;< vJ`.4Nei>h,&03'.#6*﫴BVWo6 @aJeix==_BqD]A`R)]L(kaȜ1819ȏ= 8{kLAT8*0 D7NFE|!0E~vp'@xR@W`=ta=$j Ӊq^0zz 88 sAl"2lJ-B#3$rR!mr"{X TiPRi:@D ka"40y0 s:n\U 둯1)ҧ˜=I"hp2U_G`KBqLF*$DJdRc9p_I<)0J>\Rݏwd: Ú21sے/) `ƭFJϲl\>ڶ "\ݗP[1>.a#\TEkӀsFE@Lb 2 3R0)Kn3)\[z@<cnJ|mE \}nFSv7k E0^qa;nq^O0Va.BB$,ThBD(ߙjeJHd5 ꫳ:WcZ}>ZaaO!KoM}gƔ]~|J,#F鐥}`ɰrzAk ࿓vO؞2 q*#%5Cz[tb<z@WUoy zd\`ԑAg)`˕5my]79(egap=cUvCSOB$Quò `ʟu@پkzaZqjLc>Pq(/y8lkS/J 5d% ;7C?}26uúdwv2t2ƆJ-:]9;ϖ xs1ԏ?>;0ø؏a="J`FI߷0*GàRg#p #fs7Js`@0LLL㝎3#e|~=AEi+{I0*ᦴik(F0TiӦ}*2ai>HoYKb?["@M w߹90BSg+aaqTOegbb"0o.{7RgE0nܺ7 LiӦ}ok{1B6:zi> #hӦ=\ڴi߹&àMkz>s\4]%`bb:hۏ߬~ΫT:*ͦ`bbb*Kku̾6!N [JIENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/InstrumentEditorLayer.png000066400000000000000000000457551211146647700242570ustar00rootroot00000000000000PNG  IHDR bKGD pHYs/ IDATx}oF/Ka$@ C M M19XM{Ý=;/ܭ]..,\Τ烗`ʐ5d@4}?Rfzf?-TOOU=g_[-4l@ Py2r^gq*!YX]B =U)BZ?\cB 7߬t0F^RwQ.P<°,474],wE Q2ɺ|JWU׍X85=2$ƀ.Rrʉb(1Kg&bL 8ٛ4oW ˟ih>ҁpYGƞA,O/f.=H#Sy “p;gC p0`hlh z ?lߑ;96;HtNP_`K#[1;aYݱ$20]x`Cei~iHeX.{yt:brAB*Ӣ{>4pjh]C騂! Vco^RxB$1X]=trQ-־Q{IoTp6O{UnsكUD95H 8_)B- ˟`oj 'Sw,>РͰ53(otzXcmCK,)r N~m˻]NЬI>d&dY,~Y8tu4ry7;c^'Oa}'pt-2">Ԁ2/,55\}  0.s}ک|R6m3E\~}O3k,VT|29[n6EW^lC/Z1l<.VDR=tfjA0,գ*.VOwvb"i˂N<`dHՁB+/u4ڛ``2o<~d8֚ }rX][nFksscf7h?1бL4hyζ }˄Ձ2/^JHD5 !MIFmﷇM< ,A{qCCQb>F+a6;Q;Gtrcyw"t]Jt|pO h[*[e`F{a.e( f%^V4y(.h{}ʑDJ].Nc$gOqLcX'\G1.Rߍn}ҀZQ|a_+Hgpn3cVnàtIaNy #=zc@s}(babFn]\_C"g@y$IrIIakFܘ"ѥu/|tI߳Σrj_{0em$IrKx&ɂFzƲ!<22IFV" 0]EBr}+"S$Iζ,/i18CH$Gw18A <+Gs /0jϹkX]O-Bv73sȬG `>٤OI aE4h?7ӓ?ǩű,zKG9 t`,޵am)ws6nU@ NBXåEOcW0DFЋG򋛮!vGt;;󔠏aSFpcsyXGa{-,˘Zۚ~F4]N,GUw+=/)8ta 0<d\ hV:oô̑󟦬OWm/ۓeO,}+q:I=W}Y#n=9 R9k$=XKxѬC9 퉎¼r aeBQ|/`4 yNYR?ա.tVE?yUUh6Q:V1`m⼣ h=hrqnhۀcC=X,sFyPW(*mMhֱx|fyAd=w 4at:% eT~zUEGU00h4 JUGT_#?'aY`ПhhlP=QEYy ] $rN>󋨝974H<$NQtQq$s;m!I@Nj7am? \|c 7:8c@ [ &pHs?c-BQT?$IFYG݀,IFyIN ]s?F19FTOl[AooZ[8MP;>%z܆׸,X~E^w8n}  l 7Z5Xq_CYG"nM6P0:kmh&>[Es} 54KPﯡ^ǍnB'v҃vH1iL 9i% Rl9_ş-AFiZ09Ga^AXK?_"KX<Rک; g_;\C^F*zsP ~6jg΁(+Q;(:mb' o,a魫Pho4nlα.^XZ^Mb ^8O`|)<xs*Ο9p[vb +xW`[T\:Q.|p(/{7pWŗ<+.ƇwPlu"WP8 e cvLcȃ#I:jޟ+ОhОKdzī7*(JSЛK?h_w7mڧ+b;.ɹ#?']`re0;1$<7pWVݵD|wJ*#6[0 Ꚇ뿺׷@/Pp#E46hl4!IA)D詍"C\_05 18!TxCux?s*97}WTihl4ryȅ&g0}x-q= a^Pxف)c(Wj`9qnyY/?}t='{Sh4_JK”Ǎr? [1s2Khʥ 6h``PQ=Y $x}Q3?sBa &V>[$ډu.CP,wp=iL3axo*{sOz\d yk*E+Uu#X}]1/:v<ڱ _]U&-!k`%^a#'J/eO7=t2~{1Uhz\!'Zh=x7.Ac?-\v,}Kƿ y \ױ #=_a}<c$ Rz)94:x(x9A0/X(U c*.;֝={bGpާ(J`OGn'*t_[\x6mP=("b8ѬT*eO=iOsdU~%}.yEMMTO.B{t(KXeC+832~pT+5":M3Tj㉎Ff L3L~$nTV+|q9n|p~q V,>cۨZą7 L%{})@&W?Y0>}r=q:1=َ; '!PnrHsR/}'GĘ7b4RPe/uǣN[յ IO9n}p~u/}uE_y0w>'M~¸dA˿ktLӸ%T^YDRT0'jr_T_IFDz=aD;h:CwC=Kp"37 >[%G7iN s(9`u1鳹/МߤtNҼMye1>cƝ?D:HatMw$Iu1cL侑0.u{q8k?``Nk0'ZqI'}OͿKB߱I'@a'ȆN5=ǚKbm09p@:Ϙ*BQ[k N@Tz  6?JqݞLУdzM;zZ{&G*20I; RL1 z,~ qUTL|қt~gQگe껿5E9z>?tI ꚞҜ&a;}/a6^>sFs<17LcSM,8McR>\/(*c0bzS-vwMO]]h?qpqbKϛJ}Bvc]SŘFjY˸cknK­P#rne<>IN1,4Y`eҁBVT1tnuJ掰+c,<릵6 7TOP>}i}_cb ת$jyI5yj$,(x2Zw}sC}7s&'^z9 rĶu&jE&+Ca+5ky>SecC0$ 'n:!f%{l_:!j&:/}ǹK4l>Xt 5߳/,9\7!v/tM0cO#2'm00V! 5zt-\a̎;``-Z9؜gaZ&(~YmL~8 @a1͖!mv9w1 :]\=[-9 K+h`z!aL''([s s2:>jkB~(=Ȟcsa1mrAsrϓc -`sKrKci=?B l$);@:˱LJ_?X^?\_0 |[rkKmsn%Ҳ::R Sk G~Ϙ 2a]O|AQ3l^ô.I}("kψ퉋 EV:m@EޔlOZmY0dIp1 cq!%bLPH0Jd[&mepI>a/(wmZ9 CkϠe]e`D͵bØ;j +* Qo^+գe@:B~A/@vz.cȳC*+CLR$pmw}PaZnEitD{Rۇ4V pM0Lw &{C0驁7n`y I;t6`n(@Dt 8mv-nZ+UY0'C=Z5`>ՄyN;PeƖ;呩XؼYQoE00WtLڠ<HR!mr؎ Xp{&^޲?/isV%KPO-Y惕׳&s ]r nYs3tz bۖ!"0aG3sji`r3Uy@-Vb5y0f^rt`VR }%j7ŗ!nyëߠdl1A)VawMA+$%.B x72/jt9 30f0BctrRLSڮLþ7['Xx EQcy|ޗ7brxOڱi:k0cm:VHځ;(U=9 ߗr68 pls>F1wRÎgM?hzvמY7)= )5c\SXJ0"b< ۱1I0{~7={1ӟ0g7zg#Cދ}99+^O&dIIq~DW>}60L< p&lx9Ȓ=|3!'vv[ϸ?kHn߳H:u2U{JJ!%s@.`=o=8 O0z!aG\P+SҦg|*>SIHad>o&8 Uh>`p܀z6 lRɂ߱XXxUD2FB鰔batYGK*Og_d,ÐRo18QFݬgc_~'$</< B{{XW#2Vb;;-`9)<Wiѻ)":Gw~u,^d>;%1>. l^1 ưFav/VGvDyf>sy&ouhVIW&ڸ壣=g.#`|8 kAZN":5zx}oCǝuw4K1g- Ǥ$-IϪ!TR1'R/ݱ'M5fﺾ3a0V|9͘&}|&^Ccb/ a.ܰH{ ô5=͵pL5%^wme:YX h=z;ccFLfgֈHs}']gjMO*s#[Ⱦb;rbuqϦG˓T>2'{y7,aK:?m}1=eo6vyF'Kپk&ð 7wMq3۟e7XO$-3t^d4w|s7}$ٗ[#n3?K|%2緿eV{4M~'mɖO[= 3f s~&Hq}Χ|AN{r囑5=ȲYPQwIv?;v%v ]?ODUģdx'cpamn7X%w͊;>L ?O<-u{N^nA}&8c1̐N~tD//AA_iϨOiߠnJscVO+w}D{["v=r]̓2+9q;BbKe0xًF~R2KT4f"k;AF= t-x`cgˁ0$;>m5I~']i7n{.g C x4I/޸R}=v;^v;i4f+j08{:m{z/OKothQo^l~-O6{ a1<;=k`+>̾};aFᯭ ?`r $x~ِ|i"K}-=l6f}Hg=S_Yc6gd_0pX1w=NbTbYu{^}+y}=~AoDaEjrn .#'1INgI#Κo68 &!caRңH1=6W=']6AO_ \A{BEI2î?.N_5{c+Uᄚ{I$kv9afL0I']Ӂζ{3P-wÍF(iI:3wUؖ{iu`nwcN^3ra+b9 tI#n7!tǷA *ԠX(v2"ty9 20w{;$I?,% ܲvqMEg2,t:F$I r@+0;#aax??}m$Iodm%È>߽Dčv: yv}_)y߽C#jE;MjӸ$zp|ހ]ޗdZ;'9E*jEhTP< 0.sliJu;u08lt9\|$Y=6ǫ'~5;뼿߫'~V:/Zby<ߓh~^qF:'hAg~Pq6N/Z$}rH@?"tp^oj~͆ u6C!wP| WpwP}K߫p;+TWk- "Lm=.bhi?DGM=}=x tiu<]诃1~K/u 0vo.= zrIn'9!Vb`1 Wuk&/6QFtjcګHW5bI1x hZ=b{k-\mh8)?w^ܺT)9< 5$75ryX<*umXyowU\ KUwobT~o\*߾ 6ei2Alw _@Ro˘:\Uy+ ?W9V _\~ϟ:8Ѿp.*tL;GO{kb w>KΆ?R^,^gpk+bIun|\UPq^F:[vr KߦIp+{TI Ɩ`ps7>k]9k͟_dWQ;Q?>Nlş.8lBӴn$!5MíAu u;=Tu"'|~ʩEXۛ Nَ[pԤ=aP|pLsZ4`4'rTPaKH1ø;4dP\ي٪1$wLMH#kr`Q88b J˩1$Ebaojw"O[\|vK~nWvi+0͎Y7oeHqw+Ʋe.nK}#_$lC Y.9w#Ko`GKc<$1}*$8Ko^~ô8k ڭt\Kh1 UI:{GQCN{SN^A{N:Y)sֶ_j$I-UE4\UO/ޗ$Iΰ\l ,cgzܽ}IO/1{6I3,'*Xdwm_N\$I -Wߑ0#8~27E{y_Z1;a ,]#$"_KSw!"\g0y3I?z!%?c%Km[pXBHc{]ߜ#삼w3/90$|c0NyW_[bt}ˈx 68u$=gd]]QKC#T)C'cО\^lrt+Mo>԰p0Ŧ>%OAF?7h*ddt_/~5,-N;#n?ѡ?`F"*3Qf㻾m/O;W]ۗ$i&z7}}|qu-۴88AZp˄ FRW2f5M ,T(+,x cs~=c TYA6QyeJ Rj#0D8_ 9ni7a}c` ܲ`h=o9}KJ OzreuoF0 =]Y{ 4( za 00Ø5POj jj($1:&[ttCc} kG48AƬaDB}fË:8]CXF~NKcۀXGc p@:cC:sidl'v&cXg.#6^Fep[8f˻Tch_5sHmkB=B9z }KǽU4} C*u,B4CN{f`Dlm} sO}ŕwbxI9s6ǠTT+n&؜Ӌa0ppcr5<οsł@X. zBWEE+ҵwXan@]sŵCeքT˃Æ$8E|2-kBDmd#M00Xa7оKu6,ַmKtP$"26'4EADe$ak,[dIŹ%;+cP.X <>jc5M f"X•we¦cGS% $v^(q%|_'eфzd&1kKh +V_o^ƕwr;yPC2 ^*KۺZTq:h@=R'ASpN@x]|xoI P㷤6>J W1'{j`AUTv6}KmA`YzXE"WCFˆ?Rplcu-oW^Yĕw^3^6Ǡ* m 0aw] 7P_Gkѫ GqH[xǭ 7ɑY@z#wW ^cZg߹ n} Y<E-b@A%iCyQ2_6P` L˂rH> M ð0ylcuT"x'gu 4΢t,9e4 A!r@=] ƶR&#'q8p|$cy ?xj;\LҋvzpDnKv1nKɊ1:|?d uIDAT¼_QOхÐd oظNv&^9Fcm7X+\{Gʋ :& `H>`uJU:7|Ha89 1nCx6ffl;}JptW{}[5ו7~6x꾹C@. W/Mhl=O2>Gҿ] ɭ^ZGdM 3%'|.$ Y!IS Wxy}r|FsI2%,nChPWTC @ cx73~XF-!ş Z$X]v+M3H0ÊZ@>\=jFxk#}K^t*ɂzu`A}QR(,Ȓm9*| \ qb6(%8XzJhXtS/qYL]v^ ]3b? aoB:ППmXZ"ExoVBo$>̾QxMS?q(Vzb]`W^B{C{@%KE9AГ hqs@ưzw: o^5Fp o^RCy(TÊi;xoaːe 7:l.fD*~FY{9Μk+xu<aad=zca@br,b(q308"IP% 0qngGV_X:H~%z #11xg RAƸ,޼]瞋?eKS +j¼0,,gNоB3$ra9aos7>txVQ/Cʪi^s@e^q렕RyHa;!IjXQ %EzDרnt7pFG54o7ikhj|yb< )+HgݷFkԮ=a=GKa I`T|Ps@F c#q"o@H˲Paŏ  Xi0`,/g`qw8AɀQyee.pa$r=A(8LAAsIR%5V =A祕޸ 9L"0't[7h\w] Hdc=2uڃw~yq'޼ M{'?p'1;cvj8U]l Z;YC➰?&~xsIf\mLaN; 9|;!c *, ;za{0r ڣvI'}G1-''t^%'t>U#i 1-V@"}_ztX{}0I$\d0qI$49Tv@@rjQlʏ*d MT^ W>Q 8T^| n6IENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/Mixer.png000066400000000000000000001104311211146647700210070ustar00rootroot00000000000000PNG  IHDRU7B\kbKGD pHYs/ IDATxohWІS@6~$61E#\L&&/f]µ3k~/*^ȵ0^; w~A#~a/U]?}Tz<|aVYEQEQEQ՛_S($Օ^PEQEQEO'BbPɺPEQEQENco (((j*W8*EQEQEQt3Mmz(((vBg_xQTQ X}hï * O cRCeREQEQIz˲p;}lT{B{p<i Ƥ] PE=+F}p^g@ EQ* (7?íX}rREQEQ>0ޞ寗qdà>2Pz]Αq(ݰOA! H)`?ua?lHxj++ҿ^*[_U! >se\kҀߙcKQEQEQTZ VWuT 9#x(Ah Tb&Kg_p^'Q}a O*\iLāWaK[_1s"Vu8[(((jԋ'ZRC8UaE*DYVT7`o"^(y٘IZE@}]\%p<GN pÅ+ܸ';exRƽjR((~(m(ߛh> dl((7xJ_؍їQu5~EQEQE ̰ 1иOREQEQEm_mwopT(((i?-~9ݨ(((7&B ~mpEQEQEmWnQQ7}[AѨ(()T@!g{l^aұPaQbK cѶU%/yK^򒗼%y]m- }޶Q~x,^+cQxA^򒗼%/yK^׶m̾=5y4dͅ0{]>19{2JuQ4K^򒗼%/yKޑJ%6}uԂ4}y1U=U* D^򒗼%/yK^7\hPs(6ubq>Kв=o~u2DPO&h *J=u%/yK^򒗼#UQȃdr1Zp-L9@LU|N_sݳÝ%/yK^򒗼sZ%,rhЌHc `p1U;0Wݷ _XP/<ޅ/Aھ}>/y9K^cͯC!'ta&&'+*[/`GK6=8nԿ8^*ؠp]BơSZ @iԀ^L [z}^q;[P'ӿ8/pPt?Q8| /yyT)x@T^J?Jd *:jSQL=UCR *!msơ"M[|/rۍ @@zgUn͇9i6K#љ'\MK %/^@=ΫL~UwB[yN @TߗbBKx}\BT@^7MD]7iAף2 2!^!D2yDRA":gxTG1Tax1U*H=g \C:dl^ 1L_VNb RAUk.. n~aJ(Rx>((t9]ິ~/x >2*cpSD~C* P4C)RY{J/mWO{"T JPJ!A 4/qs=Ke929* yBWяDOg /\[mim l2ѥ u{Wg6b2~2&pz^y'Kke-.7/x kL' gMcK cxA)%#,0" RLӊG)㇊pwBw]ufDP0'u0v;*:?l~e>?pGv_OJ˯Zx>9\mbqr>lZV4:bWqy˿?w- Ё '򁂀DSLqP/! .JAL@^ۼCVB $ {*ߗp6K(h R n̓&`RjynsSS=SFf9[Í 'aە7 2@ BbьDq#nmy˿?w/cQ~]J,ɵlR EKyXG,sgÆ8^O RJT*GF KzJ>XjP*y3>}e)xdT[V@ W~w Bh-ݯw/'/y9K^c]ke81U$ʄ/mFNUbPA=P~t}%1­I"J XЀC4z.ǁY4!=RPzS::UT9RƗ.k _a<@0b7g(6r'/y9K^@ބkub#&>?<:lp;Bu5~q:̎b ul:ܚܚWP*@y ToOՈc=;`51Y y@^򒗼?;{2N>qh/:1tԉ"̤T!gVzܲ,X!PEQIiS(N,oYq!Ĉфc`bL('uO5%/yK^򒗼%yeڦahf 5lRGmYW%/yK^򒗼0oNUG% l?e_T %/yK^򒗼vb8}߻Tjޝ@r?򒗼%/yK^wT]LF,w={wp)4 S}-|Ov`83X򒗼%/yK^w|cu#b[{Bry*iBE$IřX򒗼%/yK^wм٘^Tӕ}IuuT2zc}e_k?}?򒗼%/yK^wۉbƐC߃ѷ3YGSTo|mXGvO[?wo~}x?%/yK^򒗼&S|f-fOW TAjp7Zq˅7>:VX۪yK^򒗼%/y;h7cZ۝թ.Ta)Yt\&>t~l>/5?YMm%/yK^򒗼4}T5 A3FnuS RQeھqzOq [Kߪ?򒗼%/yK^wۉj=Uح &w[?c M~s%/yK^򒗼%(xS~+iMT ST)%Dkձ=dk'kzH sk[%/yK^򒗼%/yH9 ?{x{y02jFUn1ӖuK^򒗼%/yK: )yd)D1<>1`ӇPOJ^>i/•q 3'gyfOΥ1U?ٮ>nj ,yK^򒗼%/y;hlLUG% X]=UG(J%m<˿] )ֶfUy*_/7}S֩ %/yK^򒗼TFQBռMn Qp=n˺ĆP{;{~̞<}[~>چQd'UCoXg9%/yK^򒗼5ށשB~CH ީ>|?RzW>TNR o*;r.,Gt~nkkߜ>i@5:%/y켃LXnwX\1Yx?ۼc{a4^JqSmXjgdnk˘^H/򒗼%/yK^wԼÈ>ZKD03zk)%/yK^򒗼c>.`p&ccTe'[ki%/yK^򒗼xذW ֩jlN%/yK^򒗼Tq'T6N4K^򒗼%/yKQ6b`bݓ1U}{f%/yK^򒗼䍔SۯSTaT麁7].8;K^򒗼%/yKQ#i-,WTՅ d]=O7M,s2mWaK*DOyK^򒗼%/y; ^+d1' ̞f-b^hPxg7a5\簟T0fg;MuFu֪kXj*҇RI$'7ҶR/%/yK^򒗼T%IL8FSy|JPH&[ÌM^򒗼%/yK^&TSYWNUFոfkiyK^򒗼%/y;RATe %5j۞#&PJ!P pG%SW%/yK^򒗼oNUvX^*ՓjY*ͫS#OU)LQ _W5 !^W,MrӇ>Z+%/yK^򒗼bZ;{.6eD-SHlk;ug1U؞QgϽwR*omȺ( T 0tB`Fz!%/yK^򒗼ML6>{XzLxmڙ2Ɓ/z©n x(^GG+1UU{g0uʃe8BxȄ6!|860`L' Ț?e ,yK^򒗼%/y; /4P8@b%5̹]/58CWDĘzJԉ2V*(:j=!P,PBqD ]7 p.Nk`K^򒗼%/yKaޯS5{rn OU>m,{?1Qjtu>_E1v2ޝCc ͟멚_XTu s$C-MMAJ yCyK^򒗼%/y;4JSlR=UK8lGxFVfwKAϡaLUFU2a5W@!#E&TB@myK^򒗼%/y;ޜ*h>\"TT5KA-z0:xњk_>>Jǩ)mEp7%/yK^򒗼* \-܉4p}iE^򒗼%/yK^|x۴mx:~wJ -b"H1:=0j1UsUOp]7b*8U~=U&1r(ZyK^򒗼%/y; FLU&Z?;Ty-aS_ř2FW)ٳbLUpl;L˂yԂh Sp5ܯsƓ$CqM &~X򒗼%/yK^wKYn -?OU??;T-]1ZHKX- >g钕SտQXR *~Wp0,IPQcPu JyK^򒗼%/y;L{5u6IS5:USR(6q`)´, R@zۮmCPu4_4yK^򒗼%/y;Myxn9y oVPza b]3qh­((h򒗼%/yK^wÌ2Mk|-}SuYK^򒗼%/yK^Y3obA%,VV+?'0jt\/ ZJtٹΠT*yZ Y 0tB`r/򒗼%/yK^wC ;r߭`LUj/{8L(`η6(2U}j>uB0&ud'/yK^򒗼%/ywwu ;Xj*zS'Xy8~ 먕!P,PBqD ]7 pّ%/yK^򒗼#zLz/=U;)45= .r VX AH>`6Q:6)eZ E^򒗼%/yK^wuLIn ?*Tj2' TA4LZ5-%`)B4!Bh%/yK^򒗼%NS]TXA`r HN.4lLR򒗼%/yK^wxS51U2""D"We_2IXK^򒗼%/yK^z?pu؋&b}C2Z;jS5PA6IwN^򒗼%/yK^o7=86 κwÆry1U*T Ӵ^jW[s!40s߬2Ą g6M HVф[P!yK^򒗼%/yɻ{ @@ 6 cOy(YΧ7$s5Z=GMx,j, {e=YI?[{vN{gP*<ֆJj ]5XG."׬,{@21BNdP%/yK^򒗼%Hy1U%bÊ #^g@o,3xjWLUKbRSnNn_Lu婚{ NQy [B*־5κ ! :I#Mًxߒ%/yK^򒗼}iLU+Qg_=U~JRܘ.T^=e<\U?QuJ{ *T(VW{РFTz"/yK^򒗼%/yGzML0:p1N4{4Lԗho^ͅ@Ƹ؃gL(-@gګ4y 1US+P:1X)vF@b a*BC%/yK^򒗼CqLU,SՏZ?Ez!z(qH]6Z(.P҇1ibG,hp=w{TM ^-WMH )b85 %/yK^򒗼Cq*wӅu7FHND*)}xqzߗX{ ^/&uRJ◷PY v^'*ԋG, V]R9rdTc EJ6,!%/yK^򒗼 oZJ$*I&h2SիGێa B{_݆RWJ " /yK^򒗼%/yG›!(SNYGSVnJT,!lgs,:ٓ(Cӣ%qn J5ZކM_sa1U*TPaUфO)HhP/̓!M5%/yK^򒗼%PyGS)_#S6*aW1ʸ|iO׆ xȺZ>lb8b+)F fߙ Oc C0n:[Z"cWt 孁%/yK^򒗼%/y;ꘪad}z6=UV`?j1 g߿ZT ]B~f];= WugY}<* l wkT0Yẉ'6|`%̗U;0&tl3HyK^򒗼%/y;QTLtLxNߣ׿AkοG-*,V`*VyuDK%}|ë@JQT婒҇\XV Pj+V1,I"{jcPu@(CyK^򒗼%/y; ޼*ZLU,SՏTUVj0N9˱A%rʃJϴP*0U.:Mw68Hu]XG-̞kpPfeG1U'\ TWcZc⥑C xEq҄Qv@q7'Y*+s!!c„1iHu=gh)67ʑE[W5%(+ YwK^򒗼%/yK]u_գS5Q cȖ_*(U |zQ"S*먅7cm-8vڿ~LjTWkV27 tsAT [* 0tBB%/yK^򒗼cCf\9,3>G=~@)ϛz15@A*"N[P}铳w1*$fn(؋]46`Dp!@ -ZP€1C4 k~f2(򒗼%/yK^wr7괿WLUl)TќxܚWlDFשSXM|ӴK^򒗼%/yK]iLU,zth[ NLyo7:ek8W`is_bX] cPuTC/z}r~2ʓ6uDA`38si@(]S)DűAY\a]whqkmgy?axwwy'{7x߉w1j|yq/y}oFS)_*GJ)hѱ?mܘa)u}wWc# ٹt=i?rًCkXPЛ;O]p)^N21'ʻƷ;q᝽t+7kp߷b/yO:(j'T+]hܪza-udT>;SnٹhU\ĩt;;񻬁oD4t{yi|(tifoqYwPQ^?oh|ߪq|;Dj#SVVO[soJ vߺSLG'O#Hx5!ƨEE D߬E[?-ms|;$lQT$ <ʭhv_,TewVsJ|7KaL=9 h_S#*X q6@mu?^un[# 1&e5Bq|f ߼,o3qNo;/y-]LN_*n G+-vns}/QYT7kPu 3ұ)̼5 P-y)jҭ5˭7g?Ywn2ciQ̇ ?v37p|~\N1)ߪ·= Tu)+`ʫp<'\֭ Bʃe()!~}BgÁz SӳZ22'Th[sYn5Qh K1{vt] l5]\ǑwoǑws .fo0&>8k#gZc6{{m|;8E~41U/n|/r=rӇܞb@D*:\+ IDATwp}v?@%V/{iZLU5Y7i'wn5烈)oǑwcR͛xdnǗ㻛3@￉%Q r8ww/y;:U;7 g>aS P_]5ǘ*y?QȣZ0ycΆXJzu(P_;s0^ҷڥ*k2СvRtMdspZh:tuiv;[W6#x^/7Pg5D$?{m|;8ūgFS)_m*ׅ-K+;ot95f]{jЈC]7p濞ep[@p>0ޘo"v)3g%/yK^򒗼5^2R`1U;$iKli;*js<._}6<*X}]xǝ:RJ<\cYj,'~5%/yK^򒗼%0xGS%uvc_OUo7gq-԰| 6L+UU2z gÁ^0&uH XG-̞Ciކ7+}T5AX򒗼%/yK^w.GS)_mM gjRmmTUZ?ZH ʃ V8~ՔϜ4aYARѸ^-l7QN"O0psxĆ+[lǁa4.\]W ŻPf5=_׋X MٷfaR#ԯIT`lxoJTz%zUusٓs>9Ml)sOw[~s33p֝ju%dV]VTL_+]yPipTxܚW;}r6TOFQhxhLsxucWj%'|?yk6Bұ-ţn,]%/yɻK+%|Egn[_/7wT NU,T),$SNϢ4(@0|,pkpPNfL ,$"$f-WLۊIdTq|[ /J$-pr|y?#/y(c?oT^SƗiז~o1U8ROX{҉)HCfgP}$&P*`EXE ~]˜!>֪kwOc/83Xw7{5%~nL Ƿ񕞟[谓x6ǗyɻxGS)_jђE=m[=Uj OU'zdÍ__]apw(CaN?ܺC!5IIcˋn1UhT푘,&x%/y{ҿbR_=W' vXoQTu)+`S>VVhy- ~IXK ~}bnξwtl53o̤z>a]>_ /y?cvo?{T%$%' 0{6|8/Ty^9bvw)9ORLNظ;{cl|v w:j'T_n2򌨮K:FZA@l[˘,&i_mҿbR/yKa:SNY{T:w=96m3]dd)DK @m61'?/ġЅĴNOtdGH3]H-lN)lNXG^<0.Td;`A }Ȓ-YaK}_0<#?|<}4gJۘ*IZu{vhz}E&)'ŋZ!ٗėQ;JJЯzWAk1!9U^ZO|G k/21N9)^ Ⱦt%ė9U^L#U9UbBr*&0QkO|'%ɾJ"VW݆책~c~zQ+$ _;j~TYYSeϽ.xϿ?:3~^#U*/j-w{Go^ ɾdߠK5S;y|'Ӿ~TBO*p&ۓx}HYGXO=8.{2j?8RϩL%_/<$uVH%n_jwN}ΩPT٘HD>ɷۏt>>OXȩ2_{v#UnydEK ̭)<俓i_sTTCSe2DNd_J}nkyj'҄ϩ2'wؒdEK lwN}ΩRR :IJo͞Xz'ZJNU|zr;AwW+$}p=sfJ|'/hr}߆!9QiAN1囖vg9SSeT1aLZسK|G2vG@D.U$jC?ٗ;y|'3*+?+UTQ*eX2A.C|Wiw󒿛}/%aE͔N_;jȩʟk2Gک*C)+B|&a:vv@1}|t-LHN@zP!ė_;=|-YO|Ǜ/dS5 ? rP` * E{,L= M@lChxDމk}>*/+ A5P?%ėE͔N_;JJЯ*Ij8ҽ ? ʤeO'ċ)dwSee!=FՕ^u~K|/%׋)<俓wN_sfMاN•Slɐ(߂,I+Lgwπ*/+ uqC|/%wzzQ3%Ǘw2sΩKsɓ:5RE:ԩR#H?K(ZʄȈK CU(b] (ooYDD{[`_[XُTM@N r#HM" ,lTm`ԯ_K|wؒwx!0s^5>[Vf3*6ۓԩjͦҽ UM&SIcPBynK~<҇ W&5(+!s,hsdT]Y5u$|S>tn l Ko_CwK|fJ|'ݏξS& z;R%nmS'}SP}TF{Ä*%=][dt8ưSnYڂgGqgN@ x vWGr7w" )hN7_K|/SՉ1~3 GNU!޺r%kAZN$2tFeh\"So,E-z$I??X,>9UnW^XkT1^V,CaZ!|;ė_K|~<9`~TEv$Sy.˖fuпi;RGNU` @@_2X9gZQlݻJ^!<JͲ$?#s4rZ&]c әSve!Ö$zFU^un ^[ʙoXLBwK|/%ėv2L^X[ߔl';ʨ'6x[#? ʩP%\A\ArPٮbPA3Ki,!W 2ex)<حto G&?B|-aLHz{u$'|7VM?{{+;n%ė_Kc|>.:]yWw;Js,&}T5Xǻ̫YC+tġ/&: LV ߕg84$ Z .7˩rԞhnھȄr9WT^VN.ɏq/%ė_;۔ȼ˲غ[ ;*]Щ\6`9QuNX'T"ثYع]Aqo6>A"b,y 8%.r$E VL@Prr,'ڭ[/2!ž^Խ53QH{M0Ln#T|;Vn؉}/%—ǃ-+ױK.b ȭp9UF?UϨ Do9UP4ړ)eRjUa'aMl}ȼA*VR.L$ w8ٶ5!e0*9V]h4hTEcVwڼȄ/w[9PNM[џkY.+u@ĺU,N&ۓB/%ėÿ{}74RSs˖DD)*? #ȩ妶]{lʺ 2/@|jwPAnGd#{1Lwl fCTc&+RXc|^dBwJ˸z DHIb "0j݆1K|/%wz^0aŏtǥ{eEV;wNQOU NFSFĮbZ2dD!6v&.AefXdeqܙT :fS@/rS0M9U^eVX-_e{IDn٣(JˠtOdC%[|cZ!:mD_Hw7K|/Cu*+?+UsI:`$Ȼ26 J}C)-w* }Ql6 X>h'ƢQ巘:U~NSai_BzZWD/uMABCwE/jW3(߆j"3FM>PHxka")<pƺǙ\vZGoMD{6̶_K|t?R1zU Ω ɍftN4x̩ʟd5 ԶK_͢'NTm?(cpZjG5RՎ<ؓŹd]*eiOd$_Na20H$0LgBLvj5,{2Y=e'] SE%=?_5-O[aQ1r"2scxa_k#=8 For:ҫYSՅ_U>evL 8*eRQɗS~_LwӶrup\|GcOBl@Z9lmE#S ʢs>A{ zO? 20Q,y -p[{VO"UmȒz VǍJfQttMa#}e'wus`SuTXe3:U@'CɩPcI ""sJ`" ğBߥ < (٬iߝő:aؓe*zy5aBr ISaQUYtש_|NczaJuk)қ d +  wrmE $A~v8de!Q~P`h_WR>;:`d_o| c|Ϟe+jAOU3:QH3 Re`g԰ўX%w8}mK,#c!<ДeXlwR)^10=bLw7t̩2-|m_dB7sdW}5oJHJ(䅉/BgjֿKy[|Rԩ0uO|6l?#C2$IFՠ IDATٗ<_/uɾ9=a E9UV*Vթ5ZU8Aޓ!JV{eqrڣJw7~޾}}mw/bMs*n?~TYj-VAO|eYX!E8QWw B^] HVKb^j%^C"#H-@4оt} w:݉Am ^ ?S.TT?.M 3j߾}9UݟU`YT+ʶҽ8<nؿ·kF';!%oH;[7[S*/j-AO|= >J& <0+SEeZzwf:_`rw.־[Xz -komڎTwEuA=U#Un^|I#jvP >|sL;9`~V0o|Rz_ۋ!sT:$}XrԈ:ȴ'L$ (ς6R+v&y]K^z_`=G'-*c4UE0zWx"b3]rݴIrkRfQ_"ZAmvVTPm@/a X|M52jP ;9` >]ɾAG8~P1eC~T)?-0fS:U@'pIjԪ]F -ͦ2eun#@,ʢO~<&2ِ5A DK' 5P̗;av(X$5ڏ/?N,"Ui31noECsHJ0(?Z }] JxcyY]'þS:#_ۋ!9UF?U7:QFNUr>#vd oTyQk bOt|D~;.~]z+JV9F,j?ȝ\Nm+ +<`ޣ]n[{^w0VC(WkJ>31jPMړ=Ay D|v]ψo|]{ }QR1 \ _sTTʩS4:~ZKi$aUp/˲ڞͯ{fCKW|!"N\@qMjBoͲ+2A09&7CϷ <u6rsnrŲ*?8TTs ɩ2|]]dY6oMȣ>0-k]"H V?)ꀑ?L}S Rwu:ߺ's KzC~TUT?*? ^T hEO:p?qXS^ SE%=~uu /;3 D$Ikk#W}'T!e7sW/q|uA# k@#h0vuGyPNHg ['yer摢vDާymE& *c5UE }_WN.Xrg; ?[?X"?AG_|t=դ~<<ֿ@2Bh_/uF[1h2Ld,9U_GeK@f3:U@'CS5]`RF4zs}=OXɩj6$MEUeѭ 6}/2M$8}.߻"j/B7ưvMxlO-+ pa};{AjJuwKc-,PRau, ſm9UMʟgTt*79UGMXY겷5Tɭ& Wnj'uOUNi" _Y{AߥW-b"iκSڍ". O~ /'XY  ޴\6vN~pIFwXuɾ̩RL~Tuo"bhTXTU i^?u]Y!Dodߩ_qҷUJ}kѾLX , a̅@oJRṣV 웞O rWwHuɾ̩R:*,[aͦtN4xȩ;wSlȚ Kd_{vM)?A`/Hl dɗS8jk(߯o`c ׳ Xm!7uɾ̩2q|@o9U8[=7aTyQk bn|GzyOԜG'Ҿݪ6S}`?ٗ-(\\Gn :W?XujzBn_ʗsȟ?OWQt+N40>ڣrS*ca_HSANlG(jPN}CS4zqZKiEikTQQ?F랯*O)I&aJb3|ˡtq W~c|kHϧP~P aa$3.&7_,1aMG09U^ZoPjNN)jQFtO}mL% 0߅ײ(||ݴ\D23 J:r[ߔ9:~]Hc\|{ηq~TUT?ȉ֩  SE%=A Jk]7+F'Ǔl_S¾FKe (9_YwoM]o%_C&o7a􋯫E mkB{@GNQg:US?VSaQUYtЧaưvNQL !zPs򇝋b'V\0}8mנj]nP$w7ojdd߁qXFXɾC[ޮ*uTuWGXz3f(ESn斯E:U8Dz% DȉTMH* [~7|s'J2*YmoCTcT݊ŀ~7|칂Ծ>ΙI+X8qη }G7sdW}5oJHJecd!=2a]S"+0Qbd_W|mJbxqT"`^ Du]CAnz9ʃ  d7h_s( Se{;[GD v# TO?嘯BD!ӱnƨ*2nM+lv^qĐ}$;.3Uko%֠4$|Vktbzcbn {%M4#Hf>1 WTk@>* 2˖L݉F0*Sj;ڛ^` 8oү4yɡY8sX-Z]|0Y:|u ϾM,\1$|m$ɾ.FAiH^|I#jvP >CK ) ,'h}Hr?r*jD;Ps\m3YYU1Mj~{(\^Snu˫ȟYT Y]-ߠԽ?}2uϜWy.?pOm]8%Ґ>hBɗ,qVp|Ա dagø7f_5RgN}HTSj;ʂQ.X6] ._7K skX˨1m=27_/u]q,˨._bSH%l;(޺ݛCR]8AiH&^84ԡ*՝P}c~egø7E̩2$n_#USFa{;ZAD^ͬ_=Ƣ Jn%/2n喯'5a[ڮ"qTh:wHDde;+OuK]8ZY|sXDZS򩞉jjH^v6}qY ]QTUT?;QH&2RpԩLŠRu~'ER'{Qq7(u//u]\fE5ZM2$|8{> z)OV΄pd|ʁ?Ը٩ }kw7FH/]7 !_x0v f*~TΤrƪNt=e]1mphTcTg?$|=f_/xE7 bnWҊӚ{%Ne\R"Q$^Cvھ cgwk3ʨzɲ% D;QթTGbo7J^!i1nb@^>׋^0nt kȝ\ĝʍ ǵ7.N|#aۜ(-#{4Zۆ?0w6};nU#U~TU/-=@#USElo3Sk^Lˤ_]W/qJ~Hn@%mB /;#/+A-қPD(j+($n7/*fP Df>cA[(Ң!k{mXv~~gLBg}HΩRR*WNtfj-jW_=K]_ECүpq{|sGXMEƨ.cDݧ|d_ʘ5=7DM}V$qa rs}qvz5|J"6$|V?qy}~Q HIcV_2dqo*JwKYnSeTTlFN(*L9U]vdT1i"%1VsfV>\Baud g.D' /{žAhZEuOѾ_i]o꿺{5n a ~Oi^φe wke(\[jל*ʟgw'SpNde󃚫ŕkzѝxxQq R7v=׋}/+~uU| ; ]<15{^Sv6@;Gl_+Brw_YYy,~kNS*?IkQ1Qi E#5oKJt-|cȰaLwX+ٷ߅ zS#{D4"~y¯!9Fe_IF⿶ӆ|n6 HehMְz#ov۰of5 0\φf߀w\~{NQՒeK˦tD#UH˩JJbz2LԾڐA` =nk]fCTcTiśk\1fξd_W۽1V_v&g!<D$Ikk7{#;sX9ҽ6DcO3 Lb V?^X'|˾jv(X$5ڏ/?ߩ/9UF?U7?ʩ 8jmb9ATJ *&Om *cXpՇ5y-!FEH{́|/=+h~/mm ?迹 =n^Å3QRBjHT1qr,~?f0߮L21ԀLRJ|muM7ưq/=ԑMXyH:qcߠηVϷ_QB9T&_Tgq;|kPZZ-_AlZxc3!ʮk>ʩ WNU9LGWְrf )rBZD%IDAT6+'Sg_g )瓨V;jSAL|=Y6Y\&mh9)WλXMHUA]|;,W[ة `gbKX8nO}}XMXpPyX$5D:DX&|ZS&ڗהo*guv*%˖ftDr|̩2-۹+-ʂQ~DD3K1? JUM#{,ͯէ=fu 4mHꑪԍAv O}Z‰E,.^;ETGa2CS5xmkk8u"E+w̕&|ZSMwڗהڧE[Aa kNQRUwp*TUqHgoI~{`źBO!Z۷oa|Eq8]V;ةZ+$w1L.- P7.?^/a MTYYRNBVʎڛ͕GZKu_qASxk/h~R}Z6}L}};p1̖ۧ_7ߦɾqu&XN\.*瓪a)De:V`l ė_K|/%w|Ω2FU@''aSolI%s%VXLy1PK|/%ė_K|G˷SJ%01;ʩ*y` .2ӋX1/hNZDz]_K|/%ė_?SeTdh6St7**E˟^]"0v.56Xho]K|/%ė_K|G*ʟTQNu,t=$5Tl㎓ ė_K|/%w|ΩRR*NfbIJvZCx?ė_K|/%ėWN]MnTX6St4fE9UpBD]R/%ė_K|/9UF?UϨ Dmr:p'rSW_K|/%ė; V@T!<9U`fXS嘝_K|/%ė_+_s˖ftNS ]7˩j4$ԟ]oCpƀ|qK|/%ė_K||ͩjTT?*?1+w1zClOP#> &J\x_K|/%ė_/_sTT}ͩ 5e\}+ʟWJ@pu@ B/Ωet*&XNSv&r `[LbBr@ B/Ω2FU@'̩b%߫)hMx>d?p$h2] Wy4 SW߯߱cń>T@ ^49UiU :U qO ɲ'ɝ(QOD ,Mh&q8{dGAn+MGxO9U@ As˖DD)*?WT~iInR{do&K;ȼkls(Kc 5s~v}%=c)@ @ Ω2AЉPs[ў4^6d6NOd$K紉42rIfAn^}?SN@ BSeg wNUQ۞;Z@oQfS{ik:!Ġ*YRN@ 0DS&X֩lhSjONŸ"}4ӖWl~pOG> +Mǒ,uf@Ω8@  {9UeJ6Z&fǀ2aŸXc#Vdz)|k[#F@9U@ BvN%~S|=̩!5Dd{-3`"Q%:ԂVVor}m["N@  N:Va۫ CXϩR&DVQ0ʤ\,cXXNhorN@ 02 ;jح X vTߜ*YFcOr0lų:~cC9; eyXܙ:Jڕq?VPɗ@车ν08RK-Ԛd|9աשv;-HUSrȩRrߖv/EpZ@ ^S3G3$ qjZjMڠƮk)pipr,"U+ ~gT 9JuJ/А$ -k$I`YZjZ6rc$9Ul)M4@p{lUrsZ|ǜ*B(@&jm`cW5(9Uʯ+\(U#ȩf/ lRz=tUV$}MRKmvTcW*jmQ*e>縘jlS1H@ 2EZjmGF5v _îSEmP*o9U{לr@@$I&HN'T"URK-"UZ՝SѠHETɺA*Y_{38ᠭ};dv'B4`ZjS5+ >M!ZS]?=.lF|=؀v>B*"URK-v#U#To~PNEJ{x9U&!џ9p2J b灖 A9URK-rF8vI~PNU q/JGTiNꝯ'ߚu;"q 'T"URK-"U'1m4$Sjp\kě]:cu`]}yO+3FX@p6' ZjT :uJDG41xSxh!8r?lrZj=vm??6ol9 Pd@ ʩZju `쪾^4ʩJHIP> @ 4`Zj5v-/#r5LٱYNվ¯xҞ2ϾC ;Weh9!CBE\eǮɗX"jxWKJo{'U@ @ uR2@ @ Ǿ?~n̓5@ &INi@ 7?;n!IENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/MixerFX.png000066400000000000000000001557601211146647700212630ustar00rootroot00000000000000PNG  IHDR#70bKGD pHYs/ IDATxohP`d<&RC%VH)D"Ԧ/Z7jϋQr }OJ)r R1Yp ZC7`sF,X07xan@ggvgIʺ.0;;3}}n5PEQEQEQE Sߟ@x /o((((jwwɺ((((jZckEQEQEQEQ;\2U(((?LŬ((((jGkZ%Q*Q8bkwpDNJ>`k(?ryd)(((j:w„m=߲,\6jX`2a\|et!|ld]Զzp *[a6.p5T@4>`gEQEQEQoӯOʭ;H6zNFA!O1gQxDX[ŵnْȏe >(((j_*J(ԉ)oF?h9$|@ ^%u0D[D|\Ei]zQEQEQEQEQۓa=uݞvSdD.^j`ƕ?@kd7J,\b\v֣b;(Qc>/mLl.̄EQEQEQl6\ׅa0 #N&pokpɂ oM_PlɗL\V^PEQEQEQKV=(!붛ni3 1A@3{6*_X܇h3֫Ncb! ΜrRd <%qM3m\1*>O(((jH*QO8zH<=!vBASJAGՍupF`F/+uӯ92؟9n@Uoգ|KQEQEQEQRs"9)ѫVF 9f9#aP 1+ +ha|4h+}V"*kXAM* LdaM 3p pc&^c+g EQEQEQLʃn614ލm2?O5r,YD._^S'V^G51g;z]\X5{v0#pu̞8s'IkU=)(((jʅa ok(harVV!@ሉꆍ30Tُm5K}FkWqk7neYW- EQEQEQ_ԏNm2y,!#j{(-WmcLS0t [-SEQEQEQ6eYʷ˘yյUX#Fez}'ܨXpuVK4&>Q04i0Tƽ*(((ڦΝ0a۽!Zk:>AQEQEQEQ55'#CBQEQEQEQN*q5((JH;xOٲe;1؏-~H Ә~4m(((*!4|<11oqX] f0 ((E"'Rd3fx1T˭EQEQAAet1A>+_c} Qv5 Px(Apz?!/yK^򒗼%/y$RO3f>[z^87G2S]x{)yK^򒗼%/y;xjקnFGt`k>|1c]bxP?Qxit8~h8ȏ%/yK^򒗼%y @>`:e{iyM=íuĂa,ψ{K"/yK^򒗼%/y<ӠZ>? ((ƌ˷W^SW&>q Ը&m1޽Wo/@{s7%M'Cq5!rڞ /yK^򒗼%/yʫ"ýxhS@@M3!^ NLwrΦl6.t݄Q.` _mzFdeW> }SHiK^򒗼%/yKAɧQ@.cƌ3㞮u302-{D~`<#3+@߹w$9$wÏ1 5~v .%/yK^򒗼q ^CӰ| pe [>PJ_=\SǷSĽ6ZA|`GN}!pPgr}]!ru֧=ԯ 3b`oZx6vco̓xgߜOp@tl+=%/yK^򒗼St߮~:txe ~*#JS{cNʈ 2bHJR7qp 8o8~d2Nuj>c78zuّy,ìHƍ: :%/yK^wj{F$jaIOٲ-Z{MRpR뮔c:T]B'|0 |_p׀01&4Mz)= ' TLTQ E3SziTF`8v"5+ \B:dm=͝Oﯥ0IT [wٷp%(PJ.Ju]L+ZK^򒗼%/yɻGyD-ޢψuz1Y+S4C)ј!1t97(Pj%+A%DJPJ> 4A5v898Z(gP re*H)pC8y) ջ*ΪD3&E'T^ yϾ=yȰCv9 _UZ4x򒗼%/yK^=#?ٲ-ZBAUXa͠B!|B rη6RP2HZyDAJiZA_X`qau>+#+ 6􀰬]lE~xpG_/3gmzWTǗ%/yK^򒗼#vo}pPdƌŸ<# xd^.HyF0R9p2XĘjAESs`:n"%JC]Ʊ?DWu 4 zFV!UEMt`mgUFXD7^yTS*Htvy3Qxs1@(%/yK^wn3"3x'=# d`9@ +""וU B+k9~G ҁWWp6kRBn X/U!OԜ8)Ta5{& .CC;υ'(! #;UԖ7@]|| ^ωv%/yK^򒗼{[Hc6i`q8ڏBiC W6Y-xQC/7x  bTp(aeDyΦÞ`Lu~>d0J;E7ۘDvlJ8";aCBr"Ƹ myU j\=#x<{Y.j~ X; -)C3’Ѐ󱓊VuH%/yK^wn3"-c7Aψp;B ^?9fqȄȁaCCl] P WJDDgӆR ΦPʃx {F<ە;1)gv#|@^򒗼%/yK^nw+rZTO3f(+ ycJ&0|c9U r˲`0‘4MT?s[^1~%/yK^򒗼%vx߮|j`̘=#3t DFNʈb̫TDhjAomk{$%/yK^򒗼[MoOgoo^Θ1n~jo?FJψZgD;U[.}ɦq푗%/yK^򒗼{|Ϙ11qD_v;sٳ 3B)/l~v2c4RwnjVqI$/yK^򒗼%/yKƌG3@<_ׂB22bSP~Teチm%/yK^򒗼$/=#3qJ 8Zzu3?=#ztފ=򒗼%/yK^w`x=#d|Hz2fg[ɉ1&NLAˉTګG[^Hψ>#X%/yK^򒗼[gcƣIIxh|o|+~)V~דQ^䉩`yޅԉnR3{[dI$/yK^򒗼%/yʛi|{rƌ\S:VFQ+l.fW.f>L:&*oUrʿ_̏J(ZIyg2gDg%/yK^򒗼gc{3BA`nz"J˺ 8~rp1ub&g$ܺ~g2"GX%/yK^򒗼%y^B6z~k|2Ξ?&~>&'Y_ \^?=#Hf'j҅vbF!%/yK^򒗼%0x=#3Y%DNe*񟖂w},˛k޿zʈyFUBW魏4q2#?w3 wrV?~;ڍa;sbT~/z\x^ۛ6opƌH{FtMRᅞ~aD3+ψZݶgD4fLN?%/yK^򒗼%x0{FT~`d]3:3"[pVinyK^򒗼%/y;H^zF0f<ڞ]ǥwb5uzFHޤJ+vK~K^򒗼%/yKA;O3aψ0!LUψs%Q#/yK^򒗼%/yɛi|{rƌ\SCs +~nңv?j%/yK^򒗼% y=#3gg=We$%/yK^wfo3Ύ}Mb"`d=# ayF躁Nc+qkNyK^򒗼%/y;H^zF0f<oLA!&PaGy7 u躁h}έyh8p$2dֽu .z~Gyw߭~v|ŵ =[>G,T]ۛg hY3#5ե2b)hϦVB<#j73҅Rщ [Xu%/yK^򒗼$oc|{36ψkMF۩oʃBtBK^򒗼%/yKޝ߮ROq[ 8cVnEQϰgj`=#F7$K^򒗼%/yKޡ31H>ww{-iugD줬#&PJS 5ǁٱ/yK^򒗼%/yK~x'g^P3XÞP:^r[WB[^7M.썝L%/yK^򒗼gc{3"Sb.AK7R<@ɈL[s(TP Yw <C#֎%/yK^򒗼gc{3Bl4^1ߘ^,Pz-e'ZM<&t[ЋogDɈ[s(+|gWU!?hB\l7€1C7 7`tG^򒗼%/yK^nψU=xtc;>0 _®ײfrw"r@<>nBJ!ІA^򒗼%/yK^7k|;|Oqь3ΌʈNTĽrwfOAJտg7|roL㵿-!iR~y#Ʊa =ÞqfpXT(ƙd(Ti0l(ao[G^򒗼%/yK^{ 57zeX.Rn~t| $7[a4y~z IDATgDɈ(3lx PDh._A%uҺh<|F %/yK^򒗼ӯOai$;>98tlٶkϾ=*X)v!5}gQ9O|mgD0 f$UL=#f>_ uDng-̰aô,G,Tﭣpe̞ǁ dG cLGq3G^򒗼%/yK^{=!~&[25|6zFhvH^,į-h5o=#KFDa)]Ț*zoϗ|[SǍU~|vn^h򒗼%/yK^w`v+#ZUQ=#Z4]i$YؐAۆy8ӲJ> W!Tݙ/%/yK^򒗼 /+#زňWF(Ѫ+#t l40yb/WQ1f~8U%yXyΦ bى/%/yK^򒗼 /+#زŞ0Mkt3ϰgj<# S)17lT\hP0a+@NA?30YG,ML)yt2 򒗼%/yK^w(`{3bEψWF!4c&qp>hW۳qJNj@p rSBzB4!7քI?򒗼%/yK^w`{3b))ZyW_1gv+#UPB's^x\Ɇ]~kB _U!.<C#VyK^򒗼%/y; ^VFegDTE7n^ߕ*o͡t_U!@ m,uk { ! :qr%/yK^򒗼%/ylg<#F&}3bP(+b߭"#V#c +7LT*pkРt!%/yK^򒗼%xY-gVFd~}ujϮm41.z{VGK%H)|yA1%/yK^򒗼%VyY-gDҫ!p׃{ gJ|ٞ]dLc*w!rJ/pL|@3Kѩ%`C7!Bh%/yK^򒗼%PyY-g?1Lv+k8Z(ƙi/jQ|b) &$O\;!rAR2jǬ{dDF>R!8hTHm'²F/דvWFg[s(TP Yw,0tB`zQ*(9/gaS~`6ӉK^򒗼%/yKޡ?-%5u y.x%]i0!p C_WqHGgDҫ!:wZ;w߮{FL5ұ"wV`U&1@uk { ! :q#VlQc/$/yK^򒗼%/yۯgD_T"bOno볍k^; B4s%ܰ2DψtdzF;Qx(JNJXw+8z(|ބ&*U5BhuRK^򒗼%/yKAVܻgO$fH=Qo?4ub;{M#BD'>y 8 Ok_2_JMP7k :'~8=ØM#ց>tw {Aj!Z^Md׺|J gDibn]b2 J^*tGC&WBUCh3Ə%/yK^򒗼.0чgDhdG$\d)0Dl[O?`N90U9䰪Ⱥ@IƸ֎韜oᓅ8 Lv3%Lntޛh7kFY6GMiiO7)gyȄ>frw"r*Ӈ?y8{Ä.y#(S)kyK^򒗼%/y;ޭxFdG$dv4u%ʷ`? N)fҧ (TS0Sۗ' yT1?? ĝh[G=^bjv^[X|ga /O`9mkk~OklhB` 7ZtS'0yYڏ&kу%ᚮvN{F4Ϛa:DNec<#yPV%?QC l#cyK^򒗼%/y;n۳ħfyFğK3~xc `ZS(^BJFg /Bް#/.#C&&O~dcy&=! eL񼾵MM  L@$49O?ĚkdT<#&g}yFfqîT+qf[?UI7s;oGYcK^򒗼%/yKA&ǷoR5U@:ʟ/WYU~|vn^h򒗼%/yK^w%j(8*ѱRyb!|9̝_lYtuE:jM6:5tLޛᏖ/]ŏ~%=v*(C"Mp ޽/˨~UiAwHk5#1CJ:ba4ʷntW\mxFxxzx ܯVɈ{F,~3¶}yF>+#F=#Hfk6tPxǶaôMT0R݃R@ZjB0ݼ%/yK^򒗼%vy+ ?8@˗|i̝_E̝_E *#߉x:*r'kC~M|{r31BNһVSZearbK#&̼/011%Ⱥ Q . /[S|{%02"N(w,{?Y[C 0M ψQ?o}ψ+#t l40yb/WQ1f~8U%yXyΦl RYcK^򒗼%/yKA&Ƿ2<#Z_(F䔂qUZ;[VD,]=u=ȉYLR yDGvXj߬קaZygANcE^*$L3Uf6/W&\)a2Q:>3,(/b+u؊ *[-8H55hψNNfׂP^;Z7џghyn-ψ8;aT bL" op=74LX r"d`6!D0ujۗL^򒗼%/yK^wQJ5UFu_ + 半39=%Dt44x/_= /D/@wWORv򪇎SsP`z}:=T 䖪p(akA~܄ ɋyd8V3"+a?({F|f֌vl㐎~=#Z#u`=#rj `0MR_NJ TW20֋ ؅a%/yK^򒗼;; 30A/2k@`wG }#D Dn뗯NgTOJ)TBaRt0y*8#V5% ~ e$OMM)LĉDV#v3ʈFyNPB's^xG_.M5BAկuP3C! 6G^򒗼%/yK^nw'͞A zyghdJܛ;*̝_J_kꙠ_kE/?|nTϞRH]^=$8|SEJy}OЄ̎Bx^c1n $zP@`bnT995#9F*l[R%ߚCX;+CAژ ިBƸ}܀t[ˤK^򒗼%/yK3" r [Hz:$+.WOw| ѯgDCrb"ʼnr4u{ia{no\BD"*|,fh>UA~boCRqoԉlNٗgDxLVl>o8v#Q .xF RtջkNJؕ(c +7LT*pkРFP~D^򒗼%/yK^w(;8@{ψdEYgm?ޖwG͞c{D;U0EmNRt=HMlUDf~8ӌs6& JDuQ>cJ*1uYH@30i! `j8;1(&&%Vo/pBx?GC&WBU%/yK^򒗼%>KB(<lpXF3]g_~7yV$ݶoexFDh^KMk W+QoY^$%/yK^򒗼[ga'n܇K]׿rrNcg@m?%~vO0<#.m8)O$9Lյ2ק%Ar*&O\thOpflTj3/>_etm:d&ricM ȨxF5i3F_Oiew:o]9o.v`<#a 8WP*~L&_9 < }?cK^򒗼%/yK>xkX|oPgD% `ܸ]zu*0*_)a(ɱCyZqP 渉ʗ-ek_isݳ a/ZfHV0gDF M%K2"3bO7ÞX.a;5d޽ y#>AUƄ%/yK^򒗼% yj3".s#,lT1 @*c%HBPWN q %1bޖs,XYks('3:#6x@2WF4%dF3b&!$i$gg6-%2:{3B*~W$q)]p:Dm-QOk6yK^򒗼%/y;\ޡxFAD-#7{F$:QG2U8,Gpd%66<禑GX"'%4!ߩ@Z\ES=zУZ;ȨxF c6-)rϞ7ÞUwp! `UENg~y!q)醥0I$/yK^򒗼%g.cf IDAT>N5K|{g@#q2vROn?3G QRر,n_0t𔂡0j8 ]կ|8$/Rَ:hf\#xwgϲc{7lu`Wױz 7[1E cLO4;1&%/yK^򒗼wwְzg 7?](W7R^WnaǓ(~"޿֧CRJE3޿tĻSgFK}ȏPuG:aUO +oA_WQu{9L1^̏t/p ڞfh$2^;>J3F3!Y{҅9Q| η5L:}Hp.v UW/yVK^򒗼%/yK!30֙;6tް" <6~] :ІZvlZ=\dt^qQ}t˷0M qqi8!ku>okPL"xrq.<#r oQͬf3!<#y= zk9l[2d+ p7]򒗼%/yK^w較z_j/{6H -L ]&Fa<#:I4+B;tnu8w<rA_  ?_W2Uf6π<#YȨxFȁ}yFա2bϝ7Þl:n<1ʗ(ZuȂ3xP V>0aM82ى1%/yK^򒗼ݟ+mx,~haD N1{cfzګGƝr iӖ^=ƹ_cvvowqԩ63"zhtӀ vo$~C1e]=5#{3blj֌ltDilOψ>o=#l S)17lTܰtǃiyH^򒗼%/yK;pψD/k'ѱHIL zS'̏JP~#A0\o4\˥?<ߜNd/sxGG7„),xyqgpZIt[ѡ4W𼠃Ty6츝w'AxFkxF c6~'JHq۞7&`{F25',1ƸB8tSw}%/yK^򒗼gDnXDɃgRAŀJ`_/2^R +똙.W~w~sR?C*(p0UKK8 }o+^2kg?H381W'wckmn3Bh7kF: ~<#z{[VBrO7 JdA.H@Nנ UNܯQ:^ zW~wW~xE@S?OuȌ Re?zeRIKM;g~>VZ ^,\{gEo^e3"M1kV ve4bm3":og3"S~r{$%/yK^w3h=#cw?.Iw1y|  ab(yϽ3ɉRhn nJ#1z0dc`įO>^3_yڙ_eD7% ?>aмd)`΅LxF4ͦugDY36l{ӞL<#ziY{}8Yryf$vﶟb=# 3o%/yK^򒗼=#=#g0FrTUq齳i?PykeD4MlܱlzCG:|{F͞b<#fNΦ4lMC׍m뺁±vr)E4U}XQELKIJ~"~"'-˃HdS7*t7gO2ڟniψ92u%@@۵Uu2m^m ц(_=SG$2CKWOC)v30: J̜_Lx@|t\AbvݶOA*xQ8]oyQǎx|y%/y6V<#\ gį9l\Jl 1g2V-igT%9F*1Φ|sj=yFt>:1 / -'QtGsEO%mf;e85.PC%<J0MLFM3?=יg}/aDVưk1Y 6oLpb10nn'2ψv1C/%݊gDd`dflac{?v-.Mg$<#Z8tFeD%vV3PT}]9?_k+Qa0m2I `-,}K%L:`><1u~!sys|tdhaa6odVt-]k[1Hvc(ۭm5z۟<{w+4qO%>>'c{;^FHtBG3!rmRȞMىa [ggD+o@I )k[T~S؏l[(MLjcOyF41oq"n;Ưy}?}+xDN2IWaFτSGz|;-'_4?ư0ۅq0/̀H!P*@%ˤ.Ħ .qA7}8/t]F-lpz RBh );F 0T|H}9?zgFs}_(^wvveeސܣQo@Yܸ\  gķkczB4QvdL4SӐ2<3"Ï(-Ju (-beQwDD33VD; 3UϞg:5N#f9(^ }G oxi2oe>/(^wvqlҞZUDQޮ_Gړ1hv#fҙ>;аrFqUO" L -ʞ (45l~W1ߜğkP(#3̈!pFcБ1L -vVV$pNüK}>P/KRh.gڽ" wn^}Ayc.f"^b/1ߕ:W(q\Vg_BLƼ?: gĴsbqI6QӐ$(|/303#W "`\/,TIѲ7:@@r,!NtYAdc e0sF\NFx)^x)^x)^3lK+W5Gp8n0w.E3+}F$RV&)BK5ܝ!*%Qs 'ŶW/ 6ˎLPȿ…]naVC]gHX,euL}/_BQTnBxeCh:ΈP`x)^x)^x)nvafDܙ*mUEn QWb=ke6rGX[N'{<u);ݹo?9D:pYZ>q({9WߗA6eE3XTа5(mc @-&ͱz]#UMP@8& s*}+SQ\89#x^폇_KR/KR/K/Szh89 #//i&m:SEhׯV!Co^?hCAABΝcYL;\ceFX"ɞ̈N8#*%,KfFA[ULC8&8H/  @ETmf\k8P[d卒3gDKR/KR/Ko''a=fzOa|PG *Bz[5DDAXw]4?e3 ro2 -$a|! `[_ڭw!0`Ng 1#bWBy8ŭl{X_F?TcxȊ(J_;,׃!t0v̥OfSNR/KR/KRWne7wqF-H Yp.FfH(~Qqb$z2#USKt̲HԂ تVl=Pz 7RȜ H+jD!PA6NL >Y8#^ⅢdyvHҨAI x)^x)^x{)\WVma錬+"^ޱ"\<7NeQ>޿UH6ەE[HہKYV NUZH!e]9T vTܹ<8.֖3QkQB8RYo F,^ȜAm?ǟ8P{dNe[SQKܙ >8wj5?W󘱄6+sG[Z0b,m'"DQY$Q_]+"&@D!VB4@U vB^ZCxqm4Ȑ+(/CxUi1Z2H*KqniY>6IYSiOEGpZ`kS#ܪna2#ҩLW̱eGT@7U;^4&S6hx}}Gپt>PRR/륵pF"Q[)Kl$׋؁/ sa1zs 􅕾7g0sa%VSUހsPET?Ur]pF?Z"V~횵vGf;CGםY] pFh5vNU +~_Geړmfz Oc$"[5rWɌ"R!j6"*ļ)v}ƫ(r 9 //(ۗj_j_xÀׯx4gPQYfLy\PGB3Vzs\߀卒 cP*BmQBA>66oyO]qF4ZsFs9P`2w.'*4B ե)Qh'x>=t D"Q >xBLe1=3EA='a',prFMkV(#Q@eGIi)Ec탷Ӗz;;ԾԾl_:}})^ ~pF ;gdVBlv` EoΙ*lE_=KYV3kkc'tgZّ1TMeW RK]qFs9fO%`(@-$'w(D 3 !e#- AB#@@h+3f+?"8zDF߰E( /ae@KKRoF_Toc׵:vJo׮V Z]KG]ǗoAӔVXg.>Qzs>_9ն72@s8| g UD!6;UliGw<^f+VmA|"{;92 A3#u?Z8ijگK«h J `ƣ~R5^ -(m!BS #6V:+` GSx+G5E9|3ʮ>̈+Zf3dhQE_N<o:Ʃ}}j3߽Lߨ}})^mwN8#&yo˰縑0}acFb)70sm͈;.U8006ǽUEmmԬ1}5 jW3gH{Oiכ֛ߗQ% !H0`Oa+Ѱ۵#,8GOP7Bx'* o8o1A9#Z͈*!P]qsDU "D.Q}XATJL AT㐰5YCmh=hfefr۝ios89#KAswfe3Q+`f' 5:cq֐Tx 2HԲYvDGyhS:x>!&@SPdlU*ߝA5aJ+A~X l%]ǐDM7ji[WuzQR/ o?8#LҼrF9oΙOX9 M_XgFFq~#rяN_s"θ[ҵD="u*c _V~7ִ6mT6ԜT͝(21;e(9OOW a DB @ `@NeA+ϵěIOE?P՚9x.yOHM`ARopn}c9#+]J]td6IGaX@j&Dߺ&nauzQ|R/;X )gh-8%;x>3|Q[F02^sUikwDĎ ':D{W@;-osF:T3X DwF35j_Έ?ŧ5n}83*!XD@ګcY0 ZK_{Ʒ% '3bD8#o&\02vfz~UeQjqj_jawj|x)^7 x#g1n9f@W3w_ߍ(h>n]8)l3"0g}ݜ_{ ]֥,]Qh\_"0LTFvA[[e]8@h9#-aπ0|o2 mۿ7')" rK̈VȎ(5~t*G )YcES4TPzcccLmidgPx2# 5Έ.:R[Zmj [Wqj_jwj|x)^7 x&/ 篭z>x}qw]joUܭYF֥ts 1 qcUDo7uꅣw>Gg1@h9#rwܞ ,0LD&||Շ[/̈1_;EEE[$Let7y+ z<z1R6gu[l~eF1(ugs3.Ay.:ma$GxVOaQj|h5ԾԾ#ZsG#OPKR=Έ3brFssF4 D0?{lq"Ȳ3с*w-T. HGy;W { ̜Y͸^5}j@(HҲ^,Y =0QGbHP^\ѲeP Uk^s9#'&gƎs(_JMb7lê%"x[fyܽL(wA/x)^Wxgm<-;7k?UM!JAe3U@Vܑc͜vYP{ ̌pdqf~>wgF HtΠm#|^IMldXLLVc'Rj|5ovQY9=N?|_x{<ڽ"ܶVu^bS2ʞn1vo 7S_^xWj?ՑLI#Oˎ=W~wך:ŝsFDG3vi͑1d*#c䣦O63^x-gDéYx7Tj_x)^Wxaz7Jkx]ۓOo[eW9D >9Ԅ3b?U`YʀTHùmw @3b8d5oOqq`$˾öd#3N<cvA/}R/+Xv{$¥Zq&8g9~/&5Uwݪm9߂3YP*B8#yq1s 5ٌ7ٺhu_.GOW  ΛǵzόhsFt~L_9i 3#0ڜݰƚ'n#j߃sj_jߡ۷ u ws痦>u6 [T?Pd#ahc<Z߈?ahq#52Z b=}i+ȝ$Q;;CPATe7ίq}?Έ خU`ZlQj BWF.BEiy#c5 0. w @3"9h +Of~FQq9#k,ǎb|5o3#:u}n?}} 0 <҈_GAd'Y+DWL6?y~_,YZFOP#%Q0=gpD}!㌰9?,@f~}ͦ.9 RN֙asFs;{_ o,nfèIxөsD{"ayeU~DԾԾaxuD$ZJMc۞voomgH}g3B*=Yz9\Zs, 5^pFz-s**JvD0 c+0rb12iGgD7/KR/VNxG/q gڽ" wn`rF F<ؼG[ 82vpFe.w|K2\NߝiዷK^XN1S`~8#lF`IʐȞU"G@=*&xdNe{Y@|rjl;"S/KRovDT34lF/3Zp5 udUW} ,\(\jʞ (45l~W105Ď (oj<:mgF`9#an}É7q"-e`Kwڗx)ގvD<0r3E'2̗tiGDڒK-}?}QP9#ܪ[e5 ud[}\A+a0{.ghln He9n{E@' {21p'2dF`9#auQ;j<޹YxTP~IKR/Ko9.:X.h7KMcfߥLe#,`kA? UnaVC] Dzffdh>^iWҧXgMԾ/KR/}}& Be2(}So9.: `ngm8p8AO/~~WHpF. CMíюQ@ahfY8c74A "@3DZz{%Nee pv.)?¾[l,})^x)ޑ}5.\DTl _b}UA}W#jufyMp%x[R6BP_BLƼ7z; jVhGMx:HԂ تV)(}kHBtDZ>uRd&pL@Qu[ 1ӚQQd=ΈnؚQAq}#^\aěN%;KXW.5T6 ^w>^:x)?}{o N8#,Z9?e_sIʐȞC8ʞQdp<2,ϝ˷y Dl(!Jl;Qt6ԩ۳ G=T3s|؜*!PQ2ؘLi*Bd?!5ThGXvѸ?s~1j&u -d{(8#c0̎H>ۍtTx8ľQA8DnDܽ6 ܙ,i:R]B 0S@gj_xC'JtafD_nV7V!>)N+"ZpGbk+%㺖h-wu8DwI wn gR(8#45 pe`" ٤5 G߇ BT*QU \HQF6c@F,{1 Jda}"խƇV١tT/q}?CA7WH 8k9"ve;_x)^?̝͂H}/ڷpGQRCל22Ta%0m"LBA DQ(34qGd*e D/'~D T7g g[5P\*i3`lb@D7`9D1p,2SYLObcZ`w =b1!pFtBx䆈B3F#X $T{E"ƈsFGxX4^H(|\pL7Pv*Nv1hVUdOgP~ PIQ{"e03 !$xwVчs9 OEl@Aeƣ'3Rj_xC]K.c5 DȾݪio'Zi?]yh?(4UC2UW} ,\(`&ѨꎼGyO!X/aH?;*QFf* 7lgQ97@* l--n} YٵR>s 5 .qla.9#g IDAT`>6Ng!)^ւ+HH[]12jOj1޲A]0?ųxFxOkY3MZZiʮ)囋~o5 peY֦wQ1~  !  a$"#ex#-;"YH y< )Y({2[Mafrw3(۳gDcMVc1Zs8xQ<^FCcOPe("j?nxg.,x3ت~;\x| QRo7ԾԌ(wgV!oj/J5]bBLxx 2V7gpޜL_X~s3Vo{zYU@}ٳz;KZiDQXG GȨ%;"] E82(߷dr]pF?0Daخլ{$E@ʲG4$mGM'@ŧ5HjwP. `" j$ħ"ğEjy.yOd``A%y*qn߃ʊjl;^T?lxW3Bufjnv4 gDVDb>]Byp p, ~" @ګcY0 ?4_ֿZu΃ a9$x3'S(\4V)#y#|FK;x;oLזhlkK(\#‚7b3P9#,HRفg.Q9gfH_t=XK4-{: ^iHO ZFIIlPA!+ <'R(}$"$pIfJ ,I喰s89#f4SgDfdGLVZC:Bl#A>j\'0bHCEq͑IƐ=W~wpFGxd9v7F0vi0 M.A8ʣQ{=00᝿ $qɸ%=C#g>(^Pm77=sNٕB7b3H-'V z8LB?{9 T[MFi͹ǫo?Vg\ gTtV{?jkqޓu;F maL2KvDpeF@'DZA 3g9T3 5 >q&Q%gؘ/gZ,J7y+ ޡb@6gu[l~eF1(us3a|o7)> 陂d"qG;΄s3X땧2B=2?[[{x=RA,Ծ/5OFE ^IRʠiOHZ3LٷeXsHU1Wm #pzsr՛sNM_X͹S9#8[⍤NNU"m. |&B8&hTy'OWEmEԬ\ !g[5PplKR$HiX,KH`(#q)h[ -Cke=|nNhN8%T3V=pZc32rFg OP 3Ȳ1s*Bd3kdHuTV:24l%I @UR QCdނfF`4%ηO\9T39#oƵ\TeǭJl'891 qFD9d56X}n2 W|*a[:aK:K^2'(?o{I.oG⸘;T4􉤖{~B9ikzFET E;*/b4J9qm34, -0fv4gDlת2-(b"ߥ=m,_12&Z`qFMLo|5LLf'jSd 6Gy?("@QdGo0"$& ~|q0UTۡoGhURBl+_Ǿۍl}{^3Н!#7b3txCAl6n?|j@|F~EmA?+ g~"Ȏsc<:P;* HZ18-Kn@[@%G "n CMCpmi3"J#u2g2 z]>X^fS59 4ގ^79lUpUdN1^D̝vm WC;~7JEH9s!GʠY"@&\c= f_x5ei0QߟE21 ~F];DHt1cx#g1n9f߰Ag8ᄒQ } 48%ZqRS9#Z@%`(@q@NczʹbU?t #„~)#w6 ጀ3i[{!(;7k?U$"#eNQ}ĠY; S:x>!&@SPdlULmidgPfyLqG5. jD.;̜A}M+9Έ+hA^L3<}q~Z`eF8gTԺQZ3ʱ& 옸-яΝˡDʽU Qqrsf4g+ ]kii00=Z^F9>DU]H(<: Pv{8+V"H;aod 7=7e$ǵhzs3XוJ2F¾ E27W/qFh\30=a" MAy]{TUbHO0D`U(J/@po'9ї|l OiflYff;jo;ŦƳt0] 8O #PpFM-ʊl2;"wq|t]iPX˟:14:\^?5}a7,CXvo4&bGcX3Y1k_/!R]X Qި`NC!,j]-﬍6s6x\@_(mQ-d_ KQʿ_A?[M=*n˟.!<8LJ8?:X à`XJ@I/8#܁ nFCMka>rF|QRd=[Pxp>~h8#̦~ ^m@.XūWU_LA2#gFx~/QOgKd+]B|*3`XWDݻ@3@]lJF8!fʼ jZ: ޼>i4q{Ɏְҩb<HPΛ>o !&4TPzcccȞaUL;k'ёhLe#,n.{f&7>qf4d} 7)j+h5>Ošnfyx cħ^˾ѝݬt *8,*[ȝb< CETVQ}"^jKu j[OH]Et_` uy$~|~QOE?[3 `xa򚃫Jkx]=?m[s\u-Ѿoj166ao,˚Ɖ2FUCW#NeP٬ JCPٷxG _L$1x>dG87 پs>N%M3HJXDE9lUpUdN1^D̝vm W};kΈl kƙf@)}X~oj[hp) oL2MN%H$0Lmu K4K`;hOH=-揧Gpfjn_5ApFza}LA惌W|*bE UgE?Ծ};ǼI6ϊ=CvjZM*o'D|iLd!0>0SC̙8"n}22 Do߰,7esEqﬠE!ޞsFV3$"^LeX~㬉mO0j㉆Qmsr^ߋrM?FSmj9!gaqqk% Q`\KEVpk;yο/F8#X=sd8#5a/pFMd7>pc0̎>}pxŧō6=TWڕQ]Ŵȡ/3q`'4(_P:(UzY=C۴lGO^׊VBSI̾C!L f@x/| WZWS6oexX}gѻi¦ 0";o@yEF4@CՏ#f,k +rO wv _ DE%*2W⸾gDlתr`0-(h@U.6pQ/J85g1pg[e˚ͳIَٺ+Dm}W>XnfSqi4FM*YX+vE#~Ծt/rH&H Pʃ*(;tt>P!ƻo.6STa" &Ρp>]lχjpF kv8aj9#ugaqcmmjRl#x[Gx+0]Y ZپKU0 v8ߺAn8@(`b͗<}&䷿`7HHLm.wj!}64zQK[e6%_0jakѩ}}} ?Bl"5Q)%A[uk81gLŚE?_+oM9fCx;߈kFFgپ0fFpjsF(ȿx#  쿸~c.ś ;eF9WĘʞ%:`"QhP켾gȾ?]W㾩q7;~~4%3PpFMf)7>hdaS=lͭ; ;0Ro5j[:|ZṖ0:ŠF8 +?Ρ7:>poaH&jgHgkHdw_F@vaΏpfjn_5 u1m7si;aw)ao峓Zj߀jtj2LȀc> a6 !ׯoXYUoLVCV\ }; ӾѺFž3^Έ LKg*/oQ|I .͛YomgH}`B״̈p3jZe;ILp%,s~x9da6Xxx9}0xjL̝A|*@[KHiԾ~}kӘ8>۪ncEjlVʠp<0C^YNL#Ԇ(JT zu`%o'kp7xP} >x2&~ F ]:a.d2vpC3->8|v +`PpFY Dh65QӠ3l zsg FdHl++& 순3 ?E-ۮ} U@rgXڷ:죄ڷ/x3'S(\4V)#y<}{w9;r ˟.R8va=x2G? ZM=_ߏqPoad* nfn6s{nO;!p+4j_ 5 QΈp3e,\$iѿl͝DOy+sm%q DL* IR}{mx\Rv.AK(oTqk^W3تּϯв'_ro3s1lxCyk@CߋΠoov1{.(6HswpFx+k ?_GHE_9rXd02$I gD3Ռf*3l'z xƫ0H:Qve,} (~VlNLքY/MVf7[sN6cʆ=hϊ=CvjZMtdJPv7s*,. rI^eOAIH$q;q&ۨٗNeQy<03Ә afd!xoH,ޛğE0!ߨ}{Z vsFʧ/gD n'VKߓЄ3!p+4jn_5 Έe>l7=mٸ>MM.^pٚ;fenx]K+ztÊw웝b"z}$~UdOg f`Z_}{73;V!HLpyBxF(O&Pū {*/a qoOpԾξpF-~gY W?w?#_W1hj5QӠ!\ɶL&Ӡ [s%{P;ś9{3o5b_4jC`oЗKjߎO%,S}WE9?s|x\}ohW* / RV4PCT"ӅBla뾅n>uЍ^hްʇ,v! $XL ԠB}?XFy_]ѝs}7߅KmA's{%Fh_zoj)|^AI$>@-EֿS|!>"uь,!am.H[R$4#U3tY\3@5 ҌfDm.l)s.`vnA}ЬI̙)g0jaK-?,ߵZMv) x2'z^8L~мN*B|$`@_ߓ063/`WE5K|e]thdґۿa4#m12k6B{˫Z@49f&|gFfD5#Bm{pdەM7UH~=}&_m[uwOx5*[Zs0|wkc'cW>ɿ2O?<_ fF4M,~}թkk]ERfm}œ,}C#MB@F8ݮRٌVی8gw7to Ի%|W6gΝ0;ww&pqnު{Gs鿚Ҍfmn6eSk5 ~ 펯$(ϣ|s$JnԚZ~XN_[^pb 5(3O"d&c, Ќ;l I3"ҚYMúȼ U=[u^2 f]2p[f=vL#ww)ȿ̓~EGp?(_ȖkdFY4~}g[kxa ő;AI]$_ۢ76w7to͈o kNLS+_.M}IvZ:ۼ_2-e2L#1BX9gR ~_./$^F=Vhfz4#y^2/-fAifD5#,~=VӰ*-̇\9R겡¬2["maqǷO}|wUV|(W1yjocW#˷xb #iɃI,VN|9CIA {[TDf:; adD#3uJv_z]FZ.K jTݥTRE1<&-z >zF_Hz gyK&ӮI`(&EB3^Qp<dF~ i~|/9uWYnoD.C|$^I~U/g?.~ү'0{^]+{ӿe#Jn$ u~fFh31{~l[y̞Zyo59TFB_ۢr("|ޛg]ȿ{ۿ֌P'D  ,OUzc \I`K(Zer aPQ``7c4zr;ǵ]3EH3«jW ҌhF~lS6Mi'qyQpgS+lWk5 NAg`ÿ=mP|4.޲VeGAs1"::28jUDhj=0sfDCX= z>^jRůQ 4@闲#AW3Q 0֜Ԟsn?1Ȑ|rG떎˜X{T>zaWHg 4H3"*&U+*VAP0s~/3mF9ʵfy9"|Ubw7+}dvYͽǒ:1Y'aZ~T(,_ۢȷSo.;jʗa4#,nFb 4@ȷ`Pe-L|s{ Dgf0r8]rGraAɃ7/ _|̈8gE]pe#xdEE3^5Ca6 RM4#%2ݕLǀsSH%WwaߍZs 9]}X`oSfW|}O{v?3~^AI$>7Ձg[L>~}o#_s{ED;|ɿF3‘~82#agS>'o{kީ8~'Np̴1V%YSV `h](5AHE5jۮCDH>dfHcٱ9ךAH3֌cYMú hi/͒gS+9+;4|Mp G.ƹoV`^e% |w+[x>a0IB@G1aWYca {75@d\ SP[wjHWmQQm+(ߨȿ͈Ǿ=Mέiqd#hΛSYscVXwf ~]cPj5Y'fH:J͢1dYu/ Hό& [ ~֌hF+|Y7F-fAi ͈kFQcqq6eSU'r[0?+uf0Vsߖ߼iCqq7TZ^o/oV>C|q=3d8.;%Ȳ/8#0vKQ@M%S>32V6wC.i_ZT"wЮJp0G"YkC8(8'_ovK3B}j0H[,a*{ҿxn3KK8{z-_Wg_43K7x9y|_vjF~]"`$ޝtX?M#l\f~qGZT2P[7^0n >"Xמ]0{~ڒ= pjE N"{jv[,][1`FO2o,A~IlT6pVZ"&Oc_򯾊i͈DLU82XOK%,~>e,_xiD4GI[-2aYc FVNCx^h@j8A "*w6$GH]Z3|sc9.`f(`CCW>ߋfg3Ό ͈^iF8>_%\v{c;egY9b{)”ˋ[EoaUK zg*f^Ahn?v.|SϦ f-q7nZnh^j꿇۫ [۪uo:θ㧋x)2Sz~7"וp_,1e\0㏯9 ^ {=܁6b[.!1 i-*)h|iR>~f˗&[9|I?_K_3±@ݣ ӿH쎬M!Ru#jp Vb =8 5}qpfj^MlfF ^f-2!n3C|$K 5^m"qT6 fPq.Lzuvewj{oȕρooO`lKzn!O2Y#5:^\أ{lv$ȼ4=gK#K]o &_ovC3Ќs^ cgMS9cB,_44%$ƴs9ؙ%\4_4#88~O^2FQ-p``L;(PA|U >jj8r$?3p|38_8>au .DE3Y3IьhHϔ;2hd7M)=]#ws+$#sd}lJb? PaU-E^XtY \dhַƞ+A!+&UlVEuI (,bFjv̿=~i[b/G|W-c)$[*d@G2(/`h 1Uг *L_ovC3=Bܣ?`r@@+~~z_͈VL#·fA5OcDQdVW*ќK[5Tn!{,fhQ84Jpz JC0*~i9l3xfϗ/-fAifD4#EnJoOd땮5mW65w(r{eLWB*@?U Xo]6TuUf3Un|Aoo̓_񑈅/Q<9ү'fuS[| Fjv̿= >/`{;J[oO$L7MJ;`[O`sK%꫸֌0&FԌ0k*\4i?^ՔX4n,3vfq| 7~JNDe̽X)f jc&XhBELݾcr9f׿]JlX!Қfz5 dzYjA{ +]cXMM[ݓ($̜ LaUcu[ecܤ̓6= u |6aCv̿v)aϗ+XLx{4>WC|5Oו'w{7ȿnhFވjFM3o|p/nYiF z6 E)H[5͠DDt& 5!u{i.nugT#rM@7W-kFxUAf >WǕևgPn|[c2vxW<:{տ}wTK3bz5ЪR<?sϷӷfv:xpHIDATg.uMVov-Cb8-•;H /|AS~ O4$DD" Abbqqs&Lͺ \ QьW4ӫi yK`"H5P, "D^.4竎5%ė_K|/%avE3! 'nVۋeg/\;u~ӶZM#U3b朻cռz7 oS!jSg> a*ͪoH%S͉6CfgIp0dɡ1 \ QьWЫiثl6xA"A"Ad2p ߯:f]/%ė_K|/$߮hFĜKr ^Xxmfcȼ< >\'y1aDY3kje3G4#<H>@ pُIAHbdK|/%ė_K|;ɷ;phFvvvԥvf 6n!}x2#Pam} )ZBHS TBR@}[Fyw5" (kԳM.'6VLsYPs Ȍdahep1¨Fja_ b|ձfFYV`0ETmupqg]hK|/%ė_K|;ķ+Ӹ+U]39cE̜ ?WF!>!>(UcBJ$1z8.ơ-#qlܪ@k-ݤxpd4 BT4#U3jFj#lKMWMj6u/%ė_K|/ nhF2~ٲ2,vw@3pȼ.D]5#|!oհ0#5t3@ڮ!8{UT~9CH(f=\fW *hFpp a*snV*/sC|/%ė_K|o'ukֱvk+BT!6>ի@ky&zQvNc 2dϯ\?0I6pˎU r,)mIk&qXCA^+-?ohhE\vcoc4#*-AFTRM#hiF \fbqj_K|/%ė_ЌhNЀ[%u{c[ڵ-vJsbOd{KX>{:!a6Ϗ{jF jFF88px#`LAFAS߆o~~~ɖwӌ(=j EQfc@"CYny=cvt^تf4U6T#1s4su0a)A{Cpzt#LE7T_K|/%ėfD_}©[2̈ڊhe?ëY`l3|qCojdєqFJzzJcFWX :o`ܐ 84ߣ~o͈L6\?Zk^hFxUSp7Hm G3@ @f16+k>TxkFȲ~u"r CfØ޹pC+0fFhYz6k3Md yndJL=pu4E hut,<5#dnrQ Ko!vn>ni}z[{iF$ EK F&Tf.YDm96@ ~F4#FՌ8@aZHCݩwT!ŝq֯MӢ u㸝2B3DbW13#y~5_7o[6 _}f}#gɌ: ]#Bou y0ڶ~0*`d8f[p!*z5 { 4:q€x kVa#V% ţIca[߅|C@v~Vm'8u@ a?}q mP';v:(P'!{L7_c:`ʌ0fco[).mْ c+_^k3|fyBysuGfU:22]hFc4#f4 ^jF@ mkHLY3+!?~vLk}(K 6pGpT֙f@ OApjFZ`X4#fD7mSw[3-3biX$zi͌[6lb:a5#iF4U3xF-U6TWS͏,sGsS>7k'6/& }~" ϱN@ BF3b"xjjojF< {Z3^ϯـx_I7oЌp\:\d&X!.<<'ûЌ5=Vfj^MCURM@ݠٮ'g3*ٟhu=|~ԝUr C`O@ BF39{Wz}{d^фw}Ҍ3ڎ҈6us7VNYƷ#CGD4#fxUfDStfK̽*E8GՠE f3̿FYF|hS`!@ H3@ @*hFL*i{5#"oN*&>mь` jV]ߟ}(O~5xgI[R$4#R%(WH*AiA?$f(g%\KޯM)Y+zֶ|.3 Ҍ @ z06kF fD|߷xO#xiFثf4U6T_NuMRBufH3@ @hF\; 1ahx@v q}Z3h۪fxUfxR`j: h<) @ Pb a\z"bfnV-6d9iW3BѬe  yK 4:1{ p6ٹ+A @ a4#VJ#{4iW3BUЫiثla 3 ^xhOqA @ t A5#&NMapf&dvO3B͌hf@|\C0jɘ {;iF@ ]EP`ظ[}jSۭkFzЂӶ mXS͈A @ a6W͈{'3"HEK#^0stA @ 5# ʚ`&WvDR(cImmN3"L!9?B| }wGΆziF̜;\ma)A{Cp4#@ ^"fDt$'dwoS)ғe<\f!cV)~NiF$<rGg}K|"#3BV.& Ҍ @ ziYj~}_fwR!PA|,vbG!*E:C5)ONL<8gʰ:"65iF@ EpM?iU_j~}CUqx Qk)!H3]&zAiԌA^x@fDSYAه5;{go!Fvom`T H>?xR@@ BWF3Bm7'KmhF0umE+k/00 l 2km]7 vX/cϟou"U fD-$ՐJ%;visĀ8 ֶ=1$i;hOh?vPkذٺqs䠛ǟLrعպa%i8$jOjdɒ%Kž3j4fϷ7X\PP{O5#5áQGXCcru,3-~U3ža߿^V`=fDm4(<2#r|k"!Vi{]=s9uf:~W ׅ.@c abᯋCe$&ɒ%K3_14fϻ8Ҍകt=ޱnX\1vb43KȌO7NC#VԌo,lq0#@}e<ϓ%K,Yۯg[X+{ϺjF(M# 6EfX=[~ь]W_]La^l~g#:;wGH &dɒ%\ I vӌـx_ 5]CxNJe#y lҌ]آÚԳ H?]nԊb:@4oˁ&zPfYdzF<Άp6o[`ĩ)|xzWTS|Dd{ca&yNQifRvX[_H:o`A,Y3#z6I ndr=SS~I3l2#:&&@7dY6 A&zʌ K,zFMDp#BMmjfeFtZ3̲#\vSoxj-`yoo&dɒ%^3ϨTcɵJ#"Mmjrm A}ЌhCuf=Av!(@}fdɒgԇ%grMF2kF @BzjqM|QA]Q'= KޕfKJCQ!!BTAT5iF%Kl͈.>>Ƿ߮<ĚkUC)Ȓ%a5Lgc X8!>[B:f8HOόeF%Kl̈n<>U;>AI#9)a[1RnVtM8fKY`>I1O#\2B?@ dɒgǩ#ѳjX"SE>kjOkFHa󾹳O t#Th@}fiF%Klj~FOUMζOw>eBBpfYdȌ3~4*nK~[}uV775{TdddddSi),|ߏe(&8lxg0 b  K VG*0! }# `d?"UrI,jRWSC72v@h ="#7`SA۪l¾ʳ rrUJt544"rs=ǃ]=j[YdȢoV/2)*_3. y1 ! N?Ly^x^e %6 ;;ݨ% t;~gu>ceq M ?(o]Wc~|>ˢ!4;CnN䃯< DIQ,~_w x3ձ,eki$&PUk)O0 ؗ,wV/A| AΣQ|TDYelymwFn yl?F"G#;c.rr`1[ENKSχ*ּ/Ν9<|Gqp( !e(8GI*222L_4%CET tΣiKur ݲ4=M_π_|RKq~DOD{|s栯e;f ㆛MNT *UVR¾xLɐ?.rdWG8|m .0 V%%\yVAT `cfʳT8@p1=QAu 4~?=Jv('a0tV 5qޕv}W+~[<*vEE=U_T{&j{_CV j3Ktd/cD},V )JNQCn/.A*?/:*Pl]rϳc}JCa$^}^EyK B0eoD\\bt}DTMj9k \Ԕ&!?0G$J_eI9aiF82ܻC6GLcD}YfBS~7ye}Q0CTPe5pgTm#3q tf5oҹӌ ?ąDϣ$wɖ"h8 i{@;#7CL\܂U;o{DU9\Oҙ% I!{z%n }ɢu?q1lf^Uwc< P wAFFv@}`?}3, ( ϶hnFSz~n o~ HV[ah6 '^ ÈKKP}Q|9 ?\F~jBS@@8YQ˨VY'/ n! y!94Zq_fQ{UCh'`9 ) q.'h4(`Fjv1N-x O>.f.-z"*~wU,,.  c1>laJTPu/D:K,{-MF~0 CH\WƱ".m<܁m Y{,/Xp/rt.{g z,gR'gaUL|TBtϷ;q>W,ӓT/8@A@aV&-[ybzTLxVí-ψq1>bF'܊syN?E~w""#H||gUU222n{-}#_A}_wKf C #~v&^XaP}!p\l4/7CFzdj]2,Ix <^\#{o222Zl\Lb%Wh (KReSWv+(]4܏ua ZAh6\Rexqm1a M\baa'ExbK1i{!A1ߏ"!6rǠ2t2G|م>ό%џ̸3͠YOt KI*vt2_,SKBUp}:%##;PFrJՊv(dȜiKS|s TVP{jauHJ.;{!5222222YkQ~{h߀m111\?෭7l b"&b"&b"&b!62hLLDLDLDLcG)|b"&b"&b"&R4 #&b"&b"&b"O0b"&b"&b"&R4 #&b"&b"&b"O0b"&b"&b"&KNm_b' &b"&[3w~S(» "۸k}=W4s$&br4S{H~D72eUtuݦGS'b"&2 a_B[:L^ ~ZѰaSz̦!J?M-~tD"#&b: ̙ >ul=9FfswL#/ lb^nL̿,dI%1J,0|>/~NPzRzG.ŇEU{TTS{V-VW[|XM:T]7î ~ߝu*#/I!Ч_7B Q^wc~! x< {7f:U;1Y4֭-.Py[:Rd:~%koc#ƝYp5K $p(ld{HáHwEQ@; pDttYeGlT"1:~v˗9o~z/g=ށG['9AR|@øXFoX'N7EG TC'LL8W%4fFX|7p|[-ŸB*|9RYi (>]Wks~:[-4GO8_m!t,MDb?JOJ,oLSWS-/'" R}ksNEW([@⃸r1p5>i#\<lmIkXLmr2QZ\?n[ZATXX /So ~֧#H\HhoCe*`wEvK[u!ݜ~JH^ZEQqq_^ @xŋ3Y"vih `_|1Ѱt~l'OD=c^gzsKqJ#e{vS׸Gc9q66[ )4)~ru/2H^H򤂓Ob2,?בK%NpQyZ3@Et 2PC R4|׵wn)gp1 ͸)F%ƒA`!!ְnٯhtEqXX c7;G^3+*|f̸3v:;,5 u9ǝC03b28r(Q)~o}F$"'NQU+ҙ8ҟa?VWDnܫ:bgb.u++SۆJ#]31DNjV^731B񃅁r`yR'{ck$W)?sC>sUد#r4 aqyl`e*oY>0W"_T>Y'`q`tK͈TG9?vyU\ru>ek#$ &P~ZBaY$>L`Ago1Cz2%W,tafܸru[Ij8}oǮޮӱVUf%-PϏ+~-@W, ]  +!ׯ&9U}L NsVлlngy^@).{=?1 RO~Nِ>'%NDiovQ|\DZ/K{쫉&!(wtk7\l~{Y{H_KK -Z $5_{J ĹgPRq>3.L(%e*tHs7Chs1dom!qaXod]7e>)@o v88%(z<(Vt*;Amb gPrN\wS|0~f[3_ ZkVS@\Kgs?z4tP{Ybb~C%x|b}}Y#g< ` 5 ϬWzo0f>gwөCyԔS߱H_K!Q aBa$O'%U7!QsU`'N'X:C_#Xn(0(aPé٬܇/?ŋZEL hG>&;}k)B쌸WA)bRgV3RM(7Vb`ll?_[@xT: jL^J uuK >N"q1,XE%ƒBÓ(9?Yw [<'O ET˩R`_4:d7>7#čڇk9[XbW:GHHaΝ9[*6;VQ Sw!hTo+[&3B8klϬ:FCF۾m|n &;1&qk\܆Ef £"E.vۃ5+=O#Q^A[ C!8G'&Y1p'3lqDL.JnSO&fԏz:1M ˭Auu#Oɑɜ9[i1ӸwKɬ" uuoʹGꇘ= JunG3]7{]Pw=Ꙙlʹt6N+6`RR8Rـ-ϥOꆘL#QQDLDLDL4 Q43$&b"&b"&b"OLDLDLD >111)|RDLDLDLiFLDLDL4 0YṦ2T&]ṴaESO. a6-+b-*՘ڑ]Y)3ό2=yb&f[2uNQ3-vuG,`\ 07b=1b&qh]+XgR~-Sh ^=с.t!rkec\ϣ>sb,`VRϪ1m<7yYI۰c=Omճmc$3ooͤZo]lqsR,`VRj~Jچ^f߸Vf9&#ڳazDWF: '+u+$fM%qQtDuz*]fĘSk=̌`qH zojUڶ (] IDATGƵ21M=kvIaHauldat=k'{u` ZK|!L7ҬYtq=hWEk7.=jo+9GySwojh]W}̣>fn+I8yq-;kUqjF{VSϣ~zG1ӞǷ $Ƹm f#ϲOǻUoy/Tⵗ5+RY,WQL!/Y3[?6s'@L) \[$yq-;kUqnrq=̣dkvIqوzU'Z}f0?Ob[+>9Zf21J}8#b%}̣>sRa}QuUlD_7]-|'WrY!(qi9;@n ^{Ù@ĬY·OԈ)Ӟx \:% _Gָg;1Rf؜Wi]31;8}:>xo6FĬY*#fb#A7&ӞY 5٠ e6隨be -zvamYmyN?[) Aɴ[;fCLDLDL4 L#Lwc>111)|RDLDLDLXΥzEĒ\zR_ @wk0j  cbn1w&̌ ۻ0cX]4Y̊ bY*f}P*uz`75Pl'KP3@'1?nE4cSfT3oMbf< ]kY/xn 3 0}<<|mWfAO1,f(|c5W+^WQ+73񓳘eZfltA6)m9'=nK;g1?QF1kO1,9kҐCGwX1Y̐y?cSq~ie6 ?<5 U]1%Vxs hܭܯ⦙yb'<|e6 ?<5'5s{=BN!>MHd3p[ܯ⦚D f b>`I,oqǭ;_M30];~Vl3uƄG}ظV(|'0f6QeB;~Xl3)|1ߛAO+r҃ݮܯ⦙L f b>XY̤uDTZw؎g6QevZUebvAS(J_Z6(O(}v:S"~Vl3E뜍)َic[oH)f6Qe&JF|gɇ)R9e[w`$2ٕٚ(}3ob&٘J|N`62&*|NҷʷL`>hc )|1ߛ>)RRJVE۝yX$22[owf b>XY̤u(>(MTK$fy=;-$Θ?S.}g(|%.t?wq|N`=f*|V(|'0oB/ }e>Iuu(>(MTK$f%:ˣ.fkr;CS.}ʥ?if3>ҧYhj.^#x_xL)~nW\͔޹jfV3kOy鉹W 4~4ƾkug'׽:$O)Hf@ ([L )>?HB::n}ϔK_O2қͬ'`*>\$EiT37 f {Ł4-3W?S.}g(|=fĶTz&)finNx'fu ^Qq^qf)u(>(H߲΀! I 7 f Ax<^M`nL)>җSRPIAŌ|ʇgB7Y¯Xas[S.}RKrRZ뙤P.} bVïqȣ{?OIS.}Nd0d_$*>'f9^ 3U\gƋm|Kr)y _WE _$ro2JpezRk&'s6F)0d_$ro2f+.r9nY. 's6FAeր!+}Z')K߼~1r`[zq|O _lrS.}YƀnfIY~ZʥOJVؖmk;nŸdR:gcNɥ߭)y _WU>|E[[&fsƼyq֝2ç\#AydRRw(<,'FO,t7ǭkP.} bV|2:^җ;nI뜍Q.}8+/;Ӻ [ p,37 fĕMVO _lr;+/]5:fIqq ^fʥoNAʘ '҇қhTmG-[2S.}s bVlod?u(қBbhk9QU>|̔Kߜ~14[O*?)|1ʥg7#;n_/37߰@H@GcI=4ۇ?u(қɼ]m['Hhq+^fKuʷļzgb67hŸTR:gcKKo"zaO=qǭPzPz"K\y ٰߠcJN 2abY/wT^zSADϒV2[} ꔧY٠ߠcI뜍Q.}8+/-w*^fk|"KNk ٰߠc$I뜍Q.}g79Y@kmq+^fT^8kQA3ǔI29\pV^z;KyqyMTzRz"K\ 2ߠc$I뜍Q.}g79;&wVao3^fցҫSZgb67h2IfR:gcK;VMTzRZ"KNk ̤u(yVlq32["YoL _lr難3cr^gl{b&*|V)|=WZ~LfR:gcN̥ϸ<ΝOs|{7 E4Z^;a.w: _/e>|WZV7d&s6\N|'D[ /e>xf^fցr+gd :QB?mt[~LfR:gcN̥{{[9{NʸNf6SeB ukAGK_چV(I2;u`.}'[kntqŸf6QeB; wd=;0) u9/)!gCr_-{?턙Gf&ۯM/zؽ'<,{Oxt6eN1%Ngf2OYWNSN̥{˻vO('6ø!*z"ây*V(|'0\g 2_ʼnhhڎP\?9FJO+2ٕ B.}GֳE]ݮ )Ge&=qof`N.>.d.Jo%uQf˅a]Ļ٪~C*GdU.}5>|NugD$3mjìx 8~M!qa4f%>|0[oubVKAŌ|ݝ Éy2K_VP.}}vɥ8(d73\ɕމI*R6T+O3sۅ o~C_. +g} rYe\&+|]Wޯ/i 8~cJ]PqvaoͅaU*U6ʥoQiU.}5 Қ"ʥˇo%*.z\J;Vճ΢\ZW(M4J_ODuGDOq^zʥ?Yf؊وY_!-9nZfrʥ/7zmq?)JAA.q ̸̥x78]PqɥЛ f;WQ.}2x(~5 DlOYĻy¬=z\@d\j\i㞻`uK|4(skx؇a1r0kFK7yG㪄a ]Pqvao˅a {Ú~C*S43ֈ~?,3;[RxZKkKQp(|0d6R=xi9 e6uF22h&*|"*M̥5_\7%/v9 ]PqV2o< k lf2O׺oȻ^#V 3lAhq 432d6 fsZo,,۵"~e)3uJH3s5{fK@SlthpB+OvRE*f8+7Z(?qOʖ3St+G)2cA̅=uWj}DZ#s1׻r'_ե83ƍ(B pw/_o`wwpdVl\vcV/dmlfDž}ӇO`_3)IFTZֈw+s'ǐ<9̿3!{(%77Af} "Qbpi\6a>7YYW_g\+f#{ VQWj}DZ#ޕtEzK2י%u$/ة(!Yv3kjrv~3HyŬDۅ g%Q13d6"˦3) FTU>a&#umCZZK3հt$劘ݬG-q5s(|0d6 f?&gUL >|w2kxTZ?\WkH?\~Z33e;ŕC/2+Qva6CYɬi obfp`uMc)JWj5*h6p;w?wEELfAh w7ݼҷ *.#Y 8ʥO>|3¯x33EqAh 75/9 |0LgcO*'[`kDžRif.}.yը80&f̊(>PZzG!y!ϬGE1qs[Pc6CWeU)OSs\(/gf=Ĭ- lŹ S@ WP1WCq {Ϫ8y"'b~CY!Y_\ykHZfϬ?#ov9=Vřl(|M&l٨HlbVQZ6x;Ea\Cl ݧ LU˫ߩJ R]<97/ RY|TDxD_.j?l[\ yqwP*WT)|3{; cV5m˛*Jf"YeFU G΃?0~chSQ.!URUH$QxT|Ƹ;"׉,w]Қjfzca  ]. ;D/홝CVkRRe4 d6jgQJmy6˥5Lf"5֤; }#_~3e9*|a̭,V?^EYUُBa㎫a~}/Hia1%dne)|3Y/xw2 7 Lfcw@kږ7f3TFiv̸Qo`fB6yW.3n,_Hq(>)d2 _7y$;nVh7DK9E*z6hgQJ`BɬmoQCYm?Gb^%x<}W֭,"ˆ_B7{V%&PjwQ9\&(7V3}MzW#j -Q l**UF,0Y_V 0k[62kiFz`͙?kif2=-Ỹ{Y· 5ltA6) u9/)!gC)on·{QE> %k g1$6eN11,I<*) ;g֋` !}.T:]&1b6S;~Xl3u(IDAT5_͚X#4g111)|RDLDLDLiFLDLDLD faDLDLDLiFLDLDLD faDLDLDLifHLDLDLD H111W4P٭`*»^222222+lcj/kƒs A~6QBf>Yaϲ^cМ%gu~V} _w^4I:<gϥ31lˏ_}7 dddddSdz{c93]/4OQ|ozF2'##̈G}o222e0?sK~>c#gBlV 4[\| o222&'5~xI({]mHȔY^oU0\OjUoI_|o- !##f9zUS7ߝQ> >7^ x q_dddj`Ÿ1ט,_}#Kdddj@SdddpYN*aA=~yddZwHTKVdddj> W?my#cghqR [s&##So?ǿOǒ,|9o222mcQfc]Շ+0RdddddN3}V} GhXB!_"oYzRjobCddddddV»IyjT}{ЯC(]FhDzh5=%#####3 x,?r_Š2222222gY!i,ۃȜiS|{o志z/DAFFFFFvu_j/ݗ.S0k?m(nuIENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/MixerFXSelect.png000066400000000000000000000650101211146647700224070ustar00rootroot00000000000000PNG  IHDR 6 pHYs/ IDATxhd T i) &l t^hJ/P Wtks  nQPa%ni ^.ɂ#(NnaB11M4j<BH3gspAA}HfB-N AA l^n AA#9E_wK G#LQe&g *.vDt^Iql^/ uAds;.+7eAEX *X+dm30ڶz%: {|1ұdNq*@ e,kj`+l7Ad1TxlIo KlwJ}j1|4 W!{ H LmI'zyЖ _GUX{ʛVE?:AAvUawDtl. XEM"VԓpGS&0mE/.̪iS4t͸D'f4PAHZjFUPONfӳ0X)$P!~=t;*wzb"ֲkQ[GuϹd;=Ps qW>Q) >W5Ic(B*iZZLdI}g-hoq2F4RnlT=FfIVP=o4-ol'K9ꢩ.?p{{Z>i$P} @^SӳI߅ABBNϙ VSI(X΢p$)!F`:hoNs[>d`T@hi  'c*E|^  א%*>2gWeNDM*P?x pR>>e;)i2JSKeUmto[f&l_jVV-|K+@VVpvCyX-o:)i,v!jdE }ht|H*6նhKFf>_2ĦU(b|js'5#GoÛIMr|H ]SY55=|5"oGw@W@XS@:&? PdzUq1ui91]\G_ҴY*BM(&s *`bN8`<K^-PI5oRcexZml-of߈ N4Uo6^ut`fhMî7(Il"\&sy-oC2P뗍6XBGnbMGvQ;=%lo1؆`lgű._z:N5̍UB;'" Pog Ө+BQ;)0 k˴]dyVՓzr|3Q4#`jMxv*u֢:׊okl%Y.[^|\@2]u0`o>i^sDmwCOFM&х\ mNH3TR"\SIZUB 4M3ǒfYkJz: 21 ϻrtU({!ȶ)n2| >gjN_X̯Zdſe^6EuP d}}{Skg/uk jYx6nҏs2VJ?!.U:QKݾX$Sԍ9 lq/tvԜRsl"%t֊[aĭi⪥U_5 )]|'Q &K!GY" pGYpPg 4m3T#ȧB5N \޴V8iZjǐN4YE|BQ^X2799N9W `I}/:-Rrv23[b/ ADFӖQNN<0Qã{efw/jdpM3%8 UK=o#:9{|4IlaTAOFFqBpGY` 'y ,o6s46GGO7obY㸦ieK>RHΉB nac5.+|+lYVѵWz=\+0Lc;IokŢiZVv#_nVy>s߆سGD aeby24ZxL)T%v֢?~-j~x׷ǷX}5^ ,5q+uc1r7۷.wɉ E1&g O=LJpu!Od2/]f{#_-+Ϯ?mx y= /.a葻}It{XO#?oPxۦdo<)Xp(nFmb=ݞɉ|.,fʏPЮ\ vvGV ΰvaeF)Wk$G*9ز|羥g4eXBC)Dz[?M.(?[4}I_sG|^Xpe_-B!#v劑b/YZQg[, nd&[aZ9}I_5mfNƲAӴXz#41C{l.R^O'"iX5< +Ic%%FVJ*]K5v#OT.Ѷ -j _54r싡D>?g{yWóFb̟k4ȁn^iZ8LLMsYOnɷ[[ŗOϥBnSOi0ůdj2"H&J[EB~(/}^邔ZsgωD<2lbT֜9@Vɿ[>/X&gqa\.dYFyYW:x#J7˰qT)InBn!p-0pm^r6VWu^>0xcpP= KʳKϽFm&g[6 vn+Kc<̅ng@Qi ڢ|]. _mI/驩1şKLmQKMb6Ao7rwI.*]JӍtѩmb 2ho Mkh 7!ĮHBj* ]nOyx:K[t^gXsocVɄ,VjU]{5jM-XdamٹlLՀ0I $&9퍖}Y}Rr[ʦ])]΢ىA築5QvTw*:pECq|2c]SjJ)tƲ.H4MZE]%Bs䋤XKLզb郒;צ n!"uز]n0)"jyjlʳ{Ͻ=ob %]M7kIYe&=:-4&?IoW:'EFNmւ@2 -Ee*[9mVf[!]Yk׺Oe((]|,H. e6?m܂xazIW3`mF6AR)u^2H[Ba5 5Fc]eu׺`u߲J$\1 (r/HQfu^ =yKf %'QZ gܗOmKgqFVk62Zb,ʌ2a o8=&R>hʏ:^jQĴIyʹNJ^ϱ%tV^H m':}[ۅ|D|Z1}KCAEeZzv.;Sձc42חl(uBip-%E[·gqoۗ.qƀ=dwt{ٴGEϓP-+ST6wB&iFcXgq_{1 OR+җDS:'aoiN'^$C?ng;IMHKzhYr. ҙtNxo:lG!~4r7-j+55r~Z؍|D|)vRBiECm= ʌb[2] GEڜmPV\o ؓXOwJMbOb!|+zzSɏd_O$9RؓS;5RACcJ@,t{* vGBE6g[V{ƛzD:6gH؞ιEF,[h-$ʇKu r7[ Cm0`,noHڿ_;rutAAP# Af'U>D3!:0XnXݧXH̯X_cdHtau9q'*>/>lwuKS;{][a/ûZcdH"l[28\-xrùv @ADGy~Źe/ݸU[V2^ҳi p5Pڰ jH [sA꼊倠DG8 |^tʯwƾ}q#B=버zWX2+0]苌x\ˣΫ[ rM,zz=+ii:;;E-\65r#%jo4;g|(?ɉõQ·FB2أ ̆ tP\"iyC[2xí/𝰾W8FBŹ]"EQeJpSi L#R{=%a+Nd$U \(өwQ;ɩ2)$sqp(VB~דswkH׉i-_[<Pi%|Q71b)9վVϨVo+єyn7]mfƴԜV-!䬪.Wls0PqsY-JÊw>Τ;y{ H˰+Up %S1ڿ o77֊eeΤ{<=퇦X<%xHM$ik)9{XܮH~68_B'_$st&M'S-Z98p]GJ礒8/C!=,OrIN뫖OrQZ&'Rk! ):yR6 cOeOCyxأǞauH}X뱽U7gV*]H7-3e^E'g{Nl~țV2C+-J7M+Yf(o霖7!O&PS7LJeT-oډ24DJ1L0|لFB[PfK>nɦ~]' DYʪ:^ܸ)XSy,$a,_g_f2q$._t_#l,埿ّFBN \ to*|'~>o nmbfloz-ˉUޒ[_O{g[xs*[XIݭ VH@{?_DdH@{}M`){3@~ٰpÇGf(5,֊eO0N7҉8!K t#[nY֊XPa6wǝlE-5W轨Փ_S_f\3Ae&-?wFHsRy?_g_fb֡|}>7rVUE [Zbȷk wZմ|:'@~ŖmmCJ4xR6vA*c@"c=Y*; t \3WfXC0Lch:J(05'z|wJ:]U]gڠ-$'}o:Mowev!5Nh X-ڲ6cj3,@_6.X+8*MLڲ |34dѩ/1TwtC]j@DǟdP07ȽH,KgbL˲RS),ylZL&mP/z&=U:6ZɃNyF#_k&J4l8}Ӳ@<ɦ_,EK<׬8y-RSA;7eC]4]< i'9q&R+&oǰZ'? l5 Z>(.|}>}IgXB;NѲ Jm99G IDATI_\ FB礒*g.( rVΤ<onMJNAd˖6fZ8lW}AuKrqi"Ϫs@U>>YF7D.d$<_?ڲU],UE_PJ]m}nYPUE'ζ@- og` M(B}}wI\Ob)4Sө3yz.(qd"5{0\+'vC{Q(X(ʹڅT*"{N(d8Oie`V+,Pt6>]+U(R~;QS~@\*EV{ ZTrwFŮSY)j&H1OwOUcF\{>\ɵcBy!PVo pҰzP }Fr1BG6!>|+U}_|UBQty{d=K $i M#휏nXP;NP .J/^I\מ! (/T#6GA"qs+3g<! 5-S>1I;*-t#}ڎ0cܱkYBPGGAj)?+tIR )3?&%jB#!,+ItܛA&ʌ$g@~,GE\NG7B7Cv!_LfAT ]v$q6,Kp܂besYWkc ٗH ,%VaEFeXȽH"a͐0ʴBQy3m-4=< jFp(JBB7C{HAOL  {Ƌ|t#]Ƚ!RH=5$v;R |+G\;E|o]VVo>*+~흖'Xc=IϦ<H%sٜdW  gZ-W70A6o@y @9w6C{5eF7Ɵ]NiZERQv&68t2؃ ^IƱ׃# A}C-V>k-Y@h': m 1=io4 rJemT/QA[b-}6A0 ymb k=Vmݽ }TeY^tN܍lۢw|@XP6?ʞ`woohw,x#h. N!LΤ !.(4=>[0IX*3:NNL^vvbysD+VUxSUnOh$|gӺGERS)W4y#TЭPv.ˆn7wwéG&'9L#gq}IOϦt{7\VW{k.1p=(ڢ?'x;\V}hw?''=M^CZpթ eY=Hx3ݰJ[X=$ M[ؓXi,? B7eQ4=r//s R.t3DY/- Ydm)R{fWu[(՘|>_WW1*۰/?񛺯أP 0֭v@^DȽHuaҳiF:tm^kƿ eFhp(t#m<{YBHATu&*BHnĎeVIM޾~:tA5}K*t3xwDAPG_=–|9yکђ/.k:?|' Rijk6>. /m֡.}^ @6ڀ _ve^hk7;s?>22B"KC \ʗp@Wߞ5=m'ZLڞ>j8AOGD(?+3Ji%|'l+qTnufwzyf2ބc{  ݚ784)Ry t2 Pi䳴Y޽hP :/3CAOmdE-DǨkF\ =|ֶسXY_XD2Lvț[^X<ڡAu/[,ibJl!cǪC؃rt~P(Y4!"' ::  (A:4M4S(2Ls$OwsAAAA 'cXŵr4M,Tꑙ}v1Kȏee;&RUmǢFa#lFh$$$%RWF:/{.I)F6x(ݧz^.Hʌ1~BS~\#1oAx{NϦ?'c$7Z2(_`ި}=r/d"5LN}fU4EXw<|֙quuu(A6ö'_$sKGmayУߏF(0-: rʏ3d~d~uuug~~= HHp ʌ"v?8%+eZIMRS))VHI{sOg׻/DHH(aFbqTuH$ IF ҙao_8MGE#]\ݧnfnx!g# l\f(5/g6P~eUl<-*~TVroC7Cb(u!ޯ 68:G>_I\ WJR}}=}70A]UJS>F:(+? w%~);i;✔@ v6{ ˲u_յlK>OR GheEm^~?A,LBnTU%#r{Ҁ:!d=ǵpK@NeXeV Vj z޲蟁D2!vI}go9y?}&R ğƅNa!`۠j8@fH~(?;z垮i;S_)a7B !bȲlz6M):vAIکov/RbOb\+%u]~*+ k2YNo[+da*|}>}IgXBcl˰5RGPGyr\']%%5")$;v:O9ϊ/E-pZҏ4kٽp-ʌ_ʏ}4,}8O9#D1*>5Rk+b[:Љ^wXr"H&(QpI]t{eSQ!pNP0r7Ua^O7XoL־GeZt{ rxqKϫy?fz.8-<d@=fN ÔB2h|xu|[Nֽ2vl 708Ը}(@ƀ :P>S*X= E-{ϵpv/gq+_ӏ ށK9ֆ/0}cbHe=/|{)@n8tٻDF޾~[=wT{6_ٹ8g>ǽ8`%n {F9:: 0 ?{Z9̟X,~?FOh.U!4Mcyݞ4Et^2LU.PZP GGG*~Ŋ {PX}F+q9] ^I޸4{N%lV8~,K?Uܮ*SJ? !Q ATQGw@>4` >x#K\ a !ӈN5P=jdF&k^l=3\3=>˪T8bbofәf?ƙqm'l胨!x{<Orxut'G3n`.V%=`#HmjnB"";]{ @iT#C<a#::9  ^WWg7N:zսb ar0ut[oF8A%5P|p #uϬ^ u􃠣A%/ʼeTZAP~tt#D::ۅVwiu0ne߻Ky 6K=3[MOg2?Xtټ+Hy=`Y2(tS$XK?ٹ2ੲNG;w#GrbX,{0f_1cx,L,\sc{~~o >w֧L+: He3c`25 ~qMa_V~,GG%k#aOoQzp9/_H&e⦆:: Io"TR|^yʩ-j\NMJ09TPfeZ DED2HM&' r7Rtm~,B+訣#rpmHO$+U{y_r-m1a<~?*Kߏ@淃9eY%:="v:=pm  hr]WWWשuNVRST `ݗb:=kIo?'  ~?'xu^'x{gqG 3M5RΤ xl4oֲw@jp@eS0pQ$?b RӃCAs;EYM~,3iPȾ ԅ|>?z? i \2cAz!j7\y G bum.Dzo=SyʉA!DU{ c YG)v"vGnw2MhmFDߎZNA4j JT_~a6OCAP+]~,C7u]G DO:EA'x gi7jw4}H@T˲[:Y+VZ=ʲGat=: nz''&OZ;aX%IW/};ϋݢ'm4MR/JGȣ:: #vɉdՉCXʌ"tWZ2'|76;Nz^OM"w#i7p_cx>: ,9$'>=_- V>B nkMc롏<ǞjˤR353D*r7q 'a-K`BQ [P ˓(+6_'^$Bn.HC[a%Bngodo k}t&Mm'ai(JNxءIA3P8 Lx{G[RD2aJ܍ޥs}а{ V 퍦(UN4pm 5hᚚ:: \1]ܓ/u&w17+8AS4@a 1)$?wz_}8: 4O'5RU4Ď-Ρ ֺ0VهR^߇:BH; D:z(vxx1OBB'y(_Τ|>"ZyzUt&qR؋՞SGWՁ^ 1MS~,#p͜HϦ%=r/| jA8 8m: i k~퍦ΫE}jwD:eYs-MX _@N8HգG']ڜmTIӻі4p˰ur@j"eXB v|+|R:{"=&` #?_;y>;I nղPkhfYQ_1rhKDz颏ЮvWj"e_meYE|(QGGxl*juG}FBO2]"EQeRȗIڢ=܍yFPn=K* t:Ogq`8P{!.hz6l? k[V{{ H˰+Up <̯Ct1r/dBp ٹ7&r7R~zx$.`):c*Q!: IQf(g uC\6Io n+V0RFmJ IDAT/f~˔r%qtA/O :* ' fqeF\341ʴʴJRz9JB >kŪbJqdUǞ#a,N)j IK%: ;Unwn^Sz._\֚42>WpxFN +maR$K PQ=4]U{; W脐{cR>[.r/bτ8Э-W;aaY*Xf[fGm-,ko ?CASX 1 cyӗt%/z:P\ T2l."ݲ,%qϵp[aP_wBCna]z?GGE-=(SIEѼuek-,#Au?]&YIp Q(xqS=c!DFVy0 `6'&viRo4 |68:}_+3XV1LAAq:;|'f968܍/<>"ߦ87M Asru_KX!APG::::qw&@hNH|J O=Gh$2?uyv.C::>-d|_}?(Bnahj:%t Uw>mQgёQ#ȧ@)4(q<?O$_$?^\867j︅::::>ƲAӴXz#Rfċ颏>!}tN*bC#!/^,+4Z9-D<͢%]rY/U 6DG}O8 \a=%ˎޫ|kTN5P`s _Y4EۚzJnd5U0 On;ā`;k-LMCC"(QGGAyi q^UĮ=4 o[a]`Nqdom$ҙ=Ξ:*H۟H(>cFA%mDE4MS|wMz PYaV8 f\5+z9^B~oƅ((G[vz!Y.(+pЁ{15MM|PB;NA8FŎ۹.u#%"ς9?t ''s#GR@oycFľ}GG:zf`l{{$3űxi\a(^[Hdľ}{«îX*^ϹBujNѧOiYYDC&NV见OCcŇxY'^*^ϹkOMw;مHT$w?Z` u#=u9]=Wg^ʿc1kþ;蠣Ee?t-濫nSE#.ꋪ 53w3NPobz9tk(sFH7GL>办ff qعًV õåR7R^mM[#l>+%js:HMbbnMݦ{ykT \.]ߥm%.N%y%9tH^Njع{i{utBXғR0t?7yOp(Tp[z6z#׆Ry]YYZga87lOO]Myy'4ҩ?/?+gf.^ sLJ\s9j؇/~OZ~ C||ENERR?*w?Gv7ѷ4签nؿu#?Z*y<^tHA9N*C8V  (JB\DC}'%{kdr_Iz?viT5CGW|-p =-KKo#.mDryh>xeRT*âCi@G6q7UރD$=Ϲv׮_m,Y͙;VWn78ܬOפ&'z:?x7gq7>;g\O` 80s'(Py, }2L^NTsdzutBx{bXW>P 5ޱ"~!Ӎo?w?g07~EQsSo/_ן7g犢$.& ik(JJ>s;D^]tte7^=|44MQGCvH}X^_4h{.-?df#"S/,r8z`f~8H}'Nտ|,w|CfPʖk-v}~F闶 c=::֎^KV{,#MG}uը^7tthcmx~fNJ 9OHόmf3HV u EG.tt؜6qtkG8:k@GHt::@NGAG::ﭣ[}G߳O[yk`qJݲ,_/=N\LTʕ(}1tthcv]XR*Dqnwf~>x@7,IJ[5}ԋ)_k4FW"*JG}Cwt;>.UD*:: t:_ ~6w/,hMs($od3 x及ҩ0tt 7DGXLun_~ndBoc)$zttEQwϥ=~)>,?q3tthc~tQ:DbѥU;:@ohttD$: tttt 蠣~:FڲS=,BG:JRT&N ^{RcZ*GW;Ui}yyZF` u>V:/Cl::rű".@."j:5MD0˫0tt 7PGs}cE`D(}5rr2{'kDw::yږ-[ turrRDfع;rMG:z+u}.rܽ3v.{w87HJ&tt 7tGg@IǤۧnS];\PAV&+k-u#U2D^oڅSTes4Gt`C@@DEY|^_I^HutBՔ9bU*"S[CgΝyJq '%FsC8:V95ѯD$~>nǹ㉋l}|!8'yx6;SU{7xmVC&.%fqIUUmVy^*cryy6wwzMbb.]3w2C>1~MudvoE29[bѢ-6[m}|ijj|m  ]9b{P ސ|ܽؗޝ}efD$E76y}n{xǤdt_Adլ Wҩ8ǥ_W;EĿ߯뺈(8`'Y|XQ]="_q!CO2ȈHGzq)u#%"{ޤvln$'"_X4F]TN'C::QY}rYYQ9 p\,HM~S>.u#/¯5bN^d3gy}^K zCo#թj>YŁ::M*w7NRQ#8d3޿zKOJ'%5e\rMQ¿ .k[^>/-v.f3Ddxl/STVEIJٳ@G_^r?lzѥOF[ʞ{soDDQСٳ\Ns|5J{ҩ̾CC/ k墿$P;g8 sLϊ 7y:1?R䕤id=Pis} o_EcG\w`R|`HxɟR'=2xeIGPٳ^~7};:v̹8CqtQ@TG_xf(󮯄UwtBHw9OG͉XYG8:.2w3MssiH.ޤܽۧnSZlVj=upv\X~$Lr+t}Ѣ!r2= -hcr#9~_ O'&N3CÂ}cU(>, O_OߊQs JOJ NG6_;"FuvW`_ik@}6ávjr<<ߝ5R7R޿z._/JM&3gx>O?\nn32M:: \wvաc\mUDvl]o;7yM5hܲ,wn>Ϛk-:ݳ#"sQMzY`4It:z wtBX k*=.5*ξW"jRzR_ܧ|Ϋ \pV~]}UѥHݿN7GLP4GMFDсmx ˲fgDĪY"RǏ=p(J@ q1__QzRʏEdƚi{ŦW_TFRxtt::y74>|^kbPSk=`Y/標"sv'oU&ÂOs sAGS?bjZVtqq@ot:Ed"NR3{'kj$Je1%Fz::k9I]M/5-F˲eէ{zE*"B^Q۳tt}`Ēεq+C9ͲHс "|4#F :\FɅLMM5^fUT) rcK3NSj*b3bcnj ;޸do$["v.#Nk4ɫɩ)K]I5:z6={7u=S)54j9};-5 Ω:O'.5~>nYV7("]՗vtс^h/P&yh;*T ĥDR鯄BC#v;:e.::6o"r&H MO׌9q\ba[(}3qs:Hvz/|HV蠣ڡmu'@G$@GHt::@NGAG::ﳣgd??m٩팞N2Do2l0Jyy:: l}PN8V?){~mO\L0k:k̈́zR8fr/Ea@@Gbߊ|a@FGk1㧦_>w: 9RnѦ:TV) qW{sD_kGG?Q1_|4MG}t7:sLj`SisݍcFPy}ѳU~V#1x]Dt-}34WP.>,2ttFG.-AG}CwtF=-Q:sot{G'MHt:S+V|cT?%"")wh@7;-KDĪYq^fhX2?ȓpvtF M-ڲeKNqttk}];:CTImӖΡ[C K IDATێsNP}];zdttD` e08ߦΛsN6 /m~h^'Hiht7vt{F%Hk2DH a}ut(뎕)^Wc{Dc2ѹ?s#f3D_MGWe<tt,0E$u5TD_MGǻѧP.q;$ttѱJ ""O'2@GʿL@7 ס>QAD_e˖[CL:9tVuHuttZU^׽:]dh$Mzɾ} XO e[Ϲ?zAdGs}c#G{5H #""n hD~-Zxw|R[q 2N*8:nMsiP1r3{(#ޏ+ Ҷk'"pEqEh`d$ oB 2ܞzӿe-M}wҁA>u+DqsTfB;շg𑰯fIM_Klfq"@GbI)p` w/;4ꋪ˥oz\;T[ON/3}fr>WsPBޞ\\jB\߫{de9Zu1Sf>R7RcP'z޿WS"bdƒb&virش,c֐> Y5t;" qK FOU>#"s2N⃢<8^*IgnfӮ.u9_>12bʷϷ[no~a mw с61GM22vwf{!c+rK7.\DE͈Wrr?n^C!my VV"ضU_mjdűKeqPXcs[Iˍ OMMyUâtMPEzuz+>*ȧsz'ڡ59VMeLU}_GBY6 |?I :z*81}+v{^-D>OJ2O>O4.v9YwB4GXȻ?x٘߿A') MzQ5G3n\Y+9lkjU~N]{DRx^v-sCƱHj޽: ys4Eȉ>'ȼypnHt`SjL6-"QòݡzhTiyaq`dk5~B!?2p13C}-sPi#rwғrxJ*l|mx1y#ɋI˲"M ͐ сͪ9t' 8v{UK׬|Ek`Fy;]|Es|Yo|UO׌})|ςh>qi3[c̹XBT̶xKqW¶f) lʍƱg܈i W7ִz~ Hn8xc3〦ܽsNo6&B}4. cs-@+UL,Jۮ Nzgr#9m;GAc=}'Lcy#u "C5D6==vb)coyv]\8l"JxܞKbE[OUuFqD$:  Ht@@DD$:x7:D${Xۮ-hEe=h-hu xIENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/PatternEditor.png000066400000000000000000001263531211146647700225210ustar00rootroot00000000000000PNG  IHDRB)TbKGD IDATxohW0,H)DKJؼ,D& H!)$Zyx!N!RH2 4ȁ)!ʋʋ.Bk!%*&Ѐ HP*hdY%y|?NΙ3Ϝyf3yBړ5!B!܇ݰFB!BFxqY!B!όL?8B! KgB!#_ uz !B,qsEdQX/A A-bw8B!dۄBPŰ)&}ʀtRcJ`*Eʪ6R(~:W<*֞!z7 ]G( eO(O@r-t Uu'=~? <FQBwB!vMQP6]f\k >>8q@-Ƹԓ,"zP;Qdd{ZJx K;· ߒ!lggQP 8~<.A0B!&F7~r?q\DqtctgB-UU2U *Ţ{A`6MSUB^(G 2>fvvޜ:!}(Q! ֙V(t4N}Voh`\CP0݇_|Fufa$F ( H>N"0@ {.Yҥ%$&  O!|q=Y3}>}6,]^BNn88QX׌w38gAT6jA >FaP=1d8בښI6ϛqfǵte PWr#N#0VB!{r( llU^ގ!^q־W2Ҝv\Ѝ=;F!CꝜ|"—À xx?G6B٪qJ0$ ưtE ( ~mV *c~DZF3XmȐޣ^H%dY^53A޲aEavzr`)XYx! }:edv#wUjqu0wU|UEDy"B^S:vw2nw:vwxUώ"X4lZdC]G=T HUY|G/N!IW ǼeBH UUx:GpX750~;ǼXˬuG'NU͉ "o;<۰ n.l nGEDoGa072Bs'xvNC?Λ PdmsD!Kp q}Z.A0$Ce,)kX*Uϸ53kPj̸QFvWs9ުČܹ1#Zw T\5uambě>}`GO/iQ;j^:~Ҷy{٧cJg$(/$'}Uc R.^NB! mo`{sc!nQܧ[bL4_ P*CJ}tdbUEsăL&>h?ʚ'kn9e }(AF.htv#r=q |ﳐNKojcGDx< W~ ߔ20S~{l弩jqm6wB!d}39cq5os8nŎC~U:+?*݋̏ 14'%=k͍O I?>‹|m*InYʘ3u-ߒ8@|"z/ @ku/"vy _ 7;;B!*e'x#my5vmBhzbOy8:<ʀt yPZLqNgB!lq5ujYE*,65-Zf {s?A^ljˁ۾!EجCKB!my:&Nmdp35!|cH' [aPUuxZC!BMx1\Nbtcte.y !BȎ{eZB!/RQz)P&D(eL2Q&ʴe!kxx0O P&D(eL2Q&ʴeJײYSBS*TR&D(eL2Q&ʴeG2Q&D(eL2Q[yY+\PYdakטkeK C{cz)e1 xbזǫ<ڗ6KP3묳޺x@ I ;Axͯ-^coxDNYNe_ƽ!d䁗@(^i3C.U>cK,Y!~W!y_>Bƽ =2#^$K-PyLYz0)eβԚAdSH}99a9[ rA(^ϚұGYOxFȃGqserʉ?Z ?gtÈ˭G}-%4g7K}c9ޠ҃I(=hn7$+vXdo^f1[-❇to,xoLq7c cP~TɞnXxʏ9b>UcyVY;By@ҍNG]hWhΆs ۵AisQ?ߍz0)eb֔1^y㠳a[j%mZ~m[N=bke:IuQ,Ũqx3}uTdmM]:a/Lqyшpnc6,g6`/я^2&$!V$FY.(eb֔=j\n*!eDyw  ζg׮,`A0z 1\19uMn޴. =e`NMQFOr1+__kZ[_zՎGyUh#MN1q\|klI55o*ovn"ruޣE5m5_{}|r4w7NbĻ#,FI^X1de0n4׷o]}f߮Stc#&ij?oI8S&ňkC8D2DtE3w_Z,ЌV  !__C *r,^(\8S>A^vS^NzFҷ? 0FV|U}ה`w7׹㪶orjFl78o'O3r[G%__E\_m?}zHݽ'R'f7Ԇ&VSozm.d?JƈS&)ƈ?4j-^MOa-wN7>D*Nkr].Chɺkwbv:U|'Il䎭b1y<^5Eojw#56;wuƨշ/¦йͯY$֞p͆.V=@󜶨oӲjԶؾ{u#Lj?{0FY3eMD1fD(ӮWq=Ϋ;ռ׭ 7yʇS ⽫^{Z_ʕ]ܔ+F/U}3Z k=ۭOG:d(=Ϧ{[."Fk,8 d3ʕH5R ε{=&%x4x o h.w֌ғ^^SowMBmxy77-7g2Q&fM:~!Ԑa##u]zٸ}^?z+oG4xZLjW;fg5x}'Րƈ3F|+1ڵqCs:*F|kV:3 d1-}4iGx~7>l=T>P5˱c)eLu^ 6>{bCa/+S5VJ^;oQߦ1⡹s ;7﷗H7k{ iqސGLDLxT[;YC$gG`[%l6:~s qZGՌ? n⸗y)eL;#c;cwN Fߠ,nTQ>kJPgT!+ qyӒ#_XZThw~([Pmc8eL"FvX*\CZ&sra#;_ƈSBż;F\3yrVҥp^֯ CR'qX/U<%mՋgA$dvX+)ڿ~j(IU6Û87ԓ,e B_@ 1doK(iLkg8eL5F;ƒ-頌- 'Tn􈧞C&RY``Y?X{M &n-5z:oGYq/[ [1*jiW5#|! cl!̣$\'&+m/tZ,/J ;^UE[Ks8c)eG1ⵯ%sC,Q=vٿq(#S3T[~1yfi`v]T'5.01re?j{;xcz9AF)QY CX!ƣEA-U򻚯+ ƈS&D#>~]=vtО,5[8 \:%!p*mtZ zS wvnƇ!A;=?~uM{kg1fTPz)JۅV3 $F|+ҍ@5bȉE˟O :73f*ooMpi(e32D`j^]ҽFo41ErcY(/8:#V;TP*7vN}n@%w?mڞ,mzH@r`K̏rj@oTN@5V*(RDۑ j[F5ӽbK7%UŐE0kG`R}0tU%bk=5zgEXK5^-Kj?.6eU {`B6v%dubuOuإ+7`8eLDx7Zl}*^' ŭ7ء&h-rtړm'*}mf~Juf2=GR_kTNjqi{ĈWpXrY" Ӊ76ۚĈ @\ڐ \3ol 0Ő h}MhLq} o48rD.ۑ3 31┉2Q#^WobxL~tVB\tPff1=zv.t̰}}PcěhZmq~#Ize}PU2|'%Le {!Fnl{=AA'n|qahoW#˦== T!}/j# _dK^-t5Et,) @)t\{`)βJ*ml-C)Q1`$J]/k*?Vmw@OYPiٞ|>Fy)eG|ňo9EO52F]$/mRO^ے|b;ƈw#(!XZ)*u-ވo>Lj^zX.QZrVk[8Ŭf{y`8eLiLjw8$dnQ<"B<"V?a4+<[oޡ?zt t by #N(=⃏-L WuOwYO3O/ldGv^v*FLט8E|! ⸷][ňr?~y;L.#Nr IDAT(={ϝDsxFG+YЏ%2\.ն|Gv1eLjkbDUۤ,a^[=^hq߉e[TS[@GG>_C&s㽁LDss/J+o˱?x4[y95xY+)}cC6zS}ӍpG=*L#ZZb[O]L~f | TO7mnNKZch\0K([M UB4p6QN-|| uro`8eL{#M+;Tm1KQٱWoq^c,;);n[4cU|m B̨2Z:{7E=,YcӲNAx_zWz0)eb {j_qdr{N5ƲPEw罁121Fz&!3j#F{c)eGM`tN \:[esԷQϽPLq@y@QmeV ܾ)eL2QLDgM [D(eL2Q&D5ewV(JH #' !BظwcēW1y:ϸߕ2LVG.A!҄wtE6Gq\DUX!~W`>MB!>`<`X|;6i|)m!BHs֔ŚmZٟ>SV'BeM⍾gMq\%V?SA:ı&w B)%$&},C'tE*Ba0'tҥ%׋87Y<7nƐd~ uUe Z@~ז*׾q͝#^w2I^zgޣ^8'(}ZV?MߋP(@X1YtF䐎)* izIwNzY ##HRfwch5&*J,Bl}Z+ 7{|v< KWP+tz6 xyd!cl6 #vGEAi "QQ88о!Az6_֬@jpGU^C6F|G(j|4Ӷ^[jRi^zmv;ޱ#[L۬)#, nSN$]!=D-1o8q Xylo0_c 1\##}GeyϲYr>F.U~)B-i%JL&yd2;7@ *랱mdOCcϪڶG|qєJ/Sc>b7. SĈ|_}C?ʏ Q(OG(?*d2砖U,]^ŋHGת)%DwW}#STU >^r!S7ƸY=⃋x˨oonhBXQj2Nq]_Z(—V4o7Ĉm@v& ^rB6#p2y\.$'Q(r n΃N:ls*O`v8v Sn˚z8, OQ q-ƻP.`B+}cMN raãy] P/hՍbĵy4y`RMŢ6ޗCb\.y!->< !xypHWn So#^#^1KzE@jY`r-Vl 8#ߛD c$F-S2uYp (fg3uGw4I{ lq̟b_)0q#l"ܬq=FyR%FTUYJ%#^8Ovz`x<s$ ߋ{ "q?󡎴#=c\.%anCy@If>qF_?jS<{ seKc2i-CmG&q*S挟+'Uc>y2핰|Sn?<_&Hg%$'1|YCyv;<_g!$'pp˒yEΟeKKxl#Onͅ8 d[ج6N8dیEj{N,7cȿ*  J1F{+k8Οc8!BN`<*0TdɁB! }#)}7}ݟiK0k !BȎ`~.xz !Bv3yy@8!B`)cBB PBve@tПy !B) $'k}%s6L_ B7cޝt? P& B3jL!BH1C O oGx.!BZP\d_fw\9/knJtZ_ k1erc|#B!bJ+FxmZ)2 3]XG|3TU)(B !eR|)j"|)s &{'B!dэpbaeu/(Fy6Rߥ:>ӭG<$ ( Mۓ>=#!}gLM+{ުY"CP?ԟ=6? !S/k"$|}ތ5mR~f >B!751 KXƨ +˘|1B!dҳ)!EQ }0?QwbTlCP?q~ \>ok->ƃIa劌k!B!c#naoGZd x }(!NLB!]gĦG&\IRA`rfp9CP?{o~ua}wmNn2<-<uCP?)#)9dd4B!+<❒xjg3K!BL <=ɚ# YSt%8u2S6aB!+tBI-AyN!Bv{&F\y<B!<6lY \u:P?~G!`mKKxq!-?uO!BG|3z`YS!B-캬)0k !BHD֔ДV{^gD8!BiN/m4F\:Y5!BH {bˀ|K Fwcjz ʏJg \( ãHg*yVM%9?CMYSG\UUxg3HOB: A8G,!BȮbWG9( N8uew܋08`?G3V[Y9W1ux dxHJEGFT#| dXG, {r?`otz@Ud>*%/,u6(=\uNP?ޛ&ku k7<'Kbjz jAl ƪC?[2qn\6ގ!09\>).a[:ʫ6KG2@BV.G BgmB! #q)UN -jY PM=IAyEZՋ0u!Zw"CHeRG۵B!cqH  N*YLMO!<\vfǑy`MMr<'t:4CnD*EG >X$1 FRh߉IS3yCP?{l~ ឌ+< z3.5\.a˃8ZnO@+a8:1YPx-tBBm,1;Պ%, É%D8`2,.mH_H!B <#N B!f75yp9CP?{o~^)B!E#=*e`˳A!BvRޞ192`S'o8Rޓ"&v/sA!gzofSײ) pt IQCЅPmJ%L@h.IF^!BdYS:#y`E\]Y0$ м}O\B!ҌAx{5ŶuuLf=ʳժ^|4Ӂmyt܇܆m].W5|*glC>2lQk !B&k8fgzBh. &v73Ckyj)wFB!bvmqЁ+ F`~nwE3Ox!|,8@*Bx!\]8]y aa 0H>N"gC a8ub,g( |iQ Y 72r/s`B!]ʮȚB B!AdMGB!ʞ&!B!AĈwG7L#{*|'&M#1yCP?{Lza Q*WJa;9Y%!ߎ Sa+&8 g"zGFi~ZD!B1|bC88 8"_Ɉ|%:< "ףxp/ 1/"W![5Ë!HH>Lbya ߎƍ~+#pJƒ{IZ!Ͽ 45}TﭚJ//r~?CcЛh W׵O[x[z|שōq/p}E[Y9W1ux dxWJJEGFT#!BHט*x3lVX(v|Pv'%$'z7 c3&uS a;)dgkTbi-qyd1;7XES|S|+\>GI8Nj!B o; Z1.5(,@V|B7W0qBWK,q E\_#0"ao%z7UCMYSG\7g>g3-XG1\:#A:#~9-h:n!B'B!d/2o_̣mwI/A ߎ\B!ޛ:l#8`S__ˬ!tYSdIv'B!o{AdM8FDO^B!qq\l=E e5M>N6^%{:sЫUýlA.s~?C4edM ~8.Vb+WW0{~1 C4omXB!욬)}6جͅd2&?!B!bx;E8.^KJ`Z 4nPV (z΃N? be(* r5ԓua+>?c IDAT''^h5ЅP˶V!7;I+Yw h*y$CP?ԟ #q֔ns\jr57jB(‹^ #!fCQSSppliRgfaZ*Ax|M=FpݐYIAh.mB!d0) )Coc1lX8@I-!Un0_y̟gx;|1`'' a9 8NⱭhbvzGNKMl6؆0bn!BȞlĈ?"v/(ǽ"p*~{Fn:&sOt`gf{ڌZ4l+WW w״kI-a,l6;n3\u:P?ӊ]#/Y^ A%>b`ݍ5,BKYQJ>ռcnL/t!eW]!B욬)̜,ҥ]g\QiGQCFģDq3 >BiK'$NAy` ^l'|)L&BX C鰍B! Ix=6 Y Li6#,ggP^(Xl4pv!|)r2pl_ XY a! OW׮͌py{CP?O+#ޗ)x5pc2fg!%dن/Q,p8^L_hڴ2p=zhY o\p I˃ &Cf[[1}!!BȚFx1 /;Sؽ!BHٞG}qţL'F:oWS?CiŮ'B!d73P@/^ B!+Ioy{ƸDMo M8t:ȳj B!=g/kiL=6 ϸSS {Jpvu](R% 'B!/"F\UUxg3HOB: A8G,$!BU "F|qzsތsDuxwXZ\15}TﭚJ//r~?CcZeM-a^#LUU2cFៜ0'Xjyޏ}x7S3(`,gpb>F!j # tB!{s<"܇Mpp<"(e<秐dGDҩj'STՐ_ˬAƧT$S !$%fI!> @yP!BHSLWKkox2$ ux H%xy!_hyzt 'i0d rUǕ>=}dA#WXZ\?>:Btuu+wbTyCP?B' #ސj M&ye Q`;ujbI NeSt}=Fd>'NLtpB!h_ewbSwGa+V} c ߋciqTSr0 V߇B!]GVjC[«A(`qZ&Ag.W'){ sVob{^=\uNP?ޛ*ktF˘8@*FUﳘBy9-NǾ7̓4r<2l|)3A$</gl {DnF|D.G:ޔfp3ſn321 !B1 7c\_Cr <ފF֔"_/cfn"Xq\4qy궞D ذdz\@Qpx6d.`Je".F!B27‹濘Gq]s}xI/A ߎ\B!8##/N4ԱxYCLjB!1B!5L#.ߎ B!O=݋u|.BB=T/H>JB<* #CP?ӟ^ح"x@tVxT33HS9)⸈dGm%B!{AĈo˚2037EQ v2|DB3`&oS=-07CP??o;xN@.fUgzϥB!#)x ~`:B9Bq\ă<d>0nXVwA<{\; ģ"|'}B!5e[1|blJm0 r5q\DN >,_ZF껍xb/g̃)(/8"8>(#"/-Rzb5+ !SczP?Lj*fS+幂(N"z; ~;-%$XN"얶uGܾՊY:Gd2-۪41cwc ubUCPZwOVPk/_GhR|'|߳?.2O3p:P6O&#(ABg~C8ӽ#\Ȅ"@e6/Uqj} {ŕQ]az .h}{I ^Qa/CJŔEy^]t*,m*OH?L7TS$}:P ¶;aMƉhmicՁA~-@wADDDRjv8O{7|^}ڋK>4AK'`a0~?)ꀊŕ蕳DF |ByHDDDD;1kʲ"DF""""ڟdefض1({WW۲,t"uGat?l.l}gBX#0 MeKjx}?9`GZ{fdfӈMAs\Bi8SP~N7"H=LaƗ$`A:q_`Y""""+k|YBI-~rcNJR7Py߹ (F5Hn7tal|t]v]ODDDDoLKYxN^P/ֽk/=_N—_[n|>mb gs È7Ya볟xDDDDD_Kpj,Խ/d9DDDDDNKK]n(= =³R ]iqYsa0~OUSUG 291X`4^28{^5eI `oc WƵ:ZN""""}-Q5:g3~?sbGIO`U'/y5h_]m{I ^QasjTm,"X ٧Y$S醜:0}k~N| ھ$ """'cĕ^ڤ>beJl{]xnʾDDDDD[ɩwj'+k} щ(bc&Pٳ)\ң =gmkYZ/ׇa0~?Ϯ: P*0}{LmQ+4kׯ!BE/[^(#~+, SD?03o""""j Ի€~GB;@`Lh\.2 AC>*;w0QX WEF#Eiu6վrU}ͩ {ຕ:\ Pz ~2Y2FnRTmAGeD#0_1}kP0Q(gT  SJmE{}Mj͵wڹ^a"""ݷ醜:ڤ|􈯞) hhn@b>+ =mN $J/KR%k%[ٜٗzGƈ/OL~ˉxcKPԏU'Q}##]d1=YvƀR]EtA#=gm<7ꎓea1@@mH 5q9a0~?LN&Ku BfɄ~GGqg@Ob+xa`TqDQg(//Mh@Q+h&ޕ)k&4uh,˂,&cc݈!2 P?RQ,k۽PW&8dYAdd`Y'"""ְ'UShoj ۋ){2F0i1DDDDDɎO>H~DDDDka;ZG\񦿋0}˖i{ /\n>0~?s]#Gi|ӵYݧ(P{Of,Bi/ҏӼ """hՔzamۆ<r6(k˵*G<6Q_xn tIl+{Zl-nG谱*9^TMVqA Bk&߯  4\U.=CPMb6bǠ Er2OV,IݟQ~/ !3F_tP?`Ӆ{m#,Wzz6 l_CtC9wf9$zOG#̦у :\2uk gt#2:o| NKdf^3Q.P :d"uϦz04AK'`a0~?Dǣ-ю7_y_|n*'ա(;]16A>*ݧ0 cs*guI~qJohk߰gYDF!smTmYKS׻}uc%TzX )'if;OQDDDDD[Vloۙ_G(\D\F`a)h;xJ5XTQ-Ua0~?h1%z='Z뫕 YxNxvyAz6`=O+4y;GDDDD[=RJk,T~WGq{W[q$M@9t;(?a Oy0+*B:8|cua0~?>jJZ5+lnX0u4`jڸOߘ{. ~.sU?[:""""ڒfr='"""":Lɩhc8+V { ԁA^ߍ """ZU)q¶vhWm,"X ٧YrdY,2_#}qhzٻ~7oq""""Z[B荷aGLj" * 嬂 Q/V_*o#3Ywm+V5M^wt^a0~?sI*0 2HK"Y @P\qDDDDDtIqko&oN#|\Ft< s<3.{RG<]aw7ln*0}{ -{*=.?̽;E( >Zi+` +kׯ!BE/MhZKG9T{U^a0~?M;DeY;.d7S7]5e-2 IϚۥ.iF'0G!I2O2GMj0]a0~uu '&5%ڤ˅lCC萏ʵX f+eKDDDDS6.rwIro9Vrq˵a4}ԍ)tKaL'wKput9c;%'$&j x ,$"/M0}kqB|:6mcf ʾDDDDX[ %'d / HoWjo!.ryktw{8_Nb?O4MHn'6Z*G"̗fy'Vx=ަ"${7Ya0~%vE';ݐ:pK4",xYny~Sm:lehʞ !]böĽBDF ?wte/Zi^0 DW֑M`і94FN:/]\x\2s΂>F6KB@< e$%ZL`M@b&̒ ㅁl. )_>h5 y%ix;IrK8+xa`ԡ :g3~?iV4Soj 혾5 +0MBn_7_kKֺHӷMhNBY6zOy1ru3fC0`1ۺs k!v#pYd#buDDDD%;]56>XJ?0b !^|wADDD¶v^X8ϫ3%ԙ'jNL%8Cs?FZgo?a4k7l{8a6}+9uД0A^y""""vbv$S醜:~hJuՁA~-@wADDDRڕ./diYN7DfiiXh*^m[USwoo{ܞ]^hSc>5slѫQ(g>U TSoj EClxތZ=3-՞gx}?9`קUL۶<\~/BjKX^@(n}g吙M ^˲v!>O{QieO>h4SIx4b1aMh-ю/;US<|uw(^sZHv׽XݽvxNz "ϲ0^6— ~e)DDDDD[˩[jeHpKS@Sa)DDDDI^ =^@BB=ͶCQWgYN6so0M$u1:g0~?]VMYErCQpQ`JH?NC}oW+,aW`f" pڿiN t#""" 5SokefiS O0z }lSSMC|A>Y K!"""5S&>Uq* _ Bm8 """uXҎ'q/+*lynW36yupV>"0ݐS'S @G'"""":L]""""`GLjw㼢-BBo 􈷭:U>ɦxeVl֙ѡ~0~?sr #|DaƯAARݾLfת"2 Q.DDDDtHhՔ,;:#D#m$K"u?܅Qz ~2X[[(HO]hoD|+=DDDDzEՔwIpu uIxSܛiًp%<2QBGDDDDmGLjGhwhخUFB##<ɠc(B}_uPFVgYbPKGxidf3Ez \O|uǗߒ"XY "Dj fL uݧ[f V""""Y_#"x>mBCAKN\};߇1hJHK/\1!I NI ş&5$&04<ㅱeLn "|>_DCt<3$ˮ3E :%|:E{2"Ñ=K[-fZ=ׇa0~?Ϯؓ. IdfyAqxNykux\6N:n) @rKu@EJ/Ku'Wi6K&2O2HM@r#,d*pdvkIJ|>?Ƈ/Mdf1uc64|) 0jIDYn<_+vX29aO8gUSPs< 0x[+5%IXJЫN+BB< J5vkF-~&lɚm#1@iKZBT}χ̓L>oڅv }p|~,Զ-\=}^D*P*!k%DDDD?4Sw+?=ujdODk4mOߜFrxWHϦQ^(#_;w3mh%w|!dB#8 qϖ.KtA}_EP ;$>!_ȣPF^  b+|i"v=Sm G`j q/%""":ɩ]5%:4UHK@H^s:B}ߙB8 "x6ڸg\М!— .ڄZ CBOȘ5]&4mBCR'hZ]Bm\ l,_$}7:̗go?a=6rʚ㹗DWyV7L>2Iչ141! }2|j|Y׆vDFi|KZ}t"""":x8m=>Mj}:V7d]񊶀$ """]юٓ:~'7(;`jr (vL"z>E_@R{yI ԏ{;Tmb#run(QK'K"|Y!4l&4hSoN{rU}o|RrKgoc>aMh-ю=+,A ; rufDM# ioYOu]!t{oN\=DtE`ۛ5h5h7Pz G0 xNzjlI?D~9 de:6!^xgzqko(ա*B"""ChV&6x5_TQ11Df]+=bXK1='}ힷ}%VB{}=> cOq9a0~?jlFu~|y;n7 v;E[s{iCCMz m#"""-M]gYEdk&ƖᑽOqz<F —!*uU دOy+BHDDDtHTr$`J(Mj}:KoX$"""}!t!c$%1xErjեU{wVBiT!N?tJa y5?F|'>m_AQ۳1IP*bPJlCDDDD;bOƈwt$fP?Tps?[ """Cz=PUtA0<<7o jYZׇa0~?Ϯؓ:B\.s}uGV.[e.02<̓ ? "U} eoő}]!vm] !n{T Didf3*<'<2)k_ڒyYwզxtm'BDDDt4So{e0"sʃ.a8"DF6h("y 8 ;>x=+I#.6,&5\.df3~":6kңwW@t46FDDDDÞ] A9AiqdrݾsA( $NrqT "GeHn ꀳee}|\Y2yAt4 w ǃd*zWN\. &5tvVh[gMQ*-Cׇa0~?Ϯh&v8 yAa ($i%hs#ffL%QzY=nwwc m]-e^Dj. ccMo#"""mLj~Fd8R;S^Ȳ؍+'U@عSztBCMHO6޹EQ7Ruƃ+C]honx_G X3hCSIh61o`4az>7"p0]~[Gz6{ > ,EqKmѮk( &4gJgo?a]#=ҫ :EAK6n{4—k`j9 NϦQ^(#_;{ڜH]|}Юk0K&;:ҏ77:Sۢ#3 I`cmDDDDt8訓/W6dYJixOy"M[qȲ+<6&4uh,˂,&uDQwt sL['֡߮+;u|!LN}D~t6"n1kI~DDDD,q/+*lynWmTm,"X ٧Yrd*}ۙ)DDDDDܩg/P}u~z+k4w&o\b?DDDDD͞ mJϳ e%FWٙ(2_G׆aD]mdkH+H\ƣU_k(DrBAn0=0 1@nsO(/hE/-?$ܾ Q/5 w7s1>BB TWp %wC7 PKG^HWׇa0~?v}]?>{RGKQ|:,B1ʀvQrho.u//0Y(萎:;5gXh?[*\P&~!MMLBg]w|Q}.ޒa_39TMN U:c\#[bZ%6ԵRa]}~"Ba ?/$^IׁLĉ1 _vL/k=E%M:t-p_bŪ(O)D!puye"+ eNZ!V`0~?onUMZc'andz[cmF.l۝(EyªFr\; Bc'h <vaK_M_ s[=۪"@)|2Is2aF>ӫmKxo+0]n҉5_Q^0Kǻ07':#ZҞTMQ.Mwv)ܬsC>7XFIo .ҷUJJ:q;8r෼*`v݃A aZ!V`0~?o^TMiƞTMAS9p>oW)\"pi z_U=ˉk%Rh۰oai  )=B-[̊ *cѶa- @h\.DqUM# "wm\"""xW[VFدSoGZ' 0L B Uܢ*BJƧoN#t!SuB,Yƪb T;g3އ_prdoͲmixi„]Q-K˒b@hk :6v.dt쑡աAt="'7iG{[f{,41Ӳ0(0QB*cq%.ג*gKe pxqۍ0fͬ$U 2~WeYGz ?T*AzKiM!,$[Ӱ-ə$Nq=&ܿrdAP>S52O3p5HЦU+ꚹZVwwݯ#J̫U`dxWAIs[EFi]QN@;+e6P6-XrZi9}|V&І !44~)!?bdxs9n#k>BI& |9 s>x~(?/ t>>%6Nkgf[VZЪׇamaUlXӂiY0,%FɄy, ^G|MU`E?C>,ؓ|ң޻֢]-,vƆ X@PrņU]:\.XgAㅁwO~o#x> ]vixNzJυ2wW1s*/C; """LNUS @8J&"N- @$S`/=w}e:= N|sll{9YlVbD?{u=~$'|nĪ,ݿmfoT?bpnBUh/"~+,ǃ'Zy]W21Atn?UL޶T+|)t .+e dbj_4̆c68|s5٫ڹ6~Zs ǝZpP9'c]t"l.OWEǣ(P6!uROGh/W^(#2aa.]p&`E$B#%B.8ڶ/^*zzGqzθGt4->=2ؓs-$-=ޒp- d N[;?ޫq3i@e_Xuz ͗& 9 )/gLb]h%CC0 H+N LC]!,%ꞣNDUH*T*n Gpyಓ x.Ga$J81p[~WG?^1xOx(H%C%t{<8)C K"71$1Dǣ؏G=/9D|!Ca oۡb: l7MalU/?A,'ᆹ{#BjuJmRҫ%-bKDlZ(;CQD$M71}snw._˗.׽q8[{nAV'/o6ޑ KaxNyMj([}e?>W[9 ?[)'*P*!؆V%nYe䥞. RTNDDDD$㿚fY<U4,R$ן0WDz h<< G#0~58d\II[!vL‰vlU/?n IDATafr#j0 HO6^q DF~/UFxmRW|iL!%\=#R}wo;Ajc/7JDDDDUM!":dX`cza0~{  , *ooS輂En7RB⾎bȋADt=7w4K?t y5#lfw\ʹTx*_a0~?#~/;?֐9M۴%U/*t!іFJsuOܪ(Y Fy Jbsa$:chs gsWGW˲`VlXV kцBrv@|@om#˯̟@<юx'?,˂.<a8۴irnajb0@gٟ=77`&2,ڰg|!UhVzYBIfG `c'""ֲ=?٦cIJmixicDXa@ , ۶=^~f4l;EtXaa8۴axmg8P%Ƃ R`ª0~-Xrzm{xqAFb&Ѱ-MZRzYBr?p$YB0qsڹ oKr{ŮF%,33H?N7}sJ%GǙ?}Nv{٦zEy,e%$6J M e\h UVSSQ+u ?Pa)ye!$_@PB=|Ʈ7&Ľk0}sл!df~/_>kW0 ?}Ef6ķ df3&7sF1 ~!|(,)""=lfc*`-:=e"l,Vm X@P\aUm؛TO!z$缶 ]_=Ɲy'5M rCUyKb@Kt9HW1^HO!y7 #~3O=LAB>!y7Y;fۛ9Gd@E~]+3_CU 6ƪ@"I6~ M +=.A_G0sBsBA( ]nB?|6=C c{]"M>.גͶ7sN+CX `2/>t́vG+k56Ѿʕ2ІZ28 ۛ[GPL꥕p۶/ ~3I"O~( =Ff6>\P^AO囐Wls_ r"":v!\cqM@ EHA\NѾ|E\.rvyF)g(Yg\wZO0̒.TDIccɘ'DGاcSSHOm3f8]{DGHsx)gC>QfAV-^0~??#6m8Fvȝ.n [nN bG;ܝ. sT(jQTzjwZ}Хo/:֎kk} şH~D A\q(̓ Qwute^Qɤ?~/\;fۛ9R6m6F\HPK}et!=xO!wI%RQ^nIOmB6A:!!r5)*JSMǗ_}7 C7Y2ar#}CBJə$BC]RSH~gew<=9 Rfۛ9B#~D~t Ve[c[M~*nq@iöQ.[GPQt9I&K'ւ,V$YBi dJu/y1tɔ35_#}USJ(BlXQl]]4ЮاcPWaU,DGяBiDDDDqi:⫓qCp&mv"$[!vF$RS89W :T7NDDD.g5!__~䤳|? s}w+#mrvc s =lS=DDDDsvGaf|]moS&5h,O bC; [euGsM&kre&?DDOʚrPqcĉVMa#^lۮ{vlU/?ρMMWbdY0,%a.X(Y r"""GmjG|y KKEÀa0 f d1x}^i?vW; dkwe=4c&""=lӦ=IU9DGşMd*"@~ހi0M%(nLajb 漉|.>&zjKG9T{ ׇaqVM9US,ۆYaNox ll[@YaWlxmB1w&4;upcϲ>31""":#6m#41Ӳ0(0Q͂`¬a,*6_K(q^6gmu/Z$b6"W#ޒp>/RRv1ߥ;#nWm,Σ`.(Ye'ɮmʕ2\plZ:-Dvծ*z5ZK AQ(&{3GTޤBhڱvG+k5*`-:=e"ZX6l!vH(WlXU&cG6I_đ~Fkw?RwSpwa<7z?Pzaca9hZCbZrR438V>g.ɪ)j'ڄ$}s{9 wX^D6_>Egx ԽOUPpODDDFq8۴Yy/Mt ZO[6@l[Ȫ_ }2Bc4% *Z?Vk9CZ1V`0~?"~XGmڨG\h.pDE$BW'-r;E {nWmĿRKtm!w>y礧[ݟb8۴ax-;];ȝĎv;]pAQtzB8f`pxc9A |2O2(,!f :ڸV'"""z#6m6F\HPK}et!=xO!wI%RQxx$Q_b ʟ|3 tBB&a퉗[ݟUwjZzQ^USVnX5em(,r(-XU EEcė9mdAiLߘ^&ADDDD-cXYsu2.6,[XT+.K=mhS#6mV5eu2wm\# )dB IU\DbBta7ݤ[EӅnr m9 nk*"Z@Jhb5h t^X?Ncǒ9?#?g#F{]U甆@eNU :êg(+khF2lGlpeMBٙpeM房qB '3ʚSߊ8!djAgXC 0GcqB!s4#qB!P瘨`ՂΰC ">0+5@i <,]H!T9T$lǁZu`;j!Bzb8 KՔ4 抅i4-.ò85FN=F,0g_RS@NdjAgXC P瘺* )|bipD遅%XɄeY0W]dm`PZ~. zb!r,. LdH!g9 Q#%ijxY(KfYS +B 1ꛡ(-ߜ1n#w;"ט}ʋ V֌V+om53C<7fk57H)8eXe[(ˁQ>'6$1*)p*68`@S/䛁xv!d8S}< <vSS#Hͧ0}|o8yMc*ǣť i6W4\23-堪*f"~=s `0=7;?ދ!u=[[@ 8Y$$8Ez>.ٽpeMBpeM".kUnYV"/ʕ2ʖ#^.;JZa f[!4Bx2 gAn?_q'1 ,M!u5>&pSx#DEq'a;s#Է)<b1DEfU/KS{QrQ} _QzPB٥0Gc#.kSutPD&Tke劄S]n Mjwn C1 keWu{U&Batߍ#r<}sn2̇&272e&Bx'12*⃢(0\ }%Wu o0׹K!] pLTMpn@ ܻl< ^a-5SJ“as@ (PԺ0B!뷡N~p z꯵^o&Q*@p8K?6Xt3adHs+RO%d3X3zAsLqq7o= _S 9኷> %;_7< L` X߁aei+&"S}|~.eZokg;.!B*S'E\x½SUh!ߨ{|>}LWmU6cjb ,wm!komJyx1ħ 1 wdgtpo/ۏqذa/݇-{'!BHGsLqt >惮j^Q cQ/1|R`AAQ|MuRWRPm#!@|/<ɭR<u9ߟDn1{?_y$>M~>ǁq@hƐ[|l"i+I>L?^UuN??#>WYS:Θr1ʘ@nnV9ōo.2.~~PF1?s[R),Q8~ _."C~1|@ZYB!dS~>3p* 6S4Bxl(5%\vo6Tn* \QMHlAz1 BDǟkLθe" SQ # YWGBԕpvZ)BH<ٸfk5b]1{A:4s m8Vy??^Y(OB! j DŽy`ՂΰC aՔHY'B!s[E^ :O!SG".%82xY3َC PoMB!@E|@3auKB!j OYRBJgVℐêa 3ê) ".jUܲZxH+ѹwM_5`r1 Ņ]B5 NWEWL•5 !dg•5#>57QAxTRx%P= ӓQqڏ 誂cifRϼB &]? !L#.5e;*Sg57V qݠ|>_)FPy-_[_9"h(H&d:Ɠ[m$%x~?* MITNj@R<@UJx=J^x!=M{C4d/6~@C  0wL;wC_(u@}?b 4{8&?mG 惪Jsp@ĕJLOPFIBAא]DJ-ď߯oYx%$ܜ8tՇzey'^B!USX5jJmMB*D (ת^ oz )7e8D5Pa,wqmx?0Q|`YU QH-7z:B 64Z+] +ʨۮhcBo=yK`ՂΰC aՔHjLGY htW~,_אYrStd ~8MR~W16RJ߯nؗ^Wgt\B!zqq*U)`\HۓCW}B@x]n8Q7<*)CoB!t9ZE\>㑨 ‡sG} 1* =UT=nN?vAiŁP1nh(ثAi@E>' <FU 8²inBZE9zQ0 )%|7gZQW̽m ŇbGRn2ffӓ}?{U"Xę7뿹ȄSRs7 DcWsȑV{UbF>'ie;mV9?sc糿|<֟Ę# ;G_Tk]Uֿb F}tbDINx2!d91]:,QS">,USz5@g%B!dê) ƍמB!USX5=+N2X3zA&TV&ByA XgV(!B^Қ jJ dضê)BX58#N!B 1g^B!/90+5@o *vZ)BH|ϧ#VMiMX5{H )%RBA8B(9!|υ;B!瘺7p =?Pxhb' dIDATe\-w C!(SzPbCSpkVLx)d c{ {x<ivRvb;??Ќdr)aU$LUK-ȲDY:nn8@V$ bTl|AM Dn~7^؏qc9u?dݯr.8Yhh 272T$NtDK5w{1LEp8G,Bp3`E9;cŐA"sG.dţ{iu\UB.RO!^V`< _m5Bn[-CCEc#.kSutPD&TkeX劄SkUTٌdv ,AS`n m c8A:e'o b'b7p$H_yq&BPH]M5K]uޭi>4.#4W3>1gdog*7O~DxsB@sWn)>(a?I?^B@"1R5E G54pDz@7:4b^ݲD0r9ULMNŢ3adHs+v'a>4ש orq8h_(4qSMqDGg0\k؍}o&z }kNw0` N!d: o{!>CR=i$&0<=Q _I>n_[D-wa>6}^&9u 9DF->c/-`0,Ph)%4]C۴7쀺WEh"Ե7Ҙ9fBݫ^iiiii_};4:2Ƿ_"NE"qR!| LeTsznAAQ|Mu⿍Cݫ62:BzZa~C)躎WI$$?a_^71sn>0%~8g͎:GÈ.7)@gz/kUӟ-Ǿ>:""8e| RWS:tdő: UQqY@_qJ}8!r<*VGf?e8z9H6S4Bxl쮮)!exTEA`jAتyR{ņk/i)%|&BBvyt#{37]'HKKKr?i5SYz0Mn#NE|X-#DEv͉MFWݽI'HKKK-uJc*`Y "NE_EBEvq@ֶ.[{XuMm:q*}+*ⴴâ׀>zba+Z+vPmxv=ֿh: 눻!TiiiiwM&L tm4c#ܞ+kRȏ$##B^C~&*( Gھ _[\7l=q*՟}8|,؉ʕr_Hs@߫#_(@{EI\Sh w?=A컝"NEln^||lBT/$----- cVMt&WqmqҾE%'B! F o<B!xFw~( VgB!SS@p7ǛOB!BKpoFJb IENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/PreferencesAppearance.png000066400000000000000000000707121211146647700241530ustar00rootroot00000000000000PNG  IHDR [# pHYs/ IDATxoh؞Ȃ)XB54P ̓hBdr!6-4f 2s ~nz^-tFShq 8-/Dps>:s:H{HA䘒Sa˽/vSA_=$ n7ٍNA9h)spwN- q>*+A@H>MQNA:;Tkב"MP9rZPA"%)@J [87Mˍܛ*> G}RG#|J})@Pp!k%DBq߼ qPv+m))}|'^ʣz :;@@X7)G{wDSm{.E9 :( eY"%j,)('wД,Ғas-g3ł9͜'Wyu)W/EE. :_̡dIQϤ5hsҼ[]nRBz4OA[wBU%hs)o:jn rUϦXÞy39x3džqB4wOٚ BSZ0.4 o饄Eщg\6%_jsһ2B^H@eˤgзӐcD1Vߦ(GlHmJU,Y5:Rdkz=gSㅑ/픳>U;@1aCx);,g=+iuЎ %ȾLP~ozq>2yͼP"m$-R*R@@% @ kf*rL'rB6U|xǎ؜w9msZ(0E(%e\N"v*ٕfsq:)(ƻ[d^Ln"QTrg\/PhsPfzŰn247 ٰE N!o=;~/_&Y0<>{M+e'(Ugy/cE\pt:ۀ*OYR\LJW'6%r8g`]Α~:8ijNBjw\:TKN`]OcC<E9 _ t;źyP,rEb#A;/r`X3୿&g rڣ{gG'HxCa:Leg۩bP[-ԙZy67a 3Oإnu<$.'rR#βB"f \'u:`r6ct{E78͹RF]7n;/=|#V-Y䄴 z6Kj |i$Nj:ò_s;hWB7'8)Z{Lڀ*i(H`,l+&Mf0V4ߥ:‘Iڭºi 0O 7Ϊ{2yweIh-)7Yɾ_"Dr7M^T˱}ݚA8@R"PO/?[h#"@ *sz=#lbyXI"sCGT5Rw0Lt闐[70͂EP⇖}F6b`o+ Ei?A-?8 Zw4ݶDYItFrD )o OHza0.lmgPl6'b6cCXǘVuqYDYp8p1tn}SO(H/G3[ۿjk][xn[/lmT>Ɇj7Iy~3GU?vꙈ EQ.(`N3"fY'i(gس{V8A~y(< {m-lk,; ![/yº~P`,4N'yqoB`d˿#d  ȑxZxNO=/}( )OG;Ö\M;ڀ2GMvQ[~varu8mR#ORYÖNȳ.;tqP2+rlYr:0$gw~(/uuuPvJ_\!P@o;oual(l+h6̓3 [L k=eAvSXsd/FMT_Zjr˙#6m_@mտ`#2B쩕n`92Aڝƚ&fP9䐒/(r9)B@_+( YR"4pߵ@mTo=΋ ԲQH:Q9ɢ/Z8`GA .@9!8@a| -kd;- GbٙL[pD0~ H[ A c?3dkY-l7rDq"oeM챂@W&>N8ъo= @o'0*>6AN{ؖ1& G| A%qwOaNѩӺ>EŜ̩]waez)cі5mY;*gN):2YSn~}뻁K?ږyy3k~Mf;Ye-:K '[Y[z8֖spJ╾2֌#p:;_2_=Xɥ;a?EQjb)0>wv8AdJgۿOoNb&. J\Aw\2~-$HaϲݱDZ|OL.$+1_wҺiNo) 3/!aO'9yh7i܉],Śysa8N"7`hV*ҐD^H-YUwV,Y L'>[׺4 IɹDqM ^YzةG1y9S02iipK0 nDdS .^ {[}& $'uwu;q1bMLiH˻z8HgҕY:>M67_L_O/k 8t]X^ sm᝕ZJMofe sIQu7Y(; AK^DM{cPm@UNV2v~j RzϕҖ'!NpEQr1?sy;Af)=y?t_$&[mwÛ \BIy+n?Ym!1:&34(Kis݌>&f曚}5֌-TÞe1x-ZLkFNd49'i)l]ԟP@2!$>3]i:l'+!=\/meY_,kHbfW;-&>7 e'ٌ6y?R1rҳ m}iNV&n3K{8MNԔiP*W|c ~;A94~_ >'Dk(ľDkR/|yEo;9|K%BlΩV~|!Pp:5&G?\ tɹdY\vPϰ{PCY;dWH.$7PkۙIR=(w'[q;& lfB8""J-&X:PlY<6t=dng&ڲ,rjoYRcbEEGm L =-F߹U_No1Сd+|y}8f3R?G ) |<ӍGnP~&u䠿SKR6twgN_& g,dkN_- g w;cp@mm~q|`SءwYMLM>EyܞڳC1>9oVlͿˋ"b~x%o~]}±-Frπգ~[~gK{?#ѷߏ  ȉ.8r`S?f<*>6=v 'p>5 9W,ccGhΊO6 ɅnM@'/‘}P`}y=6S|mY-Z9~o [9N3}A9gJݙ_2 PAPAT|AAAGAPAV.6x5hU  q]}f5i52F8¨q1n2j,IA6 mfޤi:r'vlkMBHvbS|{ ð]l컘OLm`eYpQ;΢iZyHC}x!RgUSY'F;BAȽ/R픽."*b1YU'J.. eїd]٤PS̀j B\HjZ|Ֆ#w"Wǵer.O_NeJ|G ꌎEIR8p1 kFr.&Ts!%sL.$?) 0 N7Ó4֌[Ҡ /SvJ__;'iG Se-LDG}>=s+:xܞ&OJ**ϞaNv 7AuN>o mvuqglCwlwd#r v7KP&R"pP*!!_b z?ӽ)َ;:ZAc2w+VuҙtL;U6iY>s,꼄:_ƪ}%Q_>ڎAZ!m08[ܲgXiP ^ }M$7&q@>e5.#׵pisL/28mG '~˂\2,. Iuq^+ I?{^­}÷Ñ;#|G <0ubDZ_=8nYl787AkY-K{rQz:}HߤFJ?܋kJ6Ξa'h" *>bɅ+"EQs I4(OE! y #  *>   #  *>  #  Ȟ74>EŲ}l@?yົ(ATrVF_9b8+Xa= #?1#;P[9vXq 8G>!4M3j++k/7MөW[ִeV4Ϊ4fyK BCi9̈́np4zz8&yfY7O/,aNѩԎ).ZF2K !.տeX}.W[ oSO/GE. GEMo\j!-p~7IhaX7>7 |C@G:[ŔcfSyLܘxA"#c8?~=ϕk!q@b\ { ߎ=MQ@fbS8 nAi3\h.O0:6 TGu ]A2<7M̲,}z莥N.$G.Vjcq{ѲVG#>+͖v;iZ)nPyӐu`N0~uTa 6yaȽr=7vz٫ baj07C>Oe0tN׭w4$2iWPg8 'B`^Nj.$-q@L'$f<{mwU_DbJ ?k0ҰDEPH.$e-p>p4&z?tvW")YB %,cVg:hWr:c\[5(s4dt,ZL)Obahash҃ٛlu&>S?+m`h0{e7s}[=RN)Ν㺻X;KvkK<~m|~Nж.$ꥲX3 " L'r鮑iOJ&W3Hy^[jN'NU+25p IDATgXb*XPH`wcϰa;HPW1gqO'2y>#ou39~x/S@45#>6z? T Tۚdqa?BRX=Vx=&fv3 @%Kb`kɌ\}}'e۾| OO~r$+4ŀ6ZL @y+=V)V ~T쓬Viko+GDՆm`#E_dө\v~UjkkiFsvvfMw4p[)n4ڣox$BWrƺ*}bI%w]9A5S&5CQ}Cyw".={;Uv2`ǯA~vESg]\fβӧ3Zmk5SԸ07ۻR0{|On6%_&~餷hsXSjlj8]^·ÉDM2 ǧ㉹Db`WykUJab*_s!iH*l|8B@QTU:(@"Tks%g@Qw7:4Icon6s51{7&Ͼ=\Bb~n75Iv?÷C٬fF88(m4 yެ4^)@N_gi[L>SySQI&Ư8A<& Br!nܢD$o`qrAPI ~-ɹ$EQBp?oEDpNd߉x>x# ұzLe"1J_='[ xWeO|z򃻷5I;J(Vr;;7QqJ@"r3je.rH-/v+~ ||[;GlmWߑQ| ^'X  *>  #  *>  #   *>  #  ȧ 7ZW]q䰿B#c=V@f [ AO|zB«'fU|#ei PQ%1aߏwSZqAdaDQCS5Ə=y͜f>z)]٤-kڲf{iuV$d4z q R^J$ " 4ưīV6ѧԹf=/%Bj_lC\GU#w"S·ù\z1}yMgʢտeU! JQd? EBA11k(: *TP ѥIB}C#LtV_g,jq{A45R3w:JB䠇-ؓI7n0^"#\)~r'!E2K./ JaOЉo2b_5F[GL^7ܳ5MuV MEQ@QV> -?/fW'h'?M-y3FWz^ʼnL&_7'G38{OP61uWg塀nEO8OL qۑׁr6{Kg8A@W?/ zjM=/ ȱϨ"#o20rl@WZ ή>T|AZjpR9 *>  #  *>  #  *> *>  #  *> i#ȱl@UGW9/P-oeta Xi.b8Я٠#ȱ–{BkPj:|@ CA Xqv ':dΨ4M7O-kڲ[qOɹQk`4Ψ쑏RYSmx_!b,)T[|6^bk%Ba9fԹD֎",1|_knsoA)D@ 6k]KvpNCҠeo~TĨ '2.[4RK~&g9; wJ*F Ot0Ss-2[,4$ѧh@`tl405‘Τfޤi:r'v4MۑѱQsݔ,ҧh>n:nlҠ+~&ex!RgUSY]q{MV \ 0 q\b&Qgv,i půhj"q Cb:\ KiacexK&6 CQ3&Б{zX3oyS9eN|/70Zk C+O;bj~N4; fzX4- ^s|#ȹl;6n*DG' crz9NlN7??Wߔs/ Ʌʍ@j)ז5aaj<~u\[\.WR`tEZV|0iduVU(lwH.Eʨat\Qzdl.J 2jV)r/"_w>nPQ03ežasU܋Ҷ)u&>S?L'VA)^Á}W[*{ޏcE/?YM>Wem9QՖrzM1㲭:޾r?p13̭ ;hp:T;eلXz tgJv^)Ǟa7`0֌)Þacc`jҠĞad;z_X3sØ/2Lzw-`15`xahh7e@(T i,{"jV~C^>5=lwO·f'hg;E;ʦ= %8-ͱ&|=ƚaw@d0 ~Al+v{<sH%bC_Sۋq03kͬq|eu#BШ\in95$k5ƠcKS;.MvT Uu;,?{q{*Y>q|v|?8Wݎ LvRgXJ_#&FY-gt`Gs=$S|o9ޔF5n9]I씢5 "@zEO@Mձ{M[,~HGvsec|hwOw+eit )y{-S9|#v0[}WnQO<&Zamj촲Q (^%߰/r'q );VHg^S::ˬf!Ns8]^·õw;ZLЍ4$޿bPjsŦS{QbpP})IsJMz_8%,МnƬvRJg'Aov=vpvQ@irG^)u*XYVׂŔfDD_Lssͳ:\0b\7Ki u=ˊqmY3AAyܞa + JkR\7DF)t=e5Kp3׾Av+4{^d)t3h 0tOɤǯ7]/Nf29y?>|2~=. ,c+$gx]^ފ>vȝ%, ~-ɹ$EQ{Q?p%w'gqiHly+yaIkoAtز_oFy4UZcJ2ԃ(/=Zl1p1."'FGL؞}Ի`ߩS*{ԣ)7)á[(v{HVD:حު+O!Dy\ Xӏ7Hj1zuˁUc-e~l_\ԦN3ANJ 1 $A䠄>*> Stƨ+/Z*0f)Kiu NJ.t!CG%vxmNR  *>  #  *>  #   *>  #  *>  #  *> *c4MWo ['']E Ψ]ݤ0զh^At&Mk{ J}EmY3v^PFu~ 0rqP(sjJ0?{=JnU_eY60nxkJ.6 #x-&띕'N}o_'bk#t 0M5#9,PgU(|Yέ;  Z[֪λ:]nJJBwKѲZb6{SWSLu&k,%O÷ëoVF Bn%#k?׺8 rs٬&KL@:V([y)ֆ1 `\u7pQq"(+P%t Q0]&0 LDŽ4(C$ u9=GS9]أ/{ԎگYp@id x58~}@1, enxƂhZaZl{scAmAN:t-dtՍ Sc*I׭FUc?0y7 /IQԇw^p)~>Z=t:on bMGUC6HeʎTVdweWq1iy31H-_L[+YײCЖ5Og9_pB u,9_B].[hlyM+5i@*u٬On[,ڰxBf֊[OJ{7V9'_GFcOb![7O6]ݤ05UPѤj \HƧ7VT;yå;%GQ!odeN v `;7]o7n Ba,p>)ɿG1v8b:{%z?Zí4 lwָxM Jq{*쓓avHNFӲZ۶>Ԗ5[WDCk٬oطZs*]Qi'K7V|b󇸱rP6QyLz4/ъT j5T͖\7+:x-/9\q; R^ΤqiPq79QH-{U8K-oP^YsT+ʀ.&g ![C{V4HLnod;]lw׿_LWDIe̒Gr1Ѳ IDAT.P )߰Wzݙ$ZVۜbQ=X#ފxBl7V ͚Yk>l1YynzPZV={ޏ*OjW7?jSMyhX5[JbGyå_R;0 ZL^t2|N̛k;eϰȺ&X%mKft%_&="jpepsY6|;llkV 7q* tGA2 7FlW$ZVYL;iپGZ9Fo MY>l1Yyon9(e5v7KiW&1ըvgYW+r?bҙtZ {%3oߡr2^ɝ"w";U*Ss\ݺ?F J'1q}Ǿ[`Rg2t%$` \ TGii'z4e&?c?cNgU{< n?#InZ5^s6Βf/j1yBHwOCQTz1mOv?- [ ~kkf]Q Ex7R&ͬE77Մeϸτ^Bvul7Uvf{ Ɵō7ggbW}C>[4Sg2{=ح*ljV .أY,^}>oZ}N1b'K"uXj_2'&b&mJR-kч]?0Q!>  .k\7Lmn+[U9ϻ:\o5/;G$!N(*Ke~}Sʱ(AAGAPAT|AAAGAPAT|AAAGAGAPAT|AAAGAPAT|AA9pw=A>!1wn^zASm*-{ i8> *>  #  *>  nŧiBf+4ΤJ@Ӵ:b 1WuQ`ͪȏ r_s (mQR  aR|iH"S5W5QgUS/)>S>U |3v)Z 3o4aX5&" 'S|gSԹr^yS}þ !D^Igq{/:9i@٫+/O:2.kA)>}ɹ=ZWoGQTݔQ(Aj0t3aϲ`لXz t+OJŀ Av^BڲGfe`ARJh#k=/~Q,/ Vtxf溅eNoۛ9Q|%r_ۡ)i@J%SU>I]jh;+szrPu e VwiEm|>uN&g-~`Ư+9]^·ÉV3 =koP((Opy%%Tr.Ψe1x-ZLkFNd49Ռ gPvJ)UwMNzgMoh# T@G,8eI8}a6})=7ذ7`#틚lp>nt2,pK#?;˲)j2hu8C<.tvHL뗣vG,_/]$q?IIWXro.pGT05wnwT40bEx9y.0̾6Ji/+e;fg6MYwrӶwG 6`{^j(>`YT^{T.93=+/QV_|'}.E+VsΗ 0zo[m3g?3gϒs0 QQqM<+MOqGKsc%r%E-0p7Xr:U!+>W$Q9֦ٝ6on7'<53=ZwNͯ=eoď#+l.J;do8d6IcjED>t, gT(qO/_jPʮ?π܊qmu%&x\nT˲>>Ǧ?1:ZYp.LSꖒO:T//K)v#6tj#KNg}uky-[n6pc|hVH dv|>Mլv(> W|avWfa'ؓD+:߾_ٌx|wy;Ggdi\%bfyaZI%I s P|P|P|P|P|P|P|P|P|`,2huÚiÒE $*ͷEBD: }% O|~J #p*J#C>:@;2gYetv[bY6nZ6is'D;x No5l,y%ʯn ,|\*XMN%{d {WڨN5?RZ._IPe Ln5k3>$: _o_[hBp j侖o9~eKU|_/5jiW^nrqna}6Kb"w;z-Z\,Vo.{͞^Lښ? ?7M33HM`ME@gG{؃,p.4rHV\*,;x/.Ǫ$JAVXX<ϳYKߊ`Ճ ]Bx8󯅘˲5GNz&ޗXU*K}:65 VEuJRq RƯȥ劎E]1sXİaqqlFL.^k*;z=Rf633z$8,KvF,M&'K#G 垢>Qqt\.9-t*I›ՃfgӡoRq\5OaQFN_&Ůr!_4R\,nZY22HOD1HvVs 'u_iƭ\ATN>Mgg`I6ݵ؍K,_Q`0NvT20ԳrW%\xNx,gX"r\L+"t:$-E"9y{T2]p)74=!|t,jYR}PxԳ!:W٤Pp0ȵsW\%|~ڄ/~0ul ywFf63qkBFDiq?BD8\,DNO?O'n&=^ v`S;{}a.]\67|/uwz{T1CB梗#Ddll0{,QX-v1n\ewҗzq:Iݒ9&qwN<A;Z χCCɧpf6S.CB[ތI<ϯF\u:i'Dw|ъL4lW &lXf7jzn"y_\LJ+DBCgdn3 faU ʾj scs,Q{4w+K')dk[(=_3=̈́BSAis8@t(~3Y_B?T20`Z-eoʤW@ˁmdXBT!W+4 І۹[Zֽ;zY*醛'"_?0]y=ҦjZa}[0uU|+0_s(AHu;K$/LZTF\oIcV  QTS)͛n/&;zm׆ {^:(?xWm.+}ˌZ\xc4kF`~ݯ,e塲:ԣfwFzlɤzuT.9'9yxfxgxBInsb12+vq%0[ޤIęfy?r95G nE_t,e;TxxtGg8"J>\Z*rّK2iλ3羅iajұP}Y#{Qb8q7:rNV㝸3195)uK>?C&-][N3z-:=TT_O̊:NIɦ4Wy TVKv>nsY'nO/)<5qg U0wAUV.a_)v#:zythpX4w}(|e-vl1π܊qmu9JM\j6q7!{:*-?_63J/ 5Y~]5ZYm$ _KkO;󷂹|fC)^:#B<.SIo#K&Sf_f®`_!YWo `5L+I& P|P|P|P|P|P|P|P|P|obeHF>yaYvW(Kbf'~IX_#IfRm:^m=A?q߯lӍ@|ZH}k;jy$Z^ l豛JnŰ6fRd粢(6Fkm^WsjK Q^yT<ӺfT;W~m죢-;R@{%oZ6um*T\,n-Ww'W\,Fs4;$j`tFɏ6_B>WoύTjٹ!B}jZ^A~؃o sT\p8ǪK r KC\f6WrB,֭ 2˲.AɲlyZɼ$&X,˲+"SQ\/ V.eY;Wt,\=o {ߊ/%(?W %;;xxN%_oc``p.mK]tg;mW{TldC߮)al҇MztccSIK`(%]`L:%Q:=T.Dd5 PR/GVo o _WOa+./6ZX,HOKD| g|<n1|>\T`,߈v+WNif_iZ^K=K%$ ws4~{<0(Qq4qN?o80w^%;fy+vdU;d_iOԳTA/dsY;߱Qע?ky*~< skNT!uR^.Y8\. #5u_^`ҶEwïQUƓr}sl!a3vU7j*ED.E, }?t9QWjݨQwlE;`xk9Lܙuo7,H;w>"LjD(2;l X ziec3ť"o'roGDn7v7b.N]Vxi}ёkx`Uص52GA2k=9,.G:{ɒlx9͊5FYkXIDAT&JGyc KKKT!jtZ[#yj!ʵsD\q>J8@D HRf"qms.w66: )e]tg;|xR>#׵D]Sh!avU7j*euKk]ӵjW72ơOůC;2,Kٗlu;fmNvɼ$&6SN> .d],$Jjyvہ}^[}`_ף+$fJvmG̶Bͷiw\^"r9b$\`C_ݟ[C+|#'Dj1M{)tev{Վڜfj,;| 9+ˉۉЩz:=d7徢W7D;hXr:ښ/jYsٺ~>r |~Z{͔`ێ嵑K#ͷi`}u u s%|1l7S`0ׅcQj^ݲT!kar;{L+cEEw׭~'ϺF}M:d>l2'Ѝf ĝ!]lC_ݟq;DN>Kj@cBMxk \ە+zrQϒL\ĵJ{ssŢX EMi5ΰ^3/2+,_b$"W YN>z}*vu\occ֏{͔`Ǜm='<ͷ붲pT(؍(4pmD }r6zn7lt >l2Jiy)qRjZ;}Q`ЬrV3pGDj.̹爈7>U~_y*$vDĵs 1z=Z\*~0oKKrmݝ~v{-I=KEDa hzl:v\6e*NIDvxk!amwкdY6Q>v#!,7;7bwMQCΞ})t&~IpW)5Z}I .V>/;ejX~jV}|ZdRnloTO6ߡoה!avU7j*ΰR\*f_fcºؘM~S|q+n$/S1!v=;x2q{B8&l|XzK쳈e*o$J>MM |<ֽl6Wt:\Ⱥ!;沙~>>Uo(y`кd,n+Y3js֍_{͗ȶ7zÊ6F5(Kv.{fߌ;{2{a5 yX-Ozٌi]/0٬KEw7~'oԷkJpd;X2-3d]_u0fӾg@VnŸ:7wWZ^.lC!W+qgWKKݾLߎo H\~O i@ o)Uc-~mܞ&NKjB˦f6^׿1~e4MmNߎឥT.ef3j:˯ocZpj:ر`gn\奥%w;|>\8 DieG}nO}|ѷ偢^ VT*}>ّoW(>(>(>(NP|mNS_(G`|yjvu?75 5(n|l>?{ispNK3 6(nlj^ǻf!: ~ͦkrf> 5 ҇p űm,ES)&87xcQz}(Ye.$T53_p0ȴ2fʂUf}X\ʈ;/0њ)EĮ'sy]%{ҟ%{)zw|sl8¬dٌ5L(Py~FNgC߇B߇ZZ(>(>(>(>(>(>=݄gZAꖬXjo6|<ME-iq[D"plA x:> -phs o:\!:;$V*rYr\Z؍V[ƒEHUHkS^ c& "X4⃏Œ{sل+Fŷ~Ol/ "uA{gEcbϋCBS h ܂P}SfKiqLm,+e;fgv͗r?;y?"S䳤iO9zm$umN6}tpDx8}ͼNBgFC߇z2ׂf@Tle)ϼ*1~;n-d^dضՇjF.tvuB* ~鯴d*)q0{¼}?=ZJ}XsXQ'eX;a3jbI(z-*t!R؍ ]|q(e#>ZhB:#3.z/q_%"B+&~iZ2;:\T`12xvKbgA4'(k{b7bR\)3o_!uKisY|w]'䣤@X k۽ZZ,ߗލ|=IȪݹ rf6;:w (>+K"W;'GR੠o΅/۫ "vQ+Db1=D΅/E塲v ))7PmS*uKRA 1-~2M8>h3rߗw7x~N?Dy~!! h3ڼFD23U=;7rkT&`DT.Uҟ$Jh8z⃽%'DtlzXECFfu+j]ٜƴ0zuJ`ͥbW o6DDW'_Oׇ{Rf63h/@y\z\9@DrxWdN"26Zb7cǤ퓢|&>f3#ɲᠸw `GqdJ%we4g[xczoJ8.-oRSDŽICh _.?KMKa)$!,gȒ0M3١X=O:zJzu%EQ&)8ĭ_ }FF꿠4qW_oxXH{z= MLUQ(?3ߚrNPS{t,-4*&g@VnŸ6(r 0M3"# l7PiS?]c.i?ggs v#G.Y?+NGYvF윥<4 EKW!vo'^'>nEoG@!ԩ$lF<^Ne;~gA].Z@!YbW5haEf].ׁLk`'`ZI/.be]]w[IZ(|h>X4>>|;Tn>IENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/PreferencesAudioSystem.png000066400000000000000000000704221211146647700243600ustar00rootroot00000000000000PNG  IHDR [# pHYs/ IDATxohX>xA< A P -L#3J␁ؤЈSh)l-Zo_t.t.t:Z@xBx8/셖R& ,x~{!qqs>HWGW{=pA9dYr/v,A⿳w\l A䨒YHK OrKAœ? ,߶kf(k ag4poԶ?;mOvP9r{ s-4!OYF""E6")@ wM/8ET|A5{{ztE@Bo) ")dž oA1S@mJI˅D ԂOZGԲc(c}CW%LlP+y_)"PR,=JLRul[v r+ s-կ( %YH"PB,G@J6A4eXZԲ邙o^p%d߉\ :/VKQ-o]}SdHAK'%hav,' ]}38g/B H63ԩVϼF69tf~~jFղIws:s9#qL4w"Lؚ:knsV}cG9]K}ߌPY&Zhf[FR3q(gwI<3sjj6nmnחL]"wSڨB1_eѺOy \iK;|-}=Z9iVN{tmKoL:d?싷`)p'9i:SSmu8KMgg{c]]67hR,X6 $f/Ymi5Ms,sfՊޑ#:J TfڒIoS936W v!&e|VJ_!Ӂ~im, ᴝA$L+i{Ůe<6aѯїaA ;>M]g9W\ jBEVnk&Io Y%lͶQAL+U(jSh&3Z96h(y̺71UӜ7GYX[M~}X|y3|; Y`Z[F..ޞ\띺5hg4_tQN,5fcrѲYD](Wj`=;Y5 ]Kͪ_c;6h#aZ7 4deF -@<0 ,l8)ƟY_e Soϙ进@+fkvx9T= *-46[3Kvtf6LjE컺=`~LSԒǗUqQn_3[?>8OqO ɹ;koZHPol=OamsJ "{GGJT\>6:X(i3+5fL C/kٔ?Sܖ~C?~jNMݽ^K=>Aj&բokdeSDMS`:ܝO Vt9S}]¢vldbl6{~dOcKXG&68NDm<Yfqy]O[(@~/yZ~q)g}_,\;..ז=rE_pd5cR5 jqKnOyᆬٚM( ؓ,CSd,؀Ӆ"i?Ý8Zu ̚+@ȳZC-CݜJ5C@@IfeSN us 04~jq7(s+ĚlZ9>wI5lN#v{vlEw%E orpE;04(}||Yo;{q6mV Es$-9h*٬sӴi Y42OyV8{ERRNy@]W_6P~S,@iBZJN̖ ֲFZ]8bpeH_ҭ)rР[ٷ9,=R}iqq!]ebg cR^bqqlml`M$46ȡ(JKz|%jp(%g(!-L OZ/w:A .o s-FF8hjmA9( 1b˶N Ir>w9;X3sF3r/(>$wqPdm|d[Xro,•% l&o K 9,}B'}%Y֌(o#Xn-ߒ{/,?*dlJMݽA2)GCŲEjr7E9(P,,^dX{O~%Ϝ`.7 èU2 N۲}u =|jǿ%,d"HSJekV {I&5ǸvN{V~_Gn_-RY﫾TzO%?{aO0Dvɞ`2 ){F%7f]ne8?.;|{ue9l! 3%n\cY)~Oj>%?w?ic^~&noYy΍=zzꔭ4$ _6t}=:3J?Iٛxơi'O?+/d,Md3{q2YK oo$eyO+Wp(1'ydc#?#"&+k Sp2'C7C .]$ IVfB7K{ :+yagÜ`39T'U\>/A.11IUU]nԩFy!_ =r Wq՞~EQj|C\}mt_Wz=xaOa9;GQzE{negwÞd.gr.9=]N$ԲqEɸ vgS:/B%]דI%?ծ;*?A􍔘!LXEY;YzH{io'VY^{ _>jQ~"+UC@~D~"[H-Ԙ]x+jg _,dv{Sƕ?g{r!$==`Kha5,q+||2^3M i͠·i,,,j(u ]Mٓ _(fnI} E$^,Sʤ힮he e|wpFΨ(=Cxec ׊ Bp uy%BHlFa _kƧ՗ĔW2Uf!"^Kk\ /U˝IoNONɝԗjaXf˭Uy_١D4JKz|2.?N >wY5A]AÝ|}d=?坝N[h=Sj٥cbXY%]ק'cȵ^ek$fi|~%43~Ҡͽ]+MOFuڹR5~3_ץ's2X'}I[t}y}<r`ʥLv:5ҿ.6eKrJ[U/EQlߓI!P$ב*V/"i%#"sRBWW+Nwr6tC8;i.>X)1iP"-YqjL}E-@R-fI޽]Sprd&d3;AL"z?vY;3|u;>4Uοw8;ֿJ7xQJӌk.0Nfm ,RLNrJR2B*@F/8- SM *3|v+laM#/4qlf _,U(y+5o/Bso fb/bOlv.7ghFn*JL%<=Ұ S 6ɹ4$yQEW[Sp-xtV{5pxF[tsi6-E(Bz!I/d;g )͐jQ_=^oJ7.+}fI)ȍjzPYBpϞ*O"=Beoa7Z߂pHΘx .]ܠnʸ,T)nŧ247XhNvvK~%K`=>?JQX-ޮw*yBj[CU<ҩ"N+kҏA4J3Y;ҕJS5t*9 g`Ad+-rOS-b8=4MVbS7VB6Q'{a+vχnM3Oӌow L\Tk|KoatnDf3y$;_񈽞aǪ{'A8R#J>9˭wJBL8@˖e4MO;@m Džl;67d.]4~k4}t$V3ٌZ |lJHͧe# n9;oyX6I5x#8ʱ N?G##3 sx4-oӜ#sI}I cY{&f'͙Zs[-ny 9=-Xek/զi =;x|tgyk铧P o$ xk7d_O(9Gb* M[L&τ.jJuJG:/ML'fϵsbgF =-чcxH]>GFgaZ2<^7 8|, ? Q>5k5= ߻7M;͏=yܞF4{;{2^9G~yl( Wv]4U}dzۡP9bژʟ'J8vL6jtZ7jB7B-nX< "O롡rzB7TtGGiZC7KW_QNSD{}A]kcM?Ǟ9t@/NH)8ԗ|I;d;;1+&2cbMc5{z߹lPPaMWC\{>f ӽGH4MFoL=ďn7?c#޿}M>iE]n?X;kluB#٦E>};+[|"sΛ5ct=6ۇ`xPA b`#a%0.dJo 懚L`N  nϯ̎<0 PaIuLU; >ٍǸvN{e2]߾ghf?~~YF9>m|%x=gL޽5٧i,# d3{qa1%ߒ77˲<'*VtBBCr%53Pϔ3 sg8 g,ՀSa%:{fbJjx3!rٗml䟶vKzr.9`?;ñiSè-lz;܏lהtAr wnOzʄ" Id\~,;;l;t} L!6~f!5]1p%`}I$Ltw+yx+ B)M4.qxrxؓ5I}sI4AiTUmuM9,VǶߒoF~!F^Lb4/R$[M([yҐ4Q}IW'Toj]O-n8VTbACvE^r_'璷z+_wkZJ0[| Z(jcK}[6Ý%ħҔiLc}BCFA>+;Wcf8m!DWi.(ST^Rp=`&^k5E \ SƲyOC7B556UiH(e;͉=bZ 9ԗpl<ƟnC0NJo͜a6tgyk铧P W&AyASS3L\fY WRC9.##  *>  #  *>  cc`UX|[Ò(3NukT(M(4bc_#9Vljr},Cx2e,4]_ֱx?0\;@V* IDAT T-'/ސ_[Ʈ"jc/((C7R|{WSwȕ5fhPM(RÜhQ&-Ɗ-.gEyvv9P_M<1="wͼ;a@`sY4A,˨j3wLf!YQy3_7= @Go7LĸvN{U=BI{S GQ B|X؞WG8(ކ`Ύ.z}X*m^ 9^V U7S<|J~&W01rFr.eMi`XC7dչo|O8NG̡D)%٬AVJsn?4HƴOh>̉C{udUF{yz~Ob*^:fE?խ̫O8ݺ߾P EF!gO^O*˲{a;x}ِ_(n=Bf@P$ WoQ~ٓ)DմƲfq D,,˪jZ3-fX]|o5.CQ#H*z1 ~0 4U !QJ&>z8"eO֘m߾tJk~7CIaOj\?sg^uBUHC7[ꁫ~\ f#|/*/U%R]-uָ\QLT>\lng-AI: kK|".|&pZT=JE'u>DR sڕ?ho@^(MqHa.R7c79d͐SpT~ʻrFb*!*N{;>s{cY5κJL|Z[H?"?OҶ~uc0 08Z 3!,2 㿸wSl[ߍ|E(4 i4].X-c4:- 9jTR'P "}I9}v|Vgw`'k22p˽sI"v/\ҐnDO(gP ?1f%}Ulhi Nk\OV߂o@O*|4Mow[?mK/ꃆ:B >o 7EN㥠iZe ZRq Y6ng2 OZr6>t!3[+v=Q>Eyp{ݨmjʹnd2P6e[ǵWdj>y%7 EY xwns[,VQ۹S74>LQ r!6ۓ{:\3W @V `5̕|r.9[ux3 +oЧeO"z~a \>7fs¯{V2'ğvVVSөa:Gr+1t$721=r-+߶]UZ6UτMxVQxp ð,ho&t2'׃dӺy3 okחY S'*3;W!w iT:0'$;^⻇G+) GsûT+%.P H74e2# s\f3.Jk-r/RF !?5;kGp +u6r]Gnɜ'b %+чkZ&9 ]j19`jnVyTev#olF{ 5N'l岶4ӶXE2t;$(#4WZXk.vEdUUm!]%;ܯd)x,'NoEȃHv(s}2W`ɹd/KZLO٤#6MScƦgTw35P,&bbHT#!t| eu\uwCG.lUkjn 5Ϻ:o/}s7y8&kN& M9)GqؓQk_~&yAHq\ UUȃ1C 4/BwOgTs?mˏU{{믷R)[\KոO l _Nv}钟u/ xLeU$dZwXb*J޺\2}BulU-sլ'?S R~5%7UK6_VzR4M_9ug,Ud$fњ@.=eFΰV|hɹdf!Jr+o?>"0'G_Q}Y{lw60tja:JYXY;ӭu}E^2oeӲCQaL-L6jۉسF=<"c7E!ʛ+xvr'b}qCM1SݞMSp/dIakÖeB|/Z1H9;^ ~ȶt;~;y>iHVI(<}T `hn[kțyx+aެdϛyk\]=ʗ6RMT:Z C3VwTM ro`Π/EWLΧfj>ՌWgD2} Jv ERvS )Jw–=BvW).aE?A%.j\Yic]n6p<[z7vj}U{YZOgyGhS^{Y-'LFk]_LԗtPalb&! I |.@RKZ zu֫1f\;W<=,Lb6QZ,d;oʄK7&؃`n9g%dͦ)[DEIw5:"}_|W {5+$GDDz;usrJkŔȃH״%}kzz=j\ {d{ MVԽlcE6izi^8|^K_KAl,EQVnZyT[y/̋&*\rn*;Ug[Rnoç3 3/O3޺ h1@sm@tCEqR"CVp NĒ=P@' rٙ  *>  # | 3z[/]ۣJLhE;#9dךVz2_ɟ9/i癟6*Aef6) tkԨȱƒ{ŢhU#gNoȗMR%ɹdr.A@+&bf!r3'wʪ.% LLmXfHEdIvZƧsUr.Itb*Q2]3YD3#7F@` NqeYg}^000 Ǖ,Qјڪ [$Eii&]ei .#gHHUtT,On1dۡD|zˮ5f+ *VHߠl AT|AJn0u"S ՙ[έ/]gWAj&iXC*(= 2O-Ŕ@ٌ堯Z>|;ժ~Fgc߸< _3',d ٌ ֖*\%X-ƖTF).v+Vmޕ7sTF9 _ւLMFD7Zw @}pAW{Rֹf辛.]f~f!/Y?7(- ŏǸvN{ %=s@ʫcfF}I;`ٶ+9L$xXP__vl;rR"v&7Ɗ/V#bVu&bo<OGLؓ K_wes %v C3tm>yOQT3!7C{IS,oCCF0MTH祪|MӜ FS4(5.- nd3{m_[cbȜ`.0 E?q -g3w3rF XA.]dE_CFJ+,31(|[RB7Cb(vV-'4 [(v>tؓ]E]nBaMH_KV J#;SdoԈ 3W!ww_gB2u _vgS:/Bnbv1p50|urW] >43BFnHWԗSY; e]X)6HL&n$Ɗ!d9;K{io4G}@^$)@AI7#")֯a7ZI @bj͋Qje~K&fɹ$EQDmp߀ؐ Ǒ}( ']*]*g+O|_\ hol.ro>g'O}>#g8xȟGJ#S60ߑN֖Xo`5ӚzʐclIr[~=Of2R{2OER{ )5$3˯Z4JA;xuiH'@-e[R"FEqwGҭtAJ$X>A- m_'璷z_'GS )Ԗ,dτrʚsI^ob`)7 m|L@m:Fq46j-ƲO8)(JӴzo @)^5Oɟՠ,0sE)[yqPNxP ec#+ ȑd:ULo/CZkL]ʮ@٪yWR6ڰ AT|A a aEp̛R-0zo{.A t铧l~s,\T|A؋jcDbHVeY !J^"n3s{zS-wvPioSYUbJW}T3DG9͍͆#"cya[dY颤\aY6|'hgFU_Vx.]dn$gLd3?+/ɚq ?[ԋ/]i"HCRyq?G%4LZ\ӊmyB L%'reSFZ-J$߀nݸ%(g_eI$gӉiE} ͼSpr9j͖MĪ4Uҗ\٪?ӹiS 5Zo7Z~A1Mfs \P{[0* 嵔S^iP-rWY!XTBCgrv(KrU;keR9M[I'ѫ GbEJQn7`Q[\ 4:ŶnGi!ҩT<\硹,#;#1i8 @&[ZX6iZyiՀSpollr !|/?n/]:V0T:ee*<`&^kkDR)cو<'V-T|A>A+ \ 4^铧}W+ϕ>eәI(ϕa˚_p[f-).aEv|PߠbEp O }>πƀZ_O(9Gb*OqރVrhzRoЧNeU+{R%vSӇqϛygmgq)T|A9 v0 |"~!Zck AG(EA3,dM+֒uDXp u\d[(oGG޿}|=>VfY|(`9}IٌW]}#gtn= D_ҭF'7o!EE>%>CA>"5rKӴDE>$9r4MKdlwb,lJbMⴔic!nۙV3\1OVfO}`ZA>Psb]/^NgRd}l Ä3wj֌d\c!D_7Y4Mmc)(mc^fnX۫^~!p˾eoQ5@wzF;mw{};K?Rcbvw+KUUeiӉdBɹdo>ٯNy1JHDB]R'r-z(V;UUHMQ)BV-X; Wg]6}J'j&a4ڴ3r4دlF(+\ف--'khAU47P^ a,=8=5Pr(]+'jp){gpv:׃{ †Y}&gB*/ָ7rJQ݃:NlV.[ʄ&BЫs`u+G9؂%`ژІ85ZQ֑[۬6F^)`ijo4퍦/1˱S/Ζjvs R\4MiP솖ߘI^|m-Fn@ӴȃdЊWp Q}87, IDATNyc%k Z1pe#YG2qK%>O vAE,f6DžVVEQ6b5 !]_֡rUlrCTUF1/VcFPƱn.HV>yti>|/n=Lynif-OZ`t͟+$iY2B]V,T:IT~YV4M+kciȯ7}-Ckd[3R4fkF\PbJ|*TuCOoA>ߨɹdSlz"B?9#t3ĵs(*|/\`Wv(t;{"e6l@yiH^]>*ߍCEGc-liޚ4$nV =ٕԬ{a}I^k׆KD)_5Y4ǝB)_[RT.2\_ HHRen ltoD䐶0/p%'kP}>*uʭ>mc縕*GMA?҈ȑ;4GAGAF X+W8>llTiAG7qq9r ##  *> rp[d /i"E;SX*>r.ĨP f"*>rX)}xurA:### Sw?8/CCN+K#_~&o=+iN*3r|HL%fˆB޼pur3m kg.wp6H&+{39 R~1'/oϯɞ~sq \RT9J2#Zɔqfc3t3ĝ#l9a0wpFΨ7._&#e C3W]u ].kv`z۱6˱E4WcOEQs]b?>Fo$w[W W> [B7C;a噒I _fZO~7],*1﫾|/\FWԗ*.wͼr%F?KNbtēUT+ek}66ٝO;*R:;bh YH_Kl;?ta(0R%(ɸXvv:v6x#%?C 9 oL4MSԶg!٤-R#fqGGrQT|2.?\l.N'Yy:?Sj)ӭ4lGQwqxIqv`Xsf){xo\>=r?^Jp]n|z0o[kꤷ+]"#rD֛Hj-V&gE޶otg!UoS=ժ*PULIo{ĉ6~f8M`%9^k T="*O,dτ My\ 8;6isyۙcڈ%)8㨹"C3`}YO/`ۋo(ޏtz~GYˆ:oG^z}?+1?aҩLbƑr 8ҮAٶ譿ܪjGGW>HT~%əOu8Ւ  ua?S 5f/sg1\I AF*> qM*dژ|>WAaT|A䠁"{wj_o1ͯ6=3y%QAG)Rcۛa#<~ ##  *>  #  *>  ##  *>  #  *>  #   *>  # ޚd3kNwM^@ 肳X)+8&_t0B;(FmrSsks}vmVpeRL WL_xHzI(A0#$p y{1qL6M!3wyf2P;0.%xS_슝}/:tH{5BwCU6uP3K*K__߻{/4j|"܃J˯=R|^}. l<|N.w\2kZV^,C6ub[|KIE\x}.+N(2kjZ{>iVn`A I=]*UCE5RI6kS<Lgj\ _],Ab.shN\O],ŚLBHeAZSDӴ@%8ΝT.da8[5G μqgryyH&XpeYqɉdkjfi{\2i֦ H\(hvmǯUwgflsqN{[?@kCߍ{o'gea^5^[S>';/s9--^)ǀ;%!DRǚN)/"#襨6e3M?YM>˪iUl+#z)zy客NN,䭤rW!CrY |?o8};+ eٺfn<(ͻq'x2mFS* Ņ@P>'OmM=;u"{R?@Aqxa݋jZ7d;pR`:ؕ bPxx/AdCgR?68 ʡ!2F),Kfv.;91} 0y{r,t2k-t&T P)R!ndb@0y+Y,_WPvrY锭|mB!D !K3fݙbY_Yj)#RG ^#LF""ڬV[4ߚ]`i[L[="?Dsr,nq;B<%Fg;؛u_Gw6[+d zu!l.BY^p- ozB6j+vvm ۈ>^?MyH_ȶm|bs#٧ݔ`i[qۛܺuH.h.ڴR '؛nw6< fd#ff2{K8bċD^_e.ͬSJn>kd\6~-}FcɉysY㕱h.:MN`iQE)go^s˟մͨwwY.s趻7T|NU/8{vOmrzݸopNmǎ6O٣+F.EsYsL\Oܷf IJ賺JLgbfV=J}Rl4V(WFϑ͎?'o%%xmOuƥar%;+"SJyg7XZ5uQ6s|kfgKf~EQn;E.Er/r;+9LgW;؛R?zgSigI w\29{yXXo\r^jCrxՇj/N S]}׉_'n%n5imnI<i)GՁOuד'rolO - _s=xagiNtO{ 2R2L8(Y`;f.Q$> H|@H|@%7Ja\6cjw~KMRT;\8)o'& uBw m6IfboڃDz7_RjZ5ߚkwz v~>5{fbǚ#V?DwCUꓚds赔>`HeГ'׆}Zl4fyBF*$t&4dd$r/rb %n&?|o.v߲f1rSJߢ! MsBtʧȻCD`F񔘙ͤnk|_"(?xv7ɉ䂱{s^C)ʏ뚓TOU9R`JNĻqoJRc)Kmgl&\snae;%'͌pͱ-lvֲՠ {Ŏ.>xe4_RёhݑF1KY8Mg1LiBwЄCr}i"t-:!#U8.~5~ǹHSJv.h\`fvZܩϯ3 vR`nZEs!O2w;$w^vn0GꕴYڥʰ-gM/vh0T.za 7x݁W+(uJkZZcLa9">T aӒmͬ*/mP=EZF3J[]rj\>#/"#H./xeD/E/^^xU)u'!$q= ^W>')P,OT/M,A?Qa<џ3ѲsR 紴P\zk#2}33OYiQj-l!"ɓ'o8w["< eB%3,;y{G<(; XȇvO}.CV|V_3LBxhp(y;,"0 eZF rhh $I6t&dN'Gt2\2Y=u;%L'[I ?'oO })#3Q(IdbWb>H.2@k$BEuOqœYGdꛖm$r!jŻEYxYhj'K|W̖/ BdÝ:L%' r/O%lݨril[sn33m/ y^G 63 QvZՏuRsxJD !ŗEBdxYoj˽ 6ƽSs|qR+T.tضO{{A94('ݻ{/SP,`6ɂ6x#ݓרs/rQ B슽qbV6m zE.|!lӔ^>.fQ}{6t&$_>xڈXR?n)v.W!ܻ{Tb)BNJ?rvVjZu+%}ɟ'i I,˪%J?$|>U_rWR@ DC5_ '>Te;_XH0q;5SwR6}%(/}IgXt!a-[\z<ض0LQ4B5~>W|{u^اim`su`ðء\d{Ŏ_GmJRqHvzQ[jC ?˨E='zK޸yCyOq?vz>i7'o%/s@3(H|@$> H|$> H|@$> $> Ԇ*=T(0P 9P:Otퟞv+%n&h`.{fbǚ+n ;h*Kة7g|!CɉSwBBZ Bm:?ry-[|0Im̴ćJ|CW[:v~|\jاlBHQ7r{:D9vbvZbzıјw4LWF}i"t-:UxY$q͊s&KtqHmP:+go%~̈́#R)BHbXєBq!85?tvxm!=ָo9[3~5. Ht$Z{P~Q#|!Dw֖%'B?YKجZYrave/+r]ܽ&>ndb@0y+Y; QV{\OO!+L'J8o䇈/GرcɃrtdƮTgi\:l#Wl|4-3<3>;D溿AW;믘[7oE˲ӭo4!&)X7:B łd }<~bЇiBȪeq,aCeҡyPX̽eK# BC<$/Ykڬn=j}2uc,~+[|T*4!s.Jڨ5ls`{mT J&-[gqHrW{ı#GU(m|fFo9oh6fc!$ϹCrM}/9e|鳺6Ƀk:Ur-@eq͗MvzZ) Dɉ#nttTz!aRQ~VXUPݰ(o͗R?8gf3t{n^IDAT/a[O)˹|.~-W(Zs B|%}Z徒roEPl4 խ|VNNu;ʩi[75Y:l|NguF̷f]842^g`Wv.} 4KRE%n&7S3z1g5Yqt;, JkmFck!(Km;t&?՟'`dv}Ip|?o魇(&oO*"{-/x_Ϸ!%t2ڔvJo~4MCqng^=~kʽȵTꬮ- k0^Ʋ6VۖŸi'n&lێ5^猗Y^^v&z}{\$>?{xy@vnT(B[C&7|eU+x G'Ӫyg~j?ڧ,8Cܱ8zGmעcpѴP@P 'kñWnA޴w/Y\?yH|V _28ܒ Ձd2C\7~i"qt2míw<(79:Bć͉{((GBڴćH|؝O=pOR$>@KơJO4MSnpRi:m|0_hڷWlϲ[xm?Lo-[[|kj~6S?Xm6dvo {sao8EWd60Ly_{6u]~gOLv-A{ͣJ6FQ~T\f3ige=& -Ɨ%۶k̈́8+=tM9<$[MӉ eXkٲm;~:guHӴ@%8N}ѳ, F-M\V^;P0YH}gXi9SiX۽c.4Mkd\V [m=PeWlFH6Ut^ֲ%ӄ/s9--^)ǀ ,䭤rWqTT5˄/M,A\{ q=/襨r l- ^W>')P,Om<(ͻ'xe)hfM6w^N^ie[|BcWz!t{u!ؕ h-=7L0_`ؕXv.UIP)R Sw6%Sյuz%}Vg:R$@Q[ΚiΦNؠg;Xښ6n.ڴR~IYIyM7NF^(0jTO\^wVr"įf`i4S?(r/S7UJaS[3%n&}iXu*/+6RdL{3X-۶m۶[}%,h^3/B]:sۇjZ<|1\.Pu;#?DRwR|NyͥW\.oy*oq ,;X? Ǯڪm{wFcOr;Y+ؼ>? ˔ޗ]ym2n7N۹:L sq|ae"opNXy\7LҦdyP^۵&+DndXç |'l8P,ͯ&$5=R[_$>X= M-\$>@ B žu? n@Asun9 EBqB?>$> H|@H|@$> H|$> H|@$> $> H|@@$> H|@cԝKINvmV/pRp>~w H|=WH|@Ϛ6 gonX6 go;6 ~ro7|PMB|ޞmyg~T"иg^t ܝ $> H|mwn) YxS(@Uǹ.:eUfkćms,CUB^h@ö9Yfب@(3[Evy*} WniTVP$> a5ozK CLjf:'Z֯]VM;)abRݶ06};/q]BZ a[VNxm ǃ`hH$"}{Dy8lzl6}Ûv Wna; &dUOʾ)|veuU4.dv>&C!)enZ˂ڐ~Iͬ~U0H h)a쳬3d2 h6~-chOs`kb:q3cclm6f+(R Q7b(/^6H|NCmc ILυ / @l4j-_%Y?? ȅz_-(bL`(kӪPSL;xʍWl*׏}sv9<,geד]վZ aV*DUB< W('B!?d" !h!X7 [Onl掫*!T~Aew\1eoL(٫[<ޚCӶ֟=)>X~_r:+6^/zYuCyhBy^!ߟZMռ& ~|Bʥ9֍*lS;6WW$>eg҄r@‡?[3|\@Qk4mvl{WEl'i9X߳Z"+q%\! "}^Rߗs[4-<ԟ{C{e.'vB7v^[ m6)?"_R9Ǹs"[bQVkZF%g4a۶ՙGYb1nWgXG|%Yt7nUDDc/ffwi'rBķɕ1ev/xj) ԰#={%y^69qϮ%j4~m/(M|O DFS,;yS6QΪq*wS! ۓcWMd畻;\+~+ B]@UWWз@l֟e*l\aAWnao|uo['?M‡f aobeaT٨ CS\/p?>T?ΩӚ؃\?}iUZ aۺ'VPqΩ/6[+$>lu Tcr $> H|@^j#d>q~b Z$Q-OL}DXIENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/PreferencesMidiSystem.png000066400000000000000000000400411211146647700241730ustar00rootroot00000000000000PNG  IHDR [# pHYs/ IDATx_hX?>xA|A,HZ*1^DCbt130u0u4¯}~tЩ"&؅'āo"@{*D؂ ߀߅\Il %+o~*3͊{O9-R?sV1pPeSEFD8#j,ߦ"c w;;W)2^ ;M5Ms1fd1+&و*DDf"bZS(`+E_V ɿ#`_۩ ,5K~iuF4+DDT14FLbY1DRyjˆmʩ>!F'2^wΙףR^\J27b.cޔT*d+0_KDd/Ȭc0+ɥfَ?vly,^SYjkq`Ȭ:GƬCL'9N f[u&clT4*srrK"?(Dy˯a:9(jIͣ`'Y3)cQg:XNr8;rs)wٹ):z(_ZB62+eL믍%泌Ddf;~z:R> XT d Nm4I;f2ޕGX2\(p'|.2r*Ĥrz:ASgv6I:< *7Kcp~)DnƔ+5%0 ziϷA[>L<EAOGncu2l'cnVv-mo~TNg`7C~X GET0okZ*I1>wzv*7t{{Zuf^Ěd#Rf!䌞=GĘd I6,5\{"AsNfj<:]X2+mg2JY\&"ι$LDFWD*:rJpY KɌa{+V!KL~UbC"}بƤ/ 6[a!"x"2Ke2Y^`F8DIorp{gYh1WB|)dxw;>`YIk^Q*ڻ5Oڻy* xؒi`gD"$tiKVPN\.-]cd *eMHAU" Jq;cu2w1Wp 8=żv/L6rຸQ b0xAtV-4zlWrF.ii.|w1B\'SZrKKZKZGC{U=;+YHi*dc3={3Llǭ8>DŽGwDdVLWp?| LaVDD*K叉b3KX8ۅ%xzAcxeYP]ERBTSvס7ljOfP~ql<=pxw{F }[;mbd-p^QK$4kuFN̹Hyu/ DQKofƓ=eS։b"y.n%O;lD~F/?U6g+kЗ\$ic4H9sj8d`w%2+%"aF#<22 Gyog6N*f3qQ8U@> Y$zHpPZ6u~>-RݹA4Tȿ+K`gR/1IJLҚvoKI C{:ٴ1"gߓjQk |uئ?83VROTFfQBA̎8>&̎c+_./DŽhX5l'Svv_$F*T`|iϼ' lw[ !]ldS+Mt6ontƢ -Ƣtv(G-LiXRsfD.eg鮌w0Dd1PMֲ{PjިJnggmad7ߑ ,r^CFD)5`g3Ƞv +lٙ{9:b-"B>>>b}ig\KG ODesQS鴈ڀI}66v>%@Em|ZcC%4- 7:O _pݽlnpXw֫MTcmhh?ޖįZаa78trrq\:z0şS,9O[CDQMϥlv>wm?//5?wz.5q2U-)gd~qǗU]܆Ù QA׀q!|3)S+M73WX מKOLhxRR~FO_MЍKGATkefjve21z}ڈMT}y^D JذpipIg;fuR^6y~eX4x~%SEE $&le ߬SJsj2lsR)@܉QZY7Txgwq׊j1h4v߷ӘL-[6c_\`ϐgU$MļC>;Ңq6TX*<O )TkIK~Vl7*僘Şv+{=>4c *k_xb*k29O\$"%v>=g3ymE%r'8˲]vE_YL{M%~_%.<|;?fwH]a+:Y0;=Ѵ'g?>WL3p75lJ/ǪJVگqsG/|>zOOh{"(|;2~ONnϐ'96ZD3aFj65~w\<)ʒ<~o|Ò?Ɲgr:{e׀j?$ DžZZB@D|7yg<~,t2ƢxPrwAkKb{p ^s7.~.ʽҧo_s>JɿЍ7[߆uOhX\{%p ^gl]6ba&~l0{MsajZh$TO :i=?Ov.xyqڡ>.N}5pLKظ^sGHk6|4d}Q=?H(=V|ldot2z't8y;7ri3ލ_w~ufkAC ḐЬ91YU̥w v9{⦊ɱDv2 m7z77WqK˥\޳-/tdߣQTr?j &4"Ƣ1|v>'E1p)F5镹2g'YbmڴX2 S{k^dᘐx^m< U:- 7k["GOX/yܲ$Odž%l9+|vF͆ '93U*h챿RlUD(gHd1eY("KD5gب` ?\"bv\be . g9"*Vʛd:)bVk)ODj-ڤ,FDV6|JuW3+h|Y;h-Jh116ukc[]Km'rD"|;lp8 RȲknҧRI{_Ss\ !O^t*w3 ^ 2kլ>EQ$|:jem]a,˒z3R;HN&cSЍxR ^ FF6pMt]%ŤƓK%s ypoߥ GUe5%"w"ƢғI 6zT JHͦE#|3{ODbǯZI>+.cn%3uIg%l*+>Nk܏k_5kߪv񛦩Mj!t Jsy]~[ )Wbav81\\{6zt[·vp:aP5t#Ɏ ׊sYE>x5*V~@f.7|\]$\cBymB3MWzQhndiLR:-U'1Z//~ L')ivEE$r\ՇjJP}:8{cеJ/xKֺNsxl"fApQ胨'{{tR{l1iWBojz*9]i-E~?¢\ ϊ9Dl"cH,cOTʑkAna?sY·o.Kp\ѻvܢW.pLߌYqUK^ ]  \J%sq#Wlx"S<.ϭ 4\kAJ*IȝH~tc,*}JZؚί3DrUzʹf+l+1 ޯ_Վϳ1ހ߮x||g njk_j2W{[O,edYֱzӢqnWLtG~5N[(8lws>|h@GEZZ*8r)im'<4˲uJ<ճ?Lmx,6UZ5/jj./Sss>?J;߾Xlvqkgn S_nL[L RI{4[|e݋R:e>l^R&[8ËK۶1kmBj&5voL3 t87v}?~Wm,^h1uҧvG-{x;o}jGXy m%v6d~Ź{2w.{É@:kpX a_ Pkȭ^ُ}wn^rjB S3a;ēb\NN'\ơN|sNք*Sq|92VѶ`ngUgd7wҧ( v \giF~fsu $>$> `&>qǭ5+sΤ*q\{GKE'mh|maɩ'WƨawۺQ_+c@$&(gd_/v /<)52M35rd׍KE߷>EQLL$P}8tqG8QZJdI֞i"q\ƢQDpDt߰b;YW+>Y k^X*4HӅ Hͤn7|.t\)k4t-ڗ#F, DQhϐ'9v≸gf ƢMO$ C^~:^ysÑ{p],tp0me<;#? .RJxm dz/,Gr] Ùx ^l^N|+zL'w%'X**gRa"mnVƳ#buI7i'-!O|2]rYE"Jϧ]NUGLk+%Y*.W㨿n`? X?ֲ>T*UPsckK=u?EwhY,x%hDžHgU zt2JַؘRSQ%Irܮ!^/z/#hO4-GT!!7kQ9 X\#]9W&Vfc&z?%yyzgDuqf0}SRNŲ$QЍPFm$>5kG{}|$>@c.Su6O| vtZ9!3 $>=V~*}Җ.H|uVܛ&j+.5Yob"0U~C}sk.~?hNm r jO4y x[R@#۱Gnn{7gy8yF^Ȍ<<#s|/pޯTeⱧ>^}͛_X*pN `-k!~:ⴾs90aOd1[_OsCCB\>5?w*nLx5¡>T[uP_dWkt%'vsP>PP2an!'{]Z.RDx.jfonq9ulT*Vꕹ2g:bbv]i mEW ~j,BWv|xnpFuhnn4_IaƌE#> zΕyz~" : ݲY?{zbvNB~Q z~"" c55LN&#S ~ o ķvׂL'͝'qso  (]k$?W ?֖*JRx_$"OXz>+}2W_S} U(3NM'է{d2a5>"\tA}jOYl|x;6f懮V:.(Jr z/*D=C?tnxY._kemp8 RȲʄ=<̆c5V/-4ݽ.|k7CwWӞh_If:ЯUTLͦFz}(QwT^G쩚M?2,و1^~k$ǂQh5?>nܼox"w"KOhDzUg?<=\*/W$ɮjHG&Kn?2LDݰLRsCLJ/6P]lתkQH,cO'nޞ#xm謹?&bۥ8hJhJ2@/a~ҩ{mz&W_xШ2׎U픉w`$x֞;ɡQ^\ahh$ÁHSj݂:tZ&3NT`}O\Z:-ƐO)Zx}QdII! H|@$>4:2_gsQ#,0 $>=V~š}ہćȊ{…&˥`{s֛#^'~ITwgs8pw|hg-zK6'?PqX |7+$aQ!P 0bTJ<[}R)<· q6Y|r6;8QêB"qPom@8pv% /;gHňvdJ "pgP-՞haqt-*;Fge3xu49 "נ'|3̱\bx[hQ|4&Q)IdHO?#$㞈Ȋ{KN3YIg؝1QeS{z=O9Z_8_:%0;ED#|I" y ghe4aQ7Mt+eT Q$I媟pkg#!EDEl.)uQz.X~R!5:#D {KE [K5, >j_r9dcG`suǩUנ;‰=W'KLeLX48Oĉ;х|8FT?@܉X'gséUD|6_ 0MaΎUefdvaZI`[>vo#w#uOaBBaN\:9נE9 g'>܉!=S!!2/JťU]8ZG`B+}.gSScB-7"kv[\.7v'3ac$rwL:-)gړ͊ǯkV#G)-bo ߀;%W?9G|?FEZ'>˲L'wn=е`Z~+DNc55LN&#SW\I Cd62zˣC&F >A?vC/ B7&JG)ygyGR2WL7Z{nLxOq)T|:5TS!GTЍ\ouH{gX]n8}hfa-|!k.@o"mnVƳaqBJ6Eɽ'j:N,/k+u7""/tW?5t x[Mӷ`>;|ʫ,Wei!ruPvC'a=U3sNlw|ZDs]2+]9[7DQhCo,STEg31=qkB~T>%U32R6#lnR}qM`YNd׀?z5I#ͥC7CFk''IN2r!,n/$Õx)|b|^^ZL ?z(x%(;dzVƗ?։}xBT)5oӿYOnB7Bk6y";>Q1mvجq1x%8|vnLIH{nQF~WF6AD.7wL|&2Sn9aN|Yy[uYH:%N'Krjve[OMfZ |;V!Xk2ʿ^hх\S|4&a8ނWK>_`'6 @⓿aUDŬ56ߊ5_Tqow+5??pGCG}z8. KtĚwDpGؘtZ&k/pThs\Z:-$sB> h!FH|sN%Y8tpv&$> H|@Us򯳹30 $>=V~*}ԄćȊ{&nf#&&H}Z' |МS F=|=4Ms֣ԓIG;lGq_ܠ~ߏBJ3pia 2  s?S!߰#=lkM߰WS6aJu7"N#҇K9<T69?>~lrrU pG8//r>V].'TkHIЦLwn85{6oP1}R3GP\QoHҠiSi4"r'@WnH\u{0+#agwDh2w՟܋o.Qi}q鰦/ W06&94+3t-2bd<0g1/kcj"v?8 _H> o zpq7¡!_q 4MtIϠw9zZ,qi<>tFd(|& Fam AA30N@K|R)`,X]xƧXd @=¦懽c\eAY5M DdQY𮐞KJPEP# h$"^ F~ \#w#!OƋ*X\-bl^i>/ԠyT)on~8_,\w~wmWI p]ܪm+4[$Yкr-3`7phֶ ssm }|ip݂:tZ&3NT`,ڜ3=NʸH|ؓzN֧Us>ը{I$>$> H|@H|@$> w=油NO? gцqKGr:GyzdgD$nb=B7BRIEs Ђ}2͌܈&g3 Z0{F}_Ʀ ] \y_AY㒳Y+⓳3fl*,4S*3 oAmO|WlПƽY,} ˲+Ɠ+NNWҙtmlyNџ^75jHIqa 7?EǪkDQԞj0ЍjiN3926lw# /}k»_'#w#Dd18xJD=CZ+uddy|TEz>󹼫[&>J>OlX*nHID=8o׬Ffޟ݃#wP߷f"܉dyyKRr:n׭|V8.,.MH5_S Ȯ1@{e^ :pXYYxWHN'˒,kGZ,bw'Krcs>_ND9cHN&Jw+AYONzf.Xe:52aqsQ8&r~ۮZ|ֻ'l^N};I':?FVQlEZLGf'BuX*pl(#Gj/pR$} >=o,)į{WlŽS X.r'r߹y=ؘr+x&z~ubi"w"=zR`ǽS]}r6Ky~_{FE"uGF(1 "0f6W-P*6X-Vp:?[OjM/ɩՠkUZ.M|kߊ{"7nwu,帠+ˁlX47ñg1h (ȕl.7^- Wr =.+DFPID0kXػD{++d#>Qc(egʕrv>|3\D /Kx\ԞhG.73g"-&mJ%餤=YBlIt&]McWGFB7BI)|3UDcmcЯ ] z}M2 u>uu\RG/ 8f~Ϭ>9>,*if{Gs73͐pL8WKDKN'^YPڥNk8}|@H|@$> H|$> H|@$> $> H|@@$> H|@H|@$> H|$> H|@$>$> H|@H|@$> H|@ H|@$> $> H|@$>$> H|@H|@$> H|@ H|@$> $> H|@$>$> H|@H|@$> H|@ H|@$> $> H|@$>$> H|@H|@$> `# /]ʶ^z18a&[x%l!v/d~ϴ[ˣ֣=`ٙH|@Æ*v˔SGUHŞ2٠ʕbT$kŲl[VH|4+?Q*Xqȫ$t (K qxeŽl*J[sK\:5VyoNo|+=H[FB;0!1\T=8^n#"ƛ|j&uUOV}qFqIZYIo}x".iQfM aT{43ue*Qv?;uWF FD?W&/i-;UO/ŵ5y[ZzW(/9{')g!뿻pџMoF=;ćM(~T(>wDl7/}!O4k޳^ev+DntԊ* d䧨(l7N; yS=$o<honYX$"H/IqG3op\{41F;ж:əRp(E"R҇|A~Ea9"2? 7{,}ufUkQ97AMg`"*ԽR,-MUf(|s B?,FDԞ$XR~w'3YƬjѵylT_l9[btj6_[үFu`(/fS`jϐ'947?.t\2\LΜQV>NͦG/Eֽ(vTP'4"}o;tuᄠ)WLz]aN81\Μ;fE|Jv * m0ᐪYa蝨i-E>j56P]lתÒ$'u 6~Y\൑Ѝ_PHw.gLj#G3a65g`niliDEu;5z6ÚBأkCYmcЯ ] ZPksrUafr&ηycHΤsL$]p τƒ1ىZL]xpp{B=-Ȓ?@{v&ZGyhy}aCAC_PBw}M$nvtZ&JDٔt,ZL$?Fev@ ;TtZjcG,I7˲l 5$>dI"8Eޅ#H|@$>$%mxgu}||b>OIENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/SongEditor.png000066400000000000000000000706301211146647700220060ustar00rootroot00000000000000PNG  IHDRbKGD IDATxhG_9Tv-$- D4P'XŅȴPΦVWxGq@/WU-؅`syB7 $v! Tp?V?mٖqyH{>3s_ˣP( B0=d?qT( Bx(|Ս^Q( BP=#z+zEP( Ŷ<WBP(#?LߏH _DHCV+홪`j}^BP(8uz˲xjWѵ>}ۅ*^I`2qJY5Ѕ J_uH%0&m -[LuWir 4鿧]aBP(ёLv'aC%ã`F͸MbL3L䨅JDL+M=A8fy6"$FqbԷmb <_&IVBP1{Y]I $.ew][3ǹ(BP<UcSţP*hUМ2@vʇ,ZM)k3]XZ&=[cJSa;]֥Rx45`Xձխ*E݁[ڎihMpaMӬ4Zߌz= xZۦP( VhU;Z]Ƭç7]f1dk6?϶%YDE}=W]$ oA_,_3,?Hu=6Ě|*ۗgOXP(YdWo2}TGƓ5_7>6j Ƶ!RJ.]v :8faqC΋y:.+GQ UOc2dKs::nNp0^k 2FJzȑHȺ~' BPtt2:V >l&~!mD.|6!TA *UVx6,f;ǹϭYc23kV%Mdx,nET^Sq"0co%gk)_)HJi'R({}icZfD3X SN7KO3iQ(ǘnq?eW7KhJ/0 +!um|?d̚OϓH4f@g]^ɒLC 24pn90^ù0 g=}0?#}l?iɓ*ǘ|o)%3?̐:̖b`ȱSL{WjרMٝs* bSOܟuww׬p ټK䈉Τ3Nf앬( b_11-ɪ$1̮*;mX ƊB >]WǶKjEv0tG-rE}k BO,"%w'5go2Va3kViz=c1 X#J ^CT~aQ( >x' Dvkn̶[X͆C- BP(ꡖߩ.Q( BSjW$@{]NNNNNNNaVf%< AIIIIII1Sf~fx7NNNNNNNgP'ţXADZ$R*{aU,oN7uUTTTcQY(YF_'>hT\El65<6X J+^Xp_'#6nP(nѠ˛4SqZHiwi@*szU.udk^P(-5flfț@sqLcBLZ=x|~^qvWMw|ЮxtV(}KZxysn/69ה ?T?TZnTkoY֎ mwqǭmhlL-R< -xɹ]3: ]"GƦq<#/&( k4:{BZQs d~֠Z!]xHPuDGǣA 6,խY[Km>CP(Ƕx|-j@h -jvV<ڛ}p{vQe7ƒ]`;^0M<}:d}e(L䘅/c"vaaI}'_4oca?qn:4QF۱B@j~Ϸ]X<<}_|m}8Cjyo+>OZ밵'~[RJOST{;ևǣ&rpnT5>7S|F6>B??3q$-^@x[~T@ }m>3C/7~ezʷ-NK}X].=6u|&ֻ֙7G8  c,oamu?_ {s9 [W}* H"jN:w]mC=1P 6c5c>׈ӱC/7^w}׉OZs}ܯS8;觿`֜_߾HqG>Xܞ5\v:WFI"fؾh|14m϶{B`> [.g|X]C=DH×뇁4cUc>Ϲt`X]/wl |<"o k5in~ER[$H$ū{ץT*yS We:l/oeYȪ\cut]:lY>lţ;J-k'Xbv>`d8<}Gg{yF,_/V?33ffQkWogfGmWݼڦ>k˱Em>!PdMJe+>)\(b֡S^\oX߱WPmvo'aH1qHzƐCd30p,u8žjhk ثc^Oa( eӾYʐ:s!~2:fSvxexU1)~|j%xE_.4{յ'5!7ؠݕJp#*:׭n]LlpQv:_TNY}?z>ˁ Y/ Wo!*ݗ=}22ͻlb'cxr\1;WX_ _=C4(BXXc]ާ~‘WS;vǪ;xBPy[8Ⱦ4&T0R< bWد(CP(_zVKߒ$-ܷc6b߈BPl=٥̆VX7ŵUT:Bx# QuRuڽu҄n6 BNGv#iWBP()-o7SnW}OVZ M&AzsRU+U* 4^7 B`vǃ@ t]#|i M-%zG#}xU'Ȳ{*ܽybrW?Ⱦc}8GںQZ*ʯ5v*f^HCZp:_*~j`dk~Ȳ4X=Pv) >efYG<elH1J !X^diey~ލca|H Qsşo# Ȗ~#}&Jf{njQ<"siFFSۦx4o{>SlfϹ`X"$_<fꃳ<2Ab I.)K>Kn)a#EPυ (˳zw-C9~HS* ²^}bIKxGX+)#W fONP(cBQ6G#gh7i<3EܒsfۋL3uU4<1q_Fj8bOS*JPlQc4"$O@D#]߉(}:{L⯔ c3SZ~9d`j:#K;V0&J4TXlhԩpseLP(Sc*24co?ܲN8F:X! 9N8igz2*U.fpsY:X^x_mCqLVdln*CP(х}- ES_x8 _]hgz6Fu6vi*g-NEgc>|ZTFGdU!Bx3f*=IWRhβ]/C3G ˒<طm0AU_nx< H)H֍Є@.P(-FGmLaFPKV ,RJfD@yڱSII2lH*>gcՅqGdt>nY)+"#@M<āvŤG}&O}&~U8`fvWFՍPP*w(뼱oC[C0r`s!(CեoFbp!CEJBc!ǒ$_Fk-ؿ%y)yhnù;7\r?o9n:>>O?{ŽR[$tnBP1P鶼hH4G!t=J%+ O20b4#8K½af%B2d.gKF{6RX誼Ml0f@Gv)ĩDWXɵ=m3:Rnï 0ӟMS(HRCK;sQ_G1 U!l9 02DHPd-ߜghឿg1]澛X t?y+ Q^RȉRJwzi!9 颼:e5; ׌ IDATU~q=,zMBhx# TGnhtjku0^LQ[Cc-Ğ{QA\]SMf n%1 q*LrT^浦Ì8؛c:FUk(Gxc`j jIU|acC au=rtH` ch"ȳǺTAml/L4y ѓQ8@$x$YUq.~~1~:cF_%m?|uB^`T'(v=˶}Gd˪{7=YT*tf1QmI| NCnzQbDjTU(ް])>y ,:K?>H37;ȋ#T)/3S͙/G4 ӁH6GZ馼MߔXL~0Mb߰\BXokV<YydsH߇PpN,4tSY[_r|l1:G=l~\[:f"O畲M|#B`y>~-C+nFGKu=^7L?gYyCBk{8sݗ^[~P(T1vdm>hȩw/$d(Qr0u4iPWbϗLiQğR9o^/sQW!w%s کLY̒8ǻWay&N{|@r0Gf1wloJC62ƚ7=ߌ!ėNGm$NP(-+ ڛfd[G*0Z$bGq\*U diy/|sձ_K Dc81RFI q]w(/:Z4~1n{6vC "Xe|AX1{u:z2: b*Aj̛` L ח;p-\A 04DH潟]>"8p9M31{:d16 f|;^)\+BRuQѣ#퍟 U[)[Uƺ5@gƊBP(]ص>ڂH*ܫLJ)RX%;1No5#0G#m.LeFc:vsǃ[7nodĩ8|P( x4|VGeFZU"kƱx5q`<_"B`3]/pH`lXNJKyIThQr5elۢ+4ga}x* ;&Z\H>_0*g5X:{$ \ѦRq0X=ҹ)^I I.^Aẍ{9M};)-O ^nQ1)=CWqاj%Vh )YX1t*ah$T r:lb8%Z!\Jr$bqL {UkXM*]Om覾ѫ7!fxG)ƺUVP(S>SLw.8& % E-MYp>[zR']wuWVk:ǣ7_P(J1[PJZǣ*-Om5VP(v⑻P(mRETh*I~9؈+{ %)B졡>at?SS:u$cB@iEp9dH0dXa,r7Po3cFNg>oԆZef9ğoU|K6c&֡Z]:~Vo b(}]T Y kR"jFT"C[%Xʦ8#:˝}:NaΗ=,R/0>OEMrc&*UٖNjG0})'+ďYrm7|L_7T%cf8KC>F",v˰<e>ţ0:$5gC`;?\% DukŞrz|>?/n{:^CI^&s9C"e1R_nt4(@ ubTOɗ "ط5EL z$EہY1u@7Cj*d:ii# Wy\k9d8a15,pjN#kn8.䗉=5(wOW~^~a:l?ُ{)LĹ4ޔ8i7aڳ}!Iaq{h?F7 ;^5 BZcxM * :zq.\!8Z>f ޠ glGhs_} ;FC(ݓ嫶٤R9 +YJ9nD\KwQixq~LuB;Qn3G0c mʌR6֏oHH Zn|i>4ԃˎqxd_YW7j߳Q|P(ƶxln}X( IDrs3 m|ߛ #oxoRR10 WR熃D1xox_n 2ז _z7zT*oT6TbV׷UX^aYFXehKv}VJƖ15SP(S>Lu.S]CdURܖxmB{ktu"ϑ:^OY^O~p~MmTH;mP<*+ ^THbOS*SX` ObwOWwu~m);l*;O b_qT'(Q?kvLBd%m_ԦT{BPl+:d>B>[×)%)h"XNQ(]xcqNtTK*;[GEJJ"B`zO.u}Ccdxs-ڎIn K8nxgrhaQuCR<aKub׳lۧxOX{0澽udm!0Cf1Q` 7Mv{6aRC!d籉wctxVY+U#:VXL0D۪ zךkW$PlM};֧?:)1zSE} a;MAĖK1Jr0&S%rv=ē>M||)qqo887] ,_wo9ط]_}\?Y@)%şeD2rzlP.X8n~ BmIhH%;&c 3?d1E,ݗg>fCQOFjXj5 g-{8+.~Y)a\)+RwJxW'od3$$d24Ɂ$T~Wi<amf{X|tT4Ͽ|Pe*n bgNI|mjcscMAyn`-PP`hMӠ ,/X? Gs'#/_"h5V7EB#F>]+\O᡾ɶ ̲>3*I 7[qV:l2beiq7WHNiK C%&1u]ܕRSثC ۋ$bY*=4> ~%P0V1LH >fh`ᗇ>|OEboVk[ǚDh B -NˎF,)߫LJ)RX5SP= x4Ѧdmj[\;׹AUvN]>HhB^ XC@=t ag06jkxkyԕ\>Gf1CTQ14|o:Sbb!F_e˙׿kWպ$ b/( z=4HMEo:,r/3HrC:9fz |Sp[˫eޗgf6L|o mW)!BM C'xS |:pºaX:l YVI4OőUItJv)Kv1SDr L~8 _n~>RSƌ3o!z2 OP-#(ܛ2p]X!>VG@ZU"kƱx5q`<_"B`3]Yٰyϓ-&}Jx Ptl=G1ϿfDn4ԏ [J>nsB8`>W i|j~Y8GxW##$O'{k/g,iߤɽS7;BV%aGd_i9$~YbFèB@r~9}!WT@I[|5@1۸m>ԷROo߰qn9M#J@Ol?w)mЅ] :?+׆YB`cԖN߄zCCk<:9NłY&*ޣ\q D5VP(v]tgd~R*{D[F;2]gf-^ihxM `/lY̶uJ.ޭK,__εj1B~cd[xKB@dH2<$rB;A5ز~rTa&ߛ #oxoRR10 WR(=( IDATd.gHl&RzI cRױV *SQqH_ -~KNTvF_)%A~yX0 R<4h Wԛluj()Ǔ ~{Mp8eY2̅Il/ Xy)q:DzvlG14q\*e)߇ "*Lda>{ FH Ʃܫg|>+;Z `On^d5E}wܠ,BP1Pp wHg,) 2o!!026N Ț93;}:d1Sqo͠c4군_n 2ז _zkiF:eNCxR%uoHOI:,kCBHDA80f b+F2lXH$yĻW Ej{eٶcFFF6M#J aEvP0 .O>Or~ vx,NJQ\T4Ͽ<It#M4OE 69ٶvȲgclUP,?v=7:-12:Ѹ\X2ߤfCP~wR'><gLwQO38}G,efi%_1BZ3\')ouzQa7]?ڎ^))HORa,ȼ,"<|{J5,cQ^$#eY|?G^!{%KR__zi qa_nȋ#y %?9νw3|;GY̐./4M`زgL3//$O'{s nٷϮ9ɶc%/͓#ld}3Sba:X?.6Jbs)?P,4~0Ca CrwFm\H@h Β@ePVu^oMag]]B]h |p`1̀ sއ3Ilˉ,7s"w`,d?b՛(tjƐ{~{Վ u R޺*nfGnuy9r #c؈xLoH W&`gZ 3WsPZPys ΚPúWbGG/mW<|tx}$:5z݇i[Kc8Tr2DLt8Q)ԦsZpޞVT+jLt~ZGT]Xu <]ǠxL?S7TA5H?lHT:UP_lwQ9;.-XJر_ݎx1 2n!nS!b8zze:T"LҌHqD5X.j/FSђnJ(-a^H?zr)% 摽wK="&ز4eݳ:J/d{ӏσr<#/!uP `G7Z!4cS\r\$5nN|3wyDrSoMa bS6O>To09gaa4vF׮BnJ1=rc9L5E"tG^NggQxjM=5٩~0ra9}>1*~s~|L:9fycq7yj?#;tv_{0Q{zT 5ۆD|yUANq.4 @o+֟cgrc0lWrSԠy v8Wk.4 H?D~,MqE^]gP6 &aS@.E::KBѣ{LvgM&I(.{!ڕF=5:!JKj&&9$:^z:!!ml=ؚ>4;U*t*CL(?y>MӀdxϗ~6z)X ҩ3o`+(-KDg)hg4x^k 火3zŻ%.fmdӿs."?~VCoz Uh78ufiS/0C'' )ţ/1Z'0m?p`3QWO|-JRUZV;+bť*+:8y1fґd՞1e*k:Bx$M5 `#] r9}Rb$D"<~з:1A!qZ@וcM%TkpУM۵Κ4$)Ʋ]¶ml^/t(3ۜ.H;dnƔhvr}} À ’1r ' :cۚz QMɟ&;514HxR<躎=|I!2cwZ f&xׂ} Ϛ(L14Q\Rr=u6h;LUlPf%-,­a$: &w$+BȾc<$֖ᣅG [3'۝yJ.bBPr0'iGwK| ѥߞU i{\7Iy2xo`Lj RJ}XY#Żuz^㬀iᣙj/o6KBzzZpV>IDsJRB6SA:vuaW@Cr+؎ׯأz󑿜r0ŷlsp]z])/a_ CJb&vYG*-WP1R ztrrZB)x@cf3ƃBxd,FrTߩH2DBy.9[ۚ|!N rl$( ۇ۵Κ4$gvUfDL@kHЎ/Y69"jydS) &XJL hHTZW'1rSoL`r4АvRJvo8^a{U,x@ufJ西ݔŻ%Ac@d*W$0ƃBjx|xvՆc;Є'e$k+*U}垍J6sܫv>~R3깿3qlo-Q)W3By-gA!G_xf惙{(;1lrKvh+5ćt<B,~imS<jq p0w+)m'ю)Ys8BHG1׉!k,OjI!$K#L4ڴO][zBţOH2 :$K'm0M6fS gB; e"zy'֍QZͤc]CiBq-d3;8ckaS _quTlL`BS-=+ڀf4ϛUR9ȏ#UA4M^DnE٫6GncMc<3Zu^qDrp\1`00 \ DM^@J1 !`3ɗU&!` +Wٶ)QV 7_]SAϋH±y MNtlEЉ]>yĵ7 _sCxjֹ/Q_G\qΚ$ wJHeR7G%ᘕBzWoɉŽgd">cY6`KkQ=T+(]GS᣾^1lh>v|HNΚцBzT9_]m&#6~G<~0 YkA?k0HDqImG=h;o5ڜPfƳ2ѮNPԄ{,.`8f2]L#3FNQ !K9C"hm9>Zzİ5|RiwT"&TQ~,| }xϗ~]j)X ҩֱ7 j%i"Fk 火3zŻ%.fmdӿs."?~VCozQ>Vmv0 9 .a$}iJ!{hjE+$\9#,lܥ ҩd60q%4$jN+8p:j[=G1e  /`o.e.R^¾^*0 L\x6f6Zz"h)6?F\J!x$Cr*Q0 $QYE[VVl@Z\/ u "&P]B:] ö]W̋)%LS<,@ţ~+U@qʊ=q:oߚDJJKAt^;ߦɡptlxB#4#!lZ.G_J$H$tՉ ɇ1ⴈb-$( ۇ۵Κ4$A֮Mh~{o~^B-+ !  Jc<!Wsg0LGK~n}g:fc<!)+c?v[^i3ƃB3?^:M09QqwZcL6жWjy !Xڦxo* _9*W6hLJt9m!GţPKN6 ,!mxBB!'A!'A!'T<!20xB!d`P BA!AŃB!!BB! *BT<!20xB!d`P BA!AŃB!!BB! *BT<!20xB!d`P BA!AŃB!!BFGl-^ר~cu?417 ??CyCas ,Yr)pՏ33x7}@JAy(MOD71¾;39]Wr xm굷}[j( },YT:֟gu88[VPܛQF:4dZ@?4_,2?T)8dyr˦1hI,|6vx0ƃu|ڍ#Tse䖇65Ѻpw6ஹ=tL*$>P?}&~=vMd?}uyCq>~Z "n˒-j<ڱVxU.?kI8n'^kn\/K'[88w?hs\x4H~6(=Hl}^uL6}(Q;C"}$v=,YRx~(+U<~L.}&{Ot>dR6deF.qexxi<<̥3$\j~yP1iZ?|n˒ W<hoiOt U-s!>O>>=^=@}b'}bxO>Otm· !BH'~B|W?Y!Bed^ MG!B̋G?f+IENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/SongEditorInsertMode.png000066400000000000000000000554231211146647700240030ustar00rootroot00000000000000PNG  IHDRbKGD pHYs/ IDATxqhWE3@Ki`%jX? I6 l.-tw}-6y }5w^؋S)4X W#/R!A*h A 3`T?f$Kȉp̜3zDygꬓM.ms}1 XN?2nI|n+Y;R|pd5vTzEA0PkxO$nu2-, aP5c㴂A$, s<@ @?d+'uG\\Jjݼ tjPRޥKh߹ɍ]uJ\@P`1Qp ezQVbk1y}ŰyR:b&Os+up٤ݳo$ř]ŭuվ044hgvpGtb]g 1[ :xJuR ֞bqBqʇ^ڈՆ$2@|;K >}ktt UI ;njGZhDQtբ̼qz+:"]?~tOxΆQ9ASvٖCOK0vWp'[סy~h 1fHD2ULq'jiG.s>Wnˉb ۨ>n|]pA^utSS!S܏GNh4aFT硇$y\NjJ=j)|{3ѕt$N)T)m+m7ꃽ.qdb%nD *fI&9m=w/R7졵/Wk9 XweRDA^PXt@E!bfG(C/pbԄS4#6wC&W~a< =m prox~'H⋯uJE顇7ɟ i6yeqh>36CݦhIfoU %ZG걢T;>\<=ĵU aQ?ˏMkK,#qn6H%m*71x3n!AAxNlۦX$ ܦT.a6DW4OYQcaY>CP _`8hwEAkSlJҖ*RŭK9oAy >h'=W [lP<ܛh2% >O$>OC6<Ւ;ׁxuJ'I|'iT1=ղaň*J$>O$>O{ӧ!>O$>OӮ)^GϹq\Ah)eSoY~F~P2+>O4HdzKQ,޺ΥN9zF{Fl]]W׸? ߆$K 6 <6XԗpQRJyԙ$7 :~s) 5>ţ̀i %_7u8gξ_z!T̈׋pmgW>VQGʢ삱Nx ݊ǶxO3h)C84P{-=x>hCgDQxϪ8.>&jKϻ鯎 8e0?{rzklW>s+S=0נK?yVV(-"΄y% 8]p]yG<{SLfϳ߶mS{lqxk:k9ZveũGhd~W?<Édz/llbڍZނ<7o㵧r€fP,TLPJ1qa!,JT7f߉GZ7h?:UmOyR޵hα_yR{S-CCC3RF<G75zu_h2tdMqTU}z:m;T}*q{_>[ hIh4}?|jv(ǣ">rq:43 9QlJq?Q[7%jp_H⍎r2oc{Bo w՛$=Vmo@ȶ_G~ ƹ_]ےJA~'96c_Y[ecV}LGk_[d8ѹy^UB{ߠ`6[r7tY>IB7}ίģ8)Šm8j_ub5i4ڿt@}޵[HL~o}׫Uu?ZV~CCC$D@r^'x!Ńا '}snXkۯE6q'34z_GϿl'uٝڏ0gbg_g>׆P1o:*T>1_r哏6k_9 nUx5m>|{C @w7"۝qPQJX$6sY4R},;EՀ>n0ömtSo;xMvavpr<('Xo}:x& :UO&7+~D?31v>[UbE[!g~vmО8cVWG},~z]o_}%_g*3^t8mt㿫8ߪߞLv_h'K.Fgg'l*ʁqyY,0Y܇. >S6oJ7Jxhb z{_|f к}}{5Zh+kؤߍFx!> ʙ䳾yjF3+ucv{{/lͳVvV "~8RNjsO55ՀU 4/_f8x+K$ L<0¼r9 sTv09۲lyls0gqΧ[솿~^.`]os{r<2O<얙UJ1~~5ud'> 1>?[I{SI^A+]Kw,AVPԗ4~h9r7dY<~%b 勺Ic\^*{ֻZ>QzE{3Fݿ~9g߃e;>˹/z jN_ux\k{}nJi 2g3Lyn{ν^蜌OSʥY~xۭxOԗ^$C7ׂ3a7m9۫|!p)aqGzug+`57>ou]f}ʬѫ.Mv}b 8ّ3dÞxiypiێ/^|An7Ԟxr}=u~}SAl'd0!iQ<AvYh]|" +?ՒsK--{nF/b߈nFau(.6ݿSe+ z->O=! */D|^] eF?R=M\RyM_p[vt<~))-!r '%5 @% 1?fW`YzzcLbv~Vr xH!p`nBQmS<0ͻpa aLTW_Bk}2A|>ntN`L׿Fq6UuD$@Ru濺ַd=Cͬ({TrAmţ3^LYTLczgf̣q:+uAW U[6d:T(w&1AL)R&1>xSʍ9ovtA@1ؘIgJJ/GJ$Ca*/Q?]# )#w<'5!{n]>@)A ']~{]hvEv[q'=8==0ަiA)iAQ<tt__m+-|s)`NWJ >A9/4 !Gf~7˿L3db6D7)ˢ$%[Aؒ1pqs$vg>P1BcG,! À&xO} f9I\!^ARBN9~Iؤ8l Jwʸ8+.=_i0 5/ F3GM>%g wxD/`zϯ;}A]- #ҺH#$jO U 5%siRP9p] sܵ ȽmO} .d7l2x\1Q,b|oN[I "o%a >AvDhOO#Ɉ}*J),+2ܯNZ#z?ipH*&% qq{=Savv;ֹLHrR*Jx jxw~$Y Hy KՀi2b ё?YW|&4hT S磛z1KioȜMJ( !WvwK?ɑ8cl;PѺH'G&G&z uiwL79#)hj~JIgϥۣg;9&x''d: {^ljY$ffa4+xu$||gNhmiF(P[X_ JRjw R^Z#"*H 9 Yxr6P}:.RZ;]k]*U}CnVVVv3AcDBQGK).q-Axۧx AGk$]Ӿ+]覦h_ӌHo4W*\Gc]dbL:6b{%NcSb F3td)o;_9f>Fk;iO}n,=7}2/!M OZߔY  Tj1vi$Ik}^9s0Хh`6whj\{ :&.0i/a"vcY%vL,OXťȏ~MȾ³XXղAP$1>p 2#E?;+ eY\p{L\Ȣ풬!x ycu<~es-IJ, E[X4Jq(/.mV;X.QU_mbPSƭB[LYoⱾ~q㰁}v Fa@c#V:RJyPKA!b[W.Όd) )nF9)Π#缷׾~nj pn|T2IqЬO= _2ymbJ)f>{kvS{X9|jxڻ'/?w{g/i/+[ZuU1#y-y$ȍft.`?ͅ٭<΍f 5[A`KvZvg$p}&?c8aSX _6[gVM>x#H;z1ܮ_w* 9+G 1\ ynwK PF'0 =)._ۇ$rTrxmyJ ;p%aq㰁7()>~LpHlW7$Zk@n4yS]_׊+2aYV}>Y[Aبxl1ZF vd$'7f5%siR}b|xAu۞9a6:0͞yr=T^"_:G,E;&clYTa;< oJ),+2ܯNZ#z?ipH*&% q61^sQ:00$(@Ģ]Y'H%q<***v-9 {AhxҜMtL:ХŹ_#qK9d!)q{=Savv;ֹ?۲+L1eAr<Axw~$Y H KՀirb ё?YW|&4hT S磛z1Ki5!8]-ʇx ѥ$Fu.jOr2AR*Ll;9.C0pU2L^<1T;x]9Kiiw8ܵ JA◓, 9 ZJŽϙoV_kKh1MIqXG§Qw(/ YM@nb aP[VJ^fj}%Ca+ѹlfJk ZStկwTaj*5|~m`get%Ar<AxlXCFbK «x6󻙿_e|߷Zm-vd;kď ţpsJBx%.[[Tl?b.rAP8ǣg)< +Fi@ڵNh^AmR< '. E-4W\lAm1|nEttNotFƭLQ.O9LZO?{ c(.~>;X= >5›sVA49m4W*\Gc]dbL:6b{%NcSb *L7*0v.ss|:֚?1v2ܸY{ V{A6*cF'=utɍf@"CFmG9ksQCs[+蘸ȓ;ڣ9mnks1|@^ˏ2 P}F]ö-&brI=V +lGT"+ *cj@0 l6m֛0C)iE&"1 x:w(^_|cmgZǩ>pBX. 9 xvWۊDz ٳǡ渔;L,ߥl2z#$.S0>9)MS{m{'8l욲$x Ҋœv;cÜzv"ODWZb [F@tXi\5(HpCkjazOihL> DxO}Q$Ca_+:dz/O~|jDBqg3(hcٳaBg*}0Ic|$dF=~v*>'J)>$ &.dMMi$b: {^ljMgf"Zk,IJ, E[X4Jq(/.mVh.aBgVǶmAN mb3%fGstm[O}%Ar<AxL:3PwPq4MM^^^Jw{zk\T~çۯ{s}Ÿ^ڿⱥK[]S!;q].ޒa@LhvKǛ| Z?\xO"?>eYa^l:C*|),"&+nH2bv M~ BW1 =ʍfOa4×n/CMrRB*9eYRq9L$l5/d&EI؃\*CG{zIFfŲ)Zɡh0⊩󘦁) 7a`R]#u&ܶpa~3 7E.1\W70b_;jU_STm?Lԡ8z5_Ld)%˲Ȧ÷EICx lMxes<v8J҃;v}hp"А}l}C_4zG94&L@aGx_wɇ:oD7E.!'H%)ˢ$H (]3[?NIp8k/Nt=9$46%NuǠb*Ѯ5t:Z"anr(( !p`0ǣ#W@j$L]]B$N=SMMi?Шا,G7Ab6ұ]HxA+""Jx S]cOr2X.TnG#R3ɑI&!h4m92p݌='<֥ &28oH1)%}R6_[A75sdɏP"d: {^ljY$ffa4+xu$||gNhmiF(P[X_ JRjw R^:O(?[4 wJUQ$Ca_+\T\P _kК}~KtuT #j*5|~m`geH=e'9!c]-9 f~ח V&}Nke+ؑܯ?b2VF.6 J9* o[Xu\^WlmS>v Fa@cCGu򠖂 BĶ\=|ʦ(h [i:=yAQ5}$rcF{ԇy&.PO/q*.=__?b- D rN{#IWÕHm&/>3 7 u<˲"ڦ0w܄ٯ|$A[A\<ǣbe`}**¥WA49mFWcVo>j'KdҩO(.(,/t4K\4C&ӟL0ع,ϵ?14Zkf<9LsffΦ%v) lT<6]-.$;iO{Z0@͆D ܇.F۶ɿ;FSs梜SV1q!yu=L$q h.yxΣmgy(Ų,.E~l:RVMgMMa$JAPV$zˎfȞ85ǥ|ag.efC#$Ht٭NIi=?~<eH)9 J0xnxlSNY$XIjRKTLck[ۈh|Vi\5(HpCkjazOiO☍)'(!p`Wvw2KL'?>N(^ȿ;Nlm̿#{6FS GL8IdF࢟GZGiӬIDATɺ ¾R<6[cZv;ǣuYY4,Bo)|<>R\,h&J틋h> % +>mC JwJܸUh+)1T<7~(-ʁx tfz*T:hZW{v*]Z#bD\yz~ZHU޸Up(!=%ayRmAap㵙/L<RFzď ţpsJBx.SCl?b.rAP<#{ճRRA֕K3#h} CJ)tY[ MG&}BLAu>}]rrAj}Gf39DoF.-/LRs4kSglj×tzh$NAyRS~9vS{X9|jxڻ'/?w{g/i/+[ZuU1#y-y$ȍft.`?ͅ٭'ΒIan{ 3r~,"&+nH2bv M~n1~>MM][[q]NmO휏Y #0]bofe<o*/chXln} Y昸{qfQ=fʥ ;x'dh6T²)Zɡh0⊩󘦁) 7a`R]#u&ܶpa~3 7E.1\W70b_;jU_STm?Lԡ8z5XJt>4lAؚx$nj+ Jjz@5ÉCC&v>ir:#aric!Jx k]cOr2X.TnG#R3ɑI&!h4m{ƕoF@ @eZD +A"H2)&FlB7{nڇl>[{)4X Tp:F 0*}HIo9ȣ3g7\ U׵y̿{s#L ;)%m-[ifܼ":d0!xţ[jiU>gޭX[ ,Pȯa@tF)l븃w"ԇYBn]>mL14n#_(q(S =u ZD%1V<]gK=K: @X` ) zSbIoj_Q,mwR* 'R.~N^(X(1f1S珻llG_Kknak:t]c"#5+0fP~,@ xZK*oCa&32ޝG4?,?B`3N־cU, Vꎸ^v'?EQo>;`)$aRJ -B]=ƣ8X0`!$A%0Pu_Yz7׭n !Ln|tu ?J&!aX,5i7>0{) kW+XXzsod +ɝ̧V>F 4TUK;Bzzg#<;Fjnt@ s9$Bmq9\|f :@۳Pצ?4Svn( y~:Snl/I* 'L!dAο5&j$(SJmzn@ KE} 2ƍ?^w_ .DU8־ˣoAhV[1IW?1Uq,2SXzd߯{y \&?" [XMg]!L"w7x2^~Caذ$0K!wţ<#3]۪֞"ryĄo#4hꋪ?6mS?"/Iew`J&o xc x쮯6i;{)R3 %t4¡xB>c}E"^r )躎n&em0i$5k1%vCLJ \]Xē1H! - faYi* qW<€2!?]7alǷz4LD&e̾bgC!~ܝ@TD~<kFet{i2cYL)1BHG1rtR CK;B@3z˩"LK;VGBc@G*BPxseDzN0v S*;BP)A;y|{| %3D?_L"F! >8^Gp'vOmEٹ c*rzٟrƽ; ە3Jà>;eEKI _Ee L"}1Ly*ǥL!/ţy#;-7rjۍn*t)$9BGi@0Yòn>HħB+(/1֦5hOL8#x_^)X{V\+XCr 3 {];xS3hCUa@Haht7:_ ! ]-nz>I6 jcg݋^ӗHcف:`J zn0`[=17j&0fLC9iM_J4MWy|;= !xEQ0w%x:^V*!}7DJ1*3s)! IpkK|'1{9&j$(;%Q* -n % YC I#s&{,ۆH[/0PϪ^˸O|sP+QD7+$(n}?dH#vuWR ӑ6 * ǧBO811}DQT=ڣ2_ߨذt,hTz6Z1NМ!XT<x* w{诱cUn#аOX* _xh^:O'H%з зȾ=|odĐZ_МA yO4k|qhP6jۨ4np$I$IgQi`!7ƣ2;ɖ;Č(vOط{I TfpU@xe]kςc4fKK;c<;B)S Vɨ{حL;{~ܮt32gV9MKkiAcKK;vXQvBPG@$P82z[3rn˟hW_m9`|ii[VU.U<-2s Eᥲ}V^Pbv~ TԇS8ٶXrRtԸӴas7P(P?v|eQ߱\aXOۈ/1G <#j +߮"s%sh,@S2/[vCtpoofKK;?64_avn0o\ٕea Io5G7A2ҳXAomxe) D}O>,rwx*GmD}O>@Z2O>'Dp1'D}O}O>'DN872!B4W@!Q?/$A!P_@$BB!d$_K"1.}n*IENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/SongEditorSelectMode.png000066400000000000000000000555501211146647700237570ustar00rootroot00000000000000PNG  IHDRbKGD pHYs/ IDATxhWE3@Ki`%ŅʴP6bZ<MnX}OzOs^.N lH $0F ؠ%GNl'?/ǟ933f>}>sGrBNAA jԙVq7 #|? :@Ί  ;B4oXN  El(YAa[nCA]#ه^qaG*1Bℍo;k T@7`1(> S2}uݡ۶͕%Ё_8=h;Ycn\2wá|υ|?rݨRa3 n]|4MLl}r *߻sQ1\  ZAJ ^y{7/Wo9\Q!ubj,ֺ'd"`nMܙQ.%<|k 2m&YLOLݬhH0fQU &,oR|u_7$l>z'ͥ,S_| fR|p5vTEA(H+7xOI\e^(( aՌa >z~Σ:6yr[dv߾ f$n8gf}nVVРf$nǸDjh 0m7K1qWm_7ޠeUTAV;]%PS-L1U1Éuv^pzj>ZCx|(;qjҦ<ѰLS\iZZGwrg'x61_)?AyT>7u\hxcө&hjZpq8xQzS-\r&zRĉ8jo2m{&^}%NQĵ(RŌg"xb1 tQ2/[OƋ {~ǰIX&@AuAd[+nr!fv%: NM1E1"{tddcq!1br.Σ0H#LfSㆋu{G>E>:TZOdO[{Xqpf)'Q_qL% ~9m~y]Ma@~,܍*4¹SB=Tj1ZɥɗGr*A=0Vx} a'i1~#vxXK ii#4U4Ws7$?D'6IDfվ+=` E=\^ }sPefCEY" F~#>mii3wB~lM05w.$|U&c+1dUXAQ+^~4ٿ_Ep  r)RMȜ)R$NX8=',t3L,<|]{}N{MAA8(Nh[MM\PPhRP=@)Z'~$Mq1&!` 5[# Omdҙ۔%lۆhc=)+r,,'~ ?>b C?44## pecM\Rbe[ <>Qy.'O$>Ax7?dS-7/N $>O$>A S-ZTO$>O7}Z($>O$>x9u RW6u'ԋ1%$>Ox<)E(⍫\4sٞjl{څE}u.,I/0r?<1,bɞR_EbH)*S\* Fmdϥj#o6C^?_|V1  mym=;l X6"~'TyRqu pΜ}g :B,g2V,4 (y1qսo:36 6.=DAxzcK9Zn&GGAGGȾ8e&0tlw'W={uRIkYtl@A3z1Dw/nHAZYp`:ws7s<A^cr<D9ZE@u4 ƞ.mnx+F4oP9j rXDcgyX#0 _C vN9ٗmǿxjc Wqt0=* }wSdҙ17CۺyQ}='Dvж;1 vyZFFFx{x>Z3^ 0&xk˷V}5hߖ.'22BNJ> +w+urgR<}*h"10CGa蠯ݹ7%7큙 _O~~ <0$_I=ѿx̯|zil33EAsmӷ㯧A^+Xtn~9Ɠ˙?xlGSnI27~[O%Sx UW<k>*fe(MO?qwIi`Dtcl{;ۄA.ccg?ΏKcwh?!s<6k/E?at6C F@iƀP%(}?PunVn䭉GG+tOM͟{wjX;㠢BkMqHmh4;ץ^>ٳYk ;}ܖ/anmw8qN+x4QߓO"~2D& :2'O>$P[ ު/3_Q?;k>v%zr<,c x >@x6?z},|nhyGTs4*٭Нrs<2}}X.TʾjM|OaT+"fܟpddNaW}T"CkS͠=z?ڭ߮aa ׷bho^C>1c~7ohF ɱj[9fWo?#~v*kWCaݪ&fC?}_tNjSO55B*ۄ4/_f8x+K$ L<0¼rn:Vfxnz=Xؤߖeſ.t'cu1w+[ o:@sYzo ջi8oJ)rc9JKS9߇_g/u;"񷕄1iTۇS1ȽUIzE{3J3z~--]-q,NX?yü%Z{+veO/I0 |okq_Y s6d.yGzWkw(\d8\z OnGp@9_i?ܫã~tRn㡛7YmL [/+_x鷿xjc;.\{f|A=X *O[w]9wn_2nѯ.Ļ|[ou!›vؓ/l8ϓo]ضAr<Ax >~>s:DAY㹖OӋ듡   f|n!{.GyS'ܖ_EJK ~d$$4_ {WG_+c0ˋ,~=G^gdd񷧰mo? ks9KQ<$A80Pji7D~Wfܶ) f]F0O&P*a/ ˝`> >ba\: __%X O&_]8*ܸ}"u s e): _]T2G%jV=_* |Ϧ|D\*u@ @l$'JhoΕw`1ȟwajk&L 00)E/?>]v㧔1zb_ 2r͎M94 tSxDr<A9qTM?>pqRg2dM٧(e+pq~~ Mε(,b}2wGFtCBp:XGF0+c=دaQR4d8@cO9 u˜n >2gs}ga?lRJ!gxTֈA=xh;C&'N;քl2*+wx.gb#,A(\RPV޲ /FaHc޲׷RRA̙  CJ)tY] MG& ˈ)hQ1n@qw>nF9)3AG8׭zKOF܇.-/LRs4Smj] Sg8lXmPPU}ntvS_9zjt躃ڻ'/>u{|SP|Ǐ)9V^#誘IV;q]nSb@tXvKz |>\O;N;0tsG짷5Z8 -~G<H2bf M~"h¦Z?ste|%7Fȟ$(rYd [R<49nt4)Gjw9G*P(t,(7>9aOf?*̯(+m)+o闄M$aoPU}Ǚy?_f j1/Y$7n1fY[q]Nm휏ԇy`,ֱm\V??a>eYL_CVnҧÀ[DIcBAQ<H2b|,|R L*wk&V:+c*(\/JIf ?pp"ZAL$lrS<_]È~oUUULQX*Rb0Q`f$H%覦x%aْ'Bb IDAT!5H#i6(ݫQUnw֌&FA oN>P6d"X>>45~}#ڼ3 gK CWA#6vu΁f`l:I&¹R{ܭ??T 2t>qw=SavݏvﯡֹLHvbB\%Ar<ADh5 s<;?lP}΄y7K赀v_eFFS#-~Mi?Шا,G7A b6}"s6 :Q$Ca?+/:~# sv u;1vL2 1E#zyt'ׅI&2oHIASc RJl?{.=[GL&1fɷsN!JŽϙoV_kJh1MIqXG§Qʷ:u`DSnL3F*jd nWR{s<<o/b)( !.c+Cwb(5hMSvץRuzWn;Tkvii ]8RW7 :!k]-9 /o.LN:nHWl#۹[#~d\lAſ6(TߖK-WpaXgS>v /FaHc#Gu򠖂 BĶ\=zʦ(h [i;}yAQ%O>C?鿴oʥn[8]0 ̙mi}0[91y&ʡbӟ i~vĩcFA&"sGgA!V.iwo$ uZie yFOB{'ϲn?omS>RO *wuuH1 S P=ʌ( {AWT"N|iwnkX6 $bwi4ضM 4әr;xZA[9a&X'ȿFXw{uN |˲1 72|^>TxJC+9bX n[L=.ԤpztҮ8.zMSVk?b0p(~] ִ޶": bg_]yb~?Ol+cZYZ ;?$&_N zu\'J+A6#q*~ *CZ@( l6mM㡔4"N욎i<݊}nti?@ޜI1v+1/Jx 9]n+e2dfpR0|2!tH$zVNrR~2ѱF{ڨtJL舒 9 ^0xnxlSN]^$XIiRKTLcm 4>J+|4M. J$Nx+Aɡ⡚i~RZi ,ϡ Dp/Jx k]cLO=㱰~#L=AhDȞ͠єS6GL??IL2:7oⱾ~Z_,Lwɷ覦x$b: {^ljMofpO4,Bo9|<>R\*j&JKhN,KnW}lۆnvV.6SbۭxiU8l`^ k覦zSzFNݝJOȵX.Q*WO1Я~/}ryHY+ Z AؗǞؒ԰~ 0o.LN<RFzď ţp}JBx Հ.SCl?bK.rAR>#{շRRA֕K3g2Rt7AcL:Ѕf=b} mbb#o̙#缷׾~nj pnT2Iqt>O_2yma8J)f?{kvS_9zjt躃ڻ'/>u{|^o_"3KmQZ]7๎3gыv#WA4:-}n}> BW1 =ʍeO`4{SY43ʷw5)J hgyJ [p%a~-qnqza?qfWY${6`kz 5Y$7b- lT<6]- #z [g=IvD 4dFZh>n1fY[q]Nm휏Y [0:0͞yJ=T^"_:G,7&fPX-J޳eRAR<H2b|,1+pʤr֮:arhb5XWVZW".fu(^ 67{.u U=$)[r<Ax9 n{5Jn= КDH;X4G94&L@aGx_wهoDg!]T+x ţKsu4gI2}n`C'fgSTz *:]_Cw)s٧eqkã×>fZ'ʂx l#H˳A:&.,/}SMQΊc6y@b`<'~JKk\buǹhQ>$CA%a7r<֯sWzS?i,lJ0ѳ *opÐ{3TR=a$1r$yؤrQ~JKs}v(_Mp(Jx kcZ+ ;>gY}Y\*4M&ť ` F)Q*l_nL3F*j#ZWàtڛ1bK ¾Wu{{޾Dg(ۢxњi-գum=Bv 羃8a9›-|+Gaod1b$J+A6#q*~ *CZ@( l6mM㡔4"N욎i<݊}ntѷ-`T9JIү%)K$H (1"ѯ^v,Clq9.?(3>H7Dn(N;= '=.}>׶G{rƮ)KRJ  x^mC JJ\Qh+)1V<՟lv·( !_.c١ꕿP蠁njwj=wjTzݩk\r'5pzu]r$$Ca){*cKvS 2ڂ Ǐf?H>Y19vZp\FRJz1=#A`o G<j-/\+B!bH;~Ą]vj#01|Go)< +Fgd) )nF9)3AG8yo})z| 4>t),nyd|:mSdn3ȶ=², ~_t`ŧv6ruwO^|OݾDg('wv\ں誘w= RƲ[Իȍe0TVq, dRsG짷e1A.Xt oewF7K 'l9F6Em:uѭ4์gFQJQ\*QVOL沌$5[Aؒ1ty|haHY (\ ]TB,(7>9a _VY43ʷw5)J hgyJ [p%a~-qnqza?qfWY${6`kz 5Y$7 jR L*wk&V:+c*(\/JIf ?pp"ZAL$lrS<_]È~oUUULQX*Rb0Q赠1nI=,"ߞ[U%aْ!5Htnj Jjnz@5##& }}7'xC L2O,jy^_e?_ǯo8]c#OJR,EIAQ<94g~_@3~6$Nw=pqȟ *}rHhv6%NǠb*ծ5t:Z"anJ(( !p`0ǣ#.W@L(x^ HlUfTLa45:bG c6y@b`<'~JKG┍u x_Q$Ca*/:~# sv u;1vL2 1En˽#ͨq}]d,SN0F45 dAF++&{.C,qUd YCa+1S-땄3߬,.Zc&QROou|'ff4U K%0(ݮD+x o?sQkE>qFAVR*Jx kPJk ZSԯuTaZ]}ZxZgWw_-]y3!9 N[9[ؒ!+?/"ZD~i㶌t;5GL_FX[iQ>@Zmy x޲K} uV0[hǏˮ\mATv7AcDBQGK).q-AxۧxAGk$]ӾK=覦hsvjnmWST˯G'_}-\|)f?v˻d+>~F;{S|??k٧n/@^um=Bv 羃8a9›-|+G`\5Q- x uɲEw>SkcmFWcFo?l3Jdҩ).(,/t4J\4C&3Op,ϕ?3 Zk<9LszfΦ%/v) lT<6]-.$i}n aЁ&7 ]mgt梜cV1VzI8I+n7>]Z˝GQ>eY\t ΠRI=j ;xHBMJaGJ+z4j#3_RPhM8߻m _/ &{6 .1f`8fۯśEZ\LP(PS#LoJ_ZZ +/lGT"W8U(,Qv;lڦӛ0C)iE&"5 xw ^_~cmc&jUAyx~vHː=qjK=̆ O0M"[9% NIi}ˠ~˲WrAAx^vS_9zjt躃ڻ'/>u{|SP|K{i{EW4wȎp\羋a: 7޽@n,:O,gǞ|#KL %#K3-Oo"b ] rN$#oA1O'r&l Kچٟu4|lR<}*-X##L]dM( {Ax it^9=Zyİ3|V;i}> BW1 =ʍeO`4{SY43ʷw5)J hgyJJ{z#I8l Jʸ83+,=_m05f~=֚,`5nWQѣ`Uzϯ;}Azew(%l vd$>O U 5%siR}b455xAu97F8a6+u,ad=f F,xBbR]퇉:G}K)FQ-9 [S<^DtCMMcA^ҭr[f4`d>61~sQ:00$(@Ģ]QfDz"}l:ML _DIAQ<94g~_@3~6$Nw=pqȟ *}rHhv6%NǠb*ծ5t:O MuɜIa$Cr<ADVG}G] ԙ0Qtf x̨hjtdrVUɕ?T}"|tT fS)-]}_hWǿ]A p@1tBi5y ʤ^s ݇in}zP>\oB.`V~0RApA 3`aF#Yr$َ093~#ΜF\:TA!/qdxt8\Zx7sͤp<5crxIpw]Rd cr a 3 *tyR_7 Ә͸yEJu`B9G<=?Ҫ$ }μ[}!AY_+4-2>RXq#:Emܚk}2C(zRcw5>ط?AAg.uGQouƶp8LW/eߟ>\DBa;)4i-Ⱦ3yBaOXxoѨr(eB!\:;IX>[߮-c+i7BS+;: CSNOVnߖ_ $^HQI8eB!+x4tô5 c,$7 Bs3"<+W`W?u4 !!_R$d9 뙅ܚ;=)f/aZXz\Y[Ȋ7}r'v|Q@#s1 UUG|%jYNv'p\L`lp"{ee>o0j3',#,o7{1 cۄԬ6,ţ(m罸N&K J1,B`wgDMeU _O =bD&øk 琈 yT,  &}> X '*}E| Kz/R<ˡGDa ms1IOo( cf !xcss1w[UuTDn-7pl^B}YݦmG]% ,R 1Oal7:mǷzO:"5@j&ᾄ[8TBx,~HK_L!}>]Q 6u\{/̴ۤ 2#br-DBNtIZ+gd RHBiS{YXV}Jc<!d0'OuGۜz~ʝ<= WcMjj Bu!`A,˂,?`8Ϊ0wl7ɺ!U%ذIi2@QH`!P8>¿^m(S?$/&9thE8iBBJ#u %dJ,6BehEܾk V_>%#}>1T*6TUxB x<]lTVCE( VsyciiZ֮rJ$ko>I _АkAUU hnE7%Fţ~!_ m2Jc<!Ǩc<SOE!EQ(=(7+=(A^M4hb=t+hORTw݁xBȸ)G.ƣrU;7ˇZ&һg=0?vZy";]ZZϚȤ7Sl!Z⑻ ((/`ڨnb;mXfy,ˑI8{BQ=[N*uhiBhRo95SiijZhBx HH%S0@HO~X)ƶuJegC!ʺ98#58p9oz!D`{QuԷ'^SQr_27Zpë'd,~Զ]="}>De!V<<Yn+;[~{ll,x&HԬtWde0o0M@2}o\L!,շ/.gTө Ґ'-hoan)Ґ#r`I!_V<܋$=Vi";tLEn}Q[/SNuarJit؇r s!q+5޻hV7 I'I w7Oᨔ !x!_9=ZXİ~'ANmM.$7B(s1 lp3 {yXg]]Bt}Yh"w%"ڴmg$#}>kq B`\LA>%zf!wOcojP_v};@2 I0 8fy@+!EBtQg0;Ɇ!Qm{{B@T݋tBx̿8;8P]UQϭLV˺g?#VmZÄ<i(#mw ) s*/wf!( .;PǭoVJ+GFxkߍ<p\J!CR<!Iz^L$ NI7~}CwC: pDµBÐBrwH܁I˶&Vz8`<'*W3S3NPUUu\̊M1rl#ǣ[»dߝl&$/os3H@H22H%@U@wuuXxoeIxD̓4{!9 @a<A!GZǣZZϙw/V4! 2S2kEP&ݧQ :`D]Ȳ7h%4X1@F˔]7Hyx'&V~q(S2,<,ۦB9ǑX|zIK,!!Pԛ4P,M:%εQj~Z1B/W:)7]D5Xzwfc<!)+ƣrC^މB9K-zl\i)w,2"2fL!?jmG2X*pGmcB ,<Ȥ m !xɊ%˶%B0wB!ˠxB!ˠxB! B! *BT<!22xB!ddP BȠA!AŃB!#!BFB! *BT<!22xB!ddP BȠA!AŃB!#!BFB! *BT<!22xB!ddP BȠA!уj]*7Z{GƟOz>_Ae8|/P>Ҩ< z:JKK;fv,pÛ|8h {6 s)Pj#_};soP_V>U zHOnCBXm-E$m۴cfkC鏖>>i@KEzS2He.e0rmZZ=V9S`)u~-ԁ?x:7_[Giǰr;7xʲ 0x$GUU\NK_ WRY,OpӶ 'DO; <ö}O>'DOGoK'D}Oxt}O>'DŃ>'D}OIh{vB! + BȨx?ƒM BP(/ FL_A!2 o$I9__IENDB`hydrogen-0.9.6-beta3/data/doc/img/nl/SongEditorSelectModeCopy.png000066400000000000000000000554731211146647700246160ustar00rootroot00000000000000PNG  IHDRbKGD pHYs/ IDATxhWE3@Ki`%ŅʴP6bZ<MnX}OzOs^.N lH $0F ؠ%GNl'?/0ǟ333f>}>sGrBNAA jԙVq7 #|? :@Ί  ;B4oXN  El(YAa[nCA]# ظ0#!q ʷ*fލ`1(> S2}uݡ۶͕%Ё_8=h;Ycn\2wá|υ|?rݨRa3 n]D:R>3\KPy3Z324dNL\H'Y[L`$׫ >z3M.msu) XH?2nI|NKY?f7SJ_ƒ̿AS!#qܨ>S6o&rsyˢ U3O+v0aI*!!x\>>~RRPuLeXۤ1 P넒.\@SΥ|NStϥz/ 4  ݬP_k0ph%G=)P1[ s8XGɓ#܊n= mmF&cqnVq>ngfuj ZkFfx|vsNk>  ްFԩ6&іz]YUHeޛhlvPOZ8f>r@ G#w_-Z>竿36Vۥ+ l7hYCAx:Վam <Todp{}U pbpy:8\ާZꁏ֐8Ns3N4-S~ΖVyQ2s출/ "} 7#𢣛}6 Oǰ~kr>|l:Ԣф9 R?5}^Q>R%j'!;HS&SV>nՇ{]_K\,Ux/)!`M&ώyzmHݰG:_Jx X6 ˤ! <ұ.Xla-C.̮QP¡ #h45Fdl Às7|2m/P>6@S}K2w Mp.:PuVri\/Fa36f|XI~lxLH/pgNRBZM~ 7Ͽ.xfj,ͺpF̥d$zCQ4WW7'p\6TY&1Y:erĹQH|qa^!?6w&rg;OlL> g1ܕ2+ / ?/"Z8viwNMZ&dJ)',&y>ͮ=M='  r'4s-馦T.Qx^}N[V([\z-}?qfTҦ⸘qW0 AĶmKE2۔%lۆc=)+r,,'~ ?>b C?44## pecM\Rbe[ <>Qy.'O$>O{'TK<S$>O$>O{ЧµyTˆ#"$>O$>M#$>O$>Ox)}jq]BrMe G Aɸ$>O09OJ.mDx*~6M\!ޯvfk_]?A ߆,S 6O <6XWpRRJy$׾ ~s) 5>ţ͐iW %_77c`oѳ( Oxl)cÖQQ89/gfɷ2L$*  :տbO,^T"Z<lPLǪީ2r>G[>hP7VNjhAWض/@?QV89}MK۲=Û䳶;Tzg;Vq1QX|: &m/Sǡxj;o˶}_<1﫸s ͞ejo)2LzxG\"u]JKA졶O?ݷ֚?v۶M큷Ǻ}҆}udu:9ZӹT=GԳB+N_|/h"ٷ^ )ѹ!?9-PYxs3M`iXAjYy>1cCٱ,Q*t(0,|smuJ;ٱ,xROL5µ5}Ϟˢ) }6K\¾oB)[舌=ePz(UW>pqy:r# p߭߁Y<.3?222(8hqtSSZG##mKEe`-Z=H%כ}!mۡTTzo@kMLFA\Q<ۡŽFO'6x45Ql_Oq/I$Fحlp_$J\G{~%ɟjۛ'1ݥɩqV!dq[c[)31Xxo>a>tuſU6iq||fgOICDfuP[aJonon} hDG5lj~HgV`4۽Ӱ t܌C{WRD큙 _O__ˆp~Tt _xk̯|=V 6ə{_c9l߶S  :7C AQv)5z* 8?M$Oxe^ye;zoHI7*~(21 c߶IVС>nI27~[O%Sx?Bkr<4zpJv?O\eRd7/}9X:/ކEۇۄAm?\v~E>?~8Cxl<_(m8x$U}}bϾn:7hv D7@zߣƦScN vxTRh). M\z{u|'{6KV`- a' mN<>nSY؟ icFԫ{ _^]OfȄA?_fd}ɇjw떷__/WԮ_/>O?1c~c Ǭ1 XbCFc+9)M?N7/>ffzh ~D;Orݪݹ):ZߡM?8nvbRq*z7 h4y~>}¦R'sý9!?8}_MR^TL7Xo?[]m~nه7n/_͍f8s<6iw^fdq[P9[[h4ü~9fP9^  WMV01+ ;;4ajkkU 3iU_ͰV*H$y`3ywUy<+ (!{l I-] ;^Ob<9RWO<ù O;0ua]$1w;*#q|xRrn; s ###>_;vDo+ y/b 4~c{#G+۫xL5YK~W o'2='xf} ;۝ý:vO"n=y†<օmۿ{a$Ca 1{>iSvɉ {5#>!nM`BJ)[,x Ѻ AEAW<~%9r] :[l݌^>{~#!AV>ʐ KSz-{Ruܦv6rue{^۩xk<>܇.;&'?\"IF3 2.Ka\Wׂrߣ+A8lS--(Wkw0!Uwa1z}efU[p} v7rGeAϮ(}sL^ھxDf ר~_ _1Xܛy#~a{ s9JΛ"??D8R.RZ*##&M& jgܛ(ܸJ<> _I_^d9:###=m}YU X HQ^*! QPꐢ^ՕL%|Y2fE n+lGĵΡb __˶덞Nbqd0\Vi.}&mRtPoOa R:L# e?~Jy. s.َA@1ؘIgJJ?GJ$Ca*ϜA?]!3)<'u&CD}*R&ν 7 Nz \*qO&/hH{n螧iUxDYADkK<}ѵ~sH5]~9At̙,sy^vZu=Z3_ƞ"EJ >ADBH$ C(UM LaqjNTC XGhCa~5Lp#> -Aǰ7m77{ZhB)֚0z:I\?egsd(\ƕ?^>{赀i&"AئZ-mx;  }{#ѓ&anFvlKCkhBubIȽ9AP<nѤ1[SOK)ASK.rAR:ǣ#A"5#?s&R]nF xlIg2b uTLu>}]vrAj}GLwuv=覦KfqK%Mg}M^;ޞAvLO  JV|jkC GO]wɋOg>AyyoϿ|~pP<~OhѴ\EWTOݶwÜRƲ[Իȍe0Tgr~v=}L:I\0dgh acԊ;=Ɉś%t@ 6 h=fئQ+KO9Joqձ??IQ( {Ax ichSvrZG*P(t,(7>9aOf?*̯(+e)+oᗄM$aoPU}Ǚy?_f j1/Y$7OE)eC&v} C+w`1MSI%x8GtlF &jox]c6 )am*ԪN*(,u1~CqZi{3g tSS툒lA IDATؚx$E4V(*@kF FFLc# `}7&xC L2O,>>45~}#ڼ3 gK CWA#6vu΁f`l:I&¹R{ܭ??T 2t>qw>Sa_Cw)sґrR*Jx (|O˳A:E,,/}SMQΊc6y@b`<'~JKzEltt)9$H ~V<^y<6.M4G@@Ev4"5cdbFܛ92$45;N Le &ȑ< 7H\{Lcod Ca+1S-땄3߬,.Zc&QROou|'\ff4U K%0(ݮD3x o?奵<o/b)OAϊ 1ٕ;Uq1v_R:=Wn;Tkvii ]SWrdA؊5ŖA_g~7 &'Nk+ؑܭ?b2zF.6 Jy* o[%]+^8W3bD;~Ą]vj#01tG#V:RJyPKA!b[g.=e  4-kѼ (ۤx&\:ZJ)tim 5>c:Z&"]G75F˵TskK}-~=Z|u5;ޞ~vVũQQ|nvS_9zjt躃wO^|>|~x{EN-.{AL o涴>b^?AɷrgCb] q*اhIȿ3\mA!bKvI,~]DxfBӣpО?I,+e { Aտ.)f?!q*jGeao؂ 9]۝,[t / b*| tL31#rx#~Fo?l3Jdҩ).(,/t4J\4C&3Op,ϕ?3 Zk<9Lsz}}hP8}ֺ8RnUA`Z~WK=nZv.ύe@"}Fmߙ@9(羃뻬tLH7Dn(vz@NJ{\W&:hnUɜIQ$C+'O c1ډ ׋k>W=۵SXgyk1 1MB6J>erxypX'Cn,y|s: 9 Zxaج~7Sydx,߈;dfP(;9g3h4o|SO9o .ۭx_VW},ߝd,),ɼ2 žW<6cZv;ǣu[Y&2M,bP[5O먉Rťrj'v% 7>mC JJ\Qh+)1V<4W*`6[xEQAxp93U]5T@ tSSSWS|һݝJOVϵX.Q*WO1Я~/}ry`OY+ Z AؗǞؒ԰~ 0o.LN<RFzď ţp}JBx ՀNSCl?bK.rAR>#շRRA֙K3g2Rt7AcL:Ѕf=b} mbb#o̙#Ǽ׾~nj pnT2Iqt֧N/<60ua]y5;Xݯ =5:tAۻ'/>O|~mⱥK[]S!;q].޲a@tXvKz ꬟Y.n vn,ӞEG2 BC\Ӳ;=Ɉś%t@ 6 Rag :Zons9g${G ۛit^9=Zyİ|V&Z> BW1Ρ =ʍeO`4{SY43ʷw5)J hgyJ [p%a~-qnqza;qfWY${6`kz 5Y$7b- lT<6]- #z [g>IvDcYknAI\T2|#z4~h`x3MM̭.^PvݲvG,a-{ bofe<o*/hXěE{3 M(,U%a2s ) v'1>ޘRXV8dR[kw09r F\1^4P1EzT" L7KAxNo: bү&>f F,xBbR]퇉:Gڛ=:jH_Q-9 [S<^mUjҽ[v}hh"Ȉ}lbuHaa`I& RQ0EGx_wهoDg!]T+x ţKcu4gI2}n`C'fgQT| *:]u?۽R6ZOl ֆG/}<µCOA8؊GQdg+ u&L]YB$^**0e1ex> Ohk\buǹhQ>$CA%a7r<ϛsWzS?i,lJ0ѳ *opÐ{3TR=a$1r$yؤrQ~JKs}v(_Mp(Jx kcZ+ ;>fY}Y\*4M&ť ` F)Q*ܾ|'\ff4U K%F4Av%)7c)/gŖA}xVGwb(5hMSvץRuzvT 3PVnW{V:0ٕ3^n[_AϊNjk^鉋-9 /o.LN:nKOWl#۹[#~d\lAſ6(Tߖ0K-WpbXgS>v /FaHc#Gu򠖂 BĶ\?zʦ(h [i;}yAQ(khw=Of6?OP<~OhѴʖѺ! sqe0ȜIqܖSL#3?3V۝Gk}8^\lA!⇍qS+bO`"p&6S OڟeYho-Sϥl `~lAaxcN-ޜ:ˑx8l@3|eA~ץg(.ȤSe3OS\*QX*_24i?),p﹡Bqd&z>W8'3h<o0-ϵG~vڭhMoIKJAa-j1v'Mk}2LZAX6 $bwi4ضM 4r;xZA[9a&X'ȿF{,뼝6S?D(eq!_{GL&dtF=j ;xVϼDMJaJ5MZAA̯¡uT2T8Z6n{׋(ɞM0u硋}f<<'kfj;S, Tz+@igu=lb,P,DIc 0x$N%uMBaخ=h$Nb`Af6ք9J)L3 ,2ɮVӭx^_Jk}7VGJ)?"I&ʢRIŐy<A<C?ղ9vM7EXeY,xciRUc5Q*ܾTY᣹ EU۶![%(͔v+u m?Yb;CAد 1PU~_C t@75;z;5w*ݩk\r'5pzu]r$$Ca){*cKvS ڂ Ǐf?H>Y19vZp\zRJz1=#A`o G<j-/+B!bH;~Ą]vj#01|Go)< 3Fgd) )nF9)3AG8yo})z| 4>t),nydO_2d[FȞMaYTPU}ntvS_9zjt躃wO^|>{}{9=si뢫b ;dG8s[0 HNniS^ 7PS?˅٭X%Ȧ3Oo$b ] 1sN$#oA1O'r&l Kچٟu4|l[i8jus)'όTTbe1EIk %cM#ANk( ]T8B,(7>9a _VY43ʷw5)J hgyJ [p%a~-qnqza;qfWY${6`kz 5Y$7q,T)fdϥI%7ҺGq7s uj-{\o|b޲y`,ֱm\V??a>eYL>☇sHz_ɜMmTa;ܓˆ5)eC&v} C+w`1MSI%x8GtlF &jox]c6 )am*ԪN*(,u1~CqZ۾noI=,"ߞ[U%aْ!5Hpnj Jjnz@5##& }}7&xC L2O,>>45~}#׾_qFȟ$X. 9 xsRթ#pe0 nW),W'ct͔ڛ1: ׊}FrUA׊ 1ٕ;Uq1v_R:=Wn;Tkvii ]Sn׮Olol I\{oYKb FcbROzd4lHh4m;h453w{}ɷr \4MDZNZvcYe5yMJu.L2zʦpS=e [R<4:-ֻ©ULs(BrcY#Mn̯]jRB*9Y~RH%lү%1~ҭ2C/lg< 7dfWu_Of/2GM>%o{}uTbFhf.г+}_Aj]- #z [g>IvDcJF7à${.M*u=?4[LvVp\/Snz;#F>oe7l2xRqQ,bn}ɷ1VǵEQ-3 `{cP P L*wk&V:+c*(\/JIf ?pp"ZAL$lrS<_]È~oUUULQX*Rb0Q赠O{})—h"J%Cak 㑈nȺi6(ݫQUnw֌&FA oL>P6d"X}y}u}hjFԿٱ,ips!N9b|,Q$CAv._9 M'ɤS8]j\5'>AFES1 tmnKh~틁u 'Dž&TdΤ[!9 x@+ǣ=.W@L(x^ HlUfTLa45:bG9+yʟp(>ex> Om ȑ0%Ar<AYpi9?`u5^ TN`B#kM$IP\@,t݀(@d2]p}Ge߂׭~ bBb@=Yd.xȾ_k(s! JM~D$1C*Dnd°aQI8aBHGyv+uFɯa (gdH>^)$ yX{TUBݜ\tSbZmTe?yBKm*OaY%Oͣ嶲k]9}all'}oMKNW I{EQ sD8 $^!s9޻R}2~Fu<ʐ0% yˊڲ]F1fp掛}~. 9",DB}qhý8Nca*sLT?{Qw+gA}$wʋ 2[qAR㽋fm=}@*DbərwTKBH_G1NޣG w[nԶOTRHrs(\2PG*`>e }Ս/@+O׽V("Qp_b*Mk86 0qF"񾻿ܽ<S|s7!V32gr4Xvf Eew߇$00 (@otBZ$N|Clնκa!DսH/%uJܕ P( a+(o{Vc>2oԦ5La̾r6vgi0w+}{B(`Ju, T <^)=2B[n0cTfRB֖ NcrM$IPwJUZ#KG"L4X ]7x]v7_ԓ+a>1Uq6¡W~rIoW IȭQ2 ~ȐNG -놯ç#m9TO1ҟqlc^J!{ud*P,2xBȱVDTMRr4hsi7vc1mѩ?fNASLjv5`??vcx ?j;v҃;wN tNLz;u~vOs0VOuTI fUU.3ƃ-cf%S6LSb%MT*}/ϯ=?A\~'p.p[Sp*+gAS2c'D}:Y>0T<>'D}:>*e.=bK}O>ѧb<8O>'DD}O>$ţqUodB!2h~ïB!_  H6oB!CpkI3 !B0HDb&ѠHWIENDB`hydrogen-0.9.6-beta3/data/doc/img/pattern_properties.png000066400000000000000000000205271211146647700232510ustar00rootroot00000000000000PNG  IHDR3J^8sBITOtEXtSoftwaregnome-screenshot> IDATxy\LE+H\[d+!.7[~/,]g)!]DvBEB2hߛ*35QәyƼuh@Dw %A$J&H"LD("P2D K&2l_L\]5>Y :&];Ѽ &baױ^tA#jI\<;iwYz$?vŖF}˪:6Qk/?Sh% -vFL\l3TH |ri(>.;cN}~ܜ{/W:dj`ؘ{G׏T]߲nn]ٰ0 {yP}#\;W0/ʉycq'aޠzuf&Ɔvnl3&m ;ׯ5 A *q&Mm9Md)9\vI7uTh>R!EYz9c7c7d^ Wrje: 3Oyernc+4B;@RwRx_6[_OJAAEJexkCdT'8y7m^<.y 3.)kIJs8Y-,J1%͌^(l_'_'gW0e 8Im[ "%-g6i֬z(fsMaZ]f&@Њ AhcgM=l̾Ncpi`f+ꌧL-cM+fV_c8YBWί-~GK/,kkmAy{ܳJ6NMU& f*w\tyb:i_tH4`Q4: akң䀅T&MI{ lzC{JE`GM `]ݖvlq_WTu5RSUQ 7DuZv\dyi}Cω?x}#)'=W;py騰=&,.|ʔ(~Zqi݉&+ݼS扸ƣӺN. ;y"4|]xZy3zH tԃ %A$ie߻AZBLD("P2Dd"$BDI %A$J&H"LD¿9mJCC 28?7e$SΩ Ad`z8$SK.zz2832<{ _K R%A$x`]\/lV]:{~AGT4l^3k?@r~]Sɡul#]?8lM||P`U~5BGqQ[w]oJS4*ζ[jPwxCya!Q973?gMwmyk a9mD'|R/1'}|1T2g1/USt܃Wy%|+ղ+ }f9?=t[/mEc7{ )c0ԇiHN "hJB̻Ւ5-{.\NO vlUIL^A1xŬThdߗ홿;hdǡ{fi J{}0Jxڎ#EDB4z7;SON|-`Hk=5).ܫz_RRrԥn#l._L8W3jA*Q_)]M^zI{򭉿Ĩ ~go8^m&JpRJ:U܀eeGLME e&#+ w_qv #'bAZ%qa9 ?<)9e,S_lcC1k94{EE) {T Hp~gw0PL؝A ׎Y,?0EӬ+qfFa 'H*J+#p00YM't&Z)98{0nvJ9q; |G_~S Aߙ J*pMk #u%.rXEG,~\kittaE'SmOͺRAȗGxq(boG4Ԗs`Cؐ~FyAӍ'OU1׉*zꓨ/NI~ f_r5 &"MؘU4e8IdxoAD#[Y7 %A$J&H")L&:Ds:AY@ŭ/#$Ǔg!H'g@~nfDHq&HLD("P2Dd"$BDI %A$J&H"rFvAm31abb];Ѽ'j]ҧ^$ R>?iW,A+@ΩR(&-1`U?Tkc>t-%0Q6}>8Xz>PqȩJɏȳU٪ݺ=¬%%FUʠz9^ 9z;Yѡ7f%qK) G37ղe1&+`$uw^Չ#HDgb7c7d^ Wrja+x"V4^&a4S&WlL^qd m3izFX}ԝ<۬JT z8#, vAJg$Pu,q:h,-RG.ЬlulIy{s ܳlI]Q AW?޵򏛔u U*_r}%k,O^vg=if>{d֕u+O1'VtW3`dHv=SVQfDpa֒dLWPnQ"㷯aJ=F Q{,m:XXbEuQ#hO@2L&^VАºV5`얟ȅ7_t$7 }?A$J&H"LD("P2Dd"$BDI H=@v&Ɔ߸Iɯr[_FH2'A"ob.`oSH2zCD69ښx</R9۴;|)@J&tBȉ m>r_y,3?)C?md4l2Zk?❷BNg,UK iڛ_]8{ׁݝm{1Iq^Czi+;)bq_=8zY!pl#2?Ptc ahZSZ2/cOGx-x-=9,9!+$\z ԑ:FWprwIvhz O[X~f>dj?qHA M=yr>Mxw{MjmO誓!LȾC.`|E_z<;o֊U5$n;yЇ^*,2w2³w5뛙@̻Ւ5-{.\NoBL^A1xŬT \8]f/?:s~km$!ձ^\0}|'1EYBU`$m/{$;H 1S p;f_Ψ0>H>Qj;ޞhǹY,h;߶6W=/&PZ9~''N`I<$5).ܫerԥ~+G(ǧێp{Kt|<*g k3勩\`?a.3ԮslLvpo(;f7GXDj|\Tߟkҏ˵Id+ k8T9aM_g7>~UM_$F2ZzFNCqJTDd'UTTmsMf255 ! 8p:_F/5`lAwr0&_b|0sBD}4{\uY8f.hf82mbʶ Tylu;f-f5coM0syP٬)9V-N/y$~sMa)x[O|QD.xXur[.ٖj+-tl/ܑ,U"XkCqKs^ofQ4ͺRnfppblX`rKLwRj W%<5uJ-I\4_c_^"uah yY+^ X9 ooG,\aJ]U|>|x7 1]I3勮Sd1e$E}%j"ݪȫ-O?zW#y c&Q;6 Shk*26A}z^2RvhY 5 -F ʹ|b_Δ÷oobnn"b O P)Ƌ?|BXӓ/NgQ~qòߪ9i#&e{}u7 L (e5Ub.9CRr_j̗I) =;AaPqoyhLDi#"P2Dd"$BDI H4ѓ ׷>gTGG fU|#RLA, b>\|nJKf.2N)OakX^d;u<::Zlroj%#DǙ?{!S]m&5t.KHO vY@2A&~(I,]8]#4};v&U?vGvm09]I^#kK_?OblJ)3?vdo31yC)#꫐UֵSV. +HJv~ r^ 9p&1ʦ,$}ro`wY%l~s~'l@淋nu'XxD쌤אu{ 6#kV5m{jm=xm' C*Cdl;Yk Wo'xRtn~hU Y0RGrXPtݷ H5-fZSm_\6MjX`i  }tMR{0=+KG'Mr54MRTQ4ͺR򣯧1|S61P"}X3_8l&Li"0oU'6ZU^] >'l3lfmqϾuKLY_MsI'LYHf9ewG5ef&F=\m6&W#:O<\G/9pb?cՔdݼs 9MN|/k%Ah̹Au/ r"2;%t-ǕQhum,ʼ|F BvivB׳*XʉC(ٷdFM$CN0&UC_ >=>mЀ>yu4=ޅ| 2͔ۻyB*;%'])G)>:J:QIDATVo R Ў Ȕi?wj!͎jGY $SjOvnV,ud jt.K):A,̼G[I߻7C^~Kje|ɷW$\ť߻oDʓ)xC@D=]8^=2v)A~P8A$J&H"LD("P2Dd"$BDI %A$J&H+qu?IENDB`hydrogen-0.9.6-beta3/data/doc/img/quantBtn_off.png000066400000000000000000000012031211146647700217340ustar00rootroot00000000000000PNG  IHDRZbKGD pHYs  d_tIME,/dyIDATxnRQ׾p)F (@iĚ4'M8-| >ĤJشH^GBqoس[^-ݫb1Rvr!re !D!6=)~mD24~qvڨ~,v;G,kS.#~C8ơm+b5Iyk!ZxThډX=|Ǒs ˱7;DHM g g {yVt ]4ەGQ2/_HS[t9>ɳG4&V$'&MbMDh_J! /^1ߒ TZ'B Kqabl"HU>,{,9&N% Xne_`^.nDB,{\kwdn}wj' 4gXo4|X*+wW}\9*r9ƀs6*" !v=zAV_1jIENDB`hydrogen-0.9.6-beta3/data/doc/img/quantBtn_on.png000066400000000000000000000020071211146647700216010ustar00rootroot00000000000000PNG  IHDR-gAMA1_IDATxhUe?wmn"()I,$6!?V( M*b2 3)hF ɚ.j`cnݺmck=}l聇r|j=_UFR8k}Mu^ʠfƨk((9_~E92/4Te`VPU ;[74ulyY^|)M6-(/oOFE,9qЀ1p~܏8N"][Q$d)` !~'^:`ߌRRz1m* {K%Z֯1%mG=6w~ SQS2ƐS[hM-?0<Y"B"fZ ad$NaЀT`n<Cs-)W)ʼn w]Tžg;K{X!hG>յ+(M哘4*U72>:wҹm%hĂҾkn&]o>uH|)#lI , |epcy/^%'Ada LچsoD\+XhDw&bM0_K$uǝ @)޶%,/r]L/׮mA4hPa*%8!aBzW3(Z箎nz6R/RAJ/H V7z-۟}6\c{O$4ÄP+6ƠBPZenJ荏&8s-}97%W:?Dk, P jy<'ZL IDATxw@e )( G]Vꨫj]T(*DGGr. Oy=s;? " + Ax !! P<B@B(BAx _SO#o?ڕuyK”gli,ˡydFx _h9z>]tw9ь2Jֶ(Epl岡F 3"kxL_zNrS p̻R]"mPp\ɱC+@g#<],4FfFbt ^sq[(CMΐAW<2XxrK/͚\tsߚNVf=hԈa޽l$* 2=,ћ1~c{Y0~}iNzBЛ_p%նe]fr\AWǏr5PpJ"ܸ4VчӍjcF!0-A͋w@ʩ?[@3hP039x[n? fH [h)m^V~]iz/غk %uFؽtoHqBCKF8wBJ5o.zz;٠Xwpw;e-s.&.,}׮+i>S0YyTwгvv9'߃NGvTLrԺ=K赮x;s2/lU))"d>ӷmRD 2 7^N^KC`1~_pK6[P-}Lߜ >9`Î Ԧ?yysovE+X=LY Isc[.HO/k ZoWApy䯍Q_V]X\:sY *(md!j̨G^r`lԗ֋P+xv$!$!ϋF||EgDzS']>~7li]s(2a?BepSo8W%l!Fvpq' zJHo]0 uo_)i5U KO;4Y9XԄI>8Q81C > `Ot]K:7:6|,Ô*My G[Q@co+ g퍭ӳ%sNwXBv n3`9+`696;?߃x[0Ø+V0&iwf%HN>!- w9wK8܊oY%~ 7e,a 1_ڽ[qRu2hf ʟ]2`.;zt% |Dj?#8(kTӺx,Z4@|%K'8խ=g sT$+f7w]#Ty%aoy:ίXr<˻W,>!*79ۿoGW5qmƂҘ c+͖a:sq"`q|`*.Zk˯詉57'!%䟧i㞅]k^$mكշSܾs.Zm[ξqNjSH@R3shSg˺U^'8U iGzH},kziaၰTPxkEF06LcL?ִѕ7N֒_[Z#ztZ5/w:s-yps⿯(9R.w܆91$@LI[z.')~LWWlpGcM9.XH\xTgۢmh.i|Ʀ`$usjH^!zh0rBH'v(wn;[MNNDg o%S:Q0c&^Q%Lpsjn~ P]/9^†*L= ʋI$Cuo׬ǓxԖJl3-̀S({q~'CAcl[d} NSp6T"v4Hæt [d)4MvyҴCu3MIcg0Rs:0EK񄔠$8†*g{<)!q :Xj⑉X(C=Lu'Sըܳ6 3ӗn8WnٺtFknm~̈́MӼd%%I{%>GХuARz :~ceCOpRZK\NNg @5m+O$oq|=in°6o[6օm-呚YXW!o8u39UP/罸Ep< f>=kQcF~kИ֓Êγ*Z8!MA밉5r\ٕTUv++utBW'L0 ~q@,G@óuyUىe1çۦ<0S/oE3H>TeK<5|qq>0'@%x%R4T3E|^m V0}a-[`8*ɵĈgF(p sŻ)]O4.'uǣd?ݤPo#mDDNƔۢ41o0^I]cۏL5sՉ7/nxu7M-tTG31+@^࿍L/zGI{|fH|J>i(?;}CLX.>0@r[7I+n5G| ';D|FȌ:!h^z6`n堦O~Nx:.Y]3RxLFmuWĿ~#_ߕ߽XRP^t`]/Wwq|F dm"Zœ䗱o$847f=le(3%i[^3?OeON̛7~AΖJ$yqn^6D$ֱgδ4D- i΄R_߉: |y<˿㽇r Ea-dmys)%1_s${h|ޝxЬ):e6tQ*}Gvh|U9Q}c.z\$@-q)4ACxe^f?9^!SVMX 8peȨl%/PT}-]5C[nKٟpl+{{o}ЌT4ڠSQXR +i:֦{ԅ]~M^_o&ʼnE/&5(hYXZFy?g6lbfuRpRW„oz.S!  _7 4%eEasa 9ճ[\)3O5^{d5]&O;?D7Xл.^-)-#z%I())_\OOthdwRG⡧i*w7N^YYiq&^xw9/eɢydl1o_|69߳?7h'&K _Jؑ:ڟVںy]ϻtzl۲^H7osr***MM-,-觩ź:~Jg_oRe-ulK4mʪQrfED8zߍ@"U4_h#g_vltNg`ߦ0鳾oYpɪں6O 077'$6g}n. ăJΜ1MaaQaI){nSH&=UQػsw:Xdחv8@0˪G<|r;^TjGvu:s{wW䳓x ۦظ]ZHSmJQ5?Fvl >WG[S8/5*ܦ$:& )**iShaaՒ3 >{bO ܼtK>+ipPVVjEe355OMMU!w32l;wH{Ǐ?}.wKIPV6g6<=2HxֺMy}=kæ/VH&3PRRMa9bʟ*Aqsx-[wl Y_6Gz:[i\lwhxx}“RO: Az0iiBxq󸼏_҃I{˳OwW_Ra5##051FT7> stkL;IueCfVϠ'&{^(BAx !! P<B@B(BAuᜫc{>_=D a}"P Ax !! P<B@B(BAx !! P<kJIM5줄[/E_Ez/u$ϭyQS_xL5*mw׻Z=},49hB` IxovVtlIK(JƎ <- zZ_ldȟn|@{"_{z*Ɲ;t>*G)vg.[:yԎc}L!7K1}*_t0r?d'bIDK;7}%Uoo7|7bgp%=Hھ~Q[:,yԈ?瀆߆R.yO}k6 +I}߿-?j\MG]s\1sUNɫ{<݈|T\[5%(zQO}~veȯсw2q^ 3.> T0Yt0+y `ЮH(gY\ =&BQw:u%ޥduq2XxW3/GsX 0.9'09{ƖcRz\ U{Q?QKg߽4oÐQ'YE`.B/g@֋vg~+olp~I*)`E@X`׎) \4ޒ}d&j6]#tm[Ow]Mp '7Ԃ̘[dCҿCdLǃQuq?p{Mn γ"s[ k<.QPrUv~\-yO^NhLu.T/T 7'-gw*E#T-[1R ._x,FOԩU d:4`. e^̄>zt4 5=|Ot׈uNMkr$SDW * 2,:bYc8wr׆<\+¢{A;~{Qߙ=&ȿϏ)h0(E -m ܦTgD~S|wy:9I!,ˮlpOu%U-_# D[{~R&|=h shT:Uҁ1AN=CzVhѝ~[ @v_a g YYQY$(@3v"uOrۦ %}d:nf ;jJr4HEWJ"œ,IJ:PR.y-ٰ)H 9ϴ=&)u^ ;O_[?SEq<#)Xg">JIVRWֱ]A†OFvK3/ @_ce@}h[TEH^1 URU7 aǪëhwt-ٌ.3m|~͜>tqsXACM*.)xxt8WB0:b?m~x- jE+JRFJgޑY]amL97o 0"4Y4l0`Xԕ*0P #eӺHS6 %wa `2}pm(}WET6˘޼F^oQ{VHC oL;LTׅN |CI<2]@1au2dL'q"X~Eyq-_&rCofw `FOb1cf攲gnga^˺2`vbOd+N?y<~>g +IDATUU}֝:ytۥ73&o=1ƵU$usWJYI5j m%2TCw\7gW嘁os*B!.ԐxRo< |aA:D缸3|Q휌85e1yQzU$k;iFcK}`x8if^ΪUun9S&~=.돯M|\/ɮyӾ5qPcFtKe񡙆\Wv!WhM?yji)+e$E]Nݺ{#flxUH^fXAmŨNA@އj<аI-ѠoT0'Hy\QMi*{sם>tt{jƤ+EF%_Q׺>1бG xjF^-yX:nN9 B??ΎF Ṃ w}%*'i ZǍ* QjQrQ|Or7C5Rg93Ȝꜷ/*_D7rr2զcҔ癵|Le #.*1f7z ej_y)]ئ91%RPRZ/cH8@jg4w9 ZXU'qBICt5I j6}MEOE5yŵ{})P<ʫ98DW>d 6,:'7D5{+3kf񭴍Te&ZИ]# a$nYVA*-*[W[Uj!$Lc/oǭH/áxp߹M .le{q0U۩HeܧGi.J(H8UHxM[dw7{[{W3{W E$t DѰ;Z[ fєh o7/6e>;"d'hg_fʹ/~BVQi౸BCO3X[Zs+2eFm{UtaDrh 1!lN8MMIyݏ7%zL5#ͦ[PRMti: u̲rfYyE,͘>Z !(3>& T(aX嘢 T',a p)4l Iհ4R +@HxcQj@Y^*jϷCAQc$u uٺÇ[Z9k-:>fFV};iJ88# +WG ]z45T6H_:B@P'00dP?'%;Թhf&7WHϬ%=e2oήH,N8'Y^xuIO6w<}c l`Fť7)eN Jy~/תO9ڍt> Hƴ ؃8_sRtO]i76MqLGmtRIi՘[A@7uv27c2ArUa7`# S]Ad|J!ԹBBh Ax !! P<B@B(BAx !! P<B@BP:Sk IENDB`hydrogen-0.9.6-beta3/data/doc/img/showFX_on.png000066400000000000000000000010501211146647700212200ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxŔ?hQ_zDQ Bjł!P&hNYzN.tp/,H.̒b*N:fqW ipwkz?xw߽w(m(L@YES q |' !xq"VHhqg`lY^|`i~뇧GZEV`c?Z]Ƣa헾~3}r3xc'&!0uݭtqn.Nq)m`LaoB4M~ÑB>-~%=54MvN1(da=q{?Cɧf4lX XEq飐R?E:=,fPwVh6oR)+S P~4? nCw}Ϟ wW?sVdH/ n;0trυZУx:J heUGm_@]t}/R8+:2V.N28q8ݹdD<NǝIENDB`hydrogen-0.9.6-beta3/data/doc/img/showPeaks_on.png000066400000000000000000000010721211146647700217520ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxŕ?hq?xtufP 1qv3=ZD:*=,СKҡ dJ+V$!\ %w%/<~Ud`j"(Q |nz^~@|[DM##C ),ek_D1tLq˲K+@c@iE>l>G]Bu7.\?Ӹ(b-Ēӊ)4Y׍փk00M3Z1\qVQ*淄z:K{F⍋igeY!_*q<^*V ]fUm #o֋zI$'0Y }S$V<@;`G s8=װ0s|+.Mi뺑u5YoUxKNN=KspuFyB.Lww_ /5IIENDB`hydrogen-0.9.6-beta3/data/doc/img/songFuncBtn_on.png000066400000000000000000000017511211146647700222400ustar00rootroot00000000000000PNG  IHDR-gAMA1_IDATx]hUwvIڄa,` IDVU$~`⃁֏R6/APJPŶHmMl4im6nfw̽s|n4}aw>ț)M$yKpzHN*JqJ09Zmp+|zѫBP,">:KSOԽ @Nf~Ξ])@!0"|k=]}$O\#4GAG(T_U8%(ڀڔ4x.=jTCcq "料q-#C|2A{( 16Cڶ?@a1Q1|~VΕ30FE %c3y|4|f_Fíx졵$xV\r\=("Y!d&2Q_7r*uȎg| juԲObǡ] 0P,j; Qv :43$q+"M`ֺj(B* J,o預`[c<+hq>xMڀoAHbYCXscU-IDAThmLU} ԄWjM^8e1C?aFD:YE8?FQLܘ s@f(adAy/O뇎ЧK{9{!OfN,;OGʟӳaqP6$wLyoE`~Ka, ‰y;Sʆ&R$J,W1&EIÑZ/+ࡣ2gm.y{s6t{Ms^,Kc1Z(!:Q(TL I$bՊ9:#$b"_حF"FA.]<`oUurfF0,| )¡6{5x{QYXa'Zxs>e%W^TqvY16c6eDGCc7vC{<z|#uq [@!)ҏTo%-0~pVX' ,1t2_=Ix-Pu0WIQ@go]'a)x+5/ן:X=rW= )ӏ|?I ?%EQb??0]+؁u̙o8qVn}tF*c ѱTCavXM 9XsER}U@͕j4`wxNZ>8RA+NϧCU6[y^c$V yFE]'tBP## X,٠U Pa) ϗ.AuG&wm4/ZBtDI @}p!pj'FՔHcwm{^^ޢIU:3,at9&zeugGVgR@8SIG3ӵ6r?91#&un/4Vl懆=^4ƺ3!؁ C:Z_ yzqا/]*?`{ոA*:;[㺦~eŘn5$ DW"?lnV^.NT%IENDB`hydrogen-0.9.6-beta3/data/doc/img/tastiera.png000066400000000000000000000450671211146647700211420ustar00rootroot00000000000000PNG  IHDRqbKGD pHYs  ~tIME  IDATxw|յǿ3]˖ew6r/P &Sc$tn9{ϽW{MӰ`p8ǣ" }!8-a466k0 2 P`ߏ-xdLϏ?jmmi6ʑH9FQQ'%`S`]ƂBlViu &B^o0></Em8& z;8G8QM1؈} !f^}=G}zZCx (**LgB1|p< ,7rBMڕP|>#Fknnf|^ ^Ou#$]ч^zʇ6Vo'֖V6l\a2I[C=Q{axtTKaeЀAQ¡6WDag[ƶ[I7I(B/>P9|d2#luRۖ1B 3Mzt [! ^TT@cc#֯gYOo+_Xn-aaz`i9Ƕ>tz0@c!V"nMCa().fi  SI]B5/Qd~GidLgkʈn58!BD)Ze9#̣שLϤe v$BF32uL6m4%,l'd4O& ȨڿR;%M*tfTç `'gB P ŽLnD{8%g{L&$8TehIF]} s5Ro,vZ&[E)G5U;f|$:6h6;&jNx* y Ya5]f Vt(r2Y.M3zt anMu/#bjth3x$Q&,k|Nn2;I(t@I9 !Mo{ESٺh k NT"N@iFuvN5CLonց(4 ,xBIy Q&_@NvTc\Lq*h,'oOvB7㴥KzEcS(,aR{)a9>X/1Pf@fP>sC673eN{U9;0o=PPw?9[bGI`VL'=,2F+|t 2Ztr9l%")- 赕T։ ;(.턀'(n9YbhXl °J0s \Ҵ°e_/"^(;9y@rkݫ,dz ;ʘht,((`9YcNJ֝CE9%9|yXX,|hIv ?ofhWwPr1ݤJe ЇbX0)SbFlsJŹ+;؄,aXPtx/޲(v\!̆*dXe3'ÇxcG҆③)SYP3`=sWMsv]IݑSDRsB$)+i.zGa)\#0I'c '_mrJŹ+[ܲd!ҋqn*00\E!d7XaC}9& O { fLϤQhMF!eEƄkC"TYjeLcW*lu6p2*|q):k|2:$dQ<7l3Iށ5L}5>2=rM|%s!O{;z/ÊEJnQĽÖT(-SםI*m* qU#.;{aak5\,.3Q&fdLZ L-@Lc aŕUH4M@0tڇ^/Eaُu7hXJNB(AĩmN!JT<ۇprFzdP}2Y2vHe6kSBGj*#*N 0TTȘr ;XN{R"u, @S؟D7[%2Ja'iSN.G@Jtd97g]IB5'5A0DQ!H-߈iNjQ fpS6eSI0CM%gm9 |vdu(?P2*Ù^љ;3_&3Vq,:,x{ʆԂCH֝䶬1:uve[,ij{ د_೯x([y265*<{NĒ1ݳ\z9 2j̱׻!Hh9²Mҥ_HU6*G{-[~K;fG6NƫBF];jou rm8[ź.gQX`MBFӭJ8#78i.սgr4˩Z騆`SK/99$5wZQ< Ĥ*ؗQJ؏!f㈥upXtHޓI C.,)Xmu '|(#wXFؗQB8|pueog@ttKV&vl9&J3ߍ'{tjV{8> 2IS%7ƫBF'ʲٞ5]a!|H͹G2t*±QDJ,9Ed1i|W2fvtAeIߞdg ZwזSlP};mݚD&gU eD,&D&|yh0P&SQ@FxLw2EV=D6cm{Dl(Ņ|tjdt$)F__jN+8DFaZ 2'=̑*X܅N_;3Zw*׼C1Od9Ś}u ͲqꎏI]iȸf*O6ȵIAeS&sJFՆ9O$TRW%mhh !u j&>' Rm*5-r[JS l(2Zv>FaRF!EII.$]Ns+$1Q0EYܒ4Q`)k赵T%x[3l\%@H4c#kS6=eG|DB ;a΀ eDTQwڇl[jEX PXwԖ3ׁ(RtN$~4:r:ڂU.)5cWe2Jh(q f.$œٔa2y% 3Hh>_%ʑ7⇰1˙rYq@hO E޷1ZBCMdPndRBMZ$o2vr*J%(ٙEW1MiP""gs nT\bE7S4*S{)4pNYoz/$ c{RYj:7L`^XJs۔92 Df;w9B^etJK>R?3\( 2ɏo(%WY:V'kddS sH0ږ1疣*eꪚofvwׁDy<+XȅeTd1=2 貜v,_g@%嫽صV|&bWdQ23=iJS+ʓ60)cgk6_3rJmh|Wt!c){RDF!.#CXQ`'+zuf6RflE @yf!@jsg2&pwH\VeL'pjSDA&X1ឤie{2fBt\"٥"ddT[ $_k^e~U_d{ V8R:vU6,P w%5mg @+,XQr8<32fzvg3_He5%edLtd9 +3="cP}g۲ K}`%d8{Kg@ Q4{ʑ4eޡNFyC2CXr;}.q"=+ \1x~ dBn;_e 5:BѡYDŁkNY+T RU_ciӦ)M!g{aYJYaMt@V+;N5}uItk2Jp9S >=2i𘦌V3$]`${|D)G@ztB9od1սiGۆ!{&z΋Vl5$WhvirQ"m9sfT=2VC$H;2 Q̞=hƂEEcò}uzD|U==_%** d]K+ѝ>ƶ,\r=t˜bʑU<y o쇚3<:s+WӔGSKW_MS*Wgk{Yj01m "k'O lL|聸FDSAqr2Z $O%&+ܻHDED gZ: v=+|\mٴ/J52Jf"DU!n]"5d>@ #0S݋O#JɌ ]w2FuIVȍ+m=@Tgo6]"Ltu - %:;*$pOj52v  aIh}dt(QKjWd.cR3nRHq9Lt)(D ²^@R95'KJfvۇ(3эrTFŧg[f3O:;L19OdS|"UN|JCXցHf9{!aD-*Wa~ADg؎zV=P톕=c6 Q&vIFԄ) a)E)%cZ*ZHAqBB{h_ fMXs2NGa!hHdD?8l7ǶߦbibπH42vtl9Br68YQ۱׺_WYbwItQ&/CIgwdr^K) '#jd*&n !3Rfa;ÑA e=)˜Br;Dl55j|2Q3rCXN+nx-V6{ I,62nNHsSs+:v=h*Q]mo@ԬpS4.)w(*#eQNsRQXr2D $۳r(:E[8~`fΔT!^29Jvl6iΈes'KzX*&"c{UF*aQɃQ%6LPxRsW;|$DD aEc<.\iN|ByQ yGtA#*dЭz0h3EN@ȅ0E!ŗ|T(QmpkBWڒ6{ oNaj:sn〨ay oUB(:+ɊNJt ެ'#LY`0 !7>Uw+SLL^H(@=3GQ31i?{==#$kg צ!Ή\k(ց’RPTx;_2ǧS*_rQ<ѹJFQ-dbX!DV{VRHd!2dD']#>5ir*ٞe|udL'F®9#zDj O=wBȅyN%bJmՠH:$PS[[J'FBc^FT a lp:w$8\537,2*hJΑ$L1+S͉DFYEgSf3qm(򾙢H²ę=u ZT2MC Ho,'e'Ȩdb;wI#a1qdAڒ:ksKpZ=$5I$LVud:X L셹R;ʲܑksjh9> KdxR݋O#۹KY5PjDa%gi׏ Mq9dzvX櫌 (Q&FDsJtM(((bPք k:c+M̴]eeOdk χaZ[[ 6 H@iZgVvM%lTQHJoѶxhmm-2K5nxz躎a=tǓpP\P(ɶ3FRPP@[[---f|?l~&-.$:wqTVVRVVF[[`֭[ F~.ߟ. {āسg˗/gӦM)3M$Dկ~ѣGSQQAii)l߾իWxbv{t)Ջeyc +_~A|Ijkk8H38s=zt6mc2ӜFaL:PVVF8fϞ=,^o;Lr&yr)=rJJJhnnfϞ=X~DNC}J$+?|*++So=VsAaܸqL<зo_]_{=Yj IDATL,//v@ux[vO رcGuTBia\^^_Nn455i^6v/SO=Ł2Hn qGsmQUUEQQ`V<@{9虜jIvޝ/R-Z+BCCCΜ9 &~wvN<:WUN9<EEEh|O?m HeqWpgڊa 5k/"? B>da {0S| n5ρ$x׾ƌ30 0 -ZĊ+bHk;^zB[[1`~_,e !()) /(=׋>?,a |$G0tPNJmm-z+VCr '0q$Jf>0WgrJyڨfr-3{lZZZ,xGrرcy5j---Obl޼>hf̘A^$θHr &?&̉q~СC<fرy%4>/alٲ'xO>zLµ^K߾}袋3g˗/! xwYv- 2' 0ӧ3h 6lؐ;cFc{1v`ҥI9|>Zz8?<;wSVV֡~K$ݻcÞ1\p3f@uV^(PߓT>"z }t튋imme߾}[ӧOE`g;߿ RWWi<ӌ5>W^yw}7 G8,c̙1!< {/`Ȳ|rΝK޽SFdH󶠠={|$EXH6azؽp8L/S :c=FCCClzҥ̘1}:ݻwO/f,jnf:(I !hhh7L# ]ٲe o9B$;]f 6l=z裏Luu5k֬wa)'Lё}MV^5jeeey,\mpx" |x<x饗hll#H'B|1C?iӦ oʟZ$TirH)z Okڴi 6 ,]CByy9?O9#ݻ7@ٳgS[[8 U%. 6?@d|ٲe̙3gy&Qt 9r$3V͛Ǐ~] !Gu] 4z~_vCw{v;n㏧KUUcƌO+@~7^^xUu RqF 8O?5kԔiS\"98! n:S2m4FŦMX`ABD~5p@ }sΥɓ's9tRYj$QF+:u*oKR_9D~VZW_MEE&L`ȑL:SO=RN:$NСC9IלĈ|/+ٻwoz-&N[^BOΗ8(S8;B 9}z̀Dex?U/j$qx< x<Ə Ѯo /_~/[דn&+Hc=ǧ~ڏQ(ZckDX{I'… ihh0 ~l ^j.ikڵ4779r$ӣG;H`%,T__ϣ>֭[S: ]b%acRVV_i&6nHCC#F`„ owPL)Dĉ_gȐ!t֍P(ĢE馛ؽ{wv_j< }ke|_={&ְ@@]*qggp2XӧO;dΝݛcihh`ܹ]v"kEE?~<]<z(O>{~'>'7ݻ& 2jԨyzBʩ;N^b֭СC >!Cj*̙h xD{z)>l à?[2gΜ3\&;f~/ȳ>^Nv8:D/^` dޙ']έ3Q5ga}d}Dmtp3}?]JWcU#=9E`SBvED+vZ(cSW@1/}Yt#yu [ < Hwj:&rvr):A|#EFEf_|.yosRYlG|u .c\r~˱dh/d9J HEEoNi1`@5iߓ*G]:3NZDh3Iy 񨣏ᨣIQXXȬK.L0iuY(3 Çjf{ WEw@ 2 ؼe3͌9:k/Ì'|>UUc2O!Z3j,~?7U^)+7ZZZXf%ݻ`߅z9bdֺsNvΨ)).֮<]2x( ٴ!d-l21n굫0 Q((e|Iy #f}zs5>lEͦ|{gYό457azu+eY͓R5l;v/CG=)2brOfپcxp݌ Bh'cHEU՝|T@FezWmfd=?#ygcWϢ"tNpK… . \… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,5 .\p\… .,k楖B}'PZZ䏪~JK'={J]]]5 t݃藺cBP[Èҭ[f(--% 46Bxtz(K)SWWG(BӠb[hiia46grzM5hll"JJJbhn=zbۋa^m-M44J ޽z  F䍧x<wfɠ怈֭z Ci y^u]W^=C46֭[ijjM:jӢEŔz*|)uf>B>#ya֭= `۶mxw>zmLvm(Ν;xyKAZ[[uB*++3aD\*O>3gu]OAAAo{wm7/b4M޽~&^xݻE0UW]A]]}巿]{C? '̘q-_'xP(Dqq17CO?MBhчRWW+.'D 5ޥ)H(ѽ{w;<:B.\~ BxI}}8 } osϝ @M6* UUcx_н{<ï~|>~xfϾ޽{[b@84 7fƌْ'キ?3N9er[Or}r ^7t+~&#w{^z]pigp-?D׭03/<_[9sb~{>=s4M .뿗 ZĖ-[~ Äan#UUcb=;U#ߜɂѣ`ĈJV^SO`1c2sy VPWWks:;R4)-1eT~ĺ-nZ4Mc\re2dDQQ\s-kF… ximmew|\v̜ya`0?_|/ꫯW ݻW^Gnj  '͛7py|gZTܣ:Z g<Ǝk}M[[w&6P<İaùʫ$A4=-3:}~;Qz|glܸnpÍs7|_o(^Kr$Ç`۶۷uQUUŲeKٻwo 6u’%ikkCuf2?Dn{>e8opW X|g[oߨĹ8coz|w1ppI|[_aݺ<t-<n >B jO755K_0 Fg?{PWc6 ESO=-'|#1 裿fҤ91zY~ɓ' jr$ׯSc5j^xql[n\yUB{޽{ӧ4OQQ'p" 0b71 ޽ F<ȵkYv B ĸq P]_|!MӘ2ejNBza|УG%KQNAyy/z/l|\u5[?_Kcc#\rep‰9Qokk} --- 8ラ)SDs?⢋΋ 4n=z)ڽ{wK7`6(GXn-K,a,X6a0nxN/VG?P(Cii)a(bذ{Lnhh硇~q}E)Gl)K,GTWWOaaUSbŊ/Xfus5Ā`ÆձjJu]X*~sMb0 N<$*Ghڀ0w < 2d(3:&6>lm{vdO7RbL$C|>_| K,̟&GQ)((SF߾}s=p :t]c__OS#W|w,^1۶mU0s?Dy7bq*\ϹޟR[[KU֭[}֭[瞟=Õ 4>_j?Y.eq!Xj%23fw=,ziի?5j2d_ˇa˖-X]yy/Ǭ\2=ٳ¶m19&LȌ_az.rظqO>uuur饗ۚd4S7{즱ÌiGu4zb׮]رK 2TuVx z(cҤJ&z`}ϸ|g 7@9_gĔ{.GMӨk2v8KM6^{ 2L?uVSߏyQP "sO?g%du<}og#:tᄏ?_N `\vq_WYYɰaس'ۧOƍi~?DO?9'˗%ܛ4i2< <;m¦M<_(+e]1"QGÅ^Ĝ9ϲy&nJJJhhhRfͺI)rӲ,/賓lذѣ= &p'|-۴޽{+ѣ?|[xݻzt]o 'd'#Fgݺo~\|% +zկϨQp 61vM8̯ªU$]TUU1k֥FqD^z91~ۜQl/Xt)k֬j_Pѣl~grfͺ#GsrdC]8Bdn֬K#  `jU]sgr3 [9Syk.FGCNgܸ۴1cٰwleM# Qy#T#/ hnnB"+xru۰}10iU. `M2~>5C̊U+޽+s}vo1t+ %V)[p7lRw79Cq!.䲄\Q{70lp*+T+W l1|÷5ׯ? Kц :(.VuM*[ <4gپ={0lpLF !hii=lo0ylDvAA MA</@^dd=G+JOnr7#YlIENDB`hydrogen-0.9.6-beta3/data/doc/img/tempo_bar.png000066400000000000000000000032031211146647700212600ustar00rootroot00000000000000PNG  IHDRV.B|sBITOtEXtSoftwaregnome-screenshot>IDATxkPWnKت"bE iSNt:N"Sc-jEVT:-UR+L$~k`aM&vϜ9g],bv x `f۸Pt˭S վ8hF¼\.`7 ( pΞZl糲v"?q qx'])H]6;@ QP)% o!努b$Lܒ$iW^cކFʋc>m.VZ]<:6Qh!c ,FtnUjhk5h:yݑCvݫ-+m6:\-Yyq{8Ky;AE)wfzAA,=nu6ߛiW٩/ z?4"|daCuM䘩 VSo?J@%`Tkʚ4zW! rOWkYQfFD c>\/8.]m߿9#tg~R$秮{9ՌxZW_sݶڢfnpRɼ?P{ϛnh`ƿwq}DE0?u}`5="K&p[>[,:+pTD|;ALx0\&M?)ClvȐ>\(HS7$o\k3 ̚&(rAW{;Zz]" U7iȋY'ٻۏKtr׳UJ*$J2h.^}@6R;ͱ˓[."]􌡨2t!D5جyDK"]U4|9"t7Fb@LĨCLK޺&Ķ1LS\`ZBGݕN\ҽu))J Eo(V-ThC?e׵43/B g ;T“B+p rrrn:&l&ވM$!;X㖬NƲQ3>$ 99_!?NvxΝI]Eh Go@ #|A 85q qz,E!a(/IENDB`hydrogen-0.9.6-beta3/data/doc/img/upBtn_on.png000066400000000000000000000013641211146647700211020ustar00rootroot00000000000000PNG  IHDR-gAMA1_IDATxMkGB~!t0^:rɧ`$E?`c)'c|D? `#,>Yvg{*>,\Pyz{_P`hgiM{!j]zt@3M ]ImŚ l~Zj2kvePZ{0(hD^yO`{A_3 5'JuVX0QC/S  cW[mXk?RpΥ¢(-hm|5PGc|Дzr©򗯔󆼨Rr r4`=NOy Jn%3kxl}V;kl%'"1BHA@b7NE%=!pـVڹZ Ey*`VDNiIBk/rݤy >ќ~, fԞҞ>uHCzymB++ܴo AԐs!b@FEV;aڱHFI08D,B+S;k+-#X$-DbL~./>]lS2!\#Fi 6&]eS`F,O*6**3[3_+U5Y3?P Ś~BIENDB`hydrogen-0.9.6-beta3/data/doc/img_tutorial/000077500000000000000000000000001211146647700205275ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/doc/img_tutorial/Bridge1_4th.png000066400000000000000000000256211211146647700232770ustar00rootroot00000000000000PNG  IHDR_z7PLTE  R^jRmZvrzz&:fj*6RbbjnjzBVrRRRjjzZ^brjjzz:7:Z^zzzzzb~rrjrƊb^b :***鞞Ƃ2>Jƺ"*:BRz*2J:>:zrjZYZ2֦&BZr":bfb2BbBRrZfrrJNJB"2JrrB>BRbrZjzZbzr~jZfb".BJZr26RƶR^r"*Jbjzz":RZjBFBRf :bz΂B:FbJZjZn2:bjrjr*.R*6bz~zbfz2.2".RJZzz :fjZRZR^z:BJbbj*:b~"Zfj:Rf 2BJZzz*2ZB8B:FR2:R:FJ:ƮBZz*B2Fb枒jfjZbb"*R2BRJJJ"B".Jj~ """*6Z"B2:ZbbbBVz"2RRZr*JjnrbvrBBBޖ  Zvrnr222QLGtRNS@fbKGDH pHYs  d_tIME  IDATx} dUV7 Ol))Z^I]RHnYh*Ũ$FX5qtU81*& wFݨ?lŘx}?zVխT{꼯N{=/@ l:%~ ٸe FdL8d/Lo7͊pJ -2~{Gxx~{*w9owZڟ^,uc82[4+<~cL\%n'z6O=#p? > ",N(HfYB' <ӺI߿fcHStqiK-QOܝ'Md|8 ~k℺X:1@KV鯕)݀y/a<_ 2n**q_] kcwL|g*~W<:_C3-Q(Wf**%Tj63$gh7~浳g_>9i^T,x|޳?;zg{Z5kWRU|2~˞g?x?uS/{i^ E\SDt&aA2& 10Ѯb\`{Rm$c&dDF;qG\rJU;D)wȈ522F]!=ߍF~#%QFF| ZOO!S 󸜑kdd<+8lh6ra}.G%okddHJe쭢8p=ؒX@˵jS-pP?ķ}3 pνS,;ui`Wz{䇟pȉb tLy xapuIiT0 FW*= 3 Ѵe8*x_~'>7îk4'@4k0j{ڞ ҈=}ZbcTFI6X+]Eqd"Sٸ=~#nG{m\{G k$Xjc51[]Iq>-j422mٍV˺NKjHJjh!aӻO.ca==v7.p-Jo5'~ Hd؞ s")QqLQtI nnhU+{8|crɳ1d߰G,,t6=z[o]W_ȭ}׫}ջ;&Kߺ}އ:65'8ƈq}#['SC4RxnHj=&=KCwps6&c~ɴ׿捿 ~?x;ҽK7ow vUvo&5'VI"z$zQ2ltlOu8Fst:[]I=O ~>츤422Ƒ(|_=%0vXB;PޓHD0`]t`ŹW\>tG>h>rO:~>t6}_{]&W+'og>rKd9=DLD5_lo:jb|O_G"W iA^ æ鰁&>Fd\:ou$bikfJtIid*?>GwԠzARRԀ%5`n z {` R1QƓ8߲Reg714===vQ0?'y~dk񽟏;% kNjMyD p~|*H"\n_422=2g",wtNKJj%挑ݠhǵ-܃+mWq>G'qqz}O _c_OpfoqBdc߼7oSi``^y:`e/ eKca! a.jeߓW08X`OuImK*e=4- c{⁏_#/EEq­$⣁N WK*N##1èi[Rň+D{v~8 {n?W~q~8F>o|ֻ/=<{ގ*|Boל:c,,aEEB_,|pSwf0pK̂QVF6mЇORN)  8gLV.8+p*≚.b$&ʛx7qڟ owpfo{\5|H}ɌPԫ< |1$|-422'SD.b.l8<5o?wGw>}g^ݷ^srs;r4ZEDv_+:)|ȸ4X@ipIi~o(f3ٶ>ueON \/=okpr6YIDceFgqUD\M"}Z6]Rq chc=H`!TGGҟ/}m92v͉""anc&ĸs/1YO*G<'=x'~~8^rnל,^ED6*H"5b"]RqTj- 3яIW#EFdQr z6XF+QFFLϹ(T=}=-.m.Yԓ㊌(XtPKRisS-CEI%dDF%Tl1D%ƌ*gFJuPzPrȈ522E=n2†rŘLDz#09%ͨ.)*flkho 6JŒ cT)FpP]평b&VB xGa Xbcka Oh' *K.>t6 WX=FGȇQ&ҵ{:Ogl JҢbȇzVNȱD;pg"pLmWA(l|Oxs-,:XTESUX LHX h't{vDNz[s,J4“qYtN:ڼXYѵBG"W$:5ǢNA@+a?Zw>H9 N7 ͢Xkl8\d FXt`?O~*\u("0:'K^hN}j1 l<"J%/4J&x4XB$c@s%/4  s{%=P4iXSmy5O~F. `{d V廖:&?~N `{dUe!ۙmJ :_1^Ym+3dL|WrdL|6SfO1>N?Igc^s YKcԏPmˋ-lyC|6SfόzBN 1)c'$K2&>qtX2]пSw>HǏM!y?8sF&?~3B-vɘ)ca%tI'>l;,8dl $c9TLEA@2&>aqtXgEE6#p8el:,_3o|(gs8el:,qt .*@8)(F㾦BwHaiٟE$cϜbȇ/g5$c~>o-֩ ҄m$cǏSƦcGU쾣uM2&>~8el:vj]pwBR;vXMVd\.l9qbRkcݱUTTg1YMǎq8ɘ㾦Bwh3Sv%M 6>ycݱ,-A2&>~kcݱdL|6Ϝ5d,HgcT?}MQX;yǏ66?2 pG=ɘ!Q1 OC ](,FhV״$cOC2LoHg|zV*`1 Qƅ e $c ?2Nnl<%eajc E?qvL ϢKɘRA2&>~,T?z,$cOCac0Gbe扏? ?2 XU+ԴNY$uiQkDjHg|zȚ4(-/qUY+Aᗶ ?~8lilL|gau! OP|3dL|᳨7TO0|(X֜$cϢ˚3dL|Y`Ysvf?z,$cOCac0Gbe扏? ?5?f_O2&>~4K,IdL|iQ" rK٘§GpbWA2&>iQ$\Z*qV7O2./1 Q$c*?H'|>zTg*H'@>z,$cϢKɘRA2&>~,T? ?.'>~4HkTR_&?~zXe$cnJJEɘ[Z,Jr1Y~*AUKK?ՉjXGGj?r;**Oh|AǵESmL|qkH'>Nz,$cǏ? 1)BdL|qʸc ?~1p8QX;yǏSI;A͏g-HǏs g;xhջ4fLQ" 5!'qƦGpJyE͢v ?~2Nz Ș1Y5MkAy#ɘ{81% 㮍k?ȸdL|=S1\LYw6.X"HǏK?1g5Kɘ㮍?1)1pC]t<)Gf\8IǏ9ƺG/O|3Gn:Q>(-\q ̱q8QvQZ+a*ِ<ܰܣ҃L ,Bn㲯R%g3o CƉ2Zgc‹-lyC|6{EBIg/*B{wf̙?3TM6.z獁f*&Hw6? 7&>~̹"T?mdL|qʸc ?~z?j+{]6O|iav'1[O1㧡\‹vɘD+jfjdL|iQ$-R^QsjwNE%HǏdp 81=azUHǏg6X,W$cl(tF9W&qKɘƥKɘƥKɘ7.X"HǏwmlz?j+{]6O|ii}@2&>~4t mD2&>DJS@̊yTY.1㧡Gj]a ё1Tfq1⧡Gn/> saS 1Up!v\1Y1E? 0:Ϣ2^PϢGLBiL?z,$cϢKɘRA2&>~,T? ?.'>~4(uJ:ߨ A2&>~4(mq~1Yv9 HW[e$cOC]ٵ2.-ɘ#ٟ 5.Ƶ ?~(e\2Z1gAzQ1mq}o#HǏE?8`ajc>zg*  k3# >kq)$cϜ NE)@2&>qA2&>~8e 6uA?~ܵeS]sHNjn0?JtW ӝM'|ia76?R 9[oWƎM`i㧕66?RWE*`Pq2g ɸS|iuV?NJGUI`kkQ,.wR޺2lf3[ƅJF2xfƶG5+iT~N;SQL?-z,$c\8.cY ?~W U{,$c\(@QX;yOC=7it ?~zXe'H',> ?t!]‘1'1dH IǏDƘdK3?r‚W-@2&>~)?dL|eNqGMTTQqIgɘG>o\c1gQdL|Yc ?~jz,$cOJjdL|q8A l t=Fhն'?g4tHۣIǏ92e1 OCnQu|62nǗ&g2NztKrjNijZdAId?r)+sET74y]^{` BͤGF2[w Y1rIDAT͋-^{` GN\/l>wm\S҅rm!ƫZ|:KzBy—i«&gƦGqȘOCړdL|iQ{w?MdL|^f{D ]U0pE,@I5҇w=*?X}>])S=Y|*?d ޖ/;jMD`3|ˇQa!>ŧ":3'p%x4u}%!V> ,>TC՟RhRL=Y|*?J297\őanXf@mՄ8 hr|Y|*?; GΘɽX sFᆅllx& X8F|DZ2ϰ.`dYv^%v.NS굇&TDg{H q1f 3z8X0-%#˂d>,:s&E?f]c>Aۈ02F9 jnerl$ʙE yĞwg?a OhƧ":C*83яII.)F9 jqItg]]2Hr=绣vVn% .60ɑa0YW'xSL[ͤRdbcRϔx5|B7>&VB xGa Xb(gA2^ +e}l*`G>r$ ->TDg{Y^=&ɾDÝ-3yG1F9 jEEYtZ`G/ju.MpGk=+޳,HƫZ|ɸ,:C1.F|[XMjOvOHM 10YW'+*ʢ?#<wyJUώx5|Byl.{inᨌAϬg&=:R0YW'7. }eI;dz5|,HƫZ|Y-F:||,HƫZ|eB~vsejfx5|BoDg{tzXlIiy΀i(gA2^ zlx{\\j>zd_ *Fx%|B!^YtgrrYJ,a7<0YW'e^zJ -_p=Y$ ->Wj{,HƫZ|e zW'$ ->x5|B9A2^ szW'$ ->x5|B9A2^ szW'P内dY|ӆdY|ӆdY|Xk@ @E(P}(a!B9 Wp!X( WpJv[78ɸӇ|Z{+ 8o&lZ{+ qɶ*,;ɸ2>NɸoXkq$c7kA2d솝(BnXkqW;o\qg":{ k2>&">^kPW do, yr mIENDB`hydrogen-0.9.6-beta3/data/doc/img_tutorial/Bridge3_3a_hh.png000066400000000000000000000257431211146647700235710ustar00rootroot00000000000000PNG  IHDR\C{PLTE  BVrRjjjrz޾fj*:bbRn*6Rzr~ZYZRRRjnjzzZzz:7:Z^zzrzzzb~rjrƊb^b :z閖R^j"****2>JzƺƖ:BRz*2J:>:rj :֦Z^bbfb2BbBRr*BZfrrJNJ":RZjB>BRbrZjz"2J:Zbzrjr&:zBjZfbZv26RƶR^rrr"*JBFB2Rfrz".Bbjzbz:FbJJZj2:bjZv*.R*6b":rnrz~bfzZr212".RJZzfjZRZ֖R^z:BJbbj"Bb~"ZfjjjRfZn 2BJz: :"B*2ZB8B:FR2:R:FJƮBZz2Fb抚jfjZbbzB"*R2BRJJJ".Jj~ """*6Z&B2:ZbbbBVz*JRZr"2RjnrbvrBBB  Zr&.tRNS@fbKGDH pHYs  d_tIME gR IDATx} ,UoymdjV~}[=hAgwgI&Sן uA^Xi!Q@,c *:&1L{Vխշ;_y=Un}};ll덍M aºCku7'?VMpZͻo~so~}W} .x[kg>x??=CoN;BtX^K)lAq&\kshfMv]kgލmaS*5 ,;EuUO 4~; l5 \b|}g8|yZ)NkwTIïOԧnէ@qt%aA&;66 i< E# b b*Bc(BdDFmlE$xw(x.<ɀOűoyk.m j7C\N #2hcPγHH.23|z$-fdDFmlQq. DoB^ vz2=EFdf !".DmdA~8<<TOҊr\ӟӣg\O~wdX#'> A ^׭ǃ SM*VM ah#_Á Ӱ/J;Ac?Ŀ|Z:ხm4 O1+0jz^ 겄6X0GoF6ÉPr*)p/rOow=zzx]O0;u(>+N%tsu qܫ.6X66{@týcp'9494O!Kg"?$fzI^ÐE^x-KZ&U7o%+N(ǔˡZp~ݪ*{G,BRaƁ)z7>/åxRc[7o6ޯ8E| <]js#y%OPc5:VUAa$ead`ҶfP؃ `q }NW94n` )` j$^#DJ6G J߯5}L==y{+_W҇mgKZ7܋o߰x8:ߌ+Npd8=CAm.N@}A p @{ʌ?jlTFgӰyݪ*{?'öM*VMw2!͡ #`3GC L@! 2h+Ff0C.:Fl\ Ŷؗ<7>dlQ&e~GT|}YO?Wpqkڽދ?QZ<S*ȉG@:Y1S!'޻.UoYo+ v= 1}5b >r7áF4\nU=ŌVϋpapp lU<]02` q CИNC `*m:mhֵ'[6L0W1]X|_'1.n{uS0#~caf~#~I΂q8!@%pO6Ror߫<( 6#؋JqC$=d|A ^ wZʹPc#'qݪ*Hz|dۤb5s$#6Ρ1C̡az 08̡I&ژ%J0=-RpTud ҷ~ W_Uoz5sGafIߺ+NP szo#'! t* ' ] !&R:>AU1qm*刍;ʣ %VUAR􏸰Ij 9UFash<(4MA&ڨ ݎ9h#DbO`Ƴg39% 3)?w/ygv>~䭿#Ʋ֫H^Lxq`;Iy#:P36$ 6Q[nSfv2>kP}c*[KPN1I1DIp\1+W/M*VMŮ;~#'>5*$zTcpTOMV};D=Op4iA vfCáFtU=ލ,~dhc˾ T@x}.Z}L;T6R6n` jLa+[4Q2f׶lng?ZM.~Wnj7;n5%T+-޺yKWc =}d<`5Nc#\e -۸6F*񉊠@#w%84'}aգ &Fs9%̹ T mRmlx4֎9yx~8|KABn c<7O~Wڗԏ]~>[go3('~i2Rt?9=xT~' x'O0a v`cN0P̌ԬBOSHٚwΎn)wpI*O*T@iYWjfLg9c82Ij Q89yD~& [s?]M^~u_/֍otV2~i&f8.oGߚ*{BgПqTFw#1b.{pp%N3OO}o|ӟݍW_eKZ0y7a+gY#H}mzpYIcހ%ܒM*V#}A49yX~)4|Rk{O۷IO~?0;\T+g=aۯ8a_M'H(K8\Ssjrݪ*{\uY0mRmlnB̘h2Ѯ1z ?0BHI3^+sOH~%_!gm=b'QxFQkUU,|$M*V#Â"{Ӧ9y\ B̀K2"#oP7w}6jd0CɈ<5 v|;@fa < CLyk9 "x.  1XU2z^L^p7$:%jfmEl& ƘD}&]=@It{c" iD'&V.r ﭰ,o||`Pf\ܖ} 8=0PDRL1ыCF}D{u|㣮ت%ѩ\bjMͼX`{YDt~#o=1Ϟ_t0(N/!ş@ǿ;(jNe75NJ;oq? Eb=X÷w .OrZkoba+%sX]=$~wLu͞ƪYHt}>E3 +EVW#x{kŧMÐ X|j(b0qnI=tWd|HǍxCHq4M0q^^Xza6|֋sjX/I&>k+#NY: ?FhTk6?|$og}T5jXW c%Ԛ:G q%{/h$kV9WGaƏ-Ami{F%R$T'(6iSհ`ذnIǍuJ>\|^mq`]W [gu8\Tї4L|ӰQc4L|ӰQaia[=<N~(&>[#N >[c 7~X*HǍ8 0qgn=4L|A jqTcbYy=r +W,n=Rqk|[ǑQ61ix=EqبǑKc{aq6?\ #f^¨aU<azYӹA&>ṋaU<azKiSW@Xytu8L%R 2ixB=z w.H# _̯A&>[[c 7~X*HǍ8 0qgn=4L|A jqTjبDZT?\"DZT?U 8 0q㧪aRA&>nr U@XT4yt\Q~0Y ˼D}=Z ӼYK6q,aOUÅzKic_¨DZD?|جDZD?U 8{Gc{?U 8f0V_o& 7~lêAHg>y ]5]U88nAdC656U 8/Spa4XI6dSgSp\#n̬L6R 0~Yf_I6dSgc]o-ap,TUm6{5cӰY#2 ?}M6ecq6 8ay zK7~lKd8 0qrp^c 7~6q,aO]=amPSrs=Ǎz-Fʼnn= HǍzl54iSW,^ʗS 4L|aMB){ɛHg|PY[ɶn 7~TZ4L|Sy=)4 ӮF&>nTpb >& 98L '31i%6q,aO5q,aO5q,aƏe~جDZD?|X 58*w;O|Ǒ{jM@&>nȹ.R݈4L|SW J@6Jx\Z"_AeHǍzI+dO>ǹ0~?u8ld;2rfcWQs@&>n,aC&>-[.M(r 8kxA>Lc:8rHly"& 7~X*HǍ8 0qgn=4L|[c 7~qkz;'>n0ZT: 7~q\j8f>iO]=k$«,h3Z0q㧮~~,.-iSW#nSSp:az\b F A&>n̫Q%:4\m 0qgn=z g4%(&>+3Gq^¨Y`5lF4/A|VB=3KIǍ[.a8Hħ]>%zgi˧B=%4L|j8A ,z;'>nXa]#ikh&Fא?U 8rMI&>c_B(pej4&4L|zI+dO>=E_ [ހgcɇu=qye*2>eH_ S4l0U u/ %쭆oS,[#`{<3?mkH 2|հw>q4Z\h^g~=e4L|YTcy 7~‰ K=e4L|)TDZT?p6Q9xO]=/-@&>nȹ 0B%(aOa5HZ͕~2ĤaOat=XaƏְH5\a5d-åz S.A|⳸GA5azpi^‰IǍ8 0qgn=4L|{iX*HǍ-@zKiSp\@XT8>iգ=RP=G~ZǑsCm?u82Eaz)4JA| 4ď+u쟥i8Ǒp-h=y[PIDATkFMΫѹ{TqčPDžy^d\k会gO˸Gʵ4[ww?=ӌo|82,xv?aHq=+%(no1]\ y W"y 6?˛8*t@ħ>u8*t0q㧮GA&>nT8[i8S- E%yď< I!{B0rtGItI=!8 )9F9<sI0'S#=5szr؛ O%FPV8Oy/ڑ \'gDAC-%y.F ԁ}B|֋OItI=1 Ɏp'A]>!>ŧ$L6Rp4 *\R#L \'gDl&8_#?ف}B|֋OItI=/?%\Gԍ G҅}B|֋OItI=T@GCc4 {*aυ}B|֋OItI=6Adjn(#rF Y/>%%8±L`Lga*jϠ?tQN2;59Ff|S]R# d] فX*#5L dᖌ i>1]QtI=iș!# D0([[+.!faȆ*(<| ߉Jκ*e<jnw[(@non^(k_ $..؄G}B.r V?pQtI=Y7R+&Gq!CC(@non^(/~Yu)'P>,8.2 v?[+.!ߟ@S1ac`zFp;||g|JKqp&F8VfBPhϤ i>3>%%8" F'&V.2 v?Z]RcG0)M1|/ i>3>%%8le`ɷ8=~2 v?rzSq~4CWwE\AZM,Fp;||w..! bKʃbLuaQ ǷqKEpvJ9.Պ=.2 v?懋Kqp1@p az 9r9…QF4pQtI=Y7JzwSGL 0@ i>3>%%80Kl:4*`'#[.2 v?rzW"[v398 \eH~ G7?|ؤ{q:paQ ǷqwpQtI=hȧ<g}> մp9ݑ.r V?tE%88^+b8Q1x tCî i>8\]RCݰ TʈM0TGnrr V?NW]82 v?q[I8Hzv?wR=p;||;i>ϝT4NAnos' Ƿq[P=i%>T4|Z?zqq( ۫ǁ>$((oi ك`bWW4\…kcL8zHvd>I6퓬yu8H%H5|rk7IڼzHv-k8˫A.4lGO @>_ @6liҰDQiq˸=ႆӿWV4LhX]= %@y{u8KDxjK"kIENDB`hydrogen-0.9.6-beta3/data/doc/img_tutorial/C3_6+7.png000066400000000000000000000254661211146647700221060ustar00rootroot00000000000000PNG  IHDR]7[PLTE  BVrRmZvrzz޾fj*:bb*6RjnjzRRRjjzrjjZYZzz:7:Z^zzzzzb~rrjrƊb^b :鞞"*Ƃ***2>JƺƂ:BRz*2J:>:zJZjrj :֦ZrZ^bbfb2BbBRr*BZfrrJNJ":rrJZzB>BZjz"2J:Zbz&:r~BjZfbZr26RƶbjzRfz"*JBFB2bz΂".B:FbJZn2:bjrjr*.R*6bR^j":z~zbfzR^z2.2".RzfjRZjZRZ:BJbbj"Bb~"Zfj 2BJZzz:R^r :"B*2ZB8B:FR2:R:FJƮBZz2Fb枒jfjZbbB"*R2BRJJJ".Jj~ """*6Z&B2:ZbbbBVz*J"2RRZrjnrbvrBBBޖ  Zvrnr222֖!tRNS@fbKGDH pHYs  d_tIME  IDATx} ,YǓM#Hjv-gv 5 WvK ʺVm5k\(*:uuc/Ř988]]wt;W?gi[ei[Ӏ;7kӬ9.`;3o~曟y%%M"o>27xlXso%-Sŭ)spy6kJK퉌}=$ozx852f,2fy}UA-[)sh caF~^%~߾S y$@o?2 iW,`ި1]?NCɆZF˅hܛ|[||ɓyۨHcL\Ry1&KeEjRRSo=?{W ŽERM[q#t|Gg߿Fc$HkQqaKZ57c;3']G2 ߑ8u4exϓ./8YUK,kqQVl7D8U 8mnoϿ禋o5FuIE57LY+c)8k:pDh,{g~~)+&,?PS^%*k0oER cES?œ/Y,6Tۉ7?3'z⩷s;/{%Voxٓ}eoY/r\~>۸Q> c!t1p("jzBʁHE %F522HD})D*5U 3؅ZkddLc!rmO$FpRl TOJFFbA^DR %#(jOqZkddgevoVu&Ly F:65'81j{LlSDb#((J캤422(@랥)5uᄩӤԌH޳KDECFy7pVXjrB+rXl|8eut$؏Oݣqz烈XhH£_M~$.E#>YD'߾H]aL~?/BzO_LDf cYPl4tKtDe^7~Hd[?nlʎ?PE?i,rV,Pƣd#>gdtK @Wj\42=StX2\a,0}}٧,1 3K>|Qc#/IEUUx/ЗpIidd|0_D|0b&$QJW,ND)5+Fy7%g acD9O̕vr:ru=N~}O]oz5s쁒aFUߺikNPzF攓`G̜`YO 6yUm=,3ݦRŲ cY0WApi1 yb,?ạF>u qB}YGB4J捇J5VujAL7 N$4fQM"b`ƈQbO̝g.jB&K2^M'ы5WϞ|ywpګhkשu"ޟƴ_sd0ڽG+( á' WyH"QJbtX#:&}iFp& $JxQc#IEUqS/PrTFL6$e9I)5e3*fR3J15aw@nݽa#  ƨ+{8%C( w޼>/`_ślδscjUa*IGdC2ChG3ȠVh Wt M+e=Bo2\7f<1kDc>a@FesN8:jl{WUAH˲F.8$muL9(֟XR3RࠍtMw3=D̾жddbEgʴ]n&b4<ܶ7_k?O~~7Qδg*t+-ݺqל3 #sd<ɘzGl_'ʺGNu[ȒnX?yD0x"ߘd#6:0a\ԓ62lF^[EqOF:*z_.8"}}HӔ,FXA aqgwGnz{{] _+c?t0;i_.~o$?5T5R< )n~t@'dl2\Z{lf4Q^_iL3fn!MÙvӷz&9[o]WjgGEq eae蒊(ÍFQ8S)Y=Ly1zׯ|W_3/~?NδԪ_گ9-F#0 P%1>E)Y=܅P'O}Oʼn|Oo͟~w|WQv'_^j\q~e|bd\VA@e U䒊(.8Z BeӔ,F./pv2>)ef=G_n[h~>ķeJ?UtלuH2j-Ok{FgqUUPn422g޽>{ID9T<8d'pxvh=^7~ $ү Ev8gwלD؋£n5F [UqK"J4HlѠiJ}=X<ڏ|zR?s=O?߿ùZ3ʹ_ssOR*]]שm|4XItIR1c=+gl&w`;h";:Qk]c*>WEu*CrYa4U}D֓w:=Q,?|p_ЮԶ>Ew?b?6p_Ѯ&FWEG'r?b2p_Юd"JKFk$'f{"v]Y6Z#Q%5ZXޤV_@e lz>S^@pɘY͖O u ?QV]Cژr:_|aM332?~ث k0[2qج Og8elV3|X@ dlVd/];=FhT'?)>N?SZ?/um2?~26+_d!ci MVI`6m2?~262f3Gd|qT h=|Z)cSa%dR C >h+,8dl ci%TLEN 2vqTX(IE:=|26W< %GqTX3|26; c wRWMwppc8nqS+v$ߌְϢv|YTŸԼ2qCWhNEjlĊ͵ǏMŎٶu ?Nܸ9=ݦ!cY7uɒiM'n[Ő157;\IEiR|gC|26;lf. c}Odٕ4f*gc|ƺbY&2?~ܹOg,YMd >ƶZ?е?kǨʞ\|:ǝc.E)d?5?r|=|jj蚠KDj|6ɧGn*7ABǵ?t z-2MQLƌ1|(Gn&s|Z(Goap 7ZDi i{d >~; c㧦G?5?*/|̓?5?R WNlOMZiBi>5?tHv2kW b-k-.qUZ+FǏU?2N$[h>+kdsa2VYUTrc|ZgU;o\5|VYV1Gβ̀ǏU?rggd >~V@OM ܬm|acTS 2?~jj,%\h8KІǏ,Y"|-|jj g+|ZGpaTi Oe\\1Q11Ϫ |ZgU폵2?~VX+ cgU폵2?~VX+ c㧦tkTnV6>~5J/)vFCOMK2aƫ$T cina Vl cq;cU18%V/ ?剋rX9ۭcDc8U@G&c|ƇmpR1rci)?\3 2q8WcǏwRak1qZ?Nj1$е?3p8QY;p~8eXJ8m`Zz2Oc? S@9VԴ2f3d >΍M~,"V@Ǐ~c[cǏs? |KqށǏ9Fŏis@OM폥W54d >~(f5lMmj2?~jj ˪WԜ&|6ȇdU-^ՒǏ/p|߆vWqǏg4X-ό!cYk4q2+C1>8_cǏg4.X# c ?|qk1΍M T̓?5?z4Z>Ǐ*A c9/>5? tYau /bK YX?5?= [(?5?2lѠdnܮ1ӨG^,v\NJ?13U? q#㳪GWYU㸘I$6Xc|YUcǏU? |YUcǏU? |KqށǏ9NIg;aQ- c㧦GnӯC)>5?rtr,^eEB*@OM]f k9d\4Z |ȸ|^Z |YUTqh% cgEjR1q1rgT 7YU8S+[87oa|6.BSK!cgIRq @s|Sq @s|2.X# c)tΙ Srwyǝ[lkbT~ d >^8etH2qSaj֮&IǏ) s,XltZ?K]9*u@1s|@96mF?e5 UZ'8sYaG])sRy/ڠmp8InUƭ?+8hEJ 3s|VX' cA2?~Id >~*X+ cmsܬm|ku; c㧦[^v2v˒u) ǏDƬ Gb_7(Ӱx ?)gjd&r{<2?~͔EN 2V2NrѸT"c$*>jd\?jdƥ /:ǏU? |YUcǏ獚kd >~*X+ c)tMށǏ.(o|-Ru|jjtӀMɐqc6?q\#[3{1%IDAT<^K-;UMWx8j !\㯢zʸɹBWn%q>ZAΔ1 W2.6[- D ύ0Cn|v{n\UjL/c6в뵲:? j1ӨǺ?Msd >^ox?"9Q0RD#%HJF1(HTJ]jWS!Hʙ2x6W=n)Ub,l(Jηp FўTè>S!(rW(}я%>bv tOItQ;ReoO-Y8 ann)B}9La8%@pxDv tOItG(X  5Ad0=)h!P-->%@xLr9ԏ j?v tOIti{fb!Fã(&#OXpè>S7"0MPU$Bè>Sl6`s4{-->%QBwET@RnU}YmlA(!ːd@q0joODgkEIe<a/ C|[[|J?Ķ "~4{!aOG"E3FlӸO,a~$DO:D0joODgkY.BH|w՞G>-->%(%C}ϐ bv= _M0joODgk^?Hr){o=PN8JFl!fWHM(#8 (bw(v tOIt3|6;n0ޝEg_L:Q{|ŧ$:[CQ.0 5jBy/-z2Xgg7joODgk(.؉xf'jg iDŽY}[[|J?)"EJMU@ 3Ϯv tOIt9 iTh`ֳPP=)}[[|J?3Mh q=VL>-->%4K-BQOR3RmFlHK+슈~̝=BZ >,u tOItG?mI9qQP:-}[[|J?zӉe$ӽ=.j,`O04-->%O%9h_$~Oa߇Q{|ŧ$:[Cޗ@(fGj|@-->%ѝov tj8m[|Pi>NpڀO|?6->nA tj8m[|Pi>NpڀOl!hC P +ooV(VhȸRu9}lI:od\dF&d3>ɚ7Z2.2v#V$mhȸ؍Tey?  c7b8d|ood\dhe7Z2.2vcinlod\d솝؊7*I&k@e\@vx+LFX珍 j5?p yfIF^+,IENDB`hydrogen-0.9.6-beta3/data/doc/img_tutorial/Intro4th.png000066400000000000000000000254161211146647700227600ustar00rootroot00000000000000PNG  IHDR]PLTE  BVrRjjjrz޾fj*:Rnbb*6Rzr~RRRZYZjnjzzZzz:7:Z^zzzzzrb~rjrƊb^b :z閖"****2>JR^jzƺƖ:BRz*2J:>:rj :֦Z^bbfb2BbBRr*BZfrrJNJ":RZjB>BZjz"2JRbr:Zbzrjr&:zBjZfbZv26RƶR^rrr"*JBFB2Rfrz".Bbjzbz:FbJJZj2:bjZv*.R*6b":rnrz~bfzZr212".RJZzfjZRZR^z:BJbbj"Bb~"ZfjjjRfZn 2BJz: :"B*2ZB8B:FR2:R:FJƮBZz2Fb抚jfjZbbzB"*R2BRJJJ".Jj~ """*6Z&B2:ZbbbBVz*JRZr"2RjnrbvrBBB  ZrstRNS@fbKGDH pHYs  d_tIME /RP IDATx} lUʢOrg&ywV~]ng4]DE%FQט42c *:ouu&6 [L7o>몯O]..RXod5b` ?^5)f -*Eϼg^^\.8ngn/x>o}ݷb7g3pqAڬ)y\iU|SeˣMbZbhbA8oO}߶WR Ih~|$DX=/}p8yb#`+b,Mp{* ҟe e0mn7ڨ3'zӑ ~r^\&W>Z,jWU1A@K'IE1?' ܿ7I*}KG]*P1űU\&U`X ̋?mMfkheJoA4عFg}٣[T(⥃CY}5e 'Xjp8'_?0PbX[v?ѓO=ԛ/T>{>oX.8nPDǸ2X{@èP10*> UFr/TjJmB%0Qg*R7Rr í 2ҁc܄:kdT̪Cjm?U`͏RO:kdT,g,Yk*9=C f0Qg(ڎTbCl&?{}ɾ܀:kdT@HkyA~:n))#}ppڕƒ'#?z׻;";Uup$LNgV`t1r[]q)pIidTE}"9G^M3bCqs@-㪭A/3k/7<&霭#,!'BLά 8s`.8l^hg5u~:]fK)TNT&7~[?Vi;;U y9Qwά & mTFvB0btEG^O7FC ~ިIOcꧾ ~t։\ Y8ut:cv*Hz\a ]RqXq̿y2? NZ z#Ϋx÷o%؛ ӹZG jG3+0:c,[]qQ3,z42*= #NMdg4?,fCZtӛ}xrSǯco{$?]z#ŭlr;$>XVWA2 Ͱ(wJidc1OR!:"MS))7e)7u~:~shb1ߦ"GW{#08do߸} ^W÷s*;]+:6F~2 '=bg Aؾ̈ܞ;ӜǯQeN¸Ux)3,\Rqټx4ܼG4&3S(Φi@Ci5(s*~)7')7l|)7%F|#?S?gz#Y{z꯳qWWN~/oʿqk?g}'>n8)!6I#'!ƈU9_Nq TaOMTFF<RSMČiia](_c. Sn|H3kTu~Pm]-§ܽ9O;~-?NO78=]~wl<1|8s;2=b^Ř/vBbͻ7"by[$3 L?mAc~ͦ3&9_#*.[]q8k$R48!sMLU=l il8^|pҳ`NeԬ)SQb#6' 76#VÒYݲ B?ǯ0nu$=> ̰ݓ.8wǒHLdiNpi^!Φ)ΦiMSFֈ8&e=+/۔ZV577rO|Oᅥ|ŭq$?v w4 ̈́o_r:H싕*MRvۄK^()pKMOdLQ:1lsF>2U֡T.8JwWp(eK;vlO:MSnR)7kv6ccIֈ8tLTEōd==~Oݸu7|]}Ng[o|(q[3%X HoNz_9#iñʬNf*y[n{8K={}!ѧ7\ζbna?I[d__Ix;YlDm6M&6kȤSn23HcF6pl,ەӍLb{W_{^xWS7;m-QV5gMgqi0 зþX~*1/gd# ֈ-ۤ6걄YSEL&*N$lBaV̲O:!tx5QWj*{|7!W*tIidT%a3}ͦb$* ,wlsoVsOu(ko_υll^}nvBsE|'9n8M߰8O^t 8j&KKb_l2Slf5c#'N*3 Ff$fRkdlͼصI643+գǥfXxF4״5 z:>O76ۄ,=[??owtxV4qiOw9{܇S_Gqly~[>z'__Su.i_[y9E48Y#*>* qxX 4w7fP 6>O BSa8>KyrOgγl~o0;]L}:n8qoM'#Qv|N;U\  K*N#aȟ| FE`(-:nAIC_C+&霭yp$ ϣGè W22"tIidcHnm6}q~ EmMܓ_O䑯O~bP㆓Yt#aKu=>1 N$q뒊(bdRoE Pݑy=90Qggr;bož< Utj#F52*fE9unTI%&2(&aŇ\3WFK&o#ZPDh:jdRq$Ub5k\Q/zrJ #uȨxLU{ʊmr (0j0чI.pQ(k)z:T"s:Èz8hr龜(9f>ۢ8rla ׻Ek|6`T"34ohr&b8 G>Rwmխa3bfPUDgC94qf%NJ| ㈏"''溧u6=Fs[t8(.ޏB?9D[zIr(fdg7U^Hn+5J]}SqYtZ#V <wE$.1-:&(\z*~U,^([cd!JKiu=F/{QDsnjE*z;]]RETl-:ʺŻסHU(ct꜊XNJVڃ*+XN 44ǒw/u=.^dhAGK -T4 Oyv6=S) R1咭4Z*?~(QS]|1=dP1C(′mӂ3*?~-[(qn qn qbpnIK稟ڑZ\|֊KvkϔQz;uP1Rړ t]3|\*̖̯IXӾ;FP1RPU1(GgP1\0j8[bm |TOp8.A!>(vEub[|\**iFNbm|ֆ{P/>|\*bY>.jP1 gFa}_UvpR81WɃq^Gaq$߁6YɟEP1(rX&j]s8aq؏"5Hµr\@ǏKŶG򶣂u ?.j|=pwBC@j$+*. y.qbC̼Tpe+*qVhSY@Ǐ: S{e(ge|ŦY[*?~yqӦ*y]*?~߻u=`m༎]J|qŶGj@بǏB>u=*lߠA3?3k夀ǏevJ;AJ>u=l["0T >TqBT >TqG]b鞊]u=8A^ >᳠G^e?XYPcǏu= |YPcǏu= |ikƺtP~yuO~g4H b㧹G\eBj>u=lFcšr Bϩ4(S,D*g~4|P1\ףjXuf@Os]s*?~zڠGdUOs]ƶZP1\ףo,!*?~zRD!"OW4(ve P1tOs]"FVӜ*TףYP1tPP1tϢP1tς5 |:gA]*?~X*bgA]*?~X*b㧹 z-~jGhasݓY+>u=f3Q?U*?~zl˔b9[_T >\#g4ң*i7SvsTLUKK@Ou"Qb(/3|R %"Kz"/q8Qf[_ |:ǥ⸮G?Ό=;bǥ⸮G?.u=j|qg *zԮM\%>~T1jnl[~O#m?.u= Tk:߃5ygs(%Ǟ)g5|yQnR3(l*bǥ⸮G{gE|QzۧbY zqVc*5̋ku=T\9j8(z4k:>X\D@ǏKťKT >~(X"bǙz,P1Rq\zkWɃ?.u=R*© ?bSף@b2QfBqJTaYe&<{֙EgLu=̮(ܣ҃T1 ,Bf㲯2͋feu=*ŗ*69},v-='?s|EGfWT,{k16c5Gqy1l<,SŅGbl,3u= ?(KT >~8/z,P1RqR?u=`mXףvmw*y㧹mQscۜGO|iwQCk@Os]_r왙gfPP1\ף7=g~ EM;\54T >~X|3T >y]OST >~bqb<+gxN]d=*qźKT >~bq?X\D@ǏsXcǏg^lzڠGdUOs]CNo|i둳]GT >ŧG-vx7aE<@Os]Ž@GGr0COs]"(y?*΅CeT >~Q-eq8Q*s泠GSPz#ds~|y1fws>|8*v! -(*?~X*bgA]*?~X*bgA]*?~zڠGdUOs][d4P1\ףvC*>u= lm'(^mA"@Os][wwrlP1\#nrZ\@ςbKF ?z3y*T >~,ѬL5 > z(  {֋S#QϪU\q }*T >~3B]S*ޏP|T\D@ǏKq]X8/6u=j&{?~y둴Q]sbǥ⸮GζBbYuG=3Sä޵P1\/u=v 8wʏ變oAHc̋m]Qu?+?ͮZ*&' T\`ӵiSף[ryTjl-Ϊ8Y #u=JGګ{3ߦe] iDFWUܹ,IXs糨2?z,P1CpXbzqPR?tB]X4]J|i둴Sy;b㧹GζT >\ףȖ' ǏDTTq\#i/IO4ǏXcu=2®V#?Vv"WqAi>Fɚ[+u=j*FF>ӦGI%= P1񳠮G^\Y"c|YPcǏu= |q]YT@OJ]*?~\*zu}Q6;p<\#gKE ?u=2eP1tOs]m2 *n}?-4HؖLm2uڼ?mUu=f*R=+2W􋘾HGk>"(dSq.Z9JX/rJPףG["b~\Xr(K]yA5 _2Es]igQ]e*?~XbM]e*?~\ۺ|^kg{IDATIЏ>A_*J}|&*z(u(@i-&7-)HT2]U+^|*zpMՎmMpU]!>+^|*zJ`6#HoVJgJ L>ŧ"UA$PM-ER "è>ŧ"+{r&Ñ9G}MPè>ŧ"G~C p%f%NN#JFY/>eu=±BqμLgAJ ͑`I {Bv*..:.bOs<ՑY 'BpCG‡^(|o*.1 P =r4Ur:a@ 8 F{k>m"EZs,NPH <χ^(|,ܐP"ډ&Y81+؇^(|o*.롴AY4q 冞iF{k>m<%eu=v$TK3 4kz[m}F{k>mQEC9TГS'hjڇ^(|, ]Pjơ98 HaW6J3EYtY])ǑW=g0ZOӡ~PI}y̷貺]Z ն91(P#9'oaW6J3ƛ+zHx:[)C%1O϶}y̷貺M`#ݗ%Gьp[W>JF |xSqEtY].L,t`d4V́ G>JF |xSqEtY]kVvxw`9,{rbtv#ҵQ62貺qAG+"iPmM{v#ҵQ6T\]VC ^$B=,=5{Sœ43{tmg,Go@[=}[:gӇ^(|eeu=v`d2!SmO({tmg貺\&JNq3F{k>m"JlȐu&?1_lu$rÇ^(|EYtY]Hk6lʈJF |xGItY]^$)'Y9bҗ8)LZ0+]%o貺2gR (4˼z(t[0+]%oovW]VC5FC ,פڙa/20+]%o/E0Tw=:ؑ #ҵQ6vWݹ+]%o/QM2u=.jǛQk|u=.jƧA] o*F] b@o*F] b@;8*F]7C]Ҷº>ʺt Z">^e]V,qY(T}ʺPqPBT\mLűxu= b72'Y*z@@n*>>՛8m^e]؍TUyu= b7b;T|?^e]؍X|ʛVY**v1/<^e]؍|Kiu=*nf7|CVXWU`bTBǫ+3?CAIENDB`hydrogen-0.9.6-beta3/data/doc/img_tutorial/PatternBase1.png000066400000000000000000000262021211146647700235300ustar00rootroot00000000000000PNG  IHDRcd=PLTE  RbrRjjjrz2.2fjRnbbBVr:::Zbbzzr~BJb^b*6R*:BRr :r":ZfrJNJZjz:>:*B*2JJZz:rjr2Bb&:zBjZvƶZ^zrr2Rf:BJ"*JBFB2:RrZfbbjzޖjbzJ*6bZv*.R".R":rnrz~RZrbfz:BRZrRZj26R:FbR^zfjZRZ"Bb~ZfjjjbfbRfZn 2BJz: :"B*2Z"2J:FR:FJR^rƮBZz2FbR^jjfjzB"*R2BRJJJ".Jj~ """*6Z&B2:Z"2RB6BBVz*Jjnrbvrަ  Zr222鮪֖gpvztRNS@fbKGDH pHYs  d_tIME yt IDATx} lU+ѧk6 kY[ө fz#b^!O31 B*ɂ +Q&ƨ#`b!QQW71mdd$8uߺ5Nߞw鞾uw~}u6~5aA&9__ϟufDDZ_c/ygox}W{Wr%Exo.t=|΢߅-Y#Jؿr!l?.(|8ۊ$ P$LX%u~G~_~৞ Gxeg'ag3ei7`_zDGap Z(ܛ|[lOy $?_fY@(3+= i\"o=с?{P̅+„؊[+,% $i~ `5 "E…6 g/EQ&A8g6~pEPp90%{pu/y~{v%\̍$L@tA^3/>>PL$IyJg$J$ H8Ay>1%~Dbcj/}gM)#}{||S_= ؿcؒ G:$LXso2Q ?,TSRa_*P1QW7|0|<VɫS8uhCI>/;~DG}0TUOJIFdU9y.kK}LaV圓uhc*Ď\MQ #9&" HST[\<:<ݐ'~>{w~Ulj&^ut#q89g6X7HHĥH[ær:r|o_a~}_Iw&&1ut#cyܪ*0#G&a@6X7d v{޿D;.%gCGه}ݎ7wZPۑx |qxcp߱Ijd(8ܐd2P6CĿ~~eaڝviN 6X0H9O T_3DPd~뉛zw=´;[D~.mלeFKFq8nՇEBTFP##εL  aq".GiwS u|v C:'o=}ӹ'>X]z31lDCoלq0&gkmԌVUq.B}XYb5D dyzg(α!ͱ+W<_w(l*PBGԓw{{_%}UɴVuʣ|6kNqG$u7ܳhl!5<]\ ̈B&ducKMFsI (f'IacC4&&QslLFslHsl*LI´pwWkPe<=yD旼7/~nm+.n_y|##v0vI2̈@ss:J81<]Qrjǭ3>ׇlRo g!I6GaF3xL>!:1̱u@#>N`"j"T](bG(bzz]cc?uN3;w: f;g>zWb9]nF;aÝ~ƳwV!sг|MM:UQ|3vE?jbӬQ. ̈0Έpih#Ʒ qdu4T303` >c Q: a7̱A slzɖoʴQx(Pv^Hp(ROO0Fw_~썟siwS} (5'5a?--e{F;+kڋ&_ѰǷ)5.A$Z4Ҟ p f'95H[U}XpTFSܹ`D3&3o`g9nLAOsl$0y[">KJvI°(Ey#w~ٯ?ݤ;jb0ݼW=dhɢn]sz3v9>hg9pB#K% ~KSLA6 6_0 [~ӬQDUU`F\P16Xp:7dP҃ h|7~>c($y c`wssl0 s5D)R[w~KOW|X]zq~:Kn0nל _o@EN&<26Kɩ1N&:2Gpآ{3j40i֨D3☑r8&&.fވ3F9)pcng0}0dži_ 27p>iw) Q…iAwog979vsalUa`υv$CO(@@3d PUN( aFd3a4: "]H=6H@-40i֨\Ufò; TF_%jz3ccLt,aw(}>3αؠc8wQ3k[">MǓ3K8r&n_c_#ozkއn]Ԛ?#[1D`p/Q~JGG@'zDN"#az`E%S(Eޒ&}MI/xpKfI$'**0#>`5ڤb5b 2F|;_PA s3O=}|ϝ_[υiwQ\z{ ]smO0ՏC2a2,l<5Ы)|{KgՎF謷iX7'hӨ\ ̈sa)dhhg"w~MU4N_k}˿ΟcW񴻨5i\>pF~#FM\Uq-ۤb5!eXvw5d8s_#q?kO=3??//ɿeVŭ)oVnGNB1"aԤO# U8& xXM%lRoCΤo~݉a2 giyCO~o~懿o0Њmלp (9G|AݝhI W[Uf4Їs&87yFM5FmMRNp_e??WfъD$lb];BwuGU3(JDb>ƦSɾo㭩-syO_ʹ5"]c)>wE\- ab[M__$ZF-C:D]zݓpQtWkųku4NDBDhKW: tE氲Z`Sk;W:ttN3w"EZ3xN.%B$-:ZPx;0jytA$\_k>!>a%jm'z P_k>aջNZ-/  Z&E x%SkNZd}͝7:ֆ!i$\d4yJ'Ç/LXI?K1Iq^VXgLH ]?p) ؞*& {!>NT%j7IpI~U 7+pԘcDUz, $jpB.њ꛶DZJ$ >n_Ʌi:њ˜0IqrRMwF{~'l% 7њuEp~IXW4 7^"B/#BU{,Y뀬ӐFT%+$$ƭ|Q$a_? tNӛ<:_1Iq’HKiHTAf|',H2^0ґ$8a^/JN"7Z^&xj|I‹@|h/ OH8S-O~ړ-U:#07K$|\:/$L$L|f.t ?Ǎ$+dC|h h$ao? 2˅[Iq*a]!cugEu)!v&7Q /kv_|ڎI¾~G2,~ ?1>كCm$a_? @z#ā:r >n j>YI?0',aڲ\x>9wwF', R6r+L%wT!K!ά`%jm7(<$@њ6p58 ĹkmW:#aqjm ㄫF {!>Njm ㄫF {!>N Z#/ qF ֵӠ' {!>NڈӛғʏH67a2€:*)gIqֆiKfF5}H5 >nHZ-5^p=I8P@qjmT%l~QxFq"kmdYpG0Y 'w!>n\@VAC|ph$ao? WVAC|ph$ao?ljZ^kb%A{!>NHZaWӯ::U7ZpTk#nLojܒ >naN;8 >nDLrᜄRA$\Fkjm䮺Tf$ao? Wc2 E7.Ir '$a_?Ǎ ('$a⳼ . \@GggIqUk#gAC|pYytvF'\6ZIq6yI%~56&Ӓs$8QSk#i}$ao?ljZI]6Ǎ֑е6&ZA-5 >nu5o-ɓI >n&|z '$z7.FrC>E /q6g$HgC|ܸZ$8᪵*H~Z$8᪵*H~56uE\kb%A{!>NZMd^_a& {!>NNZ-A|hMQ Ӗ@DIx!Ea]kô7">Pxڐ >n'a]kôW)?n $3!>n&F^” q5 WjmHIx1I8*H~U g6ZIq*F {!>NX.iq5 G6Aq1K޽',mZQi=$8aI$tis=>>DǍZIlI=IF{&70+lW5DUQ5.HU0E*I8_kõ7+ >n&ƌ$Fkڨpi;IF{ӹZ3V7ZpF {!>NXpF {!>NX>h$ao? I\AC|IxV$Z/n6wC|ZI+DJspY1Iq’HZqc|C>F{ֵ6L[j( GƷɃ0ِMIw]kXMk@Ɇljm9]kôFyվ A2 ɆlꍪaRL缄vg>=l4Z-5 ]>ګl"FP.L6N Z#/ qFd`G :& !>N$HZkI¾~: 'jm$ֲerm9;I~(HZ^O~eYDZjm$ɍmA&O'Q8_k$FkQ81;avUH~(\XgτIgC|FZy g$aE|AC|F|AC|ph$ao? wAC|A 6NZd}͝7:ƧF.X%IqֆiKo\F$I8aXo&܂ޞETP4Z$ao?ljZq#w&!}H"a(-$a_?ljZis"L-y]}'jjm r4gs8(37ZpTkô7J$"7K$t % Y$kmč47:W3 $8QSk {!>Np$H~56#H~56L[WDC|a$ƫFW-$8QSkô%J(ٚ> wLC|a bT(\iuwLC|p($%\0Z1IqQkH\;& !>NT%ڨp ʅ >nJZkxF"W ppbDg$b7K$r6ߧ', jm$ǍHjm$Ǎ>h$ao? K"kmkTֆK.yC|$F4|! !>NT%0m"'6琄}'jjmƵeb7Fw>ћ$8QSk#n.PuQlKQwV^ӽ,OMeT'>Y ޕpgahI[p|3|Nh|1rH*Rŭk/E7|jm%g1*z4>njmxl_DǍ&H~ jm\9ͣZk-'Wkm \) A 6<.F^tɻDM'Mo> {!>N0mM2Iq'_bqNDUIq"0䮑е6z>~$ao? #a :[ {!>NDNMkmI~ J8>Db)C|ܸZ ļH~Zd"IDATyF4LC|ph$ao? WVAC|^lh$ao?ljU?Z$8QpTk@XTjmx\$wo?ljZ-9pF {!>N,H~ kmDza]k@C|(_fjm%)x‡Pd$B)՘p4hLPwC afC8cs*C݀A 8X=l4C|hOItF8UI%Ý?0vs\( e=DАʧ$:SkCJ!;TIP@b> 7`aFhhW.!\V>%љZ3)!dTK~i4+AC~.+L 9C6JaDx, j( e=DАʧ$:SkoQC&vv 61zb&TMeFhhW.!\V>%љZRqaNv,D\ 2 Ю\C |J36`8Ps[jGnQFhhW.!\V>%љZ '&C!4+AC~.+L T@^zb0vR4`Qv!ῐ7,@cg$368 dfJRzDr2 Ю\CD|$:SkC gl,wX@Nd8:aހQʠkCB|L 6οp{ST*LLq>2%0JtmH]sP!0\b*Ԉ$9lKUeF) qk|J36{QT%љZ,>˦Sɾo㭩-sykF) qk|J36O@ Ŷ{Lp!>٫3R]FDgjm(ń Bɾ:KFR]FDgjm &y=Vv*]uڱQʠkCB|L .rh n Q_ >sՓR6`2ڐ7$:Skc.f\+Ofח s4R]FDgjm`,&Qt.G=H >R]FDgjm nKEWpjq  6$Ǎ9(>Sb{F|drLh(eе!!>ntAItFo{\\삳!tnɡscyǐ Ԣ$:Sk 9.'c%lN\xrdF+]|6%љZ nJ 8-xm0Z9(ƏD/C`0J6RR5`%gsP!1C?6AZH9Ũw7`%gsP&i_l3 8QB[.\>L 'AbT0.o%gsP!{0GᡔCQ`y/35.\>L }p++'PTd8<Ƭ`.\>LPR5D-d0)h.P dwDgjm=d:bUP(ހJvl.AItWkc%K6`66$d^6ѵ!!@ ٬MjmtmHfl:PkkCB6eӁZ]Y/ڐztF׆l˦66$d^6ѵ!!@ ٬͚ jmVVk( ʏWVk%|D ,iQ(P~Z$?<Jxe6H%\O~Vͤ[X,U @#i<>MWVk$\I؎D§FO @4lYIT^Y p $a;O->5WVk$\I؎(|%6IjmK ۑ(JJlXY p!pAG@8[U 0 ?XY )%@qH.+4IENDB`hydrogen-0.9.6-beta3/data/doc/img_tutorial/PatternBase2.png000066400000000000000000000262251211146647700235360ustar00rootroot00000000000000PNG  IHDRcd=PLTE  RbrRjjjrz".Bfjbb:FJRnZbbzzr~2.2jnjBVzzzZzz"JNJzrzzzb~:7:BRrr***ZbzjrƊbbbzƞJZzR^jƺ26R :zz"*jr2:RJZj2:bB6B*:*6RR^z2Fb :ZfrbfbRZrr":Zjz2>J*B*2J:BJ:rjrZ^z&:zBjZSZB:BZvƶb^bZfbrrBFB2Rf"*Jrbjz2BbjbzJZv*.R".R*6b":rnrz~bfzB>BZrfjRRRZZZ:BR"Bb~ZfjjjZ^bRZj:FbRfZn 2BJ:>:z: :"B*2Zbbj"2JR^r֖ƮjfjzB"*R2BRJJJ".Jj~ """2:Z*6Z&BBZzBVr"2R:FR*JjnrbvrަBBB  Zr222鮪HtRNS@fbKGDH pHYs  d_tIME ? IDATx} ,U\+ѧ,ۯcۚ.-ۉ+az. G<'FnT`"Hf%}e& Շgu#AFe$pstUw{7uO=}[_>N=d΀5_:vՔs%;o|}%%Up ^%Խ;xo.ڡ7RG\9Xfb-.K)dh;׮%%O}ãm-aƲjs0cy. ߎͶo؏KԳ0'a xiIg~=:2J/XP+*Bw'*$mQXW8½ɗ_rVGSf#o1#[H  +L"Խo;UC?{,rR-Y摗p6Eb8I8%(4 +DDT㍜s{$};$I|(;q(l$z>+0YY5Ȕsw/. 돎Ke̾3mD9.rH3@ =P/ċG}/wX>0y 3 Ƽ0P Ǩ~S_vQ61[ oPN$Z_ɋxJ3p"~g]xꁧ>u>.-5$ 966` k͓@^ Džþ30QW66"|0|ȃܑ>S)9߆jIzc.blM)Gj #uhcH̳PH./xēw$n1j9nȹx@F.F=o(p$C>[0QW66} ry%\F"<<>N==,~}]z`KW*grV_qڦKxרU`z9Re# B>/#Ѱ%(9fPOaOkW2~wW٪>*_ŷxzn_Va|[Y$ DJ*UF ?LxLdɽ!+c%Ύ}s~[̧?f-k~nrV1ĉOzeFU`zyp߭J& aD|nzEL2z=G]Qq>O<_$jj4 +^ {UR2(R^LbDe_sDRWy㉫yKF96!FrlToB Eo(ṉD"䍏R$}e|x'gO1δ~=:   ff& ~Ii!~sKKFcO}z3.ʣ ݦzzل>`ĢaoUC2ύ_B,2iبD"s*zJwz3eggQL(}6?dj(Ǧ=L#_W1ʱОXU">Mͥ;ټD"wioW?Mp`G_ܾd~F8#}y0AO@0Pʥn1sLwz $K& T6{DxhBZ._H4lD"ne2PexETԼBtNP%3tI"sl&N$ m9Frlf)}@;3e*RQ(}fڈ M*dǠǴ}`cmTNez8S¹aAo裷nc{/?p5 S |l.'~B}j@T@#:  [CFhhB6ftll{';4Q}FŦGt; Mh0~QƒΕU`z|ruYðJ*UFs MULg>~*RdOM>3>ءTMc35WdcEeʬQz)drn g'gROƫ|}_~s~oz(M[3>w>_qN?O΃퓄wTbz4AQ,6 Bji SF$]#L-튆&&0GE9 5Hd'J*0=>`+=TIhcscpL2 p{^83Ezgo[O1ʷ^oo\NLozՍfb/PIQގ+yw&2KS,etЄB`ؔF=%+#5}1R=b>Xnәqm:h\Ш\O%瞧. !*TmlAL5}^Hh]SOƯyͳkOϻ~U<9nPzY~i&hDY\Vq=WIhcB^HkrR/|ę[{w?#os?[?񾯾_opQ_~[{ҫOB/GèI i U8% tY-VIH}wnc.@>uzOfg~/ ZjHTWH(/pF Jt*0=.,UR21 Ȩp !=z8??/΀'l=*+N<2zd=u+ࡺ,|G*TQ,[|wL2 "_VY߸{X4 0Q766=s> ;(MpK{P= #uhcsE f]/=B_-1w¸&w3D£(=ClLH/R#z #v E1^HᒲPxOI8|9;"+E&R _[Wڵn]0f_ޖ}(>8V_;R)+ Ǔ&b w ];5uV J$|fԌ7 ?ޞgzfZܨQ{:ZP"ZGB?!r }B&Ty!Yq?ЭKԵ= DZF/DVYt )tѵnQDNtKa$r^~Ƞ[HCڈrw+ Bݺ>5UȂF<8ܥ%htL ݢVVk#x';0jYtA$\_k>IOˋ.[k>fZ-/ hyϕajRwZu.G{ZC~ǎa/0$Oyqcz]|,Zo6C®~ :+Qu$fS?p+ ؎*% 7KfFsŴ"ݕVZ}3 c8V68s;ڒ^}*()ǎ$W\ p.іꛋH8jv>V$+8g$|(IXW4>v6#*@M;ڒh 7|h- KYB}gGp9C6>vtOIºALRiUw`HXQhdCUw`HXQ1/|"!Pe( GvTHXQhP03,Đ$a]!𱣵DB^%hhbB>v%a]!B©j$ >MiKºBFaF"#a ;;K$|\x$ O~ڒ5|hKºB$܄- p~ǎf$T H ?cGk(JXW-M;ں]W(szZ|C~NJ򼰪~lZ~C®~NJr.*d8#DZ?12;[SMj>ii=0C~NJrֵ6L[ 矒gΩ`HXQ\Zk#TO H6|_xm+>v kmT |3µ6+Z2HT|XBV ;+l6Z$|hVkU@~NJZ6p3-~NJZq+\;. yHXQSk#jL /*nAU;aR€zxtv>V0mёn[nMHcGkQX0mQ~1L셄>v%LfA;Pk,aGp-ǎeH?raYjmS36cjm HXa* ag?cFZv>VAu nyw>Vڈ[ٜ$'_u:emIڈڗǏpcG[66LiNE#ҭSH 𱣵o0Z4~beXZ.kmTfVk,HQ8c6NL=]KHrSH|ZpqF,F`$|X9윀Z+VkU@~NJZ6p3-~NJZɠe ;+jjmĭ/7;v>Vڈ[c\D&" ;؀mIڈ[i;ڒ,OdHcG[ڨp |XNc6 KQ|XBV ;+l6Z$|hVkU@~NJZkm8܌ p˻]!a .fHX.gp0mCj^ іM ?x$<cG[66L[.r[ $\ - Z="G@~NJDb\X_eu(lі36 OH$|hK™ZY #>- kmTH0Hx>ǎf$Zv>VsF% gjm HXQpFya]k\XpyAwg?cEyFBM/KY~+ ag?cE9 ZqkXjjһ% ZqyX203ϐp cGkQXڈ[vT\2jS ag?cE9ֵ6 UAˆemI8WköK;ZI#Hx1?cG[.ڨpa?$\޼pmZ cFcGk3Z-v>V$" ag?cEI¹Z-v>VTh𱢼kwTh9\k1>% Zq+Jpf'e!aW?cE9 ZQc _іM ӖTdko,K°MI~a]k#H,/ 366)J0mQV/m62\r=l`SoTV6L[bʕsVYsEaSC6>kħB¦ֆiKre9.Ht] )Kڈ°MuCAA6pFY/Z慝56/HXQSk56/HXQSkյ6nF^XQSkC7Ts +H—bdjmĭ/s8C®~ Hkmĭbe9Y蜺(ljmĭY'Q W|h+ ZqkP UM# ag?cE9ڀ>vZG0;:jK6K0$|?cE) [jmd%GƐpǎ֢pF\8[kE@~ { ;+6Z$|kZp9C6>vtOMtY56L[`sPi <%aSkô6Lejy Ѽ56FJ>E𱢦ֆiKPQ\h!aW?cEM ?+kTH8o4𱢦ֆi3 +SUFRVk#H̗ph!aW?cF98Ij?0$|(iz 'H .|hK™ZLAZ™y3ǎ$qv>V煳6.H8Z.q@ ǎf$6Z$|(Ga]kZ7#/|GBڈ%MQ5𱢜 Z-yHXQSkô6-cèQ?DoHXQSk#jdSfE=yvʞftjjm$*)Mu띕0sܽ\̭-X4J8 Sv,FsjmHX.eQ ag?cEᦟ\V ;+إZ6p3-~NJZQ#|>v>V0mC2$|h̺ֆiLu#*BY"aSk#j̮跙8 ;+)66̿օ IDAT"T= v>Vh 멉8(`E J8^Q0 W?cDzjm$bZɼpaF C~ [V ;+l6Z$|(l* ag?cEᦟ\V ;+J66`mP_pyAwg?cEM =Ol56Li.$|?cGkZ- ɪ.ӊ0 ٬caNsRfPZKŎ5D.tLn16LG\\+}w\;&)lI$ړpgvڼνc-ZbH /O\8QEl.prtWkg$0f$YYF6qH|XN ;+h tq@®~NJ}kQc93>Lp9@9"5aԭvݎZ }?ގ7{L2o ;l5|ZTNSOHx#jx8 B׺|Z/rJ2Tsž|^%C B׺|Z{"@GHO&R ]k|jmYxPJʒ=08<'e?؄QJk]>vtO^tQ G1p/j_@ѓ2NiF)u 5>yE6r?B;> ~0!'jra' B׺|Z|7@e/ݖb+5aRZ]]TkCRuHҖyE68ҧ> /eAGdF u 5>yE6]/|`䅾`Du{cF u 5>yE6'vh%;[7R 4ۑR=لQ k]>vtA^tQ%epFr vEVM% %cGESl~PEA&=EYηb84a0Z]s]TkC\o:޷m= i,ykF u 5>yE6$}O_9~uYdp7JtKǎ9ȋ.!=Nar*Iw/FejG A׺|ZC RHduv,n0Z]s]TkJ[4/|>s A׺|ZPaƕO<5.fM% %cGEڠYx[< QԷ6#j(aе.; /FP;Bnt3940JtKǎ9ȋ.1ߧ-A9,y^oG&Y4a0Z]s]Tk3}^{C> tnC9沿+0J8t l`SZܛ<,Wd,á7 +\xp 0Zγ9ȋ.O@/e(N/rO tasEǏžO9FayO@x#)H&VrljmqPwmSܡ  1JO .l}6=tasE= Pʙ? 7o5aӅ͝gs]TkC:R쉝N?P]2ؗ"PVЄJN6wA^tQ@R5D uBLáʛ0Zγ9ȋ.򧄧"prro0 eF+9]y6y-JN6wkmtK`^6ѵ.ztF׺6eӁZ]جMjmtK`^6ѵ.ztF׺6eӁZ]جMjmtK`^6kRk6zڀ lj6`Z1&Z8 V^Y 1Y^(gZp ^Y HKU3KxU6  j$>6YҼZpp5b >WVk.Y,٢㨼Zpp5*$|fWVk.F}VVk.Fm.|)^Y HHD^—"eڀ9 ܪjm@€ice6Hg0v^t?GOP}IENDB`hydrogen-0.9.6-beta3/data/doc/img_tutorial/Riff1b.png000066400000000000000000000252001211146647700223450ustar00rootroot00000000000000PNG  IHDR\C{PLTE  zZjzrr".Bbb:FJb~rjrBVrzzjj2.2jjZVZz :zjnjrrrZ^zzƂBFB:6:rnrZn***r~rb^b銦Zzzƺ26Rjz"""JJJJZjrrBRrjz2:R":jZ^b2:bB6Bbfb*:*6R :Zfrrr2>J*Bfj*2J:BJJZz:Zbz&:zB:FRjZfbB:BbzƶΖzRRR2jnr"*Jb~bjz2BbzJ*.R".R*6b":2Fbj~RZrbfzB>BzzzRZjR^zfjZRZ:BRbbj"Bj~Zfj:Fb 2BJ:>:: :"B*2Zzj"2JR^rƂz~BZzR^j抚jfjZbbzB"*R2BR".J 2:Z*6Z&B"2RbbbBVz*JBBB  222֮ZZZ:::JNJLș|tRNS@fbKGDH pHYs  d_tIME #~a IDATx} lY֔FQg[V(ӈ}0{t+0*7 \] heI4&zQFEEUW] .,&W@:::=}g}{NtkX[ncm}: h:폿}?jJp[0~z? }sϽoGX5% ?>6jX߉8<2wk;]C Y#{^m7~NYRkxg+V%0`q_4g~_xO'} uf3V.a˚ee2\Ξ8kloW_aPzL\B{6@,aKqyqv;|{ߩomXVPʇށ46??q5$" +[]Kaé_n(sKgq@{໿_k~ %pa`\cmD,qԦL^*%>`:)ZLv_Փa_Ɯ> 5F0 hm]HΣD*6UtK?⊂-G0QFkil'BH%""9TW퍡JPlF*2JrxlwME)qxh=]'~>;#+ENjݹZH\5}J$tӟ#yk q".8֓d(A"&ƥ]>$9l*?o_|wV|3g@1+0Z-xޚ*H{\ Ӝ4|Xl'瑍+;\ KǬyN;gYO~>Ϻݟ_۶ݹZXMۉE fFE[Si3OPmTFkD%ynzE&*sꟃaYO'g'ˢbw֙ \5Q4:YѢhTArOH%ᄒcK#vw2R{+uq{/?y=ݺ{ϓo{!*vjSgtJĬqqޚ*H{Ӣ&K*Nؐxr0X'YOYh!;9vwҚ%utfE_XO]~K'?]z-|/|vz$!}Lztȏyk qDH5tJiDqD0CJ'ڬHBٸ;"WR-t.*2bHǯQNTAЧ>]RqӸ zTirh&FJ@YD b’1D]HLe(l@Q3WvwܗJ$)VypE1h> O:({~{3:K[7yDiEt nh's'aGL$m:X͆c`y`zAnWRL0z0;7_# PFkEtIiDq8DO .H:Qd94QM/36 5b{1+F6 3FmҺƷцc9.4J=+<=vKny o?(v~#&?9(t{)vIi7AX @&M΄'LuM^v֣*5Q@RQ0v_#/D5U,֧pIi;D^$?d&ĖQ,͡mD94#)F6< b-`cDݍ'ƧvwB=۬^r=L[^c >yMg4 ڭ]%t4~ٮ9#=CΎIzS1sF J`e6>n`6v:(VOPDݦ=Q/bKf=Mg5K[Si+2>%A$D^QcbCNIyDScD;/v7TzK4G$[g/`?uLWgq׮Sp$Eix)Yq=&k~"RdjS4ݦ)9M 9AӞt1>a(rWuw.TA㔕Ӳ1%ںWإԝ>)P;3e:R94Q͌S=F6uь#̌ 'ƨ+;-%czz>x߭;o|>-_m/$Lk9VN%8鯪t@:Q]Fl|B6aLlEllz2>aX?#zWO6Fcg5=k A"iTFkB':=처ҿ}M9490F:Ѧ'h3=&ɞжddeʮ]n*Fb8>ݶs4_k׿>үd?sR[δ%t+:_{f4R0KvI;`:9="t`"u$`|_b|GmR13FF4>aL|_#/Dyn{Cn"TFk"}iǢ9Y8xxEizz[O3yu7}}/DLb~7^~a$"$|#\oלf*J0#-JIa:?et6P=FlJ%#2Df63")6wgZwNigLW82rIiN I4UӅsI&ڎgz/ׯ]~oƿ.QδoԪ_ڮ9ݜ#0]sSiHoG%:E彄>}G "ѧEl*ᒊӈDla,FSxl[$I/g>g3<|[JM횓fE#0[ &4uIiP[nb,F81?jo z F0 hm}PV!范HRϕ}-!`:+NXjx jCH>Xp#k燏x{612[F\ #joq!4KAͣd+5{HEn)5Z[}A:'rG‡<*Cz/Lfoas` Qrf5JH*IL)TJa`5qLO(`RIKF4G|))R\ad5|uիa Oh'DUC:&M/Q}@bEIχQNջ:Igl *`5\b"&zMϼTodЖQ7L_tv`]1 հP.Q^_B?(F'GD/$rnj׼VuB{i*sǑjllҊ;NFHEGUѝc=TïIEkV%u ^zVW#ˇ_EV euUU(G>HRI/iX#,:lu8y}"(U(#0:w98[ ;SVåaf[k>,(bh|a/Uz kɥ$ ?eǢ  ?읕XXVij, Og45l焆3|qX/ι ? 44ldKhƖ'tOSfqΜVyɁ(n0԰YȺ O0|6UX+f!6 ?M u +3bh|qK8\<h|԰zp6c~a # [2h|^b%Jf0ŧaS6?pp45l{: w>M 0tOSæ4 >%nqL5>%twsY ?\b"& w0wKY6<0԰:?fz ?M *|PpgykU4 kf 6m C೼|XWpkijTX n&7O ?%tE%]a^|V1?hewA@Ǐ#U4a zk2Ja G8 h|qqʥ}4`c \|:Ǒzy3c.9Sh?~q: O8|qԸp^Y4JCJ>m8\sB 4r"^h|VͧGkc0GkVï'4 8Jd+||V#of ڨzWz4 >~h;a㧭G ?m8h|iAK=ƕށkǏzy3;O[=ٹg|q$쳛0O[=2W<&0O[=2TRX03GSÙ^+mq|Vg~=r)߄'(>sqyZ>|`̭a0gn=Yә ?sq h|[dtf@zK4 >~Π>{{lz>Vôh81mV;4 >~he[i8KǏzi0f尋8 >iQf X?4 >iQfk"W'8 8l'8 8la O[=2[h|BV6'@>m8h|ixw@O[=+?~q4^0V:z+?m8F}S?~qXU0Ƨ..Qz O|qX}XYa H+S_,*X0S(XUҰ}vq|V·]Zа}@.>aK8(k0ʧf=׼'>M q,0%l=?~.X*a㧩R=?~\ACi=ƕށkǏz-EÉieQ@OSi=Vy+?5R#Y؏c^㨰eu/Y j8aS6_ eY֬" ?M 8lkU48 >+^\czkq8aG>ܨѢvh|V1/^UØqr=%?~X"auD ?|\cǏz8~ǡq4<\>~45țYym5Nfh|qz% 8%L=*|UXe0OSi=*>'0Gk}*Vf0Zop*\q|VDZDG+4\Q@> >ijTfy~&G8 h|q]/QX*aqDZT@OSåzK4 >~ΠGc5O[=ӖĴ9a㧭G+ۓ4 >~㨰eu/b˃4;T3iQfR]6aGsGxg. ݖqZw ;B3Nf=i:js9_kq8 ]q q|:8Ngȇ'|xN=7cv+̥MU4 >~\ZV`;c;4 >gn=4r%̭1_'Ӂ[f55SY]`^CzK4 >~̭DZT@zK4 >~̭DZT@O[= Zq4<\>~(quبmFs ?m8J\j8e>4 >V.#25th|iQJ?vF'?~q) ppPAu.agn=J.q+F'?~h4l h|[]ÅKȇg%|Kj.FjRX0%J8Nh|Ηk}R=Sp ?M 83p\?q4<\>~8aS#ke'ub1/~NqXq\/aqT]27"?~æGʊ>얪[ ?|(ڛ+S9-[us C֪8ʪeu/oV04 >Q#Pxn,TíRQm\p./~Xhz s|X&az4 >~e8q, 0SRcǏvt-8W{?~qd,<0Vr/ OX|ql= GP>a'0Nqd~ 0j"(KSx4 >~ \z h glyhhz W|6@zpm^‹agn=?~X*ayeR ?K*8 h|ij8AaSqwx㧭ʜ=j?~q\|a O[=k5/x ȸVa\8G58*dm]lY] < N3>p.z=R.6:NL`| <`kK8Jk K 0pHz|81b>\5q꼄/c^|_c0sR=?~NDZ,@OaS ?زza2_RG( )Hj(Gy`IDAT#/SDHTJ}jTBDS!9=(Fw`w`c \|ŧ&Ǿ G!}ETr}1LU-FCh}>S]VCRU"1{bJƼ/ESFCh}>S]VC(d )rF4Y%|@l0Bz3y_('7{($hWh|D#!>n.I5QHh'O?e[J1I1ɳ#!>n.!ve$1SH}KPQD0Bzꉚzbn.10"8my#DD‡ZOD㈦j:rIvɻ9|3[&,|ŧ&G$ ET%z7pţ-pFCh}>S]V .q2H*EFCSD>,|ŧ&E%JQc͒HDq8xȇZOD[b؟'{L_0fz74ٝ0BzR %Q%8Hݞbad9'->5e8vy_ >,sj[nECFCh}>S]VCQu@Ն|&W)FCh}>S]Vd6H?K9{DoQ|EP0BzBLOQ2="u\0Bzj~'rG y˞['0BzMVGRHdJMԘ+FCh}>S]V#Ikb&E/QmJqՇZODRx~H!JzwJ}hrO[|jq\=˧SɿMǓiB[F 3Y tOMtY=E)48T=W%B!'}u{v#!>n.ǡHzb#ᑚ*쫍RLad9'->5e8=)"Xk;T1.L=>,|ŧ&}9ގhŰoPӾP3)}Y tOMtY=Q7Zz뻾#gwȇZOD,Y-@gW퍡JPl0BzPW %;B >,|ŧ& ~>$bl(i:@ad9'->5e8f=0^ug\Dad9'->5e8]+7Qɘ)pEȽ "!#!>n.ǡ/XHŪTg} 5%cFCh}>S9B||||||||||||8dq. ՟iNqU(Ǭ|u8.75zp w۪q@5@n>ΞϏ〆k5||j7q޼zp аǹfq@5@n>vh8}zp аq7[]=hh؍|b|u8a7DU3i〆)n@ v~ q@B8; ɨ ՟D4Nv1#IENDB`hydrogen-0.9.6-beta3/data/doc/img_tutorial/Riff1c.png000066400000000000000000000253371211146647700223610ustar00rootroot00000000000000PNG  IHDR\C{PLTE  BVrRjjjrz޾fj*:bbRn*6Rzr~RRRZYZjnjzzZzz:7:Z^zzrzzzb~rjrƊb^b :z閖"****2>JzƺƖR^j:BRz*2J:>:rj :֦Z^bbfb2BbBRr*BZfrrJNJ":RZjB>BZjz"2JR^z:Zbzrjr&:zBjZfbZv26Rƶ҂Rbrrr"*JBFB2rz".Bbjzbz:FbJJZj2:bjZvRf*.R*6b":rnrz~bfzZr2.2".RJZzfjZRZ֖:BJbbj"Bb~"ZfjjjZn 2BJzR^r: :"B*2ZB8B:FR2:R:FJƮBZz2Fb抚jfjZbbzB"*R2BRJJJ".Jj~ """*6Z&B2:ZbbbBVz*JRZr"2RjnrbvrBBB  Zr222@btRNS@fbKGDH pHYs  d_tIME 1/) IDATx} dUV_o21Sc:+IͭRT5Hߺpe[~GQDGWA 뢤\X `H(H kM4B߻՛[^|_OuM{꼯Թ_ݳ 덍Mk hXw N۔WrXh׼{<{~G~r.[ ?Gz/C̃i[2حXMw ;La44EF?n׿|7=>m 3Us z 2{0a~G~_[ރzQIT PUӘ!vK\Ze@âA|8<~Wx}Y ̃0cb!{W]&>Ԇ\gpS?=|>\R&˩-dC&04pNqOFDDa5~pM!ThpY afk^-/~aj4\K"9@uj [%}?gs/LX>! y% 9,0% cԬ?}/~P,!ʹDcMg~ pB s?uS_pʭ,?Ƶրu/E0T̈́su0~җ| #uhcs()c)Ÿ'Dyb&ObF0&)ZᎧ5\z> 5F0ƦXTB m6b~뉢-0Qg66G |KdEr0C.y;؂:k)O@KYd^z:O:<Fq+ qaBpTFA0~?Yd2=ݜ>$9\3VUa/UۏStVd}3gNbZ0jfIMly6.yZ/G?a+(}+߈~>9#o@S.kmF鸕U|=,R RQ)<"EL,CD%6kt~aKY:"É'Q=z˟W׼F[֩0ڍuלz̢;uy?6#tdΌ[Ya&m5,shFj&ur,ِ̡t=DRF6Hmt4SuW?,Zӓ忉_tQ7{:vTxF5'? {%Sm\1©,##H*3F1:VVAùB 6X66iɅ׊gqMw%̧1aQ_bd$F2'ƨtܖJ)Eh>Oo: O}6Ӆ{/^c xx~t4lja0#L$mzM=oOoK=N't=by Oq[#΍[Ya)5"Bڤb58] }ӧ$[݃(f(fa(fCSLMBٮQdDn<ٲt@ʡ$fOO^0wǗ쥟O{?2<|a:97uZVS&M΄'LuM^v6*5LJ'F=BFt9%2VVA3O W}ahcs*|LM-/0ʡYC3ʡۈrhgRmFyyZƈ;O̖Om %wd<)^Eo|b[BU~.7>]Fa]7=f7Ӝy`G̼XAyY%2PXb6v:(OPDݦ=Q/b3f5rKdǭǕ IjׇK5RuFAa5tRRih3y(&X0c(f'fƓ  5ޒ W3)||g>[݇/'3]JLS D=BC~oPJ=OyHtN44'd'L{b#Zncnf:n\e=NY6X66$>H94 ϔJЌrhF943FL%l:A[D3f3g4r6Ӊ$o)QտsG]C37=$3|Z8q'0C*SNhZG3khVOFt- M'tzDO 3tӕUx?zXv&fN$̣o[G@gnat%N%Lhn+-Cqk[6>HO7 1o[5_W]g'/eLkv]BR1ǯ7qi800üXzl4L_l_'ǺGuϢnXLKOM>fȈe't}{[#'Dvmn|TFi}#R ~~["Vzo|k{//δ^Mև^{rIףqi6t?zv譪z^,O(i^a 6 ̌M|3ߛOw33 2( qG6X66a?j8>LO7՗;4kN=WOϾ~m"9iP~洐sA5Uh6X66)*4ΡOcӝK뿻'Ÿ?]}͵W_$ZRL+n=NEK  U8 4, lRӍ\6͡OcCOoC9\ROɗ7/7?m_'˵M >|v&=QCNҸUzzX(mRmln|Xd2Ѯ0z =8B*f8R;L=_~ <|W"9[kNŸYz5VVARzXD TF%_bK MsMӍσ`2;wRO'<Ǿ<Ǟ}~r:[+}4YkNziE"UL6M*V#}ľ0c?Tcb`ml*Nހ}qpKO v?:k"S1ԫ당:D0z\F5GR_=˘f#O}_o:jmr!4K~@)5{@a):kWp-)x]2^^QrBINJSJ'J!W.= :=L453)f'b+UFZ Ek|6` M;q4x`Sb6+.b wm u ӹH^yө.4#FtQuy%Ra0QcWBAZ/,FVrGЭ1Z랆;zoEs[-wD".1KEw8B "Wtk :D{9kGS;,5@͞A,`tiX[tX{8uw~CQ8 4mȢct霆kqx/tm-v`eqx/PpVSc{BÀz+ ˜; z~L ˚Ԃe 9aY>e 9aY>87lyn% 9Yo`9g{t6{Z)kl*/9^m7~6s Y^a Ml~=>aq㧬aSa>`?vX ?u ]N)kT=i8߱X0t% e0tz}^\hA->e 8s0tOYæN>kǶ>|$fY>e 0 M h|ֆ%{w.,*kgmXU45kO#uh|#17?-}>q* PmX0Sְ`fƺyhǍMR>KM C೺5* g iqgua% "34 >-)kTh[ǍFu wɰ.>*Ymh|ú4 >kǶߚh|ֆ%8V h||z ]tsxqǒzq3ƊNyh|Ǒ!k'4 >SUev 4`{`;.aq㧪Gk~aiOU=<>U O4DZTÌ1h|:L=ßlA5 qptC> >S[#]%+|jq0S[cǍz+4 >nX)aq㧪 *q|sHC lSU#nf^,27~qdTr5 %e )tG֚>JMaY r.k9RQ#5#]1̙44 >KmʚGk63Vpq|!=,=z$zYI0GQ,+J3s|8Ǒ>!q~]suRO4 >nT(<0SUhVtj@OU=37~qڠGc5OU=ĴſOvh|Q6pp ?U8rlYD&"OWTȲMvW32 0tOU=,ܖT\i8WZoh|:|=4 >]S_Q\|jq0S[cǍz+4 >nX)aq㧪 *q\9Xz)y͞#?V|qXڗ7~q\az)W+ ;} O7THF XQb O{|q, xoiEV7~q=X7q|:Ç!Ǒ㚑+r v0G+a0zyu  OG5(=9aqǒKzg:4 >n5(=9aq㧬G ?\BAIa=ҕ΁kǍz-DɉiKYHS@OYa=Jq՚{?c>X%L=[f20 ai%68l R^ferlh|)k8Ǒek߫aaizl=X 4 >'8z0K>\Qqh|cYQaKO{|,q8[cǍs8Vh|]/DZB@Ə%X!aq㧬 ,8JW;7~q, 'z34 >nևu= Y OX%L= >Sp0%|,q8DZR@ƏzJ ?z+4 >n5DZR@OU=XT(]y|aB64 >nTd1aq㧪G-{';_nS+pܡzY^(}/{iSG4l{1zpR6[#˶jpa[~G8|%FiW1FSoSi=mhnw5aq8ka೺8\S#(E鄆;LXl=O9q0Sùz+4 >nXև8Vh|æ *qnTZ{h7~q\n YǑrJpofat:@OU=%w}r;We-08SU#iO29sP^5Ǎ8eI N'r,Jrbtz^cN>gç|k`]baq㧶J ?8V h|DZR@Om=7~qڠGc5OU= W}PeT h|ǑZ0ŧGkW:f 0SU#Õ;X47Z h|6H]pZ h|Ǒ%k8g0SWK4\n4 >np"̺aiOm=DfAfplu iWùz'@ӧBƏ-8a9[>%28Nh|ΖOYùz+4 >n5a]tsxqǒzQ+[׉kbT|4 >N5H6'4 >\/aq{FIh>MlVfS#je]f ~U鑼+ +K: aS#r3e¶U7H^W>){ǑU-{y3Xֳ<kNqqg Ⱕ]Ù"p-^S>k8{a]|ۜI=U7~Xaq㇝;RcUǍ%@z+4 >ns9$8`mPQtsxq㧪G/- dǍz)v0tOU=,W'a ʧ4 >nDfzQkvDn"14 >nH3Se84 >n Xz NV8\Q0r 8rΩtǍzpa]‰aq㧶J ?8V h|)_{DZR@O\=7~qڠ|Q9p 6k~za#N 6/΍۔01z5zb w8@KdǑ͇;|wiP%\O}=Uϲz4 >n,DZ*@OaS ?آzA0_PG)|LIDAT_j ^=(.!CԨ&BS!9)F$`HC lS]Tc[ӹ*9gù;*P zb"/Ss)(:0nz).!g2C9Q o/\uOgD㠘B]9O?!+_IxD zT#5\,Ԙ|2vC<;0nz).!$1SH|Ora>S]TT=RSX Mぎj$?pa>S]To!á?^y @…Qw|֋OAtQ=))x|'>2.(p`>S]T#TXIJ zs_p }ޗ>ER)32H"*wa>S]TC.|(Ug$E 8eJ<¨}>#XjsOAtQ=%yLf:?+ԅQ+}ҵ1zF..!P[aE0Ǐ%+FI|mzb'| _zRm# Vkc>64\]TCQu^_Ձ|&W)FI|mz$~w\GSߗcN҅Q+}ҵ1zF..!4K~@o}OWK Vkc>64]TCÿ?>xr,.Z铮4pAtQ=&aj8 B*KLiR6QJ raJtmަ q0)s @̤ JޟHW]']#iz} 8<@XOiNC9]']#izz5WToh{БELFI|myE8SS`6 ^YZ铮4p^tQ=E0T\%M b Vkc>6rzCO|&ʣYޱgۅQ+}ҵ1zfyE8ᎧEE0.s ΅I¨>OMz@_o&ȐQAv FI|mi eɒo TGr0_ T b˅Q+}ҵ1zfD^tQ=@K{ln!B-M<FI|m~#'G?>$bl a:@taJtmަyE8f6 NhO6FSo,GtOk/Qt|:çQ0FF=h|8iaf:̧Q0FF=h|i8i6C= fF= fs:(iZ=C.^=Cv V|^=!,q^(Ǭzp n4\+OLqzpа㤹zpаC>۫  qk8.W.#Eq@@vTsFܬzpаq{8a;uEf〆9  " Va8ګA>(W^nPݯp\N>IENDB`hydrogen-0.9.6-beta3/data/doc/img_tutorial/Riff1d.png000066400000000000000000000250301211146647700223500ustar00rootroot00000000000000PNG  IHDR\C{PLTE  zZjzZn".Bbb:FJrzBVrjjr~jnj2.2ZVZzzz :b~Z^zzzzzrBFB:6:rj***rƂb^b銦zƺ26Rz"""JJJzJZjrjBRr2:R":Z^b2:bB6Bbfb*:*6R :Zfrr2>J*BZzfj*2J:BJJZz:Zbzrjr&:B:FRjZfbB:BbzΊrrRRR2j~"*Jrzbjz2BbJj*.R".R*6bz":2Fbrnrz~RZrbfzB>Bb~RZjR^zfjZRZ:BRbbj"BւZfjjj:Fb 2BJ:>:z: :"B*2Z"2JR^rƮBZzR^j抚jfjZbbzjzB"*R2BR".J z~2:Z*6Z&B"2RbbbBVz*JjnrrBBB  j~222֖֞ZZZ:::JNJaptRNS@fbKGDH pHYs  d_tIME h IDATx},YזDow{R8q|-W(9ag*E_}d( 9`Oϋ"<1;O=`TU3Sӝ͛oMo h76Հh{m$Og;}k_xԪ)/wpwSKю#7G,nh?w# Fldn4|~^Nkx^#h0[d;ox~AAF]GIQsTi,Z0u{,$>;l 'Y5BpoW~1{-rp4Y~6ҽÕ,k$ID# 4rOJ+~kR澭 Kgw+@g۾_~~r ;.sC> ̃,D~_xisKēنb,K, aK~uG^uRB1Y ^r8#<ܳϽ&4.@+p ?G3W\ySxz/xnq%v@@۱q4 kǡ QD"T#RX*ud(F0j@F:xR*]yi0Qc6H|X$2ј0Qc6ۿCw+~E#ùZDM\5]Jh fF?Gf q9.86/^ćev1}:lIJs|fUQeE:#9[Y|w:Yhf qޏs"ӈaD;_D6Yr1`t9,{~[m;=Uй8NH Ĭhs4yUxp5vIiA9\ÍPEAs8g_vG?_az8Wk{$K:YѼhf qOKy蒊ӈpD1%{p2T;+u8lE]Wn%|/\9ܵ_sDNiC1+0Z0[VAW5 ]Rqmcp'94shVh4&C6;5fi_d[npI%~͉}9h gVA< iӈ0 L1):b:f',M\ٸGw ;if_I1}1q8#꽇ݼwO>|(M[G?m[G{wnm$b_s"#fƷعo KK<15*i8wl=FRA.8( w/N4ffR` PwΡI%ڔ2J$#E(foehae׊HgL_dM?vۯs7=\uQ}Eh[v_sBlݸGX: @=F#22nWx" /|OGc8@3=_HIҦ߻Ѓ]fLXfƙzv6>a̻OX|F:~go׿sOc<=\8gPFHL8L5'5 FؼzYZˊԼHW^鷮6#ԋ:AEO)ĨG(7#F^ryUx7ЧEwIi7DGbg&ĖQƗ,ΡmD94#)F6em2 -`cDݍ'Gv;rYUӻ oo}KMNQ7}/)oǙ{f40o^r:713/ShTA L'm]XfMݥ8QiO:k'tMt%VAJ tIiJ5TuFAa1tPR4fQM b;1gƈQbO̝L&C%K#gR鉫{oc?r#W)Ù֛HnޢDx.~)SסHPJ=Oy@tN(6O@*ĨG 3FC?cё_#߹)+ק` K*N %IG;}Էȼ=`*$аfTAc׈Ѩ"P 6#[!)O66c1f#Ft E\ rIi%zc: (4ҙ[C3Cy cmڠD1Mv%#u(.SvF|Ι5ેz@&lD.9#2f5Bim4/Ϙ.ǹ82tIiA {Q8RsEdv&Ƌ|לyW̓n|s~}?ڿNδoԪگ9MuA vVA|3{ wIiAQy'hz#R(^Dz~}?q^K].iK_?M\(O"\DȧO*Hz:-ᖊ\Rq 8BΛC/b$EPdΠY-.86v!}fLBhW=Qj!|VdG'?כw}w%搧s ~͉(<ihf q#}Z.8(K1͡1ePD;fw"eTyC}?~>_({\ܯ9iIx=#߿EUxW6FўK*N#}Ğ0׉1D X~y=Q0Qc6e|;bLo8e \Ur+F5ZzzE)YmXp)<H=`c/eL7%Fa(;"4CF 5Zv|+RP&}0JuP.P0Qc6&Xϥ!JF }/gDG@ͅܤY 6"1JRD#J7R|XItw#%" iDϻw %mJW}epƍfj0VF\U= 8=0ԿDQJ)1 FS 7ݸY'i|[5XIt:}3ob4n0Eg6-n8|_5ύfѡ\(:JQ 0 56U>A_HI:.nkMn+u.G;"f"&1,::(q~M,⻯YqGЬ3d JKq${gݐGNPDs`,`1Q$nRn^ afaǑK IY5<Fiǒ>ZV]ǒẁzK^ XZ+ $;`C\cMj2C)o<4 O~U|ʿOq42s?~XRҰ\0}!'ǏMVIH6W ?MՃYlX ?y ]c O#6U\Nwl_h|u32h|uĞ(K4̠ai[æAi~xKLs04aSӁOk懏%k5l@>M h|ZǑK5Wwq5>%twg"RǏW.1o󧶖;h|V;]Ec%I6\ h|5lẖOv?4CǏaSEʇsg04 >] beg04 >ˇu W.QZaY[ædm?~K*KlKy YǏG>h@>dA>8X*a{:SZcG{9lnx>ȇM=i3c.994 ?U8rd9|qpw(00OU="שrӿX\ O4(r- ^h|VͧGkc04Nq="T-aiz9\rG> >SUcQ% |qXh|a=;a㧪LǏz3?~q@kPQú;p 8 h|DZT@Om=?~jq,0SUZz֕ށkǏzqFɾ׹ ?U82E04OU=kDJDn fǑq-, [ 4 >SU#nd,O1NbUǜǏ4EG~ŪSaY9^@G4[?X#aP>zy  OCX*aǑKd8 h|5DZT@Ǐ\=?~\uwxp\ôŰ h|5d;m`Zz~G-s{iŏ0#68l ׽˚$9ap\#ֽVUIÈ">%8[cŝ0c~8q O 8aGKaY ǼDu=J c^|V8h|5\DZD@Ǐz\=%?~p ?zq㰮<\>~qLY~m5fh|qz9 &qKzEU%Nc'NaY[q="> h|Gky*Vg8Kh|qph8T 0c}\=L \h|\=ai([ùzaKO38pVcǏi=?~g8 h|5DZT@OU=h , 8+?U8L[ ˉis= a㧪G%Y s?~q2Ǻt3 ?~qNB){y5AB>mGmZUMs?~tޟ® Oq8qx ó ?vqٳah|kq5'0#X"aǎÅzK4 >~qPcǏp ?|^㰮<\>~THZ{h?~qd\gm EQ JxmEJa㧪G҇>kfoh|Ǒ$V.g*03G^,@0\0zUiBU8NKQ0ts1|jqS]39%f?~jq,0S[cǏzK4 >~X*a㧪z֕ށkǏz9N=;ʨ0SU#ǵV_C*>U8r\e$X"p90SaǕKq0\,z4 >p ?zuwxǑzI+։Ǩh|5ȸΣOh|VqQZ0i43j6#Y؏c~HZY['OvlOQ4myqgq?||SkQÜ4Q"m9G}ǃ8eu/O sK8p2?R˓?s9[ù8\^׻dti|q,?~fXa㇭DZ,@+PcǏ^@ZZ{^㰮<\>~THZGu;a㧪GƵ\4 >SU#ϕ%I8ǏD,p\#iͯ O$ǏXaL==>Un@ǏѰj\Ah>Z,4qXF.>3GA5/h|Ǒ%?~jq,0S[cǏ\=?~ʗq,0ck8}a]y|Ǒqey ?U8RE04OU=)i(N׼&ch|Ǒp-he{<?~k~zq#+4 >~^qr h|Ǿ>W#T%i|"9qaa|D ?8 h|UcyǏ8h|68.0xS- nЏ:AKRT})}]ԕy';JKqHy@*.5MHRx9lnx>IDATS]RcWu!* 1G*R OItI=G4rOh^(M=5O]|JKq.~x @v$c HL-Fiz3x+#7;0$pOppL OItI=PL&CC>`)RDN=5O]|JKq=D))tRߢ^U R>'.>%%8HC5w`DѴH\}Fiz=kɃ  71;x}5O]|JKq#5Ly;OuA* `B OItI=(PQt)bLo )%J[*>'.>%%8!2'CdpїETè}>S]RCNPt"(UQx,yďe?è}>S]RoxCD]}$ވGhoè}>S]RC*uI4Q )(Fiz|;b VP]-¾ OItI=EׁH=>V\.R_|5O]|JKqz^G )o=JPvJFiz"~E'}0JuP.P>'.>%%8T/Y )%()oa>v).ܤAlnEb" F4(TJ a>v).Q5R}ޕM(iEoSRlè}>S]RcGG())|w Î OItI==grh$7`;h$_Qs|ŧ$`jm}"֓:]ܨ}>S]RC uA$B5R$<9VcIC3=è}>S]Rב|PMШHسè}>S]R˱lZ[4 ?6Pј>'.>%%8&ތkƒQAvFiz%KCR~WZ}W-FizW"%;\p>'.>%%8z%)]!}ޏʟ OItI=fyt2 .iݮ5j|5O]|JKqpѹ,Gdg#q;]>셜=Fiz NJEK:W;|W=2`>v)q4O]|P|mP|mP|mP|mP|mP|mP|mP|mP|mP|mP|mP|mVW[9P +oif(V^]=h1Së ?I0;4\4Fd3>IWW.vcᓓx3ɴyu8a7N-kxWW.v#C'q@%@nTuzp аzzp аټzh8%VV.c?9df>m^]=h 3X]= FI(z~tg&IENDB`hydrogen-0.9.6-beta3/data/doc/img_tutorial/Verse8th.png000066400000000000000000000263321211146647700227530ustar00rootroot00000000000000PNG  IHDR^^B PLTE ".BRmZvrbbz:FJzނBVrjnjBzjjZYZzr :jj2.2zzZ^zzzzzb~BFB:7:rr&BjrƊb^b&:鞞R^j***ƺ26RzJMJ2z"*rjBRr֦2:RZrZ^b2:bB6Bbfb :*6RZfrrrrRZj"BZjz2>JRbrfj*2J:BJZbz:r~:FRjZfbJB:BZrƶR^r"*JbjzzRRRRf  bz΂B2BbJZjZnjrjr*.R".R*6b2Fbz~z"::bfz"B>B":JZzzfj"BZRZ֊:BRR^zbbj*:b~Zfj""":FbRf2BJZz:>:z :*2Z"2J֖ƮBZz*B  jfjZbb"*R2BR".Jj~2:Z*6Z"2RbbbBVzRZr*JjnrbvrޖBBB Zvrnr222$tRNS@fbKGDH pHYs  d_tIME g# IDATx} $yV1ͣg! 9RHdge'gE I\|C'b-G ؆! Y1& "Akޜ\GX" 5=s53=ۛo`ne0f%cmAǰ:~?M vۥ-Rww -n1 lTǏ}ScvqkIJ[ҹŒnCv8Ku|'Oc\-c6){uS.tN؋б0fY<~˧~_;>sO풎MT중ӆȎ}v:Vdf긊o]8(ⱖ ;Ne_']w'g#'u >dJl1[y=N~IVN]kd%=֐e+͈a-4('lwX[P5(鸴קc5'(Ꮋt|,?:~긦NV /ȏa^8Go|˞ݝ~c :n+q`1_GhOt|_3r^a''Y*d*:1gg6gN|YCb0Xfb6KuǾsɏ?'>kt*av٩uƗ>=O~䮻z^u_Kϻ6}ͷK@ǰM7y! fY`g3b).Nx&+TX @d@&RR DBDR*]y~;ZǤl1/{í/#NJ @x,$i"PBqE{WQ(Sj-$I!$1! $]>B=T-j-~HD *28w:<xAvb(e/;L(eIxW3W7 ]F/1ۣǯ^{yyG/}'?]zf=e?cu_so]",FSG f3 f81ROt62 *t[]}!v|Rl<(@+ey5☩)ɫ(!e1 }O. %F 790zrG(8Yo|Ҽ?wGu>?~'8;=ϻMV40뿼z?q¶3-/؄PIկt8.3/V1/#YX"mK,{~‚ouQvkKI JqttN \tu\=Fy5Ay5y5Q^M037z#Wo&f@oһз m)5?==tuS8{g+?8yt>`_H;>xL5'5&q\dX J&΄׫H,Z4njE:FK[!ÌYlti$pŻz'/ド  ɫ)ccWeFy5y5ڦsbR=vzG1J4/CJn5j)_{)~=?g;aK>yUgQ׽%cͬakNX}`^G\`d4`CZeebi6:(Y(; ٴO٘ l4t~OXP l+n 铊c>X- ebͫĤ,fQM*b;,1Jz~tb{*<=t7\vʯ| {.3G"ǯzRNxA| VIy5)uфJmljFy5ScF7uoqƌ#g8xLrq^/_?`37zGuc:IGbC4HK' 4ԣix6a4H,l#fʹVu1n[=\-bږ^vB[egU`[-AⓊdqND,tpGGU&jjjE H'ߴA74 %>)et1u^sj~kSu+Q 7fgt$g~i0@04a.ut[Db6z4a٘i׶mK1 Z, y;VSmP]E/'/]dѼ, Q^ZQ qy jg3^xz2Wq~:sZ>|{/1O2|Fלs-J/OF{;+2XFY(aؔMhHܥBeғCQ"}h6-gfґ%t)Aay 5ne쓊d1%DMΫ&6x/svpOEw{E~:s}QgTi Pϥ*-.vcg4 T )B'F,Wċӝ6WsO7}O}ҏϾn7$?]zϧ_:*)*Zd3@!u|bt\UACP[*I ʾ7JXph^}/N bޓq< %Vxk}?_t >WQN(:[]$By쓊d(iLȐ R萝,f* OL~c{{kN"&*Zd3@ тVWmq)-bW T4K>MĖͫ'n,k*<__xꩧ?|Gmʻ_sSPx-kxW9H&ɁO*^PvŁ8k1MQe$fahmtvuT[7 >#=;gd"h3Ih4ۢ:;1j+CyEYtJE$ UcJ]E`I<dukOknڧV\tõvu61.::(nA_nRu i~Y-?ަp]:\1nZ}!yۤc-ӱva Z+[4ZӀnmq>bUn[c#6XEt!Ұ jA!aAVnVc0(;)5sFc'<J ?Q| 8A|:fh+O :0~%cN}Svl}r>Ǡc ㇽǵC .c ㇽKc0(t >ǯc0(t >ç>t >ç>:ga3o<6 ҍ稟ڞ\ |6?A3Z5GߕܴAƏgeafci MVih6?N߄AƏ_Ǧ CUn;sL'Ǻ C-|ZǯcSt2 C >3Ɱq!]O̺W+3|?l0T揳"A>L|>g9|:6Uc>Tgc+;>DqG>gG}im::0~f#1*?\B~>~ _ҐmXpAƏ_Ǧ ǎ!:0~:6U=jq)<ݤcYG!ʊ˙CQܴcYn~z Ϛulz,'WWbM YǺY&4|1l t >gF<.,ՠc ǯc[qR{9>z gF~ld]ǍUN{|ih:iR˜ ڛ,7k1ױR曩7t >3kX)󭮉Da|Zc>\3Ơci uۇ;1QǾ Ef ?[?ΞWO[̭T'Aj13>R :0~YAOS}lcR{9>z ǯc[$9_οX+gM|8 Ϻ5 ._bb:i-b㱭-~UY˚ˢO?x8lX@<5c>HN 1?;AJ~| OkS?W@>xq5og6|c>y;Aό>y;AόT'H'Ǧ>9n?c gF~ld\:p O?3+L}c.S_ci q竹|Z>˸U,w:.|Zr}?|g~}|gn}|t >-3>R :0~YAό>R :0~9Aj1Ƕ> 1ݽp=3c SU۩0 O?|ˤci:b|·+Y '6>ܡc' OKu\⛯`1_N}t >a+ K5|RdO?uW,ՠc gV^`c^ 0~:~ Y}sZ͑9VL>5B=> >H1Yg|9m}L",6]i,3Ǔ sz .cX# N9KAt\ ދk6ˇ\Mu̕y̘?tcx\2CǕ18 Af$[dO?~,Ѡc gN}%t >aȏ K4|6ݽp=ױANi|58t >m3c)V8J Z@lf:A|K7W7s5бR[qi#ӱ5yc|*W`ڃ;A<:4[`N¿5\ |0c>C,+yE 0͘ ѱSĝ@~ Li 1|0c֮c>R Ϭ+ K5|qqQdO?~;Aj1TkR{9>z 㧩>9n' 3;AϬ %̳fٹIqCό+L}qJyNq:5!EyA\ƳŚqhA'/eOqQs:f] :0~^do>;g>tf9_gm|fn}%t >aq> :0~TdO?3 K4|c]6jK>H'}i[$E+1/h :0~|)gU|ꃔҪ̮R<,pQd1T$EYE1<͍1T$ ŖC;ʯ'ꃸey,.wϊ̭2+e(]t|Vgn}fɏ1[东4.0_1G13>R :0~YA K5|[dO?MA`1n>H'BVtSf :0~8|u}:ui-`j@ :0~8|YPGe\' `-'JONYǝF'|SWq 4נc ?_Q&׏6t >a̭2[ǹ >s냔+ Zq|WǯRBƏ=R}St >ǥ 0|VKAh1Ƕ> 1_o}Ɗsv_ms `>gF~lꃤRidO?xl|(t >Ƕ>H/KEg3ˁ"q:n%2cS$Ejͷܫ))fZ{uy2:_"{ڦc Ku[q۫cy7Ut\ENE}(屸|-eZs9s ۇJ}=-k?{ʽno1xlX@_N2Q>G[uܺq3f>HUb;S;1_|^4>Ht >a㱭RO?܉kY<6Ajܠc zېǶ>Ht >as%u}lc?_a^n|W )e_n :0~)V]|ffꃸ|Y^'8c '1+c[$E+ "c ꘢la 7W0|ZG8sq>HM+U|f_QRqIg3|qqQ$?W2t >aSdO? K5|߷i֯(,ՠc zېN} GIDATt >au㱭m?6An8Gl<J ?Q||;c gV1]$[ Ould|LcǕ|6tPMlI̊=1c5/~Zm| i qDj+C` EkkonƧ~ߦgjd|+C%8}%yDteu1J}GocS$[ΊW O't~Rex <ǫӶYePB|EP&t\upt >+3cup'm}_7|lⱮr'oػ^HD{I7&Yh(HbɇJ!@gU˭":>GB RB@ 'RNBnˍVj{[s%,>9Avx8 9+;al]gTDIc#HDž%KAQ5>ŧ":>RRdwOMI(N jof{ᑴ>NJn?wI*>P2QvS]6ŧ":cS=R1X &U㡎j$d< jofoHE`ww@܏U"bvS]}i]$d%e{Q*X ]s1nƧ":cS$T=IJJxPk:0>e%~,L1ɘ".#2CZ.q3uSձ"qljR>H$>"G2%*x1hfLEti͘#ID,$7'q,ǜ2~jƠ}1Y BLq۔y"wX+W!@S3ӌQ=y5=Sz0I$2RuT@?5c>͘u) \L v>JŒ'*\HB:&wSR0{S+@FiTDѳzO&؉F;L-JgW}I5=2T@?5c>͘l<6荥x'"(VjWE4R;?+}9؋hhŰoPP])C f ڧSSdԄ/E!eΒoG 9ꯇ^*CT@?5c>͘+t}D k숄~m>B F!@S3ӌ.?Az lIkEP mj@9 *x1hfLEtN}XEr2bi.5B f ڧSSDe9 # 4Q/"͘y+R@?5c>bZOhf x1'O3AZۧkbZOq3VDci]?A͘Z}o ' ^L :nƠ>Ӻ~1ŴV>u ^L :nƠ>Ӻ~1 fAOq3VD>!BX>ǫr` XE(]bXQ}! 6NB9aZ}s@;?`q>+Wܥn&ZD+-IiOõ :>t\1oON~3dkAt<^Y}bбN2VuZ}WV:t7Ov>>Ȋ@6;3g :>t\1o3sv>XU}bбߊϥf vv)+K:>/">t [~RꃐO`V nWTmX>K0؆pGIXIENDB`hydrogen-0.9.6-beta3/data/doc/img_tutorial/VerseAll.png000066400000000000000000000164341211146647700227620ustar00rootroot00000000000000PNG  IHDRIFPLTE :jjBr:FJZj{rrjJrrjjRz":rz*2JjorRVZ:BJzb~ZYZrzzBFJ*6BZ^zzƂjz*:Z^brjrvzz2:RbnzBVrbjjJJZjbabZ~rzzrBRr2:bƊBBBZr*B2jjjZfrzz"2B2>JbZbbzj~jrzJZzRRR":zbjzZbz:Br:FRjr &Z:Zz*6Z"*J :Zfbzjr".B2BbbvjjrzzzbfbBFj*.Rrz2FbRZjRZrbfzRz&:26QRZzb~".RjB:BRj~jzbfjzbzr~Zfjj ::Fbrrz2BJ*2ZJz"2:R^rBZzR^jz"2JRZZB"*R2BR&Bz~zZZbbz"B".JZn*6R2:Z"BւrR^zb~BVz*J*6b"2RzJsbubbjjj~rbjrz~zjzzRzƧDtRNS@fbKGDH pHYs  #utIME +˾IDATx#]3JjMh;;$=8FՔBi vUP*jrR#mz,mqCâ퉢E8WZ lNr7̛?ol&/mfޟyt*ftb"S,QrPJ=w_EM 殼+x:0lrYǠǟmp{WaԺ\*Y,2vu }~Pr{{;5昒\nڔ;%ٻrsܩk%G/g%مW.Gu :ù8-$d"r9ٱS'Fܗz7g Ïλp=1m=(Y+[_b#W?Wc #Qё3N 7l%{j{y]kY@B"URV]Ƚ{q%#w|x{:Jb%{'yqYܙÔNMW7?WaQP%n'螻'0N^snGhov=2`޽qg|ʞ;[kٕ),=w,//_޿p0<}YbOvz8Ne]XHLڭBbLz4ёCYK7HmmcB_9l`u⽻-9jȨ䑉0BAHW Ah. TLY4Unڴɂr*_hcSjWۈ1NSʤQ*޴0ABtBBh f=Rղ-> \5LN6bJSϤMbb?t/|/vi/{&M!K`H[LJ#Mnk9"FO@P1Lڲ #|cPA0m-qLyg9X)Tz5-Tj' :LIlZ+<|gͺk25.uLue"THAӑ"i¯^ɡ6 *^Bnc}_sOԑ̑+&sL,SI`QշOWѺV\=& ֤EG쭇7O! 5̱b6-X?$,:Btv t +TLd옝A_7ߟ̝ȢK{yQe2qp߶5hA31i2-%@nD) tNJ V,XTLm5ILV/oݴm};2,Et]28.qLvth;>vL732 %x7¯ %"L@I^fg.̱3^xy[._xwT;sLscۡ`=a gg:V0)O7Mcn_:A4}iwxڶcY-`΋;n,J栙T;7:f5I3Ѻ??8pw}:X cO^tyƯ 5`9<ANZV _ٙtö/Mr^4,dGpvtJ;X&;ܶsÓ`{GyY'T44iUO7uL.TL"]Et&~z+}*6:cwѩH+b,S~RL:?#GPTi졁%w5ߺޞCO@P1tW 6nr]|YArtJ,- Z|(weftekl0)ZI& `)dZ/J9㡻g6z+8a;D:5p{ -훝4m݂e2G9<iE9X&Og|"nTc}ut^%Z+oM_e5ygW:PsuLM,Gןp'|fA3Z tWQDD& dd̿zM[B2iZ͔O˴ⴸd'd+lonŠהw脔~c<\ }9)s~>%AX9X&,sLsL&2ꖱdGį 7 CYL@UE̿w~󿾠l$s֊U9X&$u$`ʯ MB }Y_Gd jZ5Ө&slʣI]E4mzNyud`#Z#x($A݃xMaPiMlfxud0 IP f%QgK'D}u jԊZhYZWV$~1:f"IP 4 yR/iݠe\-AZ(?8QâXUtZtY(U,IuJ !A5-wWL5ٞy--R@urVƴ`ZgTNQ~w|/0ϑnZ'N*yM JA)$;?i%Tb#6ҫU%3KsU~MKϢ:s_{PQۻ^[{~hd{bϛlFњ\kj}~`0G:ﮘ!rkUrZpKg3!rA%8d~;̵!rkTro_z9~:؜6D|mJ:3kCר$D`{Z6gg> \{ԤLI5̇kדCUr3_p%3׀3]2kƟ&gg>!cǀ3+QtW 8$pμSOI T83W%4Jgܥbo\w(oOk3w+w˾IWgK%373Ԥd+dkJN:Jg|G~;όcs&p㭤6Jgngޫ#'ǽwg\$Qc?g}3m%373_EIx)2w*{Ʊ9 pZIk^9&pɮZI̷g>Xq]HFNį&mμ PR~({PMvl$5 yÙdPQ(S(IM W(ٍ,IMg*7+JGqQ 233_],HsRӡǭwwaFS6g")g.U?w'Ù:ș7\Jz{c$poq: Ǚ`kxZ>9#><>Siѧ$pqB;q?&8M]5[pxM^g6gw%23o IwSgqn}(gH(B: mԻS{|y[p-'P=|!zo[{|A<>m@CSR H=GiʙgC`)j#aq*ET}(g)g.UR6w{>"%Gܻ3 gr)m=u9G2g^q񙲫 >μ^;<3}Z93ϔμ-8M]&8sSpxM^9.8NxϬS?!(t{}eV;C~Nn$Jvk}_meg$QRe w?uw~*0Y)8s@^KH m{T8sSp 'P=܅d8~Es9ډ]>: :gw9A%C8sI 뮚;@K8R%N[Ԥ͙>μsWjoan̛>ܧdQ*983͔]gs櫛J7SfeW8wi1$pYgI3/8sP'SҫS\g.0%q̛3)맺t.R%3o -`&]Gǣ-u * yMpsj2NZ&3眹)8Ք<>֪8eJ3p̣҇M37g(8gޣ"+dOydm%es7g);/μ)$p 3ok* ]3ok* Jg~Jgp+A<&SVIw8LY%3_pqJgc3eμc3e'g}(g>{1Jg(8M]5gފה 5e|ApxMY%3ApxMY%3_y+^SVIy+^SVIgފהU83gފהU8[gފהU83gފהU85e|QpxMY%3&c2elg(8FN/pw μ)$p拂3ok* 3ok* gވהU8gވהU83>>3$yB™Gkʙ?pڇṛ$p g&|0JgpڃP8ń3V.DMڜb™Gkϕ+Ɏh™GkϔE9( |™Gkq3_y̦ʮZ@ gފT l|QpxMY%3KpxM%ݻj 5UÙy+^SVI+3ok(ܟ9$y 3O8h% 3%̣<$̄3>|™GkUK8wz3O8h탟>9M]5gވה rxMY%3_y#^SVI̟y#^SFI$pgވTQggu8leR[SuyjQÙpe[iURo7\K2z[6Jgv8w, }1|CqphM2z[6Jg^w8s5P%yB|J;**$pÙJΣ=4CIF"3W^UEyNuzr]`0$ 4L0Gu= L]xyՋwzeR=K 0R17c^N2H0tNzL#`rL^_~Ez?ԁMT]/) _ M: 2tÏAK:V*Y;3Nvܪq)I6˗{o?x}Z.B!z5v{JBᮣ{;<+<~Qn`%ѓ5Vp'oBQ7D',/nߏonpƍG6n͍[Zia7v7y_hb@_3+i3<4 5fm>~77xS@KBq֭*n A:?E\5)щ3x-{8z/-ƈn=xqMIJhI^QGؽ1IZ[N'GEl,^K}"D'/'\tݾ;77~cræ, z Uyч9o`%.<'gEђpnXM^Swpe ӱ8%:q&D/gЁv AFrZFg39D|_- QG{]c'TkZlW*mL9_CH0D'~б=<;v}w[h~r3>qCVGEђXħgNJb:/*.DsNNɖ~j}4W>FGw}ԡgHZ5޸qϿ<|g`%yE}㏟|<hIҠV^"sxm uNNqO_~}ǩ#JEAKjy9|_=XI݈4'hIVkxuvE98"68%:yk!ܟ{#36ܭf5kJTVZRtwJ6!n4؏)щ3ISu_x/Ko_W浣2,R[AKRJJ-)~^vu:}%pJt]w#|oøaGepZȲJ =f:Z?EV,8mk8G-D\2`:*+ $e$XUZm?&sBurJ.$r.+?'<Ze73*.5DTe3us"njs"lD'u5`݊m5lg9H SI6du&Xc وۗE֭8ۉ3鰉;LpM#ExxUVTl'~rmsZlJPX; B%:e[N~ep,t;۲1>- Tl'dn" <lqm@Pޮ~, 'y~ŽաKo@kWŕںrek㊃pӈy~= 4yh"RrW֜V <9Ӝ4 k,+ͻڻqs6rj VIg^] Ԁy~ֵM솅ݬ8r,WAuY"U`t9c{-~{{1b瘦hòqŭm٤KeaN4'GbGU.e} 30*ۣқ!G*&Ǡ31=¹?0^AⷅCoGەiӌ1 xLϧ$#1!܎0i1 xL~ƣg$gr;֞*^f"m|z)'gJp`2 "@#<# EdR3W"yIĨFt Dtb2ZcD0LoPʳIAg dg *Z 4X$}?01j̤3f :$~2G?IO:L/3) DrdYݨL<8I"@&FWQLC7x:qD0L`23,ZPg{:qD0L/3) $#L : &6NG%xt1oBFt$f41) 䕓0[7bu +ƮQX՚HL :*zsR!TQJfG{8&EWEtd p%FuBL&{O[d{Ӆg öA}Y+9xIAg ̤ 1t^O\qǫr23.Ĥ?J p%Fṳd. ^g 3Pl& `2t29~Zp̤3`o=vO$^fR(܅D)ͮ53?% 03YNvɨ@QsfxENFudIAgV&RN :O3bkuj<Cgr{~ɾ:hkgbr P2)]u-:⌎x=j}|uRKfˢK30΀fV6H3`4zVK[f䰟pzI{it k#Şf3ơ)'#gJƏ4:cT5u ^x1ןFgW: 6wW?&5zEA[[bp'3ixz.^4~* a=ܘu)EAY:5uSѐzɤ1g (T]?3޺ !&O~2z39 t3_Z03if Fg@`Nl]΀> zn:Z`0:elVtj 0_wQ<8RgYQ,R7&q?jYχYh {^1|) V54:ܗ\~`6tIbu"3O;?tGXR3T=#oi7o}CZ1Q&ޥPbπ3Э{'P:C~ǃ_̤3U{< }뗙赮op(AL:Y~+T g2(QxV$ՐgY~+Ʈj~r2Xs3 iƮdc#8X:4Lj PB51RfI3q:j BY ffbta6<>΀fV6H3`4kZiuL&51) zLjbR0Ĥ3`0tL&utL&s05vtL&\uL&u1) zL꺟tL&51) zLbR0Ĥ3 R V54:e&51) 3P `RW* ԵKR(0Mt&1>΀>rR3d:L3d:L3d:L3 R z+ͺK:^uL&u풔tL&51) zLjbR0ԵKt&2t%t%t%t%t%t%t%>΀fV6H3P Xiֵ](0Y-Ig'|$^0)@3P `2&#P ̈ɕɌɌɌ4B+ Ld$2 :ϙwݱ+ Ldvtk &nsV뚭PDpDo9GN.9O|"j ϽUՏztOtOݞWMUuu׏XXb>ba@,_E_,^_)İ+b=×=jя1\/=~`b]AH^_U_D[)P.awa-?IXW#=Q~͓|EOnnh_kk(|SxUO&z` t q@T8$0=|`RȖo=D}N/_k$ I1Fk,P/.6k\u孫EYtDq!MNJȖDoQ !4.-"=\-W=зfۓzch43vJYP 0_?0x}qMϾo|+.4͈E__x #0!Fa5OzZ̫h):A/Gz'te\v_aL=<9x\z<2?!װ`p zdpGup p QЃbzh%D_ ].ik{ As@%B6 z}} z}[A\1=G'D`1#?`Z`ZEf/ CBPE|JР4>]?8!- ."tz~?//zы^*"w x1儍  pt> 0b^~+~y?FȀ-hVӆ)dJ`9mVQhmi#$>  W%8z+r[d)7$0&МZ6gE&Y$>VH"*__~_~W1%,miJ`9,MS)#|s>!9KסAU!-=~k?-^׿׽>$h V rHѿOXN8 Z6W! 96n<~lg}c7DBIB r:lJ`9uEӧc 4H0XN6pxFx@<ͻa;! ^>$O8u*z?!B$! Juu9Ixۓu;|˭QˉA' !B,>!tzU! ~X\?7orfoz[٧ P7M/OH/Yi9J8u_haplrZg z;O>)@sB(:E[|ҠIP bzIoę[O:{ֳ'o}w7.F&Αn@V BW|9X-#*Btv፷:y|׻WZ]? ;t`M@ZQv\lSΛs ,''x_eEsZǝno-O^ Zx1U>}-ط6L8!.xZE+KQB\pD ,Q фMO\ ,f.Uo"_=&6JV^`Jm)XN(Mߏ& S JylvhQs^}AU1="c5xo,^}w^󻈖/) mn4'cV,'lL9]vpo0DZ?8AUE'7?g0?~qKSB|Ƞ9M ,)ԣ;o!R|> P*ay?L?^}DBrؔi#$0%)dͩKV6Gk2L:,CPUA|@A'ݿ˿7};}|jKVSB+1&`VFXN-֟ s=Od  9VEL ] #|nI7BZ}0 dU-Qvі?bzX6JB iKE&b0EPp 6`[>M z As_l^H -E`?bܺ.z!h.:>FԑlE lfI?wh)BB[G[+f';m@.Gp/2?B< -Dmi Izbq;~{2EL#ݛlX> Ӫ;47&zpTE&d4PwdܣWI Ю67.Eic~l;w >i1%Zij_!a=” !Iߦ?q">o?|W5=(ϱ{c~/킊Ņg_3#.{=W0hJT|}73o.!=T5!=aQPc-.TE0a򧩇=\㷸 GUaTa6p/TS/$*ٞ\>2_WW~-.QU.łUQaQUQ`q G/zqw?v`zoS>_}z/$? 9CYѳ#GƏ- Lsǟq{=ӃCF\Ij6$!z< Gz2'KZHI)Ϻu=Qzzr;_׃kӃ zo?*GJMgdTĒ]0Zdz|]T첼";ߤ /j G行y+5=uz*ퟄͩ 5Dmx roЃUa[ Ϛ/'cI? wafa拯A!# $y-*;)˺Ϻu=Q 򒅾RBs8)Ϻu=Qz0U(EzPPP_dPYw|=Haz2Qq !8OMg=HQ9z6 t=xJB*Ʋ/x֝o/$TĒ]^;Z&dz|c!-*"ЋO_K1DJ?B E|Cx֝Aj$\oV Gn\zX>@BY G9~}!Gxd1w{ z(O;P_Q`?!W0:r#dz|?JH@,'#& ڟ;r<71G0xߎϺ Fw{GR@}О4G)zazd| TiM5g}ro2Gvo4Gߤ?dnQøGŌ!czpo/T(As~P\G nC0l[|C{RmP>Ԙo%$ ݠmF z)?jݠmF J%ppQ?<\[G G5qo1jL #+)\[GEq"v=u=v| (N,<1cS mԉ9=ķBLfd v| (NįMz?*/Loqc3;z!?XqʜN%%(jȷR6rKЃK|aQFu!%>+vcG1ʉ%^>%^>hQ%w;|ø?*, UЃK|CGEq QS^>hQ"O?8Fk(@.A򯘸e :E=7?Q"PUK=ķ"={(@.<H衆|{(zH2=Ԕoi퐽Pz=YOTi=ķzpoU@.m%TɀNaT\xQ1C\!6Ն=@.-aw% X?;/jǷA;4sg@.-D`#l!|0$zpo%$ wg CQ]:G2!PGHQl<1?<\GY@tۆ=ķ*Q?dn0?].`_U~D*p?%TɀNaT\xQ1z~y<QI=m1=;|+T+⹾yOEvoŷJ4,% _}@|[-I-4{߅9KmO?JH@,meVԕ!oŷ.6M=x/筨x<?J?/yUǛp]-ę?&='[҃H$*/ƣh]-e@#C l?W ~[GC ?]-t!s?*=i7yNo5Lî/\ôi?ʤQôs 4N pYh]-fF6p]-,ϫ'"ZL_/6x]-gķ*p) j ?*f.|~}`jzǓo-2"oEC/oprjzӜ=l=q%-RDh2tw[W'Ϸj$Tz3?YCݪ'η(J ̻ƴOo]|n|[=)Z_==J\o:~iOj9xJ;"5[GsmroU2~S.0%*TʫR溆AVK{ LQ`3xLae𽅵 6G E\>ƻz4__׃%y%B$Bckl|]lgm1zLR҄C'7$ C$2gTi-:O/z̲T&so@DTY03٬/7:փeCI3lO|PzM?m 1|GiQrQ[=H=5#ߠ?].jzJv øWaʀ՞AC"<>ZT<&wqh=a|AG%yTpMy*gXTD0TJ( zc?d!b+iZ CXFygV?y޹z0GeC =Ozq}a*CA]}ˁI=Lo۞2arJ2ff\pjC vQ?4*KUQ_׃U2~STv0.TPT%) 3=8O&QeG!xЈa,٥9ư@ZSn2Bag0s-Pwy4v6t=Qkr#+V3iP ׃kݥ9ưa҃a!y}@:F׃a7~9m@:F׃5)=wHT0lzP&OكCuv6 zP&Oۃ*: ;T3A2P ]? \_FP5'=AYzP<IDAT֔[[Qﰳm [.oΆGn@׃X:*`\(Qvc ?jc &W6HvfxwI ]Øe?>jwه[KdGݠpOp !?"L0a5V0?*$[ħ4 ZA#قJB_AxQ6!] ] #1p ,ۺIENDB`hydrogen-0.9.6-beta3/data/doc/infoSplash/000077500000000000000000000000001211146647700201365ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/doc/infoSplash/aboutLogo.png000066400000000000000000000235661211146647700226130ustar00rootroot00000000000000PNG  IHDRdA%SbKGD pHYs  tIME 1 IDATxwxy3;;[ ڂh$@$$6PE%,ђ,Ǒc_9vkʩNɽMYWdٖ-[ͲDEl -ʢm9X 2y<9gs=AAjd   H   H   # 8  # 8  # 8   H   H   H 8  #&Umoz BK L@ *֕=v( H*1Y H%h|g-Mko³Ͻ|)~;P(s2 AK$#߸~S2lx_}@YȷNAK# H   H   FQl5A@qrNliHNBR*c`pڻƛY`;.z(s2@C[o6//Iw󲧎?co}i^T?FGj5eg/-=fhTA杏hH:-vݷyx74ыnƞGvw J5򚒌–qw V|#[,F99Yظ>=s%I?MII$#2n_? a3U TnyHN,23mb yh, "qd)/;؄'YܧRlςmTVnOC/y n?O@u!D|[=F^O?uyB7 e^@WuZZQشv>[PdYC?C^`P*Eh*J_ō ܵkq'm P6Qh V<^8sϏ@ as"ݹu3v`pF[*DZ:Fcذ/7-Œnf\LEY*֕CQc|3uܔdgfMAV2N󪲕$ >/xQi]mP@VAbߙyEi$p,hLI1au ?{R)j1ÞG<uTVjJ2DQD( ##~nGߌyJDAxbQeNKM뀮ܘc`?zE㝹?RaK>9*.uaY /ںFODTPΈ=N>`hljĄ|S>|{NoIF$ĭмүq|}Ly#BՂ=ߏҒ֎(LUR\p17qΘB`1p߽;qCE仧 Iʈ+--ǫՇ>(3 `mYugD1`H 5%l@M@kk$#**Qy=eK_yV`MTH2% Zx'?G# }̭mpG_|k-djd|7dM̌o7I:P_T܏u_Ztrsb8>~ ;ČV{k?^ }45$t TTNβp/7 ug }D=:X1=w>j鳵x))Ykk҉+ P[׈|{._qt:䠖0DIZpbT_΄Nj޾/~ GP\TP(Ռe#!5j5sݼ^/.\&?yV T(;FWB[.+ {d P}CʫFhspG; @PD#CTy9WP(xWRl~ M-1RS"N,9{ny>ƷZM䜨G\-1 xa4ҕŸ{6df06>wU3p)lA&P p)d?1&bP(y_7:6Z8 MɘلaM̻n(=L^΁caߜs#^;:oаk5$Hk#zᰌkPn5*::K.|sxwnX% aW]܅{Bc|{5c LBH.8 $Ԝ9}BSӅV–-x|_/%o^<:Tj]Sy91א5 [>zܡʂ ` 54#9%iԐ$%>84p(&ǔ7 E z}1ef]xD*g!'{~"5@&X8xbZ7_ǽTM|srP[׈PXS&ඊrܿkgL+f``>ܗ,1J=XURR$.?㉬p8'U+3!IyOx~i^Pxbۧ;Ny?nl\n^_[|~`-u߽;r7%A@VV&}:bmșhv]wVj<%z!߈ OĬ"Zv:_/CR{w`-SY,o o}Θ}RRS#AJX,7ti װ{R*0%a3p|b⚌9i~C͸Hg,x ǜRIgVFT0 o^|!H~chصnbpQ~'$p7#,rf!Զ:fSgB!;_wCmCؾ2&tjPQ-Al9suפpQ"c/j+o\M\{{ٻ.;ny}>~џEx7oސJgo B!U9߰ݵs/8 Νcp^KxEĄOonߎN]w};|9_׀m-<9Ggc]P&Z|s_ţ{@@mhf ]r rWud@.4ÃC.%84r  .Ŏv`C%IP(sΉ\F(FNh D_~ׯO|ͦy 9,BLxpD ~ү'.7~Tcpl U_}U'?PTsm <N;wyAsK뼮 |񢵵mkG/|9b6_0 }#m'Oe]:7aCL@ L9q,d #PdY眖rD,J&^C|1/rI\q||@dTPD;@8,3A"nG, n([QH|z=-Ŭ |=x/4XZVfKC--fԫ&˘ qyPNs iP|fWfiQmcC((DI, jkYsEIko$&lx<^EI+◿z #sW'J>?|kȭ;]#W9$Bs(%Ŷv,XWݲ,# …<rW9hyjч $frd|>fz V2!6lE;{>]n(,8X,ϯ)/~M Q8g>?% 8 &PAAGA$pAAGA$pAAGAA AAAu֢/eVAk.x|{h90ؾ;8y{*_^shЉgO@ܪGE7|ݸKoԠ㺿v^uhniI({rj*֡%jW0 *(*) MGP@t_zP%TK ƠQ,+޻'nMq @N')oL=ZTB.$I PP Z5Z`MNF~~>07{Mfwn㯿[eLPTTcj#m!MM^p8j)[sm X,Vg\CgeJ(^k4j :x^3-MM1(-c#M,;ѱ1\lfڼ].,;-& FF]rB 9قp0N8fjMA0r:j(.)J=}q#|u:,_^ȣ\(;~_zz::"Y((,NgĽ/N@=Kb0ΠCLdg~446وtNŲe٨-++ adčw7U6m_R @îAj V3&fj>W5;f0ͻH.2NLNV^Doo/\`N^7K!'Hwnalذ JW=tzFKMO7ndΑ¢CY0Ǯ˳b_Έkrs|ͺ`r & 1;F\1bY/Z 223PPP{y|f-[~~g?aLJ;r$L`ȳ̓CN^u\;_v edf.w-ksS#֭@v2D:gEEHMKg6 S gaJ2Nq̋̃Έt5aep`Ȱejth4Gܼ<oPha"12:$c$I>2FGGg͛4peA`EQQ >b^RZ '[v{>?{,Weh ]1gffbȜё﷔TnXZ˲g3+K8,aeբHnEqKOJe=CaXVyV'iZlgv-Xa=KJyNhr@}ClxiU2ǁ1r[z5 `u}3}: PY'8q"EkqB3wm!++G׊+7WrQRӸt ifl(+[kkϳV͚k9  Vgޱm|} Wku3\Lf8zqL:E`0 Lӡj'˃?|ظl%?{̂l[k֮[‚b^W_L͙Lp ޢZIKO2DQ\!#sqtG-hDIJa:rWb֓F:\hmaλ&$a!XŌ55hotz-︛'@c||6B?n441YyHII[PbhhL{3)1]309p=~V wk*&,lJ4)_nNjkc[}i6@32"囔@HzXbk+n˖eq,6rAԜ`Uy9LI&qTA@DTd rsx{g\*Ah kLJ\hb0Ѩz1`us3d?++;xAa0ưq&4}'yK/N'P,`Ȍ8 p΁a^vAWW yad d5 OpيP8r @l55uIӮahuZ/G  dl)qԔɰgr_C-p&CwnYVG Zpe1Cr. V~8mb|aXlk;onnDɌYz&iil`EEh4" `hh(TA!/~y$\L ʢ140lsoinVEi*ppղr Td6a{N.eVAp0M&3*+6NÖ[U*Tj("8qرy `0a&t"3#cOqu#::;:31JM=&y9v.3ڋs,/svppӋL |>?y#9KARnL&dr;wː?ƆPWvvoU!flذ %<…2nפ<,J-[-w";;uuL@ *yՊ6cu'ُ$#n}=oXF NkQaȳX/))HINA NA044wp^=q8223PVK2Μ>$iGqyr]Ci'8z|HMKwcݺ۠^0[q{wݾχ3|@ v~bSe%V",s>u COWv{v=FVHY\ĩ$*I ĝA&ˡp&ʐ븵A( d J->66ƮA("$ap(~?P12nV&0P\iZ`N&2$ID(4bwC1!Iy'Hk=?$Ĥ+* !=J=zBǯo-Dd%rSTr21r$pA0(DIAA AAA AAA$pAAGA$pAAGA$pA5߆IENDB`hydrogen-0.9.6-beta3/data/doc/infoSplash/news-070620.html000066400000000000000000000030171211146647700225350ustar00rootroot00000000000000
   
Development version (0.9.4-SVN)

News and project status [2007-06-20]

Many of you thought the project was dead...in fact it was!
Now I'm back and my plans are to finish the 0.9.4 release and only then start to think about the Hydrogen future.

I promised too many things in just one version...that was my fault and the main reason why I "choked" and I give up. So in order to finish this release I'm going to drop some features and the porting to mac and windows platforms.

 

Alessandro "comix" Cominu [comix@users.sf.net]

http://www.hydrogen-music.org

hydrogen-0.9.6-beta3/data/doc/infoSplash/news-081104.html000066400000000000000000000023041211146647700225320ustar00rootroot00000000000000
   
Version 0.9.4 Beta2

News and project status [2008-11-04]

Changelog

Website

Documentation

Forums

 

Alessandro "comix" Cominu [comix@users.sf.net]

http://www.hydrogen-music.org

hydrogen-0.9.6-beta3/data/doc/manual.docbook000066400000000000000000004422611211146647700206600ustar00rootroot00000000000000 Hydrogen Manual Antonio Piraino Alessandro Cominu Thijs Van Severen Sebastian Moors 22/may/2005 Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter is still experimental, so ask in the developers mailing list for further details. Introduction

Download You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac) If you want to compile Hydrogen yourself (see ), you can download the latest source files directly from our git repository with: $ git clone git://github.com/hydrogen-music/hydrogen.git A certain release can be fetched with: $ git checkout tags/0.9.5 Compiling Hydrogen depends on the following libraries: qt (>= 4.0) at http://www.trolltech.com libsndfile at http://www.mega-nerd.com/libsndfile/ ALSA (>= 1.x) at http://www.alsa-project.org (only if you wish to use ALSA as audio driver) Jack Audio Connection Kit (>= 0.80) at http://jackaudio.org/ (only if you wish to use Jack as audio driver) PortAudio at http://www.portaudio.com (only if you wish to use PortAudio as audio driver) Flac at http://flac.sf.net (only if you wish to use flac samples) ladspa at http://www.ladspa.org (only if you wish to use ladspa effects) liblrdf at http://sf.net/projects/lrdf (only if you wish to use lrdf to categorise effects) lash at http://lash.nongnu.org (only if you wish to use lash) Please install them with your distribution's package manager. If you're running a debian-based system, you can install the libraries with: $ apt-get install libqt4-dev g++ libasound2-dev \ libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \ liblash-dev libportaudio-dev libportmidi-dev
Build Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).
Using scons (pre-0.9.6) Decompress the tarball or go to the directory where the git repository was cloned: $ cd hydrogen-* $ scons $ su -c "scons install" Before compiling, check for additional options with: $ scons --help If you want to use features which are not enabled by default (for instance PortAudio), you can enable them with: $ scons portaudio=1 Namely, if you get some error while running Hydrogen and you want to report it remember to configure hydrogen with: $ scons debug=1 To clean up compiled code: $ scons -c
Using cmake (0.9.6 and up) Compiling with cmake can be done easily by using the build.sh script. Go to the directory where the git repository was cloned and run the build.sh script without any arguments to display the help : $ ./build.sh The help is now displayed (and is self-explanatory) : r[m] => all built, temp and cache files c[lean] => remove cache files m[ake] => launch the build process d[oc] => build html documentation g[raph] => draw a dependecies graph h[elp] => show the build options x|exec => execute hydrogen t[ests] => execute tests p[kg] => build source package ex: ./build.sh r m pkg x To build Hydrogen run the build script with the 'm' option : $ ./build.sh m
Preferences First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).
The General tab On the "General" tab () you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live. If you want to use Lash for session management you should enable it here so Hydrogen allows interaction with Lash. If jou are using Jack Session for session management you have to option to let Hydrogen automatically save the song file in the Jack Session Directory. The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see ) The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching (see ) you need to enter the path where rubberband is installed on you system here.
The General Tab
The Audio System tab From the "Audio System" tab () it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server). We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first. Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.
The Audio System Tab
The following drivers are available: jackd: The Jack driver is a professional audio server which permits very low lag and exchanges with other audio software. We strongly recommend using this driver to have the best out of Hydrogen. JACK server will start automatically if not already running. ALSA: the widely adopted Linux standard audio drivers OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort. PortAudio: an open-source multi platform audio driver CoreAudio: a driver for Mac OS X (experimental)
The Midi System tab The "Midi System" tab () contains all MIDI settings. Here you can choose the MIDI driver (ALSA, PortMidi, CoreMidi or JackMidi) input, and channel(s) that Hydrogen should respond to. If you want to use Jack Session management you should select the JackMidi driver. Jack Session management can only (re)store Jack midi connections. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the event-action binding line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action. See for more info on Midi actions.
The MIDI System Tab
The Appearance tab The "Appearance" tab () let's you modify Hydrogen look and feel (font settings and interface style). On this tab you can also change the VU meters fall-off speed and switch between Single pane and Tabbed interface mode (see )
The Appearance Tab
The Audio Engine tab (debug only) The "Audio Engine" tab () is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect). Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.
The Audio Engine tab
Using Hydrogen
Used Filetypes Before working with Hydrogen, please familiarize with these filetypes: *.h2pattern: XML file describing a single pattern. Patterns are group of beats and are managed in the pattern editor. *.h2song: XML file describing the whole song (or sequence). Songs are group of patterns with their properties and are manager using the song editor *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs. *.h2drumkit: a compressed and archived folder containing all sound samples composing a drumkit and a description XML file. Drumkits are basically group of sound samples.
The main User Interface : an overview The Main UI comes in 2 flavors : the (classic) Single Pane mode (ideal for large- and medium size screens), and the Tabbed mode (optimized for netbook screen sizes). Below you can see the main UI split up in 5 parts : the Main Menu, Main Toolbar, Song Editor, Pattern Editor and the Instrument and Sound Library Editor. These sections will be explained in detail further down in this manual.
The Main UI in Single Pane mode
The Main UI in Tabbed mode
Main menu Projects: this menu offers file related functions. New - Create a new song Show Info - Set general properties of the song such as name, author, license and generic notes Open - Open a song Open Demo - Open a demo song (demo songs are stored in $INSTALLPATH/share/hydrogen/data/demo_songs) Open recent - Open a menu showing last used songs Save - Save changes to current song Save as - Save current song specifying a name (default path: $HOME/.hydrogen/data/songs) Open pattern - Open a saved pattern belonging to the current drumkit Export pattern as - Saves a pattern. It will be stored in $HOME/.hydrogen/data/patterns/drumkit_name Export MIDI file - Export current song in MIDI format Export song - Export current song in WAV format (see ) Quit - Quit Hydrogen Undo: Undo/Redo functions. Undo - Lets you undo your last action Redo - Lets you redo the last undone action Command History - Gives you an overview of your previous actions Instruments: this menu offers instruments and drumkit (sound libraries) functions. Add instrument - Add a new instrument to your current drumkit Clear all - Delete all instruments from the current drumkit Save library - Saves all instruments settings (and their sound samples) in $HOME/.hydrogen/data/library_name Export library - Compress all instruments samples and settings in a drumkit in $HOME/.hydrogen/data/library_name Import library - Imports another drumkit from the local filesystem or download it from a remote location through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen website for an example). To load another drumkit in your current working session of Hydrogen, read . Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window. Playlist editor - A tool to manage playlists. Director - Open the director window. Mixer - Open the mixer window. Instrument rack - Open the instrument rack panel. Preferences - Open the main preferences window. Read on how to configure Hydrogen. Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !). Show audio engine info - Open a monitor with various stats debug action - Insert debug commands. Print Objects - Print on stdout current objects map. Info User manual - Open a window with this manual :) About - The usual window with license information, acknowledgements, etc.
The main toolbar Before analyzing the two main frames of Hydrogen, let's take a quick look at the main toolbar and its components: Pilot the song using the start, stop, pause, etc. buttons Choose between "pattern" or "song" mode: in "pattern" mode only the currently selected pattern will play, while in "song" mode all patterns inserted will be played. An advanced tap tempo function: choose note length and how many notes to wait before recalculating BPM, then hit the comma key repeatedly until the 'R' letter appears and then the BPM will be updated. (see ) Manually set BPM Manage JACK transport Open the mixer and the instrument rack panels
The Main Toolbar
Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern. Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see ). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see ). Set measure type and Beat Counter (see ). Set speed of playing (range: 30-400 bpm) [Hotkey = mouse wheel] and button to enable/disable metronome Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message. Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). Note that this applet is only available if Jack Audio Driver is selected, NOT when the Audio driver is set to 'Auto'. The last section gives you quick access to the Mixer window and the Instrument Rack. The LCD screen displays what Hydrogen is up to.
Tap Tempo and BeatCounter It is possible to change the tempo at any time using the tap-tempo and BeatCounter features of Hydrogen. You can do this while the song is playing or while the song is stopped. To change the tempo, hit the , (comma) key in the tempo you want. After the correct number of keystrokes have been detected (see below for details), the tempo will change to the average tempo you tapped the comma key. If you continue to tap, these new taps will become a part of a rolling average. If you tap accidentally, or if you wait too long between taps, the tap tempo counter will start over. The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo on steroids. By default the BeatCounter display is not visible. To see the BeatCounter widget click the upright button (BC) between Song/Pattern mode selector and the BPM-widget, or, simply press the comma key. (,). The tempo that you tap will be considered even beats of the song's beat type. The beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change the beat type use the left +/- buttons. To change the Countdown Counter value, use the right +/- buttons. The Countdown Counter value can be set between 2 and 16 beats. (I.e. if you set the beat to 6, you will have to tap 6 times before the new tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. When you tap the comma key, the R will change to 1, and will increment with every keystroke until it reaches the Countdown Counter value (shown just below the 'R'). The button in the bottom right-hand controls the auto-start feature, and it toggles between S and P. When it shows P for (Play), the song will set the new tempo and automatically start to play after you tap the right number of beats (if it's not already playing, of course). This way, if you have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing on the next beat. When it shows S (for Set BPM), the auto-start is disabled. For example: Suppose you have a live band, Hydrogen, and a softsynth that is controlled by Seq24)... and you want them all to start at the same time. Set the beat type to 1/4 and the number of beats to 4. Enable auto-start (button shows P). Count off the band 1-2-3-4 (while tapping the comma key) — and everyone starts on 1. Another example: Same situation, but the song doesn't require Hydrogen or synths until some point later. During that time, a human (e.g. guitar player) will be setting the tempo. On the measure before Hydrogen is supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in on the next beat (at the right tempo). If you are using the JACK Transport, the BeatCounter continues to work. If another program is the JACK Transport Master, Hydrogen will respond to tempo change events from that application. Note that in this situation, Hydrogen is supposed to be a slave, so some of the BeatCounter features will be disabled or will not work properly. If Hydrogen is the JACK Transport Master, tempo changes from Hydrogen will be reflected in those programs (if they support it). Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see ). Here you will finde two spinboxes: Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program. Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated). Note that these can be set to positive (+) or negative (-) values. In order to find useful values for these, you will need to take some time to play with it. Also, you may want different values depending on the speed of your hardware, audio devices, drivers, etc. Using the BeatCounter effectively requires practice.
Song Editor The "Song Editor" () gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel represents a complete bar as shown in the underlying "Pattern Editor" panel. The song editor gives you complete freedom to add/remove patterns to the song and to move or copy any part of your song.
The Song Editor
Main controls Completely delete all patterns (asks for confirmation!). Create a new pattern (and asks for a name). Move currently selected pattern up or down. Note that you can also just drag-and-drop a pattern up/down in the pattern list. Enable Select Mode. This mode allows you to select a part of the song and delete/move/copy it. Once you have selected a part of your song you can delete it by pressing the Delete button. You can move it by simply dragging your selection to another location, and you can also copy you selection by Ctrl-dragging it to a new location. Enable Draw Mode. This mode allows you to create a song by drawing blocks on the song canvas. Clicking a square on the song canvas will add a pattern (the square will turn blue), clicking it again will remove that pattern from the song. set Hydrogen to "Single pattern mode" or to "Stacked pattern mode". For more info on this see the SELECT_NEXT_PATTERN midi action in .
Tempo markers and song Tags This section describes how you can define tempo changes and how you can add tags to your song. The majority of songs consist of several parts (intro, verse, chorus ...) and often these parts will have a different tempo. Hydrogen provides an easy way to let you change the tempo of a song at any given moment in the song. This is done by adding Tempo change Markers to your song. To add a Tempo change marker to your song you first need to enable the 'BPM' option (the BPM button is located just above the Song editors main controls). Once this is done the horizontal bar next to the BPM button changes to a ruler with marks at every bar. Now simply left-click this ruler at the bar you want the tempo to change and a window will pop up where you can enter the new tempo. Once you have entered the new tempo and clicked OK, the tempo change will show up on the tempo ruler. If you click the Tempo marker again you can edit the tempo, change the bar or delete the tempo marker. In addidtion to changing the tempo when the song switches from intro > verse, it is also very handy to have a clear indication of this tempo switch (or any other event in the song). For this purpose you can also ad Tags markers to the song. These Tags are short text messages you can add to your song at any given moment that will be displayed whenever the song playhead passes by that Tag. To add a Tag to your song simply middle-click on the song ruler (just below the tempo ruler) and a window will pop up where that allows you to add text for any bar. Once you are done you will see a small blue 'T' in the song ruler for every tag you have entered. Middle-click anywhere on the song ruler to edit the tags. Now all we need is a way to see the tags we have entered. This can be done using the Director window. Open the Director by pressing Alt-D, or Tools- Director : The Director is your best friend when you need a quick overview of what Hydrogen is currently doing. This comes in very handy when you are recording a song, or if you are using Hydrogen live on stage. The Director shows you the song name, a visual metronome and of course the song Tags. Just below the metronome you can see the latest tag, and below that the next upcoming tag. This way you have a nice overview of what is going on, and what is about to happen in the song
Patterns options Right-clicking the name of a pattern will show you a menu where you can change a number of things :
The Pattern Options menu
Edit : will open the selected pattern in the Pattern Editor. Copy : will copy the selected pattern to a new pattern in your song. Note that patterns with the same name are not allowed. Delete : will completely remove the selected pattern from the song. Fill/Clear : will open a window that allows you to fill/clear a part of the song with the selected pattern by entering the start- and end bar. Properties : will open a window where you can change the name of the pattern and also assign it to a certain category. Note that you can choose one of the existing categories from the dropdown list, but you can also enter a new category name in the Pattern Category box. Load Pattern : will open the selected pattern in the Pattern Editor. Save Pattern : will open the selected pattern in the Pattern Editor. Virtual Pattern : will open the selected pattern in the Pattern Editor. Virtual patterns are a convenient way of grouping patterns together. For example, say you have a song in which three patterns are always played together at the start of each bar. Previously, the way to do this in the pattern matrix was to explicitly enable the three patterns at each bar. With virtual patterns we can assign a pattern to be a sort of meta-pattern that implicitly invokes these three patterns together when the new virtual pattern is enabled in the pattern matrix. This way, we only need to set one pattern every bar, instead of three. Virtual patterns provide a function that's similar to the regular pattern editor, and one could argue that since a virtual pattern is also a regular pattern, we could have just merged the three patterns into this new one. However, the advantage that virtual patterns provide is that if one of the original three patterns changes, the virtual pattern automatically inherits the change. A virtual pattern can also invoke other virtual patterns.
Exporting your song Once your song is finished you can export it to an audio file. This audio file can then be played on your favorite media player or imported in an other audio application. To do this, go to Project - "Export song" and the following window will pop up:
Export a song
To export a song you need to do 3 things:
Enter a name and location for the export file in the 'Export filename' field Select one of the available templates (e.g. CD, DAT ...) according to your needs: each template has a specific bitrate, resolution, and audio format (WAV, AIFF, FLAC or OGG). You can tweak the selected template using the samplerate/sampledepth dropdown boxes underneath the template field. Export mode: 'Export to a single track' will export 1 stereo downmix of your song (= the master output). 'Export to separate tracks' will create files for each instrument/track. 'Both' will create a stereo downmix + audio files for all individual instruments. Once all these settings have been configured all you need to do is click the 'Export' button and Hydrogen will generate the requested files. If you have tempo changes in your song (see ) these tempo changes will not be exported. This is a know limitation of the current versions (including 0.9.6) As a workaround you can record the output of Hydrogen with an audio recording application (like Ardour, Qtractor ...)
Pattern Editor The "Pattern Editor" allows you to create or modify the selected pattern by adding/removing notes and tunning a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor) If you are editing a pattern in Single Pattern Mode you will always hear the pattern you are editing when you press play. If you are working in Stacked Pattern Mode you will hear the active pattern(s), not necessarily the pattern you are currently editing. (The active patterns have a small triangle next to the pattern name in the Song Editor). First let's take a look at the (classic) 'Drum' mode :
Pattern Editor in Drum mode
Pattern Editor Controls The top part of the pattern editor contains a number of controls :
Pattern Editor Controls
From left to right : SIZE : lets you choose the size of the pattern (the number of bars) RES : this is the current grid resolution (4 through 64) Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer. HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern. QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied. Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your drumkit as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth. Note Length / Note off : these are 2 different ways to define the duration of a note. See for usage. Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)
Pattern Editor Drumkit The section on the left shows you what drumkit is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit. Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select Clear notes : to remove all notes for this instrument in this pattern. Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note. Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played. Delete Instrument : well, deletes the instrument ;-) The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons. The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys. Important Notes : The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default. Try to follow the GM midi standard as accurately as possible. This will ensure that switching between drumkits goes smoothly. You are of course free to place your instruments anywhere in your drumkit, and sometimes it isn't even possible to follow the GM standard, but it makes life a lot easier if you do. Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument. Here's a quick reference of the above bindings for your convenience.
Pattern Editor Sequence area This is where it all happens, this is where you can make music :-) In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution. If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note. (Figure above, from left>right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode) So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see ) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see for a basic walk-through of how the pattern editor works)
Pattern Editor Note Properties Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available : Velocity : how hard the note is played (the volume of the note) Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping. Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output) Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-) Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard' The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.
Pattern Editor Piano mode Drum mode (see ) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes. You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.
Pattern Editor in Piano mode
Mixer The Mixer window can be opened by pressing Alt+M, by clicking Mixer in the Tools menu, or by clicking the Mixer button on the main toolbar. The Mixer consists of 3 sections (left>right) : the instrument channel strips, the FX plugin rack and the master fader section. The Hydrogen Mixer works very much like a hardware mixer does : it lets you set the volume, pan, FX and several other things for every instrument.
The Mixer
Instrument channel strips From top to bottom : the 2 top elements on the strip are a 'play' button / 'trig' led combination. ( ) The play button lets you trigger the instrument at maximum velocity (handy for checking clipping), and the trig led lights up whenever this instrument is triggered (from the song sequence, or by an external midi controller). Right of this button/led you will find another led that shows you what instrument is currently selected. This is also the instrument that is selected in the pattern editor. As soon as you change one of the settings of a channel strip the instrument will be selected. Just below you can find the Mute and Solo buttons and the Pan(orama) knob. Note that the Mute and Solo states are also reflected in the Song editor. Next are 4 pre-fader FX send knobs that determine how much of this instrument will be sent to the effect plugins in the FX rack. Just below that you can find an LCD peak-value display, and finally the volume fader and VU meter for that instrument. IMPORTANT NOTE : keep in mind that the volume and pan settings that you find on the Mixer are global settings. The per-note velocity and pan settings in the Pattern editor are settings that are relative to the settings in the Mixer window !
FX rack and LADSPA plugins The FX rack has 4 bays where you can load a LADSPA effect plugin, but before you can load any plugins these must be installed (surprised ? ;-) There are dozens of plugins available for download from various sources : SWH-Plugins available at http://plugin.org.uk. (Note : if you want to compile these plugins you need the FFTW tarball from http://www.fftw.org) CMT available at http://www.ladspa.org. TAP available at http://tap-plugins.sf.net. Calf plugins http://calf.sourceforge.net/. .... Plugins Kill A badly designed LADSPA plugin is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others. Once you have installed some plugins you can select one by clicking the button. (if you do not see the FX rack, make sure that the button (in the Master section) is enabled) Now the FX selector window will pop up :
Select an Effect
Once you have selected a plugin you will immediately have access to its parameters: You can select another plugin by clicking the 'Select FX' button. If you quickly want to enable/disable the effect click the 'Deactivate' button (or the Bypass ( ) button in the FX rack). This can be handy for a quick A/B comparison.
After you have selected the FX and tweaked it's parameters you can use the FX return knob to increase/decrease how much of this FX will be returned to the master output.
Master section The Master section contains the Master volume fader with VU meters and three global Humanize settings for Velocity, Timing and Swing (in order to add a 'human feel' to the song): Velocity : adds a certain randomness to the note velocity. The higher you turn this knob, the more the velocity will be randomized. Timing : adds a certain randomness to the note timing (lead/lag). The higher you turn this knob, the more the timing will be randomized. Swing : this knob will add a certain amount of swing to the song. Note that Hydrogen can also be switched to 'per instrument output' mode (see ), and in this mode all channel strip outputs will be available in Jack (not just the Master output). This allows you to route the individual instruments directly into any other Jack enabled application (eg Ardour) and gives you a lot more flexibility. On the bottom-right of the Master section the 'FX' button will show/hide the FX rack, and the 'Peak' button will enable/disable the VU meters. The VU meter fall off speed can be configured in the preferences window (see )
Sound Library (Drumkit/Pattern/Song Manager) First of all a little history on the Sound library and Drumkits. Hydrogen began as a dedicated drum machine but has evolved into a versatile sound synthesizer/sequencer that is capable of generating and manipulating all sorts of sounds. Hence the original "Drumkit" terminology is slightly misleading. You can load any kind of sound into a "Drumkit" and manipulate that sound just like playing a regular synthesizer. This is also the main reason why the Piano mode was added to the pattern editor (see ). In this manual (and in other documentation) "Drumkit" and "Soundlibrary" frequently mean the same thing, but not always. The diagram below shows the actual relation between the Soundlibrary and Drumkits:
Soundlibrary/Drumkit hierarchy
As you can see the Soundlibrary contains all Drumkits (System and User drumkits), your saved Patterns and your saved Songs. Each Drumkit is a collection of a number of instruments (snare, kick, sampled voice, bass sound ...) and in its turn an instrument can consist of multiple layered samples. Note that every block has a number of parameters (continue reading for more details).
This said. let's take a look at the Soundlibrary interface and see what it can do for you: The Sound Library saves you time in managing your drum kits, favourite patterns, and favourite songs. When making new songs and new drum kits, it allows you to reuse and mix the instruments and patterns from other kits and songs.
The Soundlibrary
System Drumkits This lists the drumkits that were installed by your system administrator. The location of these System Drumkits is determined by the compile-time prefix. On Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or possibly /usr/local/share/hydrogen/data/drumkits. These kits are available to all users on the system, and users are usually not able to add to them. To load a drumkit from here, right-click the drumkit and select Load. This will replace your current drumkit with the one that you selected. To load a single instrument from that kit, left-click the plus to the left of the drumkit's name to show all the instruments. With your left mouse button, click and drag the instrument into your current kit. The instrument will be added to the drumkit that you currently have loaded.
(Adding) User Drumkits These are your own drum kits that you can manage yourself. They are usually stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by selecting InstrumentsSave library. You can import existing drumkits from other users via InstrumentsImport library . The Import window will pop up with the Internet tab selected. By default the link to the drumkit list (on hydrogen-music.org) will be filled in, and after pressing the 'Update list' button you will get a complete list of all drumkits that are available for download. In the status column you can see if a kit is installed or not.
Import Drumkit
If you select one of the drumkits you will see info about this kit in the right pane of the Import window: name, description, author and also the license type. If you are using Hydrogen for commercial purposes, (creating songs and selling these on-line or in any other way) you need to pay special attention to the license type of the drumkit(s) you are using. If the exact license is not available for a drumkit, do _NOT_ assume that it is a CC (or other open and free license type). Even if the kit is CC licensed you should always check with the author before using the kit in your songs. DISCLAIMER : hydrogen is not responsible for the drumkits that are made available for download by our users, either via the hydrogen-music.org site or via any other channel. You can install a drumkit by selecting it and clicking 'Download and Install'. Once the kit has been downloaded it will be available in the Sound Library under "User drumkits".
Songs in the Sound Library To save songs in the Sound Library, put them in your data directory underneath the songs folder (usually $HOME/.hydrogen/data/songs). To remove them, remove the file from that folder.
Patterns in the Sound Library Before you save a pattern to the sound library, be sure to give it a title and a category. Right-click on the pattern, select "Properties" and enter the details. You can use one of the categories already provided, or create your own categories by simply typing in a category name. The category name is important, because the patterns will be filed by category in the Sound Library. You can add a pattern to the sound library by right clicking the title of the pattern in the song editor, and selecting "Save Pattern". It will now appear in the Sound Library underneath "Patterns" and the category that you assigned to the pattern.
Drumkits and Instrument Editing
Concepts The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a piece of pre-recorded audio (usually between 0.1 sec and 3 sec). To play a note, the sample is simply played back at the right time. There are a few concepts and terms that you should understand when you are putting together a drumkit. (See for more detailed explanations.) Sampling Synthesizer Terms SampleA short recording of a sound, typically between 0.1 and 3.0 seconds long. GainVolume adjustment. VelocityHow hard you hit a note. ADSR Envelope GeneratorAn Attack/Decay/Sustain/Release envelope generator. After you trigger a note, Hydrogen will attack the note by increasing its volume from 0 to the full velocity of the note. After reaching full velocity, it will decay the note by lowering the volume until it reaches the sustain level. When the note is released, Hydrogen reduces the volume from the sustain level back down to 0. See ADSR Envelope for more info AttackThe amount of time to go from 0 to full velocity. DecayThe amount of time to go from full velocity to the sustain volume. SustainThe level (how loud) to hold the note between the sustain and the release. It is a percentage of the velocity. It does not depend on time. ReleaseThe amount of time to go from the sustain volume back down to 0. Typical samples that are used in Hydrogen are: the sound of a single drum hit, the sound of a single cymbal hit, the sound of a single cowbell hit. Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen will play whatever sound you have loaded. So, to put together a drum kit you need to gather short recordings of the bass drum, each tom, each cymbal, the high hat open, the high hat closed, the snare drum (snare on), the snare drum (snare off), rim shots, etc. However, there are no rules about what a sample can be. It's not uncommon to use Hydrogen to trigger non-drum sounds like: audio clips of people talking, a clip from a song, sound effects, audio clips from movies, and famous people speaking. Be creative!
Creating a New Drumkit In the next paragraphs we will show you how to create a complete drumkit. Keeping in mind the 'Soundlibrary hierarchy' (see ) we will use a top-down approach, so we will start at the Drumkit level and work our way down to the samples. Creating a new drumkit with Hydrogen is done with the Instrument Editor. You can load samples, set envelope parameters, set the gain, and other advanced features like mute groups, a low-pass resonance filter, and pitch randomization. TIP : Instead of creating your own drumkit, you can also use or download existing drumkits using the . Lets make a brand new drum kit : select Instruments "Clear All" . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select "Delete Instrument". To add more instruments, select Instruments "Add instrument" . Select an instrument to start editing it. This is done by left-clicking on the name of the instrument in the instrument list (at the left). You will notice that the name of the instrument in the Instrument Editor matches the one that you clicked. Once you have your drum kit working the way you want, select Instruments "Save library" . You will be prompted for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace. Drumkits are automatically stored in the data directory (i.e. $HOME/.hydrogen/data/drumkits). To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select Instruments "Export library" from the menu. Select the drum kit that you wish to export, and give it a file name to save it to.
Instrument Parameters In the instrument editor, click on the General button. Here you can adjust several parameters that apply to the instrument (applies to all layers as well).
The Instrument editor General view
The parameters are:
Envelope parameters: Attack, Decay, Sustain, Release. (See ) Gain: The overall volume of the instrument. Mute Group: Which mute group this instrument is a member of (see ). Filter Parameters: Bypass, Cutoff, Resonance. Random Pitch Midi out Channel and Note Auto Stop-Note It's important that you understand in order to continue on.
Envelope Parameters When the instrument is triggered, its volume is run through an ADSR Envelope. The parameters operate as follows: Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. The attack, decay, and release parameters are all set by the number of audio samples. This means that the time changes depending on the sample rate of your sound card. The max time for each of them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz). Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter. Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity. Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available. If the sample is shorter than the times that you specify, the sample will end, regardless of which phase of the ADSR it is in. If the note is sustained, it does not draw out the note while you are holding it. It only holds the gain (volume) parameter during that time.
Gain and Mute Group The gain sets the overall volume for the sample. This gain is applied after the gain that you set for the layer, and before the gain that is set for the mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is set higher, the samples will be amplified. It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it. Hydrogen provides more mute groups than you know what to do with (over 256). A mute group is a grouping of instruments that are mutually exclusive — only one instrument may be playing at any time. If one is playing and another instrument in the group is triggered, it will immediately silence (mute) and start playing the other instrument. This is useful, especially, for instruments like hi-hats where the open sound and the closed sound are different instruments. If the mute group is set to "Off", then the instrument is not part of any mute grouping. If the mute group is set to any number, then that is the group that the instrument is a part of. To set other instruments into the same grouping, set their mute group parameter to the same number. (For example, to group all the high-hat instruments, you can set all their mute group parameters to 1. To have a snare drum mute group, set their mute group parameters to 2.)
Filter and Random Pitch The filter is a low-pass resonance filter. If you don't wish to use is, click the BYPass button so that it's red. If it's not red, then the filter is active. The cutoff parameter adjusts the cutoff frequency for the filter. The resonance parameter adjusts how much to resonate the cutoff frequency. If the resonance is set to 0, then the filter is just a simple low-pass filter. The cutoff frequency of the filter varies with the sample rate of your audio card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample rate. The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: ±2 half-steps × value. Using this sparingly can help your sequences to sound more like a real drummer.
Midi out settings Hydrogen is capable of generating midi messages that you can use to trigger any external midi device or application. To do this you simply need to configure the Midi out channel and Note for every instrument. As you can see this is a very flexible approach that enables you to trigger samples or sounds from multiple devices and/or apps. Finally you need to make sure the proper Midi routing/wiring is in place and you're set. From now on every time a note is played for that instrument (in the Hydrogen sequencer) a midi message will be sent to your external app/device and trigger a sound. This way you can use Hydrogen as a pure sequencer for other apps, or combine the internal Hydrogen sampler with multiple external apps/devices.
Auto Stop-Note If this box is checked Hydrogen will immediately stop any playing sample that belongs to this instrument whenever the instrument is re-triggered. This option is particularly useful when you are using long samples like a crash or some existing audio that you have sampled (like a looped voice in a dance/electro song) For the crash you will need to use the Auto Stop-Note when you are sequencing multiple notes in fast succession and want to make it sound realistic. If you do not check this option the cymbal will start to sound like multiple cymbals instead of only one (since the sample of each individual hit will be played completely). For the voice sample this option is useful if you are trying to get that 'stuttering' effect.
Creating an Instrument and Layers For each instrument in a drum kit, you can load several samples and set different synthesizer parameters. This section will step you through how to create a new instrument and load the samples. To begin creating an instrument, select Instruments Add instrument . This will give you a blank instrument to start from. Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides several in the data/drumkits directory. In the instrument editor, click on Layers. You can layer several samples into the instrument. Which one is played depends on the velocity of the incoming note. Click Load Layer and point the Audio File Browser to your sample. Note that the Audio File Browser will allow you to preview the sample before you load it. It will also allow you to load more than one sample at a time. But for now, only load one. After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To load a second sample, click the slot just below it, and then click Load Layer to bring in another sample. After bringing in both samples, you'll probably notice that only the first sample is being played whenever you trigger the instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light blue rectangles and you see that you get a left-right drag cursor. Now drag the sample to the left or right (like a curtain). You will now see Layer 2 appear.
The Instrument editor Layers view
The velocity setting for the layer is 0-velocity on the left, and full velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 to sound for hard notes (i.e. Layer 1 on the left and Layer 2 on the right). Now, in the pattern area, set up a simple pattern that plays this instrument. Adjust the velocity settings on each note so that you can get the different samples to sound. Now set the pattern to loop and notice how your different samples are getting triggered. (To learn about editing a pattern, see ) For each layer, you can set the Gain and the Pitch. The pitch also has a Fine adjustment. Use the Gain adjustment to control how loud the sample will play. This is necessary because it's extremely difficult to get a set of samples that all sound at about the same volume. By adjusting here, the samples that were recorded too quietly can be turned up to match your loud samples (that had to be turned down). It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it. The pitch of the sample can be modified with the pitch controls. The Pitch knob adjust the pitch in musical half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts the pitch ±50 cents. (One half-step is 100 cents.) The pitch is adjusted by playing the sample back faster or slower. This is called the Doppler Effect. So, if you have a 1-second sample that you turn down -12 (1 octave), your sample will only last for .5-seconds. If you do not want this to happen you should use rubberband instead (see ) You can hear the sample in a layer by clicking the layer id (just below the 'General' and 'Layers' buttons) and the 'Delete Layer' button will delete the currently selected layer.
Sample Editor So far we have created a multilayered Drumkit, set a number of instrument parameters, played with velocity settings and so on. Now it's time to go one step deeper and edit the samples using one of the newest Hydrogen features: the Sample Editor. The Sample Editor allows you to tweak and manipulate your samples. This is a function that will really speed up the creation of a drumkit since you can do the fine-tunning of the sample within Hydrogen. In pre-0.9.5 builds the typical workflow would be to prepare your sample in an external sound editor, import the sample in Hydrogen, test it, go back to the audio editor, import again, test ... The sample editor allows you to do most of the sample manipulation within Hydrogen. This mean less switching between Hydrogen and your audio editor and more time to make music ! The changes you make to your samples in the Sample Editor are non-destructive and are saved per song. So the original sample will not be changed, and you can reuse the same sample in multiple songs with different Sample Editor settings.
The Sample Editor
The Sample Editor consists of 3 sections (as indicated in the figure above):
Sample Editor in/out points In this section you can set the start, stop and loop points for the sample by dragging the the 3 markers: S-marker (green) : indicates the Start-point (in-point) of the sample. E-marker (red) : indicates the End-point (out-point) of the sample. L-marker (blue) : determines the loop-in point of your sample You can easily move one of the markers by grabbing them close to the letter that marks them. Whenever you grab one of the markers you will see a detail view of the position of that marker on the second (smaller) window on the right, making it easy to find the zero-crossings in the sample. This detail window also has a slider next to it that allows you to zoom in and out on the vertical axis. Think of it as a sort of volume 'zoom'. Underneath these 2 windows you can find (from left>right) : the position of the Start marker, the position of the Loop marker, the Loop mode, the number of loops and the position of the End marker. The position of the markers is expressed in number of samples from the very beginning of the sample. These values will change if you drag the markers, but you can also fine-tune the marker position by using the up/down arrows of the spinboxes, the up/down keys on your keyboard, or by using your mouse scroll wheel while hovering above the spinboxes. Apart from the marker positions there are 2 settings that apply to the Sample Editor's loop function: loop mode and loop number. With the loop function you can repeat the part of your sample that is in between the Loop- and the End-marker. The way it is looped is determined by the Loop mode (forward, revers or ping-pong) and the number of times it is looped is determined by the Loop number. If you want to hear a preview of the tweaking you have done so far, you first need to press the 'Apply Changes' button (@ the bottom of section 3) and then the Play button to hear the result.
Sample Editor rubberband This section of the Sample Editor allows you to control the Rubberband settings. Rubberband is a tool that can change the tempo of a sample without changing the sample's pitch (and vice versa). If you are using Ubuntu you can install rubberband from the Software Center (rubberband-cli). For other linux distros check your package manager. For other platforms please check the rubberband site . After installing rubberband you should check if the path to the rubberband cli is configured correctly (see ). If rubberband is installed correctly you will have access to the rubberband settings, and an extra button named 'RUB' will be available in the Main Toolbar, right of the BPM LCD display: Back to the rubberband settings : Sample length to beat : when set to 'off', rubberband functionality is disabled. Normally this parameter should be set to the length of the part of the sample between the Start and End marker, expressed in number of beats. Pitch : this setting allows you to change the pitch of the sample, expressed in semitones,cent. Crispness : this setting does not affect tempo or pitch, but changes the way the sample sounds. Note: If you want Hydrogen to recalculate the sample length on the fly (using rubberband) you must enable the 'RUB' button (see figure above).
Sample Editor volume/pan In the bottom section of the Sample Editor you can see the end result of the tweaks you have made by pressing the Apply Changes button. You can also change the the Volume and Panorama (Pan) of your sample here. This is done by creating 'envelopes' like the ones you find in numerous DAW's for automation. To edit an envelope you first need to select 'Volume' or 'Panorama'in the upper right corner of section 3. The Volume envelope is blue, and the pan envelope is yellow. Left clicking in the bottom window will ad a node to an envelope and also allows you to drag an existing node. Right-clicking a node will delete it. Don't forget to Apply Changes before you play your tweaked sample.
Tips on Editing Instruments With all of the different parameters available to tweak, it can be difficult to set up something that sounds nice when you're done. Here are a few tips on setting up an instrument: Turn down the gain. Every gain knob (i.e. an amplifier), this is a gain stage. With every gain stage you have, it's easy to overdrive your signal — which means the signal gets distorted by clipping. In addition, if you have two samples that, by themselves, peg your meters — what do you think happens when you combine them? That's right, you overdrive the signal again. If things sound bad and distorted, start by turning down the gain setting on the layer... especially if it's larger than 1.0. Then turn down the instrument gain. Then any gain on a LADSPA effect. Then the fader on the mixer. Then the master output fader. Test samples at full velocity. Your sample will be played louder if the velocity is higher. So, if you set everything to sound nice and full with velocity at 0.7, what will happen when you get a full velocity of 1.0? (Hint: clipping.) Try to use samples that are -6 dB max. Visually, this means samples that peak at only 1/2 of full scale. Otherwise, turn your layer gain to about .5. Remove all DC offsets from the sample. In a sample editor, there is usually a line down the center of your sample's waveform. This is the zero-line. The beginning of your sample should be on this line. The end of your sample should also be on this line. However, if your signal is a little above or a little below this line, you will hear a click at the beginning and the end of your sample whenever it is played. If your sample editor doesn't provide any tools to fix a DC offset problem, you can eliminate the noise by putting a slight fade-in/out at the ends of your sample. The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the attack and delay — the sample will stop playing at the end. Things change with the sample rate. If you have a really nice setup with all your parameters painstakenly tweaked... things will change if you change the sample rate of your audio card. Many of Hydrogen's internal settings and parameters are based on how many samples go by, not on how many seconds go by. The sorts of things that change are: anything time-base (like attack and release) and anything frequency based (like the cutoff frequency).
Midi In this section you can find more info about defining MIDI actions and how they can be useful for you. Before you can work with midi actions you should have your Midi devices, drivers and connections configured correctly (see ). Lets take a look at the available options :
Midi Events An Event is an incoming Midi message, coming from a MIDI controller or an external sequencer. If you look at the Events list you will see that there are 3 types of Events available (as described in the Midi standard): NOTE: input coming from a regular black/white key of a keyboard or a drumpad CC: controller commands coming from faders or rotary controllers MMC_x: machine control events coming from play/stop... buttons on a controller The Param. (parameter) value to the right of the Event is the identifier of the note/button/controller that is linked to this Action. This parameter can be entered manually, or automatically by using the Midi learn function (see ). You can also activate the Midi learn function by Shift-clicking most of the gui elements. A 'Waiting for Midi input...' popup informs you that Hydrogen is now waiting for you to press a key or turn/move a controller. If you Shift-click on a gui element that does not support Midi automation a popup will inform you.
Midi Actions Next is a list of the available Actions: an Action describes what Hydrogen should do when a specific Midi Event is detected. ** Some of the Midi Actions require that the Action Parameter is configured. The Parameter usually references a specific channel, instrument, FXsend... Keep in mind that the Parameter value is zero-based. So if you want to reference channel 1 you have to enter '0' in the Parameter field (1 for channel 2, 2 for channel 3 ...) PLAY : start playback PLAY/STOP_TOGGLE : toggles between PLAY and STOP. Execute this action will start playback, execute it again and playback will stop + the playhead will return to the start of the song PLAY/PAUSE_TOGGLE : toggles between PLAY and PAUSE. (the playhead will not return to the start of the song, but will stay at its current position) STOP : stops playback and returns to the start of the song PAUSE : pauses the song MUTE : mutes the the Master output (sequencer keeps running) UNMUTE : unmutes the Master output (sequencer keeps running) MUTE_TOGGLE : toggles between MUTE and UNMUTE (sequencer keeps running) NEXT_BAR : jumps to the next bar in the song PREVIOUS_BAR : jumps to the previous bar in the song BPM_INCR : increments the tempo of the song BPM_DECR : decrements the tempo of the song BPM_CC_RELATIVE : changes the tempo relative to the current tempo, using a controller MASTER_VOLUME_RELATIVE : changes the Master output volume, relative to the current setting (e.g. if you are using rotary encoders) MASTER_VOLUME_ABSOLUTE : changes the Master output volume to the absolute value of the midi control (use with midi fader or pot) STRIP_VOLUME_RELATIVE : see MASTER_VOLUME_RELATIVE, but applies to the channel strip defined in the Action Parameter ** STRIP_VOLUME_ABSOLUTE : see MASTER_VOLUME_ABSOLUTE, but applies to the channel strip defined in the Action Parameter ** EFFECTx_LEVEL_RELATIVE : changes the volume level of effect 'x'; the value you enter in the Action Parameter determines the channel strip this action applies to ** SELECT_NEXT_PATTERN : selects the pattern that is defined in the Action Parameter ** SELECT_AND_PLAY_NEXT_PATTERN : combines the SELECT_NEXT_PATTERN with PLAY PAN_RELATIVE : changes the panorama setting, relative to the current value; the value you enter in the Action Parameter determines the channel strip this action applies to ** PAN_ABSOLUTE : changes the panorama setting to the absolute value that the linked controller sends to Hydrogen BEATCOUNTER : sets the tempo (see TAP_TEMPO : sets the tempo (see SELECT_INSTRUMENT : selects one of the instruments in the drumkit
A new song
"Song" mode and "Pattern" mode This section is a quick-and-dirty walkthrough to Hydrogen. Refer to the tutorial for a more detailed overview. Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to for the buttons that activate each mode). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern until it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns to create the structure of the song.
A new pattern We'll start from the empty song with an empty pattern created when Hydrogen starts up: "pattern" mode should be selected by default. Now let's click on the Playbutton, and while the pattern is playing let's add notes by left_mouse_clicking in the grid of the Song Editor (). Adjust the grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD in which case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!
The Pattern Editor
A new sequence Once patterns are created (), we can copy/paste/delete them using the Select Mode (see ).
Inserting Notes in a Pattern
Adjust from the mixer Of course we can always use the mixer window, either when creating or playing patterns. The Mixer frame () is made of 32 independent tracks, each of these is bound to an instrument, plus a "Master Output" control and a "FX" button to show and hide the effects panel. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument. The peak must be in a range of 0.0 and 1.0 (in you can see a few volumes too loud). Peaks outside that range will get distorted (especially with OSS audio driver). Keep an eye on each vu-meter and if distortion appears, turn the volume down for that instrument.
The Mixer
Shortcut lists [CTRL + N] = New Project [CTRL + O] = Open File [CTRL + D] = Open Demo [CTRL + S] = Save File [CTRL + SHIFT + S] = Save File as [CTRL + P] = Export Pattern as [CTRL + M] = Export MIDI file [CTRL + E] = Export Song [CTRL + Q] = Quit Hydrogen [ALT + D] = Show Director window [ALT + M] = Show Mixer window [ALT + I] = Show Instrument rack [ALT + P] = Show Preferences window [CTRL + ?] = Show manual [Backspace] = Restart song or pattern from the beginning [spacebar] = Play / Pause [,] (comma key) = Beatcounter [\] (backslash) = Tap tempo [+] and [-] = Tempo up / down [F9] = Jump back to previous bar in the song [F10] = Jump to the next bar in the song [F12] = Panic button (stops the song and mutes all playing sounds) Glossary This is a glossary of general terms encountered when using Hydrogen, synthesizers, drums, or samplers. The definitions here provide more detail and explanation than the simplified ones in the text. For example, the text of the manual would have you believe that an ADSR is the only kind of envelope generator and could only ever control the volume. While the simplified definitions help new users start using Hydrogen quickly, they can lack the nuances presented here. ADSR A type of envelope generator that allows you to control the Attack, Decay, Sustain, and Release parameters. Generally, the parameters are proportional to the velocity. In Hydrogen, the ADSR envelope generator only controls the volume (attenuation). Read more about this in the Wikipedia Article ADSR Envelope Attack This is the first phase of an ADSR envelope, and is the amount of time to turn the parameter up from 0 to full velocity after triggering the note. Attenuation In filters and mixers, this the amount that a signal is reduced (volume). Band-Pass Filter A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter. Clipping A phenomenon that happens to a signal when the signal is too large for whatever is receiving it. The peaks of the signal (which are normally smooth curves) get cut off straight at the max volume (clipped). This distorts the sound and is usually undesirable. An example of clipping is when you play music louder than your speaker can handle. Parts of the music sound harsh and fuzzy. Cutoff Frequency On high-pass and low-pass filters, this is the frequency that divides between those that pass, and those that are attenuated (silenced). In a high-pass resonance filter, or a low-pass resonance filter, the cutoff is also the frequency zone that gets boosted. For example, if you have a low-pass filter and you set the cutoff frequency high (i.e. 20kHz)... the filter will not affect the sound. All the audible frequencies will pass through undisturbed. As you lower the cutoff frequency to something like 40 Hz (the low string on a bass guitar), it sounds like someone is putting a blanket over the speaker. The higher frequencies are being attenuated above 30 Hz. Decay After reaching full velocity from the attack, this is the amount of time to turn the parameter down from full velocity to the sustain level. DC-offsety DC offset, or DC coefficient is the mean value of the wavefor.m DC offset is usually undesirable. For example, in audio processing, a sound that has DC offset will not be at its loudest possible volume when normalized (because the offset consumes headroom), and this problem can possibly extend to the mix as a whole, since a sound with DC offset and a sound without DC offset will have DC offset when mixed. It may also cause other artifacts depending on what is being done with the signal. Envelope Generator A way to control (change) a parameter over time as a response to triggering, holding, and releasing a note. Did your eyes just glaze over? Let's try again: Imagine that you're playing a note on the keyboard and you have your other hand on a knob (volume, filter cutoff, etc.). As you play the note, you twist the knob (often up, then down... or down, then up). You do the same thing on each note. That's what an envelope generator does. See also ADSR Fader A slider control used to adjust the attenuation (volume) in a mixer. Faders always have an "audio" taper, which means that the attenuation amount changes on an exponential scale. Filter A device that changes a sound by attenuating specific frequencies. A tone knob is an example of a simple, low-pass filter. Gain In an amplifier, this adjust how much (or how little) a signal is amplified (volume). A higher gain value is a louder signal. High-Pass Filter A filter that attenuates (silences) low frequencies, but allows high frequencies to pass through. Instrument In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, or a tom). Layer In an instrument you can load several different samples (each one called a layer), and have a different sample play depending on the velocity of the note. Only one sample at a time will play. Suppose you have a sample of a floor tom being struck softly. If you simply play the sample louder — it will not sound the same as a real tom that has been struck very hard. If you wish to mimic this in your instrument, you can load one sample for soft playing, and a different sample for loud playing. Low-Pass Filter A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through. Mute To make no noise. A setting on an instrument that prevents any audio output. Mute Group A group of instruments (samples) that should mute (stop playing) immediately after another instrument in the group is triggered. This is typically used in hi-hats, where there's a different instrument (sample) for when the hi-hat is open or closed. With a real hi-hat, the sound of the open hi-hat will stop as soon as you close it. However, if you use two samples — the open sound will continue even after you have triggered the closed sound. By placing both instruments in the same mute group (group #1, for example)... triggering closed sound will immediately stop the open sound (and vice versa). Octave A span of frequencies where the top-most frequency is exactly twice the frequency of the bottom frequency. For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they sound like the same distance. Release After the note is released, this is the amount of time to reduce the parameter from the sustain level to 0. Resonance When referring to a resonance filter, this is the parameter that determines how much of a boost (gain) to give the frequencies at the cutoff. Resonance Filter A filter that gives a large boost to a very narrow range of frequencies. Typically it will be part of a high-pass or a low-pass filter, where the boosted frequencies are centered on the cut-off frequency. Roll-off This is the amount that frequencies are attenuated (suppressed) as the frequency changes (typically measured in dB/octave). For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency. Sample A short recording of a sound, typically between .1 and 3.0 seconds long. Sustain The level to hold the parameter after finishing the decay time. This level will be maintained until the not is released. Velocity How hard you hit a note. MIDI devices are required to send this information along with the note. Synthesizers use this information to adjust several parameters on the sample (typically the volume). In Hydrogen, it is only used to adjust how loud the sample is played back. hydrogen-0.9.6-beta3/data/doc/manual.html000066400000000000000000000020651211146647700201760ustar00rootroot00000000000000 Hydrogen user manual

Hydrogen

  • English manual
  • Manuale in italiano
  • Manual en español
  • Deutsche Anleitung
  • French manual
  • Nederlandse handleiding

  •  
     
  • English tutorial
  • Tutorial in italiano
  • French tutorial
  • hydrogen-0.9.6-beta3/data/doc/manual.pot000066400000000000000000002716421211146647700200450ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2011-01-18 22:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: application/x-xml2pot; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: manual.docbook:7 #, no-c-format msgid "Hydrogen Manual" msgstr "" #. Tag: author #: manual.docbook:9 #, no-c-format msgid "Antonio Piraino" msgstr "" #. Tag: author #: manual.docbook:13 #, no-c-format msgid "Alessandro Cominu" msgstr "" #. Tag: author #: manual.docbook:17 #, no-c-format msgid "Thijs van Severen" msgstr "" #. Tag: author #: manual.docbook:21 #, no-c-format msgid "Sebastian Moors" msgstr "" #. Tag: para #: manual.docbook:32 #, no-c-format msgid "Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter is still experimental, so ask in the developers mailing list for further details." msgstr "" #. Tag: title #: manual.docbook:47 #, no-c-format msgid "Introduction" msgstr "" #. Tag: title #: manual.docbook:50 #, no-c-format msgid "Download" msgstr "" #. Tag: para #: manual.docbook:52 #, no-c-format msgid "You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)" msgstr "" #. Tag: para #: manual.docbook:58 #, no-c-format msgid "If you want to compile Hydrogen yourself (see ), you can download the latest source files directly from our subversion server with: $ svn co http://svn.assembla.com/svn/hydrogen/trunk A certain release can be fetched with:" msgstr "" #. Tag: screen #: manual.docbook:66 #, no-c-format msgid "$ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.5" msgstr "" #. Tag: para #: manual.docbook:69 #, no-c-format msgid "Compiling Hydrogen depends on the following libraries:" msgstr "" #. Tag: para #: manual.docbook:73 #, no-c-format msgid "qt (>= 4.0) at http://www.trolltech.com" msgstr "" #. Tag: para #: manual.docbook:76 #, no-c-format msgid "libsndfile at http://www.mega-nerd.com/libsndfile/" msgstr "" #. Tag: para #: manual.docbook:79 #, no-c-format msgid "ALSA (>= 1.x) at http://www.alsa-project.com (only if you wish to use ALSA as audio driver)" msgstr "" #. Tag: para #: manual.docbook:83 #, no-c-format msgid "Jack Audio Connection Kit (>= 0.80) at http://jackaudio.org/ (only if you wish to use Jack as audio driver)" msgstr "" #. Tag: para #: manual.docbook:88 #, no-c-format msgid "PortAudio at http://www.portaudio.com (only if you wish to use PortAudio as audio driver)" msgstr "" #. Tag: para #: manual.docbook:92 #, no-c-format msgid "Flac at http://flac.sf.net (only if you wish to use flac samples)" msgstr "" #. Tag: para #: manual.docbook:96 #, no-c-format msgid "ladspa at http://ladspa.org (only if you wish to use ladspa effects)" msgstr "" #. Tag: para #: manual.docbook:100 #, no-c-format msgid "liblrdf at http://liblrdf.sf.net (only if you wish to use lrdf to categorise effects)" msgstr "" #. Tag: para #: manual.docbook:103 #, no-c-format msgid "lash at http://lash.nongnu.org (only if you wish to use lash)" msgstr "" #. Tag: para #: manual.docbook:108 #, no-c-format msgid "Please install them with your distribution's package manager. If you're running a debian-based system, you can install the libraries with:" msgstr "" #. Tag: screen #: manual.docbook:112 #, no-c-format msgid "" "$ apt-get install libqt4-dev g++ libasound2-dev \\\n" " libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \\\n" " liblash-dev libportaudio-dev libportmidi-dev " msgstr "" #. Tag: title #: manual.docbook:119 #, no-c-format msgid "Build" msgstr "" #. Tag: para #: manual.docbook:121 #, no-c-format msgid "Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources)." msgstr "" #. Tag: title #: manual.docbook:124 #, no-c-format msgid "Using scons" msgstr "" #. Tag: para #: manual.docbook:126 #, no-c-format msgid "Decompress the tarball or go to the directory where the subversion copy was checked out:" msgstr "" #. Tag: screen #: manual.docbook:129 #, no-c-format msgid "" "$ cd hydrogen-*\n" " $ scons\n" " $ su -c \"scons install\"" msgstr "" #. Tag: para #: manual.docbook:131 #, no-c-format msgid "Before compiling, check for additional options with:" msgstr "" #. Tag: screen #: manual.docbook:133 #, no-c-format msgid "$ scons --help" msgstr "" #. Tag: para #: manual.docbook:135 #, no-c-format msgid "If you want to use features which are not enabled by default (for instance PortAudio), you can enable them with:" msgstr "" #. Tag: screen #: manual.docbook:138 #, no-c-format msgid "$ scons portaudio=1" msgstr "" #. Tag: para #: manual.docbook:140 #, no-c-format msgid "Namely, if you get some error while running Hydrogen and you want to report it remember to configure hydrogen with:" msgstr "" #. Tag: screen #: manual.docbook:143 #, no-c-format msgid "$ scons debug=1" msgstr "" #. Tag: para #: manual.docbook:145 #, no-c-format msgid "To clean up compiled code:" msgstr "" #. Tag: screen #: manual.docbook:147 #, no-c-format msgid "$ scons -c" msgstr "" #. Tag: title #: manual.docbook:152 #, no-c-format msgid "Using cmake" msgstr "" #. Tag: para #: manual.docbook:154 #, no-c-format msgid "Compiling with cmake can be done easily by using the make_helper script. Decompress the tarball or go to the directory where the subversion copy was checked out and run the make_helper script without any arguments to display the help :" msgstr "" #. Tag: screen #: manual.docbook:157 #, no-c-format msgid "" "$ cd hydrogen-*\n" " $ ./make_helper" msgstr "" #. Tag: para #: manual.docbook:159 #, no-c-format msgid "The help is now displayed (and is self-explanatory) :" msgstr "" #. Tag: screen #: manual.docbook:162 #, no-c-format msgid "" "$ used builder : cmake\n" " $ usage ./make_helper [cmds list]\n" " $ cmds may be\n" " $ r or rm => all built, temp and cache files\n" " $ c or clean => remove cache files\n" " $ m or make => launch the build process\n" " $ d or doc => build html documentation\n" " $ h or help => show the build options\n" " $ x or exec => execute hydrogen" msgstr "" #. Tag: title #: manual.docbook:169 #, no-c-format msgid "Preferences" msgstr "" #. Tag: para #: manual.docbook:171 #, no-c-format msgid "First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences)." msgstr "" #. Tag: title #: manual.docbook:176 #, no-c-format msgid "The General tab" msgstr "" #. Tag: para #: manual.docbook:178 #, no-c-format msgid "On the \"General\" tab () you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live." msgstr "" #. Tag: para #: manual.docbook:182 #, no-c-format msgid "If you want to use Lash to manage your Jack connections you should enable it here so Hydrogen allows interaction with Lash." msgstr "" #. Tag: para #: manual.docbook:184 #, no-c-format msgid "The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see )" msgstr "" #. Tag: para #: manual.docbook:186 #, no-c-format msgid "The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching you need to enter the path where rubberband is installed on you system here." msgstr "" #. Tag: title #: manual.docbook:191 #, no-c-format msgid "The General Tab" msgstr "" #. Tag: title #: manual.docbook:203 #, no-c-format msgid "The Audio System tab" msgstr "" #. Tag: para #: manual.docbook:205 #, no-c-format msgid "From the \"Audio System\" tab () it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server)." msgstr "" #. Tag: para #: manual.docbook:211 #, no-c-format msgid "We can set some features of Hydrogen like \"Create per-instrument outputs\" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. \"Connect to Default Output Pair\" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first." msgstr "" #. Tag: para #: manual.docbook:218 #, no-c-format msgid "Also keep an eye on the value of \"Polyphony\": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver." msgstr "" #. Tag: title #: manual.docbook:223 #, no-c-format msgid "The Audio System Tab" msgstr "" #. Tag: para #: manual.docbook:231 #, no-c-format msgid "The following drivers are available:" msgstr "" #. Tag: para #: manual.docbook:238 #, no-c-format msgid "jackd: The Jack driver is a professional audio server which permits very low lag and exchanges with other audio software. We strongly recommend using this driver to have the best out of Hydrogen. JACK server will start automatically if not already running." msgstr "" #. Tag: para #: manual.docbook:246 #, no-c-format msgid "ALSA: the widely adopted Linux standard audio drivers" msgstr "" #. Tag: para #: manual.docbook:251 #, no-c-format msgid "OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort." msgstr "" #. Tag: para #: manual.docbook:260 #, no-c-format msgid "PortAudio: an open-source multi platform audio driver" msgstr "" #. Tag: para #: manual.docbook:265 #, no-c-format msgid "CoreAudio: a driver for Mac OS X (experimental)" msgstr "" #. Tag: title #: manual.docbook:272 #, no-c-format msgid "The Midi System tab" msgstr "" #. Tag: para #: manual.docbook:274 #, no-c-format msgid "The \"Midi System\" tab () contains all MIDI settings. Here you can choose the MIDI driver, input, and channel(s) that Hydrogen should respond to. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the 'binding' action line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action." msgstr "" #. Tag: title #: manual.docbook:286 #, no-c-format msgid "The MIDI System Tab" msgstr "" #. Tag: title #: manual.docbook:296 #, no-c-format msgid "The Appearance tab" msgstr "" #. Tag: para #: manual.docbook:298 #, no-c-format msgid "The \"Appearance\" tab () let's you modify Hydrogen look and feel (font settings and interface style). Also the VU meters fall-off speed of the Mixer Window can be changed here." msgstr "" #. Tag: title #: manual.docbook:302 #, no-c-format msgid "The Appearance Tab" msgstr "" #. Tag: title #: manual.docbook:313 #, no-c-format msgid "The Audio Engine tab (debug only)" msgstr "" #. Tag: para #: manual.docbook:315 #, no-c-format msgid "The \"Audio Engine\" tab () is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect)." msgstr "" #. Tag: para #: manual.docbook:319 #, no-c-format msgid "Note that the Audio Engine tab is only available if Hydrogen was complied with debug support." msgstr "" #. Tag: title #: manual.docbook:322 #, no-c-format msgid "The Audio Engine tab" msgstr "" #. Tag: title #: manual.docbook:343 #, no-c-format msgid "Using Hydrogen" msgstr "" #. Tag: title #: manual.docbook:347 #, no-c-format msgid "Used Filetypes" msgstr "" #. Tag: para #: manual.docbook:349 #, no-c-format msgid "Before working with Hydrogen, please familiarize with these filetypes:" msgstr "" #. Tag: para #: manual.docbook:354 #, no-c-format msgid "*.h2pattern: XML file describing a single pattern. Patterns are group of beats and are managed in the pattern editor." msgstr "" #. Tag: para #: manual.docbook:359 #, no-c-format msgid "*.h2song: XML file describing the whole song (or sequence). Songs are group of patterns with their properties and are manager using the song editor" msgstr "" #. Tag: para #: manual.docbook:364 #, no-c-format msgid "*.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs." msgstr "" #. Tag: para #: manual.docbook:368 #, no-c-format msgid "*.h2drumkit: a compressed and archived folder containing all sound samples composing a drumkit and a description XML file. Drumkits are basically group of sound samples." msgstr "" #. Tag: title #: manual.docbook:379 #, no-c-format msgid "Main menu" msgstr "" #. Tag: para #: manual.docbook:381 #, no-c-format msgid "Projects: this menu offers file related functions." msgstr "" #. Tag: para #: manual.docbook:386 #, no-c-format msgid "New - Create a new song" msgstr "" #. Tag: para #: manual.docbook:389 #, no-c-format msgid "Show Info - Set general properties of the song such as name, author, license and generic notes" msgstr "" #. Tag: para #: manual.docbook:393 #, no-c-format msgid "Open - Open a song" msgstr "" #. Tag: para #: manual.docbook:396 #, no-c-format msgid "Open Demo - Open a demo song (demo songs are stored in $INSTALLPATH/share/hydrogen/data/demo_songs)" msgstr "" #. Tag: para #: manual.docbook:401 #, no-c-format msgid "Open recent - Open a menu showing last used songs" msgstr "" #. Tag: para #: manual.docbook:405 #, no-c-format msgid "Save - Save changes to current song" msgstr "" #. Tag: para #: manual.docbook:408 #, no-c-format msgid "Save as - Save current song specifying a name (default path: $HOME/.hydrogen/data/songs)" msgstr "" #. Tag: para #: manual.docbook:413 #, no-c-format msgid "Open pattern - Open a saved pattern belonging to the current drumkit" msgstr "" #. Tag: para #: manual.docbook:417 #, no-c-format msgid "Export pattern as - Saves a pattern. It will be stored in $HOME/.hydrogen/data/patterns/drumkit_name" msgstr "" #. Tag: para #: manual.docbook:422 #, no-c-format msgid "Export MIDI file - Export current song in MIDI format" msgstr "" #. Tag: para #: manual.docbook:426 #, no-c-format msgid "Export song - Export current song in WAV format" msgstr "" #. Tag: para #: manual.docbook:430 #, no-c-format msgid "Quit - Quit Hydrogen" msgstr "" #. Tag: para #: manual.docbook:434 #, no-c-format msgid "Instruments: this menu offers instruments and drumkit (sound libraries) functions." msgstr "" #. Tag: para #: manual.docbook:439 #, no-c-format msgid "Add instrument - Add a new instrument to your current drumkit" msgstr "" #. Tag: para #: manual.docbook:443 #, no-c-format msgid "Clear all - Delete all instruments from the current drumkit" msgstr "" #. Tag: para #: manual.docbook:447 #, no-c-format msgid "Save library - Saves all instruments settings (and their sound samples) in $HOME/.hydrogen/data/library_name" msgstr "" #. Tag: para #: manual.docbook:452 #, no-c-format msgid "Export library - Compress all instruments samples and settings in a drumkit in $HOME/.hydrogen/data/library_name" msgstr "" #. Tag: para #: manual.docbook:457 #, no-c-format msgid "Import library - Imports another drumkit from the local filesystem or download it from a remote location through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen website for an example). To load another drumkit in your current working session of Hydrogen, read ." msgstr "" #. Tag: para #: manual.docbook:468 #, no-c-format msgid "Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window." msgstr "" #. Tag: para #: manual.docbook:474 #, no-c-format msgid "Playlist editor - A tool to manage playlists." msgstr "" #. Tag: para #: manual.docbook:478 #, no-c-format msgid "Director - Open the director window." msgstr "" #. Tag: para #: manual.docbook:481 #, no-c-format msgid "Mixer - Open the mixer window." msgstr "" #. Tag: para #: manual.docbook:484 #, no-c-format msgid "Instrument rack - Open the instrument rack panel." msgstr "" #. Tag: para #: manual.docbook:488 #, no-c-format msgid "Preferences - Open the main preferences window. Read on how to configure Hydrogen." msgstr "" #. Tag: para #: manual.docbook:494 #, no-c-format msgid "Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !)." msgstr "" #. Tag: para #: manual.docbook:500 #, no-c-format msgid "Show audio engine info - Open a monitor with various stats" msgstr "" #. Tag: para #: manual.docbook:505 #, no-c-format msgid "debug action - Insert debug commands." msgstr "" #. Tag: para #: manual.docbook:509 #, no-c-format msgid "Print Objects - Print on stdout current objects map." msgstr "" #. Tag: emphasis #: manual.docbook:514 #, no-c-format msgid "Info" msgstr "" #. Tag: para #: manual.docbook:518 #, no-c-format msgid "User manual - Open a window with this manual :)" msgstr "" #. Tag: para #: manual.docbook:522 #, no-c-format msgid "About - The usual window with license information, acknowledgements, etc." msgstr "" #. Tag: title #: manual.docbook:531 #, no-c-format msgid "The main toolbar" msgstr "" #. Tag: para #: manual.docbook:533 #, no-c-format msgid "Before analyzing the two main frames of Hydrogen, let's take a quick look at the main toolbar and its components:" msgstr "" #. Tag: para #: manual.docbook:538 #, no-c-format msgid "Pilot the song using the start, stop, pause, etc. buttons" msgstr "" #. Tag: para #: manual.docbook:541 #, no-c-format msgid "Choose between \"pattern\" or \"song\" mode: in \"pattern\" mode only the currently selected pattern will play, while in \"song\" mode all patterns inserted will be played." msgstr "" #. Tag: para #: manual.docbook:546 #, no-c-format msgid "An advanced tap tempo function: choose note length and how many notes to wait before recalculating BPM, then click the comma key repeatedly until the 'R' letter will appear and the BPM will be updated. (see )" msgstr "" #. Tag: para #: manual.docbook:552 #, no-c-format msgid "Manually set BPM" msgstr "" #. Tag: para #: manual.docbook:555 #, no-c-format msgid "Manage JACK transport" msgstr "" #. Tag: para #: manual.docbook:558 #, no-c-format msgid "Open the mixer and the instrument rack panels" msgstr "" #. Tag: title #: manual.docbook:563 #, no-c-format msgid "The Main Toolbar" msgstr "" #. Tag: para #: manual.docbook:578 #, no-c-format msgid "Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern." msgstr "" #. Tag: para #: manual.docbook:588 #, no-c-format msgid "Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see ). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see )." msgstr "" #. Tag: para #: manual.docbook:600 #, no-c-format msgid "Set measure type and Beat Counter (see )." msgstr "" #. Tag: para #: manual.docbook:610 #, no-c-format msgid "Set speed of playing (range: 30-400 bpm) [Hotkey = mouse wheel] and button to enable/disable metronome" msgstr "" #. Tag: para #: manual.docbook:620 #, no-c-format msgid "Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message." msgstr "" #. Tag: para #: manual.docbook:636 #, no-c-format msgid "Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected." msgstr "" #. Tag: title #: manual.docbook:646 #, no-c-format msgid "Tap Tempo and BeatCounter" msgstr "" #. Tag: para #: manual.docbook:648 #, no-c-format msgid "It is possible to change tempo at any time using the tap-tempo and BeatCounter features of Hydrogen. You can change these while playing or while the song is stopped. To change the tempo, hit the , (comma) key in tempo for the number of beats in the measure. After the correct number of beats are met, the tempo will change to the average tempo that you tapped in. If you continue to tap, these new taps will become a part of a rolling average. If you tap accidentally, or if you wait too long between taps, the tap tempo counter will start over." msgstr "" #. Tag: para #: manual.docbook:658 #, no-c-format msgid "The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo on steroids. By default the BeatCounter display is not visible. To see the BeatCounter widget click the upright button (BC) between Song/Pattern mode selector and the BPM-widget. Or, it can be shown by pressing the comma key (,)." msgstr "" #. Tag: para #: manual.docbook:665 #, no-c-format msgid "The tempo that you tap will be considered even beats of the beat type. The beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change the beat type use the left arrow buttons. To change the number of beats that are counted, use the right arrow button. You can set from 2 to 16 beats. (I.e. if you set the beat to 6, you will have to tap 6 times before the new tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. Every time you tap with the comma key, it will show the number of taps that you have entered (1, 2, 3...)." msgstr "" #. Tag: para #: manual.docbook:676 #, no-c-format msgid "The button in the bottom right-hand controls the auto-start feature, and it toggles between S and P. When it shows P for (Play), the song will set the new tempo and automatically start to play after you tap the right number of beats (if it's not already playing, of course). This way, if you have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing on the next beat. When it shows S (for Set BPM), the auto-start is disabled." msgstr "" #. Tag: para #: manual.docbook:686 #, no-c-format msgid "For example: Suppose you have a live band, Hydrogen, and a softsynth that is controlled by Seq24)... and you want them all to start at the same time. Set the beat type to 1/4 and the number of beats to 4. Enable auto-start (button shows P). Count off the band 1-2-3-4 (while tapping the comma key) — and everyone starts on 1." msgstr "" #. Tag: para #: manual.docbook:693 #, no-c-format msgid "Another example: Same situation, but the song doesn't require Hydrogen or synths until some point later. During that time, a human (e.g. guitar player) will be setting the tempo. On the measure before Hydrogen is supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in on the next beat (at the right tempo)." msgstr "" #. Tag: para #: manual.docbook:699 #, no-c-format msgid "If you are using the JACK Transport, the BeatCounter continues to work. If another program is the JACK Transport Master, Hydrogen will respond to tempo change events from that application. Note that in this situation, Hydrogen is supposed to be a slave, so some of the BeatCounter features will be disabled or will not work properly. If Hydrogen is the JACK Transport Master, tempo changes from Hydrogen will be reflected in those programs (if they support it)." msgstr "" #. Tag: para #: manual.docbook:708 #, no-c-format msgid "Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see ). Here you will finde two spinboxes:" msgstr "" #. Tag: para #: manual.docbook:714 #, no-c-format msgid "Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program." msgstr "" #. Tag: para #: manual.docbook:719 #, no-c-format msgid "Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated)." msgstr "" #. Tag: para #: manual.docbook:725 #, no-c-format msgid "Note that these can be set to positive (+) or negative (-) values. In order to find useful values for these, you will need to take some time to play with it. Also, you may want different values depending on the speed of your hardware, audio devices, drivers, etc. Using the BeatCounter effectively requires practice." msgstr "" #. Tag: title #: manual.docbook:738 #, no-c-format msgid "Song Editor" msgstr "" #. Tag: para #: manual.docbook:740 #, no-c-format msgid "The \"Song Editor\" () gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel is a complete bar as shown in the underlying \"Pattern Editor\" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns." msgstr "" #. Tag: para #: manual.docbook:749 #, no-c-format msgid "The Song Editor comes with 7 buttons:" msgstr "" #. Tag: para #: manual.docbook:765 #, no-c-format msgid "Completely delete all patterns (asks for confirmation!)." msgstr "" #. Tag: para #: manual.docbook:773 #, no-c-format msgid "Create a new pattern (and asks for a name)." msgstr "" #. Tag: para #: manual.docbook:781 #, no-c-format msgid "Move currently selected pattern up or down." msgstr "" #. Tag: para #: manual.docbook:791 #, no-c-format msgid "Enable selecting patterns for copy & paste (Select Mode)." msgstr "" #. Tag: para #: manual.docbook:799 #, no-c-format msgid "Enable Draw Mode." msgstr "" #. Tag: para #: manual.docbook:806 #, no-c-format msgid "Switch from \"Single pattern mode\" to \"Stacked pattern mode\" and back.." msgstr "" #. Tag: para #: manual.docbook:812 #, no-c-format msgid "Under these buttons there is a list of patterns created and when they will played (each square == 1 bar). Click on an squarebox to add or cancel the pattern. Clicking on right mouse button over the name of a pattern will bring up a menu to change name of the pattern or to allow copying/deleting it. Patterns with very same name are not allowed." msgstr "" #. Tag: title #: manual.docbook:819 #, no-c-format msgid "The Song Editor" msgstr "" #. Tag: title #: manual.docbook:833 #, no-c-format msgid "Pattern Editor" msgstr "" #. Tag: para #: manual.docbook:835 #, no-c-format msgid "The \"Pattern Editor\" lets us create or modify the pattern (bar) which is currently selected. You can add/remove notes, and tune a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)" msgstr "" #. Tag: para #: manual.docbook:841 #, no-c-format msgid "First let's take a look at the (classic) 'Drum' mode :" msgstr "" #. Tag: title #: manual.docbook:843 #, no-c-format msgid "Pattern Editor in Drum mode" msgstr "" #. Tag: title #: manual.docbook:854 manual.docbook:858 #, no-c-format msgid "Pattern Editor Controls" msgstr "" #. Tag: para #: manual.docbook:855 #, no-c-format msgid "The top part of the pattern editor contains a number of controls :" msgstr "" #. Tag: para #: manual.docbook:866 #, no-c-format msgid "From left to right :" msgstr "" #. Tag: para #: manual.docbook:869 #, no-c-format msgid "SIZE : lets you choose the size of the pattern (the number of bars)" msgstr "" #. Tag: para #: manual.docbook:872 #, no-c-format msgid "RES : this is the current grid resolution (4 through 64)" msgstr "" #. Tag: para #: manual.docbook:875 #, no-c-format msgid "Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose \"off\" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer." msgstr "" #. Tag: para #: manual.docbook:886 #, no-c-format msgid "HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern." msgstr "" #. Tag: para #: manual.docbook:889 #, no-c-format msgid "QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied." msgstr "" #. Tag: para #: manual.docbook:893 #, no-c-format msgid "Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your sound library as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth." msgstr "" #. Tag: para #: manual.docbook:901 #, no-c-format msgid "Note Length / Note off : these are 2 different ways to define the duration of a note. See for usage." msgstr "" #. Tag: para #: manual.docbook:904 #, no-c-format msgid "Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)" msgstr "" #. Tag: title #: manual.docbook:912 #, no-c-format msgid "Pattern Editor Drumkit" msgstr "" #. Tag: para #: manual.docbook:913 #, no-c-format msgid "The section on the left shows you what drumkit/library is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit." msgstr "" #. Tag: para #: manual.docbook:924 #, no-c-format msgid "Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select" msgstr "" #. Tag: para #: manual.docbook:927 #, no-c-format msgid "Clear notes : to remove all notes for this instrument in this pattern." msgstr "" #. Tag: para #: manual.docbook:928 #, no-c-format msgid "Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note." msgstr "" #. Tag: para #: manual.docbook:932 #, no-c-format msgid "Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played." msgstr "" #. Tag: para #: manual.docbook:938 #, no-c-format msgid "Delete Instrument : well, deletes the instrument ;-)" msgstr "" #. Tag: para #: manual.docbook:941 #, no-c-format msgid "The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons." msgstr "" #. Tag: para #: manual.docbook:945 #, no-c-format msgid "The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit/library. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys." msgstr "" #. Tag: para #: manual.docbook:953 #, no-c-format msgid "Important Notes :" msgstr "" #. Tag: para #: manual.docbook:954 #, no-c-format msgid "The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default." msgstr "" #. Tag: para #: manual.docbook:957 #, no-c-format msgid "Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument." msgstr "" #. Tag: section #: manual.docbook:960 #, no-c-format msgid " Here's a quick reference of the above bindings for your convenience. " msgstr "" #. Tag: title #: manual.docbook:1012 #, no-c-format msgid "Pattern Editor Sequence area" msgstr "" #. Tag: para #: manual.docbook:1013 #, no-c-format msgid "This is where it all happens, this is where you can make music :-)" msgstr "" #. Tag: para #: manual.docbook:1014 #, no-c-format msgid "In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution." msgstr "" #. Tag: para #: manual.docbook:1018 #, no-c-format msgid "If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note. (Figure above, from left>right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)" msgstr "" #. Tag: para #: manual.docbook:1034 #, no-c-format msgid "So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see ) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see for a basic walk-through of how the pattern editor works)" msgstr "" #. Tag: title #: manual.docbook:1049 #, no-c-format msgid "Pattern Editor Note Properties" msgstr "" #. Tag: para #: manual.docbook:1050 #, no-c-format msgid "Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :" msgstr "" #. Tag: para #: manual.docbook:1059 #, no-c-format msgid "Velocity : how hard the note is played (the volume of the note)" msgstr "" #. Tag: para #: manual.docbook:1060 #, no-c-format msgid "Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping." msgstr "" #. Tag: para #: manual.docbook:1068 #, no-c-format msgid "Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)" msgstr "" #. Tag: para #: manual.docbook:1073 #, no-c-format msgid "Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)" msgstr "" #. Tag: para #: manual.docbook:1082 #, no-c-format msgid "Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'" msgstr "" #. Tag: para #: manual.docbook:1093 #, no-c-format msgid "The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note." msgstr "" #. Tag: title #: manual.docbook:1104 #, no-c-format msgid "Pattern Editor Piano mode" msgstr "" #. Tag: para #: manual.docbook:1105 #, no-c-format msgid "Drum mode (see ) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes." msgstr "" #. Tag: para #: manual.docbook:1108 #, no-c-format msgid "You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first." msgstr "" #. Tag: title #: manual.docbook:1111 #, no-c-format msgid "Pattern Editor in Piano mode" msgstr "" #. Tag: title #: manual.docbook:1125 #, no-c-format msgid "Mixer" msgstr "" #. Tag: title #: manual.docbook:1128 manual.docbook:1963 #, no-c-format msgid "The Mixer" msgstr "" #. Tag: para #: manual.docbook:1136 #, no-c-format msgid "The Mixer frame () is useful for tuning a global or single volume of the current drumkit. It shows the current peak (click on to disable, useful on old CPUs) and let you set the maximum peak allowed (tune with the fader knob of the instrument), lets you modify attributes like pan, play solo , mute or test play only that instrument ; selecting in the Pattern Editor an instrument causes a blue LED to light on (near the play button). Near the global volume knob, you can set 3 global effect such a swing (shifts a few notes back or forward not randomly), timing (modify timings of the notes) and humanize effect (random velocity editing)." msgstr "" #. Tag: para #: manual.docbook:1179 #, no-c-format msgid "In addition to all this you can set up to 4 special LADSPA effects for each instrument switching the button. See next section for a detailed overview. " msgstr "" #. Tag: title #: manual.docbook:1204 #, no-c-format msgid "Sound Library (Drumkit Manager)" msgstr "" #. Tag: para #: manual.docbook:1206 #, no-c-format msgid "The Sound Library saves you time in managing your drum kits, favorite patterns, and favorite songs. When making new songs and drum kits, the Sound Library makes it easier for you to reuse and mix the instruments and patterns from other kits and songs." msgstr "" #. Tag: title #: manual.docbook:1212 #, no-c-format msgid "System Drumkits" msgstr "" #. Tag: para #: manual.docbook:1214 #, no-c-format msgid "This lists the drumkits that were installed by your system administrator. It was determined by the compile-time prefix. On Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or possibly /usr/local/share/hydrogen/data/drumkits. These kits are available to all users on the system, and users are usually not able to add to them." msgstr "" #. Tag: para #: manual.docbook:1223 #, no-c-format msgid "To load a drumkit from here, right-click the drumkit and select Load. This will replace your current drumkit with the one that you selected. To load a single instrument from that kit, left-click the plus to the left of the drumkit's name to show all the instruments. With your left mouse button, click and drag the instrument into your current kit. The instrument will be added to the drumkit that you currently have loaded." msgstr "" #. Tag: title #: manual.docbook:1234 #, no-c-format msgid "User Drumkits" msgstr "" #. Tag: para #: manual.docbook:1236 #, no-c-format msgid "These are your own drum kits that you can manage yourself. They are usually stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by selecting InstrumentsSave library." msgstr "" #. Tag: para #: manual.docbook:1244 #, no-c-format msgid "Loading drumkits and instruments to use is the same as for the System Drumkits (see )." msgstr "" #. Tag: title #: manual.docbook:1249 #, no-c-format msgid "Patterns in the Sound Library" msgstr "" #. Tag: para #: manual.docbook:1251 #, no-c-format msgid "Before you save your favorite patterns to the sound library, be sure to edit it's properties by right-clicking and selecting Properties. There, you can give the pattern a title and a category. You can use one of the categories already provided, or create your own categories by simply typing in a category name. The category name is important, because the patterns will be filed by category in the Sound Library." msgstr "" #. Tag: para #: manual.docbook:1259 #, no-c-format msgid "You can save your favorite patterns in the sound library by right clicking the title of the pattern in the song editor, and selecting Save Pattern. It will appear in the Sound Library underneath Patterns and the category that you assigned to the pattern." msgstr "" #. Tag: title #: manual.docbook:1267 #, no-c-format msgid "Songs in the Sound Library" msgstr "" #. Tag: para #: manual.docbook:1269 #, no-c-format msgid "To save songs in the Sound Library, put them in your data directory underneath the songs folder (usually $HOME/data/songs. To remove them, remove the file from that folder." msgstr "" #. Tag: title #: manual.docbook:1277 #, no-c-format msgid "Drumkits and Instrument Editing" msgstr "" #. Tag: para #: manual.docbook:1279 #, no-c-format msgid "Creating a new drumkit with Hydrogen is done with the Instrument Editor. Using the instrument editor you can load samples, set envelope parameters, set the gain, and a few other advanced features like mute groups, low-pass resonance filter, and pitch randomization." msgstr "" #. Tag: para #: manual.docbook:1284 #, no-c-format msgid "Instead of creating your own drumkit, you can also use or download existing drumkits using the ." msgstr "" #. Tag: title #: manual.docbook:1291 #, no-c-format msgid "Concepts" msgstr "" #. Tag: para #: manual.docbook:1293 #, no-c-format msgid "The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a note, the sample is simply played back at the right time. There's a few concepts and terms that you should understand when you are putting together a drumkit. (See for more detailed explanations.)" msgstr "" #. Tag: title #: manual.docbook:1303 #, no-c-format msgid "Sampling Synthesizer Terms" msgstr "" #. Tag: term #: manual.docbook:1305 #, no-c-format msgid "Sample" msgstr "" #. Tag: para #: manual.docbook:1305 manual.docbook:2420 #, no-c-format msgid "A short recording of a sound, typically between .1 and 3.0 seconds long." msgstr "" #. Tag: term #: manual.docbook:1309 #, no-c-format msgid "Gain" msgstr "" #. Tag: para #: manual.docbook:1309 #, no-c-format msgid "Volume adjustment." msgstr "" #. Tag: term #: manual.docbook:1313 #, no-c-format msgid "Velocity" msgstr "" #. Tag: para #: manual.docbook:1313 manual.docbook:2444 #, no-c-format msgid "How hard you hit a note." msgstr "" #. Tag: term #: manual.docbook:1317 #, no-c-format msgid "ADSR Envelope Generator" msgstr "" #. Tag: para #: manual.docbook:1317 #, no-c-format msgid "An Attack/Decay/Sustain/Release envelope generator. After you trigger a note, Hydrogen will attack the note by increasing its volume from 0 to the full velocity of the note. After reaching full velocity, it will decay the note by lowering the volume until it reaches the sustain level. When the note is released, Hydrogen reduces the volume from the sustain level back down to 0." msgstr "" #. Tag: term #: manual.docbook:1328 #, no-c-format msgid "Attack" msgstr "" #. Tag: para #: manual.docbook:1328 #, no-c-format msgid "The amount of time to go from 0 to full velocity." msgstr "" #. Tag: term #: manual.docbook:1333 #, no-c-format msgid "Decay" msgstr "" #. Tag: para #: manual.docbook:1333 #, no-c-format msgid "The amount of time to go from full velocity to the sustain volume." msgstr "" #. Tag: term #: manual.docbook:1338 #, no-c-format msgid "Sustain" msgstr "" #. Tag: para #: manual.docbook:1338 #, no-c-format msgid "The level (how loud) to hold the note between the sustain and the release. It is a percentage of the velocity. It does not depend on time." msgstr "" #. Tag: term #: manual.docbook:1344 #, no-c-format msgid "Release" msgstr "" #. Tag: para #: manual.docbook:1344 #, no-c-format msgid "The amount of time to go from the sustain volume back down to 0." msgstr "" #. Tag: para #: manual.docbook:1350 #, no-c-format msgid "Typical samples that are used in Hydrogen are: the sound of a single drum hit, the sound of a single cymbal hit, the sound of a single cowbell hit. Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen will play whatever sound you have loaded. So, to put together a drum kit you need to gather short recordings of the bass drum, each tom, each cymbal, the high hat open, the high hat closed, the snare drum (snare on), the snare drum (snare off), rim shots, etc." msgstr "" #. Tag: para #: manual.docbook:1361 #, no-c-format msgid "However, there are no rules about what a sample can be. It's not uncommon to use Hydrogen to trigger non-drum sounds like: audio clips of people talking, a clip from a song, sound effects, audio clips from movies, and famous people speaking. Be creative!" msgstr "" #. Tag: title #: manual.docbook:1370 #, no-c-format msgid "Creating a New Drumkit" msgstr "" #. Tag: para #: manual.docbook:1372 #, no-c-format msgid "To start a brand new drum kit, select Instruments Clear All . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select Delete Instrument. To add more instruments, select Instruments Add instrument ." msgstr "" #. Tag: para #: manual.docbook:1391 #, no-c-format msgid "Select an instrument to start editing it. This is done by left-clicking on the name of the instrument in the instrument list (at the left). You will notice that the name of the instrument in the Instrument Editor matches the one that you clicked." msgstr "" #. Tag: para #: manual.docbook:1396 #, no-c-format msgid "After you have your drum kit working the way you want, select Instruments Save library . It will ask you for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace." msgstr "" #. Tag: para #: manual.docbook:1407 #, no-c-format msgid "Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits)." msgstr "" #. Tag: para #: manual.docbook:1411 #, no-c-format msgid "To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select Instruments Export library from the menu. Select the drum kit that you wish to export, and give it a file name to save it to." msgstr "" #. Tag: title #: manual.docbook:1424 #, no-c-format msgid "Creating an Instrument and Layers" msgstr "" #. Tag: para #: manual.docbook:1426 #, no-c-format msgid "For each instrument in a drum kit, you can load several samples and set different synthesizer parameters. This section will step you through how to create a new instrument and load the samples." msgstr "" #. Tag: para #: manual.docbook:1430 #, no-c-format msgid "To begin creating an instrument, select Instruments Add instrument . This will give you a blank instrument to start from." msgstr "" #. Tag: para #: manual.docbook:1437 #, no-c-format msgid "Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides several in the data/drumkits directory." msgstr "" #. Tag: para #: manual.docbook:1441 #, no-c-format msgid "In the instrument editor, click on Layers. You can layer several samples into the instrument. Which one is played depends on the velocity of the incoming note. Click Load Layer and point the Audio File Browser to your sample. Note that the Audio File Browser will allow you to preview the sample before you load it. It will also allow you to load more than one sample at a time. But for now, only load one." msgstr "" #. Tag: para #: manual.docbook:1450 #, no-c-format msgid "After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To load a second sample, click the slot just below it, and then click Load Layer to bring in another sample." msgstr "" #. Tag: para #: manual.docbook:1456 #, no-c-format msgid "After bringing in both samples, you'll probably notice that only the first sample is being played whenever you trigger the instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light blue rectangles and you see that you get a left-right drag cursor. Now drag the sample to the left or right (like a curtain). You will now see Layer 2 appear." msgstr "" #. Tag: para #: manual.docbook:1464 #, no-c-format msgid "The velocity setting for the layer is 0-velocity on the left, and full velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)" msgstr "" #. Tag: para #: manual.docbook:1469 #, no-c-format msgid "Now, in the pattern area, set up a simple pattern that plays this instrument. Adjust the velocity settings on each note so that you can get the different samples to sound. Now set the pattern to loop and notice how your different samples are getting triggered. (To learn about editing a pattern, see )" msgstr "" #. Tag: para #: manual.docbook:1476 #, no-c-format msgid "For each layer, you can set the Gain and the Pitch. The pitch also has a Fine adjustment." msgstr "" #. Tag: para #: manual.docbook:1480 #, no-c-format msgid "Use the Gain adjustment to control how loud the sample will play. This is necessary because it's extremely difficult to get a set of samples that all sound at about the same volume. By adjusting here, the samples that were recorded too quietly can be turned up to match your loud samples (that had to be turned down)." msgstr "" #. Tag: para #: manual.docbook:1488 manual.docbook:1613 #, no-c-format msgid "It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it." msgstr "" #. Tag: para #: manual.docbook:1494 #, no-c-format msgid "The pitch of the sample can be modified with the pitch controls. The Pitch knob adjust the pitch in musical half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts the pitch ±50 cents. (One half-step is 100 cents.)" msgstr "" #. Tag: para #: manual.docbook:1500 #, no-c-format msgid "The pitch is adjusted by playing the sample back faster or slower. This is called the Dopplar Effect. So, if you have a 1-second sample that you turn down -12 (1 octave), you sample will only last for .5-seconds." msgstr "" #. Tag: title #: manual.docbook:1507 #, no-c-format msgid "Instrument Parameters" msgstr "" #. Tag: para #: manual.docbook:1509 #, no-c-format msgid "In the instrument editor, click on the General button. Here you can adjust several parameters that are for the whole instrument (not for each layer). The parameters that you can adjust are:" msgstr "" #. Tag: para #: manual.docbook:1516 #, no-c-format msgid "Envelope parameters: Attack, Decay, Sustain, Release. (See )" msgstr "" #. Tag: para #: manual.docbook:1522 #, no-c-format msgid "Gain: The overall volume of the instrument." msgstr "" #. Tag: para #: manual.docbook:1526 #, no-c-format msgid "Mute Group: Which mute group this instrument is a member of (see )." msgstr "" #. Tag: para #: manual.docbook:1531 #, no-c-format msgid "Filter Parameters: Bypass, Cutoff, Resonance." msgstr "" #. Tag: guibutton #: manual.docbook:1536 #, no-c-format msgid "Random Pitch" msgstr "" #. Tag: para #: manual.docbook:1541 #, no-c-format msgid "It's important that you understand in order to continue on." msgstr "" #. Tag: title #: manual.docbook:1546 #, no-c-format msgid "Envelope Parameters" msgstr "" #. Tag: para #: manual.docbook:1548 #, no-c-format msgid "When the instrument is triggered, its volume is run through an ADSR Envelope. The parameters operate as follows:" msgstr "" #. Tag: para #: manual.docbook:1553 #, no-c-format msgid "Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter." msgstr "" #. Tag: para #: manual.docbook:1560 #, no-c-format msgid "The attack, decay, and release parameters are all set by the number of audio samples. This means that the time changes depending on the sample rate of your sound card. The max time for each of them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz)." msgstr "" #. Tag: para #: manual.docbook:1569 #, no-c-format msgid "Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter." msgstr "" #. Tag: para #: manual.docbook:1578 #, no-c-format msgid "Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity." msgstr "" #. Tag: para #: manual.docbook:1585 #, no-c-format msgid "Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available." msgstr "" #. Tag: para #: manual.docbook:1594 #, no-c-format msgid "If the sample is shorter than the times that you specify, the sample will end, regardless of which phase of the ADSR it is in. If the note is sustained, it does not draw out the note while you are holding it. It only holds the gain (volume) parameter during that time." msgstr "" #. Tag: title #: manual.docbook:1603 #, no-c-format msgid "Gain and Mute Group" msgstr "" #. Tag: para #: manual.docbook:1605 #, no-c-format msgid "The gain sets the overall volume for the sample. This gain is applied after the gain that you set for the layer, and before the gain that is set for the mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is set higher, the samples will be amplified." msgstr "" #. Tag: para #: manual.docbook:1619 #, no-c-format msgid "Hydrogen provides more mute groups than you know what to do with (over 256). A mute group is a grouping of instruments that are mutually exclusive — only one instrument may be playing at any time. If one is playing and another instrument in the group is triggered, it will immediately silence (mute) and start playing the other instrument. This is useful, especially, for instruments like hi-hats where the open sound and the closed sound are different instruments." msgstr "" #. Tag: para #: manual.docbook:1628 #, no-c-format msgid "If the mute group is set to Off, then the instrument is not part of any mute grouping. If the mute group is set to any number, then that is the group that the instrument is a part of. To set other instruments into the same grouping, set their mute group parameter to the same number. (For example, to group all the high-hat instruments, you can set all their mute group parameters to 1. To have a snare drum mute group, set their mute group parameters to 2.)" msgstr "" #. Tag: title #: manual.docbook:1640 #, no-c-format msgid "Filter and Random Pitch" msgstr "" #. Tag: para #: manual.docbook:1642 #, no-c-format msgid "The filter is a low-pass resonance filter. If you don't wish to use is, click the BYPass button so that it's red. If it's not red, then the filter is active. The cutoff parameter adjusts the cutoff frequency for the filter. The resonance parameter adjusts how much to resonate the cutoff frequency. If the resonance is set to 0, then the filter is just a simple low-pass filter." msgstr "" #. Tag: para #: manual.docbook:1651 #, no-c-format msgid "The cutoff frequency of the filter varies with the sample rate of your audio card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample rate." msgstr "" #. Tag: para #: manual.docbook:1669 #, no-c-format msgid "The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: ±2 half-steps × value. Using this sparingly can help your sequences to sound more like a real drummer." msgstr "" #. Tag: title #: manual.docbook:1678 #, no-c-format msgid "Tips on Editing Instruments" msgstr "" #. Tag: para #: manual.docbook:1680 #, no-c-format msgid "With all of the different parameters available to tweak, it can be difficult to set up something that sounds nice when you're done. Here's a few tips on setting up an instrument:" msgstr "" #. Tag: para #: manual.docbook:1684 #, no-c-format msgid "Turn down the gain. Every time you have a gain knob (i.e. an amplifier), this is called a gain stage. With every gain stage you have, it's easy to overdrive your signal — which means the signal gets distorted by clipping. In addition, if you have two samples that, by themselves, peg your meters — what do you think happens when you combine them? That's right, you overdrive the signal again." msgstr "" #. Tag: para #: manual.docbook:1692 #, no-c-format msgid "If things sound bad and distorted, start by turning down the gain setting on the layer... especially if it's larger than 1.0. Then turn down the instrument gain. Then any gain on a LADSPA effect. Then the fader on the mixer. Then the master output fader." msgstr "" #. Tag: para #: manual.docbook:1697 #, no-c-format msgid "Test samples at full velocity. Your sample will be played louder if the velocity is higher. So, if you set everything to sound nice and full with velocity at 0.7, what will happen when you get a full velocity of 1.0? (Hint: clipping.)" msgstr "" #. Tag: para #: manual.docbook:1703 #, no-c-format msgid "Try to use samples that are -6 dB max. Visually, this means samples that peak at only 1/2 of full scale. Otherwise, turn your layer gain to about .5." msgstr "" #. Tag: para #: manual.docbook:1708 #, no-c-format msgid "Remove all DC offsets from the sample. In a sample editor, there is usually a line down the center of your sample's waveform. This is the zero-line. The beginning of your sample should be on this line. The end of your sample should also be on this line. However, if your signal is a little above or a little below this line, you will hear a click at the beginning and the end of your sample whenever it is played. If your sample editor doesn't provide any tools to fix a DC Offset problem, you can eliminate the noise by putting a slight fade-in/out at the ends of your sample." msgstr "" #. Tag: para #: manual.docbook:1718 #, no-c-format msgid "The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the attack and delay — the sample will stop playing at the end." msgstr "" #. Tag: para #: manual.docbook:1723 #, no-c-format msgid "Things change with the sample rate. If you have a really nice setup with all your parameters painstakenly tweaked... things will change if you change the sample rate of your audio card. Many of Hydrogens internal settings and parameters are done based on how many samples go by, and not on how many seconds go by. The sort of things that change are: anything time-base (like attack and release) and anything frequency based (like the cutoff frequency)." msgstr "" #. Tag: title #: manual.docbook:1736 #, no-c-format msgid "LADSPA plugins" msgstr "" #. Tag: para #: manual.docbook:1738 #, no-c-format msgid "Hydrogen can also add effects to sounds using any LADSPA plugin library. You need to have installed the LADSPA sources (available from http://www.ladspa.org) and while this will give a rough idea of how it works you should really have a taste of the real thing installing one or more plugin libraries, it's as simple as a scons && scons install. Here are a few places to download plugin libraries:" msgstr "" #. Tag: para #: manual.docbook:1748 #, no-c-format msgid "SWH-Plugins available at http://plugin.org.uk. Note that before compiling these plugins you need the FFTW tarball from http://www.fftw.org." msgstr "" #. Tag: para #: manual.docbook:1755 #, no-c-format msgid "CMT available at http://www.ladspa.org." msgstr "" #. Tag: para #: manual.docbook:1759 #, no-c-format msgid "TAP available at http://tap-plugins.sf.net." msgstr "" #. Tag: title #: manual.docbook:1765 #, no-c-format msgid "Plugins Kill" msgstr "" #. Tag: para #: manual.docbook:1766 #, no-c-format msgid "A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others." msgstr "" #. Tag: para #: manual.docbook:1773 #, no-c-format msgid "Once you have installed a few plugins open a song you'd like add an effect to and select an instrument that has a few beats in the pattern. In the Mixer click on and select one of the four available effect line Click on the Edit button ( ), than on Select the FX: this will bring up another window () that lets you choose an effect amongst those installed, they are alphabetically sorted and categorized. Once you're done, adjust the level from the mixer and start playing. Each round knob in the FX part controls the level of its effect. If you want to quickly enable/disable the effect click the Bypass ( ) button." msgstr "" #. Tag: title #: manual.docbook:1817 #, no-c-format msgid "Select an Effect" msgstr "" #. Tag: title #: manual.docbook:1836 #, no-c-format msgid "A new song" msgstr "" #. Tag: title #: manual.docbook:1838 #, no-c-format msgid "\"Song\" mode and \"Pattern\" mode" msgstr "" #. Tag: para #: manual.docbook:1840 #, no-c-format msgid "This is just a quick-and-dirty walkthrough to Hydrogen. Refer to the tutorial for a more detailed overview." msgstr "" #. Tag: para #: manual.docbook:1843 #, no-c-format msgid "Hydrogen has 2 main modes: \"Pattern\" mode and \"Song\" mode (refer to for the buttons to activate). When \"Pattern\" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern untill it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In \"Song\" mode the whole song is played. This is useful when putting together the patterns, to create the structure of the song." msgstr "" #. Tag: title #: manual.docbook:1853 #, no-c-format msgid "A new pattern" msgstr "" #. Tag: para #: manual.docbook:1855 #, no-c-format msgid "We'll start from an empty song with an empty pattern, as created by default: \"pattern\" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor () simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!" msgstr "" #. Tag: title #: manual.docbook:1872 #, no-c-format msgid "The Pattern Editor" msgstr "" #. Tag: title #: manual.docbook:1882 #, no-c-format msgid "A new sequence" msgstr "" #. Tag: para #: manual.docbook:1884 #, no-c-format msgid "Once patterns are created (), we can copy/paste/delete them simply dragging with the mouse (activate the select mode for the Song Editor and keep pressed left mouse button to select those you want to move or copy)." msgstr "" #. Tag: title #: manual.docbook:1890 #, no-c-format msgid "Inserting Notes in a Pattern" msgstr "" #. Tag: title #: manual.docbook:1901 #, no-c-format msgid "Adjust from the mixer" msgstr "" #. Tag: para #: manual.docbook:1903 #, no-c-format msgid "Of course we can always use the mixer window, either when creating or playing patterns." msgstr "" #. Tag: para #: manual.docbook:1906 #, no-c-format msgid "The Mixer frame () is made of 32 independent tracks, each of these is binded to an instrument, plus a \"Master Output\" line to adjust general output volume and a \"FX\" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The \"Mute\" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter." msgstr "" #. Tag: title #: manual.docbook:1975 #, no-c-format msgid "Shortcut lists" msgstr "" #. Tag: para #: manual.docbook:1979 #, no-c-format msgid "[CTRL + N] = New Project" msgstr "" #. Tag: para #: manual.docbook:1984 #, no-c-format msgid "[CTRL + O] = Open File" msgstr "" #. Tag: para #: manual.docbook:1989 #, no-c-format msgid "[CTRL + D] = Open Demo" msgstr "" #. Tag: para #: manual.docbook:1994 #, no-c-format msgid "[CTRL + S] = Save File" msgstr "" #. Tag: para #: manual.docbook:1999 #, no-c-format msgid "[CTRL + SHIFT + S] = Save File as" msgstr "" #. Tag: para #: manual.docbook:2004 #, no-c-format msgid "[CTRL + P] = Export Pattern as" msgstr "" #. Tag: para #: manual.docbook:2009 #, no-c-format msgid "[CTRL + M] = Export MIDI file" msgstr "" #. Tag: para #: manual.docbook:2014 #, no-c-format msgid "[CTRL + E] = Export Song" msgstr "" #. Tag: para #: manual.docbook:2019 #, no-c-format msgid "[CTRL + Q] = Quit Hydrogen" msgstr "" #. Tag: para #: manual.docbook:2024 #, no-c-format msgid "[ALT + B] = Show Director window" msgstr "" #. Tag: para #: manual.docbook:2029 #, no-c-format msgid "[ALT + M] = Show Mixer window" msgstr "" #. Tag: para #: manual.docbook:2034 #, no-c-format msgid "[ALT + I] = Show Instrument rack" msgstr "" #. Tag: para #: manual.docbook:2039 #, no-c-format msgid "[ALT + P] = Show Preferences window" msgstr "" #. Tag: para #: manual.docbook:2044 #, no-c-format msgid "[CTRL + ?] = Show manual" msgstr "" #. Tag: para #: manual.docbook:2049 #, no-c-format msgid "[Backspace] = Restart song or pattern from the beginning" msgstr "" #. Tag: para #: manual.docbook:2055 #, no-c-format msgid "[spacebar] = Play / Pause" msgstr "" #. Tag: para #: manual.docbook:2060 #, no-c-format msgid "[,] (comma key) = Tap tempo (beatcounter)" msgstr "" #. Tag: title #: manual.docbook:2069 #, no-c-format msgid "Glossary" msgstr "" #. Tag: para #: manual.docbook:2071 #, no-c-format msgid "This is a glossary of general terms encountered when using Hydrogen, synthesizers, drums, or samplers. The definitions in the text are simplified, but the definitions here are more general and have more explanation. For example, the text of the manual would have you believe that an ADSR is the only kind of envelope generator, and could only ever control the volume. While it's simple for new users, it's not quite right." msgstr "" #. Tag: glossterm #: manual.docbook:2084 #, no-c-format msgid "ADSR" msgstr "" #. Tag: para #: manual.docbook:2086 #, no-c-format msgid "A type of envelope generator that allows you to control the Attack, Decay, Sustain, and Release parameters. Generally, the parameters are proportional to the velocity." msgstr "" #. Tag: para #: manual.docbook:2095 #, no-c-format msgid "In Hydrogen, the ADSR envelope generator only controls the volume (attenuation)." msgstr "" #. Tag: para #: manual.docbook:2098 #, no-c-format msgid "Read more about this in the Wikipedia Article ADSR Envelope" msgstr "" #. Tag: glossdef #: manual.docbook:2100 #, no-c-format msgid " " msgstr "" #. Tag: glossterm #: manual.docbook:2111 #, no-c-format msgid "Attack" msgstr "" #. Tag: para #: manual.docbook:2113 #, no-c-format msgid "This is the first phase of an ADSR envelope, and is the amount of time to turn the parameter up from 0 to full velocity after triggering the note." msgstr "" #. Tag: glossterm #: manual.docbook:2122 #, no-c-format msgid "Attenuation" msgstr "" #. Tag: para #: manual.docbook:2124 #, no-c-format msgid "In filters and mixers, this the amount that a signal is reduced (volume)." msgstr "" #. Tag: glossterm #: manual.docbook:2134 #, no-c-format msgid "Band-Pass Filter" msgstr "" #. Tag: para #: manual.docbook:2136 #, no-c-format msgid "A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter." msgstr "" #. Tag: glossdef #: manual.docbook:2138 #, no-c-format msgid " " msgstr "" #. Tag: glossterm #: manual.docbook:2149 #, no-c-format msgid "Clipping" msgstr "" #. Tag: para #: manual.docbook:2151 #, no-c-format msgid "A phenomenon that happens to a signal when the signal is too large for whatever is receiving it. The peaks of the signal (which are normally smooth curves) get cut off straight at the max volume (clipped). This distorts the sound and is usually undesirable." msgstr "" #. Tag: para #: manual.docbook:2156 #, no-c-format msgid "An example of clipping is when you play music louder than your speaker can handle. Parts of the music sound harsh and fuzzy." msgstr "" #. Tag: glossterm #: manual.docbook:2162 #, no-c-format msgid "Cutoff Frequency" msgstr "" #. Tag: para #: manual.docbook:2164 #, no-c-format msgid "On high-pass and low-pass filters, this is the frequency that divides between those that pass, and those that are attenuated (silenced). In a high-pass resonance filter, or a low-pass resonance filter, the cutoff is also the frequency zone that gets boosted." msgstr "" #. Tag: para #: manual.docbook:2169 #, no-c-format msgid "For example, if you have a low-pass filter and you set the cutoff frequency high (i.e. 20kHz)... the filter will not affect the sound. All the audible frequencies will pass through undisturbed. As you lower the cutoff frequency to something like 40 Hz (the low string on a bass guitar), it sounds like someone is putting a blanket over the speaker. The higher frequencies are being attenuated above 30 Hz." msgstr "" #. Tag: glossdef #: manual.docbook:2174 #, no-c-format msgid " " msgstr "" #. Tag: glossterm #: manual.docbook:2186 #, no-c-format msgid "Decay" msgstr "" #. Tag: para #: manual.docbook:2188 #, no-c-format msgid "After reaching full velocity from the attack, this is the amount of time to turn the parameter down from full velocity to the sustain level." msgstr "" #. Tag: glossterm #: manual.docbook:2199 #, no-c-format msgid "Envelope Generator" msgstr "" #. Tag: para #: manual.docbook:2201 #, no-c-format msgid "A way to control (change) a parameter over time as a response to triggering, holding, and releasing a note." msgstr "" #. Tag: para #: manual.docbook:2207 #, no-c-format msgid "Did your eyes just glaze over? Let's try again:" msgstr "" #. Tag: para #: manual.docbook:2209 #, no-c-format msgid "Imagine that you're playing a note on the keyboard and you have your other hand on a knob (volume, filter cutoff, etc.). As you play the note, you twist the knob (often up, then down... or down, then up). You do the same thing on each note. That's what an envelope generator does. See also ADSR" msgstr "" #. Tag: glossterm #: manual.docbook:2220 #, no-c-format msgid "Fader" msgstr "" #. Tag: para #: manual.docbook:2222 #, no-c-format msgid "A slider control used to adjust the attenuation (volume) in a mixer. Faders always have an \"audio\" taper, which means that the attenuation amount changes on an exponential scale." msgstr "" #. Tag: glossterm #: manual.docbook:2229 #, no-c-format msgid "Filter" msgstr "" #. Tag: para #: manual.docbook:2231 #, no-c-format msgid "A device that changes a sound by attenuating specific frequencies. A tone knob is an example of a simple, low-pass filter." msgstr "" #. Tag: glossdef #: manual.docbook:2232 #, no-c-format msgid " " msgstr "" #. Tag: glossterm #: manual.docbook:2244 #, no-c-format msgid "Gain" msgstr "" #. Tag: para #: manual.docbook:2246 #, no-c-format msgid "In an amplifier, this adjust how much (or how little) a signal is amplified (volume). A higher gain value is a louder signal." msgstr "" #. Tag: glossterm #: manual.docbook:2254 #, no-c-format msgid "High-Pass Filter" msgstr "" #. Tag: para #: manual.docbook:2256 #, no-c-format msgid "A filter that attenuates (silences) low frequencies, but allows high frequencies to pass through." msgstr "" #. Tag: glossdef #: manual.docbook:2257 manual.docbook:2302 #, no-c-format msgid " " msgstr "" #. Tag: glossterm #: manual.docbook:2267 #, no-c-format msgid "Instrument" msgstr "" #. Tag: para #: manual.docbook:2269 #, no-c-format msgid "In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, or a tom)." msgstr "" #. Tag: glossterm #: manual.docbook:2280 #, no-c-format msgid "Layer" msgstr "" #. Tag: para #: manual.docbook:2282 #, no-c-format msgid "In an instrument you can load several different samples (each one called a layer), and have a different sample play depending on the velocity of the note. Only one sample at a time will play." msgstr "" #. Tag: para #: manual.docbook:2287 #, no-c-format msgid "Suppose you have a sample of a floor tom being struck softly. If you simply play the sample louder — it will not sound the same as a real tom that has been struck very hard. If you wish to mimic this in your instrument, you can load one sample for soft playing, and a different sample for loud playing." msgstr "" #. Tag: glossterm #: manual.docbook:2299 #, no-c-format msgid "Low-Pass Filter" msgstr "" #. Tag: para #: manual.docbook:2301 #, no-c-format msgid "A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through." msgstr "" #. Tag: glossterm #: manual.docbook:2312 #, no-c-format msgid "Mute" msgstr "" #. Tag: para #: manual.docbook:2314 #, no-c-format msgid "To make no noise. A setting on an instrument that prevents any audio output." msgstr "" #. Tag: glossterm #: manual.docbook:2320 #, no-c-format msgid "Mute Group" msgstr "" #. Tag: para #: manual.docbook:2322 #, no-c-format msgid "A group of instruments (samples) that should mute (stop playing) immediately after another instrument in the group is triggered." msgstr "" #. Tag: para #: manual.docbook:2325 #, no-c-format msgid "This is typically used in hi-hats, where there's a different instrument (sample) for when the hi-hat is open or closed. With a real hi-hat, the sound of the open hi-hat will stop as soon as you close it. However, if you use two samples — the open sound will continue even after you have triggered the closed sound. By placing both instruments in the same mute group (group #1, for example)... triggering closed sound will immediately stop the open sound (and vice versa)." msgstr "" #. Tag: glossterm #: manual.docbook:2341 #, no-c-format msgid "Octave" msgstr "" #. Tag: para #: manual.docbook:2343 #, no-c-format msgid "A span of frequencies where the top-most frequency is exactly twice the frequency of the bottom frequency." msgstr "" #. Tag: para #: manual.docbook:2346 #, no-c-format msgid "For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they sound like the same distance." msgstr "" #. Tag: glossterm #: manual.docbook:2360 #, no-c-format msgid "Release" msgstr "" #. Tag: para #: manual.docbook:2362 #, no-c-format msgid "After the note is released, this is the amount of time to reduce the parameter from the sustain level to 0." msgstr "" #. Tag: glossterm #: manual.docbook:2371 #, no-c-format msgid "Resonance" msgstr "" #. Tag: para #: manual.docbook:2373 #, no-c-format msgid "When referring to a resonance filter, this is the parameter that determines how much of a boost (gain) to give the frequencies at the cutoff." msgstr "" #. Tag: glossterm #: manual.docbook:2382 #, no-c-format msgid "Resonance Filter" msgstr "" #. Tag: para #: manual.docbook:2384 #, no-c-format msgid "A filter that gives a large boost to a very narrow range of frequencies. Typically it will be part of a high-pass or a low-pass filter, where the boosted frequencies are centered on the cut-off frequency." msgstr "" #. Tag: glossdef #: manual.docbook:2387 #, no-c-format msgid " " msgstr "" #. Tag: glossterm #: manual.docbook:2396 #, no-c-format msgid "Roll-off" msgstr "" #. Tag: para #: manual.docbook:2398 #, no-c-format msgid "This is the amount that frequencies are attenuated (suppressed) as the frequency changes (typically measured in dB/octave)." msgstr "" #. Tag: para #: manual.docbook:2401 #, no-c-format msgid "For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency." msgstr "" #. Tag: glossdef #: manual.docbook:2408 #, no-c-format msgid " " msgstr "" #. Tag: glossterm #: manual.docbook:2418 #, no-c-format msgid "Sample" msgstr "" #. Tag: glossterm #: manual.docbook:2426 #, no-c-format msgid "Sustain" msgstr "" #. Tag: para #: manual.docbook:2428 #, no-c-format msgid "The level to hold the parameter after finishing the decay time. This level will be maintained until the not is released." msgstr "" #. Tag: glossterm #: manual.docbook:2442 #, no-c-format msgid "Velocity" msgstr "" #. Tag: para #: manual.docbook:2446 #, no-c-format msgid "MIDI devices are required to send this information along with the note. Synthesizers use this information to adjust several parameters on the sample (typically the volume). In Hydrogen, it is only used to adjust how loud the sample is played back." msgstr "" hydrogen-0.9.6-beta3/data/doc/manual_ca.html000066400000000000000000003205671211146647700206530ustar00rootroot00000000000000Manual d'Hydrogen

    Manual d'Hydrogen

    Piraino, Antonio

    Cominu, Alessandro

    van Severen, Thijs

    Moors, Sebastian

    Resum

    Hydrogen s un programari sintetitzador que pot ser utilitzat per si sol emulant una caixa de ritmes basada en patrons o mitjanant un teclat MIDI extern o un programa seqenciador. Hydrogen compila en Linux/x86 i Mac OS X, tot i que l'ltim est en fase de proves. Consulta a la llista de correu de l'equip de desenvolupament per ms detalls.


    Captol 1. Introducci

    1. Descrrega

    You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

    If you want to compile Hydrogen yourself (see Secci2), you can download the latest source files directly from our subversion server with:

    $ svn co http://svn.assembla.com/svn/hydrogen/trunk

    A certain release can be fetched with:

    $ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.5

    La compilaci d'Hydrogen depn de les segents llibreries:

    Si us plau, instala-les amb el gestor de paquets de la teva distribuci.Si ests utilitzant un sistema basat en debian, pots instalar les llibreries amb:

    $ apt-get install libqt4-dev g++ libasound2-dev \
            libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
            liblash-dev libportaudio-dev libportmidi-dev 
          

    2. Munta

    Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

    2.1. Using scons

    Descomprimeix el fitxer tar o ves al directori on la cpia de subversion va ser inicialitzada:

    $ cd hydrogen-*
              $ scons
              $ su -c "scons install"
            

    Abans de compilar verifica opcions adicionals amb:

    $ scons --help
            

    Si vols utilitzar opcions no habilitades per defecte (per exemple PortAudio), les pots habilitar amb:

    $ scons portaudio=1
            

    Igualment, si et trobes amb un error a l'utilitzar Hydrogen i vols donar-lo a conixer, recorda configurar hydrogen amb:

    $ scons debug=1
            

    Per netejar codi compilat:

    $ scons -c
            

    2.2. Using cmake

    Compiling with cmake can be done easily by using the make_helper script. Decompress the tarball or go to the directory where the subversion copy was checked out and run the make_helper script without any arguments to display the help :

    $ cd hydrogen-*
              $ ./make_helper
            

    The help is now displayed (and is self-explanatory) :

    $ used builder : cmake
              $ usage ./make_helper [cmds list]
              $ cmds may be
              $    r or rm     =
    > all built, temp and cache files
              $    c or clean  =
    > remove cache files
              $    m or make   =
    > launch the build process
              $    d or doc    =
    > build html documentation
              $    h or help   =
    > show the build options
              $    x or exec   =
    > execute hydrogen
            

    3. Preferences

    First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).

    3.1. The General tab

    On the "General" tab (Figura1.1) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

    If you want to use Lash to manage your Jack connections you should enable it here so Hydrogen allows interaction with Lash.

    The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see Secci3.1)

    The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching you need to enter the path where rubberband is installed on you system here.

    Figura 1.1. The General Tab

    The General Tab

    3.2. La pestanya del Sistema d'udio

    From the "Audio System" tab (Figura1.2) it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

    We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

    Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.

    Figura 1.2. La pestanya del sistema d'udio

    La pestanya del sistema d'udio

    Els controladors disponibles sn els segents:

    • jackd: El controlador Jack s un servidor d'udio professional que permet molt baixa latncia i es comunica amb altres programes d'udio. Recomanem ferventment usar aquest controlador per treure-li tot el suc a Hydrogen. El servidor JACK s'iniciar automticament si no est ja en s.

    • ALSA: El controlador d'udio ms exts en Linux

    • OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort.

    • PortAudio: an open-source multi platform audio driver

    • CoreAudio: un controlador per a Mac OS X (experimental)

    3.3. La pestanya del sistema Midi

    The "Midi System" tab (Figura1.3) contains all MIDI settings. Here you can choose the MIDI driver, input, and channel(s) that Hydrogen should respond to. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the 'binding' action line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action.

    Figura 1.3. La pestanya del sistema MIDI

    La pestanya del sistema MIDI

    3.4. La pestanya d'aparna

    The "Appearance" tab (Figura1.4) let's you modify Hydrogen look and feel (font settings and interface style). Also the VU meters fall-off speed of the Mixer Window can be changed here.

    Figura 1.4. La Pestanya d'Aparena

    La Pestanya d'Aparena

    3.5. The Audio Engine tab (debug only)

    The "Audio Engine" tab (Figura1.5) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

    Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.

    Figura 1.5. La Pestanya del Motor d'udio

    La Pestanya del Motor d'udio

    Captol 2. Usant Hydrogen

    1. Tipus de fitxers utilitzats

    Abans de treballar amb Hydrogen, si us plau, familiaritza't amb els segents tipus de fitxers:

    • *.h2pattern: Fitxer XML que descriu un patr. Els patrons sn un grup de polsacions gestionats per l'etidor de patrons.

    • *.h2song: Fitxer XML que descriu una can (o seqencia). Les canons sn grups de patrons amb les seves propietats, i sn gestionats amb l'editor de canons

    • *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs.

    • *.h2drumkit: es tracta d'una carpeta comprimida que cont totes les mostres de s que composen un kit de bateria i un fitxer XML de descripci. Els kits de bateria sn bsicament un grup de mostres de s.

    2. Men principal

    Projectes: aquest men ofereix funcions relacionades amb els fitxers.

    • Nou - Crear una nova can

    • Mostrar informaci - Configurar les propietats generals de la can com ara nom, autor, llicncia i altres notes

    • Obre - Obre una can

    • Obre Demo - Obrir una can de demostraci (les canons de demostraci es troben a INSTALLPATH/share/hydrogen/data/demo_songs)

    • Obre Recent - Obre un men que mostra les canons utilizades recentment

    • Desa - Desa les modificacions fetes a la can actual

    • Desa com a - Desa la can actual especificant-li un nom (directori per defecte: $HOME/.hydrogen/data/songs))

    • Obrir patr - Obre un patr desat que pertany al kit de bateria actual

    • Exportar patr com a - Desa el patr, ser desat a $HOME/.hydrogen/data/patterns/drumkit_name

    • Exportar fitxer MIDI - Exporta la can actual en format MIDI

    • Exportar can - Exporta la can actual en format WAV

    • Sortir - Sortir d'Hydrogen

    Instruments: aquest men cont funcions d'instruments i kit de bateria (llibreries de s).

    • Afegir instrument - Afegeix un nou instrument al kit de bateria actualment actiu

    • Neteja-ho tot - Elimina tots els instruments del kit de bateria actual

    • Desar llibreria - Desa tots els instruments, les seves configuracions i mostres de s a $HOME/.hydrogen/data/library_name

    • Exportar llibreria - Comprimir totes les mostres dels instruments i configuracions en un kit de bateria a $HOME/.hydrogen/data/library_name

    • Importar llibreria - Importa un kit de bateria del sistema d'arxius local o el descarrega d'un lloc remot mitjanant alimentaci XML (XML feed). El fitxer XML provet NO compleix els stndards RSS (veure la pgina web d'Hydrogen per a un exemple). Per a carregar un kit de bateria en la sessi de treball actual d'Hydrogen, llegeix Secci7.

    Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window.

    • Editor de llistes de reproducci - Una eina per a gestionar llistes de reproducci.

    • Director - Open the director window.

    • Mesclador - Obre la finestra del mesclador.

    • Banc d'Instruments - Obre el panell del banc d'instruments.

    • Preferncies Obre la finestra principal de preferncies. Llegeix Secci3 per ms informaci sobre la configuraci d'Hydrogen.

    Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !).

    • Mostrar informaci del motor d'udio - Obre un monitor amb vries estadstiques

    • acci de depuraci - Inserta una instrucci per a la depuraci.

    • Imprimir Objectes - Imprimir a stdout (sortida per defecte) l'actual mapa d'objectes.

    Informaci

    • Manual d'usuari- Obre una finestra amb aquest manual

    • About - The usual window with license information, acknowledgements, etc.

    3. La barra d'eines principal

    Abans d'analitzar les dues rees principals d'Hydrogen, fem primer una ullada rpida a la barra d'eines principal i als seus components:

    • Pilota la can utilitzant els botons d'inici, aturar, pausa, etc.

    • Escull entre mode "patr" o "can": En mode "patr" noms se sentir el patr seleccionat, mentre que en el mode "can" se sentirn tots els patrons utilitzats.

    • Una funci avanada de toc al tempo: escollir la llargada de la nota i quantes notes han de passar abans de recalcules les PPM, aleshores clica la tecla coma fins que la lletra 'R' aparegui i les PPM siguin actualitzades (veure Secci3.1)

    • Configurar manualment les PPM

    • Administrar el transport JACK

    • Obrir els panells del mesclador i del panell d'instruments

    Figura 2.1. La Barra d'ines Principal

    La Barra d'ines Principal

    • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

    • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see Secci4). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see Secci5).

    • Set measure type and Beat Counter (see Secci3.1).

    • Estableix velocitat de reproducci (rang: 30-400 PPM) [Hotkey = mouse wheel] i bot per habilitar/deshabilitar el metrnom

    • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

    • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected.

    3.1. Polsar Tempo i ComptadorDePolsacions

    s possible cambiar el tempo en cualsevol moment utilitzant la funcionalitat polsar-tempo i ComptadorDePolsacions d'Hydrogen. Els pots canviar mentre la can s'est reprodunt o mentre est aturada. Per cambiar el tempo, polsa la tecla , (coma) per a seleccionar el nombre de polsacions en la mesura. Desprs que hagi passat el nombre de polsacions correcte, el tempo canviar cap a la mitjana del que hagis polsat. Si continues polsant, aquestes noves polsacions es convertirn en una part de la mitjana. Si polses per accident, o esperes massa temps entre polsacions, el comptador de tempo per polsacions tornar a comenar.

    Polsar Tempo s una part del ComptadorDePolsacions, que s essencialment un polsar tempo tunejat. Per defecte el ComptadorDePolsacions no eś visible. Per veure el ComptadorDePolsacions clica el bot de dalt a la dreta (BC) entre el selector de mode Can/Patr i el selector de PPM. Tamb pot veure's quan es pressiona la tecla coma (,).

    El tempo que pressionis ser considerat polsacions parelles del tipus de polsaci. El tipus de polsaci pot ser configurat a 1/8 (per ritmes d'un vuit de nota), 1/4 (per ritmes d'un quart de nota), 1/2 (per ritmes de mitja nota) i 1/1 (per ritmes d'una nota sencera). Per cambiar el tipus de ritme utilitza la tecla fletxa esquerra. Per cambiar el nombre de polsacions comptades, utilitza la tecla fletxa dreta. Pots configurar de 2 a 16 polsacions (P.e., si configures les polsacions a 6, haurs de polsar 6 vegades abans que el nou tempo estigui computat i s'assigni.) Mentre es mostri una R per pantalla el ComptadorDePatrons est apunt per comenar de 0. Cada vegada que pressiones amb la tecla coma, mostrar el nombre de polsacions que has entrat (1, 2, 3...).

    El bot del fons a ma dreta controla la funcionalitat comenar-automticament, i s'activa entre S i P. P significa (Reprodur), en aquest estat la can assignar el tempo automticament i es comenar a reprodur quan hagis entrat la quantitat correcta de polsacions (si no s'est ja reprodunt, clar). D'aquesta manera, si tens el ComptadorDePatrons configurat a 4/4, pots polsar 1-2-3-4, i comenar en la prxima polsaci. Quan es mostra S (per Configura PPM), l'auto inici est deshabilitat.

    Per exemple: suposem que ests en un grup, Hydrogen, i tens un sintetitzador software controlat per Seq24)... i vols que tot comenci alhora. Configura el tipus de ritme a 1/4 i el nombre de polsacions a 4. Habilita l'auto-inici (mostrant P). Compta al grup 1-2-3-4 (mentre li vas donant a la coma) — i tothom comena a l'1.

    Un altre exemple: En la mateixa situaci, per la can no requereix d'Hydrogen o sintetitzadors fins a una estona desprs. Mentrestant, un hum (p.e. el guitarrista) anir configurant el tempo. En la mesura anterior en la que hydrogen se suposa que ha de comenar, polsa la coma 1-2-3-4 amb el ritme... i ja ho tens a la prxima polsaci (amb el tempo correcte).

    Si ests utilitzant el transport JACK, el ComptadorDePolsacions continua funcionant. Si algun altre programa s el Mestre del Transport JACK, Hydrogen respondr als events de canvi de tempo des d'aquella aplicaci. Fixa't que en aquesta situaci, Hydrogen se suposa que ha de ser un esclau, pel que la funcionalitat del ComptadorDePatrons sern desactivades o no funcionarn correctament. Si Hydrogen s el mestre del transport JACK, els canvis a Hydrogen es veurn reflectits en altres programes (si ho soporten).

    Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see Secci3.1 ). Here you will finde two spinboxes:

    • Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program.

    • Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated).

    Fixa't que aquests valors poden estar configurats a positiu (+) o negatiu (-). Per tal de trobar valors tils per a aquests, necessitars jugar-hi un temps. Ams, pots voler utilitzar valors diferents depenent de la velocitat del teu maquinari, dispositius d'udio, controladors, etc. Utilitzar el ComptadorDePolsacions b necessita prctica.

    4. Editor de Canons

    The "Song Editor" (Figura2.2) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel is a complete bar as shown in the underlying "Pattern Editor" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns.

    L'editor de Canons t 7 botons:

    • Esborrar completament tots els patrons (demana confirmaci!).

    • Crear un nou patr (i demana pel seu nom).

    • Moure el patr seleccionat amunt o avall.

    • Habilitar seleccionar patrons per copiar i enganxar (Mode selecci).

    • Habilitar Mode Dibuix.

    • Cambiar del mode "Noms un patr" al mode "Pila de patrons" i enrere...

    Sota aquests botons hi ha una llista de patrons creats i quan ells son premuts (cada requadre == 1 barra). Clica en un requadre per afegir o cancelar un patr. Clicar el bot dret del ratol sobre el nom del patr treu un menu per canviar el nom del patr o permetre copiar-lo/esborrar-lo. No s perms tenir varis patrons amb el mateix nom.

    Figura 2.2. L'Editor de Canons

    L'Editor de Canons

    5. L'Editor de Patrons

    The "Pattern Editor" lets us create or modify the pattern (bar) which is currently selected. You can add/remove notes, and tune a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)

    First let's take a look at the (classic) 'Drum' mode :

    Figura 2.3. Pattern Editor in Drum mode

    Pattern Editor in Drum mode


    5.1. Pattern Editor Controls

    The top part of the pattern editor contains a number of controls :

    Figura 2.4. Pattern Editor Controls

    Pattern Editor Controls

    From left to right :

    • SIZE : lets you choose the size of the pattern (the number of bars)

    • RES : this is the current grid resolution (4 through 64)

      Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer.

    • HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern.

    • QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied.

    • Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your sound library as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

    • Note Length / Note off : these are 2 different ways to define the duration of a note. See Secci5.3 for usage.

    • Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)

    5.2. Pattern Editor Drumkit

    The section on the left shows you what drumkit/library is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

    Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select

    • Clear notes : to remove all notes for this instrument in this pattern.

    • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

    • Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played.

    • Delete Instrument : well, deletes the instrument ;-)

    The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons.

    The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit/library. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys.

    Important Notes :

    The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default.

    Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

    Here's a quick reference of the above bindings for your convenience.

    5.3. Pattern Editor Sequence area

    This is where it all happens, this is where you can make music :-)

    In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

    If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note.

    (Figure above, from left >right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

    So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see Secci2) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see Captol3 for a basic walk-through of how the pattern editor works)

    5.4. Pattern Editor Note Properties

    Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :

    • Velocity : how hard the note is played (the volume of the note)

      Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping.

    • Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)

    • Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)

    • Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'

      The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

    5.5. Pattern Editor Piano mode

    Drum mode (see Figura2.3) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

    You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.

    Figura 2.5. Pattern Editor in Piano mode

    Pattern Editor in Piano mode

    6. Mesclador

    Figura 2.6. El Mesclador

    El Mesclador

    L'rea del mesclador (Figura2.6) s til per afinar el volum global o de cada una de les mostres de l'actual kit de bateria. Mostra el pic actual (clic a per deshabilitar, til per a velles CPU) i et permet habilitar el valor mxim de pic perms (afina-ho amb el bot atenuador de l'instrument), et permet modificar atributs com ara balan, tocar en solitari , silenciar o provar tocar noms aquest instrument ; seleccionant a l'Editor de Patrons un instrument t l'efecte que un LED blau s'encen (aprop del bot d'inici de reproducci). Aprop del bot de volum global, pots habilitar 3 efectes globals com ara swing (canvia unes poques notes enrere o endavant, per no aleatriament), temps (modificar el temps de les notes) i efecte humanitador (edici de la velocitat aleatria).

    Ams s possible configurar 4 efectes LADSPA per a cada instrument activant el bot. Veure la prxima secci per a ms detall.

    7. Llibreria de S (Gestor del Kit de Bateria)

    La llibreria de s t'estalvia temps per gestionar els teus kits de bateria, patrons preferits, i canons preferides. Quan crees canons noves i kits de bateria, la Llibreria de S et facilita reutilitzar i mesclar instruments i patrons des d'altres kits i canons.

    7.1. Kits de Bateria del Sistema

    Aix llista els kits de bateria que estn instalats en el teu administrador de sistema. Est determinat per un prefix en temps de compilaci. En sistemes operatius tipus-unix aix s normalment /usr/share/hydrogen/data/drumkits, o possiblement /usr/local/share/hydrogen/data/drumkits. Aquests kits estn disponibles per tots els usuaris del sistema, i els usuaris normalment no poden afegir-n'hi.

    Per a carregar un kit de bateria des d'aqui, clica amb el bot dret al kit de bateria i selecciona Carregar. Aix canviar el kit de bateria actual amb el que hagis seleccionat. Per carregar un sol instrument del kit, clica amb el bot esquerre mes cap a l'esquerra del nom del kit de bateria per mostrar tots els instruments. Amb el bot esquerre del ratol, clica i arrossega l'instrument al kit actual. L'instrument ser afegit al kit de bateria que hagis carregat.

    7.2. Kits de Bateria d'Usuari

    Aquests sn els kits de bateria que tu mateix pots gestionar. Normalment es guarden a $HOME/.hydrogen/data/drumkits. Quan crees un nou kit de bateria, pots desar-lo aqui seleccionant InstrumentsDesar Llibreria.

    Els kits de bateria es carreguen de la mateixa manera que els kits de bateria del sistema (veure Secci7.1).

    7.3. Patrons en la Llibreria de S

    Assegura't d'etitar les propietats clicant amb el bot dret i seleccionant Propietats abans de desar els teus patrons preferits a la llibreria de s. Aqu li potd donar ttol i categoria al patr. Pots utilitzar alguna de les categories predeterminades o crear-ne una de nova simplement escrivint el seu nom. El nom de la categoria s important, ja que els patrons es desen per categoria a la Llibreria de S.

    Pots desar els teus patrons preferits a la llibreria de s clicant amb el bot dret al ttol del patr dins de l'editor de canons, i seleccionant Desar Patr. Apareixer a la Llibreria de S sota Patrons i la categoria que l'hi hagis assignat.

    7.4. Canons en la Llibreria de S

    Per desar les canons a la Llibreria de S, posa-les al directori de dades sotta la carpeta canons (normalment $HOME/data/songs). Per esborrar-les, esborra el fitxer del directori.

    8. Kits de Bateria i Editant Instruents

    Els kits de bateria en Hydrogen es creen amb l'Editor d'Instruments. Amb l'editor d'instruments pots carregar mostres, configurar parmetres d'contorn, configurar el guany i uns quants parmetres ms avanats com ara enmudir grups, filtre de ressonncia passa-baixos, aleatoritzaci del t.

    En comptes de crear el teu propi kit de bateria, pots utilitzar o descarregar kits de bateria ja existents utilitzant el Secci7.

    8.1. Conceptes

    El sintetitzador d'Hydrogen est basat en mostres. Una mostra s un fragment pre-enregistrat de s (normalment entre .1 segons i 3 segons). Per fer una nota, la mostra simplement es torna a tocar en el moment precs. Hi ha uns quants conceptes i termes que hauries d'entendre quan ests creant un kit de bateria. (Veure Glossari per ms detalls.)

    Termes de Mostreig del Sintetitzador

    Sample

    Una grabaci curta d'un s, normalment entre .1 i 3.0 segons de duraci.

    Gain

    Ajust de volum.

    Velocity

    La fora amb la que toques la nota.

    Generador d'contorns ADSR

    Un generador d'contorns per Atac/Decay/Sustain/Release. Una vegada disparada una nota, l'Hydrogen l'ataca incrementant el volum des de 0 fins a la "velocitat" de la nota. Una vegada assolida la velocitat maxima, Decau redunt el volum fins que arriva al nivell de sustain. Una vegada la nota s released, l'Hydrogen reduix el volum des del nivell de sustain fins a 0.

    Attack

    La quantitat de temps per anar de 0 a velocitat mxima.

    Decay

    La quantitat de temps per passar de velocitat mxima a volum de sustain.

    Sustain

    El nivell (com d'alt) que aguanta el volum de la nota entre el sustain i el release. s un tant per cent de la velocitat. No depn del temps.

    Release

    La quantitat de remps per passar del volum de sustain a 0

    Les tpiques mostres que utilitza Hydrogen son: el s d'un tambor de la bateria, el s d'un plat, el s d'una esquella. Quan poses una nota en el patr (o toques una nota utilitzant MIDI), Hydrogen reprodueix qualsevol s que hi hagi carregat. Per tant, per ajuntar un kit de bateria necessites recopilar grabacions curtes del bombo, cada tambor, cada plat, el charles obert i tancat, la caixa (oberta o tancada), tocs al canto de la caixa, etc.

    De totes maneres, no hi ha regles en quant a qu pot ser una mostra. No es extrany utilitzar Hydrogen per disparar sons que no son de bateria: clips d'ucio de gent xerrant, un tros d'una can, efectes de s, clips d'udio de pelicul.les, gent famosa parlant... Siques creatiu!

    8.2. Creant un nou Kit de Bateria

    To start a brand new drum kit, select InstrumentsClear All . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select Delete Instrument. To add more instruments, select InstrumentsAdd instrument .

    Selecciona un instrument per comenar a editar-lo. Aix es fa clicant amb el bot esquerre al nom de l'instrument a la llista d'instruments (a l'esquerra). T'adonars que el nom de l'instrument a l'Editor d'Instruments s igual al que has clicat.

    After you have your drum kit working the way you want, select InstrumentsSave library . It will ask you for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace.

    Els Kits de Bateria es guarden automticament al directodi de dades (p.e. $HOME/data/drumkits).

    To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select InstrumentsExport library from the menu. Select the drum kit that you wish to export, and give it a file name to save it to.

    8.3. Creant Instruments i Capes

    Pots carregar vries mostres i configurar diferents parmetres de sintetitzador per a cada instrument d'un kit de bateria. Aquesta secci et guiar en com crear un nou instrument i carregar les mostres.

    To begin creating an instrument, select InstrumentsAdd instrument. This will give you a blank instrument to start from.

    Ara necessites dues mostres. Qualsevol fitxer .WAV o .FLAC servir. Hydrogen en proporviona vries al directori data/drumkits.

    A l'editor d'instruments, clica a Capes. Pots posar vries mostres com a capes per a l'instrument. Quina s tocada depn de la velocitat de la nota entrant. Clica Carregar Capa i apunta al Navegador de Fitxers d'udio per a carregar la teva mostra. Fixa't que el Navegador de Fitxers d'udio et permetr pre-escoltar la mostra abans de carregar-la. Tamb et permet carregar ms d'una mostra a cada moment. Per de moment noms en carregarem una.

    Una vegada carregada la mostra, veurs que ara hi ha un 1 a dalt, i que el rectangle s'ha tornat blau cel. Per carregar una segona mostra, clica la posici just a sota, llavors clica Carregar Capa per posar-hi una nova mostra.

    Desprs de portar en ambdues mostres, segurament t'adonars que noms la primera mostra es toca quan dispares l'instrument. Aix s per que has de configurar els rangs de velocitat en les capes. Mou el ratol per les bandes dels rectangles blau cel i veurs que tens un cursor per a arrossegar d'esquerra a dreta. Ara arrossega la mostra cap a l'esquerra o la dreta (com una cortina). Veurs la segona capa aparixer.

    La configuraci de velocitat per a una capa de velocitat 0 s a l'esquerra, i velocitat mxima a la dreta. Configura la capa 1 per sonar per les notes fluixes, i la capa 2 per les notes fortes (p.e. capa 1 a l'esquerra i la capa 2 a la dreta.)

    Ara, a l'rea de patrons, configura un patr simple que tocar aquest instrument. Ajusta els parmetres de velocitat a cada nota per conseguir que les diferents mostres sonin. Ara configura el patr per repetir-se i fixa't com les mostres es van disparant. (Per apendre com editar un patr, mira Secci5)

    Per cada capa, pots configurar el Guany i el T. El t tamb t un bot d'ajustament F.

    Ajusta el Guany per controlar el volum de reproducci de la mostra. s necessari ja que s extremament dificil conseguir un conjunt de mostres que sonin exactament al mateix volum. Ajustant-ho aqui, les mostres que s'han enregistrat massa fluixes es poden amplificar per a que sonin igual que les mostres ms altes (que segurament s'han hagut d'atenuar).

    Avs

    s molt fcil posar el Guany massa alt, provocant que la mostra es saturi. Recorda provar el guany a velocitat mxima. Si satures la senyal aqui, ser pitjor quan Hydrogen ho processi.

    El t de la mostra pot ser modificat amb els controls de t. El controlador de T ajusta el t en migs tons misicals. (Per tant, -12 s una octava). El t a la dreta ajusta el t 50 Centssimes. (Mig t sn 100 centssimes)

    Nota

    El t s'ajusta tocant la mostra ms rpidament o ms lentament. s l'anomenat Efecte Doppler. Per tant, si tens una mostra d'un segon i tires cap a -12 (1 octava), la teva mostra noms durar mig segon.

    8.4. Parmetres d'Instruments

    A l'editor d'instruments, clica al bot General. Aqui pots ajustar varis partmetres per a tot l'instrument (no per a cada capa per separat). Els parmetres que aqui pots ajustar son:

    • Parmetres d'contorn: Atac, Decay, Sustain, Release. (See Generador de Contorns)

    • Guany: El volum general de l'instrument.

    • Enmudir Grup: Treu el volum del grup del que aquest instrument s membre (veure Enmudir Grup).

    • Parmetres de filtre: Bypass, Cutoff, Ressonncia.

    • T Aleatori

    s important que entenguies els Secci8.1 per tal de continuar.

    8.4.1. Parmetres d'Envolupant

    Quan l'instrument s disparat, el seu volum passa per un contorn ADSR. Els seus parmetres sn els segents:

    • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. [1]

    • Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter.[1]

    • Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity.

    • Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available.[1]

    Si la mostra s ms curta que els temps especificats, la mostra acabar, sigui quina sigui la fase de l'ADSR en que es trobi. Si la nota est en sustain, no dibuixa la nota mentre l'ests aguantant. Noms aguanta el parmetre guany (volum) durant aquest temps.

    8.4.2. Guany i Enmudir Grup

    El guany configura el volum general de la mostra. Aquest guany s aplicat desprs del guany aplicat a nivell de capa, i abans del guany seleccionat per al mesclador. Si el Guany s 0, l'instrument no se sentir. Si el guany s 1.0, el volum de les mostres no ser ajustat (p.e. 0 dB). Si el guany s major, les mostres sern amplificades.

    Avs

    s molt fcil posar el Guany massa alt, provocant que la mostra es saturi. Recorda provar el guany a velocitat mxima. Si satures la senyal aqui, ser pitjor quan Hydrogen ho processi.

    Hydrogen proporciona ms grups per a enmudir dels que sabrs qu fer-hi (cap a 256). Un grup per enmudir s una agrupaci d'instruments que sn mutualment exclusius — noms un instrument pot estar-se tocant en un determinat moment. Si un s'est tocant i un altre instrument d'aquest grup s disparat, ser inmediatament silenciat (mut) i comenar a tocar-se l'altre instrument. s til, sobretot per a instruments com ara el charles en els que el s obert i el s tancat sn instruments diferents.

    Si el grup d'enmudiment est Desactivat, l'instrument no s una part de cap grup d'enmudiment. Si el grup d'enmudiment est activat a qualsevol nombre, aleshores aquest s el grup al que l'instrument est assignat. Per posar altres instruments en el mateix sac, selecciona que el seu grup d'enmudiment tingui el mateix nombre. (Per exemple, per agrupar tots els charles, pots posar-los el seu grup d'enmudiment a 1. Per tenir la caixa dins d'un altre grup, posa el seu grup a 2.)

    8.4.3. Filtre i T Aleatori

    El filtre s un filtre passa-baixos ressonant. Si no vols fer-lo servir, clica BYPass per a que es posi el bot vermell. Si no est vermell, el filtre est actiu. El parmetre cutoff ajusta la freqncia de tall pel filtre. El parmetre de ressonncia ajusta com ressonar la freqncia de tall. Si la ressonncia est a 0, el filtre s un simple passa-baixos.

    Nota

    La freqncia de tall del filtre varia amb la freqncia de mostreig de la teva tarja de s. El rang del bot (de 0 a 1.0) est optimitzat per a una freqncia de mostreig de 48.000 kHz.

    The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound more like a real drummer.

    8.5. Consells a l'Editar Instruments

    Amb tots els parmetres que hi ha per configurar, pot ser dificil trobar quelcom que soni b. Aqu tens uns consells per configurar un instrument:

    Baixa el guany. Cada cop que tens un selector de guany (p.e. un amplificador), d'aix se'n diu una etapa de guany. Amb cada etapa de guany s fcil saturar la senyal — el que significa que la senyal es distorsiona per retall. Ams, si tens dues mostres que, per elles mateixes, claven els teus indicadors — et pots imaginar que passar quan les combinis? Efectivament, saturars el guany de la senyal.

    Si les coses sonen malament i distorsionades, comena baixant el guany a la capa... especialment si s major a 1.0. Llavors passa a baixar el guany de l'instrument, Llavors qualsevol guany en els efectes LADSPA. Llavors a l'atenuador del mesclador. Llavors a l'atenuador del volum de sortida principal.

    Prova les mostres a velocitat mxima. La teva mostra ser tocada ms fort si la velocitat s ms alta. Per tant, si ho configures tot per a que soni b a velocitat mxima 0.7, qu passar quan tinguis una velocitat mxima d'1.0? (Pista: retall...)

    Intenta utilitzar mostres de com a mxim -6 dB Visualment, aix vol dir que les mostres arribarn com a mxim a mitja escala. D'una altra manera, canvia el guany de la capa aproximadament a .5.

    Treu qualsevol compensaci de DC de la mostra. En un edotor de mostres, normalment hi ha una linea cap al mig de l'ona de la mostra. Aquesta s la lnea de zero. El comenament de la teva mostra hauria de ser en aquest lnea. El final de la teva mostra tamb hauria d'estar en aquesta lnea. De totes manesre, si la teva senyal est una mica pe sota o per sobre de la linea, sentirs un clic al comenament i al final de qualsevol mostra tocada. Si el teu editor de mostres no t cap eina per a arreglar un problema de compensaci de DC, pots eliminar el soroll posant un lleugera atenuaci a l'inici i final de la mostra.

    L'ADSR no ha de ser ms llarg que la teva mostra. Si tens una mostra curta, no importa quant posis a l'atac i decay — la mostra acabar igual.

    Les coses canvien amb la freqncia de mostreig. Si tens un setup ben posat amb tots els teus parmetres ben configurats... les coses cambiarn si canvies la freqncia de mostreig de la tarja de s. Alguns dels parmetre interns de l'Hydrogen estan fets i basats en quantes mostres tens, i no quants segons passen. Les coses que poden canviar son: qualsevol cosa basada en el temps (com ara atac i release) i qualsevol cosa basada en la freqncia (com ara la freqncia de tall).

    9. Plugins LADSPA

    Hydrogen tamb afecta als sons fent servir qualsevol plugin LADSPA. Has de tenir instalades les fonts de LADSPA (disponibles a http://www.ladspa.org) i mentre aix et donar una idea genrica de com funciona, hauries de provar el tema instalant algun plugin, s tan fcil com scons && scons install. Aqui hi ha alguns llocs d'on descarregar plugins:

    Matar Plugins

    A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others.

    Un cop hagis instalat uns quants plugins, obre una can'a la que t'agradaria afegir-li un efecte i selecciona un instrument que estigui en algun par. Clica a en el mesclador, selecciona una de les quatre linies d'efectes i clicaal bot Editar ( ), a Seleccionar l'efecte: aix obrir una nova finestra (Figura2.7) que permet escollir un efecte entre els instalats, estan ordenats alfabticament i categoritzats. Una vegada fet, ajusta el nivell del mesclador i dona-li a tocar. Cada selector de la part de l'efecte controla el nivell pel seu efecte. Si vols habilitar/deshabilitar rpidament, clica a Bypass ( ).

    Figura 2.7. Selecciona un Efecte

    Selecciona un Efecte



    [1] Els parmetres d'atac, decay i release es configuren tots a partir del nombre de mostres d'udio. Aix significa que el temps canvia segons la freqncia de mostreig de la teva tarja de s. El mxim de temps s 100.000 mostres d'ucio (tpicament, 2,27 segons a 44.1 kHz).

    Captol 3. Una nova can

    1. Mode "Can" i mode "Patr"

    Aix s una passada rpida per Hydrogen. Mira't el tutorial per a ms detalls.

    Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to Secci3 for the buttons to activate). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern untill it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns, to create the structure of the song.

    2. Un nou patr

    We'll start from an empty song with an empty pattern, as created by default: "pattern" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor (Figura3.1) simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!

    Figura 3.1. L'Editor de Patrons

    L'Editor de Patrons

    3. Una nova seqncia

    Una vegada creats els patrons (Figura3.2), es poden copiar/enganxar/esborrar arrossegant-les amb el ratol (ha d'estar seleccionat el mode de selecci en l'Editor de Canons i tenir apretat el bot dret del ratol per a seleccionar la zona que vols moure o copiar).

    Figura 3.2. Afegir Notes a un Patr

    Afegir Notes a un Patr

    4. Ajustar al mesclador

    Per descomptat sempre es pot utililtzar la finestra del mesclador, tant mentre estem creant els patrons com quan s'estan reprodunt.

    The Mixer frame (Figura3.3) is made of 32 independent tracks, each of these is binded to an instrument, plus a "Master Output" line to adjust general output volume and a "FX" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in Figura3.3 you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter.

    Figura 3.3. El Mesclador

    El Mesclador

    Captol 4. Shortcut lists

    • [CTRL + N] = New Project

    • [CTRL + O] = Obrir fitxer

    • [CTRL + D] = Open Demo

    • [CTRL + S] = Desar fitxer

    • [CTRL + SHIFT + S] = Save File as

    • [CTRL + P] = Export Pattern as

    • [CTRL + M] = Export MIDI file

    • [CTRL + E] = Export Song

    • [CTRL + Q] = Quit Hydrogen

    • [ALT + B] = Show Director window

    • [ALT + M] = Show Mixer window

    • [ALT + I] = Show Instrument rack

    • [ALT + P] = Show Preferences window

    • [CTRL + ?] = Show manual

    • [Backspace] = Reinicia can o patr des de l'inici

    • [spacebar] = Play / Pause

    • [,] (comma key) = Tap tempo (beatcounter)

    Glossari

    Aquest s un glossari dels termes generals ms utilitzats en Hydrogen, sintetitzadors, bateries o samplers. Les definicions en aquest text estn simplificades, per les definicions d'aqui sn mes generals i tenen ms explicacions. Per exemple, el text del manual et pot donar la idea que ADSR s l'unic tipus de generador d'contorns, i que noms pot controlar el volum. Aix s simple i convenient per als nous usuaris, per no s ben ben correcte.

    ADSR

    Un tipus de generador d'contorns que et permet controlar l'Arac, Decay, Sustain, i Release. Generalment, els parmetres sn propircionals a la velocitat.

    A Hydrogen, el generador d'contorns ADSR noms control el volum (atenuaci).

    Llegeix ms sobre el tema a l'article de la Wikipedia ADSR Envelope

    Veure tamb Generador de Contorns, Attack, Decay, Sustain, Release.

    Attack

    Aquesta s la primera fase d'un contorn ADSR, i s la quantitat de temps per actirav el parmetre des de 0 a velocitat mxima un cop disparada la nota.

    Veure tamb ADSR.

    Atenuaci

    En filtres i mescladors, la quantitat en que s reduda una senyal (volum).

    Veure tamb Roll-off.

    Filtre passa-bandes

    A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter.

    Veure tamb Filtre, Filtre Passa Alts, Filtre Passa Baixos.

    Retall

    Un fenmen que li passa a una senyal quan aquesta s massa gran per al receptor. El pic de la senyal (que normalment es una corva suau) s tallat al volum mxim (tall). Aix distorsiona el s i acostuma a ser indesitjable.

    Un exemple de retall s quan toques msica ms alt del que el teu altaveu pot suportar. Parts de la msica sonen distorsionats.

    Freqncia de tall

    Als filtres passa-alts i passa-baixos, s la freqncia que divideix les freqncies que passen i les que son atenuades (silenciades). En un filtre ressonant passa alts, o en un filtre passa-baixos ressonant, la freqncia de tall s tamb la zona de freqncia que s amplificada.

    Per exemple, si tens un filtre passa-baixos i configures la freqncia de tall alta (p.e. 20kHz)... el filtre no afectar al s. Totes les freqncies audibles passarn sense modificaci. Si baixes la freqncia de tall cap a 40 Hz (la corda gruixuda d'un baix), sona com alg tapant un altaveu. Les freqncies ms altes atenuades estn per sobre 30 Hz.

    Veure tamb Filtre, Filtre Passa Alts, Filtre Passa Baixos, Filtre de ressonncia.

    Decay

    Un cop assolida la velocitat mxima de l'atac, s la quantitat de temps per baixar de nivell de mxima velocitat a nivell de sustain.

    Veure tamb ADSR.

    Generador de Contorns

    Una manera de controlar (canviar) el parmetre durant el temps com a resposta a disparar, i aguantar una nota.

    Se t'han muntat els ulls? Tornem-ho a provar:

    Imagina't que ests tocant una nota amb un teclat i tens l'altra m a un bot (volum, freq. de tall del filtre, etc.). Mentre toques la nota, mous el bot (a vegades amunt, a vegades avall... o avall, llavors amunt). Fas el mateix en cada nota. Aix s el que un generador de contorns. Mira tamb ADSR

    Atenuador

    Un control per a ajustar la atenuaci (volum) en un mesclador. Els atenuadors sempre tenen reductor d'"audio", el que vol dir que la quantitat en l'atenuaci canvia en una escala exponencial.

    Filtre

    Un dispositiu que canvia el s atenuant certes freqncies. Un bot de t s un exemple d'un filtre passa baixos.

    Veure tamb Filtre passa-bandes, Filtre Passa Alts, Filtre Passa Baixos, Filtre de ressonncia.

    Gain

    En un amplificador, ajusta quant (o quan poc) una senyal s amplificada (volum). Un guany ms alt dna una senyal ms alta.

    Filtre Passa Alts

    Un filtre que atenua (silencia) les freqncies baixes, i deixa passar les freqncies altes.

    Veure tamb Filtre, Freqncia de tall.

    Instrument

    A Hydrogen un instrument s un generador de s (com un bombo o un tambor).

    Capa

    En un instrument pots carregar vries mostres (cada una anomenada capa), i tenir una mostra diferent depenent de la velocitat de la nota. Noms una mostra es tocar a la vegada.

    Suposem que tens una mostra d'un tambor tocat fluix. Si simplement toques la mostra ms fort —no sonar igual que si el tambor s'ha tocat ben fort. Si vols que aix sigui igual al teu instrument, pots carregar una mostra per notes fluixes i una mostra diferent per a tocar fort.

    Veure tamb Instrument.

    Filtre Passa Baixos

    A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through.

    Veure tamb Filtre, Freqncia de tall.

    Enmudir

    Per fer un soroll. Una configuraci en un instrument que no deixa que hi hagi sortida d'udio.

    Enmudir Grup

    Un grup d'instruments (mostres) que s'han d'enmudir (deixar de reprodur) inmediatament un cop un altre instrument del mateix grup s disparat.

    Aix normalment es fa servir en el charles, on hi ha un instrument diferent (mostra) per quan est obert o tancat. Amb un charles real el s de l'obert deixar de sonar quan es tanca. De totes maneres, si fas servir dues mostres — el s obert continuar sonant fins i tot desprs que hagis disparat el s tancat. Posant els dos intruments al mateix grup d'enmudiment (grup #1, per exemple)... disparar una nota de tancat aturar inmediatament el s de l'obert (i vicevrsa)

    Octava

    Un rang de freqncies en el que la freqncia ms alta s exactament el doble de la freqncia ms baixa.

    Per exemple, el rang de 20 Hz a 40 Hz s una octava. Igual que de 120 Hz a 240 Hz, i 575 Hza a 1150 Hz. Mentre les diferncies de freqncies sn molt diferents (10 Hz, 120 Hz i 575 Hz, respectivament), per a l'oida humana sonen a la mateixa distncia.

    Release

    Un cop la nota s'ha alliberat, s la quantitat de temps per passar del nivell de sustain a zero.

    Veure tamb ADSR.

    Ressonncia

    Quan ens referim a un filtre de ressonncia, aquest parmetre determina quant s'amplificar (guany) a les freqncies a la zona de tall.

    Veure tamb Filtre de ressonncia.

    Filtre de ressonncia

    Un filtre que amplifica un rang de freqncies molt petit. Tpicament ser part d'un filtre passa alts o passa baixos, en el que les freqncies amplificades estn entrades a la freqncia de tall.

    Veure tamb Filtre, Freqncia de tall, Ressonncia.

    Roll-off

    s la quantitat de freqncies que sn atenuades (suprimides) quan la freqncia canvia (tipicament mesurat en dB per octava).

    For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency.

    Veure tamb Atenuaci, Filtre.

    Sample

    Una grabaci curta d'un s, normalment entre .1 i 3.0 segons de duraci.

    Sustain

    El nivell en que es mant la nota desprs de passat el temps de decay. Aquest nivell es mant fins que es deixa anar.

    Veure tamb ADSR.

    Velocity

    La fora amb la que toques la nota.

    Els dispositius MIDI sn requerits per a enviar aquesta informaci al llarg de la nota. Els sintetitzadors utilitzen informaci per a ajustar varis parmetres de la mostra (tpicament el volum). A Hydrogen, noms s'utilitza per ajustar el volum de la mostra reproduda.

    hydrogen-0.9.6-beta3/data/doc/manual_ca.po000066400000000000000000004035421211146647700203200ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2009-09-04 07:27-0500\n" "PO-Revision-Date: 2009-07-26 18:58+0100\n" "Last-Translator: carles \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: manual.docbook:7(title) msgid "Hydrogen Manual" msgstr "Manual d'Hydrogen" #. Tag: author #: manual.docbook:9 #, no-c-format msgid "Antonio Piraino" msgstr "" #. Tag: author #: manual.docbook:13 #, no-c-format msgid "Alessandro Cominu" msgstr "" #: manual.docbook:22(para) msgid "" "Hydrogen is a software synthesizer which can be used alone, emulating a drum " "machine based on patterns, or via an external MIDI keyboard/sequencer " "software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter " "is still experimental, so ask in the developers mailing list for further " "details." msgstr "" "Hydrogen és un programari sintetitzador que pot ser utilitzat per si sol " "emulant una caixa de ritmes basada en patrons o mitjançant un teclat MIDI " "extern o un programa seqüenciador. Hydrogen compila en Linux/x86 i Mac OS X, " "tot i que l'últim està en fase de proves. Consulta a la llista de correu de " "l'equip de desenvolupament per més detalls." #: manual.docbook:37(title) msgid "Introduction" msgstr "Introducció" #: manual.docbook:40(title) msgid "Download" msgstr "Descàrrega" #: manual.docbook:42(para) msgid "" "The latest stable version of hydrogen is available as a tarball at http://www.hydrogen-music." "org." msgstr "" "L'última versió estable d'hydrogen està disponible en format .tar a http://www.hydrogen-music." "org." #. Tag: para #: manual.docbook:48 #, no-c-format msgid "It is possible to download the latest source files directly from our subversion server with: $ svn co http://svn.assembla.com/svn/hydrogen/trunk A certain release can be fetched with:" msgstr "" "És possible descarregar la última versió dels fitxers font directament del " "nostre servidor subversion a: $ svn co " "http://svn.assembla.com/svn/hydrogen/trunk Una deteminada " "versió pot ser recuperada amb:" #. Tag: screen #: manual.docbook:56 #, no-c-format msgid "$ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.3" msgstr "" "$ svn co " "http://svn.assembla.com/svn/hydrogen/tags/0.9.3" #: manual.docbook:59(para) msgid "Compiling Hydrogen depends on the following libraries:" msgstr "La compilació d'Hydrogen depèn de les següents llibreries:" #: manual.docbook:63(para) msgid "" "qt (>= 4.0) at http://www." "trolltech.com" msgstr "" "qt (>= 4.0) a http://www." "trolltech.com" #: manual.docbook:66(para) msgid "" "libsndfile at http://www." "mega-nerd.com/libsndfile/" msgstr "" "Libsndfile a http://www." "mega-nerd.com/libsndfile/" #: manual.docbook:69(para) msgid "" "ALSA (>= 1.x) at http://www." "alsa-project.com (only if you wish to use ALSA as audio driver)" msgstr "" "ALSA (>= 1.x) a http://www." "alsa-project.com (només si vols utilitzar ALSA com a controlador de " "sò)" #: manual.docbook:73(para) msgid "" "Jack Audio Connection Kit (>= 0.80) at http://jackaudio.org/ (only if you wish to use Jack as audio " "driver)" msgstr "" "Kit de conexió Jack (>= 0.80) a http://jackaudio.org/ (només si vols utilitzar Jack com a " "controlador de sò)" #: manual.docbook:78(para) msgid "" "PortAudio at http://www.portaudio." "com (only if you wish to use PortAudio as audio driver)" msgstr "" "PortAudio a http://www.portaudio." "com (només si vols utilitzar PortAudio com a controlador de sò)" #: manual.docbook:82(para) msgid "" "Flac at http://flac.sf.net (only " "if you wish to use flac samples)" msgstr "" "Flac a http://flac.sf.net (només " "si vols utilitzar patrons flac)" #: manual.docbook:86(para) msgid "" "ladspa at http://ladspa.org (only " "if you wish to use ladspa effects)" msgstr "" "ladspa a http://ladspa.org (només " "si vols utilitzar efectes ladspa)" #: manual.docbook:90(para) msgid "" "liblrdf at http://liblrdf.sf.net (only if you wish to use lrdf to categorise effects)" msgstr "" "liblrdf a http://liblrdf.sf.net " "(només si vols utilitzar lrdf per categoritzar efectes)" #: manual.docbook:93(para) msgid "" "lash at http://lash.nongnu.org " "(only if you wish to use lash)" msgstr "" "lash a http://lash.nongnu.org " "(nomes si vols utilitzar lash)" #: manual.docbook:98(para) msgid "" "Please install them with your distribution's package manager. If you're " "running a debian-based system, you can install the libraries with:" msgstr "" "Si us plau, instala-les amb el gestor de paquets de la teva distribució.Si " "estàs utilitzant un sistema basat en debian, pots instalar les llibreries " "amb:" #: manual.docbook:103(prompt) manual.docbook:117(prompt) #: manual.docbook:118(prompt) manual.docbook:119(prompt) #: manual.docbook:125(prompt) manual.docbook:132(prompt) #: manual.docbook:139(prompt) manual.docbook:145(prompt) msgid "$" msgstr "" #: manual.docbook:103(command) msgid "" "apt-get install libqt4-dev g++ libasound2-dev \\ libjack-dev liblrdf0-dev " "libflac++-dev libtar-dev libsndfile1-dev \\ liblash-dev libportaudio-dev " "libportmidi-dev" msgstr "" #: manual.docbook:111(title) msgid "Build" msgstr "Munta" #: manual.docbook:113(para) msgid "" "Decompress the tarball or go to the directory where the subversion copy was " "checked out:" msgstr "" "Descomprimeix el fitxer tar o ves al directori on la còpia de subversion va " "ser inicialitzada:" #: manual.docbook:117(command) msgid "cd hydrogen-*" msgstr "" #: manual.docbook:118(command) msgid "scons" msgstr "" #: manual.docbook:119(command) msgid "su -c \"scons install\"" msgstr "" #: manual.docbook:122(para) msgid "Before compiling, check for additional options with:" msgstr "Abans de compilar verifica opcions adicionals amb:" #: manual.docbook:125(command) msgid "scons --help" msgstr "" #: manual.docbook:128(para) msgid "" "If you want to use features which are not enabled by default (for instance " "PortAudio), you can enable them with:" msgstr "" "Si vols utilitzar opcions no habilitades per defecte (per exemple " "PortAudio), les pots habilitar amb:" #: manual.docbook:132(command) msgid "scons portaudio=1" msgstr "" #: manual.docbook:135(para) msgid "" "Namely, if you get some error while running Hydrogen and you want to report " "it remember to configure hydrogen with:" msgstr "" "Igualment, si et trobes amb un error a l'utilitzar Hydrogen i vols donar-lo " "a conèixer, recorda configurar hydrogen amb:" #: manual.docbook:139(command) msgid "scons debug=1" msgstr "" #: manual.docbook:142(para) msgid "To clean up compiled code:" msgstr "Per netejar codi compilat:" #: manual.docbook:145(command) msgid "scons -c" msgstr "" #: manual.docbook:150(title) msgid "Audio preferences" msgstr "Preferències d'àudio" #: manual.docbook:152(para) msgid "" "First of all you should make shure that the audio engine is configured " "properly. The preferences dialog can be accessed via the tools menu (tools -" "> preferences)." msgstr "" "Abans que res hauries d'assegurat-te que el motor d'àudio està configurat " "correctament. El quadre de preferències és accessible des del menú d'eines " "(eines -> preferences)." #: manual.docbook:157(title) msgid "The Audio System tab" msgstr "La pestanya del Sistema d'Àudio" #: manual.docbook:159(para) msgid "" "From the \"Audio System\" tab () it is possible to modify the audio driver being used (OSS, Jack, ALSA, " "PortAudio) with its buffer and sampling rate (unless using JACK, in this " "case the audio driver configuration should happen before starting the JACK " "server)." msgstr "" "És possible modificar el controlador de sò utilitzat (OSS, Jack, ALSA, " "PortAudio) i el seu buffer i frequència de mostreig (excepte amb JACK, en " "aquest cas s'hauria de configurar el controlador abans d'utilitzar el " "servidor de JACK) des de la pestanya del \"Sistema d'Àudio\" " #: manual.docbook:165(para) msgid "" "We can set some features of Hydrogen like \"Enable track outputs\" useful if " "you want to add effects to a single instrument with jack-rack. \"Connect to " "Default Output Pair\" connects the output to the default ports: uncheck this " "if you want to connect JACK output to other ports without disconnecting them " "first" msgstr "" "Podem activar alguna de la funcionalitat d'Hydrogen com ara \"Habilita " "sortides de pista\", útil si vols afegir efectes a un instrument en sèrie a " "jack. \"Conectar al parell de sortida per defecte\" connecta la sortida als " "ports per defecte: Desactiva-ho si vols conectar-te a altres ports de " "sortida JACK sense haver-los de desconectar primer." #: manual.docbook:171(para) msgid "" "Keep also an eye on the value of \"Polyphony\": depending on your CPU you " "may want to change the max simultaneous notes in order to prevent hydrogen " "from overunning the audio driver." msgstr "" "Estigues també al corrent del valor de \"Polifonia\": depenent de la càrrega " "de CPU pots voler canviar el nombre màxim de notes simultànies per prevenir " "que hydrogen saturi el buffer d'àudio." #: manual.docbook:176(title) msgid "The Audio System Tab" msgstr "La pestanya del sistema d'àudio" #: manual.docbook:184(para) msgid "The following drivers are available:" msgstr "Els controladors disponibles són els següents:" #: manual.docbook:191(para) msgid "" "jackd: The Jack driver is a professional " "audio server which permits very low lag and exchanges with other audio " "software. We strongly recommend using this driver to have the best " "out of Hydrogen. JACK server will start automatically if not " "already running." msgstr "" "jackd: El controlador Jack és un servidor " "d'àudio professional que permet molt baixa latència i es comunica amb altres " "programes d'àudio. Recomanem ferventment usar aquest controlador " "per treure-li tot el suc a Hydrogen. El servidor JACK s'iniciarà " "automàticament si no està ja en ús." #: manual.docbook:199(para) msgid "" "ALSA: the widely adopted Linux standard " "audio drivers" msgstr "" "ALSA: El controlador d'àudio més extès en " "Linux" #: manual.docbook:204(para) msgid "" "OSS: The Oss audio driver uses /dev/dsp " "and it's based on the OSS interface which is supported by the vast majority " "of sound cards available for linux; this said, the use of this audio driver " "blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other " "software. Use it as last resort." msgstr "" "OSS: El controlador Oss utilitza el " "dispositiu /dev/dsp i està basat en la interfície OSS, suportada per la " "majoria de tarjes de sò disponibles en linux; dit això, utilitzar aquest " "controlador bloqueja el dispositiu /dev/dsp fins que hydrogen es tanca fent-" "lo inutilitzable per a tots els altres programes. Utilitza-ho només com a " "últim recurs." #: manual.docbook:213(para) msgid "" "PortAudio: an open-source multiplatform " "audio driver" msgstr "" "PortAudio: un controlador d'àudo " "multiplataforma de codi font obert" #: manual.docbook:218(para) msgid "" "CoreAudio: a driver for Mac OS X " "(experimental)" msgstr "" "CoreAudio: un controlador per a Mac OS X " "(experimental)" #: manual.docbook:225(title) msgid "The Midi System tab" msgstr "La pestanya del sistema Midi" #: manual.docbook:227(para) msgid "" "The \"Midi System\" tab () " "concerns the MIDI input. You can choose the MIDI driver and input, setup " "channels, binding actions to MIDI events." msgstr "" "La pestanya \"Sistema Midi\" () " "referencia a l'entrada MIDI. Pots triar el controlador MIDI i entrada, " "configurar canals, assignar accions a events MIDI." #: manual.docbook:232(title) msgid "The MIDI System Tab" msgstr "La pestanya del sistema MIDI" #: manual.docbook:242(title) msgid "The Appearance tab" msgstr "La pestanya d'aparènça" #: manual.docbook:244(para) msgid "" "The \"Appearance\" tab () " "let's you to modify Hydrogen and QT graphical properties." msgstr "" "La pestanya d' \"Aparença\" () et deixa modificar les propietats gràfiques d'Hydrogen i QT." #: manual.docbook:249(title) msgid "The Appearance Tab" msgstr "La Pestanya d'Aparença" #: manual.docbook:260(title) msgid "The Audio Engine tab" msgstr "La Pestanya del Motor d'Àudio" #: manual.docbook:262(para) msgid "" "The audio engine info is a window with various stats about Hydrogen and the " "audio driver. In case JACK is used, buffer and sampling rate should be set " "before starting Hydrogen (JACK automatically starts when an application " "tries to connect)." msgstr "" "La informació del motor d'àudio és una finestra amb varia informació sobre " "Hydrogen i el controlador d'àudio. En cas d'estar utilitzant JACK, la mida " "del buffer i la frequència de mostreig s'ha de configurar abans d'iniciar " "Hydrogen (JACK s'inicia automàticament quan alguna aplicació intenta " "conectar-s'hi)" #: manual.docbook:268(title) msgid "The Audio Engine Info Window" msgstr "La Finestra del Motor d'Àudia" #: manual.docbook:286(title) msgid "Using Hydrogen" msgstr "Usant Hydrogen" #: manual.docbook:289(title) msgid "Used Filetypes" msgstr "Tipus de fitxers utilitzats" #: manual.docbook:291(para) msgid "Before working with Hydrogen, please familiarize with these filetypes:" msgstr "" "Abans de treballar amb Hydrogen, si us plau, familiaritza't amb els següents " "tipus de fitxers:" #: manual.docbook:296(para) msgid "" "*.h2pattern: XML file describing a single " "pattern. Patterns are group of beats and are managed in the pattern editor." msgstr "" "*.h2pattern: Fitxer XML que descriu un " "patró. Els patrons són un grup de polsacions gestionats per l'etidor de " "patrons." #: manual.docbook:301(para) msgid "" "*.h2song: XML file describing the whole " "song (or sequence). Songs are group of patterns with their properties and " "are manager using the song editor" msgstr "" "*.h2song: Fitxer XML que descriu una " "cançó (o seqüencia). Les cançons són grups de patrons amb les seves " "propietats, i són gestionats amb l'editor de cançons" #: manual.docbook:306(para) msgid "" "*.h2playlist: XML file describing a " "playlist.A Playlist is a (ordered) group of songs." msgstr "" "*.h2playlist: Fitxer XML una llista de " "reproducció. Una llista de reproducció és una seqüència (ordenada) de " "cançons." #: manual.docbook:310(para) msgid "" "*.h2drumkit: a compressed and archived " "folder containing all sound samples composing a drumkit and a description " "XML file. Drumkits are basically group of sound samples." msgstr "" "*.h2drumkit: es tracta d'una carpeta " "comprimida que conté totes les mostres de sò que composen un kit de bateria " "i un fitxer XML de descripció. Els kits de bateria són bàsicament un grup de " "mostres de sò." #: manual.docbook:319(title) msgid "Main menu" msgstr "Menú principal" #: manual.docbook:321(para) msgid "" "Projects: this menu offers file related " "functions." msgstr "" "Projectes: aquest menú ofereix funcions " "relacionades amb els fitxers." #: manual.docbook:326(para) msgid "New - Create a new song" msgstr "Nou - Crear una nova cançó" #: manual.docbook:329(para) msgid "" "Show Info - Set general properties of the song such as " "name, author, license and generic notes" msgstr "" "Mostrar informació - Configurar les propietats generals " "de la cançó com ara nom, autor, llicència i altres notes" #: manual.docbook:333(para) msgid "Open - Open a song" msgstr "Obre - Obre una cançó" #: manual.docbook:336(para) msgid "" "Open Demo - Open a demo song (demo songs are stored in " "$INSTALLPATH/share/hydrogen/data/demo_songs)" msgstr "" "Obre Demo - Obrir una cançó de demostració (les cançons " "de demostració es troben a INSTALLPATH/share/hydrogen/data/" "demo_songs)" #: manual.docbook:341(para) msgid "Open recent - Open a menu showing last used songs" msgstr "" "Obre Recent - Obre un menú que mostra les cançons " "utilizades recentment" #: manual.docbook:345(para) msgid "Save - Save changes to current song" msgstr "" "Desa - Desa les modificacions fetes a la cançó actual" #: manual.docbook:348(para) msgid "" "Save as - Save current song specifying a name (default " "path: $HOME/.hydrogen/data/songs)" msgstr "" "Desa com a - Desa la cançó actual especificant-li un " "nom (directori per defecte: $HOME/.hydrogen/data/songs))" #: manual.docbook:353(para) msgid "" "Open pattern - Open a saved pattern belonging to the " "current drumkit" msgstr "" "Obrir patró - Obre un patró desat que pertany al kit de " "bateria actual" #: manual.docbook:357(para) msgid "" "Export pattern as - Saves a pattern. It will be stored " "in $HOME/.hydrogen/data/patterns/drumkit_name" msgstr "" "Exportar patró com a - Desa el patró, serà desat a " "$HOME/.hydrogen/data/patterns/drumkit_name" #: manual.docbook:362(para) msgid "" "Export MIDI file - Export current song in MIDI format" msgstr "" "Exportar fitxer MIDI - Exporta la cançó actual en " "format MIDI" #: manual.docbook:366(para) msgid "Export song - Export current song in WAV format" msgstr "" "Exportar cançó - Exporta la cançó actual en format WAV" #: manual.docbook:370(para) msgid "Quit - Quit Hydrogen" msgstr "Sortir - Sortir d'Hydrogen" #: manual.docbook:374(para) msgid "" "Instruments: this menu offers instruments " "and drumkit (sound libraries) functions." msgstr "" "Instruments: aquest menú conté funcions " "d'instruments i kit de bateria (llibreries de sò)." #: manual.docbook:379(para) msgid "" "Add instrument - Add a new instrument to your current " "drumkit" msgstr "" "Afegir instrument - Afegeix un nou instrument al kit de " "bateria actualment actiu" #: manual.docbook:383(para) msgid "" "Clear all - Delete all instruments from the current " "drumkit" msgstr "" "Neteja-ho tot - Elimina tots els instruments del kit de " "bateria actual" #: manual.docbook:387(para) msgid "" "Save library - Saves all instruments settings (and " "their sound samples) in $HOME/.hydrogen/data/library_name" msgstr "" "Desar llibreria - Desa tots els instruments, les seves " "configuracions i mostres de sò a $HOME/.hydrogen/data/" "library_name" #: manual.docbook:392(para) msgid "" "Export library - Compress all instruments samples and " "settings in a drumkit in $HOME/.hydrogen/data/library_name" msgstr "" "Exportar llibreria - Comprimir totes les mostres dels " "instruments i configuracions en un kit de bateria a $HOME/." "hydrogen/data/library_name" #: manual.docbook:397(para) msgid "" "Import library - Imports another drumkit from the local " "filesystem or download it from a remote location through an XML feed. The " "XML file that should be provided is NOT " "RSS compliant (see Hydrogen website for an example). To load another " "drumkit in your current working session of Hydrogen, read ." msgstr "" "Importar llibreria - Importa un kit de bateria del " "sistema d'arxius local o el descarrega d'un lloc remot mitjançant " "alimentació XML (XML feed). El fitxer XML proveït NO compleix els stàndards RSS (veure la pàgina web d'Hydrogen " "per a un exemple). Per a carregar un kit de bateria en la sessió de treball " "actual d'Hydrogen, llegeix ." #: manual.docbook:408(para) msgid "" "Tools: opens the mixer, the playlist " "editor, the instrument rack and the general preferences window." msgstr "" "Eines: obre el mesclador, l'editor de " "llistes de reproducció, el banc d'instruments i la finestra principal de " "preferències." #: manual.docbook:414(para) msgid "Playlist editor - A tool to manage playlists." msgstr "" "Editor de llistes de reproducció - Una eina per a " "gestionar llistes de reproducció." #: manual.docbook:418(para) msgid "Mixer - Open the mixer window." msgstr "Mesclador - Obre la finestra del mesclador." #: manual.docbook:421(para) msgid "Instrument rack - Open the instrument rack panel." msgstr "" "Banc d'Instruments - Obre el panell del banc " "d'instruments." #: manual.docbook:425(para) msgid "" "Preferences - Open the main preferences window. Read " " on how to configure Hydrogen." msgstr "" "Preferències Obre la finestra principal de " "preferències. Llegeix per més " "informació sobre la configuració d'Hydrogen." #: manual.docbook:431(para) msgid "" "Debug: tools mainly for debugging and " "monitoring Hydrogen (only available when compiled with debug support)." msgstr "" "Depurar: eines principalment per depurar " "i monitoritzar Hydrogen (només disponibles quan s'ha compilat l'aplicació " "amb suport a depuració)." #: manual.docbook:437(para) msgid "" "Show audio engine info - Open a monitor with various " "stats" msgstr "" "Mostrar informació del motor d'àudio - Obre un monitor " "amb vàries estadístiques" #: manual.docbook:442(para) msgid "debug action - Insert debug commands." msgstr "" "acció de depuració - Inserta una instrucció per a la " "depuració." #: manual.docbook:446(para) msgid "" "Print Objects - Print on stdout current objects map." msgstr "" "Imprimir Objectes - Imprimir a stdout (sortida per " "defecte) l'actual mapa d'objectes." #: manual.docbook:451(emphasis) msgid "Info" msgstr "Informació" #: manual.docbook:455(para) msgid "User manual - Open a window with this manual :)" msgstr "" "Manual d'usuari- Obre una finestra amb aquest manual" #: manual.docbook:459(para) msgid "" "About - The usual window with licence information, " "acknowledgements, etc." msgstr "" "Sobre - La típica finestra amb informació sobre la " "llicència, autors, etc." #: manual.docbook:466(title) msgid "The main toolbar" msgstr "La barra d'eines principal" #: manual.docbook:468(para) msgid "" "Before analyzing the two main frames of Hydrogen, let's take a quick look at " "the main toolbar and its components:" msgstr "" "Abans d'analitzar les dues àrees principals d'Hydrogen, fem primer una " "ullada ràpida a la barra d'eines principal i als seus components:" #: manual.docbook:473(para) msgid "Pilot the song using the start, stop, pause, etc. buttons" msgstr "Pilota la cançó utilitzant els botons d'inici, aturar, pausa, etc." #: manual.docbook:476(para) msgid "" "Choose between \"pattern\" or \"song\" mode: in \"pattern\" mode only the " "currently selected pattern will play, while in \"song\" mode all patterns " "inserted will be played." msgstr "" "Escull entre mode \"patró\" o \"cançó\": En mode \"patró\" només se sentirà " "el patró seleccionat, mentre que en el mode \"cançó\" se sentiràn tots els " "patrons utilitzats." #: manual.docbook:481(para) msgid "" "An advanced tap tempo function: choose note length and how many notes to " "wait before recalculating BPM, then click the comma key repeatedly until the " "'R' letter will appear and the BPM will be updated. (see )" msgstr "" "Una funció avançada de toc al tempo: escollir la llargada de la nota i " "quantes notes han de passar abans de recalcules les PPM, aleshores clica la " "tecla coma fins que la lletra 'R' aparegui i les PPM siguin actualitzades " "(veure )" #: manual.docbook:487(para) msgid "Manually set BPM" msgstr "Configurar manualment les PPM" #: manual.docbook:490(para) msgid "Manage JACK transport" msgstr "Administrar el transport JACK" #: manual.docbook:493(para) msgid "Open the mixer and the instrument rack panels" msgstr "Obrir els panells del mesclador i del panell d'instruments" #: manual.docbook:498(title) msgid "The Main Toolbar" msgstr "La Barra d'Èines Principal" #: manual.docbook:513(para) msgid "" "Main controls to start [Hotkey = Spacebar], stop, fast forward, rewind, loop a song or a pattern." msgstr "" "Controls principals per començar [Hotkey = Spacebar]" ", aturar, avançar, rebobinar, repetir una cançó o un patró." #: manual.docbook:523(para) msgid "Set Pattern/Song Mode." msgstr "Estableix Mode Patró/Cançó" #: manual.docbook:531(para) msgid "" "Set speed of playing (range: 30-400 bpm) [Hotkey = " "mouse wheel] and button to enable/disable metronome" msgstr "" "Estableix velocitat de reproducció (rang: 30-400 PPM) [Hotkey = mouse wheel] i botó per habilitar/deshabilitar el " "metrònom" #: manual.docbook:541(para) msgid "Shows CPU load." msgstr "Mostra la càrrega de CPU" #: manual.docbook:549(para) msgid "Shows MIDI events." msgstr "Mostra els events MIDI." #: manual.docbook:557(para) msgid "" "Click to enable Jack transport: Hydrogen will work as 'slave' with another " "'master' program (e.g. Ardour). This applet is only available if Jack Audio " "Driver is selected." msgstr "" "Clica per habilitar el transport Jack: Hydrogen treballarà com a 'esclau' " "amb un altre programa 'mestre' (p.e. Ardour). Aquesta funció només està " "disponible si el controlador d'Àudio Jack està seleccionat." #: manual.docbook:563(para) msgid "Other useful keybindings (not customizable for the moment):" msgstr "Altres assignacións de tecles útils (no configurables actualment):" #: manual.docbook:568(para) msgid "[CTRL + O] = Open File" msgstr "[CTRL + O] = Obrir fitxer" #: manual.docbook:573(para) msgid "[CTRL + S] = Save File" msgstr "[CTRL + S] = Desar fitxer" #: manual.docbook:578(para) msgid "" "[Backspace] = Restart song or pattern " "from the beginning" msgstr "" "[Backspace] = Reinicia cançó o patró des " "de l'inici" #: manual.docbook:586(title) msgid "Tap Tempo and BeatCounter" msgstr "Polsar Tempo i ComptadorDePolsacions" #: manual.docbook:588(para) msgid "" "It is possible to change tempo at any time using the tap-tempo and " "BeatCounter features of Hydrogen. You can change these while playing or " "while the song is stopped. To change the tempo, hit the , " "(comma) key in tempo for the number of beats in the measure. After the " "correct number of beats are met, the tempo will change to the average tempo " "that you tapped in. If you continue to tap, these new taps will become a " "part of a rolling average. If you tap accidentally, or if you wait too long " "between taps, the tap tempo counter will start over." msgstr "" "És possible cambiar el tempo en cualsevol moment utilitzant la funcionalitat " "polsar-tempo i ComptadorDePolsacions d'Hydrogen. Els pots canviar mentre la " "cançó s'està reproduïnt o mentre està aturada. Per cambiar el tempo, polsa " "la tecla , (coma) per a seleccionar el nombre de polsacions " "en la mesura. Després que hagi passat el nombre de polsacions correcte, el " "tempo canviarà cap a la mitjana del que hagis polsat. Si continues polsant, " "aquestes noves polsacions es convertiràn en una part de la mitjana. Si " "polses per accident, o esperes massa temps entre polsacions, el comptador de " "tempo per polsacions tornarà a començar." #: manual.docbook:598(para) msgid "" "The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo " "on steroids. By default the BeatCounter display is not visible. To see the " "BeatCounter widget click the upright button (BC) " "between Song/Pattern mode selector and the BPM-widget. Or, it can be shown " "by pressing the comma key (,)." msgstr "" "Polsar Tempo és una part del ComptadorDePolsacions, que és essencialment un " "polsar tempo tunejat. Per defecte el ComptadorDePolsacions no eś visible. " "Per veure el ComptadorDePolsacions clica el botó de dalt a la dreta " "(BC) entre el selector de mode Cançó/Patró i el " "selector de PPM. També pot veure's quan es pressiona la tecla coma " "(,)." #: manual.docbook:605(para) msgid "" "The tempo that you tap will be considered even beats of the beat type. The " "beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note " "beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change " "the beat type use the left arrow buttons. To change the number of beats that " "are counted, use the right arrow button. You can set from 2 to 16 beats. (I." "e. if you set the beat to 6, you will have to tap 6 times before the new " "tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. Every " "time you tap with the comma key, it will show the number of taps that you " "have entered (1, 2, 3...)." msgstr "" "El tempo que pressionis serà considerat polsacions parelles del tipus de " "polsació. El tipus de polsació pot ser configurat a 1/8 (per ritmes d'un " "vuitè de nota), 1/4 (per ritmes d'un quart de nota), 1/2 (per ritmes de " "mitja nota) i 1/1 (per ritmes d'una nota sencera). Per cambiar el tipus de " "ritme utilitza la tecla fletxa esquerra. Per cambiar el nombre de polsacions " "comptades, utilitza la tecla fletxa dreta. Pots configurar de 2 a 16 " "polsacions (P.e., si configures les polsacions a 6, hauràs de polsar 6 " "vegades abans que el nou tempo estigui computat i s'assigni.) Mentre es " "mostri una R per pantalla el ComptadorDePatrons està " "apunt per començar de 0. Cada vegada que pressiones amb la tecla coma, " "mostrarà el nombre de polsacions que has entrat (1, 2, 3...)." #: manual.docbook:616(para) msgid "" "The button in the bottom right-hand controls the auto-start feature, and it " "toggles between S and P. When it " "shows P for (Play), the song will " "set the new tempo and automatically start to play after you tap the right " "number of beats (if it's not already playing, of course). This way, if you " "have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing " "on the next beat. When it shows S (for Set " "BPM), the auto-start is disabled." msgstr "" "El botó del fons a ma dreta controla la funcionalitat començar-" "automàticament, i s'activa entre S i P. P significa (Reproduïr), en aquest estat la cançó assignarà el tempo automàticament i es " "començarà a reproduïr quan hagis entrat la quantitat correcta de polsacions " "(si no s'està ja reproduïnt, clar). D'aquesta manera, si tens el " "ComptadorDePatrons configurat a 4/4, pots polsar 1-2-3-4, i començar en la " "pròxima polsació. Quan es mostra S (per " "Configura PPM), l'auto inici està deshabilitat." #: manual.docbook:626(para) msgid "" "For example: Suppose you have a live band, Hydrogen, and a softsynth that is " "controlled by Seq24)... and you want them all to start at the same time. Set " "the beat type to 1/4 and the number of beats to 4. Enable auto-start (button " "shows P). Count off the band 1-2-3-4 (while tapping the " "comma key) — and everyone starts on 1." msgstr "" "Per exemple: suposem que estàs en un grup, Hydrogen, i tens un sintetitzador " "software controlat per Seq24)... i vols que tot comenci alhora. Configura el " "tipus de ritme a 1/4 i el nombre de polsacions a 4. Habilita l'auto-inici " "(mostrant P). Compta al grup 1-2-3-4 (mentre li vas " "donant a la coma) — i tothom comença a l'1." #: manual.docbook:633(para) msgid "" "Another example: Same situation, but the song doesn't require Hydrogen or " "synths until some point later. During that time, a human (e.g. guitar " "player) will be setting the tempo. On the measure before Hydrogen is " "supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in " "on the next beat (at the right tempo)." msgstr "" "Un altre exemple: En la mateixa situació, però la cançó no requereix " "d'Hydrogen o sintetitzadors fins a una estona després. Mentrestant, un humà " "(p.e. el guitarrista) anirà configurant el tempo. En la mesura anterior en " "la que hydrogen se suposa que ha de començar, polsa la coma 1-2-3-4 amb el " "ritme... i ja ho tens a la pròxima polsació (amb el tempo correcte)." #: manual.docbook:639(para) msgid "" "If you are using the JACK Transport, the BeatCounter continues to work. If " "another program is the JACK Transport Master, Hydrogen will respond to tempo " "change events from that application. Note that in this situation, Hydrogen " "is supposed to be a slave, so some of the BeatCounter " "features will be disabled or will not work properly. If Hydrogen is the JACK " "Transport Master, tempo changes from Hydrogen will be reflected in those " "programs (if they support it)." msgstr "" "Si estàs utilitzant el transport JACK, el ComptadorDePolsacions continua " "funcionant. Si algun altre programa és el Mestre del Transport JACK, " "Hydrogen respondrà als events de canvi de tempo des d'aquella aplicació. " "Fixa't que en aquesta situació, Hydrogen se suposa que ha de ser un " "esclau, pel que la funcionalitat del ComptadorDePatrons " "seràn desactivades o no funcionaràn correctament. Si Hydrogen és el mestre " "del transport JACK, els canvis a Hydrogen es veuràn reflectits en altres " "programes (si ho soporten)." #: manual.docbook:648(para) msgid "" "Some of the settings to adjust the BeatCounter's latency compensation, and " "they are located on the General tab of the Preferences " "Dialog ( ToolsPreferences ). Here there are two spinboxes:" msgstr "" "Alguns dels paràmetres per ajustar la latència del ComptadorDePolsacions" #: manual.docbook:660(para) msgid "" "Beat counter drift compensation in 1/10ms— adjust to compensate for latency between the " "keyboard and the program." msgstr "" "Compensació de deriva del comptador de " "polsacions en 1/10ms — ajustar la compensació " "per latència entre el teclat i el programa." #: manual.docbook:665(para) msgid "" "Beat counter start offset in ms— adjust the time between the BeatCounter's last " "input stroke and when the song starts playing (if auto-start is activated)." msgstr "" "Comença la compensació del comptador de " "polsacions en ms — ajustar el temps entre " "l'última entrada ComptadorDePolsacions i quan comença la reproducció de la " "cançó (si la funció d'auto inici està desactivada)." #: manual.docbook:671(para) msgid "" "Note that these can be set to positive (+) or negative (-) values. In order " "to find useful values for these, you will need to take some time to play " "with it. Also, you may want different values depending on the speed of your " "hardware, audio devices, drivers, etc. Using the BeatCounter effectively " "requires practice." msgstr "" "Fixa't que aquests valors poden estar configurats a positiu (+) o negatiu " "(-). Per tal de trobar valors útils per a aquests, necessitaràs jugar-hi un " "temps. Amés, pots voler utilitzar valors diferents depenent de la velocitat " "del teu maquinari, dispositius d'àudio, controladors, etc. Utilitzar el " "ComptadorDePolsacions bé necessita pràctica." #: manual.docbook:682(title) msgid "Song Editor" msgstr "Editor de Cançons" #: manual.docbook:684(para) msgid "" "The \"Song Editor\" () gives an overview " "of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so " "on); each blue coloured square on this panel is a complete bar as shown in " "the underlying \"Pattern Editor\" panel. Here we have complete freedom to " "add, remove or move patterns in any order we prefer. We can also copy and " "paste patterns: use left mouse button to highlight an area and drag it " "around. Dragging with CTRL key pressed copies the patterns." msgstr "" "L' \"Editor de Cancons\" () permet una " "vista general de tota la cançó. (p.e. introducció, vers, pont, estribillo i " "anar fent); cada requadre marcat en blau en aquest panell és una barra " "completa mostrat en l'\"Editor de Patrons\". Aquí tenim completa llibertat " "per afegir, borrar o moure patrons en l'ordre que preferim. També podem " "copiar i enganxar aquests patrons: utilitza el botó esquerre del ratolí per " "seleccionar-ho. Arrossegar amb la tecla CTRL premuda copia aquests patrons." #: manual.docbook:693(para) msgid "The Song Editor comes with 7 buttons:" msgstr "L'editor de Cançons té 7 botons:" #: manual.docbook:707(para) msgid "" "Completely delete all patterns (asks for confirmation!)." msgstr "" "Esborrar completament tots els patrons (demana " "confirmació!)." #: manual.docbook:715(para) msgid "Create a new pattern (and asks for a name)." msgstr "Crear un nou patró (i demana pel seu nom)." #: manual.docbook:723(para) msgid "Move currently selected pattern up or down." msgstr "Moure el patró seleccionat amunt o avall." #: manual.docbook:733(para) msgid "" "Enable selecting patterns for copy & paste (Select " "Mode)." msgstr "" "Habilitar seleccionar patrons per copiar i enganxar (Mode " "selecció)." #: manual.docbook:741(para) msgid "Enable Draw Mode." msgstr "Habilitar Mode Dibuix." #: manual.docbook:748(para) msgid "" "Switch from \"Single pattern mode\" to \"Stacked pattern " "mode\" and back.." msgstr "" "Cambiar del mode \"Només un patró\" al mode \"Pila de " "patrons\" i enrere..." #: manual.docbook:756(para) msgid "" "Under these buttons there is a list of patterns created and when they will " "played (each square == 1 bar). Click on an squarebox to add or cancel the " "pattern. Clicking on right mouse button over the name of a pattern will " "bring up a menu to change name of the pattern or to allow copying/deleting " "it. Patterns with very same name are not allowed." msgstr "" "Sota aquests botons hi ha una llista de patrons creats i quan ells son " "premuts (cada requadre == 1 barra). Clica en un requadre per afegir o " "cancelar un patró. Clicar el botó dret del ratolí sobre el nom del patró " "treu un menu per canviar el nom del patró o permetre copiar-lo/esborrar-lo. " "No és permès tenir varis patrons amb el mateix nom." #: manual.docbook:763(title) msgid "The Song Editor" msgstr "L'Editor de Cançons" #: manual.docbook:774(title) msgid "Pattern Editor" msgstr "L'Editor de Patrons" #: manual.docbook:776(para) msgid "" "The \"Pattern Editor\" frame () lets " "us create or modify the pattern (bar) which is being played, or add/remove " "notes and tune intensity as well. On the higher-left side you find a pair of " "LCD screens: the first one lets you choose the size of a pattern while the " "second represents the current grid resolution (4 through 64). Selecting an " "instrument which has at least one note in the pattern will show a few " "vertical bars (one per note) on the lowest part of this frame. Those frame " "shows the so called \"note properties\". This are special properties which " "can be set for every single note. Hydrogen knows of 3 Properties: Velocity, " "Pan and Lead/Lag. Lead and Lag allows a slight note lead or lag in respect " "of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms " "at a tempo of 120bpm." msgstr "" "El requadre de l'\"Editor de Patrons\" () permet crear o modificar el patró (barra) en que s'està reproduïnt, o " "afegir/esborrar notes i intensificar l'afinació. A la part de dalt a " "l'esquerra es poden veure un parell de panells LCD: la primera et deixa " "escollir la mida del patró mentre que la segona representa la resolució de " "la parrilla (4 a 64). Seleccionar un instrument que almenys tingui una nota " "el el patró mostrarà unes quantes barres verticals (una per nota) a la part " "inferior del requadre. Aquest requadre mostra les anomenades \"propietats de " "nota\". Aquestes son propietats especials que poden ser ajustades per a cada " "nota. Hydrogen té 3 Propietats: Velocitat, balanceig i Principal/intèrval. " "Principal i intèrval permet un petit avanç o endarreriment respecte al ritme " "actual. El rang es ca. 5 tics que vé a ser ca. 10ms a un tempo de 120ppm." #: manual.docbook:789(para) msgid "" "The button " " (hear new notes) will play the sample as it's " "been added to the pattern. Finally you can move an instrument up and down in " "the sequence with the buttons " " . A useful Quantize feature is available activating " " " " . This way the beats " "inserted will automatically respect the grid resolution currently applied." msgstr "" "El botó " " (escoltar noves notes) reprodueix la mostra com " "s'ha afegit al patró. Finalment pots moure un instument amunt i avall amb " "els botons " ". La útil funció Quantitzar està " "disponible activant " ". D'aquesta manera les polsacions " "insertada respectaràn automàticament respectant la resolució de la parrilla." #: manual.docbook:820(title) manual.docbook:1664(title) msgid "The Pattern Editor" msgstr "L'Editor de Patrons" #: manual.docbook:828(para) msgid "" "Rememeber this constraint concerning the grid: if you are working with a " "resolution of 16 you can't go back to 8 and remove a 16th note; on the other " "hand if you are working with a resolution of 8 and you try to insert a note " "in the middle of two bars (looking for a 16 bars precision), notes will be " "placed in the previous or in the following 8th bar. This contraint can be " "removed if you disable the whole grid resolution (choose \"off\" from the " "grid resolution LCD control). Now you'll be able to place notes wherever you " "prefer." msgstr "" "Recorda aquesta limitació respecte la parrilla: si estàs treballant amb una " "resolució de 16 no pots tornar a 8 i esborrar una nota d'un 16è; per altra " "banda si estàs treballant en una resolució de 8 i intentes insertar una nota " "entre dues barres (mirant per una precisió d'un setzè), les notes seràn " "posades automàticament a la barra d'un vuitè més pròxima. Aquesta restricció " "pot ser deshabilitada si es treu la resolució de tota la parrilla (escull " "\"desactiva\" al LCD de control de parrilla). Ara podràs posar les notes on " "vulguis." #: manual.docbook:837(para) msgid "" "Each instrument has its own set of features accessible right-clicking with " "your mouse on it; Fill/Clear notes fills or deletes every note of that instrument in the " "current pattern (remember that filling a pattern is always relative to the " "grid resolution set) and finally Randomize " "velocity automatically apply a pseudo-random velocity to " "each note of that instrument in the pattern. The more velocity you set on " "the instrument, the more hydrogen will hit hard on that " "instrument when played." msgstr "" "Cada instrument té el seu conjunt de característiques accessible clicant amb " "el botó dret del ratoli; Omplir/Esborrar " "notes omple o esborra cada nota d'aquest instrument en el " "patró actual (recorda que omplir un patró sempre depèn de la resolució " "seleccionada de la parrilla) i finalment aleatoritzar velocitat aplica canvis pseudo-aleatòris " "en la velocitat a cada nota de l'instrument del patró. Com més velocitat " "selecciones en l'instrument, més fort tocarà hydrogen " "l'instrument en la reproducció." #: manual.docbook:848(para) msgid "" "The small green and red squares beside the instrument name are the " "mute and solo buttons." msgstr "" "Els petits requadres vermells i verds al costat dels instruments són per " "silenciar i reproduïr " "en solitari." #. Tag: para #: manual.docbook:844 #, no-c-format msgid "Also, you can set new beats clicking on which enables direct input by MIDI events or by keyboard according to the following map key=instrument:" msgstr "" "Amés, pots posar noves polsacions clicant a " " " ", el que " "habilita entrada directe a partir d'events MIDI o teclat segóns el mapa " "tecla=instrument:" #: manual.docbook:871(emphasis) msgid "" "Note that the name of the instrument depends on the drumkit loaded. This " "list refers to the GMKit loaded by default. The position of the instrument, " "however, is the same." msgstr "" "Fixa't que el nom de l'instrument depèn del kit de bateria carregat. Aquesta " "llista es refereix al GMKit carregat per defecte. De totes maneres, la " "posició de l'instrument és la mateixa." #: manual.docbook:876(para) msgid "Z = Kick" msgstr "Z = Bombo" #: manual.docbook:877(para) msgid "X = Snare Jazz" msgstr "X = Caixa Jazz" #: manual.docbook:878(para) msgid "C = Snare Rock" msgstr "C = Caixa Rock" #: manual.docbook:879(para) msgid "V = Tom Low" msgstr "V = Tom baix" #: manual.docbook:880(para) msgid "B = Tom Mid" msgstr "B = Tom Mitjà" #: manual.docbook:881(para) msgid "N = Tom Hi" msgstr "N = Tom Alt" #: manual.docbook:882(para) msgid "M = Cowbell" msgstr "M = Esquella" #: manual.docbook:883(para) msgid "Q = Ride Jazz" msgstr "Q = Ride Jazz" #: manual.docbook:884(para) msgid "W = Ride Rock" msgstr "W = Ride Rock" #: manual.docbook:885(para) msgid "E = Instrument No. 17 (currently not assigned)" msgstr "E = Instrument No. 17 (no assignat en aquest moment)" #: manual.docbook:886(para) msgid "R = Instrument No. 18 (currently not assigned)" msgstr "E = Instrument No. 18 (no assignat en aquest moment)" #: manual.docbook:887(para) msgid "T = Instrument No. 20 (currently not assigned)" msgstr "T = Instrument No. 20 (no assignat en aquest moment)" #: manual.docbook:888(para) msgid "Y = Instrument No. 22 (currently not assigned)" msgstr "Y = Instrument No. 22 (no assignat en aquest moment)" #: manual.docbook:889(para) msgid "U = Instrument No. 24 (currently not assigned)" msgstr "U = Instrument No. 24 (no assignat en aquest moment)" #: manual.docbook:890(para) msgid "S = Stick" msgstr "S = Baqueta" #: manual.docbook:891(para) msgid "D = Hand Clap" msgstr "D = Picar de mans" #: manual.docbook:892(para) msgid "G = Closed HH" msgstr "G = HH tancat" #: manual.docbook:893(para) msgid "H = Pedal HH" msgstr "H = HH en Pedal" #: manual.docbook:894(para) msgid "J = Open HH" msgstr "J = HH Obert" #: manual.docbook:895(para) msgid "2 = Crash" msgstr "2 = Crash" #: manual.docbook:896(para) msgid "3 = Crash Jazz" msgstr "3 = Crash Jazz" #: manual.docbook:897(para) msgid "5 = Instrument No. 19 (currently not assigned)" msgstr "5 = Instrument No. 19 (no assignat en aquest moment)" #: manual.docbook:898(para) msgid "6 = Instrument No. 21 (currently not assigned)" msgstr "6 = Instrument No. 21 (no assignat en aquest moment)" #: manual.docbook:899(para) msgid "7 = Instrument No. 23 (currently not assigned)" msgstr "7 = Instrument No. 23 (no assignat en aquest moment)" #: manual.docbook:903(para) msgid "" "Here's a quick reference of the above bindings for your convenience. See " " for a basic walkthrough of how the " "pattern editor works." msgstr "" "Aquí hi ha una referència ràpida de les assignacions anteriors. Mira per un exemple sobre com l'editor de patrons " "funciona." #: manual.docbook:918(title) msgid "Mixer" msgstr "Mesclador" #: manual.docbook:921(title) manual.docbook:1755(title) msgid "The Mixer" msgstr "El Mesclador" #: manual.docbook:929(para) msgid "" "The Mixer frame () is useful for tuning a " "global or single volume of the current drumkit. It shows the current peak " "(click on " " to disable, useful on old CPUs) and let you set " "the maximum peak allowed (tune with the fader knob of the instrument), lets " "you modify attributes like pan, play solo " " " " , mute " " or test play only that " "instrument " " ; " "selecting in the Pattern Editor an instrument causes a blue LED to light on " "(near the play button). Near the global volume knob, you can set 3 global " "effect such a swing (shifts a few notes back or forward not randomly), " "timing (modify timings of the notes) and humanize effect (random velocity " "editing)." msgstr "" "L'àrea del mesclador () és útil per afinar el " "volum global o de cada una de les mostres de l'actual kit de bateria. Mostra " "el pic actual (clic a " " per deshabilitar, útil per a velles " "CPU) i et permet habilitar el valor màxim de pic permès (afina-ho amb el " "botó atenuador de l'instrument), et permet modificar atributs com ara " "balanç, tocar en solitari " " , silenciar " " " " o " "provar tocar només aquest instrument " " " " ; seleccionant a " "l'Editor de Patrons un instrument té l'efecte que un LED blau s'encen (aprop " "del botó d'inici de reproducció). Aprop del botó de volum global, pots " "habilitar 3 efectes globals com ara swing (canvia unes poques notes enrere o " "endavant, però no aleatòriament), temps (modificar el temps de les notes) i " "efecte humanitador (edició de la velocitat aleatòria). " #: manual.docbook:972(para) msgid "" "In addition to all this you can set up to 4 special LADSPA effects for each " "instrument switching the " " button. See next section for a " "detailed overview. " " " " " msgstr "" "Amés és possible configurar 4 efectes LADSPA per a cada instrument activant " "el " " botó. Veure la pròxima secció per a més detall. " " " " " " " #: manual.docbook:997(title) msgid "Sound Library (Drumkit Manager)" msgstr "Llibreria de Sò (Gestor del Kit de Bateria)" #: manual.docbook:999(para) msgid "" "The Sound Library saves you time in managing your drum kits, favorite " "patterns, and favorite songs. When making new songs and drum kits, the Sound " "Library makes it easier for you to reuse and mix the instruments and " "patterns from other kits and songs." msgstr "" "La llibreria de sò t'estalvia temps per gestionar els teus kits de bateria, " "patrons preferits, i cançons preferides. Quan crees cançons noves i kits de " "bateria, la Llibreria de Sò et facilita reutilitzar i mesclar instruments i " "patrons des d'altres kits i cançons." #: manual.docbook:1005(title) msgid "System Drumkits" msgstr "Kits de Bateria del Sistema" #: manual.docbook:1007(para) msgid "" "This lists the drumkits that were installed by your system administrator. It " "was determined by the compile-time prefix. On Unix-like operating systems, " "this is usually /usr/share/hydrogen/data/" "drumkits, or possibly /usr/local/" "share/hydrogen/data/drumkits. These kits are available to all " "users on the system, and users are usually not able to add to them." msgstr "" "Això llista els kits de bateria que estàn instalats en el teu administrador " "de sistema. Està determinat per un prefix en temps de compilació. En " "sistemes operatius tipus-unix això és normalment /usr/share/hydrogen/data/drumkits, o possiblement /usr/local/share/hydrogen/data/drumkits. " "Aquests kits estàn disponibles per tots els usuaris del sistema, i els " "usuaris normalment no poden afegir-n'hi." #: manual.docbook:1016(para) msgid "" "To load a drumkit from here, right-click the drumkit and select " "Load. This will replace your current drumkit with " "the one that you selected. To load a single instrument from that kit, left-" "click the plus to the left of the drumkit's name to " "show all the instruments. With your left mouse button, click and drag the " "instrument into your current kit. The instrument will be added to the " "drumkit that you currently have loaded." msgstr "" "Per a carregar un kit de bateria des d'aqui, clica amb el botó dret al kit " "de bateria i selecciona Carregar. Això canviarà " "el kit de bateria actual amb el que hagis seleccionat. Per carregar un sol " "instrument del kit, clica amb el botò esquerre mes " "cap a l'esquerra del nom del kit de bateria per mostrar tots els " "instruments. Amb el botó esquerre del ratolí, clica i arrossega l'instrument " "al kit actual. L'instrument serà afegit al kit de bateria que hagis carregat." #: manual.docbook:1027(title) msgid "User Drumkits" msgstr "Kits de Bateria d'Usuari" #: manual.docbook:1029(para) msgid "" "These are your own drum kits that you can manage yourself. They are usually " "stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by " "selecting InstrumentsSave " "library." msgstr "" "Aquests són els kits de bateria que tu mateix pots gestionar. Normalment es " "guarden a $HOME/.hydrogen/data/drumkits. Quan crees un nou kit de bateria, pots desar-lo aqui seleccionant " "InstrumentsDesar Llibreria." #: manual.docbook:1037(para) msgid "" "Loading drumkits and instruments to use is the same as for the System " "Drumkits (see )." msgstr "" "Els kits de bateria es carreguen de la mateixa manera que els kits de " "bateria del sistema (veure )." #: manual.docbook:1042(title) msgid "Patterns in the Sound Library" msgstr "Patrons en la Llibreria de Sò" #: manual.docbook:1044(para) msgid "" "Before you save your favorite patterns to the sound library, be sure to edit " "it's properties by right-clicking and selecting Properties. There, you can give the pattern a title and a category. You " "can use one of the categories already provided, or create your own " "categories by simply typing in a category name. The category name is " "important, because the patterns will be filed by category in the Sound " "Library." msgstr "" "Assegura't d'etitar les propietats clicant amb el botó dret i seleccionant " "Propietats abans de desar els teus patrons " "preferits a la llibreria de sò. Aquí li potd donar títol i categoria al " "patró. Pots utilitzar alguna de les categories predeterminades o crear-ne " "una de nova simplement escrivint el seu nom. El nom de la categoria és " "important, ja que els patrons es desen per categoria a la Llibreria de Sò." #: manual.docbook:1052(para) msgid "" "You can save your favorite patterns in the sound library by right clicking " "the title of the pattern in the song editor, and selecting Save " "Pattern. It will appear in the Sound Library underneath " "Patterns and the category that you assigned to the " "pattern." msgstr "" "Pots desar els teus patrons preferits a la llibreria de sò clicant amb el " "botó dret al títol del patró dins de l'editor de cançons, i seleccionant " "Desar Patró. Apareixerà a la Llibreria de Sò sota " "Patrons i la categoria que l'hi hagis assignat." #: manual.docbook:1060(title) msgid "Songs in the Sound Library" msgstr "Cançons en la Llibreria de Sò" #: manual.docbook:1062(para) msgid "" "To save songs in the Sound Library, put them in your data directory " "underneath the songs folder (usually " "$HOME/data/songs. To remove them, " "remove the file from that folder." msgstr "" "Per desar les cançons a la Llibreria de Sò, posa-les al directori de dades " "sotta la carpeta cançons (normalment " "$HOME/data/songs). Per esborrar-les, " "esborra el fitxer del directori." #: manual.docbook:1070(title) msgid "Drumkits and Instrument Editing" msgstr "Kits de Bateria i Editant Instruents" #: manual.docbook:1072(para) msgid "" "Creating a new drumkit with Hydrogen is done with the Instrument Editor. " "Using the instrument editor you can load samples, set envelope parameters, " "set the gain, and a few other advanced features like mute groups, low-pass " "resonance filter, and pitch randomization." msgstr "" "Els kits de bateria en Hydrogen es creen amb l'Editor d'Instruments. Amb " "l'editor d'instruments pots carregar mostres, configurar paràmetres " "d'contorn, configurar el guany i uns quants paràmetres més avançats com ara " "enmudir grups, filtre de ressonància passa-baixos, aleatorització del tò." #: manual.docbook:1077(para) msgid "" "Instead of creating your own drumkit, you can also use or download existing " "drumkits using the ." msgstr "" "En comptes de crear el teu propi kit de bateria, pots utilitzar o " "descarregar kits de bateria ja existents utilitzant el ." #: manual.docbook:1084(title) msgid "Concepts" msgstr "Conceptes" #: manual.docbook:1086(para) msgid "" "The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a " "piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a " "note, the sample is simply played back at the right time. There's a few " "concepts and terms that you should understand when you are putting together " "a drumkit. (See for more detailed explanations.)" msgstr "" "El sintetitzador d'Hydrogen està basat en mostres. Una mostra és un fragment " "pre-enregistrat de sò (normalment entre .1 segons i 3 segons). Per fer una " "nota, la mostra simplement es torna a tocar en el moment precís. Hi ha uns " "quants conceptes i termes que hauries d'entendre quan estàs creant un kit de " "bateria. (Veure per més detalls.)" #: manual.docbook:1096(title) msgid "Sampling Synthesizer Terms" msgstr "Termes de Mostreig del Sintetitzador" #: manual.docbook:1098(term) manual.docbook:2114(glossterm) msgid "Sample" msgstr "Mostres" #: manual.docbook:1098(para) manual.docbook:2116(para) msgid "" "A short recording of a sound, typically between .1 and 3.0 seconds long." msgstr "" "Una grabació curta d'un sò, normalment entre .1 i 3.0 segons de duració." #: manual.docbook:1102(term) manual.docbook:1940(glossterm) msgid "Gain" msgstr "Guany" #: manual.docbook:1102(para) msgid "Volume adjustment." msgstr "Ajust de volum." #: manual.docbook:1106(term) manual.docbook:2138(glossterm) msgid "Velocity" msgstr "Velocitat" #: manual.docbook:1106(para) manual.docbook:2140(para) msgid "How hard you hit a note." msgstr "La força amb la que toques la nota." #: manual.docbook:1110(term) msgid "ADSR Envelope Generator" msgstr "Generador d'contorns ADSR" #: manual.docbook:1110(para) msgid "" "An Attack/Decay/Sustain/Release envelope generator. After you trigger a " "note, Hydrogen will attack the note by increasing its " "volume from 0 to the full velocity of the note. After reaching full " "velocity, it will decay the note by lowering the volume " "until it reaches the sustain level. When the note is " "released, Hydrogen reduces the volume from the sustain " "level back down to 0." msgstr "" "Un generador d'contorns per Atac/Decay/Sustain/Release. Una vegada disparada " "una nota, l'Hydrogen l'ataca incrementant el volum des " "de 0 fins a la \"velocitat\" de la nota. Una vegada assolida la velocitat " "maxima, Decau reduïnt el volum fins que arriva al " "nivell de sustain. Una vegada la nota és " "released, l'Hydrogen reduëix el volum des del nivell de " "sustain fins a 0." #: manual.docbook:1121(term) manual.docbook:1807(glossterm) msgid "Attack" msgstr "Atac" #: manual.docbook:1121(para) msgid "" "The amount of time to go from 0 to full " "velocity." msgstr "" "La quantitat de temps per anar de 0 a " "velocitat màxima." #: manual.docbook:1126(term) manual.docbook:1882(glossterm) msgid "Decay" msgstr "Decay" #: manual.docbook:1126(para) msgid "" "The amount of time to go from full " "velocity to the sustain volume." msgstr "" "La quantitat de temps per passar de " "velocitat màxima a volum de sustain." #: manual.docbook:1131(term) manual.docbook:2122(glossterm) msgid "Sustain" msgstr "Sustain" #: manual.docbook:1131(para) msgid "" "The level (how loud) to hold the note " "between the sustain and the release. It is a percentage of the velocity. It " "does not depend on time." msgstr "" "El nivell (com d'alt) que aguanta el " "volum de la nota entre el sustain i el release. És un tant per cent de la " "velocitat. No depèn del temps." #: manual.docbook:1137(term) manual.docbook:2056(glossterm) msgid "Release" msgstr "Release" #: manual.docbook:1137(para) msgid "" "The amount of time to go from the sustain " "volume back down to 0." msgstr "" "La quantitat de remps per passar del " "volum de sustain a 0" #: manual.docbook:1143(para) msgid "" "Typical samples that are used in Hydrogen are: the sound of a single drum " "hit, the sound of a single cymbal hit, the sound of a single cowbell hit. " "Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen " "will play whatever sound you have loaded. So, to put together a drum kit you " "need to gather short recordings of the bass drum, each tom, each cymbal, the " "high hat open, the high hat closed, the snare drum (snare on), the snare " "drum (snare off), rim shots, etc." msgstr "" "Les típiques mostres que utilitza Hydrogen son: el sò d'un tambor de la " "bateria, el sò d'un plat, el sò d'una esquella. Quan poses una nota en el " "patró (o toques una nota utilitzant MIDI), Hydrogen reprodueix qualsevol sò " "que hi hagi carregat. Per tant, per ajuntar un kit de bateria necessites " "recopilar grabacions curtes del bombo, cada tambor, cada plat, el charles " "obert i tancat, la caixa (oberta o tancada), tocs al canto de la caixa, etc." #: manual.docbook:1154(para) msgid "" "However, there are no rules about what a sample can be. It's not uncommon to " "use Hydrogen to trigger non-drum sounds like: audio clips of people talking, " "a clip from a song, sound effects, audio clips from movies, and famous " "people speaking. Be creative!" msgstr "" "De totes maneres, no hi ha regles en quant a què pot ser una mostra. No es " "extrany utilitzar Hydrogen per disparar sons que no son de bateria: clips " "d'àucio de gent xerrant, un tros d'una cançó, efectes de sò, clips d'àudio " "de pelicul.les, gent famosa parlant... Siques creatiu!" #: manual.docbook:1163(title) msgid "Creating a New Drumkit" msgstr "Creant un nou Kit de Bateria" #: manual.docbook:1165(para) msgid "" "To start a brand new drum kit, select InstrumentsClear All . This will give " "you a bank of 32 blank instruments. To delete instruments, right-click on on " "each instrument and select Delete Instrument. To " "add more instruments, select InstrumentsAdd instrument ." msgstr "" "Per crear un kit de bateria nou de trinca, selecciona " "Instruments Netejar Tot . Això et donarà un banc de 32 instruments. Per esborrar " "instruments, clica amb el botó dret a cada instrument i selecciona " "Esborra Instrument. Per afegir instruments, " "selecciona Instruments Afegeix " "instrument ." #: manual.docbook:1184(para) msgid "" "Select an instrument to start editing it. This is done by left-clicking on " "the name of the instrument in the instrument list (at the left). You will " "notice that the name of the instrument in the Instrument Editor matches the " "one that you clicked." msgstr "" "Selecciona un instrument per començar a editar-lo. Això es fa clicant amb el " "botó esquerre al nom de l'instrument a la llista d'instruments (a " "l'esquerra). T'adonaràs que el nom de l'instrument a l'Editor d'Instruments " "és igual al que has clicat." #: manual.docbook:1189(para) msgid "" "After you have your drum kit working the way you want, select " "InstrumentsSave library . It will ask you for the name of the kit to save. " "If you wish to overwrite an existing kit, you will need " "to type in the same name as the kit that you want to replace." msgstr "" "Una vegada tens el teu kit de bateria configurat com vols, selecciona " " Instruments Desar " "Llibreria . Et demanarà pel nom del kit a desar. " "Si desitges sobreescriure un kit ja existent, has de " "posar el mateix nom que tenia el kit que vols canviar." #: manual.docbook:1200(para) msgid "" "Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits)." msgstr "" "Els Kits de Bateria es guarden automàticament al directodi de dades (p.e. " "$HOME/data/drumkits)." #: manual.docbook:1204(para) msgid "" "To export a drumkit (for sharing with others), it must first be loaded into " "your Sound Library. Then, select InstrumentsExport library from the " "menu. Select the drum kit that you wish to export, and give it a file name " "to save it to." msgstr "" "Per exportar un kit de bateria (i compartir-lo amb altres), primer ha " "d'estar carregat a la teva Llibreria de Sò. Llavors selecciona " "InstrumentsExportar " "llibreria al menú. Selecciona un kit de bateria " "per exportar i dona-li un nom per desar-lo." #: manual.docbook:1217(title) msgid "Creating an Instrument and Layers" msgstr "Creant Instruments i Capes" #: manual.docbook:1219(para) msgid "" "For each instrument in a drum kit, you can load several samples and set " "different synthesizer parameters. This section will step you through how to " "create a new instrument and load the samples." msgstr "" "Pots carregar vàries mostres i configurar diferents paràmetres de " "sintetitzador per a cada instrument d'un kit de bateria. Aquesta secció et " "guiarà en com crear un nou instrument i carregar les mostres." #: manual.docbook:1223(para) msgid "" "To begin creating an instrument, select InstrumentsAdd instrument. This will " "give you a blank instrument to start from." msgstr "" "Per començar a crear un instrument, selecciona " "InstrumentsAfegir instrument. Això et donarà un instrument en blanc per " "començar." #: manual.docbook:1230(para) msgid "" "Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides " "several in the data/drumkits " "directory." msgstr "" "Ara necessites dues mostres. Qualsevol fitxer .WAV o .FLAC servirà. Hydrogen " "en proporviona vàries al directori data/" "drumkits." #: manual.docbook:1234(para) msgid "" "In the instrument editor, click on Layers. You can " "layer several samples into the instrument. Which one is played depends on " "the velocity of the incoming note. Click Load Layer " "and point the Audio File Browser to your sample. Note " "that the Audio File Browser will allow you to preview the " "sample before you load it. It will also allow you to load more than one " "sample at a time. But for now, only load one." msgstr "" "A l'editor d'instruments, clica a Capes. Pots posar " "vàries mostres com a capes per a l'instrument. Quina és tocada depèn de la " "velocitat de la nota entrant. Clica Carregar Capa i " "apunta al Navegador de Fitxers d'Àudio per a carregar la " "teva mostra. Fixa't que el Navegador de Fitxers d'Àudio " "et permetrà pre-escoltar la mostra abans de carregar-la. També et permet " "carregar més d'una mostra a cada moment. Però de moment només en carregarem " "una." #: manual.docbook:1243(para) msgid "" "After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To " "load a second sample, click the slot just below it, and then click " "Load Layer to bring in another sample." msgstr "" "Una vegada carregada la mostra, veuràs que ara hi ha un 1 a dalt, i que el rectangle s'ha tornat blau cel. Per carregar una " "segona mostra, clica la posició just a sota, llavors clica " "Carregar Capa per posar-hi una nova mostra." #: manual.docbook:1249(para) msgid "" "After bringing in both samples, you'll probably notice that only the " "first sample is being played whenever you trigger the " "instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light " "blue rectangles and you see that you get a left-right drag cursor. Now drag " "the sample to the left or right (like a curtain). You will now see Layer 2 " "appear." msgstr "" "Després de portar en ambdues mostres, segurament t'adonaràs que només la " "primera mostra es toca quan dispares l'instrument. Això " "és per que has de configurar els rangs de velocitat en " "les capes. Mou el ratolí per les bandes dels rectangles blau cel i veuràs " "que tens un cursor per a arrossegar d'esquerra a dreta. Ara arrossega la " "mostra cap a l'esquerra o la dreta (com una cortina). Veuràs la segona capa " "aparèixer." #: manual.docbook:1257(para) msgid "" "The velocity setting for the layer is 0-velocity on the left, and full " "velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 " "to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)" msgstr "" "La configuració de velocitat per a una capa de velocitat 0 és a l'esquerra, " "i velocitat màxima a la dreta. Configura la capa 1 per sonar per les notes " "fluixes, i la capa 2 per les notes fortes (p.e. capa 1 a l'esquerra i la " "capa 2 a la dreta.)" #: manual.docbook:1262(para) msgid "" "Now, in the pattern area, set up a simple pattern that plays this " "instrument. Adjust the velocity settings on each note so that you can get " "the different samples to sound. Now set the pattern to loop and notice how " "your different samples are getting triggered. (To learn about editing a " "pattern, see )" msgstr "" "Ara, a l'àrea de patrons, configura un patró simple que tocarà aquest " "instrument. Ajusta els paràmetres de velocitat a cada nota per conseguir que " "les diferents mostres sonin. Ara configura el patró per repetir-se i fixa't " "com les mostres es van disparant. (Per apendre com editar un patró, mira " ")" #: manual.docbook:1269(para) msgid "" "For each layer, you can set the Gain and the " "Pitch. The pitch also has a Fine adjustment." msgstr "" "Per cada capa, pots configurar el Guany i el " ". El tò també té un botó d'ajustament " "." #: manual.docbook:1273(para) msgid "" "Use the Gain adjustment to control how loud the " "sample will play. This is necessary because it's extremely difficult to get " "a set of samples that all sound at about the same volume. By adjusting here, " "the samples that were recorded too quietly can be turned up to match your " "loud samples (that had to be turned down)." msgstr "" "Ajusta el Guany per controlar el volum de reproducció " "de la mostra. És necessari ja que és extremament dificil conseguir un " "conjunt de mostres que sonin exactament al mateix volum. Ajustant-ho aqui, " "les mostres que s'han enregistrat massa fluixes es poden amplificar per a " "que sonin igual que les mostres més altes (que segurament s'han hagut " "d'atenuar)." #: manual.docbook:1281(para) manual.docbook:1406(para) msgid "" "It is very easy to set the Gain too high, causing " "your sample to clip. Remember to test the gain with full-velocity notes. If " "you clip your signal here, it will only get worse as Hydrogen processes it." msgstr "" "És molt fàcil posar el Guany massa alt, provocant que " "la mostra es saturi. Recorda provar el guany a velocitat màxima. Si satures " "la senyal aqui, serà pitjor quan Hydrogen ho processi." #: manual.docbook:1287(para) msgid "" "The pitch of the sample can be modified with the pitch controls. The " "Pitch knob adjust the pitch in musical half-steps. " "(So, -12 is down 1 octave). The pitch on the right adjusts the pitch " "±50 cents. (One half-step is 100 cents.)" msgstr "" "El tò de la mostra pot ser modificat amb els controls de tò. El controlador " "de ajusta el tò en migs tons misicals. (Per tant, -" "12 és una octava). El tò a la dreta ajusta el tò ±50 Centèssimes. " "(Mig tò són 100 centèssimes)" #: manual.docbook:1293(para) msgid "" "The pitch is adjusted by playing the sample back faster or slower. This is " "called the Dopplar Effect. So, if you have a 1-second sample that you turn " "down -12 (1 octave), you sample will only last for .5-seconds." msgstr "" "El tò s'ajusta tocant la mostra més ràpidament o més lentament. És " "l'anomenat Efecte Doppler. Per tant, si tens una mostra d'un segon i tires " "cap a -12 (1 octava), la teva mostra només durará mig segon." #: manual.docbook:1300(title) msgid "Instrument Parameters" msgstr "Paràmetres d'Instruments" #: manual.docbook:1302(para) msgid "" "In the instrument editor, click on the General " "button. Here you can adjust several parameters that are for the whole " "instrument (not for each layer). The parameters that you can adjust are:" msgstr "" "A l'editor d'instruments, clica al botó General. Aqui " "pots ajustar varis partàmetres per a tot l'instrument (no per a cada capa " "per separat). Els paràmetres que aqui pots ajustar son:" #: manual.docbook:1309(para) msgid "" "Envelope parameters: Attack, Decay, Sustain, " "Release. (See )" msgstr "" "Paràmetres d'contorn: Atac, Decay, Sustain, " "Release. (See )" #: manual.docbook:1315(para) msgid "" "Gain: The overall " "volume of the instrument." msgstr "" "Guany: El volum " "general de l'instrument." #: manual.docbook:1319(para) msgid "" "Mute Group: Which " "mute group this instrument is a member of (see )." msgstr "" "Enmudir Grup: Treu " "el volum del grup del que aquest instrument és membre (veure )." #: manual.docbook:1324(para) msgid "" "Filter Parameters: Bypass, Cutoff, Resonance." msgstr "" "Paràmetres de filtre: Bypass, Cutoff, Ressonància." #: manual.docbook:1329(guibutton) msgid "Random Pitch" msgstr "Tò Aleatori" #: manual.docbook:1334(para) msgid "" "It's important that you understand in order to continue on." msgstr "" "És important que entenguies els per tal de continuar." #: manual.docbook:1339(title) msgid "Envelope Parameters" msgstr "Paràmetres d'Envolupant" #: manual.docbook:1341(para) msgid "" "When the instrument is triggered, its volume is run through an ADSR " "Envelope. The parameters operate as follows:" msgstr "" "Quan l'instrument és disparat, el seu volum passa per un contorn ADSR. Els " "seus paràmetres són els següents:" #: manual.docbook:1353(para) msgid "" "The attack, decay, and release parameters are all set by the number of " "audio samples. This means that the time changes " "depending on the sample rate of your sound card. The max time for each of " "them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz)." msgstr "" "Els paràmetres d'atac, decay i release es configuren tots a partir del " "nombre de mostres d'àudio. Això significa que el temps " "canvia segons la freqüència de mostreig de la teva tarja de sò. El màxim de " "temps és 100.000 mostres d'àucio (típicament, 2,27 segons a 44.1 kHz)." #: manual.docbook:1346(para) msgid "" "Attack— the amount of " "time that the volume of the sample goes from 0 to the " "full velocity of the note. If the value is 0, the sample will play " "immediately at full velocity. If the value is 1.0, the sample volume will " "use the maximum time available for the attack paramater." msgstr "" "Atac— la quantitat de " "temps que el volum de la mostra triga a anar de 0 al " "volum de velocitat màxima. Si el valor es 0, la mostra es reproduirà " "inmediatament a velocitat màxima. Si el valor és 1.0, el volum de la mostra " "farà servir el temps màxim disponible per al paràmetre d'atac." #: manual.docbook:1362(para) msgid "" "Decay— the amount of " "time for the volume of the sample to go from full " "velocity down to the sustain volume. If the value is 0, the sample will " "immediately skip from the attack volume to the sustain volume. If the value " "is 1.0, the sample volume will use the maximum time available for the decay " "parameter." msgstr "" "Decay— la quantitat de " "temps per al volum de la mostra a anar de velocitat " "màxima fins al nivell de volum de sustain. Si el valor és 0, la mostra " "evitarà el volum d'atac i anirà directament al nivell de sustain. Si el " "valor és 1.0, el volum de la mostra utilitzarà el màxim de temps disponible " "per al paràmetre decay." #: manual.docbook:1371(para) msgid "" "Sustain— the volume to play the note after the decay phase is over, and until the note " "is released. If set to 0, the note will be silent. If set to 1.0, the note " "will play at full velocity." msgstr "" "Sustain— el volum al que es tocarà la nota un cop la fase de decay s'ha acabat, i " "fins que la nota es deixa anar. Si està a 0 la nota serà silenciosa. Si està " "a 1.0, la nota es tocarà a velotitat màxima." #: manual.docbook:1378(para) msgid "" "Release— the time to fade out the note from the sustain volume back down to 0 " "(silent). If set to 0, the note will fade out in the minimum amount of time " "(about 5 ms). If set to 1, it will fade out for the maximum time available." "" msgstr "" "Release— el temps d'atenuar la nota des del nivell de sustain a silenci. Si està a " "0, la nota s'atenuarà en el valor mínim de temps (mes o menys, 5 ms.). Si " "està a 1, s'atenuarà durant la major quantitat de temps disponible. " "" #: manual.docbook:1387(para) msgid "" "If the sample is shorter than the times that you specify, the sample will " "end, regardless of which phase of the ADSR it is in. If the note is " "sustained, it does not draw out the note while you are " "holding it. It only holds the gain (volume) parameter during that time." msgstr "" "Si la mostra és més curta que els temps especificats, la mostra acabarà, " "sigui quina sigui la fase de l'ADSR en que es trobi. Si la nota està en " "sustain, no dibuixa la nota mentre l'estàs aguantant. " "Només aguanta el paràmetre guany (volum) durant aquest temps." #: manual.docbook:1396(title) msgid "Gain and Mute Group" msgstr "Guany i Enmudir Grup" #: manual.docbook:1398(para) msgid "" "The gain sets the overall volume for the sample. This gain is applied after " "the gain that you set for the layer, and before the gain that is set for the " "mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 " "the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is " "set higher, the samples will be amplified." msgstr "" "El guany configura el volum general de la mostra. Aquest guany és aplicat " "després del guany aplicat a nivell de capa, i abans del guany seleccionat " "per al mesclador. Si el Guany és 0, l'instrument no se sentirà. Si el guany " "és 1.0, el volum de les mostres no serà ajustat (p.e. 0 dB). Si el guany és " "major, les mostres seràn amplificades." #: manual.docbook:1412(para) msgid "" "Hydrogen provides more mute groups than you know what to do with (over 256). " "A mute group is a grouping of instruments that are mutually exclusive " "— only one instrument may be playing at any time. If one is playing " "and another instrument in the group is triggered, it will immediately " "silence (mute) and start playing the other instrument. This is useful, " "especially, for instruments like hi-hats where the open sound and the closed " "sound are different instruments." msgstr "" "Hydrogen proporciona més grups per a enmudir dels que sabràs què fer-hi (cap " "a 256). Un grup per enmudir és una agrupació d'instruments que són " "mutualment exclusius — només un instrument pot estar-se tocant en un " "determinat moment. Si un s'està tocant i un altre instrument d'aquest grup " "és disparat, serà inmediatament silenciat (mut) i començarà a tocar-se " "l'altre instrument. És útil, sobretot per a instruments com ara el charles " "en els que el sò obert i el sò tancat són instruments diferents." #: manual.docbook:1421(para) msgid "" "If the mute group is set to Off, then the instrument is " "not part of any mute grouping. If the mute group is set to any number, then " "that is the group that the instrument is a part of. To set other instruments " "into the same grouping, set their mute group parameter to the same number. " "(For example, to group all the high-hat instruments, you can set all their " "mute group parameters to 1. To have a snare drum mute group, set their mute " "group parameters to 2.)" msgstr "" "Si el grup d'enmudiment està Desactivat, l'instrument " "no és una part de cap grup d'enmudiment. Si el grup d'enmudiment està " "activat a qualsevol nombre, aleshores aquest és el grup al que l'instrument " "està assignat. Per posar altres instruments en el mateix sac, selecciona que " "el seu grup d'enmudiment tingui el mateix nombre. (Per exemple, per agrupar " "tots els charles, pots posar-los el seu grup d'enmudiment a 1. Per tenir la " "caixa dins d'un altre grup, posa el seu grup a 2.)" #: manual.docbook:1433(title) msgid "Filter and Random Pitch" msgstr "Filtre i Tò Aleatori" #: manual.docbook:1435(para) msgid "" "The filter is a low-pass resonance filter. If you don't wish to use is, " "click the BYPass button so that it's red. If it's not " "red, then the filter is active. The cutoff parameter adjusts the cutoff " "frequency for the filter. The resonance parameter adjusts how much to " "resonate the cutoff frequency. If the resonance is set to 0, then the filter " "is just a simple low-pass filter." msgstr "" "El filtre és un filtre passa-baixos ressonant. Si no vols fer-lo servir, " "clica BYPass per a que es posi el botó vermell. Si no " "està vermell, el filtre està actiu. El paràmetre cutoff ajusta la freqüència " "de tall pel filtre. El paràmetre de ressonància ajusta com ressonarà la " "freqüència de tall. Si la ressonància està a 0, el filtre és un simple passa-" "baixos." #: manual.docbook:1444(para) msgid "" "The cutoff frequency of the filter varies with the sample rate of your audio " "card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample " "rate." msgstr "" "La freqüència de tall del filtre varia amb la freqüència de mostreig de la " "teva tarja de sò. El rang del botó (de 0 a 1.0) està optimitzat per a una " "freqüència de mostreig de 48.000 kHz." #: manual.docbook:1462(para) msgid "" "The random pitch paramater allows you to randomly vary the pitch of the " "sample every time it is triggered. The value is set between 0 and 1.0. The " "pitch change is fairly small: ±2 half-steps × value. Using this " "sparingly can help your sequences to sound more like a real drummer." msgstr "" "El paràmetre de tò aleatori et permet canviar aleatòriament el tò de la " "mostra cada cop que s'executa. El valor està entre 0 i 1.0. El canvi de tò " "és bastant petit: ±2 mig-tons × valor. Utilitzant-lo " "inteligentment pot ajudar-te a conseguir seqüències que sonen més a un " "bateria humà." #: manual.docbook:1471(title) msgid "Tips on Editing Instruments" msgstr "Consells a l'Editar Instruments" #: manual.docbook:1473(para) msgid "" "With all of the different parameters available to tweak, it can be difficult " "to set up something that sounds nice when you're done. Here's a few tips on " "setting up an instrument:" msgstr "" "Amb tots els paràmetres que hi ha per configurar, pot ser dificil trobar " "quelcom que soni bé. Aquí tens uns consells per configurar un instrument:" #: manual.docbook:1477(para) msgid "" "Turn down the gain. Every time you have a " "gain knob (i.e. an amplifier), this is called a gain stage. With every gain stage you have, it's easy to overdrive your " "signal — which means the signal gets distorted by clipping. In " "addition, if you have two samples that, by themselves, peg your meters " "— what do you think happens when you combine them? That's right, you " "overdrive the signal again." msgstr "" "Baixa el guany. Cada cop que tens un " "selector de guany (p.e. un amplificador), d'això se'n diu una " "etapa de guany. Amb cada etapa de guany és fàcil " "saturar la senyal — el que significa que la senyal es distorsiona per " "retall. Amés, si tens dues mostres que, per elles mateixes, claven els teus " "indicadors — et pots imaginar que passarà quan les combinis? " "Efectivament, saturaràs el guany de la senyal." #: manual.docbook:1485(para) msgid "" "If things sound bad and distorted, start by turning down the gain setting on " "the layer... especially if it's larger than 1.0. Then turn down the " "instrument gain. Then any gain on a LADSPA effect. Then the fader on the " "mixer. Then the master output fader." msgstr "" "Si les coses sonen malament i distorsionades, comença baixant el guany a la " "capa... especialment si és major a 1.0. Llavors passa a baixar el guany de " "l'instrument, Llavors qualsevol guany en els efectes LADSPA. Llavors a " "l'atenuador del mesclador. Llavors a l'atenuador del volum de sortida " "principal." #: manual.docbook:1490(para) msgid "" "Test samples at full velocity. Your " "sample will be played louder if the velocity is higher. So, if you set " "everything to sound nice and full with velocity at 0.7, what will happen " "when you get a full velocity of 1.0? (Hint: clipping.)" msgstr "" "Prova les mostres a velocitat màxima. La " "teva mostra serà tocada més fort si la velocitat és més alta. Per tant, si " "ho configures tot per a que soni bé a velocitat màxima 0.7, què passarà quan " "tinguis una velocitat màxima d'1.0? (Pista: retall...)" #: manual.docbook:1496(para) msgid "" "Try to use samples that are -6 dB max. " "Visually, this means samples that peak at only 1/2 of full scale. Otherwise, " "turn your layer gain to about .5." msgstr "" "Intenta utilitzar mostres de com a màxim -6 dB Visualment, això vol dir que les mostres arribaràn com a màxim a " "mitja escala. D'una altra manera, canvia el guany de la capa aproximadament " "a .5." #: manual.docbook:1501(para) msgid "" "Remove all DC offsets from the sample. In " "a sample editor, there is usually a line down the center of your sample's " "waveform. This is the zero-line. The beginning of your sample should be on " "this line. The end of your sample should also be on this line. However, if " "your signal is a little above or a little below this line, you will hear a " "click at the beginning and the end of your sample whenever it is played. If " "your sample editor doesn't provide any tools to fix a DC Offset problem, you " "can eliminate the noise by putting a slight fade-in/out at the ends of your " "sample." msgstr "" "Treu qualsevol compensació de DC de la mostra. En un edotor de mostres, normalment hi ha una linea cap al mig de " "l'ona de la mostra. Aquesta és la línea de zero. El començament de la teva " "mostra hauria de ser en aquest línea. El final de la teva mostra també " "hauria d'estar en aquesta línea. De totes manesre, si la teva senyal està " "una mica pe sota o per sobre de la linea, sentiràs un clic al començament i " "al final de qualsevol mostra tocada. Si el teu editor de mostres no té cap " "eina per a arreglar un problema de compensació de DC, pots eliminar el " "soroll posant un lleugera atenuació a l'inici i final de la mostra." #: manual.docbook:1511(para) msgid "" "The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the " "attack and delay — the sample will stop playing at the end." msgstr "" "L'ADSR no ha de ser més llarg que la teva mostra. Si tens una mostra curta, no importa quant posis a l'atac i decay " "— la mostra acabarà igual." #: manual.docbook:1516(para) msgid "" "Things change with the sample rate. If " "you have a really nice setup with all your parameters painstakenly " "tweaked... things will change if you change the sample " "rate of your audio card. Many of Hydrogens internal settings and parameters " "are done based on how many samples go by, and not on how many seconds go by. " "The sort of things that change are: anything time-base (like attack and " "release) and anything frequency based (like the cutoff frequency)." msgstr "" "Les coses canvien amb la freqüència de mostreig. Si tens un setup ben posat amb tots els teus paràmetres ben " "configurats... les coses cambiaràn si canvies la " "freqüència de mostreig de la tarja de sò. Alguns dels paràmetre interns de " "l'Hydrogen estan fets i basats en quantes mostres tens, i no quants segons " "passen. Les coses que poden canviar son: qualsevol cosa basada en el temps " "(com ara atac i release) i qualsevol cosa basada en la freqüència (com ara " "la freqüència de tall)." #: manual.docbook:1529(title) msgid "LADSPA plugins" msgstr "Plugins LADSPA" #: manual.docbook:1531(para) msgid "" "Hydrogen can also add effects to sounds using any LADSPA plugin library. You " "need to have installed the LADSPA sources (available from http://www.ladspa.org) and while this will " "give a rough idea of how it works you should really have a taste of the real " "thing installing one or more plugin libraries, it's as simple as a " "scons && scons install. Here are a few places to " "download plugin libraries:" msgstr "" "Hydrogen també afecta als sons fent servir qualsevol plugin LADSPA. Has de " "tenir instalades les fonts de LADSPA (disponibles a ) i mentre això et donarà una idea genèrica de com funciona, " "hauries de provar el tema instalant algun plugin, és tan fàcil com " "scons && scons install. Aqui hi ha alguns llocs " "d'on descarregar plugins:" #: manual.docbook:1541(para) msgid "" "SWH-Plugins available at http://plugin." "org.uk. Note that before compiling these plugins you need the FFTW " "tarball from http://www.fftw.org." msgstr "" "SWH-Plugins disponibles a http://plugin." "org.uk. Fixa't que abans de compilar aquests plugins necessites el " "fitxer tar amb el FFTW de http://www.fftw." "org." #: manual.docbook:1548(para) msgid "" "CMT available at http://www.ladspa.org." msgstr "" "CMT disponible a http://www.ladspa.org." #: manual.docbook:1552(para) msgid "" "TAP available at http://tap-plugins." "sf.net." msgstr "" "TAP disponible a http://tap-plugins." "sf.net." #: manual.docbook:1558(title) msgid "Plugins Kill" msgstr "Matar Plugins" #: manual.docbook:1559(para) msgid "" "A LADSPA plugin is compiled, executable code. It is capable of hanging, " "crashing, freezing, screaching, overflowing buffers, and even phoning home. " "If you start having issues with Hydrogen, disable your plugins and see if " "things improve. Some plugins are not designed for real-time use, and some " "are just plain better than others." msgstr "" "Un plugin LADSPA és codi executable, compilat. Pot penjar, petar, congelar, " "saturar buffers i fins i tot telefonar a casa. Si comences a tenir problemes " "amb l'Hydrogen, desactiva els plugins i mira si el problema millora. Alguns " "plugins no estan dissenyats per a ser utilitzats en temps real, i alguns " "simplement son millors que altres." #: manual.docbook:1566(para) msgid "" "Once you have installed a few plugins open a song you'd like add an effect " "to and select an instrument that has a few beats in the pattern. In the " "Mixer click on " " and select one of the four available effect " "line Click on the Edit button ( " " " " ), than on Select " "the FX: this will bring up another window () that lets you choose an effect amongst those installed, " "they are alphabetically sorted and categorized. Once you're done, adjust the " "level from the mixer and start playing. Each round knob in the FX part " "controls the level of its effect. " " If you want to quickly " "enable/disable the effect click the Bypass ( " " " " ) button." msgstr "" "Un cop hagis instalat uns quants plugins, obre una canç'a la que t'agradaria " "afegir-li un efecte i selecciona un instrument que estigui en algun paró. " "Clica a en el mesclador, selecciona " "una de les quatre " "linies d'efectes i clicaal botó Editar ( " " " " ), a " "Seleccionar l'efecte: això obrirà una nova finestra () que permet escollir un efecte entre els " "instalats, estan ordenats alfabèticament i categoritzats. Una vegada fet, " "ajusta el nivell del mesclador i dona-li a tocar. Cada selector de la part " "de l'efecte controla el nivell pel seu efecte. " " " " Si vols " "habilitar/deshabilitar ràpidament, clica a Bypass ( " " " " )." #: manual.docbook:1610(title) msgid "Select an Effect" msgstr "Selecciona un Efecte" #: manual.docbook:1629(title) msgid "A new song" msgstr "Una nova cançó" #: manual.docbook:1631(title) msgid "\"Song\" mode and \"Pattern\" mode" msgstr "Mode \"Cançó\" i mode \"Patró\"" #: manual.docbook:1633(para) msgid "" "This is just a quick-and-dirty walkthrough to Hydrogen. Refer to the " "tutorial for a more detailed overview." msgstr "" "Això és una passada ràpida per Hydrogen. Mira't el tutorial per a més " "detalls." #: manual.docbook:1636(para) msgid "" "Hydrogen has 2 main modes: \"Pattern\" mode and \"Song\" mode (refer to " " for the buttons to activate). When " "\"Pattern\" mode is activated the current pattern is continously repeated, " "so to help changing it until we don't like it, while \"Song\" mode repeats " "only the current pattern: this is useful when putting together the patterns, " "to create the whole structure for the song." msgstr "" "Hydrogen té dos modes principals: \"Patró\" i \"Cançó\" (mira per als botons d'activació). Quan el mode actiu és " "\"Patró\" només es reprodueix el patró actiu, el que és útil per a modificar-" "lo fins que ens agradi. En canvi, el mode \"Cançó\" només repeteix el patró " "actual en els moments que estan seleccionats en la parrilla que crea la " "estructura de la cançó." #: manual.docbook:1645(title) msgid "A new pattern" msgstr "Un nou patró" #: manual.docbook:1647(para) msgid "" "We'll start from an empty song with an empty pattern, as created by default: " "\"pattern\" mode should be selected now. It is also possible to change name " "of the pattern. Now let's click on the Play button and while " "the pattern is playing let's add notes in the grid of the Song Editor () simply left_mouse_clicking on it: adjust " "grid resolution and BPM speed if needed. Rememeber some constraints of the " "grid: if you are working with a resolution of 16 you can't go back to 8 and " "remove a 16th note; same thing happens if you are working with a resolution " "of 8 and you try to insert a note in the middle of two bars (looking for a " "16 bars precision): they will be placed on the previous or on the following " "8th bar (unless you choose off from the Grid Resolution LCD, " "in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before " "adding notes in the Pattern Editor!" msgstr "" "Començarem amb una cançó buida i un patró buit, creat per defecte: s'ha de " "seleccionar el mode \"patró\". També és possible canviar el nom del patró. " "Ara clica a Reproduïr i mentre el patró es va reproduïnt " "anirem afegint notes a la graella de l'Editor de Cançons () clicant-hi amb el ratolí: ajusta la resolució de " "la graella i la velocitat en PPM si ho necessites. Recorda algunes " "restriccions de la graella: si estàs treballant en una resolució de 16 no " "pots tornar a 8 per treure un setzè de nota; el mateix passa amb el vuitè de " "barra (si no selecciones desctivar la resolució per graella: " "en aquest cas pots posar les notes on vulguis). Assegura't de seleccionar el patró correcte a l'Editor de Cançons abans " "d'afegir notes a l'Editor de Patrons!" #: manual.docbook:1674(title) msgid "A new sequence" msgstr "Una nova seqüència" #: manual.docbook:1676(para) msgid "" "Once patterns are created (), we can " "copy/paste/delete them simply dragging with the mouse (activate the select " "mode for the Song Editor and keep pressed left mouse button to select those " "you want to move or copy)." msgstr "" "Una vegada creats els patrons (), es " "poden copiar/enganxar/esborrar arrossegant-les amb el ratolí (ha d'estar " "seleccionat el mode de selecció en l'Editor de Cançons i tenir apretat el " "botó dret del ratolí per a seleccionar la zona que vols moure o copiar)." #: manual.docbook:1682(title) msgid "Inserting Notes in a Pattern" msgstr "Afegir Notes a un Patró" #: manual.docbook:1693(title) msgid "Adjust from the mixer" msgstr "Ajustar al mesclador" #: manual.docbook:1695(para) msgid "" "Of course we can always use the mixer window, either when creating or " "playing patterns." msgstr "" "Per descomptat sempre es pot utililtzar la finestra del mesclador, tant " "mentre estem creant els patrons com quan s'estan reproduïnt." #: manual.docbook:1698(para) msgid "" "The Mixer frame () is made of 32 independent tracks, each of these is binded to an instrument, plus a \"Master Output\" line to adjust general output volume and a \"FX\" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The \"Mute\" button , simply mute that instrument. The maximun peak indicates the maximun volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter." msgstr "" "L'àrea del mesclador () es compòn de 32 " "pistes independents, cada una assignada a un instument, amés d'una \"Sortida " "General\" per a ajustar el nivel general de volum de sortida i un botó " "d'\"Efectes\" per configurar efectes. Cada línea té 3 botóns ( " " " " " " " "" " ), ajust de balanç ( " "" " ), el pic màxim actual, l'atenuador de volum i el nom de la pista. " "Clicant a reproduirà l'instrument, tallant als altres. El " "botó d'\"Enmudir\" " " silencia aquest " "instrument. El nivell màxim de pic indica el volum màxim al que ha arribat " "l'instrument; el pic ha d'estar entre 0.0 i 1.0 (a pots veure uns quants volums massa alts), si no es distorsionarà " "produïnt un sò extrany (especialment amb el controlador OSS), en aquest cas " "és millor baixar el volum; atenció a cada contador." #: manual.docbook:1765(title) msgid "Glossary" msgstr "Glossari" #: manual.docbook:1767(para) msgid "" "This is a glossary of general terms encountered when using Hydrogen, " "synthesizers, drums, or samplers. The definitions in the text are " "simplified, but the definitions here are more general and have more " "explanation. For example, the text of the manual would have you believe that " "an ADSR is the only kind of envelope generator, and could only ever control " "the volume. While it's simple for new users, it's not quite right." msgstr "" "Aquest és un glossari dels termes generals més utilitzats en Hydrogen, " "sintetitzadors, bateries o samplers. Les definicions en aquest text estàn " "simplificades, però les definicions d'aqui són meés generals i tenen més " "explicacions. Per exemple, el text del manual et pot donar la idea que ADSR " "és l'unic tipus de generador d'contorns, i que només pot controlar el volum. " "Això és simple i convenient per als nous usuaris, però no és ben ben " "correcte." #: manual.docbook:1780(glossterm) msgid "ADSR" msgstr "ADSR" #: manual.docbook:1782(para) msgid "" "A type of envelope generator that allows you to control the Attack, Decay, " "Sustain, and Release parameters. Generally, the parameters are proportional to " "the velocity." msgstr "" "Un tipus de generador d'contorns que et permet controlar l'Arac, Decay, Sustain, i Release. Generalment, els paràmetres són propircionals a la velocitat." #: manual.docbook:1791(para) msgid "" "In Hydrogen, the ADSR envelope generator only controls the volume " "(attenuation)." msgstr "" "A Hydrogen, el generador d'contorns ADSR només control el volum (atenuació)." #: manual.docbook:1794(para) msgid "" "Read more about this in the Wikipedia Article ADSR Envelope" msgstr "" "Llegeix més sobre el tema a l'article de la Wikipedia ADSR Envelope" #: manual.docbook:1809(para) msgid "" "This is the first phase of an ADSR envelope, and is the amount of " "time to turn the parameter up from 0 to full velocity " "after triggering the note." msgstr "" "Aquesta és la primera fase d'un contorn ADSR, i és la quantitat de " "temps per actirav el paràmetre des de 0 a velocitat " "màxima un cop disparada la nota." #: manual.docbook:1818(glossterm) msgid "Attenuation" msgstr "Atenuació" #: manual.docbook:1820(para) msgid "" "In filters and mixers, this the amount that a signal is reduced (volume)." msgstr "" "En filtres i mescladors, la quantitat en que és reduïda una senyal (volum)." #: manual.docbook:1830(glossterm) msgid "Band-Pass Filter" msgstr "Filtre passa-bandes" #: manual.docbook:1832(para) msgid "" "A filter that preserves a cetertain band of frequencies, and attenuates " "(silences) all others. This is often done by combining a high-pass and a low-" "pass filter." msgstr "" "Un filtre que preserva un determinat rang de freqüències, i atenua " "(silencia) tota la resta. Normalment es fa combinant un filtra passa-alts i " "un filtre passa-baixos." #: manual.docbook:1845(glossterm) msgid "Clipping" msgstr "Retall" #: manual.docbook:1847(para) msgid "" "A phenomenon that happens to a signal when the signal is too large for " "whatever is receiving it. The peaks of the signal (which are normally smooth " "curves) get cut off straight at the max volume (clipped). This distorts the " "sound and is usually undesirable." msgstr "" "Un fenòmen que li passa a una senyal quan aquesta és massa gran per al " "receptor. El pic de la senyal (que normalment es una corva suau) és tallat " "al volum màxim (tall). Això distorsiona el sò i acostuma a ser indesitjable." #: manual.docbook:1852(para) msgid "" "An example of clipping is when you play music louder than your speaker can " "handle. Parts of the music sound harsh and fuzzy." msgstr "" "Un exemple de retall és quan toques música més alt del que el teu altaveu " "pot suportar. Parts de la música sonen distorsionats." #: manual.docbook:1858(glossterm) msgid "Cutoff Frequency" msgstr "Freqüència de tall" #: manual.docbook:1860(para) msgid "" "On high-pass and low-pass filters, this is the frequency that divides " "between those that pass, and those that are attenuated (silenced). In a high-" "pass resonance filter, or a low-pass resonance filter, the cutoff is also " "the frequency zone that gets boosted." msgstr "" "Als filtres passa-alts i passa-baixos, és la freqüència que divideix les " "freqüències que passen i les que son atenuades (silenciades). En un filtre " "ressonant passa alts, o en un filtre passa-baixos ressonant, la freqüència " "de tall és també la zona de freqüència que és amplificada." #: manual.docbook:1865(para) msgid "" "For example, if you have a low-pass filter and you set the cutoff frequency " "high (i.e. 20kHz)... the filter will not affect the sound. All the audible " "frequencies will pass through undisturbed. As you lower the cutoff frequency " "to something like 40 Hz (the low string on a bass guitar), it sounds like " "someone is putting a blanket over the speaker. The higher frequencies are " "being attenuated above 30 Hz." msgstr "" "Per exemple, si tens un filtre passa-baixos i configures la freqüència de " "tall alta (p.e. 20kHz)... el filtre no afectarà al sò. Totes les freqüències " "audibles passaràn sense modificació. Si baixes la freqüència de tall cap a " "40 Hz (la corda gruixuda d'un baix), sona com algú tapant un altaveu. Les " "freqüències més altes atenuades estàn per sobre 30 Hz." #: manual.docbook:1884(para) msgid "" "After reaching full velocity from the attack, this is the amount of " "time to turn the parameter down from full velocity to " "the sustain level." msgstr "" "Un cop assolida la velocitat màxima de l'atac, és la quantitat de " "temps per baixar de nivell de màxima velocitat a nivell " "de sustain." #: manual.docbook:1895(glossterm) msgid "Envelope Generator" msgstr "Generador de Contorns" #: manual.docbook:1897(para) msgid "" "A way to control (change) a parameter over time as a response to triggering, " "holding, and releasing a note." msgstr "" "Una manera de controlar (canviar) el paràmetre durant el temps com a " "resposta a disparar, i aguantar una nota." #. TRANSLATORS: This is a witty English expression that means, "Did I #. just say something really complicated, and you quit paying attention? #. I'll try it again a little more informally." #: manual.docbook:1903(para) msgid "Did your eyes just glaze over? Let's try again:" msgstr "Se t'han muntat els ulls? Tornem-ho a provar:" #: manual.docbook:1905(para) msgid "" "Imagine that you're playing a note on the keyboard and you have your other " "hand on a knob (volume, filter cutoff, etc.). As you play the note, you " "twist the knob (often up, then down... or down, then up). You do the same " "thing on each note. That's what an envelope generator does. See also ADSR" msgstr "" "Imagina't que estàs tocant una nota amb un teclat i tens l'altra mà a un " "botó (volum, freq. de tall del filtre, etc.). Mentre toques la nota, mous el " "botó (a vegades amunt, a vegades avall... o avall, llavors amunt). Fas el " "mateix en cada nota. Això és el que un generador de contorns. Mira també " "ADSR" #: manual.docbook:1916(glossterm) msgid "Fader" msgstr "Atenuador" #: manual.docbook:1918(para) msgid "" "A slider control used to adjust the attenuation (volume) in a mixer. Faders " "always have an \"audio\" taper, which means that the attenuation amount " "changes on an exponential scale." msgstr "" "Un control per a ajustar la atenuació (volum) en un mesclador. Els " "atenuadors sempre tenen reductor d'\"audio\", el que vol dir que la " "quantitat en l'atenuació canvia en una escala exponencial." #: manual.docbook:1925(glossterm) msgid "Filter" msgstr "Filtre" #: manual.docbook:1927(para) msgid "" "A device that changes a sound by attenuating specific frequencies. A tone " "knob is an example of a simple, low-pass filter." msgstr "" "Un dispositiu que canvia el sò atenuant certes freqüències. Un botó de tò és " "un exemple d'un filtre passa baixos." #: manual.docbook:1942(para) msgid "" "In an amplifier, this adjust how much (or how little) a signal is amplified " "(volume). A higher gain value is a louder signal." msgstr "" "En un amplificador, ajusta quant (o quan poc) una senyal és amplificada " "(volum). Un guany més alt dóna una senyal més alta." #: manual.docbook:1950(glossterm) msgid "High-Pass Filter" msgstr "Filtre Passa Alts" #: manual.docbook:1952(para) msgid "" "A filter that attenuates (silences) low frequencies, but allows high " "frequencies to pass through." msgstr "" "Un filtre que atenua (silencia) les freqüències baixes, i deixa passar les " "freqüències altes." #: manual.docbook:1963(glossterm) msgid "Instrument" msgstr "Instrument" #: manual.docbook:1965(para) msgid "" "In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, " "or a tom)." msgstr "" "A Hydrogen un instrument és un generador de sò (com un bombo o un tambor)." #: manual.docbook:1976(glossterm) msgid "Layer" msgstr "Capa" #: manual.docbook:1978(para) msgid "" "In an instrument you can load several different samples (each one called a " "layer), and have a different sample play " "depending on the velocity of the note. Only one sample at a time will play." msgstr "" "En un instrument pots carregar vàries mostres (cada una anomenada capa), i tenir una mostra diferent depenent de la " "velocitat de la nota. Només una mostra es tocarà a la vegada." #: manual.docbook:1983(para) msgid "" "Suppose you have a sample of a floor tom being struck softly. If you simply " "play the sample louder — it will not sound the " "same as a real tom that has been struck very hard. If you wish to mimic this " "in your instrument, you can load one sample for soft playing, and a " "different sample for loud playing." msgstr "" "Suposem que tens una mostra d'un tambor tocat fluix. Si simplement toques la " "mostra més fort —no sonarà igual que si el tambor " "s'ha tocat ben fort. Si vols que això sigui igual al teu instrument, pots " "carregar una mostra per notes fluixes i una mostra diferent per a tocar fort." #: manual.docbook:1995(glossterm) msgid "Low-Pass Filter" msgstr "Filtre Passa Baixos" #: manual.docbook:1997(para) msgid "" "A filter that attenuates (silences) high frequences, but allows low " "frequencies to pass through." msgstr "" "Un filtre que atenua (silencia) altes freqüèncias, però deixa passar " "freqüpencies baixes." #: manual.docbook:2008(glossterm) msgid "Mute" msgstr "Enmudir" #: manual.docbook:2010(para) msgid "" "To make no noise. A setting on an instrument that prevents any audio output." msgstr "" "Per fer un soroll. Una configuració en un instrument que no deixa que hi " "hagi sortida d'àudio." #: manual.docbook:2016(glossterm) msgid "Mute Group" msgstr "Enmudir Grup" #: manual.docbook:2018(para) msgid "" "A group of instruments (samples) that should mute (stop playing) immediately " "after another instrument in the group is triggered." msgstr "" "Un grup d'instruments (mostres) que s'han d'enmudir (deixar de reproduïr) " "inmediatament un cop un altre instrument del mateix grup és disparat." #: manual.docbook:2021(para) msgid "" "This is typically used in hi-hats, where there's a different instrument " "(sample) for when the hi-hat is open or closed. With a real hi-hat, the " "sound of the open hi-hat will stop as soon as you close it. However, if you " "use two samples — the open sound will continue even after you have " "triggered the closed sound. By placing both instruments in the same mute " "group (group #1, for example)... triggering closed sound will immediately " "stop the open sound (and vice versa)." msgstr "" "Això normalment es fa servir en el charles, on hi ha un instrument diferent " "(mostra) per quan està obert o tancat. Amb un charles real el sò de l'obert " "deixarà de sonar quan es tanca. De totes maneres, si fas servir dues mostres " "— el sò obert continuarà sonant fins i tot després que hagis disparat " "el sò tancat. Posant els dos intruments al mateix grup d'enmudiment (grup " "#1, per exemple)... disparar una nota de tancat aturarà inmediatament el só " "de l'obert (i vicevèrsa)" #: manual.docbook:2037(glossterm) msgid "Octave" msgstr "Octava" #: manual.docbook:2039(para) msgid "" "A span of frequencies where the top-most frequency is exactly twice the " "frequency of the bottom frequency." msgstr "" "Un rang de freqüències en el que la freqüència més alta és exactament el " "doble de la freqüència més baixa." #: manual.docbook:2042(para) msgid "" "For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, " "and 575 Hz to 1150 Hz. While the frequency differences are very different " "(20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they " "sound like the same distance." msgstr "" "Per exemple, el rang de 20 Hz a 40 Hz és una octava. Igual que de 120 Hz a " "240 Hz, i 575 Hza a 1150 Hz. Mentre les diferències de freqüències són molt " "diferents (10 Hz, 120 Hz i 575 Hz, respectivament), per a l'oida humana " "sonen a la mateixa distància." #: manual.docbook:2058(para) msgid "" "After the note is released, this is the amount of time " "to reduce the parameter from the sustain level to 0." msgstr "" "Un cop la nota s'ha alliberat, és la quantitat de temps " "per passar del nivell de sustain a zero." #: manual.docbook:2067(glossterm) msgid "Resonance" msgstr "Ressonància" #: manual.docbook:2069(para) msgid "" "When referring to a resonance filter, this is the parameter that determines " "how much of a boost (gain) to give the frequencies at the cutoff." msgstr "" "Quan ens referim a un filtre de ressonància, aquest paràmetre determina " "quant s'amplificarà (guany) a les freqüències a la zona de tall." #: manual.docbook:2078(glossterm) msgid "Resonance Filter" msgstr "Filtre de ressonància" #: manual.docbook:2080(para) msgid "" "A filter that gives a large boost to a very narrow range of frequencies. " "Typically it will be part of a high-pass or a low-pass filter, where the " "boosted frequencies are centered on the cut-off frequency." msgstr "" "Un filtre que amplifica un rang de freqüències molt petit. Típicament serà " "part d'un filtre passa alts o passa baixos, en el que les freqüències " "amplificades estàn entrades a la freqüència de tall." #: manual.docbook:2092(glossterm) msgid "Roll-off" msgstr "Roll-off" #: manual.docbook:2094(para) msgid "" "This is the amount that frequencies are attenuated (suppressed) as the " "frequency changes (typically measured in dB/octave)." msgstr "" "És la quantitat de freqüències que són atenuades (suprimides) quan la " "freqüència canvia (tipicament mesurat en dB per octava)." #: manual.docbook:2097(para) msgid "" "For example, in a low-pass filter the frequences below the cutoff frequency " "are not attenuated (they pass-through with the same volume). Same with the " "cutoff frequency. As you go above the cutoff frequency, the frequencies that " "are near the cutoff frequency are not attenuated very much at all. However, " "the frequencies that are much higher than the cutoff are attenuated " "(suppressed) a lot. This is usually approximated by a straight line (on a " "log scale) and measured in in dB of attenuation per octave of frequency." msgstr "" "Per exemple, en un filtre passa baixos les freqüències per sota de la " "freqüència de tall no són atenuades (passen amb el mateix volum). El mateix " "amb la freqüència de tall. Quan vas per sobre de la freqüència de tall, les " "freqüències que estàn aprop de la freqüència de tall no son atenuades massa. " "De totes maneres, les freqüències que són molt més altes que la de tall són " "molt més atenuades (suprimides). Això normalment es por teure en una línea " "recta (en escala logarítmica) i mesurat en dB d'atenuació per octava i " "freqüència." #: manual.docbook:2124(para) msgid "" "The level to hold the parameter after finishing the " "decay time. This level will be maintained until the not is released." msgstr "" "El nivell en que es manté la nota després de passat el " "temps de decay. Aquest nivell es manté fins que es deixa anar." #: manual.docbook:2142(para) msgid "" "MIDI devices are required to send this information along with the note. " "Synthesizers use this information to adjust several parameters on the sample " "(typically the volume). In Hydrogen, it is only used to adjust how loud the " "sample is played back." msgstr "" "Els dispositius MIDI són requerits per a enviar aquesta informació al llarg " "de la nota. Els sintetitzadors utilitzen informació per a ajustar varis " "paràmetres de la mostra (típicament el volum). A Hydrogen, només s'utilitza " "per ajustar el volum de la mostra reproduïda." #. Put one translator per line, in the form of NAME , YEAR1, YEAR2. #: manual.docbook:0(None) msgid "translator-credits" msgstr "" hydrogen-0.9.6-beta3/data/doc/manual_en.html000066400000000000000000004752351211146647700206750ustar00rootroot00000000000000Hydrogen Manual

    Hydrogen Manual

    Antonio Piraino

    Alessandro Cominu

    Thijs Van Severen

    Sebastian Moors

    Abstract

    Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter is still experimental, so ask in the developers mailing list for further details.


    Chapter1.Introduction

    Download

    You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

    If you want to compile Hydrogen yourself (see the section called “Build”), you can download the latest source files directly from our git repository with:

    $ git clone git://github.com/hydrogen-music/hydrogen.git

    A certain release can be fetched with:

    $ git checkout tags/0.9.5

    Compiling Hydrogen depends on the following libraries:

    Please install them with your distribution's package manager. If you're running a debian-based system, you can install the libraries with:

            $ apt-get install libqt4-dev g++ libasound2-dev \
            libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
            liblash-dev libportaudio-dev libportmidi-dev 
          

    Build

    Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

    Using scons (pre-0.9.6)

    Decompress the tarball or go to the directory where the git repository was cloned:

              $ cd hydrogen-*
              $ scons
              $ su -c "scons install"
            

    Before compiling, check for additional options with:

              $ scons --help
            

    If you want to use features which are not enabled by default (for instance PortAudio), you can enable them with:

              $ scons portaudio=1
            

    Namely, if you get some error while running Hydrogen and you want to report it remember to configure hydrogen with:

              $ scons debug=1
            

    To clean up compiled code:

              $ scons -c
            

    Using cmake (0.9.6 and up)

    Compiling with cmake can be done easily by using the build.sh script. Go to the directory where the git repository was cloned and run the build.sh script without any arguments to display the help :

               $ ./build.sh
            

    The help is now displayed (and is self-explanatory) :

                 r[m]     => all built, temp and cache files
                 c[lean]  => remove cache files
                 m[ake]   => launch the build process
                 d[oc]    => build html documentation
                 g[raph]  => draw a dependecies graph
                 h[elp]   => show the build options
                 x|exec   => execute hydrogen
                 t[ests]  => execute tests
                 p[kg]    => build source package
              ex: ./build.sh r m pkg x
            

    To build Hydrogen run the build script with the 'm' option :

               $ ./build.sh m
            

    Preferences

    First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).

    The General tab

    On the "General" tab (Figure1.1, “The General Tab”) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

    If you want to use Lash for session management you should enable it here so Hydrogen allows interaction with Lash. If jou are using Jack Session for session management you have to option to let Hydrogen automatically save the song file in the Jack Session Directory.

    The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see the section called “Tap Tempo and BeatCounter”)

    The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching (see the section called “Sample Editor rubberband”) you need to enter the path where rubberband is installed on you system here.

    Figure1.1.The General Tab

    The General Tab

    The Audio System tab

    From the "Audio System" tab (Figure1.2, “The Audio System Tab”) it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

    We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

    Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.

    Figure1.2.The Audio System Tab

    The Audio System Tab

    The following drivers are available:

    • jackd: The Jack driver is a professional audio server which permits very low lag and exchanges with other audio software. We strongly recommend using this driver to have the best out of Hydrogen. JACK server will start automatically if not already running.

    • ALSA: the widely adopted Linux standard audio drivers

    • OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort.

    • PortAudio: an open-source multi platform audio driver

    • CoreAudio: a driver for Mac OS X (experimental)

    The Midi System tab

    The "Midi System" tab (Figure1.3, “The MIDI System Tab”) contains all MIDI settings. Here you can choose the MIDI driver (ALSA, PortMidi, CoreMidi or JackMidi) input, and channel(s) that Hydrogen should respond to.

    Note

    If you want to use Jack Session management you should select the JackMidi driver. Jack Session management can only (re)store Jack midi connections.

    You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the event-action binding line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action.

    See the section called “Midi” for more info on Midi actions.

    Figure1.3.The MIDI System Tab

    The MIDI System Tab

    The Appearance tab

    The "Appearance" tab (Figure1.4, “The Appearance Tab”) let's you modify Hydrogen look and feel (font settings and interface style). On this tab you can also change the VU meters fall-off speed and switch between Single pane and Tabbed interface mode (see the section called “The main User Interface : an overview”)

    Figure1.4.The Appearance Tab

    The Appearance Tab

    The Audio Engine tab (debug only)

    The "Audio Engine" tab (Figure1.5, “The Audio Engine tab”) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

    Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.

    Figure1.5.The Audio Engine tab

    The Audio Engine tab

    Chapter2.Using Hydrogen

    Used Filetypes

    Before working with Hydrogen, please familiarize with these filetypes:

    • *.h2pattern: XML file describing a single pattern. Patterns are group of beats and are managed in the pattern editor.

    • *.h2song: XML file describing the whole song (or sequence). Songs are group of patterns with their properties and are manager using the song editor

    • *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs.

    • *.h2drumkit: a compressed and archived folder containing all sound samples composing a drumkit and a description XML file. Drumkits are basically group of sound samples.

    The main User Interface : an overview

    The Main UI comes in 2 flavors : the (classic) Single Pane mode (ideal for large- and medium size screens), and the Tabbed mode (optimized for netbook screen sizes).

    Below you can see the main UI split up in 5 parts : the Main Menu, Main Toolbar, Song Editor, Pattern Editor and the Instrument and Sound Library Editor. These sections will be explained in detail further down in this manual.

    Figure2.1.The Main UI in Single Pane mode

    The Main UI in Single Pane mode

    Figure2.2.The Main UI in Tabbed mode

    The Main UI in Tabbed mode

    Main menu

    Projects: this menu offers file related functions.

    • New - Create a new song

    • Show Info - Set general properties of the song such as name, author, license and generic notes

    • Open - Open a song

    • Open Demo - Open a demo song (demo songs are stored in $INSTALLPATH/share/hydrogen/data/demo_songs)

    • Open recent - Open a menu showing last used songs

    • Save - Save changes to current song

    • Save as - Save current song specifying a name (default path: $HOME/.hydrogen/data/songs)

    • Open pattern - Open a saved pattern belonging to the current drumkit

    • Export pattern as - Saves a pattern. It will be stored in $HOME/.hydrogen/data/patterns/drumkit_name

    • Export MIDI file - Export current song in MIDI format

    • Export song - Export current song in WAV format (see the section called “Exporting your song”)

    • Quit - Quit Hydrogen

    Undo: Undo/Redo functions.

    • Undo - Lets you undo your last action

    • Redo - Lets you redo the last undone action

    • Command History - Gives you an overview of your previous actions

    Instruments: this menu offers instruments and drumkit (sound libraries) functions.

    • Add instrument - Add a new instrument to your current drumkit

    • Clear all - Delete all instruments from the current drumkit

    • Save library - Saves all instruments settings (and their sound samples) in $HOME/.hydrogen/data/library_name

    • Export library - Compress all instruments samples and settings in a drumkit in $HOME/.hydrogen/data/library_name

    • Import library - Imports another drumkit from the local filesystem or download it from a remote location through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen website for an example). To load another drumkit in your current working session of Hydrogen, read the section called “Sound Library (Drumkit/Pattern/Song Manager)”.

    Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window.

    • Playlist editor - A tool to manage playlists.

    • Director - Open the director window.

    • Mixer - Open the mixer window.

    • Instrument rack - Open the instrument rack panel.

    • Preferences - Open the main preferences window. Read the section called “Preferences” on how to configure Hydrogen.

    Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !).

    • Show audio engine info - Open a monitor with various stats

    • debug action - Insert debug commands.

    • Print Objects - Print on stdout current objects map.

    Info

    • User manual - Open a window with this manual :)

    • About - The usual window with license information, acknowledgements, etc.

    The main toolbar

    Before analyzing the two main frames of Hydrogen, let's take a quick look at the main toolbar and its components:

    • Pilot the song using the start, stop, pause, etc. buttons

    • Choose between "pattern" or "song" mode: in "pattern" mode only the currently selected pattern will play, while in "song" mode all patterns inserted will be played.

    • An advanced tap tempo function: choose note length and how many notes to wait before recalculating BPM, then hit the comma key repeatedly until the 'R' letter appears and then the BPM will be updated. (see the section called “Tap Tempo and BeatCounter”)

    • Manually set BPM

    • Manage JACK transport

    • Open the mixer and the instrument rack panels

    Figure2.3.The Main Toolbar

    The Main Toolbar

    • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

    • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see the section called “Song Editor”). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see the section called “Pattern Editor”).

    • Set measure type and Beat Counter (see the section called “Tap Tempo and BeatCounter”).

    • Set speed of playing (range: 30-400 bpm) [Hotkey = mouse wheel] and button to enable/disable metronome

    • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

    • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). Note that this applet is only available if Jack Audio Driver is selected, NOT when the Audio driver is set to 'Auto'.

    • The last section gives you quick access to the Mixer window and the Instrument Rack. The LCD screen displays what Hydrogen is up to.

    Tap Tempo and BeatCounter

    It is possible to change the tempo at any time using the tap-tempo and BeatCounter features of Hydrogen. You can do this while the song is playing or while the song is stopped. To change the tempo, hit the , (comma) key in the tempo you want. After the correct number of keystrokes have been detected (see below for details), the tempo will change to the average tempo you tapped the comma key. If you continue to tap, these new taps will become a part of a rolling average. If you tap accidentally, or if you wait too long between taps, the tap tempo counter will start over.

    The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo on steroids. By default the BeatCounter display is not visible. To see the BeatCounter widget click the upright button (BC) between Song/Pattern mode selector and the BPM-widget, or, simply press the comma key. (,).

    The tempo that you tap will be considered even beats of the song's beat type. The beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change the beat type use the left +/- buttons. To change the Countdown Counter value, use the right +/- buttons. The Countdown Counter value can be set between 2 and 16 beats. (I.e. if you set the beat to 6, you will have to tap 6 times before the new tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. When you tap the comma key, the R will change to 1, and will increment with every keystroke until it reaches the Countdown Counter value (shown just below the 'R').

    The button in the bottom right-hand controls the auto-start feature, and it toggles between S and P. When it shows P for (Play), the song will set the new tempo and automatically start to play after you tap the right number of beats (if it's not already playing, of course). This way, if you have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing on the next beat. When it shows S (for Set BPM), the auto-start is disabled.

    For example: Suppose you have a live band, Hydrogen, and a softsynth that is controlled by Seq24)... and you want them all to start at the same time. Set the beat type to 1/4 and the number of beats to 4. Enable auto-start (button shows P). Count off the band 1-2-3-4 (while tapping the comma key) — and everyone starts on 1.

    Another example: Same situation, but the song doesn't require Hydrogen or synths until some point later. During that time, a human (e.g. guitar player) will be setting the tempo. On the measure before Hydrogen is supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in on the next beat (at the right tempo).

    If you are using the JACK Transport, the BeatCounter continues to work. If another program is the JACK Transport Master, Hydrogen will respond to tempo change events from that application. Note that in this situation, Hydrogen is supposed to be a slave, so some of the BeatCounter features will be disabled or will not work properly. If Hydrogen is the JACK Transport Master, tempo changes from Hydrogen will be reflected in those programs (if they support it).

    Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see the section called “The General tab” ). Here you will finde two spinboxes:

    • Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program.

    • Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated).

    Note that these can be set to positive (+) or negative (-) values. In order to find useful values for these, you will need to take some time to play with it. Also, you may want different values depending on the speed of your hardware, audio devices, drivers, etc. Using the BeatCounter effectively requires practice.

    Song Editor

    The "Song Editor" (Figure2.4, “The Song Editor”) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel represents a complete bar as shown in the underlying "Pattern Editor" panel. The song editor gives you complete freedom to add/remove patterns to the song and to move or copy any part of your song.

    Figure2.4.The Song Editor

    The Song Editor


    Main controls

    • Completely delete all patterns (asks for confirmation!).

    • Create a new pattern (and asks for a name).

    • Move currently selected pattern up or down.

      Note that you can also just drag-and-drop a pattern up/down in the pattern list.

    • Enable Select Mode. This mode allows you to select a part of the song and delete/move/copy it.

      Once you have selected a part of your song you can delete it by pressing the Delete button. You can move it by simply dragging your selection to another location, and you can also copy you selection by Ctrl-dragging it to a new location.

    • Enable Draw Mode. This mode allows you to create a song by drawing blocks on the song canvas.

      Clicking a square on the song canvas will add a pattern (the square will turn blue), clicking it again will remove that pattern from the song.

    • set Hydrogen to "Single pattern mode" or to "Stacked pattern mode".

      For more info on this see the SELECT_NEXT_PATTERN midi action in the section called “Midi”.

    Tempo markers and song Tags

    This section describes how you can define tempo changes and how you can add tags to your song.

    The majority of songs consist of several parts (intro, verse, chorus ...) and often these parts will have a different tempo. Hydrogen provides an easy way to let you change the tempo of a song at any given moment in the song. This is done by adding Tempo change Markers to your song.

    To add a Tempo change marker to your song you first need to enable the 'BPM' option (the BPM button is located just above the Song editors main controls). Once this is done the horizontal bar next to the BPM button changes to a ruler with marks at every bar. Now simply left-click this ruler at the bar you want the tempo to change and a window will pop up where you can enter the new tempo.

    Once you have entered the new tempo and clicked OK, the tempo change will show up on the tempo ruler. If you click the Tempo marker again you can edit the tempo, change the bar or delete the tempo marker.

    In addidtion to changing the tempo when the song switches from intro > verse, it is also very handy to have a clear indication of this tempo switch (or any other event in the song). For this purpose you can also ad Tags markers to the song. These Tags are short text messages you can add to your song at any given moment that will be displayed whenever the song playhead passes by that Tag.

    To add a Tag to your song simply middle-click on the song ruler (just below the tempo ruler) and a window will pop up where that allows you to add text for any bar.

    Once you are done you will see a small blue 'T' in the song ruler for every tag you have entered. Middle-click anywhere on the song ruler to edit the tags.

    Now all we need is a way to see the tags we have entered. This can be done using the Director window. Open the Director by pressing Alt-D, or Tools- Director :

    The Director is your best friend when you need a quick overview of what Hydrogen is currently doing. This comes in very handy when you are recording a song, or if you are using Hydrogen live on stage.

    The Director shows you the song name, a visual metronome and of course the song Tags. Just below the metronome you can see the latest tag, and below that the next upcoming tag. This way you have a nice overview of what is going on, and what is about to happen in the song

    Patterns options

    Right-clicking the name of a pattern will show you a menu where you can change a number of things :

    Figure2.5.The Pattern Options menu

    The Pattern Options menu

    • Edit : will open the selected pattern in the Pattern Editor.

    • Copy : will copy the selected pattern to a new pattern in your song.

      Note that patterns with the same name are not allowed.

    • Delete : will completely remove the selected pattern from the song.

    • Fill/Clear : will open a window that allows you to fill/clear a part of the song with the selected pattern by entering the start- and end bar.

    • Properties : will open a window where you can change the name of the pattern and also assign it to a certain category.

      Note that you can choose one of the existing categories from the dropdown list, but you can also enter a new category name in the Pattern Category box.

    • Load Pattern : will open the selected pattern in the Pattern Editor.

    • Save Pattern : will open the selected pattern in the Pattern Editor.

    • Virtual Pattern : will open the selected pattern in the Pattern Editor.

      Virtual patterns are a convenient way of grouping patterns together. For example, say you have a song in which three patterns are always played together at the start of each bar. Previously, the way to do this in the pattern matrix was to explicitly enable the three patterns at each bar.

      With virtual patterns we can assign a pattern to be a sort of meta-pattern that implicitly invokes these three patterns together when the new virtual pattern is enabled in the pattern matrix. This way, we only need to set one pattern every bar, instead of three.

      Virtual patterns provide a function that's similar to the regular pattern editor, and one could argue that since a virtual pattern is also a regular pattern, we could have just merged the three patterns into this new one. However, the advantage that virtual patterns provide is that if one of the original three patterns changes, the virtual pattern automatically inherits the change. A virtual pattern can also invoke other virtual patterns.

    Exporting your song

    Once your song is finished you can export it to an audio file. This audio file can then be played on your favorite media player or imported in an other audio application.

    To do this, go to Project - "Export song" and the following window will pop up:

    Figure2.6.Export a song

    Export a song


    To export a song you need to do 3 things:

    • Enter a name and location for the export file in the 'Export filename' field

    • Select one of the available templates (e.g. CD, DAT ...) according to your needs: each template has a specific bitrate, resolution, and audio format (WAV, AIFF, FLAC or OGG). You can tweak the selected template using the samplerate/sampledepth dropdown boxes underneath the template field.

    • Export mode: 'Export to a single track' will export 1 stereo downmix of your song (= the master output). 'Export to separate tracks' will create files for each instrument/track. 'Both' will create a stereo downmix + audio files for all individual instruments.

    Once all these settings have been configured all you need to do is click the 'Export' button and Hydrogen will generate the requested files.

    Note

    If you have tempo changes in your song (see the section called “Tempo markers and song Tags”) these tempo changes will not be exported. This is a know limitation of the current versions (including 0.9.6)

    As a workaround you can record the output of Hydrogen with an audio recording application (like Ardour, Qtractor ...)

    Pattern Editor

    The "Pattern Editor" allows you to create or modify the selected pattern by adding/removing notes and tunning a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)

    Note

    • If you are editing a pattern in Single Pattern Mode you will always hear the pattern you are editing when you press play.

    • If you are working in Stacked Pattern Mode you will hear the active pattern(s), not necessarily the pattern you are currently editing. (The active patterns have a small triangle next to the pattern name in the Song Editor).

    First let's take a look at the (classic) 'Drum' mode :

    Figure2.7.Pattern Editor in Drum mode

    Pattern Editor in Drum mode


    Pattern Editor Controls

    The top part of the pattern editor contains a number of controls :

    Figure2.8.Pattern Editor Controls

    Pattern Editor Controls

    From left to right :

    • SIZE : lets you choose the size of the pattern (the number of bars)

    • RES : this is the current grid resolution (4 through 64)

      Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer.

    • HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern.

    • QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied.

    • Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your drumkit as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

    • Note Length / Note off : these are 2 different ways to define the duration of a note. See the section called “Pattern Editor Sequence area” for usage.

    • Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)

    Pattern Editor Drumkit

    The section on the left shows you what drumkit is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

    Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select

    • Clear notes : to remove all notes for this instrument in this pattern.

    • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

    • Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played.

    • Delete Instrument : well, deletes the instrument ;-)

    The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons.

    The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys.

    Important Notes :

    The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default.

    Try to follow the GM midi standard as accurately as possible. This will ensure that switching between drumkits goes smoothly. You are of course free to place your instruments anywhere in your drumkit, and sometimes it isn't even possible to follow the GM standard, but it makes life a lot easier if you do.

    Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

    Here's a quick reference of the above bindings for your convenience.

    Pattern Editor Sequence area

    This is where it all happens, this is where you can make music :-)

    In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

    If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note.

    (Figure above, from left>right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

    So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see the section called “Main menu”) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see Chapter3, A new song for a basic walk-through of how the pattern editor works)

    Pattern Editor Note Properties

    Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :

    • Velocity : how hard the note is played (the volume of the note)

      Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping.

    • Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)

    • Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)

    • Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'

      The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

    Pattern Editor Piano mode

    Drum mode (see Figure2.7, “Pattern Editor in Drum mode”) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

    You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.

    Figure2.9.Pattern Editor in Piano mode

    Pattern Editor in Piano mode

    Mixer

    The Mixer window can be opened by pressing Alt+M, by clicking Mixer in the Tools menu, or by clicking the Mixer button on the main toolbar.

    The Mixer consists of 3 sections (left>right) : the instrument channel strips, the FX plugin rack and the master fader section. The Hydrogen Mixer works very much like a hardware mixer does : it lets you set the volume, pan, FX and several other things for every instrument.

    Figure2.10.The Mixer

    The Mixer


    Instrument channel strips

    From top to bottom : the 2 top elements on the strip are a 'play' button / 'trig' led combination. ( ) The play button lets you trigger the instrument at maximum velocity (handy for checking clipping), and the trig led lights up whenever this instrument is triggered (from the song sequence, or by an external midi controller). Right of this button/led you will find another led that shows you what instrument is currently selected. This is also the instrument that is selected in the pattern editor. As soon as you change one of the settings of a channel strip the instrument will be selected.

    Just below you can find the Mute and Solo buttons and the Pan(orama) knob. Note that the Mute and Solo states are also reflected in the Song editor.

    Next are 4 pre-fader FX send knobs that determine how much of this instrument will be sent to the effect plugins in the FX rack.

    Just below that you can find an LCD peak-value display, and finally the volume fader and VU meter for that instrument.

    IMPORTANT NOTE : keep in mind that the volume and pan settings that you find on the Mixer are global settings. The per-note velocity and pan settings in the Pattern editor are settings that are relative to the settings in the Mixer window !

    FX rack and LADSPA plugins

    The FX rack has 4 bays where you can load a LADSPA effect plugin, but before you can load any plugins these must be installed (surprised ? ;-)

    There are dozens of plugins available for download from various sources :

    Plugins Kill

    A badly designed LADSPA plugin is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others.

    Once you have installed some plugins you can select one by clicking the button. (if you do not see the FX rack, make sure that the button (in the Master section) is enabled)

    Now the FX selector window will pop up :

    Figure2.11.Select an Effect

    Select an Effect


    Once you have selected a plugin you will immediately have access to its parameters:

    You can select another plugin by clicking the 'Select FX' button. If you quickly want to enable/disable the effect click the 'Deactivate' button (or the Bypass ( ) button in the FX rack). This can be handy for a quick A/B comparison.

    After you have selected the FX and tweaked it's parameters you can use the FX return knob to increase/decrease how much of this FX will be returned to the master output.

    Master section

    The Master section contains the Master volume fader with VU meters and three global Humanize settings for Velocity, Timing and Swing (in order to add a 'human feel' to the song):

    • Velocity : adds a certain randomness to the note velocity. The higher you turn this knob, the more the velocity will be randomized.

    • Timing : adds a certain randomness to the note timing (lead/lag). The higher you turn this knob, the more the timing will be randomized.

    • Swing : this knob will add a certain amount of swing to the song.

    Note that Hydrogen can also be switched to 'per instrument output' mode (see the section called “The Audio System tab”), and in this mode all channel strip outputs will be available in Jack (not just the Master output). This allows you to route the individual instruments directly into any other Jack enabled application (eg Ardour) and gives you a lot more flexibility.

    On the bottom-right of the Master section the 'FX' button will show/hide the FX rack, and the 'Peak' button will enable/disable the VU meters.

    Note

    The VU meter fall off speed can be configured in the preferences window (see the section called “The Appearance tab”)

    Sound Library (Drumkit/Pattern/Song Manager)

    First of all a little history on the Sound library and Drumkits. Hydrogen began as a dedicated drum machine but has evolved into a versatile sound synthesizer/sequencer that is capable of generating and manipulating all sorts of sounds. Hence the original "Drumkit" terminology is slightly misleading. You can load any kind of sound into a "Drumkit" and manipulate that sound just like playing a regular synthesizer. This is also the main reason why the Piano mode was added to the pattern editor (see the section called “Pattern Editor Piano mode”).

    In this manual (and in other documentation) "Drumkit" and "Soundlibrary" frequently mean the same thing, but not always. The diagram below shows the actual relation between the Soundlibrary and Drumkits:

    Figure2.12.Soundlibrary/Drumkit hierarchy

    Soundlibrary/Drumkit hierarchy


    As you can see the Soundlibrary contains all Drumkits (System and User drumkits), your saved Patterns and your saved Songs. Each Drumkit is a collection of a number of instruments (snare, kick, sampled voice, bass sound ...) and in its turn an instrument can consist of multiple layered samples. Note that every block has a number of parameters (continue reading for more details).

    This said. let's take a look at the Soundlibrary interface and see what it can do for you:

    The Sound Library saves you time in managing your drum kits, favourite patterns, and favourite songs. When making new songs and new drum kits, it allows you to reuse and mix the instruments and patterns from other kits and songs.

    Figure2.13.The Soundlibrary

    The Soundlibrary


    System Drumkits

    This lists the drumkits that were installed by your system administrator. The location of these System Drumkits is determined by the compile-time prefix. On Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or possibly /usr/local/share/hydrogen/data/drumkits. These kits are available to all users on the system, and users are usually not able to add to them.

    To load a drumkit from here, right-click the drumkit and select Load. This will replace your current drumkit with the one that you selected. To load a single instrument from that kit, left-click the plus to the left of the drumkit's name to show all the instruments. With your left mouse button, click and drag the instrument into your current kit. The instrument will be added to the drumkit that you currently have loaded.

    (Adding) User Drumkits

    These are your own drum kits that you can manage yourself. They are usually stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by selecting InstrumentsSave library.

    You can import existing drumkits from other users via InstrumentsImport library. The Import window will pop up with the Internet tab selected. By default the link to the drumkit list (on hydrogen-music.org) will be filled in, and after pressing the 'Update list' button you will get a complete list of all drumkits that are available for download. In the status column you can see if a kit is installed or not.

    Figure2.14.Import Drumkit

    Import Drumkit


    If you select one of the drumkits you will see info about this kit in the right pane of the Import window: name, description, author and also the license type.

    Warning

    If you are using Hydrogen for commercial purposes, (creating songs and selling these on-line or in any other way) you need to pay special attention to the license type of the drumkit(s) you are using.

    If the exact license is not available for a drumkit, do _NOT_ assume that it is a CC (or other open and free license type).

    Even if the kit is CC licensed you should always check with the author before using the kit in your songs.

    DISCLAIMER : hydrogen is not responsible for the drumkits that are made available for download by our users, either via the hydrogen-music.org site or via any other channel.

    You can install a drumkit by selecting it and clicking 'Download and Install'.

    Once the kit has been downloaded it will be available in the Sound Library under "User drumkits".

    Songs in the Sound Library

    To save songs in the Sound Library, put them in your data directory underneath the songs folder (usually $HOME/.hydrogen/data/songs). To remove them, remove the file from that folder.

    Patterns in the Sound Library

    Before you save a pattern to the sound library, be sure to give it a title and a category. Right-click on the pattern, select "Properties" and enter the details. You can use one of the categories already provided, or create your own categories by simply typing in a category name. The category name is important, because the patterns will be filed by category in the Sound Library.

    You can add a pattern to the sound library by right clicking the title of the pattern in the song editor, and selecting "Save Pattern". It will now appear in the Sound Library underneath "Patterns" and the category that you assigned to the pattern.

    Drumkits and Instrument Editing

    Concepts

    The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a piece of pre-recorded audio (usually between 0.1 sec and 3 sec). To play a note, the sample is simply played back at the right time. There are a few concepts and terms that you should understand when you are putting together a drumkit. (See Glossary for more detailed explanations.)

    Sampling Synthesizer Terms

    Sample

    A short recording of a sound, typically between 0.1 and 3.0 seconds long.

    Gain

    Volume adjustment.

    Velocity

    How hard you hit a note.

    ADSR Envelope Generator

    An Attack/Decay/Sustain/Release envelope generator. After you trigger a note, Hydrogen will attack the note by increasing its volume from 0 to the full velocity of the note. After reaching full velocity, it will decay the note by lowering the volume until it reaches the sustain level. When the note is released, Hydrogen reduces the volume from the sustain level back down to 0. See ADSR Envelope for more info

    Attack

    The amount of time to go from 0 to full velocity.

    Decay

    The amount of time to go from full velocity to the sustain volume.

    Sustain

    The level (how loud) to hold the note between the sustain and the release. It is a percentage of the velocity. It does not depend on time.

    Release

    The amount of time to go from the sustain volume back down to 0.

    Typical samples that are used in Hydrogen are: the sound of a single drum hit, the sound of a single cymbal hit, the sound of a single cowbell hit. Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen will play whatever sound you have loaded. So, to put together a drum kit you need to gather short recordings of the bass drum, each tom, each cymbal, the high hat open, the high hat closed, the snare drum (snare on), the snare drum (snare off), rim shots, etc.

    However, there are no rules about what a sample can be. It's not uncommon to use Hydrogen to trigger non-drum sounds like: audio clips of people talking, a clip from a song, sound effects, audio clips from movies, and famous people speaking. Be creative!

    Creating a New Drumkit

    In the next paragraphs we will show you how to create a complete drumkit. Keeping in mind the 'Soundlibrary hierarchy' (see Figure2.12, “Soundlibrary/Drumkit hierarchy”) we will use a top-down approach, so we will start at the Drumkit level and work our way down to the samples.

    Creating a new drumkit with Hydrogen is done with the Instrument Editor. You can load samples, set envelope parameters, set the gain, and other advanced features like mute groups, a low-pass resonance filter, and pitch randomization.

    TIP : Instead of creating your own drumkit, you can also use or download existing drumkits using the the section called “Sound Library (Drumkit/Pattern/Song Manager)”.

    Lets make a brand new drum kit :

    • select Instruments"Clear All" . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select "Delete Instrument". To add more instruments, select Instruments"Add instrument" .

    • Select an instrument to start editing it. This is done by left-clicking on the name of the instrument in the instrument list (at the left). You will notice that the name of the instrument in the Instrument Editor matches the one that you clicked.

    • Once you have your drum kit working the way you want, select Instruments"Save library" . You will be prompted for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace.

    • Drumkits are automatically stored in the data directory (i.e. $HOME/.hydrogen/data/drumkits).

    • To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select Instruments"Export library" from the menu. Select the drum kit that you wish to export, and give it a file name to save it to.

    Instrument Parameters

    In the instrument editor, click on the General button. Here you can adjust several parameters that apply to the instrument (applies to all layers as well).

    Figure2.15.The Instrument editor General view

    The Instrument editor General view


    The parameters are:

    • Envelope parameters: Attack, Decay, Sustain, Release. (See Envelope Generator)

    • Gain: The overall volume of the instrument.

    • Mute Group: Which mute group this instrument is a member of (see Mute Group).

    • Filter Parameters: Bypass, Cutoff, Resonance.

    • Random Pitch

    • Midi out Channel and Note

    • Auto Stop-Note

    It's important that you understand the section called “Concepts” in order to continue on.

    Envelope Parameters

    When the instrument is triggered, its volume is run through an ADSR Envelope. The parameters operate as follows:

    • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. [1]

    • Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter.[1]

    • Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity.

    • Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available.[1]

    If the sample is shorter than the times that you specify, the sample will end, regardless of which phase of the ADSR it is in. If the note is sustained, it does not draw out the note while you are holding it. It only holds the gain (volume) parameter during that time.

    Gain and Mute Group

    The gain sets the overall volume for the sample. This gain is applied after the gain that you set for the layer, and before the gain that is set for the mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is set higher, the samples will be amplified.

    Warning

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    Hydrogen provides more mute groups than you know what to do with (over 256). A mute group is a grouping of instruments that are mutually exclusive — only one instrument may be playing at any time. If one is playing and another instrument in the group is triggered, it will immediately silence (mute) and start playing the other instrument. This is useful, especially, for instruments like hi-hats where the open sound and the closed sound are different instruments.

    If the mute group is set to "Off", then the instrument is not part of any mute grouping. If the mute group is set to any number, then that is the group that the instrument is a part of. To set other instruments into the same grouping, set their mute group parameter to the same number. (For example, to group all the high-hat instruments, you can set all their mute group parameters to 1. To have a snare drum mute group, set their mute group parameters to 2.)

    Filter and Random Pitch

    The filter is a low-pass resonance filter. If you don't wish to use is, click the BYPass button so that it's red. If it's not red, then the filter is active. The cutoff parameter adjusts the cutoff frequency for the filter. The resonance parameter adjusts how much to resonate the cutoff frequency. If the resonance is set to 0, then the filter is just a simple low-pass filter.

    Note

    The cutoff frequency of the filter varies with the sample rate of your audio card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample rate.

    The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound more like a real drummer.

    Midi out settings

    Hydrogen is capable of generating midi messages that you can use to trigger any external midi device or application. To do this you simply need to configure the Midi out channel and Note for every instrument. As you can see this is a very flexible approach that enables you to trigger samples or sounds from multiple devices and/or apps. Finally you need to make sure the proper Midi routing/wiring is in place and you're set.

    From now on every time a note is played for that instrument (in the Hydrogen sequencer) a midi message will be sent to your external app/device and trigger a sound. This way you can use Hydrogen as a pure sequencer for other apps, or combine the internal Hydrogen sampler with multiple external apps/devices.

    Auto Stop-Note

    If this box is checked Hydrogen will immediately stop any playing sample that belongs to this instrument whenever the instrument is re-triggered.

    This option is particularly useful when you are using long samples like a crash or some existing audio that you have sampled (like a looped voice in a dance/electro song) For the crash you will need to use the Auto Stop-Note when you are sequencing multiple notes in fast succession and want to make it sound realistic. If you do not check this option the cymbal will start to sound like multiple cymbals instead of only one (since the sample of each individual hit will be played completely). For the voice sample this option is useful if you are trying to get that 'stuttering' effect.

    Creating an Instrument and Layers

    For each instrument in a drum kit, you can load several samples and set different synthesizer parameters. This section will step you through how to create a new instrument and load the samples.

    To begin creating an instrument, select InstrumentsAdd instrument. This will give you a blank instrument to start from.

    Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides several in the data/drumkits directory.

    In the instrument editor, click on Layers. You can layer several samples into the instrument. Which one is played depends on the velocity of the incoming note. Click Load Layer and point the Audio File Browser to your sample. Note that the Audio File Browser will allow you to preview the sample before you load it. It will also allow you to load more than one sample at a time. But for now, only load one.

    After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To load a second sample, click the slot just below it, and then click Load Layer to bring in another sample.

    After bringing in both samples, you'll probably notice that only the first sample is being played whenever you trigger the instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light blue rectangles and you see that you get a left-right drag cursor. Now drag the sample to the left or right (like a curtain). You will now see Layer 2 appear.

    Figure2.16.The Instrument editor Layers view

    The Instrument editor Layers view

    The velocity setting for the layer is 0-velocity on the left, and full velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 to sound for hard notes (i.e. Layer 1 on the left and Layer 2 on the right).

    Now, in the pattern area, set up a simple pattern that plays this instrument. Adjust the velocity settings on each note so that you can get the different samples to sound. Now set the pattern to loop and notice how your different samples are getting triggered. (To learn about editing a pattern, see the section called “Pattern Editor”)

    For each layer, you can set the Gain and the Pitch. The pitch also has a Fine adjustment.

    Use the Gain adjustment to control how loud the sample will play. This is necessary because it's extremely difficult to get a set of samples that all sound at about the same volume. By adjusting here, the samples that were recorded too quietly can be turned up to match your loud samples (that had to be turned down).

    Warning

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    The pitch of the sample can be modified with the pitch controls. The Pitch knob adjust the pitch in musical half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts the pitch 50 cents. (One half-step is 100 cents.)

    Note

    The pitch is adjusted by playing the sample back faster or slower. This is called the Doppler Effect. So, if you have a 1-second sample that you turn down -12 (1 octave), your sample will only last for .5-seconds. If you do not want this to happen you should use rubberband instead (see the section called “Sample Editor rubberband”)

    You can hear the sample in a layer by clicking the layer id (just below the 'General' and 'Layers' buttons) and the 'Delete Layer' button will delete the currently selected layer.

    Sample Editor

    So far we have created a multilayered Drumkit, set a number of instrument parameters, played with velocity settings and so on. Now it's time to go one step deeper and edit the samples using one of the newest Hydrogen features: the Sample Editor.

    The Sample Editor allows you to tweak and manipulate your samples. This is a function that will really speed up the creation of a drumkit since you can do the fine-tunning of the sample within Hydrogen. In pre-0.9.5 builds the typical workflow would be to prepare your sample in an external sound editor, import the sample in Hydrogen, test it, go back to the audio editor, import again, test ... The sample editor allows you to do most of the sample manipulation within Hydrogen. This mean less switching between Hydrogen and your audio editor and more time to make music !

    Note

    The changes you make to your samples in the Sample Editor are non-destructive and are saved per song. So the original sample will not be changed, and you can reuse the same sample in multiple songs with different Sample Editor settings.

    Figure2.17.The Sample Editor

    The Sample Editor

    The Sample Editor consists of 3 sections (as indicated in the figure above):

    Sample Editor in/out points

    In this section you can set the start, stop and loop points for the sample by dragging the the 3 markers:

    • S-marker (green) : indicates the Start-point (in-point) of the sample.

    • E-marker (red) : indicates the End-point (out-point) of the sample.

    • L-marker (blue) : determines the loop-in point of your sample

    You can easily move one of the markers by grabbing them close to the letter that marks them. Whenever you grab one of the markers you will see a detail view of the position of that marker on the second (smaller) window on the right, making it easy to find the zero-crossings in the sample. This detail window also has a slider next to it that allows you to zoom in and out on the vertical axis. Think of it as a sort of volume 'zoom'.

    Underneath these 2 windows you can find (from left>right) : the position of the Start marker, the position of the Loop marker, the Loop mode, the number of loops and the position of the End marker. The position of the markers is expressed in number of samples from the very beginning of the sample. These values will change if you drag the markers, but you can also fine-tune the marker position by using the up/down arrows of the spinboxes, the up/down keys on your keyboard, or by using your mouse scroll wheel while hovering above the spinboxes.

    Apart from the marker positions there are 2 settings that apply to the Sample Editor's loop function: loop mode and loop number. With the loop function you can repeat the part of your sample that is in between the Loop- and the End-marker. The way it is looped is determined by the Loop mode (forward, revers or ping-pong) and the number of times it is looped is determined by the Loop number.

    If you want to hear a preview of the tweaking you have done so far, you first need to press the 'Apply Changes' button (@ the bottom of section 3) and then the Play button to hear the result.

    Sample Editor rubberband

    This section of the Sample Editor allows you to control the Rubberband settings. Rubberband is a tool that can change the tempo of a sample without changing the sample's pitch (and vice versa).

    If you are using Ubuntu you can install rubberband from the Software Center (rubberband-cli). For other linux distros check your package manager. For other platforms please check the rubberband site . After installing rubberband you should check if the path to the rubberband cli is configured correctly (see the section called “The General tab”).

    If rubberband is installed correctly you will have access to the rubberband settings, and an extra button named 'RUB' will be available in the Main Toolbar, right of the BPM LCD display:

    Back to the rubberband settings :

    • Sample length to beat : when set to 'off', rubberband functionality is disabled. Normally this parameter should be set to the length of the part of the sample between the Start and End marker, expressed in number of beats.

    • Pitch : this setting allows you to change the pitch of the sample, expressed in semitones,cent.

    • Crispness : this setting does not affect tempo or pitch, but changes the way the sample sounds.

    Note: If you want Hydrogen to recalculate the sample length on the fly (using rubberband) you must enable the 'RUB' button (see figure above).

    Sample Editor volume/pan

    In the bottom section of the Sample Editor you can see the end result of the tweaks you have made by pressing the Apply Changes button. You can also change the the Volume and Panorama (Pan) of your sample here. This is done by creating 'envelopes' like the ones you find in numerous DAW's for automation. To edit an envelope you first need to select 'Volume' or 'Panorama'in the upper right corner of section 3. The Volume envelope is blue, and the pan envelope is yellow. Left clicking in the bottom window will ad a node to an envelope and also allows you to drag an existing node. Right-clicking a node will delete it. Don't forget to Apply Changes before you play your tweaked sample.

    Tips on Editing Instruments

    With all of the different parameters available to tweak, it can be difficult to set up something that sounds nice when you're done. Here are a few tips on setting up an instrument:

    Turn down the gain. Every gain knob (i.e. an amplifier), this is a gain stage. With every gain stage you have, it's easy to overdrive your signal — which means the signal gets distorted by clipping. In addition, if you have two samples that, by themselves, peg your meters — what do you think happens when you combine them? That's right, you overdrive the signal again.

    If things sound bad and distorted, start by turning down the gain setting on the layer... especially if it's larger than 1.0. Then turn down the instrument gain. Then any gain on a LADSPA effect. Then the fader on the mixer. Then the master output fader.

    Test samples at full velocity. Your sample will be played louder if the velocity is higher. So, if you set everything to sound nice and full with velocity at 0.7, what will happen when you get a full velocity of 1.0? (Hint: clipping.)

    Try to use samples that are -6 dB max. Visually, this means samples that peak at only 1/2 of full scale. Otherwise, turn your layer gain to about .5.

    Remove all DC offsets from the sample. In a sample editor, there is usually a line down the center of your sample's waveform. This is the zero-line. The beginning of your sample should be on this line. The end of your sample should also be on this line. However, if your signal is a little above or a little below this line, you will hear a click at the beginning and the end of your sample whenever it is played. If your sample editor doesn't provide any tools to fix a DC offset problem, you can eliminate the noise by putting a slight fade-in/out at the ends of your sample.

    The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the attack and delay — the sample will stop playing at the end.

    Things change with the sample rate. If you have a really nice setup with all your parameters painstakenly tweaked... things will change if you change the sample rate of your audio card. Many of Hydrogen's internal settings and parameters are based on how many samples go by, not on how many seconds go by. The sorts of things that change are: anything time-base (like attack and release) and anything frequency based (like the cutoff frequency).

    Midi

    In this section you can find more info about defining MIDI actions and how they can be useful for you. Before you can work with midi actions you should have your Midi devices, drivers and connections configured correctly (see the section called “The Midi System tab”).

    Lets take a look at the available options :

    Midi Events

    An Event is an incoming Midi message, coming from a MIDI controller or an external sequencer.

    If you look at the Events list you will see that there are 3 types of Events available (as described in the Midi standard):

    • NOTE: input coming from a regular black/white key of a keyboard or a drumpad

    • CC: controller commands coming from faders or rotary controllers

    • MMC_x: machine control events coming from play/stop... buttons on a controller

    The Param. (parameter) value to the right of the Event is the identifier of the note/button/controller that is linked to this Action. This parameter can be entered manually, or automatically by using the Midi learn function (see the section called “The Midi System tab”).

    Note

    You can also activate the Midi learn function by Shift-clicking most of the gui elements. A 'Waiting for Midi input...' popup informs you that Hydrogen is now waiting for you to press a key or turn/move a controller.

    If you Shift-click on a gui element that does not support Midi automation a popup will inform you.

    Midi Actions

    Next is a list of the available Actions: an Action describes what Hydrogen should do when a specific Midi Event is detected.

    Note

    ** Some of the Midi Actions require that the Action Parameter is configured. The Parameter usually references a specific channel, instrument, FXsend... Keep in mind that the Parameter value is zero-based. So if you want to reference channel 1 you have to enter '0' in the Parameter field (1 for channel 2, 2 for channel 3 ...)

    • PLAY : start playback

    • PLAY/STOP_TOGGLE : toggles between PLAY and STOP. Execute this action will start playback, execute it again and playback will stop + the playhead will return to the start of the song

    • PLAY/PAUSE_TOGGLE : toggles between PLAY and PAUSE. (the playhead will not return to the start of the song, but will stay at its current position)

    • STOP : stops playback and returns to the start of the song

    • PAUSE : pauses the song

    • MUTE : mutes the the Master output (sequencer keeps running)

    • UNMUTE : unmutes the Master output (sequencer keeps running)

    • MUTE_TOGGLE : toggles between MUTE and UNMUTE (sequencer keeps running)

    • NEXT_BAR : jumps to the next bar in the song

    • PREVIOUS_BAR : jumps to the previous bar in the song

    • BPM_INCR : increments the tempo of the song

    • BPM_DECR : decrements the tempo of the song

    • BPM_CC_RELATIVE : changes the tempo relative to the current tempo, using a controller

    • MASTER_VOLUME_RELATIVE : changes the Master output volume, relative to the current setting (e.g. if you are using rotary encoders)

    • MASTER_VOLUME_ABSOLUTE : changes the Master output volume to the absolute value of the midi control (use with midi fader or pot)

    • STRIP_VOLUME_RELATIVE : see MASTER_VOLUME_RELATIVE, but applies to the channel strip defined in the Action Parameter **

    • STRIP_VOLUME_ABSOLUTE : see MASTER_VOLUME_ABSOLUTE, but applies to the channel strip defined in the Action Parameter **

    • EFFECTx_LEVEL_RELATIVE : changes the volume level of effect 'x'; the value you enter in the Action Parameter determines the channel strip this action applies to **

    • SELECT_NEXT_PATTERN : selects the pattern that is defined in the Action Parameter **

    • SELECT_AND_PLAY_NEXT_PATTERN : combines the SELECT_NEXT_PATTERN with PLAY

    • PAN_RELATIVE : changes the panorama setting, relative to the current value; the value you enter in the Action Parameter determines the channel strip this action applies to **

    • PAN_ABSOLUTE : changes the panorama setting to the absolute value that the linked controller sends to Hydrogen

    • BEATCOUNTER : sets the tempo (see the section called “Tap Tempo and BeatCounter”

    • TAP_TEMPO : sets the tempo (see the section called “Tap Tempo and BeatCounter”

    • SELECT_INSTRUMENT : selects one of the instruments in the drumkit



    [1] The attack, decay, and release parameters are all set by the number of audio samples. This means that the time changes depending on the sample rate of your sound card. The max time for each of them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz).

    Chapter3.A new song

    "Song" mode and "Pattern" mode

    This section is a quick-and-dirty walkthrough to Hydrogen. Refer to the tutorial for a more detailed overview.

    Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to the section called “The main toolbar” for the buttons that activate each mode). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern until it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns to create the structure of the song.

    A new pattern

    We'll start from the empty song with an empty pattern created when Hydrogen starts up: "pattern" mode should be selected by default. Now let's click on the Playbutton, and while the pattern is playing let's add notes by left_mouse_clicking in the grid of the Song Editor (Figure3.1, “The Pattern Editor”). Adjust the grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD in which case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!

    Figure3.1.The Pattern Editor

    The Pattern Editor

    A new sequence

    Once patterns are created (Figure3.2, “Inserting Notes in a Pattern”), we can copy/paste/delete them using the Select Mode (see the section called “Main controls”).

    Figure3.2.Inserting Notes in a Pattern

    Inserting Notes in a Pattern

    Adjust from the mixer

    Of course we can always use the mixer window, either when creating or playing patterns.

    The Mixer frame (Figure3.3, “The Mixer”) is made of 32 independent tracks, each of these is bound to an instrument, plus a "Master Output" control and a "FX" button to show and hide the effects panel. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument. The peak must be in a range of 0.0 and 1.0 (in Figure3.3, “The Mixer” you can see a few volumes too loud). Peaks outside that range will get distorted (especially with OSS audio driver). Keep an eye on each vu-meter and if distortion appears, turn the volume down for that instrument.

    Figure3.3.The Mixer

    The Mixer

    Chapter4.Shortcut lists

    • [CTRL + N] = New Project

    • [CTRL + O] = Open File

    • [CTRL + D] = Open Demo

    • [CTRL + S] = Save File

    • [CTRL + SHIFT + S] = Save File as

    • [CTRL + P] = Export Pattern as

    • [CTRL + M] = Export MIDI file

    • [CTRL + E] = Export Song

    • [CTRL + Q] = Quit Hydrogen

    • [ALT + D] = Show Director window

    • [ALT + M] = Show Mixer window

    • [ALT + I] = Show Instrument rack

    • [ALT + P] = Show Preferences window

    • [CTRL + ?] = Show manual

    • [Backspace] = Restart song or pattern from the beginning

    • [spacebar] = Play / Pause

    • [,] (comma key) = Beatcounter

    • [\] (backslash) = Tap tempo

    • [+] and [-] = Tempo up / down

    • [F9] = Jump back to previous bar in the song

    • [F10] = Jump to the next bar in the song

    • [F12] = Panic button (stops the song and mutes all playing sounds)

    Glossary

    This is a glossary of general terms encountered when using Hydrogen, synthesizers, drums, or samplers. The definitions here provide more detail and explanation than the simplified ones in the text. For example, the text of the manual would have you believe that an ADSR is the only kind of envelope generator and could only ever control the volume. While the simplified definitions help new users start using Hydrogen quickly, they can lack the nuances presented here.

    ADSR

    A type of envelope generator that allows you to control the Attack, Decay, Sustain, and Release parameters. Generally, the parameters are proportional to the velocity.

    In Hydrogen, the ADSR envelope generator only controls the volume (attenuation).

    Read more about this in the Wikipedia Article ADSR Envelope

    See Also Envelope Generator, Attack, Decay, Sustain, Release.

    Attack

    This is the first phase of an ADSR envelope, and is the amount of time to turn the parameter up from 0 to full velocity after triggering the note.

    See Also ADSR.

    Attenuation

    In filters and mixers, this the amount that a signal is reduced (volume).

    See Also Roll-off.

    Band-Pass Filter

    A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter.

    See Also Filter, High-Pass Filter, Low-Pass Filter.

    Clipping

    A phenomenon that happens to a signal when the signal is too large for whatever is receiving it. The peaks of the signal (which are normally smooth curves) get cut off straight at the max volume (clipped). This distorts the sound and is usually undesirable.

    An example of clipping is when you play music louder than your speaker can handle. Parts of the music sound harsh and fuzzy.

    Cutoff Frequency

    On high-pass and low-pass filters, this is the frequency that divides between those that pass, and those that are attenuated (silenced). In a high-pass resonance filter, or a low-pass resonance filter, the cutoff is also the frequency zone that gets boosted.

    For example, if you have a low-pass filter and you set the cutoff frequency high (i.e. 20kHz)... the filter will not affect the sound. All the audible frequencies will pass through undisturbed. As you lower the cutoff frequency to something like 40 Hz (the low string on a bass guitar), it sounds like someone is putting a blanket over the speaker. The higher frequencies are being attenuated above 30 Hz.

    See Also Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Decay

    After reaching full velocity from the attack, this is the amount of time to turn the parameter down from full velocity to the sustain level.

    See Also ADSR.

    DC-offsety

    DC offset, or DC coefficient is the mean value of the wavefor.m

    DC offset is usually undesirable. For example, in audio processing, a sound that has DC offset will not be at its loudest possible volume when normalized (because the offset consumes headroom), and this problem can possibly extend to the mix as a whole, since a sound with DC offset and a sound without DC offset will have DC offset when mixed. It may also cause other artifacts depending on what is being done with the signal.

    Envelope Generator

    A way to control (change) a parameter over time as a response to triggering, holding, and releasing a note.

    Did your eyes just glaze over? Let's try again:

    Imagine that you're playing a note on the keyboard and you have your other hand on a knob (volume, filter cutoff, etc.). As you play the note, you twist the knob (often up, then down... or down, then up). You do the same thing on each note. That's what an envelope generator does. See also ADSR

    Fader

    A slider control used to adjust the attenuation (volume) in a mixer. Faders always have an "audio" taper, which means that the attenuation amount changes on an exponential scale.

    Filter

    A device that changes a sound by attenuating specific frequencies. A tone knob is an example of a simple, low-pass filter.

    See Also Band-Pass Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Gain

    In an amplifier, this adjust how much (or how little) a signal is amplified (volume). A higher gain value is a louder signal.

    High-Pass Filter

    A filter that attenuates (silences) low frequencies, but allows high frequencies to pass through.

    See Also Filter, Cutoff Frequency.

    Instrument

    In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, or a tom).

    Layer

    In an instrument you can load several different samples (each one called a layer), and have a different sample play depending on the velocity of the note. Only one sample at a time will play.

    Suppose you have a sample of a floor tom being struck softly. If you simply play the sample louder — it will not sound the same as a real tom that has been struck very hard. If you wish to mimic this in your instrument, you can load one sample for soft playing, and a different sample for loud playing.

    See Also Instrument.

    Low-Pass Filter

    A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through.

    See Also Filter, Cutoff Frequency.

    Mute

    To make no noise. A setting on an instrument that prevents any audio output.

    Mute Group

    A group of instruments (samples) that should mute (stop playing) immediately after another instrument in the group is triggered.

    This is typically used in hi-hats, where there's a different instrument (sample) for when the hi-hat is open or closed. With a real hi-hat, the sound of the open hi-hat will stop as soon as you close it. However, if you use two samples — the open sound will continue even after you have triggered the closed sound. By placing both instruments in the same mute group (group #1, for example)... triggering closed sound will immediately stop the open sound (and vice versa).

    Octave

    A span of frequencies where the top-most frequency is exactly twice the frequency of the bottom frequency.

    For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they sound like the same distance.

    Release

    After the note is released, this is the amount of time to reduce the parameter from the sustain level to 0.

    See Also ADSR.

    Resonance

    When referring to a resonance filter, this is the parameter that determines how much of a boost (gain) to give the frequencies at the cutoff.

    See Also Resonance Filter.

    Resonance Filter

    A filter that gives a large boost to a very narrow range of frequencies. Typically it will be part of a high-pass or a low-pass filter, where the boosted frequencies are centered on the cut-off frequency.

    See Also Filter, Cutoff Frequency, Resonance.

    Roll-off

    This is the amount that frequencies are attenuated (suppressed) as the frequency changes (typically measured in dB/octave).

    For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency.

    See Also Attenuation, Filter.

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds long.

    Sustain

    The level to hold the parameter after finishing the decay time. This level will be maintained until the not is released.

    See Also ADSR.

    Velocity

    How hard you hit a note.

    MIDI devices are required to send this information along with the note. Synthesizers use this information to adjust several parameters on the sample (typically the volume). In Hydrogen, it is only used to adjust how loud the sample is played back.

    hydrogen-0.9.6-beta3/data/doc/manual_es.html000066400000000000000000003246671211146647700207040ustar00rootroot00000000000000Manual de Hydrogen

    Manual de Hydrogen

    Antonio Piraino

    Alessandro Cominu

    Thijs van Severen

    Sebastian Moors

    Resumen

    Hydrogen es un sintetizador de software que puede usarse solo, emulando una caja de ritmos basado en patrones, o a travs de un teclado MIDI/secuenciador de software. Hydrogen compila en Linux/x86 y Mac OS X, aunque este ltimo an es experimental, as que pregunta en la lista de correo de desarrolladores para ms detalles.


    Captulo 1. Introduccin

    1. Descarga

    You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

    If you want to compile Hydrogen yourself (see Seccin2), you can download the latest source files directly from our subversion server with:

    $ svn co http://svn.assembla.com/svn/hydrogen/trunk

    A certain release can be fetched with:

    $ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.5

    La compilacin de Hydrogen depende de las siguientes libreras:

    Por favor instlalos con el gestor de paquetes de tu distribucin. Si utilizas un sistema basado en debian, puedes instalar las libreras con:

    $ apt-get install libqt4-dev g++ libasound2-dev \
            libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
            liblash-dev libportaudio-dev libportmidi-dev 
          

    2. Compilacin

    Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

    2.1. Using scons

    Descomprime el tarball o ve al directorio donde se haya descargado la copia desde subversion:

    $ cd hydrogen-*
              $ scons
              $ su -c "scons install"
            

    Antes de compilar, consulta ms opciones con:

    $ scons --help
            

    Si quieres usar opciones que no estn activadas por defecto (por ejemplo PortAudio), puedes activarlas con:

    $ scons portaudio=1
            

    Si encuentras algn error al ejecutar Hydrogen y quieres comunicarlo, acurdate de configurar Hydrogen con:

    $ scons debug=1
            

    Para limpiar el cdigo compilado:

    $ scons -c
            

    3. Preferences

    First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).

    3.1. The General tab

    On the "General" tab (Figura1.1) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

    If you want to use Lash to manage your Jack connections you should enable it here so Hydrogen allows interaction with Lash.

    The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see Seccin3.1)

    The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching you need to enter the path where rubberband is installed on you system here.

    Figura 1.1. The General Tab

    The General Tab

    3.2. La pestaa de Sistema de Audio

    From the "Audio System" tab (Figura1.2) it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

    We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

    Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.

    Figura 1.2. La pestaa de Sistema de Audio

    La pestaa de Sistema de Audio

    Estn disponibles los siguientes drivers:

    • jackd: El driver Jack es un servidor de audio profesional que permite una latencia muy baja e intercambios con otros software de audio. Recomendamos encarecidamente el uso de este driver para sacar lo mejor de Hydrogen. El servidor JACK arrancar automticamente si no lo estaba ya.

    • ALSA: los drivers estndares de Linux ampliamente adoptados

    • OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort.

    • PortAudio: an open-source multi platform audio driver

    • CoreAudio: un driver para Mac OS X (experimental)

    3.3. La pestaa de Sistema Midi

    The "Midi System" tab (Figura1.3) contains all MIDI settings. Here you can choose the MIDI driver, input, and channel(s) that Hydrogen should respond to. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the 'binding' action line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action.

    Figura 1.3. La pestaa de Sistema Midi

    La pestaa de Sistema Midi

    3.4. La pestaa de Apariencia

    The "Appearance" tab (Figura1.4) let's you modify Hydrogen look and feel (font settings and interface style). Also the VU meters fall-off speed of the Mixer Window can be changed here.

    Figura 1.4. La pestaa de Apariencia

    La pestaa de Apariencia

    3.5. The Audio Engine tab (debug only)

    The "Audio Engine" tab (Figura1.5) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

    Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.

    Figura 1.5. La pestaa de Motor de Audio

    La pestaa de Motor de Audio

    Captulo 2. Utilizar Hydrogen

    1. Tipos de Archivo

    Antes de trabajar con Hydrogen, por favor familiarzate con estos archivos:

    • *.h2pattern: Archivo XML que describe un slo patrn. Los patrones son conjuntos de golpes y se gestionan en el editor de patrones.

    • *.h2song: Archivo XML que describe la cancin entera (o secuencia). Las canciones son conjuntos de patrones con sus propiedades y se gestionan utilizando el editor de canciones

    • *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs.

    • *.h2drumkit: Una carpeta comprimida y archivada que contiene todos los samples de sonidos que componen un "drumkit" (una batera) y un archivo XML de descripcin. Los drumkits son bsicamente un conjunto de samples.

    2. Men principal

    Proyectos: este men ofrece funciones relacionados con archivos.

    • Nuevo - Crear una cancin nueva

    • Mostrar Info - Configurar propiedades generales de la cancin como el nombre, autor, licencia y notas genricas

    • Abrir - Abrir una cancin

    • Abrir Demo - Abrir una cancin demo (las demos se guardan en $INSTALLPATH/share/hydrogen/data/demo_songs)

    • Abrir reciente - Abrir un men mostrando las ltimas canciones utilizadas

    • Guardar - Guardar cambios a la cancin actual

    • Guardar como - Guardar cancin actual especificando un nombre (ruta por defecto: $HOME/.hydrogen/data/songs)

    • Abrir patrn - Abrir un patrn guardado perteneciente al drumkit actual

    • Exportar patrn como - Guarda el patrn. Se guardar en $HOME/.hydrogen/data/patterns/nombre_drumkit

    • Exportar archivo MIDI - Exportar cancin actual en formato MIDI

    • Exportar cancin - Exportar cancin actual en formato WAV

    • Salir - Salir de Hydrogen

    Instrumentos: este men ofrece funciones de instrumentos y drumkit (libreras de sonidos).

    • Aadir instrumento - Aade un nuevo instrumento a tu drumkit actual

    • Limpiar todo - Borra todos los instrumentos del drumkit actual

    • Guardar librera - Guarda todas las configuraciones de instrumentos (y sus samples) en $HOME/.hydrogen/data/nombre_librera

    • Exportar librera - Comprime todos los samples de instrumentos y configuraciones de un drumkit en $HOME/.hydrogen/data/nombre_librera

    • Importar librera - Importa otro drumkit del sistema local de archivos or descrgalo de una ubicacin remota a travs de un flujo XML. El archivo XML que debera suministrarse NO es compatible con RSS (ver Hydrogen website para un ejemplo). Para cargar otro drumkit en tu sesin actual de Hydrogen, lee Seccin7.

    Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window.

    • Editor de lista de reproduccin - Una herramienta para gestionar listas de reproduccin.

    • Director - Open the director window.

    • Mezclador - Abre la ventana del mezclador.

    • Rack de instrumentos - Abre el panel del rack de instrumentos.

    • Preferencias - Abre la ventana principal de preferencias. Lee Seccin3 para ver cmo configurar Hydrogen.

    Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !).

    • Mostrar info del motor de audio - Abre un monitor con varias estadsticas

    • accin de depuracin - Inserta comandos de depuracin.

    • Imprime objetos - Imprime el actual mapa de objetos en stdout.

    Info

    • Manual del usuario - Abre una ventana con este manual :)

    • About - The usual window with license information, acknowledgements, etc.

    3. Barra de herramientas principal

    Antes de analizar los dos marcos principales de Hydrogen, vamos a echar un rpido vistazo a la barra principal y sus componentes:

    • PIlota la cancin usando inicio, parada, pausa, etc. botones

    • Escoge entre modo "patrn" o modo "cancin": en modo "patrn", slo se reproducir el patrn seleccionado, mientras que en modo "cancin", se reproducirn todos los patrones insertados.

    • Funcin avanzada para marcar el tempo (Tap Tempo): determina la longitud de nota y el nmero de notas a esperar antes de recalcular las PPM; luego pulsa la tecla de coma repetidamente hasta que aparece la letra 'R' y se actualizan las PPM. (ver Seccin3.1)

    • Fijar PPM manualmente

    • Gestionar transporte JACK

    • Abre el mezclador y los paneles del rack de instrumentos

    Figura 2.1. Barra de Herramientas Principal

    Barra de Herramientas Principal

    • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

    • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see Seccin4). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see Seccin5).

    • Set measure type and Beat Counter (see Seccin3.1).

    • Configuracin de la velocidad de reproduccin (rango: 30-400 ppm) [Tecla acceso rpido = rueda del ratn] y botn para activar/desactivar el metrnomo

    • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

    • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected.

    3.1. Tap Tempo y Contador de Pulsaciones (BeatCounter)

    Es posible cambiar el tempo en cualquier momento utilizando las funciones de Tap Tempo y Contador de Pulsaciones de Hydrogen. Puedes cambiarlos durante la reproduccin o con la cancin parada. Para cambiar el tempo, pulsa la tecla , (coma) siguiendo un tempo para el nmero de pulsaciones en el comps. Cuando se realiza el nmero correcto de pulsaciones, el tempo cambiar al tempo medio que has pulsado. Si sigues pulsando, estas nuevas pulsaciones formarn parte de una media contnua. Si pulsas la tecla accidentalmente, o esperas demasiado entre pulsaciones, el contador de tempo empezar de nuevo.

    El Tap Tempo es parte del Contador de Pulsaciones, que es esencialmente un Tap Tempo a lo bestia. Por defecto el Contador de Pulsaciones no est visible. Para ver el widget del Contador de Pulsaciones haz clic en el botn vertical (BC) entre el selector de modo Cancin/Patrn y el widget de PPM. O se puede mostrar pulsando la tecla de coma (,).

    El tempo que teclees se considerar como golpes pares del tipo de comps. El tipo de comps se puede fijar como 1/8 (para compases de ocho negras), 1/4 (para compases de cuatro negras), 1/2 (para compases de dos negras), y 1/1 (para compases de una blanca). Para cambiar el tipo de comps usa la tecla de flecha izquierda. Para contar el nmero de pulsaciones contadas, usa la tecla de flecha derecha. Puedes fijar de 2 a 16 pulsaciones. (Por ej. si fijas las pulsaciones en 6, tendrs que pulsar la tecla 6 veces antes de que compute y fije el nuevo tempo). Cuando la pantalla muestra una R, significa que el Contador de Pulsaciones est preparado para comenzar de 0. Cada vez que pulsas la tecla de coma, mostrar el nmero de pulsaciones que has realizado (1, 2, 3...).

    El botn de la parte inferior derecha controla la funcin de auto-arranque, y cambia entre S y P. Cuando muestra la P de (Play), la cancin fijar el nuevo tempo y automticamente empezar a reproducir despus de que pulses el nmero correcto de pulsaciones (si no est reproduciendo ya, claro). De este modo, si tienes el Contador de Pulsaciones fijado para 4/4, puedes pulsar 1-2-3-4, y comenzar a reproducir en el siguiente comps. Cuando muestra la S (de Set BPM), (fijar PPM) el auto-arranque est desactivado.

    Por ejemplo: Supn que tienes una banda en directo, Hydrogen, y un sintetizador de software controlado por Seq24... y quieres que todos arranquen a la vez. Fija el tipo de comps en 1/4 y el nmero de golpes en 4. Activa el auto-arranque (el botn muestra una P). Cuenta 1-2-3-4 para la banda (dando a la tecla de coma) — y todos empiezan a la de 1.

    Otro ejemplo: La misma situacin, pero la cancin no necesita de Hydrogen ni sintetizadores hasta ms tarde. Durante ese tiempo, un humano (por ej. el guitarrista) fijar el tempo. En el comps antes de que Hydrogen debe tocar, pulsa la tecla de coma 1-2-3-4 con el ritmo... y entras en el siguiente comps (con el tempo correcto).

    Si utilizas Transporte JACK, el Contador de Pulsaciones sigue funcionando. Si otro programa es el Maestro del Transporte JACK, Hydrogen responder al cambio de tempo de esa aplicacin. Ntese que en esta situacin, Hydrogen funciona como esclavo, as que algunas funciones del Contador de Pulsaciones estarn desactivadas o no funcionarn correctamente. Si Hydrogen es el Maestro del Transporte JACK, los cambios de tempo de Hydrogen se vern reflejados en los dems programas (suponiendo que lo soportan).

    Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see Seccin3.1 ). Here you will finde two spinboxes:

    • Compensacin de desajuste del Contador de Pulsaciones en 1/10ms — ajusta esto para compensar la latencia entre el teclado y el programa.

    • Compensacin para el inicio del Contador de Pulsaciones en ms — ajusta el tiempo entre el ltimo golpe tecleado en el Contador de Pulsaciones y el momento en que se inicia la cancin (si est activado el auto-arranque).

    Ntese que estos valores pueden ser positivos (+) o negativos (-). Para encontrar valores tiles, tendrs que tomarte tu tiempo para hacer pruebas. Adems, puede que requieras diferentes valores dependiendo de la velocidad de tu hardware, dispositivo de audio, drivers, etc. La utilizacin del Contador de Pulsaciones require prctica.

    4. Editor de Canciones

    The "Song Editor" (Figura2.2) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel is a complete bar as shown in the underlying "Pattern Editor" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns.

    El Editor de Canciones viene con 7 botones:

    • Borrar completamente todos los patrones (pide confirmacin!).

    • Crear un patrn nuevo (y pide un nombre).

    • Mover el patrn seleccionado hacia arriba o abajo.

    • Activar seleccin de patrones para copiar & pegar (Seleccionar Modo).

    • Activar Modo Dibujo.

    • Cambiar de "Modo patrn nico" a "Modo patrones apilados" y viceversa.

    Debajo de estos botones hay una lista de patrones creados y cundo se reproducir cada uno (cada cuadrado == 1 comps). Haz clic en un cuadrado para aadir o quitar el patrn. Al pulsar el botn derecho del ratn sobre el nombre de un patrn, se mostrar un men para cambiar el nombre del patrn o para copiar/borrarlo. No se permite ms de un patrn con el mismo nombre.

    Figura 2.2. El Editor de Canciones

    El Editor de Canciones

    4.1. Virtual patterns

    Virtual patterns are a convenient way of grouping patterns together. For example, say you have a song in which three patterns are always played together at the start of each bar. Previously, the way to do this in the pattern matrix was to explicitly enable the three patterns at each bar.

    With virtual patterns we can assign a pattern to be a sort of meta-pattern that implicitly invokes these three patterns together when the new virtual pattern is enabled in the pattern matrix. This way, we only need to set one pattern every bar, instead of three.

    Virtual patterns provide a function that's similar to the regular pattern editor, and one could argue that since a virtual pattern is also a regular pattern, we could have just merged the three patterns into this new one. However, the advantage that virtual patterns provide is that if one of the original three patterns changes, the virtual pattern automatically inherits the change. A virtual pattern can also invoke other virtual patterns.

    To access virtual patterns, right click (bring up the context menu) on the label of an existing pattern and there select “Virtual Pattern”. This will bring up a small dialog that allows one to toggle which patterns are in the virtual pattern set.

    5. Editor de Patrones

    The "Pattern Editor" lets us create or modify the pattern (bar) which is currently selected. You can add/remove notes, and tune a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)

    First let's take a look at the (classic) 'Drum' mode :

    Figura 2.3. Pattern Editor in Drum mode

    Pattern Editor in Drum mode


    5.1. Pattern Editor Controls

    The top part of the pattern editor contains a number of controls :

    Figura 2.4. Pattern Editor Controls

    Pattern Editor Controls

    From left to right :

    • SIZE : lets you choose the size of the pattern (the number of bars)

    • RES : this is the current grid resolution (4 through 64)

      Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer.

    • HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern.

    • QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied.

    • Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your sound library as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

    • Note Length / Note off : these are 2 different ways to define the duration of a note. See Seccin5.3 for usage.

    • Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)

    5.2. Pattern Editor Drumkit

    The section on the left shows you what drumkit/library is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

    Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select

    • Clear notes : to remove all notes for this instrument in this pattern.

    • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

    • Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played.

    • Delete Instrument : well, deletes the instrument ;-)

    The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons.

    The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit/library. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys.

    Important Notes :

    The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default.

    Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

    Here's a quick reference of the above bindings for your convenience.

    5.3. Pattern Editor Sequence area

    This is where it all happens, this is where you can make music :-)

    In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

    If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note.

    (Figure above, from left >right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

    So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see Seccin2) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see Captulo3 for a basic walk-through of how the pattern editor works)

    5.4. Pattern Editor Note Properties

    Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :

    • Velocity : how hard the note is played (the volume of the note)

      Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping.

    • Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)

    • Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)

    • Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'

      The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

    5.5. Pattern Editor Piano mode

    Drum mode (see Figura2.3) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

    You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.

    Figura 2.5. Pattern Editor in Piano mode

    Pattern Editor in Piano mode

    6. Mezclador

    Figura 2.6. El Mezclador

    El Mezclador

    El marco del Mezclador (Figura2.6) es til para ajustar el volumen global o de un solo instrumento en el drumkit actual. Muestra el pico actual (haz clic en para desactivarlo, til para CPUs viejas) y te permite determinar el pico mximo permitido (ajstalo con el fader del instrumento), modificar atributos como paneo, reproduccin solo , silencio o probar slo ese instrumento ; al elegir un instrumento en el Editor de Patrones se enciende un LED azul (cerca del botn de reproducir). Cerca del control global de volumen, puedes configurar 3 efectos globales como swing (mueve algunas notas hacia atrs o adelante no aleatoriamente), tiempo (humaniza el tiempo de las notas) y humanizar (edita la intensidad aleatoriamente).

    Adems, puedes configurar hasta 4 efectos especiales LADSPA para cada instrumento pulsando el botn de . Consulta la siguiente seccin para una descripcin detallada.

    7. Biblioteca de Sonidos (Gestor de Drumkits)

    La Biblioteca de Sonidos te ahorra tiempo al gestionar tus drumkits, patrones favoritos y canciones favoritas. Al hacer nuevas canciones y drumkits, la Biblioteca de Sonidos te facilita el reutilizar y mezclar los instrumentos y patrones de otros drumkits y patrones.

    7.1. Drumkits del sistema

    Esto enumera los drumkits instalados por tu administrador de sistemas. Se determina mediante el prefijo de tiempo de compilacin (compile-time). En sistemas operativos tipo Unix, esto normalmente es /usr/share/hydrogen/data/drumkits, o posiblemente /usr/local/share/hydrogen/data/drumkits. Estos drumkits estn disponibles para cualquier usuario, y stos normalmente no pueden hacer aadidos.

    Para cargar un drumkit desde aqu, haz clic derecho sobre el drumkit y selecciona Cargar. Esto reemplazar el drumkit actual con el que has seleccionado. Para cargar slo un instrumento de ese drumkit, haz clic izquierdo sobre el plus a la izquierda del nombre del drumkit para mostrar todos los instrumentos. Con el botn izquierdo del ratn, haz clic y arrastra los instrumentos al drumkit actual. El instrumento se aadir al drumkit que tienes cargado actualmente.

    7.2. Drumkits del usuario

    Estos son tus propios drumkits que puedes gestionar t mismo. Normalmente se guardan en $HOME/.hydrogen/data/drumkits. Cuando ests creando un nuevo drumkit, puedes guardarlo aqu seleccionando InstrumentosGuardar biblioteca .

    El procedimiento para cargar drumkits e instrumentos es el mismo que para los drumkits del sistema (ver Seccin7.1).

    7.3. Patrones en la Biblioteca de Sonidos

    Antes de guardar tus patrones en la biblioteca de sonidos asegrate de editar sus propiedades haciendo clic derecho y seleccionando Propiedades. Aqu puedes asignar un ttulo y una categora al patrn. Puedes utilizar una de las categoras ya proporcionadas, o crear tu propia categora simplemente tecleando un nombre de categora. El nombre de la categora es importante, porque los patrones se archivarn por categoras en la Biblioteca de Sonidos.

    Puedes guardar tus patrones favoritos en la biblioteca de sonidos haciendo clic derecho sobre el ttulo del patrn en el editor de canciones y seleccionando Guardar Patrn. Aparecer en la Biblioteca de Sonidos bajo Patrones y la categora que has asignado al patrn.

    7.4. Canciones en la Biblioteca de Sonidos

    Para guardar canciones en la Biblioteca de Sonidos, colcalos en tu directorio de datos en la carpeta de songs (normalmente $HOME/data/songs. Para eliminarlas, quita el archivo de esa carpeta.

    8. Edicin de Drumkits e Instrumentos

    La creacin de un nuevo drumkit con Hydrogen se realiza con el Editor de Instrumentos. Usando el editor de instrumentos puedes cargar samples, configurar parmetros de la envolvente (envelope), configurar la ganancia (gain), y algunas funciones avanzadas ms como grupos de silencio (mute groups), filtro de resonancia low-pass (low-pass resonance filter) y altura tonal aleatoria (pitch randomization).

    En lugar de crear tu propio drumkit, tambin puedes utilizar or descargar drumkits existentes utilizando Seccin7.

    8.1. Conceptos

    El sintetizador de Hydrogen es un sintetizador basado en samples. Un sample es un trozo de audio pregrabado (normalmente entre .1 seg. y 3 seg.). Para reproducir una nota, el sample simplemente se reproduce en el momento preciso. Existen algunos conceptos y trminos que debers entender a la hora de confeccionar un drumkit. (Ver Glosario para una explicacin ms detallada.)

    Trminos del Sintetizador de Samples

    Sample

    Una corta grabacin de un sonido, tpicamente con entre .1 y 3.0 segundos de duracin.

    Ganancia (Gain)

    Ajuste de volumen.

    Intensidad

    La fuerza con la que golpeas una nota.

    ADSR Envelope Generator (Generador de Envolventes ADSR)

    Un generador de envolventes de Attack (Ataque)/Decay (Decaimiento)/Sustain/Release. Tras disparar una nota, Hydrogen atacar la nota incrementando su volumen de 0 hasta la plena intensidad de la nota. Tras llegar a la mxima intensidad, decaer la nota bajando el volumen hasta que alcanza el nivel del sustain. Cuando la nota se suelta, (release) Hydrogen vuelve a reducir el volumen desde el nivel de sustain hasta 0.

    Attack (Ataque)

    La cantidad de tiempo para ir de 0 hasta la intensidad mxima.

    Decay (decaimiento)

    La cantidad de tiempo para ir de la intensidad mxima al volumen de sustain.

    Sustain

    El nivel (el volumen) en el que la nota se sostiene entre el sustain y el release. Es un porcentaje de la intensidad. No depende del tiempo.

    Release

    La cantidad de tiempo para ir del volumen de sustain de vuelta a 0.

    Los samples tpicos utilizados en Hydrogen son: el sonido de un golpe simple de batera, el sonido de un golpe simple de plato, el sonido de un golpe simple de cencerro. Cuando metes una nota en el patrn (o reproduces una nota usando MIDI), Hydrogen reproducir el sonido que hayas cargado. As que para crear un drumkit tienes que reunir grabaciones cortas del bombo, cada tom, cada plato, el hi hat abierto, el hi hat cerrado, la caja (con bordonero y sin bordonero), golpes del borde, etc.

    Sin embargo, no hay reglas en cuanto a qu puede ser un sample. Es comn utilizar Hydrogen para disparar sonidos que no son de batera, tales como: clips de audio de personas hablando, un clip de una cancin, efectos de sonido, clips de audio de pelculas, personas famosas hablando. Se creativo!

    8.2. Crear un Nuevo Drumkit

    Para empezar con un nuevo drumkit de cero, selecciona InstrumentosBorrar Todos . Esto te deja un banco de 32 instrumentos vacos. Para borrar instrumentos, haz clic derecho sobre cada instrumento y selecciona Borrar Instrumento. Para aadir ms instrumentos, selecciona InstrumentosAadir Instrumento .

    Selecciona un instrumento para empezar a editarlo. Esto se hace haciendo clic izquierdo sobre el nombre del instrumento en la lista de instrumentos (a la izquierda). Vers que el nombre del instrumento en el Editor de Instrumentos coincide con el que has seleccionado.

    Cuando el drumkit funciona tal como queras, selecciona InstrumentosGuardar biblioteca . Te pedir que le des un nombre al drumkit para guardarlo. Si quieres sobreescribir un drumkit ya existente, tendrs que teclear el mismo nombre que el kit que quieres reemplazar.

    Los drumkits se archivan automticamente en el directorio data (por ej. $HOME/data/drumkits).

    Para exportar un drumkit (para compartirlo con otros), hay que cargarlo primero en la Biblioteca de Sonidos. Despus, selecciona InstrumentosExportar biblioteca en el men. Selecciona el drumkit que deseas exportar y dale un nombre de archivo para guardarlo.

    8.3. Crear un Instrumento y Capas

    Para cada instrumento en un drumkit, puedes cargar varios samples y configurar diferentes parmetros del sintetizador. Esta seccin te ayudar paso a paso para crear un nuevo instrumento y cargar los samples.

    Para empezar a crear un instrumento, selecciona InstrumentosAadir instrumento. Esto te da un instrumento en blanco para comenzar.

    Ahora, necesitas dos samples. Cualquier archivo .WAV o .FLAC servir. Hydrogen proporciona varios en el directorio data/drumkits .

    En el editor de instrumentos, haz clic en Capas. Puedes cargar varias capas en el instrumento. Cul se reproduce depende de la intensidad de la nota entrante. Haz clic en Cargar Capa y dirige el Navegador de Archivos de Audio a tu sample. Fjate que el Navegador de Archivos de Audio te permitir una vista previa del sample antes de cargarlo. Tambin te permitir cargar ms de un sample a la vez. Pero por ahora, slo carga uno.

    Tras cargar el sample, vers que ahora hay un 1 arriba, y que el rectngulo de ms arriba se ha vuelto azul claro. Para cargar un segundo sample, haz clic en la ranura justo debajo, y luego haz clic en Cargar Capa para meter otro sample.

    Tras insertar los dos samples, probablemente vers que slo el primer sample se reproduce cuando disparas el instrumento. Esto es porque tienes que configurar los rangos de intensidad para las capas. Mueve el ratn hacia los laterales de los rectngulos azul claro y vers que sale un cursor para arrastrar hacia la derecha o la izquierda. Ahora arrastra el sample hacia la derecha o la izquierda (como una cortina). Ahora vers cmo aparece la Capa 2.

    La configuracin de intensidad para la capa es intensidad-0 a la izquierda, e intensidad mxima a la derecha. Configura la Capa 1 para las notas suaves y la Capa 2 para las notas fuertes. (Por ej. la Capa 1 a la izquierda y la Capa 2 a la derecha).

    Ahora, en la zona de patrones, configura un patrn simple que reproduce este instrumento. Ajusta las configuraciones de intensidad en cada nota para que puedan sonar los diferentes samples. Ahora pon el patrn en modo bucle y notars la diferencia entre los samples. (Para aprender sobre cmo editar un patrn, consulta Seccin5)

    Para cada capa puedes configurar la Ganancia y la Altura tonal. La altura tonal tambin tiene un ajuste Fino.

    Usa el ajuste de Ganancia para controlar el volumen del sample. Esto es necesario porque es muy difcil tener un conjunto de samples que suenen al mismo volumen. Al ajustar esto, los samples que estaban grabados demasiado bajo se pueden subir para igualarlos a los samples altos (que has tenido que bajar).

    Aviso

    Es muy fcil poner el mando de Ganancia demasiado alto, haciendo que el sample quede clipeado (distorsionado). Acurdate de probar la ganancia con notas de intensidad mxima. Si aqu se te clipea la seal, seguramente empeorar segn lo procesa Hydrogen.

    La altura tonal (pitch) del sample se puede modificar con los controles correspondientes. El mando de Altura Tonal (Pitch) ajusta la altura tonal en semitonos. (As que -12 baja 1 octava). El mando a la derecha ajusta la altura 50 cents. (Un semitono son 100 cents.)

    Nota

    La altura se ajusta reproduciendo el sample ms rpido o ms despacio. Esto se llama el Efecto Doppler. As que si tienes un sample de 1 segundo y lo bajas -12 (1 octava), tu sample slo durar 0.5-segundoss.

    8.4. Parmetros de Instrumentos

    En el editor de instrumentos, haz clic en el botn General. Aqu puedes configurar varios parmetros que son para el instrumento en su conjunto (no para cada capa). Los parmetros que puedes configurar son:

    • Parmetros de la envolvente (envelope): Attack, Decay, Sustain, Release. (Ver Generador de la Envolvente (Envelope Generator))

    • Ganancia (Gain): El volumen general del instrumento.

    • Grupo de silencio (Mute Group): El grupo de silencio al que pertenece este instrumento (ver Grupo de Silencio (Mute Group)).

    • Parmetros de Filtro: Circunvalar (Bypass), Corte (Cutoff), Resonancia (Resonance).

    • Altura Tonal Aleatoria (Random Pitch)

    Es importante que entiendas Seccin8.1 para poder continuar.

    8.4.1. Parmetros de la Envolvente (Envelope)

    Cuando se dispara el instrumento, su volumen pasa por una Envolvente ADSR (de aqu en adelante, ADSR envelope). Los parmetros funcionan de la siguiente manera:

    • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. [1]

    • Decay — la cantidad de tiempo para que el volumen del sample baje de la intensidad mxima hasta el volumen de sustain. Si el valor es 0, el sample inmediatamente saltar del volumen de attack al volumen de sustain. Si el valor es 1, el volumen del sample utilizar el mximo tiempo disponible para el parmetro de decay.[1]

    • Sustain — el volumen reproducido para la nota tras terminar la fase de decay, y hasta que la nota se "libera" (release). Si se configura a 0, la nota estar silenciada. Si se configura a 1.0, la nota sonar a la intensidad mxima.

    • Release — el tiempo necesario para apagar la nota desde el volumen de sustain hasta 0 (silencio). Si se deja en 0, la nota se silenciar en el tiempo mnimo (unos 5 ms). Si se deja en 1, se reducir en el tiempo mximo disponible.[1]

    Si el sample es ms corto que los tiempos especificados, terminar sin importar la fase de ADSR en el que se encuentre. Si la nota es sostenida, no silenciar la nota mientras lo sostengas. Slo sostiene el parmetro de ganancia (volumen) durante ese tiempo.

    8.4.2. Ganancia y Grupo de Silencio (Mute Group)

    La ganancia determina el volumen general del sample. Esta ganancia se aplica despus de la ganancia que has configurado para la capa, y antes de la ganancia configurada para el mezclador. Con la ganancia a 0, el instrumento estar silenciado. Con la ganancia a 1.0, el volumen de los samples no se ajustar (por ej. 0 dB). Si la ganancia se configura a ms, los samples se amplificarn.

    Aviso

    Es muy fcil poner el mando de Ganancia demasiado alto, haciendo que el sample quede clipeado (distorsionado). Acurdate de probar la ganancia con notas de intensidad mxima. Si aqu se te clipea la seal, seguramente empeorar segn lo procesa Hydrogen.

    Hydrogen proporciona ms grupos de silencio de los necesitars jams (ms de 256). Un grupo de silencio es un agrupamiento de instrumentos que son mtuamente exclusivos — slo puede sonar un instrumento en un momento dado. Si un instrumento est sonando y otro del grupo se dispara, el primero se silenciar inmediatamente y sonar el segundo instrumento. Esto es til sobre todo para instrumentos como el hi hat, donde el sonido abierto y el cerrado son instrumentos diferentes.

    Si el grupo de silencio est en Off, el instrumento no forma parte de ningn grupo. Si se especifica un nmero, entonces el instrumento pertenece al grupo denominado con ese nmero. Para meter otros instrumentos en el mismo grupo, configura el parmetro del grupo de silencio con el mismo nmero. (Por ejemplo, para agrupar todos los hi hats, puedes configurar el parmetro del grupo de silencio de todos ellos en el 1. Para tener un grupo de silencio para la caja, configura su parmetro para utilizar el 2.)

    8.4.3. Filtro y Altura Tonal Aleatorio

    El filtro es un low-pass resonance filter. Si no deseas usarlo, haz clic en el botn de BYP para que se ponga rojo. Si no est rojo el filtro se encuentra activo. El parmetro de corte (cutoff) determina la frecuencia de corte para el filtro. El parmetro de resonancia determina cunta resonancia tiene la frecuencia de corte. Si la resonancia se deja en 0, el filtro no es ms que un simple low-pass filter.

    Nota

    La frecuencia de corte del filtro vara con la tasa de muestreo de tu tarjeta de sonido. El rango del mando (0 a 1.0) est optimizado para una tasa de muestreo de 48,000 kHz.

    The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound more like a real drummer.

    8.5. Consejos a la hora de Editar Instrumentos

    Con todos los parmetros que hay disponibles, puede resultar difcil conseguir algo que suene bien cuando acabes. Aqu van algunos consejos para configurar un instrumento:

    Baja la ganancia. Cada vez que tienes un control de ganancia (por ej. un amplificador), esto se llama una etapa de potencia. Con cada etapa de potencia adicional que tengas, es fcil que satures la seal — lo cual significa que la seal se distorsiona debido al clipeo. Adems, si tienes dos samples que, por s solos, ya llegan al lmite — qu crees que pasar cuando los combines? Est claro, vuelves a saturar la seal.

    Si las cosas suenan mal y distorsionadas, empieza por bajar la ganancia de la capa... sobre todo si es mayor de 1.0. Luego baja la ganancia del instrumento. Luego cualquier ganancia de los efectos LADSPA. Luego el fader del mezclador. Luego el fader de la salida master.

    Prueba los samples a la mxima intensidad. El sample sonar ms alto si la intensidad es mayor. As que si lo configuras todo para que suene bien con una intensidad de 0.7, qu pasar cuando tengas una intensidad mxima de 1.0? (Una pista: saturacin.)

    Intenta usar samples con -6 dB mx. Visualmente, esto son samples que llegan a su pico mximo slo a la mitad del rango completo. Si no, deja la ganancia en aproximadamente 0.5.

    Quita todas las desviaciones de CD (DC offset) del sample. En un editor simple de samples, normalmente hay una lnea que atraviesa el centro de la onda. Esta es la lnea "cero". El inicio de tu sample debera de estar sobre esta lnea. El final del sample tambin debera de estar sobre esta lnea. Sin embargo, si la seal est un poco por encima o debajo de esta lnea, oirs un 'clic' al comienzo y al final del sample cada vez que sea reproducido. Si tu editor de samples no tiene herramientas para arreglar un problema de desviacin de CD, puedes eliminarlo poniendo un ligero fundido de entrada y salida en los extremos del sample.

    El ADSR no ser ms largo que tu sample. Si tienes un sample corto, no importa cmo configures el attack y el delay — el sample dejar de reproducirse.

    Las cosas cambian con la tasa de muestreo. Si tienes una configuracin realmente buena con todos los parmetros ajustados con esmero... las cosas cambiarn si modificas la tasa de muestreo de tu tarjeta de sonido. Muchas de las funcionalidades y los parmetros internos de Hydrogen estn basados en el nmero de samples que procesa, y no en el nmero de segundos. El tipo de cosas que cambian son: cualquier cosa basada en el tiempo (como el attack y el release) y cualquier cosa basada en la frecuencia (como la frecuencia de corte).

    9. Plugins LADSPA

    Hydrogen tambin puede aadir efectos a los sonidos usando cualquier librera de efectos LADSPA. Tienes que instalar las fuentes de LADSPA (disponibles en http://www.ladspa.org) y mientras que esto te ofrece una idea aproximada de cmo funciona, en realidad deberas probarlo de verdad instalndote una o ms libreras de plugins, que es tan simple como scons && scons install. Estos son algunos sitios donde puedes descargarte libreras de plugins:

    Los Plugins Matan

    A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others.

    Una vez que has instalado algunos plugins abre una cancin a la que quieres aadir un efecto y selecciona un instrumento que tiene unos cuantos golpes en el patrn. En el mezclador haz clic en y selecciona una de las lneas disponibles para plugins. Haz clic en el botn de Editar ( ), luego en Seleccionar el Efecto: esto abrir otra ventana (Figura2.7) que te permitir elegir un efecto de entre los que tienes instalados, que estn ordenados alfabticamente y por categoras. Cuando acabes, ajusta el nivel en el mezclador y empieza a tocar. Cada control redondo en la parte de efectos (FX) controla el nivel del efecto correspondiente. Si quieres activar/desactivar rpidamente el efecto, haz clic en el botn de Bypass ( ).

    Figura 2.7. Selecciona un Efecto

    Selecciona un Efecto



    [1] Los parmetros de ataque, decaimiento (decay) y release ("liberacin") estn determinados por el nmero de samples de audio. Esto significa que los cambios de tiempo dependen de la tasa de muestreo de tu tarjeta de sonido. El tiempo mximo para cada uno de ellos es de 100,000 samples de audio (normalmente 2.27 seg a 44.1 kHz).

    Captulo 3. Una nueva cancin

    1. Modo "Cancin" y modo "Patrn"

    Esto no es ms que una gua rpida de Hydrogen. Consulta el tutorial para una descripcin ms detallada.

    Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to Seccin3 for the buttons to activate). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern untill it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns, to create the structure of the song.

    2. Un nuevo patrn

    We'll start from an empty song with an empty pattern, as created by default: "pattern" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor (Figura3.1) simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!

    Figura 3.1. El Editor de Patrones

    El Editor de Patrones

    3. Una nueva secuencia

    Una vez que hemos creado los patrones (Figura3.2), podemos copiar/pegar/eliminarlos simplemente arrastrndolos con el ratn (activa 'modo seleccin' en el Editor de Canciones y mantn pulsado el botn izquierdo del ratn para seleccionar los que quieres mover o copiar).

    Figura 3.2. Insertar Notas en un Patrn

    Insertar Notas en un Patrn

    4. Configura desde el mezclador

    Por supuesto siempre podemos utilizar la ventana del mezclador, bien a la hora de crear o reproducir patrones.

    The Mixer frame (Figura3.3) is made of 32 independent tracks, each of these is binded to an instrument, plus a "Master Output" line to adjust general output volume and a "FX" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in Figura3.3 you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter.

    Figura 3.3. El Mezclador

    El Mezclador

    Captulo 4. Shortcut lists

    • [CTRL + N] = New Project

    • [CTRL + O] = Abrir Archivo

    • [CTRL + D] = Open Demo

    • [CTRL + S] = Guardar Archivo

    • [CTRL + SHIFT + S] = Save File as

    • [CTRL + P] = Export Pattern as

    • [CTRL + M] = Export MIDI file

    • [CTRL + E] = Export Song

    • [CTRL + Q] = Quit Hydrogen

    • [ALT + B] = Show Director window

    • [ALT + M] = Show Mixer window

    • [ALT + I] = Show Instrument rack

    • [ALT + P] = Show Preferences window

    • [CTRL + ?] = Show manual

    • [Retroceso] = Volver al principio de una cancin o un patrn

    • [spacebar] = Play / Pause

    • [,] (comma key) = Tap tempo (beatcounter)

    Glosario

    Esto es un glosario de trminos generales que se encuentran al utilizar Hydrogen, sintetizadores, bateras o samplers. Las definiciones del texto estn simplificadas, pero las definiciones aqu son ms generales y estn ms explicadas. Por ejemplo, el texto del manual te llevara a creer que un ADSR es el nico tipo de generador de envolventes (envelope generator), y que slo controla el volumen. Mientras que sirve para nuevos usuarios, no es del todo correcto.

    ADSR

    Un tipo de generador de envolventes que te permite controlar los parmetros de Attack, Decay, Sustain, y Release. Generalmente, los parmetros son proporcionales a la intensidad.

    En Hydrogen, el 'ADSR envelope generator' slo controla el volumen (atenuacin).

    Lee ms sobre esto en el Artculo de Wikipedia (en ingls) ADSR Envelope

    Ver tambin Generador de la Envolvente (Envelope Generator), Attack, Decay, Sustain, Liberacin (Release).

    Attack

    Esta es la primera fase de un 'ADSR envelope', y es la cantidad de tiempo necesario para subir el parmetro de 0 a la mxima intensidad tras disparar la nota.

    Ver tambin ADSR.

    Atenuacin

    En filtros y mezcladores, esto es la reduccin de la seal (volumen).

    Ver tambin Roll-off.

    Band-Pass Filter

    A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter.

    Ver tambin Filtro, Filtro 'High-Pass', Filtro Low-Pass.

    Saturacin (Clipping)

    Un fenmeno que afecta a una seal cuando es demasiado grande para lo que sea que lo recibe. Los picos de la seal (que normalmente son curvas redondeadas) se cortan al mximo volumen (clipeados). Esto distorsiona el sonido y normalmente no es deseable.

    Un ejemplo de saturacin es cuando reproduces msica a un volumen mayor de lo que puede soportar el altavoz. Algunas partes de la msica suenan desgarradas y borrosas.

    Frecuencia de Corte (Cutoff Frequency)

    En los filtros high-pass y low-pass, esta es la frecuencia que divide entre entre aquellas que pasan, y aquellas que se atenan (silenciadas). En un filtro de 'high-pass resonance', o uno de 'low-pass resonance', el corte es tambin la zona de frecuencias que se amplifican.

    Por ejemplo, si tienes un filtro low-pass y configuras una frecuencia de corte alta (por ej. 20kHz)... el filtro no afectar al sonido. Todas las frecuencias audibles pasarn sin modificarse. Al bajar la frecuencia de corte a algo como 40 Hz (la cuerda gruesa de un bajo), suena como si alguien tapara el altavoz con una manta. Las frecuencias altas se estn atenuando por encima de los 30 Hz.

    Ver tambin Filtro, Filtro 'High-Pass', Filtro Low-Pass, Filtro de Resonancia.

    Decay

    Tras alcanzar la mxima intensidad del 'attack', esto es la cantidad de tiempo necesario para bajar el parmetro hasta el nivel del sustain.

    Ver tambin ADSR.

    Generador de la Envolvente (Envelope Generator)

    Una manera de controlar (cambiar) un parmetro a lo largo del tiempo como respuesta al disparo, sostenimiento y liberacin de una nota.

    Se te acaba de nublar la vista? Intentmoslo de nuevo:

    Imagina que ests tocando una nota en el teclado y tienes la otra mano en un mando (volumen, filtro de corte, etc.). Segn tocas la nota, giras e mando (hacia arriba, luego abajo... o viceversa). Haces lo mismo con cada nota. Esto es lo que hace el 'envelope generator'. Consulta tambin ADSR

    Fader

    Un control deslizante utilizado para ajustar la atenuacin (volumen) en un mezclador. Los faders siempre tienen un potencimetro de "audio", lo que significa que los cambios de atenuacin tienen lugar en una escala exponencial.

    Filtro

    Un dispositivo que cambia un sonido atenuando frecuencias especficas. Un control de tono es un ejemplo de un filtro simple de 'low pass'.

    Ver tambin Band-Pass Filter, Filtro 'High-Pass', Filtro Low-Pass, Filtro de Resonancia.

    Ganancia

    En un amplificador, determina cunto se amplifica una seal (volumen). A mayor valor de ganancia, ms volumen.

    Filtro 'High-Pass'

    Un filtro que atena (silencia) frecuencias bajas, pero que permite el paso de frecuencias altas.

    Ver tambin Filtro, Frecuencia de Corte (Cutoff Frequency).

    Instrumento

    En Hydrogen, un instrumento es un nico generador de ruido (como puede ser un bombo o un tom).

    Capa

    En un instrumento, puedes cargar varios samples diferentes capa), y hacer que suene un sample diferente dependiendo de la intensidad de la nota. Slo sonar un sample a la vez.

    Supn que tienes un sample de un golpe suave de timbal base. Si simplemente reproduces el sample ms alto — no sonar igual que un golpe fuerte en un tom de verdad. Si quieres imitar esto en tu instrumento, puedes cargar un sample par los golpes suaves, y otro sample para los fuertes.

    Ver tambin Instrumento.

    Filtro Low-Pass

    A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through.

    Ver tambin Filtro, Frecuencia de Corte (Cutoff Frequency).

    Silencio (Mute)

    Para no hacer sonido. Una funcin del instrumento que evita cualquier salida de audio.

    Grupo de Silencio (Mute Group)

    Un grupo de instrumentos (samples) que debera silenciarse inmediatamente cuando se dispara otro instrumento del mismo grupo.

    Esto se utiliza normalmente para los hi-hats, donde hay un instrumento (sample) diferente para cuando est abierto y cerrado. Con un hi-hat real, el sonido abierto parar en cuanto lo cierres. Sin embargo, si utilizas dos samples — el sonido de abierto continuar an despus de disparar el sonido de cerrado. Al colocar ambos instrumentos en el mismo grupo (grupo #1, por ejemplo)... al disparar el sonido de cerrado el de abierto se parar automticamente (y vice versa).

    Octava

    Un rango de frecuencias donde la ms alta es exctamente el doble de la ms baja.

    Por ejemplo, el rango de 20 Hz a 40 Hz es una octava. Como lo es de 120 Hz a 240 Hz, y de 575 Hz a 1150 Hz. Mientras que las diferencias de frecuencia son muy variadas (20 Hz, 120 Hz, y 575 Hz, respectivamente), para el odo humano suenan como si les separara la misma distancia.

    Liberacin (Release)

    Tras soltar/liberar la nota, esto es la cantidad de tiempo necesario para reducir el parmetro del nivel de sustain a 0.

    Ver tambin ADSR.

    Resonancia

    Al referirnos al filtro de resonancia, esto es el parmetro que determina cunta ganancia se da a las frecuencias en el corte.

    Ver tambin Filtro de Resonancia.

    Filtro de Resonancia

    Un filtro que amplifica un estrecho rango de frecuencias. Tpicamente formar parte de un filtro high-pass o low-pass, donde las frecuencias amplificadas se centran en la frecuencia de corte.

    Ver tambin Filtro, Frecuencia de Corte (Cutoff Frequency), Resonancia.

    Roll-off

    Esta es la cantidad de atenuacin (supresin) aplicada a las frecuencias segn cambia la frecuencia (normalmente medido en dB/octava).

    For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency.

    Ver tambin Atenuacin, Filtro.

    Sample

    Una corta grabacin de un sonido, tpicamente con entre .1 y 3.0 segundos de duracin.

    Sustain

    El nivel en el que se sostiene el parmetro tras terminar el tiempo de decay. Este nivel se mantendr hasta que la nota se suelta.

    Ver tambin ADSR.

    Intensidad

    La fuerza con la que golpeas una nota.

    Los dispositivos MIDI deben enviar esta informacin junto con la nota. Los sintetizadores utilizan esta informacin para ajustar varios parmetros en el sample (normalmente el volumen). En Hydrogen, slo se utiliza para determinar el volumen al que se reproduce el sample.

    hydrogen-0.9.6-beta3/data/doc/manual_es.po000066400000000000000000004257011211146647700203450ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # msgid "" msgstr "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2009-10-13 11:59+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Daryl O'Hara \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: application/x-xml2pot; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: manual.docbook:7 #, no-c-format msgid "Hydrogen Manual" msgstr "Manual de Hydrogen" #. Tag: author #: manual.docbook:9 #, no-c-format msgid "Antonio Piraino" msgstr "Antonio Piraino" #. Tag: author #: manual.docbook:13 #, no-c-format msgid "Alessandro Cominu" msgstr "Alessandro Cominu" #. Tag: para #: manual.docbook:22 #, no-c-format msgid "Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter is still experimental, so ask in the developers mailing list for further details." msgstr "Hydrogen es un sintetizador de software que puede usarse solo, emulando una caja de ritmos basado en patrones, o a través de un teclado MIDI/secuenciador de software. Hydrogen compila en Linux/x86 y Mac OS X, aunque este último aún es experimental, así que pregunta en la lista de correo de desarrolladores para más detalles." #. Tag: title #: manual.docbook:37 #, no-c-format msgid "Introduction" msgstr "Introducción" #. Tag: title #: manual.docbook:40 #, no-c-format msgid "Download" msgstr "Descarga" #. Tag: para #: manual.docbook:42 #, no-c-format msgid "The latest stable version of hydrogen is available as a tarball at http://www.hydrogen-music.org." msgstr "La última versión estable de Hydrogen está disponible como tarball en http://www.hydrogen-music.org." #. Tag: para #: manual.docbook:48 #, no-c-format msgid "It is possible to download the latest source files directly from our subversion server with: $ svn co http://svn.assembla.com/svn/hydrogen/trunk A certain release can be fetched with:" msgstr "Es posible descargar la última versión del código fuente directamente desde nuestro servidor de subversion con: $ svn co http://svn.assembla.com/svn/hydrogen/trunk Se puede descargar una versión concreta con:" #. Tag: screen #: manual.docbook:56 #, no-c-format msgid "$ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.3" msgstr "$ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.3" #. Tag: para #: manual.docbook:59 #, no-c-format msgid "Compiling Hydrogen depends on the following libraries:" msgstr "La compilación de Hydrogen depende de las siguientes librerías:" #. Tag: para #: manual.docbook:63 #, no-c-format msgid "qt (>= 4.0) at http://www.trolltech.com" msgstr "qt (>= 4.0) en http://www.trolltech.com" #. Tag: para #: manual.docbook:66 #, no-c-format msgid "libsndfile at http://www.mega-nerd.com/libsndfile/" msgstr "libsndfile en http://www.mega-nerd.com/libsndfile/" #. Tag: para #: manual.docbook:69 #, no-c-format msgid "ALSA (>= 1.x) at http://www.alsa-project.com (only if you wish to use ALSA as audio driver)" msgstr "ALSA (>= 1.x) en http://www.alsa-project.com (sólo si quieres usar ALSA como driver de audio)" #. Tag: para #: manual.docbook:73 #, no-c-format msgid "Jack Audio Connection Kit (>= 0.80) at http://jackaudio.org/ (only if you wish to use Jack as audio driver)" msgstr "Jack Audio Connection Kit (>= 0.80) en http://jackaudio.org/ (sólo si quieres usar JACK como driver de audio)" #. Tag: para #: manual.docbook:78 #, no-c-format msgid "PortAudio at http://www.portaudio.com (only if you wish to use PortAudio as audio driver)" msgstr "PortAudio en http://www.portaudio.com (sólo si quieres usar PortAudio como driver de audio)" #. Tag: para #: manual.docbook:82 #, no-c-format msgid "Flac at http://flac.sf.net (only if you wish to use flac samples)" msgstr "Flac en http://flac.sf.net (sólo si quieres usar samples en flac)" #. Tag: para #: manual.docbook:86 #, no-c-format msgid "ladspa at http://ladspa.org (only if you wish to use ladspa effects)" msgstr "ladspa en http://ladspa.org (sólo si quieres usar efectos ladspa)" #. Tag: para #: manual.docbook:90 #, no-c-format msgid "liblrdf at http://liblrdf.sf.net (only if you wish to use lrdf to categorise effects)" msgstr "liblrdf en http://liblrdf.sf.net (sólo si quieres usar lrdf para categorizar efectos)" #. Tag: para #: manual.docbook:93 #, no-c-format msgid "lash at http://lash.nongnu.org (only if you wish to use lash)" msgstr "lash en http://lash.nongnu.org (sólo si quieres usar lash)" #. Tag: para #: manual.docbook:98 #, no-c-format msgid "Please install them with your distribution's package manager. If you're running a debian-based system, you can install the libraries with:" msgstr "Por favor instálalos con el gestor de paquetes de tu distribución. Si utilizas un sistema basado en debian, puedes instalar las librerías con:" #. Tag: screen #: manual.docbook:102 #, no-c-format msgid "" "$ apt-get install libqt4-dev g++ libasound2-dev \\\n" " libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \\\n" " liblash-dev libportaudio-dev libportmidi-dev " #. Tag: title #: manual.docbook:107 #, no-c-format msgid "Build" msgstr "Compilación" #. Tag: para #: manual.docbook:109 #, no-c-format msgid "Decompress the tarball or go to the directory where the subversion copy was checked out:" msgstr "Descomprime el tarball o ve al directorio donde se haya descargado la copia desde subversion:" #. Tag: screen #: manual.docbook:112 #, no-c-format msgid "" "$ cd hydrogen-*\n" " $ scons\n" " $ su -c \"scons install\"" #. Tag: para #: manual.docbook:114 #, no-c-format msgid "Before compiling, check for additional options with:" msgstr "Antes de compilar, consulta más opciones con:" #. Tag: screen #: manual.docbook:116 #, no-c-format msgid "$ scons --help" msgstr "$ scons --help" #. Tag: para #: manual.docbook:118 #, no-c-format msgid "If you want to use features which are not enabled by default (for instance PortAudio), you can enable them with:" msgstr "Si quieres usar opciones que no están activadas por defecto (por ejemplo PortAudio), puedes activarlas con:" #. Tag: screen #: manual.docbook:121 #, no-c-format msgid "$ scons portaudio=1" msgstr "$ scons portaudio=1" #. Tag: para #: manual.docbook:123 #, no-c-format msgid "Namely, if you get some error while running Hydrogen and you want to report it remember to configure hydrogen with:" msgstr "Si encuentras algún error al ejecutar Hydrogen y quieres comunicarlo, acuérdate de configurar Hydrogen con:" #. Tag: screen #: manual.docbook:126 #, no-c-format msgid "$ scons debug=1" msgstr "$ scons debug=1" #. Tag: para #: manual.docbook:128 #, no-c-format msgid "To clean up compiled code:" msgstr "Para limpiar el código compilado:" #. Tag: screen #: manual.docbook:130 #, no-c-format msgid "$ scons -c" msgstr "$ scons -c" #. Tag: title #: manual.docbook:134 #, no-c-format msgid "Audio preferences" msgstr "Preferencias de audio" #. Tag: para #: manual.docbook:136 #, no-c-format msgid "First of all you should make shure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences)." msgstr "Lo primero que debes hacer es asegurarte de que el motor de audio está configurado bien. Se accede al diálogo de preferencias a través del menú de herramientas (tools -> preferences)." #. Tag: title #: manual.docbook:141 #, no-c-format msgid "The Audio System tab" msgstr "La pestaña de Sistema de Audio" #. Tag: para #: manual.docbook:143 #, no-c-format msgid "From the \"Audio System\" tab () it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless using JACK, in this case the audio driver configuration should happen before starting the JACK server)." msgstr "En la pestaña de \"Sistema de Audio\" () es posible modificar el driver de audio que se utiliza (OSS, Jack, ALSA, PortAudio) con su buffer y tasa de muestreo (menos cuando se usa JACK, en este caso la configuración del driver de audio debe hacerse antes de arrancar el servidor JACK)." #. Tag: para #: manual.docbook:149 #, no-c-format msgid "We can set some features of Hydrogen like \"Enable track outputs\" useful if you want to add effects to a single instrument with jack-rack. \"Connect to Default Output Pair\" connects the output to the default ports: uncheck this if you want to connect JACK output to other ports without disconnecting them first" msgstr "Podemos activar algunas opciones de Hydrogen como \"Activar salida de pistas\", útil si quieres añadir efectos a un sólo instrumento con jack-rack. \"Conectar a Pareja de Salida por Defecto\" conecta la salida a los puertos por defecto: desactívalo si quieres conectar la salida JACK a otros puertos sin desconectarlos primero." #. Tag: para #: manual.docbook:155 #, no-c-format msgid "Keep also an eye on the value of \"Polyphony\": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overunning the audio driver." msgstr "Ojo también con el valor de \"Polifonía\": dependiendo de tu CPU quizá quieras cambiar el número máximo de notas simultáneas para evitar que Hydrogen desborde el driver de audio." #. Tag: title #: manual.docbook:160 #, no-c-format msgid "The Audio System Tab" msgstr "La pestaña de Sistema de Audio" #. Tag: para #: manual.docbook:168 #, no-c-format msgid "The following drivers are available:" msgstr "Están disponibles los siguientes drivers:" #. Tag: para #: manual.docbook:175 #, no-c-format msgid "jackd: The Jack driver is a professional audio server which permits very low lag and exchanges with other audio software. We strongly recommend using this driver to have the best out of Hydrogen. JACK server will start automatically if not already running." msgstr "jackd: El driver Jack es un servidor de audio profesional que permite una latencia muy baja e intercambios con otros software de audio. Recomendamos encarecidamente el uso de este driver para sacar lo mejor de Hydrogen. El servidor JACK arrancará automáticamente si no lo estaba ya." #. Tag: para #: manual.docbook:183 #, no-c-format msgid "ALSA: the widely adopted Linux standard audio drivers" msgstr "ALSA: los drivers estándares de Linux ampliamente adoptados" #. Tag: para #: manual.docbook:188 #, no-c-format msgid "OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort." msgstr "OSS: El driver de audio Oss utiliza /dev/dsp y está basado en la interfaz OSS que es soportado por la gran mayoría de tarjetas de sonido disponible para linux; dicho esto, el uso de este driver bloquea /dev/dsp hasta que Hydrogen se cierra; esto es, otro software no puede acceder a él. Úsalo como un último recurso." #. Tag: para #: manual.docbook:197 #, no-c-format msgid "PortAudio: an open-source multiplatform audio driver" msgstr "PortAudio: un driver de audio de código abierto y multiplataforma" #. Tag: para #: manual.docbook:202 #, no-c-format msgid "CoreAudio: a driver for Mac OS X (experimental)" msgstr "CoreAudio: un driver para Mac OS X (experimental)" #. Tag: title #: manual.docbook:209 #, no-c-format msgid "The Midi System tab" msgstr "La pestaña de Sistema Midi" #. Tag: para #: manual.docbook:211 #, no-c-format msgid "The \"Midi System\" tab () concerns the MIDI input. You can choose the MIDI driver and input, setup channels, binding actions to MIDI events." msgstr "La pestaña de \"Sistema Midi\" () concierne a la entrada MIDI. Puedes escoger el driver MIDI y la entrada, configurar canales, vincular acciones a eventos MIDI." #. Tag: title #: manual.docbook:216 #, no-c-format msgid "The MIDI System Tab" msgstr "La pestaña de Sistema Midi" #. Tag: title #: manual.docbook:226 #, no-c-format msgid "The Appearance tab" msgstr "La pestaña de Apariencia" #. Tag: para #: manual.docbook:228 #, no-c-format msgid "The \"Appearance\" tab () let's you to modify Hydrogen and QT graphical properties." msgstr "La pestaña de \"Apariencia\" () te permite modificar las propiedades gráficas de Hydrogen y QT." #. Tag: title #: manual.docbook:233 #, no-c-format msgid "The Appearance Tab" msgstr "La pestaña de Apariencia" #. Tag: title #: manual.docbook:244 #, no-c-format msgid "The Audio Engine tab" msgstr "La pestaña de Motor de Audio" #. Tag: para #: manual.docbook:246 #, no-c-format msgid "The audio engine info is a window with various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect)." msgstr "La info del motor de audio es una ventana con varias estadísticas sobre Hydrogen y el driver de audio. En caso de usar JACK, la tasa de muestreo y el buffer deben configurarse antes de arrancar Hydrogen (JACK arranca automáticamente cuando una aplicación intenta conectarse)." #. Tag: title #: manual.docbook:252 #, no-c-format msgid "The Audio Engine Info Window" msgstr "La Ventana de Info del Motor de Audio" #. Tag: title #: manual.docbook:270 #, no-c-format msgid "Using Hydrogen" msgstr "Utilizar Hydrogen" #. Tag: title #: manual.docbook:273 #, no-c-format msgid "Used Filetypes" msgstr "Tipos de Archivo" #. Tag: para #: manual.docbook:275 #, no-c-format msgid "Before working with Hydrogen, please familiarize with these filetypes:" msgstr "Antes de trabajar con Hydrogen, por favor familiarízate con estos archivos:" #. Tag: para #: manual.docbook:280 #, no-c-format msgid "*.h2pattern: XML file describing a single pattern. Patterns are group of beats and are managed in the pattern editor." msgstr "*.h2pattern: Archivo XML que describe un sólo patrón. Los patrones son conjuntos de golpes y se gestionan en el editor de patrones." #. Tag: para #: manual.docbook:285 #, no-c-format msgid "*.h2song: XML file describing the whole song (or sequence). Songs are group of patterns with their properties and are manager using the song editor" msgstr "*.h2song: Archivo XML que describe la canción entera (o secuencia). Las canciones son conjuntos de patrones con sus propiedades y se gestionan utilizando el editor de canciones" #. Tag: para #: manual.docbook:290 #, no-c-format msgid "*.h2playlist: XML file describing a playlist.A Playlist is a (ordered) group of songs." msgstr "*.h2playlist: Archivo XML que describe una lista de reproducción. Una Lista de Reproducción es un conjunto de canciones." #. Tag: para #: manual.docbook:294 #, no-c-format msgid "*.h2drumkit: a compressed and archived folder containing all sound samples composing a drumkit and a description XML file. Drumkits are basically group of sound samples." msgstr "*.h2drumkit: Una carpeta comprimida y archivada que contiene todos los samples de sonidos que componen un \"drumkit\" (una batería) y un archivo XML de descripción. Los drumkits son básicamente un conjunto de samples." #. Tag: title #: manual.docbook:303 #, no-c-format msgid "Main menu" msgstr "Menú principal" #. Tag: para #: manual.docbook:305 #, no-c-format msgid "Projects: this menu offers file related functions." msgstr "Proyectos: este menú ofrece funciones relacionados con archivos." #. Tag: para #: manual.docbook:310 #, no-c-format msgid "New - Create a new song" msgstr "Nuevo - Crear una canción nueva" #. Tag: para #: manual.docbook:313 #, no-c-format msgid "Show Info - Set general properties of the song such as name, author, license and generic notes" msgstr "Mostrar Info - Configurar propiedades generales de la canción como el nombre, autor, licencia y notas genéricas" #. Tag: para #: manual.docbook:317 #, no-c-format msgid "Open - Open a song" msgstr "Abrir - Abrir una canción" #. Tag: para #: manual.docbook:320 #, no-c-format msgid "Open Demo - Open a demo song (demo songs are stored in $INSTALLPATH/share/hydrogen/data/demo_songs)" msgstr "Abrir Demo - Abrir una canción demo (las demos se guardan en $INSTALLPATH/share/hydrogen/data/demo_songs)" #. Tag: para #: manual.docbook:325 #, no-c-format msgid "Open recent - Open a menu showing last used songs" msgstr "Abrir reciente - Abrir un menú mostrando las últimas canciones utilizadas" #. Tag: para #: manual.docbook:329 #, no-c-format msgid "Save - Save changes to current song" msgstr "Guardar - Guardar cambios a la canción actual" #. Tag: para #: manual.docbook:332 #, no-c-format msgid "Save as - Save current song specifying a name (default path: $HOME/.hydrogen/data/songs)" msgstr "Guardar como - Guardar canción actual especificando un nombre (ruta por defecto: $HOME/.hydrogen/data/songs)" #. Tag: para #: manual.docbook:337 #, no-c-format msgid "Open pattern - Open a saved pattern belonging to the current drumkit" msgstr "Abrir patrón - Abrir un patrón guardado perteneciente al drumkit actual" #. Tag: para #: manual.docbook:341 #, no-c-format msgid "Export pattern as - Saves a pattern. It will be stored in $HOME/.hydrogen/data/patterns/drumkit_name" msgstr "Exportar patrón como - Guarda el patrón. Se guardará en $HOME/.hydrogen/data/patterns/nombre_drumkit" #. Tag: para #: manual.docbook:346 #, no-c-format msgid "Export MIDI file - Export current song in MIDI format" msgstr "Exportar archivo MIDI - Exportar canción actual en formato MIDI" #. Tag: para #: manual.docbook:350 #, no-c-format msgid "Export song - Export current song in WAV format" msgstr "Exportar canción - Exportar canción actual en formato WAV" #. Tag: para #: manual.docbook:354 #, no-c-format msgid "Quit - Quit Hydrogen" msgstr "Salir - Salir de Hydrogen" #. Tag: para #: manual.docbook:358 #, no-c-format msgid "Instruments: this menu offers instruments and drumkit (sound libraries) functions." msgstr "Instrumentos: este menú ofrece funciones de instrumentos y drumkit (librerías de sonidos)." #. Tag: para #: manual.docbook:363 #, no-c-format msgid "Add instrument - Add a new instrument to your current drumkit" msgstr "Añadir instrumento - Añade un nuevo instrumento a tu drumkit actual" #. Tag: para #: manual.docbook:367 #, no-c-format msgid "Clear all - Delete all instruments from the current drumkit" msgstr "Limpiar todo - Borra todos los instrumentos del drumkit actual" #. Tag: para #: manual.docbook:371 #, no-c-format msgid "Save library - Saves all instruments settings (and their sound samples) in $HOME/.hydrogen/data/library_name" msgstr "Guardar librería - Guarda todas las configuraciones de instrumentos (y sus samples) en $HOME/.hydrogen/data/nombre_librería" #. Tag: para #: manual.docbook:376 #, no-c-format msgid "Export library - Compress all instruments samples and settings in a drumkit in $HOME/.hydrogen/data/library_name" msgstr "Exportar librería - Comprime todos los samples de instrumentos y configuraciones de un drumkit en $HOME/.hydrogen/data/nombre_librería" #. Tag: para #: manual.docbook:381 #, no-c-format msgid "Import library - Imports another drumkit from the local filesystem or download it from a remote location through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen website for an example). To load another drumkit in your current working session of Hydrogen, read ." msgstr "Importar librería - Importa otro drumkit del sistema local de archivos or descárgalo de una ubicación remota a través de un flujo XML. El archivo XML que debería suministrarse NO es compatible con RSS (ver Hydrogen website para un ejemplo). Para cargar otro drumkit en tu sesión actual de Hydrogen, lee ." #. Tag: para #: manual.docbook:392 #, no-c-format msgid "Tools: opens the mixer, the playlist editor, the instrument rack and the general preferences window." msgstr "Herramientas: abre el mezclador, el editor de lista de reproducción, el rack de instrumentos y la ventana de preferencias generales." #. Tag: para #: manual.docbook:398 #, no-c-format msgid "Playlist editor - A tool to manage playlists." msgstr "Editor de lista de reproducción - Una herramienta para gestionar listas de reproducción." #. Tag: para #: manual.docbook:402 #, no-c-format msgid "Mixer - Open the mixer window." msgstr "Mezclador - Abre la ventana del mezclador." #. Tag: para #: manual.docbook:405 #, no-c-format msgid "Instrument rack - Open the instrument rack panel." msgstr "Rack de instrumentos - Abre el panel del rack de instrumentos." #. Tag: para #: manual.docbook:409 #, no-c-format msgid "Preferences - Open the main preferences window. Read on how to configure Hydrogen." msgstr "Preferencias - Abre la ventana principal de preferencias. Lee para ver cómo configurar Hydrogen." #. Tag: para #: manual.docbook:415 #, no-c-format msgid "Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support)." msgstr "Depurar: herramientas principalmente para depurar y monitorizar Hydrogen (sólo disponible si se compila con soporte de depuración)." #. Tag: para #: manual.docbook:421 #, no-c-format msgid "Show audio engine info - Open a monitor with various stats" msgstr "Mostrar info del motor de audio - Abre un monitor con varias estadísticas" #. Tag: para #: manual.docbook:426 #, no-c-format msgid "debug action - Insert debug commands." msgstr "acción de depuración - Inserta comandos de depuración." #. Tag: para #: manual.docbook:430 #, no-c-format msgid "Print Objects - Print on stdout current objects map." msgstr "Imprime objetos - Imprime el actual mapa de objetos en stdout." #. Tag: emphasis #: manual.docbook:435 #, no-c-format msgid "Info" msgstr "Info" #. Tag: para #: manual.docbook:439 #, no-c-format msgid "User manual - Open a window with this manual :)" msgstr "Manual del usuario - Abre una ventana con este manual :)" #. Tag: para #: manual.docbook:443 #, no-c-format msgid "About - The usual window with licence information, acknowledgements, etc." msgstr "Acerca de - La ventana habitual con información de licencia, créditos, etc." #. Tag: title #: manual.docbook:450 #, no-c-format msgid "The main toolbar" msgstr "Barra de herramientas principal" #. Tag: para #: manual.docbook:452 #, no-c-format msgid "Before analyzing the two main frames of Hydrogen, let's take a quick look at the main toolbar and its components:" msgstr "Antes de analizar los dos marcos principales de Hydrogen, vamos a echar un rápido vistazo a la barra principal y sus componentes:" #. Tag: para #: manual.docbook:457 #, no-c-format msgid "Pilot the song using the start, stop, pause, etc. buttons" msgstr "PIlota la canción usando inicio, parada, pausa, etc. botones" #. Tag: para #: manual.docbook:460 #, no-c-format msgid "Choose between \"pattern\" or \"song\" mode: in \"pattern\" mode only the currently selected pattern will play, while in \"song\" mode all patterns inserted will be played." msgstr "Escoge entre modo \"patrón\" o modo \"canción\": en modo \"patrón\", sólo se reproducirá el patrón seleccionado, mientras que en modo \"canción\", se reproducirán todos los patrones insertados." #. Tag: para #: manual.docbook:465 #, no-c-format msgid "An advanced tap tempo function: choose note length and how many notes to wait before recalculating BPM, then click the comma key repeatedly until the 'R' letter will appear and the BPM will be updated. (see )" msgstr "Función avanzada para marcar el tempo (Tap Tempo): determina la longitud de nota y el número de notas a esperar antes de recalcular las PPM; luego pulsa la tecla de coma repetidamente hasta que aparece la letra 'R' y se actualizan las PPM. (ver )" #. Tag: para #: manual.docbook:471 #, no-c-format msgid "Manually set BPM" msgstr "Fijar PPM manualmente" #. Tag: para #: manual.docbook:474 #, no-c-format msgid "Manage JACK transport" msgstr "Gestionar transporte JACK" #. Tag: para #: manual.docbook:477 #, no-c-format msgid "Open the mixer and the instrument rack panels" msgstr "Abre el mezclador y los paneles del rack de instrumentos" #. Tag: title #: manual.docbook:482 #, no-c-format msgid "The Main Toolbar" msgstr "Barra de Herramientas Principal" #. Tag: para #: manual.docbook:497 #, no-c-format msgid "Main controls to start [Hotkey = Spacebar], stop, fast forward, rewind, loop a song or a pattern." msgstr "Controles principales para iniciar [Tecla acceso rápido = Espacio], parar, avanzar, retroceder, reproducir en bucle una canción o un patrón." #. Tag: para #: manual.docbook:507 #, no-c-format msgid "Set Pattern/Song Mode." msgstr "Configurar Modo de Patrón/Canción." #. Tag: para #: manual.docbook:515 #, no-c-format msgid "Set speed of playing (range: 30-400 bpm) [Hotkey = mouse wheel] and button to enable/disable metronome" msgstr "Configuración de la velocidad de reproducción (rango: 30-400 ppm) [Tecla acceso rápido = rueda del ratón] y botón para activar/desactivar el metrónomo" #. Tag: para #: manual.docbook:525 #, no-c-format msgid "Shows CPU load." msgstr "Muestra la carga de CPU." #. Tag: para #: manual.docbook:533 #, no-c-format msgid "Shows MIDI events." msgstr "Muestra eventos MIDI." #. Tag: para #: manual.docbook:541 #, no-c-format msgid "Click to enable Jack transport: Hydrogen will work as 'slave' with another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected." msgstr "Pulsa para activar transporte JACK: Hydrogen funcionará como 'esclavo' con otro programa que hace de 'maestro' (por ej. Ardour). Este applet sólo está disponible si se selecciona el Driver de Audio Jack." #. Tag: para #: manual.docbook:547 #, no-c-format msgid "Other useful keybindings (not customizable for the moment):" msgstr "Otras asignaciones útiles de teclas (no customizables por el momento):" #. Tag: para #: manual.docbook:552 #, no-c-format msgid "[CTRL + O] = Open File" msgstr "[CTRL + O] = Abrir Archivo" #. Tag: para #: manual.docbook:557 #, no-c-format msgid "[CTRL + S] = Save File" msgstr "[CTRL + S] = Guardar Archivo" #. Tag: para #: manual.docbook:562 #, no-c-format msgid "[Backspace] = Restart song or pattern from the beginning" msgstr "[Retroceso] = Volver al principio de una canción o un patrón" #. Tag: title #: manual.docbook:570 #, no-c-format msgid "Tap Tempo and BeatCounter" msgstr "Tap Tempo y Contador de Pulsaciones (BeatCounter)" #. Tag: para #: manual.docbook:572 #, no-c-format msgid "It is possible to change tempo at any time using the tap-tempo and BeatCounter features of Hydrogen. You can change these while playing or while the song is stopped. To change the tempo, hit the , (comma) key in tempo for the number of beats in the measure. After the correct number of beats are met, the tempo will change to the average tempo that you tapped in. If you continue to tap, these new taps will become a part of a rolling average. If you tap accidentally, or if you wait too long between taps, the tap tempo counter will start over." msgstr "Es posible cambiar el tempo en cualquier momento utilizando las funciones de Tap Tempo y Contador de Pulsaciones de Hydrogen. Puedes cambiarlos durante la reproducción o con la canción parada. Para cambiar el tempo, pulsa la tecla , (coma) siguiendo un tempo para el número de pulsaciones en el compás. Cuando se realiza el número correcto de pulsaciones, el tempo cambiará al tempo medio que has pulsado. Si sigues pulsando, estas nuevas pulsaciones formarán parte de una media contínua. Si pulsas la tecla accidentalmente, o esperas demasiado entre pulsaciones, el contador de tempo empezará de nuevo." #. Tag: para #: manual.docbook:582 #, no-c-format msgid "The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo on steroids. By default the BeatCounter display is not visible. To see the BeatCounter widget click the upright button (BC) between Song/Pattern mode selector and the BPM-widget. Or, it can be shown by pressing the comma key (,)." msgstr "El Tap Tempo es parte del Contador de Pulsaciones, que es esencialmente un Tap Tempo a lo bestia. Por defecto el Contador de Pulsaciones no está visible. Para ver el widget del Contador de Pulsaciones haz clic en el botón vertical (BC) entre el selector de modo Canción/Patrón y el widget de PPM. O se puede mostrar pulsando la tecla de coma (,)." #. Tag: para #: manual.docbook:589 #, no-c-format msgid "The tempo that you tap will be considered even beats of the beat type. The beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change the beat type use the left arrow buttons. To change the number of beats that are counted, use the right arrow button. You can set from 2 to 16 beats. (I.e. if you set the beat to 6, you will have to tap 6 times before the new tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. Every time you tap with the comma key, it will show the number of taps that you have entered (1, 2, 3...)." msgstr "El tempo que teclees se considerará como golpes pares del tipo de compás. El tipo de compás se puede fijar como 1/8 (para compases de ocho negras), 1/4 (para compases de cuatro negras), 1/2 (para compases de dos negras), y 1/1 (para compases de una blanca). Para cambiar el tipo de compás usa la tecla de flecha izquierda. Para contar el número de pulsaciones contadas, usa la tecla de flecha derecha. Puedes fijar de 2 a 16 pulsaciones. (Por ej. si fijas las pulsaciones en 6, tendrás que pulsar la tecla 6 veces antes de que compute y fije el nuevo tempo). Cuando la pantalla muestra una R, significa que el Contador de Pulsaciones está preparado para comenzar de 0. Cada vez que pulsas la tecla de coma, mostrará el número de pulsaciones que has realizado (1, 2, 3...)." #. Tag: para #: manual.docbook:600 #, no-c-format msgid "The button in the bottom right-hand controls the auto-start feature, and it toggles between S and P. When it shows P for (Play), the song will set the new tempo and automatically start to play after you tap the right number of beats (if it's not already playing, of course). This way, if you have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing on the next beat. When it shows S (for Set BPM), the auto-start is disabled." msgstr "El botón de la parte inferior derecha controla la función de auto-arranque, y cambia entre S y P. Cuando muestra la P de (Play), la canción fijará el nuevo tempo y automáticamente empezará a reproducir después de que pulses el número correcto de pulsaciones (si no está reproduciendo ya, claro). De este modo, si tienes el Contador de Pulsaciones fijado para 4/4, puedes pulsar 1-2-3-4, y comenzar a reproducir en el siguiente compás. Cuando muestra la S (de Set BPM), (fijar PPM) el auto-arranque está desactivado." #. Tag: para #: manual.docbook:610 #, no-c-format msgid "For example: Suppose you have a live band, Hydrogen, and a softsynth that is controlled by Seq24)... and you want them all to start at the same time. Set the beat type to 1/4 and the number of beats to 4. Enable auto-start (button shows P). Count off the band 1-2-3-4 (while tapping the comma key) — and everyone starts on 1." msgstr "Por ejemplo: Supón que tienes una banda en directo, Hydrogen, y un sintetizador de software controlado por Seq24... y quieres que todos arranquen a la vez. Fija el tipo de compás en 1/4 y el número de golpes en 4. Activa el auto-arranque (el botón muestra una P). Cuenta 1-2-3-4 para la banda (dando a la tecla de coma) — y todos empiezan a la de 1." #. Tag: para #: manual.docbook:617 #, no-c-format msgid "Another example: Same situation, but the song doesn't require Hydrogen or synths until some point later. During that time, a human (e.g. guitar player) will be setting the tempo. On the measure before Hydrogen is supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in on the next beat (at the right tempo)." msgstr "Otro ejemplo: La misma situación, pero la canción no necesita de Hydrogen ni sintetizadores hasta más tarde. Durante ese tiempo, un humano (por ej. el guitarrista) fijará el tempo. En el compás antes de que Hydrogen debe tocar, pulsa la tecla de coma 1-2-3-4 con el ritmo... y entras en el siguiente compás (con el tempo correcto)." #. Tag: para #: manual.docbook:623 #, no-c-format msgid "If you are using the JACK Transport, the BeatCounter continues to work. If another program is the JACK Transport Master, Hydrogen will respond to tempo change events from that application. Note that in this situation, Hydrogen is supposed to be a slave, so some of the BeatCounter features will be disabled or will not work properly. If Hydrogen is the JACK Transport Master, tempo changes from Hydrogen will be reflected in those programs (if they support it)." msgstr "Si utilizas Transporte JACK, el Contador de Pulsaciones sigue funcionando. Si otro programa es el Maestro del Transporte JACK, Hydrogen responderá al cambio de tempo de esa aplicación. Nótese que en esta situación, Hydrogen funciona como esclavo, así que algunas funciones del Contador de Pulsaciones estarán desactivadas o no funcionarán correctamente. Si Hydrogen es el Maestro del Transporte JACK, los cambios de tempo de Hydrogen se verán reflejados en los demás programas (suponiendo que lo soportan)." #. Tag: para #: manual.docbook:632 #, no-c-format msgid "Some of the settings to adjust the BeatCounter's latency compensation, and they are located on the General tab of the Preferences Dialog ( Tools Preferences ). Here there are two spinboxes:" msgstr "Algunas de las configuraciones para ajustar la compensación de latencia del Contador de Pulsaciones, y se encuentran en la pestaña General del diálogo de preferencias ( Herramientas Preferencias ). Aquí hay dos selectores numéricos:" #. Tag: para #: manual.docbook:644 #, no-c-format msgid "Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program." msgstr "Compensación de desajuste del Contador de Pulsaciones en 1/10ms — ajusta esto para compensar la latencia entre el teclado y el programa." #. Tag: para #: manual.docbook:649 #, no-c-format msgid "Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated)." msgstr "Compensación para el inicio del Contador de Pulsaciones en ms — ajusta el tiempo entre el último golpe tecleado en el Contador de Pulsaciones y el momento en que se inicia la canción (si está activado el auto-arranque)." #. Tag: para #: manual.docbook:655 #, no-c-format msgid "Note that these can be set to positive (+) or negative (-) values. In order to find useful values for these, you will need to take some time to play with it. Also, you may want different values depending on the speed of your hardware, audio devices, drivers, etc. Using the BeatCounter effectively requires practice." msgstr "Nótese que estos valores pueden ser positivos (+) o negativos (-). Para encontrar valores útiles, tendrás que tomarte tu tiempo para hacer pruebas. Además, puede que requieras diferentes valores dependiendo de la velocidad de tu hardware, dispositivo de audio, drivers, etc. La utilización del Contador de Pulsaciones require práctica." #. Tag: title #: manual.docbook:666 #, no-c-format msgid "Song Editor" msgstr "Editor de Canciones" #. Tag: para #: manual.docbook:668 #, no-c-format msgid "The \"Song Editor\" () gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue coloured square on this panel is a complete bar as shown in the underlying \"Pattern Editor\" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns." msgstr "El \"Editor de Canciones\" () ofrece una vista del cronograma completo de la canción (por ej. intro, verso, puente, estribillo, etc.); cada cuadrado azul en este panel es un compás completo tal como se muestra en el panel del \"Editor de Patrones\" que se encuentra debajo. Aquí tenemos la libertad de añadir, quitar or mover patrones en el orden que queramos. También podemos copiar y pegar patrones: usa el botón izquierdo del ratón para subrayar una zona y arrástralo. Arrastrar con la tecla CTRL pulsada copia los patrones." #. Tag: para #: manual.docbook:677 #, no-c-format msgid "The Song Editor comes with 7 buttons:" msgstr "El Editor de Canciones viene con 7 botones:" #. Tag: para #: manual.docbook:693 #, no-c-format msgid "Completely delete all patterns (asks for confirmation!)." msgstr "Borrar completamente todos los patrones (¡pide confirmación!)." #. Tag: para #: manual.docbook:701 #, no-c-format msgid "Create a new pattern (and asks for a name)." msgstr "Crear un patrón nuevo (y pide un nombre)." #. Tag: para #: manual.docbook:709 #, no-c-format msgid "Move currently selected pattern up or down." msgstr "Mover el patrón seleccionado hacia arriba o abajo." #. Tag: para #: manual.docbook:719 #, no-c-format msgid "Enable selecting patterns for copy & paste (Select Mode)." msgstr "Activar selección de patrones para copiar & pegar (Seleccionar Modo)." #. Tag: para #: manual.docbook:727 #, no-c-format msgid "Enable Draw Mode." msgstr "Activar Modo Dibujo." #. Tag: para #: manual.docbook:734 #, no-c-format msgid "Switch from \"Single pattern mode\" to \"Stacked pattern mode\" and back.." msgstr "Cambiar de \"Modo patrón único\" a \"Modo patrones apilados\" y viceversa." #. Tag: para #: manual.docbook:740 #, no-c-format msgid "Under these buttons there is a list of patterns created and when they will played (each square == 1 bar). Click on an squarebox to add or cancel the pattern. Clicking on right mouse button over the name of a pattern will bring up a menu to change name of the pattern or to allow copying/deleting it. Patterns with very same name are not allowed." msgstr "Debajo de estos botones hay una lista de patrones creados y cuándo se reproducirá cada uno (cada cuadrado == 1 compás). Haz clic en un cuadrado para añadir o quitar el patrón. Al pulsar el botón derecho del ratón sobre el nombre de un patrón, se mostrará un menú para cambiar el nombre del patrón o para copiar/borrarlo. No se permite más de un patrón con el mismo nombre." #. Tag: title #: manual.docbook:747 #, no-c-format msgid "The Song Editor" msgstr "El Editor de Canciones" #. Tag: title #: manual.docbook:758 #, no-c-format msgid "Pattern Editor" msgstr "Editor de Patrones" #. Tag: para #: manual.docbook:760 #, no-c-format msgid "The \"Pattern Editor\" frame () lets us create or modify the pattern (bar) which is being played, or add/remove notes and tune intensity as well. On the higher-left side you find a pair of LCD screens: the first one lets you choose the size of a pattern while the second represents the current grid resolution (4 through 64). Selecting an instrument which has at least one note in the pattern will show a few vertical bars (one per note) on the lowest part of this frame. Those frame shows the so called \"note properties\". This are special properties which can be set for every single note. Hydrogen knows of 3 Properties: Velocity, Pan and Lead/Lag. Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm." msgstr "El marco del \"Editor de Patrones\" () nos permite crear o modificar el patrón (compás) en reproducción, o añadir/quitar notas así como modificar su intensidad. En la parte superior izquierda verás dos pantallas LCD: el primero te permite elegir el tamaño del patrón mientras que el segundo representa la resolución actual de la rejilla (de 4 a 64). Al seleccionar un instrumento que tiene al menos una nota en el patrón, se mostrará una serie de barras verticales (una por cada nota) en la parte inferior de este marco. Este marco muestra lo que se llaman las \"propiedades de notas\". Son propiedades especiales que pueden configurarse para cada nota. Hydrogen conoce 3 propiedades: Velocidad, Paneo y Desfase positivo y negativo. El desfase positivo y negativo permite un ligero adelanto o retraso de una nota con respecto al ritmo en sí. El rango es de aprox. 5 pasos que equivalen a aprox. 10 ms a un tempo de 120ppm." #. Tag: para #: manual.docbook:773 #, no-c-format msgid "The button (hear new notes) will play the sample as it's been added to the pattern. Finally you can move an instrument up and down in the sequence with the buttons . A useful Quantize feature is available activating . This way the beats inserted will automatically respect the grid resolution currently applied." msgstr "El botón (escuchar nuevas notas) reproducirá el sample según se añade al patrón. Finalmente puedes mover un instrumento hacia arriba o abajo en la secuencia con los botones . Una función útil Cuantizar está disponible activando . De este modo los ritmos insertados respetarán automáticamente la resolución de rejilla actualmente aplicada." #. Tag: title #: manual.docbook:804 manual.docbook:1648 #, no-c-format msgid "The Pattern Editor" msgstr "El Editor de Patrones" #. Tag: para #: manual.docbook:812 #, no-c-format msgid "Rememeber this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; on the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This contraint can be removed if you disable the whole grid resolution (choose \"off\" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer." msgstr "Recuerda esta limitación en cuanto a la rejilla: si estás trabajando con una resolución de 16 no puedes volver a una de 8 y quitar una nota de 1/16; por otro lado, si trabajas con una resolución de 8 e intentas insertar una nota entre dos barras (buscando una resolución de 1/16), las notas se colocarán en en la barra anterior o posterior en la rejilla de 1/8. Esta limitación puede quitarse si desactivas la resolución de rejilla (selecciona \"off\" en el menú LCD de la resolución). Ahora podrás colocar las notas donde quieras." #. Tag: para #: manual.docbook:821 #, no-c-format msgid "Each instrument has its own set of features accessible right-clicking with your mouse on it; Fill/Clear notes fills or deletes every note of that instrument in the current pattern (remember that filling a pattern is always relative to the grid resolution set) and finally Randomize velocity automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played." msgstr "Cada instrumento tiene una serie de funciones a las que se accede pulsando el botón derecho del ratón sobre él; Llenar/Borrar notas llena o borra cada nota del instrumento en el patrón actual (recuerda que llenar un patrón siempre depende de la resolución de rejilla seleccionada) y finalmente Intensidad aleatoria aplica automáticamente una intensidad pseudo-aleatoria a cada nota de ese instrumento en el patrón. A mayor intensidad seleccionada para el instrumento, Hydrogen golperará más fuerte ese instrumento durante la reproducción." #. Tag: para #: manual.docbook:832 #, no-c-format msgid "The small green and red squares beside the instrument name are the mute and solo buttons." msgstr "Los pequeños cuadrados verdes y rojos al lado del nombre del instrumento son los botones de silencio y solo." #. Tag: para #: manual.docbook:844 #, no-c-format msgid "Also, you can set new beats clicking on which enables direct input by MIDI events or by keyboard according to the following map key=instrument:" msgstr "Además, puedes crear nuevos ritmos haciendo clic en lo cual activa la entrada directa de eventos MIDI o del teclado dependiendo del siguiente mapa tecla=instrumento:" #. Tag: emphasis #: manual.docbook:855 #, no-c-format msgid "Note that the name of the instrument depends on the drumkit loaded. This list refers to the GMKit loaded by default. The position of the instrument, however, is the same." msgstr "Nótese que el nombre del instrumento depende del drumkit cargado. Esta lista se refiere al GMKit cargado por defecto. La posición del instrumento, sin embargo, es la misma." #. Tag: para #: manual.docbook:860 #, no-c-format msgid "Z = Kick" msgstr "Z = Kick (bombo)" #. Tag: para #: manual.docbook:861 #, no-c-format msgid "X = Snare Jazz" msgstr "X = Snare Jazz (caja jazz)" #. Tag: para #: manual.docbook:862 #, no-c-format msgid "C = Snare Rock" msgstr "C = Snare Rock (caja rock)" #. Tag: para #: manual.docbook:863 #, no-c-format msgid "V = Tom Low" msgstr "V = Tom Low (tom base)" #. Tag: para #: manual.docbook:864 #, no-c-format msgid "B = Tom Mid" msgstr "B = Tom Mid (tom mediano)" #. Tag: para #: manual.docbook:865 #, no-c-format msgid "N = Tom Hi" msgstr "N = Tom Hi (tom pequeño)" #. Tag: para #: manual.docbook:866 #, no-c-format msgid "M = Cowbell" msgstr "M = Cowbell (cencerro)" #. Tag: para #: manual.docbook:867 #, no-c-format msgid "Q = Ride Jazz" msgstr "Q = Ride Jazz" #. Tag: para #: manual.docbook:868 #, no-c-format msgid "W = Ride Rock" msgstr "W = Ride Rock " #. Tag: para #: manual.docbook:869 #, no-c-format msgid "E = Instrument No. 17 (currently not assigned)" msgstr "E = Instrumento Nº 17 (actualmente no asignado)" #. Tag: para #: manual.docbook:870 #, no-c-format msgid "R = Instrument No. 18 (currently not assigned)" msgstr "R = Instrumento Nº 18 (actualmente no asignado)" #. Tag: para #: manual.docbook:871 #, no-c-format msgid "T = Instrument No. 20 (currently not assigned)" msgstr "T = Instrumento Nº 20 (actualmente no asignado)" #. Tag: para #: manual.docbook:872 #, no-c-format msgid "Y = Instrument No. 22 (currently not assigned)" msgstr "Y = Instrumento Nº 22 (actualmente no asignado)" #. Tag: para #: manual.docbook:873 #, no-c-format msgid "U = Instrument No. 24 (currently not assigned)" msgstr "U = Instrumento Nº 24 (actualmente no asignado)" #. Tag: para #: manual.docbook:874 #, no-c-format msgid "S = Stick" msgstr "S = Stick (baqueta)" #. Tag: para #: manual.docbook:875 #, no-c-format msgid "D = Hand Clap" msgstr "D = Hand Clap (palmada de manos)" #. Tag: para #: manual.docbook:876 #, no-c-format msgid "G = Closed HH" msgstr "G = Closed HH (HH cerrado)" #. Tag: para #: manual.docbook:877 #, no-c-format msgid "H = Pedal HH" msgstr "H = Pedal HH" #. Tag: para #: manual.docbook:878 #, no-c-format msgid "J = Open HH" msgstr "J = Open HH (HH abierto)" #. Tag: para #: manual.docbook:879 #, no-c-format msgid "2 = Crash" msgstr "2 = Crash" #. Tag: para #: manual.docbook:880 #, no-c-format msgid "3 = Crash Jazz" msgstr "3 = Crash Jazz" #. Tag: para #: manual.docbook:881 #, no-c-format msgid "5 = Instrument No. 19 (currently not assigned)" msgstr "5 = Instrumento Nº 19 (actualmente no asignado)" #. Tag: para #: manual.docbook:882 #, no-c-format msgid "6 = Instrument No. 21 (currently not assigned)" msgstr "6 = Instrumento Nº 21 (actualmente no asignado)" #. Tag: para #: manual.docbook:883 #, no-c-format msgid "7 = Instrument No. 23 (currently not assigned)" msgstr "7 = Instrumento Nº 23 (actualmente no asignado)" #. Tag: para #: manual.docbook:887 #, no-c-format msgid "Here's a quick reference of the above bindings for your convenience. See for a basic walkthrough of how the pattern editor works." msgstr "Aquí va una rápida referencia de la asignación de teclas para tu conveniencia. Lee para una explicación básica de cómo funciona el editor de patrones." #. Tag: title #: manual.docbook:902 #, no-c-format msgid "Mixer" msgstr "Mezclador" #. Tag: title #: manual.docbook:905 manual.docbook:1739 #, no-c-format msgid "The Mixer" msgstr "El Mezclador" #. Tag: para #: manual.docbook:913 #, no-c-format msgid "The Mixer frame () is useful for tuning a global or single volume of the current drumkit. It shows the current peak (click on to disable, useful on old CPUs) and let you set the maximum peak allowed (tune with the fader knob of the instrument), lets you modify attributes like pan, play solo , mute or test play only that instrument ; selecting in the Pattern Editor an instrument causes a blue LED to light on (near the play button). Near the global volume knob, you can set 3 global effect such a swing (shifts a few notes back or forward not randomly), timing (modify timings of the notes) and humanize effect (random velocity editing)." msgstr "El marco del Mezclador () es útil para ajustar el volumen global o de un solo instrumento en el drumkit actual. Muestra el pico actual (haz clic en para desactivarlo, útil para CPUs viejas) y te permite determinar el pico máximo permitido (ajústalo con el fader del instrumento), modificar atributos como paneo, reproducción solo , silencio o probar sólo ese instrumento ; al elegir un instrumento en el Editor de Patrones se enciende un LED azul (cerca del botón de reproducir). Cerca del control global de volumen, puedes configurar 3 efectos globales como swing (mueve algunas notas hacia atrás o adelante no aleatoriamente), tiempo (humaniza el tiempo de las notas) y humanizar (edita la intensidad aleatoriamente)." #. Tag: para #: manual.docbook:956 #, no-c-format msgid "In addition to all this you can set up to 4 special LADSPA effects for each instrument switching the button. See next section for a detailed overview. " msgstr "Además, puedes configurar hasta 4 efectos especiales LADSPA para cada instrumento pulsando el botón de . Consulta la siguiente sección para una descripción detallada. " #. Tag: title #: manual.docbook:981 #, no-c-format msgid "Sound Library (Drumkit Manager)" msgstr "Biblioteca de Sonidos (Gestor de Drumkits)" #. Tag: para #: manual.docbook:983 #, no-c-format msgid "The Sound Library saves you time in managing your drum kits, favorite patterns, and favorite songs. When making new songs and drum kits, the Sound Library makes it easier for you to reuse and mix the instruments and patterns from other kits and songs." msgstr "La Biblioteca de Sonidos te ahorra tiempo al gestionar tus drumkits, patrones favoritos y canciones favoritas. Al hacer nuevas canciones y drumkits, la Biblioteca de Sonidos te facilita el reutilizar y mezclar los instrumentos y patrones de otros drumkits y patrones." #. Tag: title #: manual.docbook:989 #, no-c-format msgid "System Drumkits" msgstr "Drumkits del sistema" #. Tag: para #: manual.docbook:991 #, no-c-format msgid "This lists the drumkits that were installed by your system administrator. It was determined by the compile-time prefix. On Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or possibly /usr/local/share/hydrogen/data/drumkits. These kits are available to all users on the system, and users are usually not able to add to them." msgstr "Esto enumera los drumkits instalados por tu administrador de sistemas. Se determina mediante el prefijo de tiempo de compilación (compile-time). En sistemas operativos tipo Unix, esto normalmente es /usr/share/hydrogen/data/drumkits, o posiblemente /usr/local/share/hydrogen/data/drumkits. Estos drumkits están disponibles para cualquier usuario, y éstos normalmente no pueden hacer añadidos." #. Tag: para #: manual.docbook:1000 #, no-c-format msgid "To load a drumkit from here, right-click the drumkit and select Load. This will replace your current drumkit with the one that you selected. To load a single instrument from that kit, left-click the plus to the left of the drumkit's name to show all the instruments. With your left mouse button, click and drag the instrument into your current kit. The instrument will be added to the drumkit that you currently have loaded." msgstr "Para cargar un drumkit desde aquí, haz clic derecho sobre el drumkit y selecciona Cargar. Esto reemplazará el drumkit actual con el que has seleccionado. Para cargar sólo un instrumento de ese drumkit, haz clic izquierdo sobre el plus a la izquierda del nombre del drumkit para mostrar todos los instrumentos. Con el botón izquierdo del ratón, haz clic y arrastra los instrumentos al drumkit actual. El instrumento se añadirá al drumkit que tienes cargado actualmente." #. Tag: title #: manual.docbook:1011 #, no-c-format msgid "User Drumkits" msgstr "Drumkits del usuario" #. Tag: para #: manual.docbook:1013 #, no-c-format msgid "These are your own drum kits that you can manage yourself. They are usually stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by selecting InstrumentsSave library." msgstr "Estos son tus propios drumkits que puedes gestionar tú mismo. Normalmente se guardan en $HOME/.hydrogen/data/drumkits. Cuando estás creando un nuevo drumkit, puedes guardarlo aquí seleccionando InstrumentosGuardar biblioteca ." #. Tag: para #: manual.docbook:1021 #, no-c-format msgid "Loading drumkits and instruments to use is the same as for the System Drumkits (see )." msgstr "El procedimiento para cargar drumkits e instrumentos es el mismo que para los drumkits del sistema (ver )." #. Tag: title #: manual.docbook:1026 #, no-c-format msgid "Patterns in the Sound Library" msgstr "Patrones en la Biblioteca de Sonidos" #. Tag: para #: manual.docbook:1028 #, no-c-format msgid "Before you save your favorite patterns to the sound library, be sure to edit it's properties by right-clicking and selecting Properties. There, you can give the pattern a title and a category. You can use one of the categories already provided, or create your own categories by simply typing in a category name. The category name is important, because the patterns will be filed by category in the Sound Library." msgstr "Antes de guardar tus patrones en la biblioteca de sonidos asegúrate de editar sus propiedades haciendo clic derecho y seleccionando Propiedades. Aquí puedes asignar un título y una categoría al patrón. Puedes utilizar una de las categorías ya proporcionadas, o crear tu propia categoría simplemente tecleando un nombre de categoría. El nombre de la categoría es importante, porque los patrones se archivarán por categorías en la Biblioteca de Sonidos." #. Tag: para #: manual.docbook:1036 #, no-c-format msgid "You can save your favorite patterns in the sound library by right clicking the title of the pattern in the song editor, and selecting Save Pattern. It will appear in the Sound Library underneath Patterns and the category that you assigned to the pattern." msgstr "Puedes guardar tus patrones favoritos en la biblioteca de sonidos haciendo clic derecho sobre el título del patrón en el editor de canciones y seleccionando Guardar Patrón. Aparecerá en la Biblioteca de Sonidos bajo Patrones y la categoría que has asignado al patrón." #. Tag: title #: manual.docbook:1044 #, no-c-format msgid "Songs in the Sound Library" msgstr "Canciones en la Biblioteca de Sonidos" #. Tag: para #: manual.docbook:1046 #, no-c-format msgid "To save songs in the Sound Library, put them in your data directory underneath the songs folder (usually $HOME/data/songs. To remove them, remove the file from that folder." msgstr "Para guardar canciones en la Biblioteca de Sonidos, colócalos en tu directorio de datos en la carpeta de songs (normalmente $HOME/data/songs. Para eliminarlas, quita el archivo de esa carpeta." #. Tag: title #: manual.docbook:1054 #, no-c-format msgid "Drumkits and Instrument Editing" msgstr "Edición de Drumkits e Instrumentos" #. Tag: para #: manual.docbook:1056 #, no-c-format msgid "Creating a new drumkit with Hydrogen is done with the Instrument Editor. Using the instrument editor you can load samples, set envelope parameters, set the gain, and a few other advanced features like mute groups, low-pass resonance filter, and pitch randomization." msgstr "La creación de un nuevo drumkit con Hydrogen se realiza con el Editor de Instrumentos. Usando el editor de instrumentos puedes cargar samples, configurar parámetros de la envolvente (envelope), configurar la ganancia (gain), y algunas funciones avanzadas más como grupos de silencio (mute groups), filtro de resonancia low-pass (low-pass resonance filter) y altura tonal aleatoria (pitch randomization)." #. Tag: para #: manual.docbook:1061 #, no-c-format msgid "Instead of creating your own drumkit, you can also use or download existing drumkits using the ." msgstr "En lugar de crear tu propio drumkit, también puedes utilizar or descargar drumkits existentes utilizando ." #. Tag: title #: manual.docbook:1068 #, no-c-format msgid "Concepts" msgstr "Conceptos" #. Tag: para #: manual.docbook:1070 #, no-c-format msgid "The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a note, the sample is simply played back at the right time. There's a few concepts and terms that you should understand when you are putting together a drumkit. (See for more detailed explanations.)" msgstr "El sintetizador de Hydrogen es un sintetizador basado en samples. Un sample es un trozo de audio pregrabado (normalmente entre .1 seg. y 3 seg.). Para reproducir una nota, el sample simplemente se reproduce en el momento preciso. Existen algunos conceptos y términos que deberás entender a la hora de confeccionar un drumkit. (Ver para una explicación más detallada.)" #. Tag: title #: manual.docbook:1080 #, no-c-format msgid "Sampling Synthesizer Terms" msgstr "Términos del Sintetizador de Samples" #. Tag: term #: manual.docbook:1082 #, no-c-format msgid "Sample" msgstr "Sample" #. Tag: para #: manual.docbook:1082 manual.docbook:2100 #, no-c-format msgid "A short recording of a sound, typically between .1 and 3.0 seconds long." msgstr "Una corta grabación de un sonido, típicamente con entre .1 y 3.0 segundos de duración." #. Tag: term #: manual.docbook:1086 #, no-c-format msgid "Gain" msgstr "Ganancia (Gain)" #. Tag: para #: manual.docbook:1086 #, no-c-format msgid "Volume adjustment." msgstr "Ajuste de volumen." #. Tag: term #: manual.docbook:1090 #, no-c-format msgid "Velocity" msgstr "Intensidad" #. Tag: para #: manual.docbook:1090 manual.docbook:2124 #, no-c-format msgid "How hard you hit a note." msgstr "La fuerza con la que golpeas una nota." #. Tag: term #: manual.docbook:1094 #, no-c-format msgid "ADSR Envelope Generator" msgstr "ADSR Envelope Generator (Generador de Envolventes ADSR)" #. Tag: para #: manual.docbook:1094 #, no-c-format msgid "An Attack/Decay/Sustain/Release envelope generator. After you trigger a note, Hydrogen will attack the note by increasing its volume from 0 to the full velocity of the note. After reaching full velocity, it will decay the note by lowering the volume until it reaches the sustain level. When the note is released, Hydrogen reduces the volume from the sustain level back down to 0." msgstr "Un generador de envolventes de Attack (Ataque)/Decay (Decaimiento)/Sustain/Release. Tras disparar una nota, Hydrogen atacará la nota incrementando su volumen de 0 hasta la plena intensidad de la nota. Tras llegar a la máxima intensidad, decaerá la nota bajando el volumen hasta que alcanza el nivel del sustain. Cuando la nota se suelta, (release) Hydrogen vuelve a reducir el volumen desde el nivel de sustain hasta 0." #. Tag: term #: manual.docbook:1105 #, no-c-format msgid "Attack" msgstr "Attack (Ataque)" #. Tag: para #: manual.docbook:1105 #, no-c-format msgid "The amount of time to go from 0 to full velocity." msgstr "La cantidad de tiempo para ir de 0 hasta la intensidad máxima." #. Tag: term #: manual.docbook:1110 #, no-c-format msgid "Decay" msgstr "Decay (decaimiento)" #. Tag: para #: manual.docbook:1110 #, no-c-format msgid "The amount of time to go from full velocity to the sustain volume." msgstr "La cantidad de tiempo para ir de la intensidad máxima al volumen de sustain." #. Tag: term #: manual.docbook:1115 #, no-c-format msgid "Sustain" msgstr "Sustain" #. Tag: para #: manual.docbook:1115 #, no-c-format msgid "The level (how loud) to hold the note between the sustain and the release. It is a percentage of the velocity. It does not depend on time." msgstr "El nivel (el volumen) en el que la nota se sostiene entre el sustain y el release. Es un porcentaje de la intensidad. No depende del tiempo." #. Tag: term #: manual.docbook:1121 #, no-c-format msgid "Release" msgstr "Release" #. Tag: para #: manual.docbook:1121 #, no-c-format msgid "The amount of time to go from the sustain volume back down to 0." msgstr "La cantidad de tiempo para ir del volumen de sustain de vuelta a 0." #. Tag: para #: manual.docbook:1127 #, no-c-format msgid "Typical samples that are used in Hydrogen are: the sound of a single drum hit, the sound of a single cymbal hit, the sound of a single cowbell hit. Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen will play whatever sound you have loaded. So, to put together a drum kit you need to gather short recordings of the bass drum, each tom, each cymbal, the high hat open, the high hat closed, the snare drum (snare on), the snare drum (snare off), rim shots, etc." msgstr "Los samples típicos utilizados en Hydrogen son: el sonido de un golpe simple de batería, el sonido de un golpe simple de plato, el sonido de un golpe simple de cencerro. Cuando metes una nota en el patrón (o reproduces una nota usando MIDI), Hydrogen reproducirá el sonido que hayas cargado. Así que para crear un drumkit tienes que reunir grabaciones cortas del bombo, cada tom, cada plato, el hi hat abierto, el hi hat cerrado, la caja (con bordonero y sin bordonero), golpes del borde, etc." #. Tag: para #: manual.docbook:1138 #, no-c-format msgid "However, there are no rules about what a sample can be. It's not uncommon to use Hydrogen to trigger non-drum sounds like: audio clips of people talking, a clip from a song, sound effects, audio clips from movies, and famous people speaking. Be creative!" msgstr "Sin embargo, no hay reglas en cuanto a qué puede ser un sample. Es común utilizar Hydrogen para disparar sonidos que no son de batería, tales como: clips de audio de personas hablando, un clip de una canción, efectos de sonido, clips de audio de películas, personas famosas hablando. ¡Se creativo!" #. Tag: title #: manual.docbook:1147 #, no-c-format msgid "Creating a New Drumkit" msgstr "Crear un Nuevo Drumkit" #. Tag: para #: manual.docbook:1149 #, no-c-format msgid "To start a brand new drum kit, select Instruments Clear All . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select Delete Instrument. To add more instruments, select Instruments Add instrument ." msgstr "Para empezar con un nuevo drumkit de cero, selecciona Instrumentos Borrar Todos . Esto te deja un banco de 32 instrumentos vacíos. Para borrar instrumentos, haz clic derecho sobre cada instrumento y selecciona Borrar Instrumento. Para añadir más instrumentos, selecciona Instrumentos Añadir Instrumento ." #. Tag: para #: manual.docbook:1168 #, no-c-format msgid "Select an instrument to start editing it. This is done by left-clicking on the name of the instrument in the instrument list (at the left). You will notice that the name of the instrument in the Instrument Editor matches the one that you clicked." msgstr "Selecciona un instrumento para empezar a editarlo. Esto se hace haciendo clic izquierdo sobre el nombre del instrumento en la lista de instrumentos (a la izquierda). Verás que el nombre del instrumento en el Editor de Instrumentos coincide con el que has seleccionado." #. Tag: para #: manual.docbook:1173 #, no-c-format msgid "After you have your drum kit working the way you want, select Instruments Save library . It will ask you for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace." msgstr "Cuando el drumkit funciona tal como querías, selecciona Instrumentos Guardar biblioteca . Te pedirá que le des un nombre al drumkit para guardarlo. Si quieres sobreescribir un drumkit ya existente, tendrás que teclear el mismo nombre que el kit que quieres reemplazar." #. Tag: para #: manual.docbook:1184 #, no-c-format msgid "Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits)." msgstr "Los drumkits se archivan automáticamente en el directorio data (por ej. $HOME/data/drumkits)." #. Tag: para #: manual.docbook:1188 #, no-c-format msgid "To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select Instruments Export library from the menu. Select the drum kit that you wish to export, and give it a file name to save it to." msgstr "Para exportar un drumkit (para compartirlo con otros), hay que cargarlo primero en la Biblioteca de Sonidos. Después, selecciona Instrumentos Exportar biblioteca en el menú. Selecciona el drumkit que deseas exportar y dale un nombre de archivo para guardarlo." #. Tag: title #: manual.docbook:1201 #, no-c-format msgid "Creating an Instrument and Layers" msgstr "Crear un Instrumento y Capas" #. Tag: para #: manual.docbook:1203 #, no-c-format msgid "For each instrument in a drum kit, you can load several samples and set different synthesizer parameters. This section will step you through how to create a new instrument and load the samples." msgstr "Para cada instrumento en un drumkit, puedes cargar varios samples y configurar diferentes parámetros del sintetizador. Esta sección te ayudará paso a paso para crear un nuevo instrumento y cargar los samples." #. Tag: para #: manual.docbook:1207 #, no-c-format msgid "To begin creating an instrument, select Instruments Add instrument . This will give you a blank instrument to start from." msgstr "Para empezar a crear un instrumento, selecciona Instrumentos Añadir instrumento . Esto te da un instrumento en blanco para comenzar." #. Tag: para #: manual.docbook:1214 #, no-c-format msgid "Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides several in the data/drumkits directory." msgstr "Ahora, necesitas dos samples. Cualquier archivo .WAV o .FLAC servirá. Hydrogen proporciona varios en el directorio data/drumkits ." #. Tag: para #: manual.docbook:1218 #, no-c-format msgid "In the instrument editor, click on Layers. You can layer several samples into the instrument. Which one is played depends on the velocity of the incoming note. Click Load Layer and point the Audio File Browser to your sample. Note that the Audio File Browser will allow you to preview the sample before you load it. It will also allow you to load more than one sample at a time. But for now, only load one." msgstr "En el editor de instrumentos, haz clic en Capas. Puedes cargar varias capas en el instrumento. Cuál se reproduce depende de la intensidad de la nota entrante. Haz clic en Cargar Capa y dirige el Navegador de Archivos de Audio a tu sample. Fíjate que el Navegador de Archivos de Audio te permitirá una vista previa del sample antes de cargarlo. También te permitirá cargar más de un sample a la vez. Pero por ahora, sólo carga uno." #. Tag: para #: manual.docbook:1227 #, no-c-format msgid "After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To load a second sample, click the slot just below it, and then click Load Layer to bring in another sample." msgstr "Tras cargar el sample, verás que ahora hay un 1 arriba, y que el rectángulo de más arriba se ha vuelto azul claro. Para cargar un segundo sample, haz clic en la ranura justo debajo, y luego haz clic en Cargar Capa para meter otro sample." #. Tag: para #: manual.docbook:1233 #, no-c-format msgid "After bringing in both samples, you'll probably notice that only the first sample is being played whenever you trigger the instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light blue rectangles and you see that you get a left-right drag cursor. Now drag the sample to the left or right (like a curtain). You will now see Layer 2 appear." msgstr "Tras insertar los dos samples, probablemente verás que sólo el primer sample se reproduce cuando disparas el instrumento. Esto es porque tienes que configurar los rangos de intensidad para las capas. Mueve el ratón hacia los laterales de los rectángulos azul claro y verás que sale un cursor para arrastrar hacia la derecha o la izquierda. Ahora arrastra el sample hacia la derecha o la izquierda (como una cortina). Ahora verás cómo aparece la Capa 2." #. Tag: para #: manual.docbook:1241 #, no-c-format msgid "The velocity setting for the layer is 0-velocity on the left, and full velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)" msgstr "La configuración de intensidad para la capa es intensidad-0 a la izquierda, e intensidad máxima a la derecha. Configura la Capa 1 para las notas suaves y la Capa 2 para las notas fuertes. (Por ej. la Capa 1 a la izquierda y la Capa 2 a la derecha)." #. Tag: para #: manual.docbook:1246 #, no-c-format msgid "Now, in the pattern area, set up a simple pattern that plays this instrument. Adjust the velocity settings on each note so that you can get the different samples to sound. Now set the pattern to loop and notice how your different samples are getting triggered. (To learn about editing a pattern, see )" msgstr "Ahora, en la zona de patrones, configura un patrón simple que reproduce este instrumento. Ajusta las configuraciones de intensidad en cada nota para que puedan sonar los diferentes samples. Ahora pon el patrón en modo bucle y notarás la diferencia entre los samples. (Para aprender sobre cómo editar un patrón, consulta )" #. Tag: para #: manual.docbook:1253 #, no-c-format msgid "For each layer, you can set the Gain and the Pitch. The pitch also has a Fine adjustment." msgstr "Para cada capa puedes configurar la Ganancia y la Altura tonal. La altura tonal también tiene un ajuste Fino." #. Tag: para #: manual.docbook:1257 #, no-c-format msgid "Use the Gain adjustment to control how loud the sample will play. This is necessary because it's extremely difficult to get a set of samples that all sound at about the same volume. By adjusting here, the samples that were recorded too quietly can be turned up to match your loud samples (that had to be turned down)." msgstr "Usa el ajuste de Ganancia para controlar el volumen del sample. Esto es necesario porque es muy difícil tener un conjunto de samples que suenen al mismo volumen. Al ajustar esto, los samples que estaban grabados demasiado bajo se pueden subir para igualarlos a los samples altos (que has tenido que bajar)." #. Tag: para #: manual.docbook:1265 manual.docbook:1390 #, no-c-format msgid "It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it." msgstr "Es muy fácil poner el mando de Ganancia demasiado alto, haciendo que el sample quede clipeado (distorsionado). Acuérdate de probar la ganancia con notas de intensidad máxima. Si aquí se te clipea la señal, seguramente empeorará según lo procesa Hydrogen." #. Tag: para #: manual.docbook:1271 #, no-c-format msgid "The pitch of the sample can be modified with the pitch controls. The Pitch knob adjust the pitch in musical half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts the pitch ±50 cents. (One half-step is 100 cents.)" msgstr "La altura tonal (pitch) del sample se puede modificar con los controles correspondientes. El mando de Altura Tonal (Pitch) ajusta la altura tonal en semitonos. (Así que -12 baja 1 octava). El mando a la derecha ajusta la altura ±50 cents. (Un semitono son 100 cents.)" #. Tag: para #: manual.docbook:1277 #, no-c-format msgid "The pitch is adjusted by playing the sample back faster or slower. This is called the Dopplar Effect. So, if you have a 1-second sample that you turn down -12 (1 octave), you sample will only last for .5-seconds." msgstr "La altura se ajusta reproduciendo el sample más rápido o más despacio. Esto se llama el Efecto Doppler. Así que si tienes un sample de 1 segundo y lo bajas -12 (1 octava), tu sample sólo durará 0.5-segundoss." #. Tag: title #: manual.docbook:1284 #, no-c-format msgid "Instrument Parameters" msgstr "Parámetros de Instrumentos" #. Tag: para #: manual.docbook:1286 #, no-c-format msgid "In the instrument editor, click on the General button. Here you can adjust several parameters that are for the whole instrument (not for each layer). The parameters that you can adjust are:" msgstr "En el editor de instrumentos, haz clic en el botón General. Aquí puedes configurar varios parámetros que son para el instrumento en su conjunto (no para cada capa). Los parámetros que puedes configurar son:" #. Tag: para #: manual.docbook:1293 #, no-c-format msgid "Envelope parameters: Attack, Decay, Sustain, Release. (See )" msgstr "Parámetros de la envolvente (envelope): Attack, Decay, Sustain, Release. (Ver )" #. Tag: para #: manual.docbook:1299 #, no-c-format msgid "Gain: The overall volume of the instrument." msgstr "Ganancia (Gain): El volumen general del instrumento." #. Tag: para #: manual.docbook:1303 #, no-c-format msgid "Mute Group: Which mute group this instrument is a member of (see )." msgstr "Grupo de silencio (Mute Group): El grupo de silencio al que pertenece este instrumento (ver )." #. Tag: para #: manual.docbook:1308 #, no-c-format msgid "Filter Parameters: Bypass, Cutoff, Resonance." msgstr "Parámetros de Filtro: Circunvalar (Bypass), Corte (Cutoff), Resonancia (Resonance)." #. Tag: guibutton #: manual.docbook:1313 #, no-c-format msgid "Random Pitch" msgstr "Altura Tonal Aleatoria (Random Pitch)" #. Tag: para #: manual.docbook:1318 #, no-c-format msgid "It's important that you understand in order to continue on." msgstr "Es importante que entiendas para poder continuar." #. Tag: title #: manual.docbook:1323 #, no-c-format msgid "Envelope Parameters" msgstr "Parámetros de la Envolvente (Envelope)" #. Tag: para #: manual.docbook:1325 #, no-c-format msgid "When the instrument is triggered, its volume is run through an ADSR Envelope. The parameters operate as follows:" msgstr "Cuando se dispara el instrumento, su volumen pasa por una Envolvente ADSR (de aquí en adelante, ADSR envelope). Los parámetros funcionan de la siguiente manera:" #. Tag: para #: manual.docbook:1330 #, no-c-format msgid "Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack paramater." msgstr "Attack — la cantidad de tiempo para que el volumen del sample pase de 0 a la intensidad máxima de la nota. Si el valor es 0, el sample sonará inmediatamente con la intensidad máxima. Si el valor es 1.0, el volumen del sample utilizará el máximo tiempo disponible para el parámetro de ataque." #. Tag: para #: manual.docbook:1337 #, no-c-format msgid "The attack, decay, and release parameters are all set by the number of audio samples. This means that the time changes depending on the sample rate of your sound card. The max time for each of them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz)." msgstr "Los parámetros de ataque, decaimiento (decay) y release (\"liberación\") están determinados por el número de samples de audio. Esto significa que los cambios de tiempo dependen de la tasa de muestreo de tu tarjeta de sonido. El tiempo máximo para cada uno de ellos es de 100,000 samples de audio (normalmente 2.27 seg a 44.1 kHz)." #. Tag: para #: manual.docbook:1346 #, no-c-format msgid "Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter." msgstr "Decay — la cantidad de tiempo para que el volumen del sample baje de la intensidad máxima hasta el volumen de sustain. Si el valor es 0, el sample inmediatamente saltará del volumen de attack al volumen de sustain. Si el valor es 1, el volumen del sample utilizará el máximo tiempo disponible para el parámetro de decay." #. Tag: para #: manual.docbook:1355 #, no-c-format msgid "Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity." msgstr "Sustain — el volumen reproducido para la nota tras terminar la fase de decay, y hasta que la nota se \"libera\" (release). Si se configura a 0, la nota estará silenciada. Si se configura a 1.0, la nota sonará a la intensidad máxima." #. Tag: para #: manual.docbook:1362 #, no-c-format msgid "Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available." msgstr "Release — el tiempo necesario para apagar la nota desde el volumen de sustain hasta 0 (silencio). Si se deja en 0, la nota se silenciará en el tiempo mínimo (unos 5 ms). Si se deja en 1, se reducirá en el tiempo máximo disponible." #. Tag: para #: manual.docbook:1371 #, no-c-format msgid "If the sample is shorter than the times that you specify, the sample will end, regardless of which phase of the ADSR it is in. If the note is sustained, it does not draw out the note while you are holding it. It only holds the gain (volume) parameter during that time." msgstr "Si el sample es más corto que los tiempos especificados, terminará sin importar la fase de ADSR en el que se encuentre. Si la nota es sostenida, no silenciará la nota mientras lo sostengas. Sólo sostiene el parámetro de ganancia (volumen) durante ese tiempo." #. Tag: title #: manual.docbook:1380 #, no-c-format msgid "Gain and Mute Group" msgstr "Ganancia y Grupo de Silencio (Mute Group)" #. Tag: para #: manual.docbook:1382 #, no-c-format msgid "The gain sets the overall volume for the sample. This gain is applied after the gain that you set for the layer, and before the gain that is set for the mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is set higher, the samples will be amplified." msgstr "La ganancia determina el volumen general del sample. Esta ganancia se aplica después de la ganancia que has configurado para la capa, y antes de la ganancia configurada para el mezclador. Con la ganancia a 0, el instrumento estará silenciado. Con la ganancia a 1.0, el volumen de los samples no se ajustará (por ej. 0 dB). Si la ganancia se configura a más, los samples se amplificarán." #. Tag: para #: manual.docbook:1396 #, no-c-format msgid "Hydrogen provides more mute groups than you know what to do with (over 256). A mute group is a grouping of instruments that are mutually exclusive — only one instrument may be playing at any time. If one is playing and another instrument in the group is triggered, it will immediately silence (mute) and start playing the other instrument. This is useful, especially, for instruments like hi-hats where the open sound and the closed sound are different instruments." msgstr "Hydrogen proporciona más grupos de silencio de los necesitarás jamás (más de 256). Un grupo de silencio es un agrupamiento de instrumentos que son mútuamente exclusivos — sólo puede sonar un instrumento en un momento dado. Si un instrumento está sonando y otro del grupo se dispara, el primero se silenciará inmediatamente y sonará el segundo instrumento. Esto es útil sobre todo para instrumentos como el hi hat, donde el sonido abierto y el cerrado son instrumentos diferentes." #. Tag: para #: manual.docbook:1405 #, no-c-format msgid "If the mute group is set to Off, then the instrument is not part of any mute grouping. If the mute group is set to any number, then that is the group that the instrument is a part of. To set other instruments into the same grouping, set their mute group parameter to the same number. (For example, to group all the high-hat instruments, you can set all their mute group parameters to 1. To have a snare drum mute group, set their mute group parameters to 2.)" msgstr "Si el grupo de silencio está en Off, el instrumento no forma parte de ningún grupo. Si se especifica un número, entonces el instrumento pertenece al grupo denominado con ese número. Para meter otros instrumentos en el mismo grupo, configura el parámetro del grupo de silencio con el mismo número. (Por ejemplo, para agrupar todos los hi hats, puedes configurar el parámetro del grupo de silencio de todos ellos en el 1. Para tener un grupo de silencio para la caja, configura su parámetro para utilizar el 2.)" #. Tag: title #: manual.docbook:1417 #, no-c-format msgid "Filter and Random Pitch" msgstr "Filtro y Altura Tonal Aleatorio" #. Tag: para #: manual.docbook:1419 #, no-c-format msgid "The filter is a low-pass resonance filter. If you don't wish to use is, click the BYPass button so that it's red. If it's not red, then the filter is active. The cutoff parameter adjusts the cutoff frequency for the filter. The resonance parameter adjusts how much to resonate the cutoff frequency. If the resonance is set to 0, then the filter is just a simple low-pass filter." msgstr "El filtro es un low-pass resonance filter. Si no deseas usarlo, haz clic en el botón de BYP para que se ponga rojo. Si no está rojo el filtro se encuentra activo. El parámetro de corte (cutoff) determina la frecuencia de corte para el filtro. El parámetro de resonancia determina cuánta resonancia tiene la frecuencia de corte. Si la resonancia se deja en 0, el filtro no es más que un simple low-pass filter." #. Tag: para #: manual.docbook:1428 #, no-c-format msgid "The cutoff frequency of the filter varies with the sample rate of your audio card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample rate." msgstr "La frecuencia de corte del filtro varía con la tasa de muestreo de tu tarjeta de sonido. El rango del mando (0 a 1.0) está optimizado para una tasa de muestreo de 48,000 kHz." #. Tag: para #: manual.docbook:1446 #, no-c-format msgid "The random pitch paramater allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: ±2 half-steps × value. Using this sparingly can help your sequences to sound more like a real drummer." msgstr "El parámetro de altura tonal aleatoria te permite variar aleatoriamente la altura del sample cada vez que se dispara. El valor está establecido entre 0 y 1.0. El cambio de altura es bastante pequeño: ±2 semitonos × valor. Un uso moderado de este parámetro puede ayudar a que tus secuencias suenen más a una batería de verdad." #. Tag: title #: manual.docbook:1455 #, no-c-format msgid "Tips on Editing Instruments" msgstr "Consejos a la hora de Editar Instrumentos" #. Tag: para #: manual.docbook:1457 #, no-c-format msgid "With all of the different parameters available to tweak, it can be difficult to set up something that sounds nice when you're done. Here's a few tips on setting up an instrument:" msgstr "Con todos los parámetros que hay disponibles, puede resultar difícil conseguir algo que suene bien cuando acabes. Aquí van algunos consejos para configurar un instrumento:" #. Tag: para #: manual.docbook:1461 #, no-c-format msgid "Turn down the gain. Every time you have a gain knob (i.e. an amplifier), this is called a gain stage. With every gain stage you have, it's easy to overdrive your signal — which means the signal gets distorted by clipping. In addition, if you have two samples that, by themselves, peg your meters — what do you think happens when you combine them? That's right, you overdrive the signal again." msgstr "Baja la ganancia. Cada vez que tienes un control de ganancia (por ej. un amplificador), esto se llama una etapa de potencia. Con cada etapa de potencia adicional que tengas, es fácil que satures la señal — lo cual significa que la señal se distorsiona debido al clipeo. Además, si tienes dos samples que, por sí solos, ya llegan al límite — ¿qué crees que pasará cuando los combines? Está claro, vuelves a saturar la señal." #. Tag: para #: manual.docbook:1469 #, no-c-format msgid "If things sound bad and distorted, start by turning down the gain setting on the layer... especially if it's larger than 1.0. Then turn down the instrument gain. Then any gain on a LADSPA effect. Then the fader on the mixer. Then the master output fader." msgstr "Si las cosas suenan mal y distorsionadas, empieza por bajar la ganancia de la capa... sobre todo si es mayor de 1.0. Luego baja la ganancia del instrumento. Luego cualquier ganancia de los efectos LADSPA. Luego el fader del mezclador. Luego el fader de la salida master." #. Tag: para #: manual.docbook:1474 #, no-c-format msgid "Test samples at full velocity. Your sample will be played louder if the velocity is higher. So, if you set everything to sound nice and full with velocity at 0.7, what will happen when you get a full velocity of 1.0? (Hint: clipping.)" msgstr "Prueba los samples a la máxima intensidad. El sample sonará más alto si la intensidad es mayor. Así que si lo configuras todo para que suene bien con una intensidad de 0.7, ¿qué pasará cuando tengas una intensidad máxima de 1.0? (Una pista: saturación.)" #. Tag: para #: manual.docbook:1480 #, no-c-format msgid "Try to use samples that are -6 dB max. Visually, this means samples that peak at only 1/2 of full scale. Otherwise, turn your layer gain to about .5." msgstr "Intenta usar samples con -6 dB máx. Visualmente, esto son samples que llegan a su pico máximo sólo a la mitad del rango completo. Si no, deja la ganancia en aproximadamente 0.5." #. Tag: para #: manual.docbook:1485 #, no-c-format msgid "Remove all DC offsets from the sample. In a sample editor, there is usually a line down the center of your sample's waveform. This is the zero-line. The beginning of your sample should be on this line. The end of your sample should also be on this line. However, if your signal is a little above or a little below this line, you will hear a click at the beginning and the end of your sample whenever it is played. If your sample editor doesn't provide any tools to fix a DC Offset problem, you can eliminate the noise by putting a slight fade-in/out at the ends of your sample." msgstr "Quita todas las desviaciones de CD (DC offset) del sample. En un editor simple de samples, normalmente hay una línea que atraviesa el centro de la onda. Esta es la línea \"cero\". El inicio de tu sample debería de estar sobre esta línea. El final del sample también debería de estar sobre esta línea. Sin embargo, si la señal está un poco por encima o debajo de esta línea, oirás un 'clic' al comienzo y al final del sample cada vez que sea reproducido. Si tu editor de samples no tiene herramientas para arreglar un problema de desviación de CD, puedes eliminarlo poniendo un ligero fundido de entrada y salida en los extremos del sample." #. Tag: para #: manual.docbook:1495 #, no-c-format msgid "The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the attack and delay — the sample will stop playing at the end." msgstr "El ADSR no será más largo que tu sample. Si tienes un sample corto, no importa cómo configures el attack y el delay — el sample dejará de reproducirse." #. Tag: para #: manual.docbook:1500 #, no-c-format msgid "Things change with the sample rate. If you have a really nice setup with all your parameters painstakenly tweaked... things will change if you change the sample rate of your audio card. Many of Hydrogens internal settings and parameters are done based on how many samples go by, and not on how many seconds go by. The sort of things that change are: anything time-base (like attack and release) and anything frequency based (like the cutoff frequency)." msgstr "Las cosas cambian con la tasa de muestreo. Si tienes una configuración realmente buena con todos los parámetros ajustados con esmero... las cosas cambiarán si modificas la tasa de muestreo de tu tarjeta de sonido. Muchas de las funcionalidades y los parámetros internos de Hydrogen están basados en el número de samples que procesa, y no en el número de segundos. El tipo de cosas que cambian son: cualquier cosa basada en el tiempo (como el attack y el release) y cualquier cosa basada en la frecuencia (como la frecuencia de corte)." #. Tag: title #: manual.docbook:1513 #, no-c-format msgid "LADSPA plugins" msgstr " Plugins LADSPA" #. Tag: para #: manual.docbook:1515 #, no-c-format msgid "Hydrogen can also add effects to sounds using any LADSPA plugin library. You need to have installed the LADSPA sources (available from http://www.ladspa.org) and while this will give a rough idea of how it works you should really have a taste of the real thing installing one or more plugin libraries, it's as simple as a scons && scons install. Here are a few places to download plugin libraries:" msgstr "Hydrogen también puede añadir efectos a los sonidos usando cualquier librería de efectos LADSPA. Tienes que instalar las fuentes de LADSPA (disponibles en http://www.ladspa.org) y mientras que esto te ofrece una idea aproximada de cómo funciona, en realidad deberías probarlo de verdad instalándote una o más librerías de plugins, que es tan simple como scons && scons install. Estos son algunos sitios donde puedes descargarte librerías de plugins:" #. Tag: para #: manual.docbook:1525 #, no-c-format msgid "SWH-Plugins available at http://plugin.org.uk. Note that before compiling these plugins you need the FFTW tarball from http://www.fftw.org." msgstr "SWH-Plugins disponibles en http://plugin.org.uk. Antes de compilar estos plugins necesitas el tarball FFTW de http://www.fftw.org." #. Tag: para #: manual.docbook:1532 #, no-c-format msgid "CMT available at http://www.ladspa.org." msgstr "CMT disponible en http://www.ladspa.org." #. Tag: para #: manual.docbook:1536 #, no-c-format msgid "TAP available at http://tap-plugins.sf.net." msgstr "TAP disponible en http://tap-plugins.sf.net." #. Tag: title #: manual.docbook:1542 #, no-c-format msgid "Plugins Kill" msgstr "Los Plugins Matan" #. Tag: para #: manual.docbook:1543 #, no-c-format msgid "A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screaching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others." msgstr "Un plugin LADSPA es un código compilado y ejecutable. Es capaz de provocar cuelgues, fallos, congelación, desbordamiento de buffers, e incluso llamadas a casa. Si empiezas a tener problemas con Hydrogen, desactiva los plugins y mira a ver si mejoran las cosas. Algunos plugins no están diseñadas para un uso en tiempo real, y algunos simplemente son mejores que otros." #. Tag: para #: manual.docbook:1550 #, no-c-format msgid "Once you have installed a few plugins open a song you'd like add an effect to and select an instrument that has a few beats in the pattern. In the Mixer click on and select one of the four available effect line Click on the Edit button ( ), than on Select the FX: this will bring up another window () that lets you choose an effect amongst those installed, they are alphabetically sorted and categorized. Once you're done, adjust the level from the mixer and start playing. Each round knob in the FX part controls the level of its effect. If you want to quickly enable/disable the effect click the Bypass ( ) button." msgstr "Una vez que has instalado algunos plugins abre una canción a la que quieres añadir un efecto y selecciona un instrumento que tiene unos cuantos golpes en el patrón. En el mezclador haz clic en y selecciona una de las líneas disponibles para plugins. Haz clic en el botón de Editar ( ), luego en Seleccionar el Efecto: esto abrirá otra ventana () que te permitirá elegir un efecto de entre los que tienes instalados, que están ordenados alfabéticamente y por categorías. Cuando acabes, ajusta el nivel en el mezclador y empieza a tocar. Cada control redondo en la parte de efectos (FX) controla el nivel del efecto correspondiente. Si quieres activar/desactivar rápidamente el efecto, haz clic en el botón de Bypass ( )." #. Tag: title #: manual.docbook:1594 #, no-c-format msgid "Select an Effect" msgstr "Selecciona un Efecto" #. Tag: title #: manual.docbook:1613 #, no-c-format msgid "A new song" msgstr "Una nueva canción" #. Tag: title #: manual.docbook:1615 #, no-c-format msgid "\"Song\" mode and \"Pattern\" mode" msgstr "Modo \"Canción\" y modo \"Patrón\"" #. Tag: para #: manual.docbook:1617 #, no-c-format msgid "This is just a quick-and-dirty walkthrough to Hydrogen. Refer to the tutorial for a more detailed overview." msgstr "Esto no es más que una guía rápida de Hydrogen. Consulta el tutorial para una descripción más detallada." #. Tag: para #: manual.docbook:1620 #, no-c-format msgid "Hydrogen has 2 main modes: \"Pattern\" mode and \"Song\" mode (refer to for the buttons to activate). When \"Pattern\" mode is activated the current pattern is continously repeated, so to help changing it until we don't like it, while \"Song\" mode repeats only the current pattern: this is useful when putting together the patterns, to create the whole structure for the song." msgstr "Hydrogen tiene 2 modos principales: modo \"Patrón\" y modo \"Canción\" (consulta para ver los botones que lo activan). Cuando se activa el modo \"Patrón\", el patrón actual se repite contínuamente para ayudar a modificarlo hasta conseguir lo que queremos, mientras que el modo \"Canción\" repite toda la secuencia de patrones: esto es útil para crear la estructura completa de la canción." #. Tag: title #: manual.docbook:1629 #, no-c-format msgid "A new pattern" msgstr "Un nuevo patrón" #. Tag: para #: manual.docbook:1631 #, no-c-format msgid "We'll start from an empty song with an empty pattern, as created by default: \"pattern\" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor () simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Rememeber some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!" msgstr "Empezaremos con una canción vacía y un patrón vacío, como viene por defecto: ahora debemos seleccionar el modo \"Patrón\". También es posible cambiar el nombre del patrón. Ahora vamos a hacer clic en el botón de Play y mientras se reproduce el patrón vamos a añadir notas en la rejilla del Editor de Patrones () simplemente haciendo clic izquierdo en él: ajusta la resolución de la rejilla y la velocidad de PPM si lo necesitas. Recuerda algunas limitaciones en cuanto a la rejilla: si estás trabajando con una resolución de 16 no puedes volver a una de 8 y quitar una nota de 1/16; por otro lado, si trabajas con una resolución de 8 e intentas insertar una nota entre dos barras (buscando una resolución de 1/16), las notas se colocarán en en la barra anterior o posterior en la rejilla de 1/8 (a menos que elijas off en el LCD de la Resolución de Rejilla; en este caso puedes colocar las notas donde quieras). ¡Asegúrate de seleccionar el patrón correcto en el Editor de Canciones antes de añadir notas en el Editor de Patrones!" #. Tag: title #: manual.docbook:1658 #, no-c-format msgid "A new sequence" msgstr "Una nueva secuencia" #. Tag: para #: manual.docbook:1660 #, no-c-format msgid "Once patterns are created (), we can copy/paste/delete them simply dragging with the mouse (activate the select mode for the Song Editor and keep pressed left mouse button to select those you want to move or copy)." msgstr "Una vez que hemos creado los patrones (), podemos copiar/pegar/eliminarlos simplemente arrastrándolos con el ratón (activa 'modo selección' en el Editor de Canciones y mantén pulsado el botón izquierdo del ratón para seleccionar los que quieres mover o copiar)." #. Tag: title #: manual.docbook:1666 #, no-c-format msgid "Inserting Notes in a Pattern" msgstr "Insertar Notas en un Patrón" #. Tag: title #: manual.docbook:1677 #, no-c-format msgid "Adjust from the mixer" msgstr "Configura desde el mezclador" #. Tag: para #: manual.docbook:1679 #, no-c-format msgid "Of course we can always use the mixer window, either when creating or playing patterns." msgstr "Por supuesto siempre podemos utilizar la ventana del mezclador, bien a la hora de crear o reproducir patrones." #. Tag: para #: manual.docbook:1682 #, no-c-format msgid "The Mixer frame () is made of 32 independent tracks, each of these is binded to an instrument, plus a \"Master Output\" line to adjust general output volume and a \"FX\" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The \"Mute\" button , simply mute that instrument. The maximun peak indicates the maximun volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter." msgstr "El marco del Mezclador () se compone de 32 pistas individuales, cada uno de los cuales está vinculado a un instrumento, más una línea de \"Salida Master\" para ajustar la salida general del volumen y un botón \"FX\" (efectos) para configurar efectos. Cada línea tiene 3 botones ( ), ajuste de paneo ( ), pico máximo actual, fader de volumen y nombre de la pista. Haciendo clic en sonará el instrumento seleccionado, y los demás se silenciarán. El botón de \"Mute\" (silencio) , simplemente silencia ese instrumento. El pico máximo indica el volumen máximo alcanzado por el instrumento; el pico debe estar en un rango entre 0.0 y 1.0 (en puedes ver algunos volúmenes demasiado altos), de lo contrario se distorsionará, produciendo un sonido extraño (sobre todo con el driver de audio OSS), en este caso es mejor tener el volumen bajo; vigila los vúmetros." #. Tag: title #: manual.docbook:1749 #, no-c-format msgid "Glossary" msgstr "Glosario" #. Tag: para #: manual.docbook:1751 #, no-c-format msgid "This is a glossary of general terms encountered when using Hydrogen, synthesizers, drums, or samplers. The definitions in the text are simplified, but the definitions here are more general and have more explanation. For example, the text of the manual would have you believe that an ADSR is the only kind of envelope generator, and could only ever control the volume. While it's simple for new users, it's not quite right." msgstr "Esto es un glosario de términos generales que se encuentran al utilizar Hydrogen, sintetizadores, baterías o samplers. Las definiciones del texto están simplificadas, pero las definiciones aquí son más generales y están más explicadas. Por ejemplo, el texto del manual te llevaría a creer que un ADSR es el único tipo de generador de envolventes (envelope generator), y que sólo controla el volumen. Mientras que sirve para nuevos usuarios, no es del todo correcto." #. Tag: glossterm #: manual.docbook:1764 #, no-c-format msgid "ADSR" msgstr "ADSR" #. Tag: para #: manual.docbook:1766 #, no-c-format msgid "A type of envelope generator that allows you to control the Attack, Decay, Sustain, and Release parameters. Generally, the parameters are proportional to the velocity." msgstr "Un tipo de generador de envolventes que te permite controlar los parámetros de Attack, Decay, Sustain, y Release. Generalmente, los parámetros son proporcionales a la intensidad." #. Tag: para #: manual.docbook:1775 #, no-c-format msgid "In Hydrogen, the ADSR envelope generator only controls the volume (attenuation)." msgstr "En Hydrogen, el 'ADSR envelope generator' sólo controla el volumen (atenuación)." #. Tag: para #: manual.docbook:1778 #, no-c-format msgid "Read more about this in the Wikipedia Article ADSR Envelope" msgstr "Lee más sobre esto en el Artículo de Wikipedia (en inglés) ADSR Envelope" #. Tag: glossdef #: manual.docbook:1780 #, no-c-format msgid " " msgstr " " #. Tag: glossterm #: manual.docbook:1791 #, no-c-format msgid "Attack" msgstr "Attack" #. Tag: para #: manual.docbook:1793 #, no-c-format msgid "This is the first phase of an ADSR envelope, and is the amount of time to turn the parameter up from 0 to full velocity after triggering the note." msgstr "Esta es la primera fase de un 'ADSR envelope', y es la cantidad de tiempo necesario para subir el parámetro de 0 a la máxima intensidad tras disparar la nota." #. Tag: glossterm #: manual.docbook:1802 #, no-c-format msgid "Attenuation" msgstr "Atenuación" #. Tag: para #: manual.docbook:1804 #, no-c-format msgid "In filters and mixers, this the amount that a signal is reduced (volume)." msgstr "En filtros y mezcladores, esto es la reducción de la señal (volumen)." #. Tag: glossterm #: manual.docbook:1814 #, no-c-format msgid "Band-Pass Filter" msgstr "Band-Pass Filter" #. Tag: para #: manual.docbook:1816 #, no-c-format msgid "A filter that preserves a cetertain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter." msgstr "Un filtro que conserva cierto rango de frecuencias, y atenúa (silencia) todos los demás. A menudo se hace esto combinando un filtro high-pass y otro filtro low-pass." #. Tag: glossdef #: manual.docbook:1818 #, no-c-format msgid " " msgstr " " #. Tag: glossterm #: manual.docbook:1829 #, no-c-format msgid "Clipping" msgstr "Saturación (Clipping)" #. Tag: para #: manual.docbook:1831 #, no-c-format msgid "A phenomenon that happens to a signal when the signal is too large for whatever is receiving it. The peaks of the signal (which are normally smooth curves) get cut off straight at the max volume (clipped). This distorts the sound and is usually undesirable." msgstr "Un fenómeno que afecta a una señal cuando es demasiado grande para lo que sea que lo recibe. Los picos de la señal (que normalmente son curvas redondeadas) se cortan al máximo volumen (clipeados). Esto distorsiona el sonido y normalmente no es deseable." #. Tag: para #: manual.docbook:1836 #, no-c-format msgid "An example of clipping is when you play music louder than your speaker can handle. Parts of the music sound harsh and fuzzy." msgstr "Un ejemplo de saturación es cuando reproduces música a un volumen mayor de lo que puede soportar el altavoz. Algunas partes de la música suenan desgarradas y borrosas." #. Tag: glossterm #: manual.docbook:1842 #, no-c-format msgid "Cutoff Frequency" msgstr "Frecuencia de Corte (Cutoff Frequency)" #. Tag: para #: manual.docbook:1844 #, no-c-format msgid "On high-pass and low-pass filters, this is the frequency that divides between those that pass, and those that are attenuated (silenced). In a high-pass resonance filter, or a low-pass resonance filter, the cutoff is also the frequency zone that gets boosted." msgstr "En los filtros high-pass y low-pass, esta es la frecuencia que divide entre entre aquellas que pasan, y aquellas que se atenúan (silenciadas). En un filtro de 'high-pass resonance', o uno de 'low-pass resonance', el corte es también la zona de frecuencias que se amplifican." #. Tag: para #: manual.docbook:1849 #, no-c-format msgid "For example, if you have a low-pass filter and you set the cutoff frequency high (i.e. 20kHz)... the filter will not affect the sound. All the audible frequencies will pass through undisturbed. As you lower the cutoff frequency to something like 40 Hz (the low string on a bass guitar), it sounds like someone is putting a blanket over the speaker. The higher frequencies are being attenuated above 30 Hz." msgstr "Por ejemplo, si tienes un filtro low-pass y configuras una frecuencia de corte alta (por ej. 20kHz)... el filtro no afectará al sonido. Todas las frecuencias audibles pasarán sin modificarse. Al bajar la frecuencia de corte a algo como 40 Hz (la cuerda gruesa de un bajo), suena como si alguien tapara el altavoz con una manta. Las frecuencias altas se están atenuando por encima de los 30 Hz." #. Tag: glossdef #: manual.docbook:1854 #, no-c-format msgid " " msgstr " " #. Tag: glossterm #: manual.docbook:1866 #, no-c-format msgid "Decay" msgstr "Decay" #. Tag: para #: manual.docbook:1868 #, no-c-format msgid "After reaching full velocity from the attack, this is the amount of time to turn the parameter down from full velocity to the sustain level." msgstr "Tras alcanzar la máxima intensidad del 'attack', esto es la cantidad de tiempo necesario para bajar el parámetro hasta el nivel del sustain." #. Tag: glossterm #: manual.docbook:1879 #, no-c-format msgid "Envelope Generator" msgstr "Generador de la Envolvente (Envelope Generator)" #. Tag: para #: manual.docbook:1881 #, no-c-format msgid "A way to control (change) a parameter over time as a response to triggering, holding, and releasing a note." msgstr "Una manera de controlar (cambiar) un parámetro a lo largo del tiempo como respuesta al disparo, sostenimiento y liberación de una nota." #. Tag: para #: manual.docbook:1887 #, no-c-format msgid "Did your eyes just glaze over? Let's try again:" msgstr "¿Se te acaba de nublar la vista? Intentémoslo de nuevo:" #. Tag: para #: manual.docbook:1889 #, no-c-format msgid "Imagine that you're playing a note on the keyboard and you have your other hand on a knob (volume, filter cutoff, etc.). As you play the note, you twist the knob (often up, then down... or down, then up). You do the same thing on each note. That's what an envelope generator does. See also ADSR" msgstr "Imagina que estás tocando una nota en el teclado y tienes la otra mano en un mando (volumen, filtro de corte, etc.). Según tocas la nota, giras e mando (hacia arriba, luego abajo... o viceversa). Haces lo mismo con cada nota. Esto es lo que hace el 'envelope generator'. Consulta también ADSR" #. Tag: glossterm #: manual.docbook:1900 #, no-c-format msgid "Fader" msgstr "Fader" #. Tag: para #: manual.docbook:1902 #, no-c-format msgid "A slider control used to adjust the attenuation (volume) in a mixer. Faders always have an \"audio\" taper, which means that the attenuation amount changes on an exponential scale." msgstr "Un control deslizante utilizado para ajustar la atenuación (volumen) en un mezclador. Los faders siempre tienen un potenciómetro de \"audio\", lo que significa que los cambios de atenuación tienen lugar en una escala exponencial." #. Tag: glossterm #: manual.docbook:1909 #, no-c-format msgid "Filter" msgstr "Filtro" #. Tag: para #: manual.docbook:1911 #, no-c-format msgid "A device that changes a sound by attenuating specific frequencies. A tone knob is an example of a simple, low-pass filter." msgstr "Un dispositivo que cambia un sonido atenuando frecuencias específicas. Un control de tono es un ejemplo de un filtro simple de 'low pass'." #. Tag: glossdef #: manual.docbook:1912 #, no-c-format msgid " " msgstr " " #. Tag: glossterm #: manual.docbook:1924 #, no-c-format msgid "Gain" msgstr "Ganancia" #. Tag: para #: manual.docbook:1926 #, no-c-format msgid "In an amplifier, this adjust how much (or how little) a signal is amplified (volume). A higher gain value is a louder signal." msgstr "En un amplificador, determina cuánto se amplifica una señal (volumen). A mayor valor de ganancia, más volumen." #. Tag: glossterm #: manual.docbook:1934 #, no-c-format msgid "High-Pass Filter" msgstr "Filtro 'High-Pass'" #. Tag: para #: manual.docbook:1936 #, no-c-format msgid "A filter that attenuates (silences) low frequencies, but allows high frequencies to pass through." msgstr "Un filtro que atenúa (silencia) frecuencias bajas, pero que permite el paso de frecuencias altas." #. Tag: glossdef #: manual.docbook:1937 manual.docbook:1982 #, no-c-format msgid " " msgstr " " #. Tag: glossterm #: manual.docbook:1947 #, no-c-format msgid "Instrument" msgstr "Instrumento" #. Tag: para #: manual.docbook:1949 #, no-c-format msgid "In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, or a tom)." msgstr "En Hydrogen, un instrumento es un único generador de ruido (como puede ser un bombo o un tom)." #. Tag: glossterm #: manual.docbook:1960 #, no-c-format msgid "Layer" msgstr "Capa" #. Tag: para #: manual.docbook:1962 #, no-c-format msgid "In an instrument you can load several different samples (each one called a layer), and have a different sample play depending on the velocity of the note. Only one sample at a time will play." msgstr "En un instrumento, puedes cargar varios samples diferentes capa), y hacer que suene un sample diferente dependiendo de la intensidad de la nota. Sólo sonará un sample a la vez." #. Tag: para #: manual.docbook:1967 #, no-c-format msgid "Suppose you have a sample of a floor tom being struck softly. If you simply play the sample louder — it will not sound the same as a real tom that has been struck very hard. If you wish to mimic this in your instrument, you can load one sample for soft playing, and a different sample for loud playing." msgstr "Supón que tienes un sample de un golpe suave de timbal base. Si simplemente reproduces el sample más alto — no sonará igual que un golpe fuerte en un tom de verdad. Si quieres imitar esto en tu instrumento, puedes cargar un sample par los golpes suaves, y otro sample para los fuertes." #. Tag: glossterm #: manual.docbook:1979 #, no-c-format msgid "Low-Pass Filter" msgstr "Filtro Low-Pass" #. Tag: para #: manual.docbook:1981 #, no-c-format msgid "A filter that attenuates (silences) high frequences, but allows low frequencies to pass through." msgstr "Un filtro que atenúa (silencia) frecuencias altas, pero que permite el paso de frecuencias bajas." #. Tag: glossterm #: manual.docbook:1992 #, no-c-format msgid "Mute" msgstr "Silencio (Mute)" #. Tag: para #: manual.docbook:1994 #, no-c-format msgid "To make no noise. A setting on an instrument that prevents any audio output." msgstr "Para no hacer sonido. Una función del instrumento que evita cualquier salida de audio." #. Tag: glossterm #: manual.docbook:2000 #, no-c-format msgid "Mute Group" msgstr "Grupo de Silencio (Mute Group)" #. Tag: para #: manual.docbook:2002 #, no-c-format msgid "A group of instruments (samples) that should mute (stop playing) immediately after another instrument in the group is triggered." msgstr "Un grupo de instrumentos (samples) que debería silenciarse inmediatamente cuando se dispara otro instrumento del mismo grupo." #. Tag: para #: manual.docbook:2005 #, no-c-format msgid "This is typically used in hi-hats, where there's a different instrument (sample) for when the hi-hat is open or closed. With a real hi-hat, the sound of the open hi-hat will stop as soon as you close it. However, if you use two samples — the open sound will continue even after you have triggered the closed sound. By placing both instruments in the same mute group (group #1, for example)... triggering closed sound will immediately stop the open sound (and vice versa)." msgstr "Esto se utiliza normalmente para los hi-hats, donde hay un instrumento (sample) diferente para cuando está abierto y cerrado. Con un hi-hat real, el sonido abierto parará en cuanto lo cierres. Sin embargo, si utilizas dos samples — el sonido de abierto continuará aún después de disparar el sonido de cerrado. Al colocar ambos instrumentos en el mismo grupo (grupo #1, por ejemplo)... al disparar el sonido de cerrado el de abierto se parará automáticamente (y vice versa)." #. Tag: glossterm #: manual.docbook:2021 #, no-c-format msgid "Octave" msgstr "Octava" #. Tag: para #: manual.docbook:2023 #, no-c-format msgid "A span of frequencies where the top-most frequency is exactly twice the frequency of the bottom frequency." msgstr "Un rango de frecuencias donde la más alta es exáctamente el doble de la más baja." #. Tag: para #: manual.docbook:2026 #, no-c-format msgid "For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they sound like the same distance." msgstr "Por ejemplo, el rango de 20 Hz a 40 Hz es una octava. Como lo es de 120 Hz a 240 Hz, y de 575 Hz a 1150 Hz. Mientras que las diferencias de frecuencia son muy variadas (20 Hz, 120 Hz, y 575 Hz, respectivamente), para el oído humano suenan como si les separara la misma distancia." #. Tag: glossterm #: manual.docbook:2040 #, no-c-format msgid "Release" msgstr "Liberación (Release)" #. Tag: para #: manual.docbook:2042 #, no-c-format msgid "After the note is released, this is the amount of time to reduce the parameter from the sustain level to 0." msgstr "Tras soltar/liberar la nota, esto es la cantidad de tiempo necesario para reducir el parámetro del nivel de sustain a 0." #. Tag: glossterm #: manual.docbook:2051 #, no-c-format msgid "Resonance" msgstr "Resonancia" #. Tag: para #: manual.docbook:2053 #, no-c-format msgid "When referring to a resonance filter, this is the parameter that determines how much of a boost (gain) to give the frequencies at the cutoff." msgstr "Al referirnos al filtro de resonancia, esto es el parámetro que determina cuánta ganancia se da a las frecuencias en el corte." #. Tag: glossterm #: manual.docbook:2062 #, no-c-format msgid "Resonance Filter" msgstr "Filtro de Resonancia" #. Tag: para #: manual.docbook:2064 #, no-c-format msgid "A filter that gives a large boost to a very narrow range of frequencies. Typically it will be part of a high-pass or a low-pass filter, where the boosted frequencies are centered on the cut-off frequency." msgstr "Un filtro que amplifica un estrecho rango de frecuencias. Típicamente formará parte de un filtro high-pass o low-pass, donde las frecuencias amplificadas se centran en la frecuencia de corte." #. Tag: glossdef #: manual.docbook:2067 #, no-c-format msgid " " msgstr " " #. Tag: glossterm #: manual.docbook:2076 #, no-c-format msgid "Roll-off" msgstr "Roll-off" #. Tag: para #: manual.docbook:2078 #, no-c-format msgid "This is the amount that frequencies are attenuated (suppressed) as the frequency changes (typically measured in dB/octave)." msgstr "Esta es la cantidad de atenuación (supresión) aplicada a las frecuencias según cambia la frecuencia (normalmente medido en dB/octava)." #. Tag: para #: manual.docbook:2081 #, no-c-format msgid "For example, in a low-pass filter the frequences below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency." msgstr "Por ejemplo, en un filtro low-pass las frecuencias or debajo de la frecuencia de corte no se atenúan (pasan con el mismo volumen). Lo mismo que con la frecuencia de corte. Al superar la frecuencia de corte, las frecuencias que se encuentran cerca de la frecuencia de corte no se atenúan mucho. Sin embargo, las frecuencias que superan mucho el de corte se atenúan (silencian) mucho. Esto normalmente se aproxima mediante una línea recta (en una escala logarítmica) y se mide en dB de atenuación por cada octava de frecuencia." #. Tag: glossdef #: manual.docbook:2088 #, no-c-format msgid " " msgstr " " #. Tag: glossterm #: manual.docbook:2098 #, no-c-format msgid "Sample" msgstr "Sample" #. Tag: glossterm #: manual.docbook:2106 #, no-c-format msgid "Sustain" msgstr "Sustain" #. Tag: para #: manual.docbook:2108 #, no-c-format msgid "The level to hold the parameter after finishing the decay time. This level will be maintained until the not is released." msgstr "El nivel en el que se sostiene el parámetro tras terminar el tiempo de decay. Este nivel se mantendrá hasta que la nota se suelta." #. Tag: glossterm #: manual.docbook:2122 #, no-c-format msgid "Velocity" msgstr "Intensidad" #. Tag: para #: manual.docbook:2126 #, no-c-format msgid "MIDI devices are required to send this information along with the note. Synthesizers use this information to adjust several parameters on the sample (typically the volume). In Hydrogen, it is only used to adjust how loud the sample is played back." msgstr "Los dispositivos MIDI deben enviar esta información junto con la nota. Los sintetizadores utilizan esta información para ajustar varios parámetros en el sample (normalmente el volumen). En Hydrogen, sólo se utiliza para determinar el volumen al que se reproduce el sample." hydrogen-0.9.6-beta3/data/doc/manual_fr.html000066400000000000000000003136501211146647700206720ustar00rootroot00000000000000Manuel de Hydrogen

    Manuel de Hydrogen

    Antonio Piraino

    Alessandro Cominu

    Thijs van Severen

    Sebastian Moors

    Rsum

    Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter is still experimental, so ask in the developers mailing list for further details.


    Chapitre1.Introduction

    1.Tlchargement

    You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

    If you want to compile Hydrogen yourself (see Section2), you can download the latest source files directly from our subversion server with:

    $ svn co http://svn.assembla.com/svn/hydrogen/trunk

    A certain release can be fetched with:

    $ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.5

    Compiling Hydrogen depends on the following libraries:

    Please install them with your distribution's package manager. If you're running a debian-based system, you can install the libraries with:

    $ apt-get install libqt4-dev g++ libasound2-dev \
            libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
            liblash-dev libportaudio-dev libportmidi-dev 
          

    2.Compilation

    Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

    2.1.Using scons

    Decompress the tarball or go to the directory where the subversion copy was checked out:

    $ cd hydrogen-*
              $ scons
              $ su -c "scons install"
            

    Before compiling, check for additional options with:

    $ scons --help
            

    If you want to use features which are not enabled by default (for instance PortAudio), you can enable them with:

    $ scons portaudio=1
            

    Namely, if you get some error while running Hydrogen and you want to report it remember to configure hydrogen with:

    $ scons debug=1
            

    To clean up compiled code:

    $ scons -c
            

    3.Preferences

    First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).

    3.1.The General tab

    On the "General" tab (Figure1.1) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

    If you want to use Lash to manage your Jack connections you should enable it here so Hydrogen allows interaction with Lash.

    The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see Section3.1)

    The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching you need to enter the path where rubberband is installed on you system here.

    Figure1.1.The General Tab

    The General Tab

    3.2.The Audio System tab

    From the "Audio System" tab (Figure1.2) it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

    We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

    Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.

    Figure1.2.The Audio System Tab

    The Audio System Tab

    The following drivers are available:

    • jackd: The Jack driver is a professional audio server which permits very low lag and exchanges with other audio software. We strongly recommend using this driver to have the best out of Hydrogen. JACK server will start automatically if not already running.

    • ALSA: the widely adopted Linux standard audio drivers

    • OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort.

    • PortAudio: an open-source multi platform audio driver

    • CoreAudio: a driver for Mac OS X (experimental)

    3.3.The Midi System tab

    The "Midi System" tab (Figure1.3) contains all MIDI settings. Here you can choose the MIDI driver, input, and channel(s) that Hydrogen should respond to. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the 'binding' action line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action.

    Figure1.3.The MIDI System Tab

    The MIDI System Tab

    3.4.The Appearance tab

    The "Appearance" tab (Figure1.4) let's you modify Hydrogen look and feel (font settings and interface style). Also the VU meters fall-off speed of the Mixer Window can be changed here.

    Figure1.4.The Appearance Tab

    The Appearance Tab

    3.5.The Audio Engine tab (debug only)

    The "Audio Engine" tab (Figure1.5) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

    Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.

    Figure1.5.The Audio Engine tab

    The Audio Engine tab

    Chapitre2.Using Hydrogen

    1.Used Filetypes

    Before working with Hydrogen, please familiarize with these filetypes:

    • *.h2pattern: XML file describing a single pattern. Patterns are group of beats and are managed in the pattern editor.

    • *.h2song: XML file describing the whole song (or sequence). Songs are group of patterns with their properties and are manager using the song editor

    • *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs.

    • *.h2drumkit: a compressed and archived folder containing all sound samples composing a drumkit and a description XML file. Drumkits are basically group of sound samples.

    2.Main menu

    Projects: this menu offers file related functions.

    • New - Create a new song

    • Show Info - Set general properties of the song such as name, author, license and generic notes

    • Open - Open a song

    • Open Demo - Open a demo song (demo songs are stored in $INSTALLPATH/share/hydrogen/data/demo_songs)

    • Open recent - Open a menu showing last used songs

    • Save - Save changes to current song

    • Save as - Save current song specifying a name (default path: $HOME/.hydrogen/data/songs)

    • Open pattern - Open a saved pattern belonging to the current drumkit

    • Export pattern as - Saves a pattern. It will be stored in $HOME/.hydrogen/data/patterns/drumkit_name

    • Export MIDI file - Export current song in MIDI format

    • Export song - Export current song in WAV format

    • Quit - Quit Hydrogen

    Instruments: this menu offers instruments and drumkit (sound libraries) functions.

    • Add instrument - Add a new instrument to your current drumkit

    • Clear all - Delete all instruments from the current drumkit

    • Save library - Saves all instruments settings (and their sound samples) in $HOME/.hydrogen/data/library_name

    • Export library - Compress all instruments samples and settings in a drumkit in $HOME/.hydrogen/data/library_name

    • Import library - Imports another drumkit from the local filesystem or download it from a remote location through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen website for an example). To load another drumkit in your current working session of Hydrogen, read Section7.

    Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window.

    • Playlist editor - A tool to manage playlists.

    • Director - Open the director window.

    • Mixer - Open the mixer window.

    • Instrument rack - Open the instrument rack panel.

    • Preferences - Open the main preferences window. Read Section3 on how to configure Hydrogen.

    Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !).

    • Show audio engine info - Open a monitor with various stats

    • debug action - Insert debug commands.

    • Print Objects - Print on stdout current objects map.

    Info

    • User manual - Open a window with this manual :)

    • About - The usual window with license information, acknowledgements, etc.

    3.La bare d'outils principale

    Before analyzing the two main frames of Hydrogen, let's take a quick look at the main toolbar and its components:

    • Pilot the song using the start, stop, pause, etc. buttons

    • Choose between "pattern" or "song" mode: in "pattern" mode only the currently selected pattern will play, while in "song" mode all patterns inserted will be played.

    • An advanced tap tempo function: choose note length and how many notes to wait before recalculating BPM, then click the comma key repeatedly until the 'R' letter will appear and the BPM will be updated. (see Section3.1)

    • Manually set BPM

    • Manage JACK transport

    • Open the mixer and the instrument rack panels

    Figure2.1.The Main Toolbar

    The Main Toolbar

    • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

    • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see Section4). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see Section5).

    • Set measure type and Beat Counter (see Section3.1).

    • XXX

    • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

    • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected.

    3.1.Tap Tempo and BeatCounter

    It is possible to change tempo at any time using the tap-tempo and BeatCounter features of Hydrogen. You can change these while playing or while the song is stopped. To change the tempo, hit the , (comma) key in tempo for the number of beats in the measure. After the correct number of beats are met, the tempo will change to the average tempo that you tapped in. If you continue to tap, these new taps will become a part of a rolling average. If you tap accidentally, or if you wait too long between taps, the tap tempo counter will start over.

    The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo on steroids. By default the BeatCounter display is not visible. To see the BeatCounter widget click the upright button (BC) between Song/Pattern mode selector and the BPM-widget. Or, it can be shown by pressing the comma key (,).

    The tempo that you tap will be considered even beats of the beat type. The beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change the beat type use the left arrow buttons. To change the number of beats that are counted, use the right arrow button. You can set from 2 to 16 beats. (I.e. if you set the beat to 6, you will have to tap 6 times before the new tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. Every time you tap with the comma key, it will show the number of taps that you have entered (1, 2, 3...).

    The button in the bottom right-hand controls the auto-start feature, and it toggles between S and P. When it shows P for (Play), the song will set the new tempo and automatically start to play after you tap the right number of beats (if it's not already playing, of course). This way, if you have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing on the next beat. When it shows S (for Set BPM), the auto-start is disabled.

    For example: Suppose you have a live band, Hydrogen, and a softsynth that is controlled by Seq24)... and you want them all to start at the same time. Set the beat type to 1/4 and the number of beats to 4. Enable auto-start (button shows P). Count off the band 1-2-3-4 (while tapping the comma key) — and everyone starts on 1.

    Another example: Same situation, but the song doesn't require Hydrogen or synths until some point later. During that time, a human (e.g. guitar player) will be setting the tempo. On the measure before Hydrogen is supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in on the next beat (at the right tempo).

    If you are using the JACK Transport, the BeatCounter continues to work. If another program is the JACK Transport Master, Hydrogen will respond to tempo change events from that application. Note that in this situation, Hydrogen is supposed to be a slave, so some of the BeatCounter features will be disabled or will not work properly. If Hydrogen is the JACK Transport Master, tempo changes from Hydrogen will be reflected in those programs (if they support it).

    Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see Section3.1 ). Here you will finde two spinboxes:

    • Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program.

    • Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated).

    Note that these can be set to positive (+) or negative (-) values. In order to find useful values for these, you will need to take some time to play with it. Also, you may want different values depending on the speed of your hardware, audio devices, drivers, etc. Using the BeatCounter effectively requires practice.

    4.Editeur de Morceau

    The "Song Editor" (Figure2.2) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel is a complete bar as shown in the underlying "Pattern Editor" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns.

    The Song Editor comes with 7 buttons:

    • Completely delete all patterns (asks for confirmation!).

    • Create a new pattern (and asks for a name).

    • Move currently selected pattern up or down.

    • Enable selecting patterns for copy & paste (Select Mode).

    • Enable Draw Mode.

    • Switch from "Single pattern mode" to "Stacked pattern mode" and back..

    Sous ces boutons, vous trouverez une liste des motifs crs et quand ils seront jous. Cliquez sur une case vide pour jouer le motif (apparition d'une croix) ou sur une case contenant une croix pour l'effacer. Cliquer avec le bouton droit de la souris sur un motif ouvrira un menu permettant de modifier son nom, de le copier ou de le supprimer. Notez qu'il est impossible de crer deux motifs portant le mme nom !

    Figure2.2.The Song Editor

    The Song Editor

    4.1.Virtual patterns

    Virtual patterns are a convenient way of grouping patterns together. For example, say you have a song in which three patterns are always played together at the start of each bar. Previously, the way to do this in the pattern matrix was to explicitly enable the three patterns at each bar.

    With virtual patterns we can assign a pattern to be a sort of meta-pattern that implicitly invokes these three patterns together when the new virtual pattern is enabled in the pattern matrix. This way, we only need to set one pattern every bar, instead of three.

    Virtual patterns provide a function that's similar to the regular pattern editor, and one could argue that since a virtual pattern is also a regular pattern, we could have just merged the three patterns into this new one. However, the advantage that virtual patterns provide is that if one of the original three patterns changes, the virtual pattern automatically inherits the change. A virtual pattern can also invoke other virtual patterns.

    To access virtual patterns, right click (bring up the context menu) on the label of an existing pattern and there select “Virtual Pattern”. This will bring up a small dialog that allows one to toggle which patterns are in the virtual pattern set.

    5.Editeur de motif

    The "Pattern Editor" lets us create or modify the pattern (bar) which is currently selected. You can add/remove notes, and tune a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)

    First let's take a look at the (classic) 'Drum' mode :

    Figure2.3.Pattern Editor in Drum mode

    Pattern Editor in Drum mode


    5.1.Pattern Editor Controls

    The top part of the pattern editor contains a number of controls :

    Figure2.4.Pattern Editor Controls

    Pattern Editor Controls

    From left to right :

    • SIZE : lets you choose the size of the pattern (the number of bars)

    • RES : this is the current grid resolution (4 through 64)

      Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer.

    • HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern.

    • QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied.

    • Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your sound library as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

    • Note Length / Note off : these are 2 different ways to define the duration of a note. See Section5.3 for usage.

    • Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)

    5.2.Pattern Editor Drumkit

    The section on the left shows you what drumkit/library is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

    Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select

    • Clear notes : to remove all notes for this instrument in this pattern.

    • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

    • Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played.

    • Delete Instrument : well, deletes the instrument ;-)

    The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons.

    The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit/library. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys.

    Important Notes :

    The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default.

    Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

    Here's a quick reference of the above bindings for your convenience.

    5.3.Pattern Editor Sequence area

    This is where it all happens, this is where you can make music :-)

    In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

    If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note.

    (Figure above, from left >right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

    So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see Section2) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see Chapitre3 for a basic walk-through of how the pattern editor works)

    5.4.Pattern Editor Note Properties

    Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :

    • Velocity : how hard the note is played (the volume of the note)

      Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping.

    • Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)

    • Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)

    • Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'

      The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

    5.5.Pattern Editor Piano mode

    Drum mode (see Figure2.3) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

    You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.

    Figure2.5.Pattern Editor in Piano mode

    Pattern Editor in Piano mode

    6.Table de mixage

    Figure2.6.The Mixer

    The Mixer

    The Mixer frame (Figure2.6) is useful for tuning a global or single volume of the current drumkit. It shows the current peak (click on to disable, useful on old CPUs) and let you set the maximum peak allowed (tune with the fader knob of the instrument), lets you modify attributes like pan, play solo , mute or test play only that instrument ; selecting in the Pattern Editor an instrument causes a blue LED to light on (near the play button). Near the global volume knob, you can set 3 global effect such a swing (shifts a few notes back or forward not randomly), timing (modify timings of the notes) and humanize effect (random velocity editing).

    In addition to all this you can set up to 4 special LADSPA effects for each instrument switching the button. See next section for a detailed overview.

    7.Sound Library (Drumkit Manager)

    The Sound Library saves you time in managing your drum kits, favorite patterns, and favorite songs. When making new songs and drum kits, the Sound Library makes it easier for you to reuse and mix the instruments and patterns from other kits and songs.

    7.1.System Drumkits

    This lists the drumkits that were installed by your system administrator. It was determined by the compile-time prefix. On Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or possibly /usr/local/share/hydrogen/data/drumkits. These kits are available to all users on the system, and users are usually not able to add to them.

    To load a drumkit from here, right-click the drumkit and select Load. This will replace your current drumkit with the one that you selected. To load a single instrument from that kit, left-click the plus to the left of the drumkit's name to show all the instruments. With your left mouse button, click and drag the instrument into your current kit. The instrument will be added to the drumkit that you currently have loaded.

    7.2.User Drumkits

    These are your own drum kits that you can manage yourself. They are usually stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by selecting InstrumentsSave library.

    Loading drumkits and instruments to use is the same as for the System Drumkits (see Section7.1).

    7.3.Patterns in the Sound Library

    Before you save your favorite patterns to the sound library, be sure to edit it's properties by right-clicking and selecting Properties. There, you can give the pattern a title and a category. You can use one of the categories already provided, or create your own categories by simply typing in a category name. The category name is important, because the patterns will be filed by category in the Sound Library.

    You can save your favorite patterns in the sound library by right clicking the title of the pattern in the song editor, and selecting Save Pattern. It will appear in the Sound Library underneath Patterns and the category that you assigned to the pattern.

    7.4.Songs in the Sound Library

    To save songs in the Sound Library, put them in your data directory underneath the songs folder (usually $HOME/data/songs. To remove them, remove the file from that folder.

    8.Drumkits and Instrument Editing

    Creating a new drumkit with Hydrogen is done with the Instrument Editor. Using the instrument editor you can load samples, set envelope parameters, set the gain, and a few other advanced features like mute groups, low-pass resonance filter, and pitch randomization.

    Instead of creating your own drumkit, you can also use or download existing drumkits using the Section7.

    8.1.Concepts

    The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a note, the sample is simply played back at the right time. There's a few concepts and terms that you should understand when you are putting together a drumkit. (See Glossary for more detailed explanations.)

    Sampling Synthesizer Terms

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds long.

    Gain

    Volume adjustment.

    Velocity

    How hard you hit a note.

    ADSR Envelope Generator

    An Attack/Decay/Sustain/Release envelope generator. After you trigger a note, Hydrogen will attack the note by increasing its volume from 0 to the full velocity of the note. After reaching full velocity, it will decay the note by lowering the volume until it reaches the sustain level. When the note is released, Hydrogen reduces the volume from the sustain level back down to 0.

    Attack

    The amount of time to go from 0 to full velocity.

    Decay

    The amount of time to go from full velocity to the sustain volume.

    Sustain

    The level (how loud) to hold the note between the sustain and the release. It is a percentage of the velocity. It does not depend on time.

    Release

    The amount of time to go from the sustain volume back down to 0.

    Typical samples that are used in Hydrogen are: the sound of a single drum hit, the sound of a single cymbal hit, the sound of a single cowbell hit. Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen will play whatever sound you have loaded. So, to put together a drum kit you need to gather short recordings of the bass drum, each tom, each cymbal, the high hat open, the high hat closed, the snare drum (snare on), the snare drum (snare off), rim shots, etc.

    However, there are no rules about what a sample can be. It's not uncommon to use Hydrogen to trigger non-drum sounds like: audio clips of people talking, a clip from a song, sound effects, audio clips from movies, and famous people speaking. Be creative!

    8.2.Creating a New Drumkit

    To start a brand new drum kit, select InstrumentsClear All . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select Delete Instrument. To add more instruments, select InstrumentsAdd instrument .

    Select an instrument to start editing it. This is done by left-clicking on the name of the instrument in the instrument list (at the left). You will notice that the name of the instrument in the Instrument Editor matches the one that you clicked.

    After you have your drum kit working the way you want, select InstrumentsSave library . It will ask you for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace.

    Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits).

    To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select InstrumentsExport library from the menu. Select the drum kit that you wish to export, and give it a file name to save it to.

    8.3.Creating an Instrument and Layers

    For each instrument in a drum kit, you can load several samples and set different synthesizer parameters. This section will step you through how to create a new instrument and load the samples.

    To begin creating an instrument, select InstrumentsAdd instrument. This will give you a blank instrument to start from.

    Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides several in the data/drumkits directory.

    In the instrument editor, click on Layers. You can layer several samples into the instrument. Which one is played depends on the velocity of the incoming note. Click Load Layer and point the Audio File Browser to your sample. Note that the Audio File Browser will allow you to preview the sample before you load it. It will also allow you to load more than one sample at a time. But for now, only load one.

    After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To load a second sample, click the slot just below it, and then click Load Layer to bring in another sample.

    After bringing in both samples, you'll probably notice that only the first sample is being played whenever you trigger the instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light blue rectangles and you see that you get a left-right drag cursor. Now drag the sample to the left or right (like a curtain). You will now see Layer 2 appear.

    The velocity setting for the layer is 0-velocity on the left, and full velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)

    Now, in the pattern area, set up a simple pattern that plays this instrument. Adjust the velocity settings on each note so that you can get the different samples to sound. Now set the pattern to loop and notice how your different samples are getting triggered. (To learn about editing a pattern, see Section5)

    For each layer, you can set the Gain and the Pitch. The pitch also has a Fine adjustment.

    Use the Gain adjustment to control how loud the sample will play. This is necessary because it's extremely difficult to get a set of samples that all sound at about the same volume. By adjusting here, the samples that were recorded too quietly can be turned up to match your loud samples (that had to be turned down).

    Avertissement

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    The pitch of the sample can be modified with the pitch controls. The Pitch knob adjust the pitch in musical half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts the pitch 50 cents. (One half-step is 100 cents.)

    Note

    The pitch is adjusted by playing the sample back faster or slower. This is called the Dopplar Effect. So, if you have a 1-second sample that you turn down -12 (1 octave), you sample will only last for .5-seconds.

    8.4.Instrument Parameters

    In the instrument editor, click on the General button. Here you can adjust several parameters that are for the whole instrument (not for each layer). The parameters that you can adjust are:

    • Envelope parameters: Attack, Decay, Sustain, Release. (See Envelope Generator)

    • Gain: The overall volume of the instrument.

    • Mute Group: Which mute group this instrument is a member of (see Mute Group).

    • Filter Parameters: Bypass, Cutoff, Resonance.

    • Random Pitch

    It's important that you understand Section8.1 in order to continue on.

    8.4.1.Envelope Parameters

    When the instrument is triggered, its volume is run through an ADSR Envelope. The parameters operate as follows:

    • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. [1]

    • Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter.[1]

    • Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity.

    • Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available.[1]

    If the sample is shorter than the times that you specify, the sample will end, regardless of which phase of the ADSR it is in. If the note is sustained, it does not draw out the note while you are holding it. It only holds the gain (volume) parameter during that time.

    8.4.2.Gain and Mute Group

    The gain sets the overall volume for the sample. This gain is applied after the gain that you set for the layer, and before the gain that is set for the mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is set higher, the samples will be amplified.

    Avertissement

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    Hydrogen provides more mute groups than you know what to do with (over 256). A mute group is a grouping of instruments that are mutually exclusive — only one instrument may be playing at any time. If one is playing and another instrument in the group is triggered, it will immediately silence (mute) and start playing the other instrument. This is useful, especially, for instruments like hi-hats where the open sound and the closed sound are different instruments.

    If the mute group is set to Off, then the instrument is not part of any mute grouping. If the mute group is set to any number, then that is the group that the instrument is a part of. To set other instruments into the same grouping, set their mute group parameter to the same number. (For example, to group all the high-hat instruments, you can set all their mute group parameters to 1. To have a snare drum mute group, set their mute group parameters to 2.)

    8.4.3.Filter and Random Pitch

    The filter is a low-pass resonance filter. If you don't wish to use is, click the BYPass button so that it's red. If it's not red, then the filter is active. The cutoff parameter adjusts the cutoff frequency for the filter. The resonance parameter adjusts how much to resonate the cutoff frequency. If the resonance is set to 0, then the filter is just a simple low-pass filter.

    Note

    The cutoff frequency of the filter varies with the sample rate of your audio card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample rate.

    The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound more like a real drummer.

    8.5.Tips on Editing Instruments

    With all of the different parameters available to tweak, it can be difficult to set up something that sounds nice when you're done. Here's a few tips on setting up an instrument:

    Turn down the gain. Every time you have a gain knob (i.e. an amplifier), this is called a gain stage. With every gain stage you have, it's easy to overdrive your signal — which means the signal gets distorted by clipping. In addition, if you have two samples that, by themselves, peg your meters — what do you think happens when you combine them? That's right, you overdrive the signal again.

    If things sound bad and distorted, start by turning down the gain setting on the layer... especially if it's larger than 1.0. Then turn down the instrument gain. Then any gain on a LADSPA effect. Then the fader on the mixer. Then the master output fader.

    Test samples at full velocity. Your sample will be played louder if the velocity is higher. So, if you set everything to sound nice and full with velocity at 0.7, what will happen when you get a full velocity of 1.0? (Hint: clipping.)

    Try to use samples that are -6 dB max. Visually, this means samples that peak at only 1/2 of full scale. Otherwise, turn your layer gain to about .5.

    Remove all DC offsets from the sample. In a sample editor, there is usually a line down the center of your sample's waveform. This is the zero-line. The beginning of your sample should be on this line. The end of your sample should also be on this line. However, if your signal is a little above or a little below this line, you will hear a click at the beginning and the end of your sample whenever it is played. If your sample editor doesn't provide any tools to fix a DC Offset problem, you can eliminate the noise by putting a slight fade-in/out at the ends of your sample.

    The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the attack and delay — the sample will stop playing at the end.

    Things change with the sample rate. If you have a really nice setup with all your parameters painstakenly tweaked... things will change if you change the sample rate of your audio card. Many of Hydrogens internal settings and parameters are done based on how many samples go by, and not on how many seconds go by. The sort of things that change are: anything time-base (like attack and release) and anything frequency based (like the cutoff frequency).

    9.Les plug-ins LADSPA

    Hydrogen can also add effects to sounds using any LADSPA plugin library. You need to have installed the LADSPA sources (available from http://www.ladspa.org) and while this will give a rough idea of how it works you should really have a taste of the real thing installing one or more plugin libraries, it's as simple as a scons && scons install. Here are a few places to download plugin libraries:

    Plugins Kill

    A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others.

    Once you have installed a few plugins open a song you'd like add an effect to and select an instrument that has a few beats in the pattern. In the Mixer click on and select one of the four available effect line Click on the Edit button ( ), than on Select the FX: this will bring up another window (Figure2.7) that lets you choose an effect amongst those installed, they are alphabetically sorted and categorized. Once you're done, adjust the level from the mixer and start playing. Each round knob in the FX part controls the level of its effect. If you want to quickly enable/disable the effect click the Bypass ( ) button.

    Figure2.7.Select an Effect

    Select an Effect



    [1] The attack, decay, and release parameters are all set by the number of audio samples. This means that the time changes depending on the sample rate of your sound card. The max time for each of them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz).

    Chapitre3.Crer un nouveau morceau

    1.Mode "Morceau" contre mode "Motif"

    This is just a quick-and-dirty walkthrough to Hydrogen. Refer to the tutorial for a more detailed overview.

    Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to Section3 for the buttons to activate). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern untill it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns, to create the structure of the song.

    2.Un nouveau motif

    We'll start from an empty song with an empty pattern, as created by default: "pattern" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor (Figure3.1) simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!

    Figure3.1.The Pattern Editor

    The Pattern Editor

    3.Un nouveau morceau

    Once patterns are created (Figure3.2), we can copy/paste/delete them simply dragging with the mouse (activate the select mode for the Song Editor and keep pressed left mouse button to select those you want to move or copy).

    Figure3.2.Inserting Notes in a Pattern

    Inserting Notes in a Pattern

    4.Utiliser la table de mixage

    Il est toujours possible de se servit de la table de mixage, mme lors de la cration ou de la lecture de motifs.

    The Mixer frame (Figure3.3) is made of 32 independent tracks, each of these is binded to an instrument, plus a "Master Output" line to adjust general output volume and a "FX" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in Figure3.3 you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter.

    Figure3.3.The Mixer

    The Mixer

    Chapitre4.Shortcut lists

    • [CTRL + N] = New Project

    • [CTRL + O] = Ouvrir un morceau

    • [CTRL + D] = Open Demo

    • [CTRL + S] = Enregistrer un morceau

    • [CTRL + SHIFT + S] = Save File as

    • [CTRL + P] = Export Pattern as

    • [CTRL + M] = Export MIDI file

    • [CTRL + E] = Export Song

    • [CTRL + Q] = Quit Hydrogen

    • [ALT + B] = Show Director window

    • [ALT + M] = Show Mixer window

    • [ALT + I] = Show Instrument rack

    • [ALT + P] = Show Preferences window

    • [CTRL + ?] = Show manual

    • [Backspace] = Relancer le morceau (ou motif) depuis le dbut.

    • [spacebar] = Play / Pause

    • [,] (comma key) = Tap tempo (beatcounter)

    Glossary

    This is a glossary of general terms encountered when using Hydrogen, synthesizers, drums, or samplers. The definitions in the text are simplified, but the definitions here are more general and have more explanation. For example, the text of the manual would have you believe that an ADSR is the only kind of envelope generator, and could only ever control the volume. While it's simple for new users, it's not quite right.

    ADSR

    A type of envelope generator that allows you to control the Attack, Decay, Sustain, and Release parameters. Generally, the parameters are proportional to the velocity.

    In Hydrogen, the ADSR envelope generator only controls the volume (attenuation).

    Read more about this in the Wikipedia Article ADSR Envelope

    Voir aussi Envelope Generator, Attack, Decay, Sustain, Release.

    Attack

    This is the first phase of an ADSR envelope, and is the amount of time to turn the parameter up from 0 to full velocity after triggering the note.

    Voir aussi ADSR.

    Attenuation

    In filters and mixers, this the amount that a signal is reduced (volume).

    Voir aussi Roll-off.

    Band-Pass Filter

    A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter.

    Voir aussi Filter, High-Pass Filter, Low-Pass Filter.

    Clipping

    A phenomenon that happens to a signal when the signal is too large for whatever is receiving it. The peaks of the signal (which are normally smooth curves) get cut off straight at the max volume (clipped). This distorts the sound and is usually undesirable.

    An example of clipping is when you play music louder than your speaker can handle. Parts of the music sound harsh and fuzzy.

    Cutoff Frequency

    On high-pass and low-pass filters, this is the frequency that divides between those that pass, and those that are attenuated (silenced). In a high-pass resonance filter, or a low-pass resonance filter, the cutoff is also the frequency zone that gets boosted.

    For example, if you have a low-pass filter and you set the cutoff frequency high (i.e. 20kHz)... the filter will not affect the sound. All the audible frequencies will pass through undisturbed. As you lower the cutoff frequency to something like 40 Hz (the low string on a bass guitar), it sounds like someone is putting a blanket over the speaker. The higher frequencies are being attenuated above 30 Hz.

    Voir aussi Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Decay

    After reaching full velocity from the attack, this is the amount of time to turn the parameter down from full velocity to the sustain level.

    Voir aussi ADSR.

    Envelope Generator

    A way to control (change) a parameter over time as a response to triggering, holding, and releasing a note.

    Did your eyes just glaze over? Let's try again:

    Imagine that you're playing a note on the keyboard and you have your other hand on a knob (volume, filter cutoff, etc.). As you play the note, you twist the knob (often up, then down... or down, then up). You do the same thing on each note. That's what an envelope generator does. See also ADSR

    Fader

    A slider control used to adjust the attenuation (volume) in a mixer. Faders always have an "audio" taper, which means that the attenuation amount changes on an exponential scale.

    Filter

    A device that changes a sound by attenuating specific frequencies. A tone knob is an example of a simple, low-pass filter.

    Voir aussi Band-Pass Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Gain

    In an amplifier, this adjust how much (or how little) a signal is amplified (volume). A higher gain value is a louder signal.

    High-Pass Filter

    A filter that attenuates (silences) low frequencies, but allows high frequencies to pass through.

    Voir aussi Filter, Cutoff Frequency.

    Instrument

    In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, or a tom).

    Layer

    In an instrument you can load several different samples (each one called a layer), and have a different sample play depending on the velocity of the note. Only one sample at a time will play.

    Suppose you have a sample of a floor tom being struck softly. If you simply play the sample louder — it will not sound the same as a real tom that has been struck very hard. If you wish to mimic this in your instrument, you can load one sample for soft playing, and a different sample for loud playing.

    Voir aussi Instrument.

    Low-Pass Filter

    A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through.

    Voir aussi Filter, Cutoff Frequency.

    Mute

    To make no noise. A setting on an instrument that prevents any audio output.

    Mute Group

    A group of instruments (samples) that should mute (stop playing) immediately after another instrument in the group is triggered.

    This is typically used in hi-hats, where there's a different instrument (sample) for when the hi-hat is open or closed. With a real hi-hat, the sound of the open hi-hat will stop as soon as you close it. However, if you use two samples — the open sound will continue even after you have triggered the closed sound. By placing both instruments in the same mute group (group #1, for example)... triggering closed sound will immediately stop the open sound (and vice versa).

    Octave

    A span of frequencies where the top-most frequency is exactly twice the frequency of the bottom frequency.

    For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they sound like the same distance.

    Release

    After the note is released, this is the amount of time to reduce the parameter from the sustain level to 0.

    Voir aussi ADSR.

    Resonance

    When referring to a resonance filter, this is the parameter that determines how much of a boost (gain) to give the frequencies at the cutoff.

    Voir aussi Resonance Filter.

    Resonance Filter

    A filter that gives a large boost to a very narrow range of frequencies. Typically it will be part of a high-pass or a low-pass filter, where the boosted frequencies are centered on the cut-off frequency.

    Voir aussi Filter, Cutoff Frequency, Resonance.

    Roll-off

    This is the amount that frequencies are attenuated (suppressed) as the frequency changes (typically measured in dB/octave).

    For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency.

    Voir aussi Attenuation, Filter.

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds long.

    Sustain

    The level to hold the parameter after finishing the decay time. This level will be maintained until the not is released.

    Voir aussi ADSR.

    Velocity

    How hard you hit a note.

    MIDI devices are required to send this information along with the note. Synthesizers use this information to adjust several parameters on the sample (typically the volume). In Hydrogen, it is only used to adjust how loud the sample is played back.

    hydrogen-0.9.6-beta3/data/doc/manual_fr.po000066400000000000000000004300561211146647700203440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2011-01-18 22:03+0000\n" "PO-Revision-Date: 2011-02-21 23:28+0100\n" "Last-Translator: Humbert Olivier \n" "Language-Team: FR \n" "MIME-Version: 1.0\n" "Content-Type: application/x-xml2pot; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Language: fr_FR\n" #. Tag: title #: manual.docbook:7 #, no-c-format msgid "Hydrogen Manual" msgstr "Manuel d'Hydrogen" #. Tag: author #: manual.docbook:9 #, no-c-format msgid "Antonio Piraino" msgstr "Antonio Piraino" #. Tag: author #: manual.docbook:13 #, no-c-format msgid "Alessandro Cominu" msgstr "Alessandro Cominu" #. Tag: author #: manual.docbook:17 #, no-c-format msgid "Thijs van Severen" msgstr "Thijs van Severen" #. Tag: author #: manual.docbook:21 #, no-c-format msgid "Sebastian Moors" msgstr "Sebastian Moors" #. Tag: para #: manual.docbook:32 #, no-c-format msgid "" "Hydrogen is a software synthesizer which can be used alone, emulating a drum " "machine based on patterns, or via an external MIDI keyboard/sequencer " "software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter " "is still experimental, so ask in the developers mailing list for further " "details." msgstr "" "Hydrogen est un synthétiseur logiciel qui peut être utilisé seul, émulant " "une boite à rythme basée sur des motifs, ou via un clavier MIDI externe / " "séquenceur logiciel. Hydrogen se compile sous Linux/x86, bien que ce dernier " "soit toujours expérimental, demandez donc plus de détails à la liste de " "développement." #. Tag: title #: manual.docbook:47 #, no-c-format msgid "Introduction" msgstr "Introduction" #. Tag: title #: manual.docbook:50 #, no-c-format msgid "Download" msgstr "Téléchargement" #. Tag: para #: manual.docbook:52 #, no-c-format msgid "" "You can download Hydrogen from http://www.hydrogen-music.org. " "On the 'Downloads' page you can find several binaries (installers) for " "Linux, Mac and Windows. (note that some versions may not be available for " "Windows and Mac)" msgstr "" "Vous pouvez télécharger Hydrogen depuis http://www.hydrogen-music.org. " "Dans la page 'Download', vous pouvez trouver plusieurs binaires " "(installateurs) pour Linux, Mac et Windows. (Notez que certaines versions ne " "sont pas disponible pour Windows et Mac)" #. Tag: para #: manual.docbook:58 #, no-c-format msgid "" "If you want to compile Hydrogen yourself (see ), you can download the latest source files " "directly from our subversion server with: $ " "svn co " "http://svn.assembla.com/svn/hydrogen/trunk A certain " "release can be fetched with:" msgstr "" "Si vous voulez compiler Hydrogen vous-même (voir ), vous pouvez télécharger les derniers " "fichiers source directement depuis notre serveur subversion avec : " "$ svn co " "http://svn.assembla.com/svn/hydrogen/trunk. Une version " "particulière peut être attrapée avec :" #. Tag: screen #: manual.docbook:66 #, no-c-format msgid "" "$ svn co " "http://svn.assembla.com/svn/hydrogen/tags/0.9.5" msgstr "" "$ svn co " "http://svn.assembla.com/svn/hydrogen/tags/0.9.5" #. Tag: para #: manual.docbook:69 #, no-c-format msgid "Compiling Hydrogen depends on the following libraries:" msgstr "La compilation d'Hydrogen dépend des bibliothèques suivantes :" #. Tag: para #: manual.docbook:73 #, no-c-format msgid "" "qt (>= 4.0) at http://www.trolltech.com" msgstr "" "qt (>= 4.0) à http://www.trolltech.com" #. Tag: para #: manual.docbook:76 #, no-c-format msgid "" "libsndfile at http://www.mega-nerd.com/libsndfile/" msgstr "" "libsndfile à http://www.mega-nerd.com/libsndfile/" #. Tag: para #: manual.docbook:79 #, no-c-format msgid "" "ALSA (>= 1.x) at http://www.alsa-project.com " "(only if you wish to use ALSA as audio driver)" msgstr "" "ALSA (>= 1.x) à http://www.alsa-project.com " "(seulement si vous voulez utiliser ALSA comme pilote audio)" #. Tag: para #: manual.docbook:83 #, no-c-format msgid "" "Jack Audio Connection Kit (>= 0.80) at http://jackaudio.org/ (only if you " "wish to use Jack as audio driver)" msgstr "" "Jack Audio Connection Kit (>= 0.80) à http://jackaudio.org/ (seulement si " "vous voulez utiliser JACK comme pilote audio)" #. Tag: para #: manual.docbook:88 #, no-c-format msgid "" "PortAudio at http://www.portaudio.com (only if " "you wish to use PortAudio as audio driver)" msgstr "" "PortAudio à http://www.portaudio.com (seulement " "si vous voulez utiliser PortAudio comme pilote audio)" #. Tag: para #: manual.docbook:92 #, no-c-format msgid "" "Flac at http://flac.sf.net (only " "if you wish to use flac samples)" msgstr "" "Flac à http://flac.sf.net " "(seulement si vous voulez utiliser des échantillons flac)" #. Tag: para #: manual.docbook:96 #, no-c-format msgid "" "ladspa at http://ladspa.org (only " "if you wish to use ladspa effects)" msgstr "" "ladspa à http://ladspa.org " "(seulement si vous voulez utiliser des effets ladspa)" #. Tag: para #: manual.docbook:100 #, no-c-format msgid "" "liblrdf at http://liblrdf.sf.net (only if you " "wish to use lrdf to categorise effects)" msgstr "" "liblrdf à http://liblrdf.sf.net " "(seulement si vous voulez utiliser lrdf pour catégoriser les effets)" #. Tag: para #: manual.docbook:103 #, no-c-format msgid "" "lash at http://lash.nongnu.org " "(only if you wish to use lash)" msgstr "" "lash à http://lash.nongnu.org " "(seulement si vous voulez utiliser lash)" #. Tag: para #: manual.docbook:108 #, no-c-format msgid "" "Please install them with your distribution's package manager. If you're " "running a debian-based system, you can install the libraries with:" msgstr "" "Veuillez les installer avec le gestionnaire de paquet de votre distribution. " "Si vous exploitez un système basé sur Debian, vous pouvez installer les " "bibliothèques avec :" #. Tag: screen #: manual.docbook:112 #, no-c-format msgid "" "$ apt-get install libqt4-dev g++ libasound2-dev " "\\\n" " libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev " "\\\n" " liblash-dev libportaudio-dev libportmidi-dev " msgstr "" "$ apt-get install libqt4-dev g++ libasound2-dev " "\\\n" " libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev " "\\\n" " liblash-dev libportaudio-dev libportmidi-dev " #. Tag: title #: manual.docbook:119 #, no-c-format msgid "Build" msgstr "Construction" #. Tag: para #: manual.docbook:121 #, no-c-format msgid "" "Depending on the branch you are compiling you will need to use Scons or " "Cmake. Check the INSTALL.txt and the README.txt files for more info (located " "in the top level dir once you downloaded the sources)." msgstr "" "Suivant la branche que vous allez compiler, vous aurez besoin d'utiliser " "Scons ou Cmake. Vérifiez les fichiers INSTALL.txt et README.txt pour plus " "d'informations (placés dans le répertoire-racine après avoir téléchargé les " "sources)." #. Tag: title #: manual.docbook:124 #, no-c-format msgid "Using scons" msgstr "Utilisation de scons" #. Tag: para #: manual.docbook:126 #, no-c-format msgid "" "Decompress the tarball or go to the directory where the subversion copy was " "checked out:" msgstr "" "Décompresser le tarball ou allez au répertoire où la copie subversion a été " "vérifiée :" #. Tag: screen #: manual.docbook:129 #, no-c-format msgid "" "$ cd hydrogen-*\n" " $ scons\n" " $ su -c \"scons install\"" msgstr "" "$ cd hydrogen-*\n" " $ scons\n" " $ su -c \"scons install\"" #. Tag: para #: manual.docbook:131 #, no-c-format msgid "Before compiling, check for additional options with:" msgstr "Avant la compialtion, vérifier les options additionnelles avec :" #. Tag: screen #: manual.docbook:133 #, no-c-format msgid "$ scons --help" msgstr "$ scons --help" #. Tag: para #: manual.docbook:135 #, no-c-format msgid "" "If you want to use features which are not enabled by default (for instance " "PortAudio), you can enable them with:" msgstr "" "Si vous voulez utiliser des fonctionnalités qui ne sont pas activées par " "défaut (par exemple PortAudio), vous pouvez les activer avec :" #. Tag: screen #: manual.docbook:138 #, no-c-format msgid "$ scons portaudio=1" msgstr "$ scons portaudio=1" #. Tag: para #: manual.docbook:140 #, no-c-format msgid "" "Namely, if you get some error while running Hydrogen and you want to report " "it remember to configure hydrogen with:" msgstr "" "À savoir que si vous obtenez des erreurs lorsque vous utilisez Hydrogen et " "que vous voulez les rapporter, souvenez-vous de configurer Hydrogen avec : " #. Tag: screen #: manual.docbook:143 #, no-c-format msgid "$ scons debug=1" msgstr "$ scons debug=1" #. Tag: para #: manual.docbook:145 #, no-c-format msgid "To clean up compiled code:" msgstr "Pour nettoyer le code compilé :" #. Tag: screen #: manual.docbook:147 #, no-c-format msgid "$ scons -c" msgstr "$ scons -c" #. Tag: title #: manual.docbook:152 #, no-c-format msgid "Using cmake" msgstr "Utilisation de cmake" #. Tag: para #: manual.docbook:154 #, no-c-format msgid "" "Compiling with cmake can be done easily by using the make_helper script. " "Decompress the tarball or go to the directory where the subversion copy was " "checked out and run the make_helper script without any arguments to display " "the help :" msgstr "" "La compiation avec cmake peut être réalisée facilement en utilsant le script " "make_helper. Décompressez le tarball ou allez au répertoire où la copie " "subversion a été vérifiée et lancer le script make_helper sans aucun argumen " "pour afficher l'aide :" #. Tag: screen #: manual.docbook:157 #, no-c-format msgid "" "$ cd hydrogen-*\n" " $ ./make_helper" msgstr "" "$ cd hydrogen-*\n" " $ ./make_helper" #. Tag: para #: manual.docbook:159 #, no-c-format msgid "The help is now displayed (and is self-explanatory) :" msgstr "L'aide est à présent affichée (et est explicite) :" #. Tag: screen #: manual.docbook:162 #, no-c-format msgid "" "$ used builder : cmake\n" " $ usage ./make_helper [cmds " "list]\n" " $ cmds may be\n" " $ r or rm => all built, temp and " "cache files\n" " $ c or clean => remove cache " "files\n" " $ m or make => launch the build " "process\n" " $ d or doc => build html " "documentation\n" " $ h or help => show the build " "options\n" " $ x or exec => execute " "hydrogen" msgstr "" "$ used builder : cmake\n" " $ usage ./make_helper [cmds " "list]\n" " $ cmds may be\n" " $ r or rm => all built, temp and " "cache files\n" " $ c or clean => remove cache " "files\n" " $ m or make => launch the build " "process\n" " $ d or doc => build html " "documentation\n" " $ h or help => show the build " "options\n" " $ x or exec => execute " "hydrogen" #. Tag: title #: manual.docbook:169 #, no-c-format msgid "Preferences" msgstr "Préférences" #. Tag: para #: manual.docbook:171 #, no-c-format msgid "" "First of all you should make sure that the audio engine is configured " "properly. The preferences dialog can be accessed via the tools menu (tools " "-> preferences)." msgstr "" "En premier lieu, vous devriez être certain que le moteur audio est configuré " "proprement. Le dialogue de préférences peut être accédé via le menu outils " "(Outils -> préférences)." #. Tag: title #: manual.docbook:176 #, no-c-format msgid "The General tab" msgstr "L'onglet Général" #. Tag: para #: manual.docbook:178 #, no-c-format msgid "" "On the \"General\" tab () you " "can choose to automatically reopen the last used song and/or playlist. This " "can save you the trouble of having to reopen the song you are working on " "every time you open Hydrogen. Auto loading the playlist can come in handy " "when you are using Hydrogen live." msgstr "" "Sur l'onglet \"Général\" (), " "vous pouvez choisir de ré-ouvrir automatiquement la dernière chanson ou " "liste-de-lecture utilisée. Ceci peut vous éviter l'embêtement d'avoir à " "ré-ouvrir la chanson sur laquelle vous travaillez à chaque fois que vous " "ouvrez Hydrogen. Le chargement automatique de la liste-de-lecture peut être " "pratique quand vous utilisez Hydrogen en live." #. Tag: para #: manual.docbook:182 #, no-c-format msgid "" "If you want to use Lash to manage your Jack connections you should enable it " "here so Hydrogen allows interaction with Lash." msgstr "" "Si vous voulez utiliser Lash pour gérer vos connexions Jack, vous devriez " "l'activer ici, ainsi Hydrogen permettra une interaction avec Lash." #. Tag: para #: manual.docbook:184 #, no-c-format msgid "" "The Beat Counter drift compensation and start offset allow you to compensate " "for system latency when you are using the Beat Counter function (see )" msgstr "" "La compensation de dérive et la position de départ du compteur de pulsation " "vous permet de compenser la latence du système lorsque vous utilisez la " "fonction Compteur de Pulsation (voir )" #. Tag: para #: manual.docbook:186 #, no-c-format msgid "" "The Max number of bars in a song can be set here (currently limited to 800) " "and if you want to use rubberband for sample time-streching you need to " "enter the path where rubberband is installed on you system here." msgstr "" "Le nombre Maximum de mesures dans un morceau peut être sélectionné ici " "(actuellement limité à 800) et, si vous voulez utilisez rubberband pour " "étirer les échantillons, vous devez entrer ici le chemin où rubberband est " "installé sur votre système." #. Tag: title #: manual.docbook:191 #, no-c-format msgid "The General Tab" msgstr "L'Onglet Général" #. Tag: title #: manual.docbook:203 #, no-c-format msgid "The Audio System tab" msgstr "L'onglet Système Audio" #. Tag: para #: manual.docbook:205 #, no-c-format msgid "" "From the \"Audio System\" tab () it is possible to modify the audio " "driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling " "rate (unless you are using JACK, in this case the audio driver configuration " "should happen before starting the JACK server)." msgstr "" "Depuis l'Onglet \"Système Audio\" (), il est possible de modifier le " "pilote audio utilisé (OSS, Jack, ALSAn PortAudio) avec son tampon et sa " "fréquence d'échantillonnage (sauf si vous utilisez JACK, dans ce cas, la " "configuration du pilote audio doit intervenir avant de démarrer le serveur " "JACK)." #. Tag: para #: manual.docbook:211 #, no-c-format msgid "" "We can set some features of Hydrogen like \"Create per-instrument outputs\" " "this will create 1 output per instrument that you can connect to any other " "Jack enabled application. This can be useful if you want to add effects to a " "single instrument with jack-rack for example. \"Connect to Default Output " "Pair\" connects the output to the default ports: uncheck this if you want to " "connect the JACK output to other ports without having to disconnect them " "first." msgstr "" "Nous pouvons sélectionner certaines fonctionnalités d'Hydrogen comme \"Créer " "une sortie par instrument\", ceci créera 1 sortie par instrument que vous " "pourrez connecter à n'importe quelle autre application compatible JACK. Ceci " "peut être utile si vous voulez ajouter des effets à une seul instrument avec " "Jack-rack par exemple. 'Connecter à la paire de sortie par défaut' connecte " "la sortie aux ports par défaut : désélectionnez-la si vous voulez connecter " "les sorties JACK vers d'autres ports sans avoir à les déconnecter avant." #. Tag: para #: manual.docbook:218 #, no-c-format msgid "" "Also keep an eye on the value of \"Polyphony\": depending on your CPU you " "may want to change the max simultaneous notes in order to prevent hydrogen " "from overrunning the audio driver." msgstr "" "Garder également un oeil sur la valeur de \"Polyphonie\" : suivant votre " "processeur, vous pouvez vouloir changer le nombre maximum de notes " "simultanées afin d'éviter à Hydrogen, des Xruns du pilote audio." #. Tag: title #: manual.docbook:223 #, no-c-format msgid "The Audio System Tab" msgstr "L'Onglet de Système Audio" #. Tag: para #: manual.docbook:231 #, no-c-format msgid "The following drivers are available:" msgstr "Les pilotes audio suivants sont diponibles :" #. Tag: para #: manual.docbook:238 #, no-c-format msgid "" "jackd: The Jack driver is a professional " "audio server which permits very low lag and exchanges with other audio " "software. We strongly recommend using this driver to have the best " "out of Hydrogen. JACK server will start automatically if not " "already running." msgstr "" "jackd : Le pilote Jack est un serveur " "audio professionnel qui permet de très basses latences et des échanges avec " "les autres logiciels audio. Nous recommandons fortement " "l'utilisation de ce pilote pour obtenir le meilleur d'Hydrogen. " "Le serveur JACK démarrera automatiquement s'il n'est pas déjà lancé." #. Tag: para #: manual.docbook:246 #, no-c-format msgid "" "ALSA: the widely adopted Linux standard " "audio drivers" msgstr "" "ALSA : le standard de pilotes audio Linux " "largement adopté" #. Tag: para #: manual.docbook:251 #, no-c-format msgid "" "OSS: The Oss audio driver uses /dev/dsp " "and it's based on the OSS interface which is supported by the vast majority " "of sound cards available for Linux; this said, the use of this audio driver " "blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other " "software. Use it as last resort." msgstr "" "OSS : Le pilote audio OSS utilise " "/dev/dsp et est basé sur l'interface OSS qui est supporté par une vaste " "majorité de cartes-son disponibles pour Linux; ceci dit, l'utilisation de ce " "pilote audio bloque /dev/dsp jusqu'à ce qu'Hydrogen soit fermé, c'est à dire " ": inutilisable par n'importe quel autre logiciel. Utilisez-le en dernier " "recours." #. Tag: para #: manual.docbook:260 #, no-c-format msgid "" "PortAudio: an open-source multi platform " "audio driver" msgstr "" "PortAudio : un pilote audio multi " "plateformes et open-source" #. Tag: para #: manual.docbook:265 #, no-c-format msgid "" "CoreAudio: a driver for Mac OS X " "(experimental)" msgstr "" "CoreAudio : un pilote pour Mac OS X " "(expérimental)" #. Tag: title #: manual.docbook:272 #, no-c-format msgid "The Midi System tab" msgstr "L'onglet Système Midi" #. Tag: para #: manual.docbook:274 #, no-c-format msgid "" "The \"Midi System\" tab () " "contains all MIDI settings. Here you can choose the MIDI driver, input, and " "channel(s) that Hydrogen should respond to. You can also define midi " "bindings: link a midi note/message to an action. To do this simply press the " "red 'REC' button left of the 'binding' action line. A popup will inform you " "that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on " "your midi keyboard (or controller) that you want to link to this action. The " "popup will close and the Event Param value will now show the midi note value " "of the key you pressed. Once this is done you can select an Action from the " "action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) " "also require an Action Param that references the pattern you want to select " "with this midi action." msgstr "" "L'Onglet \"Système MIDI\" () " "contient tous les paramètres MIDI. Ici, vous pouvez choisir le pilote MIDI, " "l'entrée et le(s) canal(aux) au(x)quel(s) Hydrogen devrait répondre. Vous " "pouvez également définir les \"bindings\" MIDI : lier une note/message MIDI " "à une action. Pour faire ceci simplement, presser le bouton rouge " "d'Enregistrement à gauche de la ligne d'action de 'bindings'. Un dialogue " "apparaitrait et cous informera qu'Hydrogen attend votre entrée. " "Appuyer/frapper/tourner-la-cled/le-pad/les-boutons sur votre clavier (ou " "contrôleur) MIDI que vous voulez lier à cette action. Le dialogue se fermera " "et les valeurs d'Événements afficheront maintenant ma vameur de la note MIDI " "de la clef que vous avez pressée. Une fois terminée, vous pouvez " "sélectionner une Action depuis la liste déroulante. Notez que certaines " "actions (comme SELECT_NEXT_PATERN) nécessite également un Paramètre d'Action " "qui référencie le motif que vous voulez sélectionner avec cette action MIDI." #. Tag: title #: manual.docbook:286 #, no-c-format msgid "The MIDI System Tab" msgstr "L'Onglet Système MIDI" #. Tag: title #: manual.docbook:296 #, no-c-format msgid "The Appearance tab" msgstr "L'onglet Apparence" #. Tag: para #: manual.docbook:298 #, no-c-format msgid "" "The \"Appearance\" tab () " "let's you modify Hydrogen look and feel (font settings and interface style). " "Also the VU meters fall-off speed of the Mixer Window can be changed here." msgstr "" "L'Onglet \"Apparence\" () " "vous laisse modifier le look d'Hydrogen (les paramètres de police et le " "style de l'interface). Les temps de chute des indicateurs de la Fenêtre du " "Mixeur peuvent également être modifiés ici." #. Tag: title #: manual.docbook:302 #, no-c-format msgid "The Appearance Tab" msgstr "L'Onglet Apparence" #. Tag: title #: manual.docbook:313 #, no-c-format msgid "The Audio Engine tab (debug only)" msgstr "L'onglet Moteur Audio (débug seulement)" #. Tag: para #: manual.docbook:315 #, no-c-format msgid "" "The \"Audio Engine\" tab () is a window that shows " "various stats about Hydrogen and the audio driver. In case JACK is used, " "buffer and sampling rate should be set before starting Hydrogen (JACK " "automatically starts when an application tries to connect)." msgstr "" "L'onglet \"Moteur Audio\" () est une fenêtre qui affiche " "différentes statistiques à propos d'Hydrogen et du pilote audio. Dans le cas " "où JACK est utilisé, le tampon et le taux d'échantillonnage doivent être " "réglés avant de démarrer Hydrogen (JACK démarre automatiquement lorsque " "l'application essaie de se connecter)." #. Tag: para #: manual.docbook:319 #, no-c-format msgid "" "Note that the Audio Engine tab is only available if Hydrogen was complied " "with debug support." msgstr "" "Notez que l'onglet \"Moteur Audio\" est disponible seulement si Hydrogen a " "été compilé avec le support debug." #. Tag: title #: manual.docbook:322 #, no-c-format msgid "The Audio Engine tab" msgstr "L'onglet Moteur Audio" #. Tag: title #: manual.docbook:343 #, no-c-format msgid "Using Hydrogen" msgstr "Utilisation d'Hydrogen" #. Tag: title #: manual.docbook:347 #, no-c-format msgid "Used Filetypes" msgstr "Utiliser les Types-de-Fichiers" #. Tag: para #: manual.docbook:349 #, no-c-format msgid "Before working with Hydrogen, please familiarize with these filetypes:" msgstr "" "Avant de travailler avec Hydrogen, veuillez vous familiariser avec ces types " "de fichiers :" #. Tag: para #: manual.docbook:354 #, no-c-format msgid "" "*.h2pattern: XML file describing a single " "pattern. Patterns are group of beats and are managed in the pattern editor." msgstr "" "*.h2pattern : fichier XML décrivant un " "motif unique. Les motifs sont des groupes de coups et sont gérés dans " "l'éditeur de motif." #. Tag: para #: manual.docbook:359 #, no-c-format msgid "" "*.h2song: XML file describing the whole " "song (or sequence). Songs are group of patterns with their properties and " "are manager using the song editor" msgstr "" "*.h2song : fichier XML décrivant le " "morceau entier (ou la séquence). Les morceaux sont un groupe de motifs avec " "leurs propriétés et sont gérés en utilisant l'éditeur de morceau" #. Tag: para #: manual.docbook:364 #, no-c-format msgid "" "*.h2playlist: XML file describing a " "playlist. A Playlist is a (ordered) group of songs." msgstr "" "*.h2playlist : fichier XML décrivant une " "liste de lecture. Une liste de lecture est un groupe (ordonné) de morceaux." #. Tag: para #: manual.docbook:368 #, no-c-format msgid "" "*.h2drumkit: a compressed and archived " "folder containing all sound samples composing a drumkit and a description " "XML file. Drumkits are basically group of sound samples." msgstr "" "*.h2drumkit : un dossier compressé et " "archivé contenant tous les échantillons composants un kit de batterie ainsi " "qu'un fichier XML de description. Les Kits de batterie sont basiquement un " "groupe d'échantillons." #. Tag: title #: manual.docbook:379 #, no-c-format msgid "Main menu" msgstr "Menu principal" #. Tag: para #: manual.docbook:381 #, no-c-format msgid "" "Projects: this menu offers file related " "functions." msgstr "" "Projets : ce menu offre des fonctions " "concernant les fichiers." #. Tag: para #: manual.docbook:386 #, no-c-format msgid "New - Create a new song" msgstr "Nouveau - Crée un nouveau morceau" #. Tag: para #: manual.docbook:389 #, no-c-format msgid "" "Show Info - Set general properties of the song such as " "name, author, license and generic notes" msgstr "" "Propriétés - Paramétrer les propriétés générales du " "morceau comme le nom, l'autheur, licence et des notes générales" #. Tag: para #: manual.docbook:393 #, no-c-format msgid "Open - Open a song" msgstr "Ouvrir - Ouvrir un morceau" #. Tag: para #: manual.docbook:396 #, no-c-format msgid "" "Open Demo - Open a demo song (demo songs are stored in " "$INSTALLPATH/share/hydrogen/data/demo_songs)" msgstr "" "Ouvrir une Démo - Ouvrir un morceau de démo (les " "morceaux de démo sont stockés dans " "$INSTALLPATH/share/hydrogen/data/demo_songs)" #. Tag: para #: manual.docbook:401 #, no-c-format msgid "Open recent - Open a menu showing last used songs" msgstr "" "Ouvrir un fichier récent - Ouvrir un menu montrant les " "derniers morceaux utilisés" #. Tag: para #: manual.docbook:405 #, no-c-format msgid "Save - Save changes to current song" msgstr "" "Enregistrer - Enregistrer les changements du morceau " "actuel" #. Tag: para #: manual.docbook:408 #, no-c-format msgid "" "Save as - Save current song specifying a name (default " "path: $HOME/.hydrogen/data/songs)" msgstr "" "Enregistrer sous - Enregistrer le morceau actuel en " "spécifiant un nom (chemin par défaut " ":$HOME/.hydrogen/data/songs)" #. Tag: para #: manual.docbook:413 #, no-c-format msgid "" "Open pattern - Open a saved pattern belonging to the " "current drumkit" msgstr "" "Ouvrir un motif - Ouvrir un motif enregistré " "appartenant au kit de batterie courant" #. Tag: para #: manual.docbook:417 #, no-c-format msgid "" "Export pattern as - Saves a pattern. It will be stored " "in $HOME/.hydrogen/data/patterns/drumkit_name" msgstr "" "Exporter le motif sous - Enregistrer le motif. Il sera " "enregistré dans " "$HOME/.hydrogen/data/patterns/drumkit_name" #. Tag: para #: manual.docbook:422 #, no-c-format msgid "" "Export MIDI file - Export current song in MIDI format" msgstr "" "Exporter le morceau en fichier MIDI - Exporter le " "morceau actuel dans un format MIDI" #. Tag: para #: manual.docbook:426 #, no-c-format msgid "Export song - Export current song in WAV format" msgstr "" "Exporter le morceau - Exporter le morceau courant en " "format WAV" #. Tag: para #: manual.docbook:430 #, no-c-format msgid "Quit - Quit Hydrogen" msgstr "Quitter - Quitter Hydrogen" #. Tag: para #: manual.docbook:434 #, no-c-format msgid "" "Instruments: this menu offers instruments " "and drumkit (sound libraries) functions." msgstr "" "Instruments: ce menu offre des fonctions " "d'instruments et des kit de batterie (bibliothèques de sons)." #. Tag: para #: manual.docbook:439 #, no-c-format msgid "" "Add instrument - Add a new instrument to your current " "drumkit" msgstr "" "Ajouter un instrument - Ajouter un nouvel instrument à " "votre Kit de Batterie courant" #. Tag: para #: manual.docbook:443 #, no-c-format msgid "" "Clear all - Delete all instruments from the current " "drumkit" msgstr "" "Effacer tout - Effacer tous les intruments du kit de " "batterie courant" #. Tag: para #: manual.docbook:447 #, no-c-format msgid "" "Save library - Saves all instruments settings (and " "their sound samples) in " "$HOME/.hydrogen/data/library_name" msgstr "" "Enregistrer la bibliothèque - Enregistre tous les " "paramètres des instruments (et leurs échantillons sonores) dans " "$HOME/.hydrogen/data/library_name" #. Tag: para #: manual.docbook:452 #, no-c-format msgid "" "Export library - Compress all instruments samples and " "settings in a drumkit in " "$HOME/.hydrogen/data/library_name" msgstr "" "Exporter la bibliothèque - Compresse tous les " "échantillons d'instruments et les paramètres dans un kit de batterie dans in " "$HOME/.hydrogen/data/library_name" #. Tag: para #: manual.docbook:457 #, no-c-format msgid "" "Import library - Imports another drumkit from the local " "filesystem or download it from a remote location through an XML feed. The " "XML file that should be provided is NOT " "RSS compliant (see Hydrogen " "website for an example). To load another drumkit in your current " "working session of Hydrogen, read ." msgstr "" "Importer la bibliothèque - Importe un autre kit de " "batterie depuis le système de fichier local ou le télécharge depuis un " "emplacement distant à travers un flux XML. Le fichier XML qui peut être " "fourni N'EST PAS compatible RSS (voir " "Site web " "d'Hydrogen pour un exemple). Pour charger un autre kit de batterie " "dans votre séance actuelle de travail d'Hydrogen, lisez ." #. Tag: para #: manual.docbook:468 #, no-c-format msgid "" "Tools: opens the mixer, the director, the " "playlist editor, the instrument rack and the general preferences window." msgstr "" "Outils: ouvre le mixeur, le directeur, " "l'éditeur de liste de lecture, le rack d'instrument et la fenêtre des " "préférences générales." #. Tag: para #: manual.docbook:474 #, no-c-format msgid "Playlist editor - A tool to manage playlists." msgstr "" "Éditeur de Liste de Lecture - Un outil pour gérer les " "listes de lecture." #. Tag: para #: manual.docbook:478 #, no-c-format msgid "Director - Open the director window." msgstr "Directeur - Ouvre la fenêtre du directeur." #. Tag: para #: manual.docbook:481 #, no-c-format msgid "Mixer - Open the mixer window." msgstr "" "Table de mixage - Ouvre la fenêtre de la table de " "mixage." #. Tag: para #: manual.docbook:484 #, no-c-format msgid "Instrument rack - Open the instrument rack panel." msgstr "Instrument - Ouvre le panneau d'instrument." #. Tag: para #: manual.docbook:488 #, no-c-format msgid "" "Preferences - Open the main preferences window. Read " " on how to configure Hydrogen." msgstr "" "Préférences - Ouvre la fenre des préférences " "principales. Lisez comment configurer " "Hydrogen." #. Tag: para #: manual.docbook:494 #, no-c-format msgid "" "Debug: tools mainly for debugging and " "monitoring Hydrogen (only available when compiled with debug support !)." msgstr "" "Debug: Outils principalement pour " "débugger et monitorer Hydrogen (seulement disponible quand compilé avec le " "support du debug !)." #. Tag: para #: manual.docbook:500 #, no-c-format msgid "" "Show audio engine info - Open a monitor with various " "stats" msgstr "" "Montrer les onformations du moteur audio - Ouvre un " "moniteur avec différentes statistiques" #. Tag: para #: manual.docbook:505 #, no-c-format msgid "debug action - Insert debug commands." msgstr "" "debug action - Insère des commandes de débuggage." # -> compiler avec le support débug et voir ce que ça fait vraiment #. Tag: para #: manual.docbook:509 #, fuzzy, no-c-format msgid "" "Print Objects - Print on stdout current objects map." msgstr "" "Print Objects - Print on stdout current objects map." #. Tag: emphasis #: manual.docbook:514 #, no-c-format msgid "Info" msgstr "Info" #. Tag: para #: manual.docbook:518 #, no-c-format msgid "User manual - Open a window with this manual :)" msgstr "" "Manuel Utilisateur - Ouvre ue fenêtre avec ce manuel :)" #. Tag: para #: manual.docbook:522 #, no-c-format msgid "" "About - The usual window with license information, " "acknowledgements, etc." msgstr "" "À propos - La fenêtre habituelle avec l'information de " "licence, les remerciements, etc." #. Tag: title #: manual.docbook:531 #, no-c-format msgid "The main toolbar" msgstr "La barre d'outil principale" #. Tag: para #: manual.docbook:533 #, no-c-format msgid "" "Before analyzing the two main frames of Hydrogen, let's take a quick look at " "the main toolbar and its components:" msgstr "" "Avant d'analyser les deux parties principales d'Hydrogen, jettons un coup " "d'oeil rapide à la barre d'outil principale et à ses composants :" #. Tag: para #: manual.docbook:538 #, no-c-format msgid "Pilot the song using the start, stop, pause, etc. buttons" msgstr "" "Piloter les morceaux par l'utilisation des boutons Jouer, Arrêter, Pause, " "etc." #. Tag: para #: manual.docbook:541 #, no-c-format msgid "" "Choose between \"pattern\" or \"song\" mode: in \"pattern\" mode only the " "currently selected pattern will play, while in \"song\" mode all patterns " "inserted will be played." msgstr "" "Choisir entre les modes \"pattern\" (NdT : motif) ou \"song\" (NdT : " "morceau) : dans le mode \"pattern\", seule le motif actuellement séléctionné " "sera joué, alors que dans le mode \"song\", tous mes motifs insérés seront " "joués." #. Tag: para #: manual.docbook:546 #, no-c-format msgid "" "An advanced tap tempo function: choose note length and how many notes to " "wait before recalculating BPM, then click the comma key repeatedly until the " "'R' letter will appear and the BPM will be updated. (see )" msgstr "" "Une fonction \"tap tempo\" avancée : choisissez la durée de la note et " "combien de notes il faut attendre avant de recalculer le BPM, puis cliquez " "sur la touche 'virgule' de façon répétée jusqu'à ce que la lettre R " "apparaissent et que le BPM soit mise à jour. (voir )" #. Tag: para #: manual.docbook:552 #, no-c-format msgid "Manually set BPM" msgstr "Paramétrer manuellement le BPM" #. Tag: para #: manual.docbook:555 #, no-c-format msgid "Manage JACK transport" msgstr "Gérer le transport JACK" #. Tag: para #: manual.docbook:558 #, no-c-format msgid "Open the mixer and the instrument rack panels" msgstr "Ouvrir les panneaux de mixeur et d'instrument" #. Tag: title #: manual.docbook:563 #, no-c-format msgid "The Main Toolbar" msgstr "La Barre d'Outils Principale" #. Tag: para #: manual.docbook:578 #, no-c-format msgid "" "Main controls to start [Hotkey = " "Spacebar], stop, record, fast forward, rewind, loop a song or a " "pattern." msgstr "" "Les contrôles principaux pour jouer [Raccourci = " "Barre d'Espace], arrêter, enregistrer, avancer, revenir en " "arrière, boucler un morceau ou un motif." #. Tag: para #: manual.docbook:588 #, no-c-format msgid "" "Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the " "complete song. This is the sequence of patterns you have created in the Song " "Editor (see ). When Pattern mode is " "selected Hydrogen will play the pattern that is currently selected, and thus " "displayed in the Pattern Editor (see )." msgstr "" "Paramétrer le Mode Pattern/Song (NdT : Motif/Morceau). Lorsque le mode Song " "est séléctionné, Hydrogen jouera le morceau entier. Ceci est la séquence de " "motifs que vous avez créée dans l'Éditeur de Morceau (voir ). Lorsque le mode Pattern est sélectionné, " "Hydrogen jouera le motif qui est actuellement sélectionné, et donc affiché " "dans l'Éditeur de Motif (voir )." #. Tag: para #: manual.docbook:600 #, no-c-format msgid "" "Set measure type and Beat Counter (see )." msgstr "" "Paramétrer le type de mesure et le Compteur de Tempo (voir )." #. Tag: para #: manual.docbook:610 #, no-c-format msgid "" "Set speed of playing (range: 30-400 bpm) [Hotkey = " "mouse wheel] and button to enable/disable metronome" msgstr "" "Paramétrer la vitesse de lecture (plage : 30-400 bpm) [Raccourci = molette de la souris] et le bouton " "pour activer/désactiver le métronome" #. Tag: para #: manual.docbook:620 #, no-c-format msgid "" "Shows CPU load and MIDI events. The CPU bargraph gives you an indication of " "the CPU load. The MIDI led lights up every time Hydrogen receives a midi " "message." msgstr "" "Afficher la charge processeur et les événement MIDI. La barre graphique du " "processeur vous donne des indications sur la charge du processeur. La " "lumière MIDI s'allume à chaque fois qu'Hydrogen reçoit un message MIDI." #. Tag: para #: manual.docbook:636 #, no-c-format msgid "" "Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed " "Hydrogen will work as 'master', else it will act as 'slave' to another " "'master' program (e.g. Ardour). This applet is only available if Jack Audio " "Driver is selected." msgstr "" "Cliquez sur J. TRANS pour activer le transport JACK.Si le bouton J. MASTER " "est pressé, Hydrogen fonctionnera comme 'maitre', sinon, il agira comme " "'esclave' d'une autre programme 'maitre' (par exemple : Ardour). Cette " "applet est disponible uniquement si le Pilote Audio JACK est sélectionné." #. Tag: title #: manual.docbook:646 #, no-c-format msgid "Tap Tempo and BeatCounter" msgstr "Tap Tempo et Compteur de Pulsation" #. Tag: para #: manual.docbook:648 #, no-c-format msgid "" "It is possible to change tempo at any time using the tap-tempo and " "BeatCounter features of Hydrogen. You can change these while playing or " "while the song is stopped. To change the tempo, hit the , " "(comma) key in tempo for the number of beats in the measure. After the " "correct number of beats are met, the tempo will change to the average tempo " "that you tapped in. If you continue to tap, these new taps will become a " "part of a rolling average. If you tap accidentally, or if you wait too long " "between taps, the tap tempo counter will start over." msgstr "" "Il est possible de changer le tempo à n'importe quel moment par " "l'utilisation des fonctionnalités Tap Tempo ou Compteur de Pulsation " "d'Hydrogen. Vous pouvez les changer pendant la lecture ou quand le morceau " "est arrêter. Pour changer le Tempo, appuyer sur la touche , " "(virgule) pour le nombre de tempo dans la mesure. Après que le nombre " "correct de pulsation soit atteint, le tempo changera pour le tempo moyen que " "vous avez tapé. Si vous continuez à tapper, ces nouvelles pulsations " "deviendront une partie d'une moyenne roulante. Si vous tapez " "accidentellement ou si vous attendez longtemps entre deux frappes, le " "compteur de tempo redémarrera à zéro." #. Tag: para #: manual.docbook:658 #, no-c-format msgid "" "The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo " "on steroids. By default the BeatCounter display is not visible. To see the " "BeatCounter widget click the upright button (BC) " "between Song/Pattern mode selector and the BPM-widget. Or, it can be shown " "by pressing the comma key (,)." msgstr "" "Le Tap Tempo est une partie du Compteur de Pulsation, qui est " "essentiellement un Tap Tempo sous stéroïdes. Par défaut, l'affichage du " "Compteur de Tempo n'est pas visible. Pour voir le gadget Compteur de Tempo, " "cliquez sur le bouton (BC) entre le sélecteur de mode " "Song/Pattern et le gadget BPM. Ou alors, il peut être affiché en pressant la " "touche virgule : (,)." #. Tag: para #: manual.docbook:665 #, no-c-format msgid "" "The tempo that you tap will be considered even beats of the beat type. The " "beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note " "beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change " "the beat type use the left arrow buttons. To change the number of beats that " "are counted, use the right arrow button. You can set from 2 to 16 beats. " "(I.e. if you set the beat to 6, you will have to tap 6 times before the new " "tempo is computed and set.) When the display shows an " "R, it means that the BeatCounter is ready to start from " "0. Every time you tap with the comma key, it will show the number of taps " "that you have entered (1, 2, 3...)." msgstr "" "Le tempo que vous tapez sera considéré comme des pulsations du type de " "pulsation. Le type de pulsation peut être paramétrer à 1/8 (pour des " "pulsations de huitième de notes), 1/4 (pour des pulsations de quart de " "note), 1/2 (pour des pulsations de demi note) et 1/1 (pour des pulsations de " "note entière). Pour changer le type de pulsation, utilisez les boutons de " "flêches de gauche. Pour changer le nombre de pulsations qui sont comptées, " "utilisez les boutons de flêches de droite. Vous pouvez paramétrer de 2 à 16 " "pulsations. (C'est à dire que si vous paramétrez à 6 pulsations, vous aurez " "à tapez 6 fois avant que le nouveau tempo soit calculé et appliqué.) Lorsque " "l'affichage montre un R, cela signifie que le Compteur " "de pulsation est prêt à démarrer à 0. Chaque fois que vous tapez avec la " "touche virgule, il montrera le nombre de frappes que vous avez entrées (1, " "2, 3, ...)." #. Tag: para #: manual.docbook:676 #, no-c-format msgid "" "The button in the bottom right-hand controls the auto-start feature, and it " "toggles between S and P. When it " "shows P for (Play), the song will " "set the new tempo and automatically start to play after you tap the right " "number of beats (if it's not already playing, of course). This way, if you " "have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing " "on the next beat. When it shows S (for Set " "BPM), the auto-start is disabled." msgstr "" "Le bouton en bas à droite contrôle une fonctionnalité de démarrage " "automatique, et il bascule entre S et " "P. Lorsqu'il affiche P pour " "(Play, NdT : Jouer), le morceau va paramétrer le " "nouveau tempo et démarrera la lecture automatiquement après que vous ayez " "tapé le bon nombre de pulsation (s'il n'est pas déjà démarré, bien sûr). Ce " "faisant, si votr Compteur de Tempo est sélectionné à 4/4, vous pouvez taper " "1-2-3-4, et démarrer à la prochaine pulsation Lorsqu'il affiche " "S (pour Set BPM, NdT : Paramétrer " "le BPM), le démarrage automatique est désactivé." #. Tag: para #: manual.docbook:686 #, no-c-format msgid "" "For example: Suppose you have a live band, Hydrogen, and a softsynth that is " "controlled by Seq24)... and you want them all to start at the same time. Set " "the beat type to 1/4 and the number of beats to 4. Enable auto-start (button " "shows P). Count off the band 1-2-3-4 (while tapping the " "comma key) — and everyone starts on 1." msgstr "" "Par exemple : Supposons que vous ayez un groupe live, Hydrogen et un " "synthétiseur (qui est contrôlé par Seq24)... et que vous voulez qu'il " "démarre tous en même temps. Paramétrez le type de pulsation à 1/4 et le " "nombre de pulsation à 4. Activer le démarrage automatique (le bouton affiche " "P). Décomptez 1-2-3-4 (en tapant sur la touche virgule) " "— et tout le monde démarrera sur 1." #. Tag: para #: manual.docbook:693 #, no-c-format msgid "" "Another example: Same situation, but the song doesn't require Hydrogen or " "synths until some point later. During that time, a human (e.g. guitar " "player) will be setting the tempo. On the measure before Hydrogen is " "supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in " "on the next beat (at the right tempo)." msgstr "" "Un autre exemple : Même situation, mais le morceau ne nécessite pas Hydrogen " "ou les synthés avant un certain moment. Pendant ce temps, un humain (par " "exemple un guitariste) paramétrera le tempo. Sur la mesure avant qu'Hydrogen " "ne soit censé jouer, tappez la touche virgule 1-2-3-4 avec le tempo... et " "vous serez dedans au prochain tempo (au bon tempo)." #. Tag: para #: manual.docbook:699 #, no-c-format msgid "" "If you are using the JACK Transport, the BeatCounter continues to work. If " "another program is the JACK Transport Master, Hydrogen will respond to tempo " "change events from that application. Note that in this situation, Hydrogen " "is supposed to be a slave, so some of the BeatCounter " "features will be disabled or will not work properly. If Hydrogen is the JACK " "Transport Master, tempo changes from Hydrogen will be reflected in those " "programs (if they support it)." msgstr "" "Si vous utilisez le Transport JACK, le Compteur de Tempo continuera à " "fonctionner. Si un autre programme est le Maitre du JACK Transport, Hydrogen " "répondra au changement de tempo de cette application. Notez que dans cette " "situation, Hydrogen est supposé être un esclave, donc, " "certaines des fonctions du Compteur de Tempo seront désactivée ou ne " "fonctionneront pas correctement. Si Hydrogen est le Maitre du Transport " "JACK, les changements de tempo provenant d'Hydrogen seront reflétés dans ces " "programmes (s'il le supporte)." #. Tag: para #: manual.docbook:708 #, no-c-format msgid "" "Some of the settings to adjust the BeatCounter's latency compensation, are " "located on the General tab of the Preferences Dialog (see ). Here you will finde two " "spinboxes:" msgstr "" "Certains des paramètres pour ajuster la compensation de latence du Compteur " "de Pulsation sont placés dans l'Onglet Général du dialogue des Préférences " "(voir ). Ici, vous " "trouverez deux boites défilantes :" #. Tag: para #: manual.docbook:714 #, no-c-format msgid "" "Beat counter drift compensation in " "1/10ms — adjust to compensate for latency " "between the keyboard and the program." msgstr "" "Compensation en 1/10ms de la dérive du " "compteur — ajustement pour compenser la latence " "entre les clavier et le programme." #. Tag: para #: manual.docbook:719 #, no-c-format msgid "" "Beat counter start offset in " "ms — adjust the time between the BeatCounter's " "last input stroke and when the song starts playing (if auto-start is " "activated)." msgstr "" "Début en ms du compteur de " "battement — ajuste le temps entre la dernière " "impulsion entrée du Compteur de Pulsation et le moment où le morceau démarre " "(si le départ automatique est activé)." #. Tag: para #: manual.docbook:725 #, no-c-format msgid "" "Note that these can be set to positive (+) or negative (-) values. In order " "to find useful values for these, you will need to take some time to play " "with it. Also, you may want different values depending on the speed of your " "hardware, audio devices, drivers, etc. Using the BeatCounter effectively " "requires practice." msgstr "" "Notez qu'elles peuvent être paramétrées en valeurs positives (+) ou " "négatives (-). Afin de trouver les valeurs adéquates, vous devrez prendre un " "peu de temps pour jouer avec. Vous pourrez également vouloir des valeurs " "différentes en fonction de la vitesse de votre matériel, de vos " "périphériques audio, de vos pilotes, etc. L'utilisation du Compteur de " "Pulsation demande de la pratique." #. Tag: title #: manual.docbook:738 #, no-c-format msgid "Song Editor" msgstr "Éditeur de morceau" #. Tag: para #: manual.docbook:740 #, no-c-format msgid "" "The \"Song Editor\" () gives an overview " "of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so " "on); each blue colored square on this panel is a complete bar as shown in " "the underlying \"Pattern Editor\" panel. Here we have complete freedom to " "add, remove or move patterns in any order we prefer. We can also copy and " "paste patterns: use left mouse button to highlight an area and drag it " "around. Dragging with CTRL key pressed copies the patterns." msgstr "" "L'\"Éditeur de Morceau\" () donne une vue " "d'ensemble de la ligne de temps entière du morceau (par exemple : intro, " "couplet, refrain, et autres); chaque carré coloré en bleu de ce panneau est " "une mesure complète comme affichée dans le panneau de base de l\"Éditeur de " "Motif\". Ici, nous avons la liberté entière d'ajouter, supprimer ou déplacer " "les motifs dans l'ordre que nous préférons. Nous pouvons également copier et " "coller des motifs : utilisez le bouton gauche de la souris pour mettre en " "lumière une zone et la déplacer. Tirez avec la touche CTRL appuyée pour " "copier les motifs." #. Tag: para #: manual.docbook:749 #, no-c-format msgid "The Song Editor comes with 7 buttons:" msgstr "L'Éditeur de morceau vient avec 7 boutons :" #. Tag: para #: manual.docbook:765 #, no-c-format msgid "Completely delete all patterns (asks for confirmation!)." msgstr "Effacer complètement tous les motifs (demande une confirmation !)." #. Tag: para #: manual.docbook:773 #, no-c-format msgid "Create a new pattern (and asks for a name)." msgstr "Créer un nouveau motif (et demande son nom)." #. Tag: para #: manual.docbook:781 #, no-c-format msgid "Move currently selected pattern up or down." msgstr "Déplacer le motif actuellement sélectionné vers le haut ou le bas." #. Tag: para #: manual.docbook:791 #, no-c-format msgid "Enable selecting patterns for copy & paste (Select Mode)." msgstr "" "Active la sélection de motifs pour copier & coller (Mode Sélection)." #. Tag: para #: manual.docbook:799 #, no-c-format msgid "Enable Draw Mode." msgstr "Active le Mode Dessin." #. Tag: para #: manual.docbook:806 #, no-c-format msgid "" "Switch from \"Single pattern mode\" to \"Stacked pattern mode\" and back.." msgstr "" "Bascule du \"mode à un motif\" versle \"mode en pile de motif\" et " "inversement.." #. Tag: para #: manual.docbook:812 #, no-c-format msgid "" "Under these buttons there is a list of patterns created and when they will " "played (each square == 1 bar). Click on an squarebox to add or cancel the " "pattern. Clicking on right mouse button over the name of a pattern will " "bring up a menu to change name of the pattern or to allow copying/deleting " "it. Patterns with very same name are not allowed." msgstr "" "En dessous de ces boutons, il y a une liste des motifs créés et quand ils le " "sont, joués (chaque place == 1 mesure). Cliquez sur la boîte rectangulaire " "pour ajouter ou effacer le motif. Cliquer sur le bouton droit de la souris " "au dessus du nom du motif fera apparaitre un menu pour changer le nom du " "motif ou permettre de le copier/effacer. Les motifs avec des noms vraiment " "identiques ne sont pas autorisés." #. Tag: title #: manual.docbook:819 #, no-c-format msgid "The Song Editor" msgstr "L'Éditeur de morceau" #. Tag: title #: manual.docbook:833 #, no-c-format msgid "Pattern Editor" msgstr "Éditeur de motif" #. Tag: para #: manual.docbook:835 #, no-c-format msgid "" "The \"Pattern Editor\" lets us create or modify the pattern (bar) which is " "currently selected. You can add/remove notes, and tune a number of per-note " "properties like velocity and pan. The Pattern Editor can be used in 2 modes " ": 'Drum' mode or 'Piano' mode. You can switch between these modes by " "clicking the Drum/Piano button (located on the top-right of the Pattern " "Editor)" msgstr "" "L'\"Éditeur de motif\" nous laisse créer ou modifier le motif (la mesure) " "qui est actuellement sélectionnée. Vous pouvez ajouter/effacer des notes, et " "presonnaliser plusieurs propriétés de chaque note comme la vélocité et la " "panoramisation. L'Éditeur de motif peut être utilisé en 2 modes : mode " "'Drum' ou mode 'Piano'. Vous pouvez basculer entre ces modes en cliquant sur " "le bouton Drum/Piano (placé en haut à droite de l'Éditeur de motif)" #. Tag: para #: manual.docbook:841 #, no-c-format msgid "First let's take a look at the (classic) 'Drum' mode :" msgstr "Premièrement, jettons un coup d'oeil a mode 'Drum' (le classique) :" #. Tag: title #: manual.docbook:843 #, no-c-format msgid "Pattern Editor in Drum mode" msgstr "Éditeur de Motif en mode Drum" #. Tag: title #: manual.docbook:854 manual.docbook:858 #, no-c-format msgid "Pattern Editor Controls" msgstr "Contrôles de l'Éditeur de Motif" #. Tag: para #: manual.docbook:855 #, no-c-format msgid "The top part of the pattern editor contains a number of controls :" msgstr "La partie du haut de l'éditeur de motif contient plusieurs contrôles :" #. Tag: para #: manual.docbook:866 #, no-c-format msgid "From left to right :" msgstr "De la gauche vers la droite :" #. Tag: para #: manual.docbook:869 #, no-c-format msgid "" "SIZE : lets you choose the size of the " "pattern (the number of bars)" msgstr "" "SIZE : vous laisse choisir la taille (NdT " ": size) du motif (le nombre de mesures)" #. Tag: para #: manual.docbook:872 #, no-c-format msgid "" "RES : this is the current grid resolution " "(4 through 64)" msgstr "" "RES : c'est la résolution de la grille " "courante (de 4 à 64)" #. Tag: para #: manual.docbook:875 #, no-c-format msgid "" "Remember this constraint concerning the grid: if you are working with a " "resolution of 16 you can't go back to 8 and remove a 16th note. On the other " "hand if you are working with a resolution of 8 and you try to insert a note " "in the middle of two bars (looking for a 16 bars precision), notes will be " "placed in the previous or in the following 8th bar. This constraint can be " "removed if you disable the whole grid resolution (choose \"off\" from the " "grid resolution LCD control). Now you'll be able to place notes wherever you " "prefer." msgstr "" "Souvenez-vous de cette contrainte à propos de la grille : si vous travaillez " "avec une résolution de 16, vous ne pouvez pas passer à une résolution de 8 " "et enlever un 16ème de note. D'un autre côté, si vous travaillez avec une " "résolution de 8 et que vous essayez d'insérer une note entre 2 barres (en " "cherchant une précision de 16ème), les notes seront placées au prochain ou " "au précédent 8ème de mesure. Cette contrainte peut être supprimée si vous " "désactivez entièrement la résolution de grille (choisissez \"off\" dans le " "contrôle LCD de résolution de la grille). Ainsi, vous serez capable de " "placer les notes exactement là où vous le voulez." #. Tag: para #: manual.docbook:886 #, no-c-format msgid "" "HEAR : when enabled Hydrogen will play " "the sample as it's being added to the pattern." msgstr "" "HEAR : quand il est activé, Hydrogen " "jouera l'échantillon quand il est ajouté au motif." #. Tag: para #: manual.docbook:889 #, no-c-format msgid "" "QUANT : enables/disables quantization. " "When enabled the beats inserted will automatically respect the grid " "resolution currently applied." msgstr "" "QUANT : active/désactive la " "quantification. Lorsqu'il est activé, les pulsations insérées respecteront " "automatiquement le résolution de la grille actuellement appliquée." #. Tag: para #: manual.docbook:893 #, no-c-format msgid "" "Drumset / Instrument : when set to " "Drumset the keys on your midi keyboard will map to the instruments in your " "sound library as described in the instrument mapping table below. If you set " "it to Instrument the keys of your midi keyboard will trigger the instrument " "that is currently selected. The pitch of the instrument will follow the key " "you press on your keyboard. This feature is mainly used for non-drum " "instruments. An example : if you use a sample of a piano for one of your " "instruments, you will be able to 'play' that piano instrument using your " "keyboard just like you are playing a piano synth." msgstr "" "Drumset / Instrument : quand il est " "paramétré à Drumset, les notes de votre clavier MIDI correspondront à " "l'instrument de votre bibliothèque de son comme décrit dans la table de " "mappage d'instrument ci-dessous. Si vous le paramétrez à Instrument, les " "notes de votre clavier MIDI déclencheront l'instrument qui est actuellement " "sélectionné. La hauteur de l'instrument suivra la touche que vous pressez " "sur votre clavier. Cette fonctionnalité est utilisée principalement pour les " "instruments qui ne sont pas des batteries. Un exemple : si vous utiliser un " "échantillon de piano pour l'un de vos instruments, vous serez capable de " "'jouer' cet instrument piano en utilisant le clavier exactement comme si " "vous jouiez un piano synthétiseur." #. Tag: para #: manual.docbook:901 #, no-c-format msgid "" "Note Length / Note off : these are 2 " "different ways to define the duration of a note. See for usage." msgstr "" "Durée de note / Note off : il y a 2 " "manières différentes de définir la durée d'une note. Voir pour l'utilisation." #. Tag: para #: manual.docbook:904 #, no-c-format msgid "" "Drum/Piano : switch Pattern Editor " "between Drum and Piano mode. (see below)" msgstr "" "Drum/Piano : basculer l'Éditeur de Motif " "entre les modes Drum et Piano. (voir plus bas)" #. Tag: title #: manual.docbook:912 #, no-c-format msgid "Pattern Editor Drumkit" msgstr "Kit de batterie de l'Éditeur de Motif" #. Tag: para #: manual.docbook:913 #, no-c-format msgid "" "The section on the left shows you what drumkit/library is currently selected " "(GMkit by default) and below that you can see the instruments that are part " "of this kit." msgstr "" "La section à gauche vous montre quel kit de batterie ou bibliothèque est " "actuellement sélectionnée (GMkit par défaut) et ci-dessous, vous pouvez voir " "les instruments qui font partis de ce kit." #. Tag: para #: manual.docbook:924 #, no-c-format msgid "" "Each instrument has its own set of features that are accessible by " "right-clicking the instrument. From the context menu that pops up you can " "select" msgstr "" "Chaque instrument possède ses propres capacités de fonctionnalités qui sont " "accessibles en cliquant-droit sur l'instrument. Depuis le menu contextuel " "qui apparait, vous pouvez sélectionner" #. Tag: para #: manual.docbook:927 #, no-c-format msgid "" "Clear notes : to remove all notes for " "this instrument in this pattern." msgstr "" "Effacer les notes : pour effacer toutes " "les notes du motif, pour cet intrument." # -> à revoir/vérifier #. Tag: para #: manual.docbook:928 #, no-c-format msgid "" "Fill notes : this allows you to fill up " "the pattern with notes for the selected instrument. Depending on the choice " "you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, " "1/2, 1/4, etc of the note positions that are allowed " "by the grid setting. So be careful not to mix up the 'musical' " "1/2-note and the 'fill 1/2' note." msgstr "" "Remplir de notes : ceci vous permet de " "remplir le motif avec des notes de l'instrument sélectionné. Suivant le " "choix que vous avez fait (remplir tout, remplir 1/2, remplir 1/4 ...) les " "notes sertont placées partout, 1/2, 1/4, etc sur le position de notes " "qui sont permises par la configuration de la " "grille. Donc, soyez prudent de ne pas mélanger les 1/2 note " "'musicale' et les 1/2-note 'de remplissage'." #. Tag: para #: manual.docbook:932 #, no-c-format msgid "" "Randomize velocity : automatically apply " "a pseudo-random velocity to each note of that instrument in the pattern. The " "more velocity you set on the instrument, the more hydrogen will hit " "hard on that instrument when played." msgstr "" "Vélocité aléatoire : applique " "automatiquement une vélocité pseudo-hasardeuse à chaque note de cet " "instrument dans le motif. Plus vous sélectionnez une vélocité élevée dans " "l'instrument, plus Hydrogen jouera fort de cet instrument " "lorsqu'il sera joué." #. Tag: para #: manual.docbook:938 #, no-c-format msgid "" "Delete Instrument : well, deletes the " "instrument ;-)" msgstr "" "Effacer l'Instrument : et bien ... , " "efface l'instrument ;-)" #. Tag: para #: manual.docbook:941 #, no-c-format msgid "" "The small red and green buttons right of the instrument names are the " "mute (red) and " "solo (green) buttons." msgstr "" "Les petits boutons rouge et vert à d'autre du nom de l'instrument sont les " "boutons muet (rouge) et " "solo (vert)." #. Tag: para #: manual.docbook:945 #, no-c-format msgid "" "The order of the instruments can be rearranged by simply dragging an " "instrument up/down in the list and dropping it on a new position within the " "drumkit/library. Doing so will not change anything to the sequence you have " "created for that instrument, nor will it change anything to the song or " "pattern you are working on. It will " "however, have an impact on the MIDI note " "mapping : in the table below you can find the link between the " "instrument position, the MIDI note and the qwerty keyboard keys." msgstr "" "L'ordre des instruments peut être ré-arrangé en tirant simplement un " "instrument vers le haut ou le bas dans ma liste et en le lâchant sur une " "nouvelle position dans le kit de batterie / bibliothèque. Ceci ne changera " "rien ç la séquence que vous avez créez pour cet instrument, et rien non plus " "au morceau ou au motif sur lequel vous travaillez. Ceci aura cependant, n impact que le mapping des notes MIDI : dans la table ci-dessous, " "vous pouvez trouver le lien entre les positions d'instrument, les notes MIDI " "et les touches de claviers QWERTY." #. Tag: para #: manual.docbook:953 #, no-c-format msgid "Important Notes :" msgstr "Notes Importantes :" #. Tag: para #: manual.docbook:954 #, no-c-format msgid "" "The name of the instrument depends on the drumkit that is loaded. This list " "below refers to the GMkit that is loaded by default." msgstr "" "Le nom de l'instrument dépend du kit de batterie qui est chargé. Cette liste " "ci-dessous renvoie au GMkit qui est chargé par défaut." #. Tag: para #: manual.docbook:957 #, no-c-format msgid "" "Keep in mind that it is the position of the instrument " "(within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and " "not the name of the instrument." msgstr "" "Gardez en tête que c'est la position de l'instrument " "(dans le kit de batterie chargé) qui est lié à la note-MIDI/touche-clavier " "et pas le nom de l'instrument." #. Tag: section #: manual.docbook:960 #, no-c-format msgid "" " " " " " Here's a quick " "reference of the above bindings for your convenience. " " " " " " " msgstr "" " " " " " Voici une référence " "rapide des bindings du dessus pour votre convenance. " "" #. Tag: title #: manual.docbook:1012 #, no-c-format msgid "Pattern Editor Sequence area" msgstr "Zone de Séquence de l'Éditeur de Motif" #. Tag: para #: manual.docbook:1013 #, no-c-format msgid "This is where it all happens, this is where you can make music :-)" msgstr "" "c'est ici que tout arrive, c'est ici que vous pouvez faire de la musique :-)" #. Tag: para #: manual.docbook:1014 #, no-c-format msgid "" "In this area you can see your selected pattern and add notes for any " "instrument. The simplest way to create a pattern is by adding notes using " "your mouse (and the 'Fill/Clear notes' function described above). Where you " "can add notes depends on the used pattern size and resolution." msgstr "" "Dans cette zone, vous pouvez voir votre motif sélectionné et ajouter ds " "notes pour n'importe quel instrument. La façon la plus simple de créer un " "motif est d'ajouter des notes en utilisant votre souris (et la fonction " "'Remplir/Effacer les notes' décrite ci-dessus). Les endroits où vous pouvez " "ajouter des notes dépendent de la taille (NdT : SIZE) et de la résolution " "(NdT : RES.) utilisés dans ce motif." #. Tag: para #: manual.docbook:1018 #, no-c-format msgid "" "If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' " "the instrument wherever there's a 'dot' in the pattern. If you are using " "Hydrogen as an 'instrument', the length of the note becomes very important. " "There are 2 ways to define the length of a note : in 'Note Length' mode you " "can add a note by left-cliking, and you can 'stretch' that note by " "right-click-dragging it. This will change the dot into a rectangle that " "represents the duration of that note. In 'Note Off' mode you can also add a " "note by left-clicking, but a right-click will now add a blue dot that " "represents the end of that note. " " (Figure above, from left>right : a 'normal' " "note, a note in 'note length' mode, a note in 'note off' mode)" msgstr "" "Si vous utilisez Hydrogen comme une pure 'batterie', vous voulez juste " "qu'Hydrogen 'frappe' l'instrument partout où il y a une point dans le motif. " "Si vous utilisez Hydrogen comme un 'instrument', la durée de la note devient " "vraiment importante. Il y a 2 manière de définir la durée de la note : dans " "le mode 'Durée de Note', vous pouvez ajouter une note en cliquant-gauche, et " "vous pouvez 'étirer' cette note en cliquant-droit puis en la déplaçant. Ceci " "changera le point en un rectangle qui représente la durée de cette note. " "Dans le mode 'Note Off', vous pouvez aussi ajouter une note en " "cliquant-gauche, mais un cli-droit ajoutera maintenant un point bleu qui " "représente la fin de la note. " " " " (La figure ci-dessous, de gauche vers la " "droite : note, une note en mode 'durée de note', une note en mode 'note off')" #. Tag: para #: manual.docbook:1034 #, no-c-format msgid "" "So far we have only used the mouse to create a pattern, but you can also " "record your beats by clicking the Record button " " " " (see ) " "and simply playing your pattern on your MIDI drum or your pc keyboard (see " "instrument mapping above). This is probably a more musical way of creating a " "pattern, but it's up to you to decide what works best for you. (Also see " " for a basic walk-through of how the " "pattern editor works)" msgstr "" "Jusqu'ici nous avons seulement employé la souris pour créer un motif, mais " "vous pouvez également enregistrer vos beats en cliquant sur le bouton " "'Enregistrer' " " (voir ) et simplement " "jouer votre motif sur votre batterie MIDI ou votre clavier PC. (voir le " "mappage d'instrument ci-dessus). C'est probablement un moyen plus musical de " "créer des motif, mais c'est à vous de décider ce qui fonctionne le mieux " "pour vous. (Voir aussi pour un passage " "en revue del a façon dont fonctionne l'Éditeur de Motif)" #. Tag: title #: manual.docbook:1049 #, no-c-format msgid "Pattern Editor Note Properties" msgstr "Propriétés de la Note de l'Éditeur de Motif" #. Tag: para #: manual.docbook:1050 #, no-c-format msgid "" "Clicking on an instrument or adding/removing a note next to it will select " "this instrument. Once an instrument is selected the note properties for this " "instrument will be shown in the form of vertical lines in the bottom window. " "The lines represent the value for the selected property of each note of the " "selected instrument. You can select another note-property from the note " "property drop-down list (located bottom-left). There are 4 note properties " "available :" msgstr "" "Cliquez sur un instrument, ou ajouter/supprimer une note à côté, " "sélectionnera cet instrument. Une fois qu'un instrument est sélectionné, les " "propriétés de la note pour cet instrument seront affichées suivant des " "lignes verticales dans la fenêtre du dessous. Les lignes représentent la " "valeur de la propriété sélectionnée de chaque note de l'instrument " "sélectionné. Vous pouvez sélectionner une autre propriété de la note depuis " "la liste déroulante (située en bas à gauche). Il y a 4 propriétés de note " "disponibles :" #. Tag: para #: manual.docbook:1059 #, no-c-format msgid "" "Velocity : how hard the note is played " "(the volume of the note)" msgstr "" "Vélocité : à quelle puissance la note est " "jouée (le volume de la note)" #. Tag: para #: manual.docbook:1060 #, no-c-format msgid "" "Note that the color of the note-dot and the vertical bar will change " "according to the velocity value you have defined. A light shade of gray " "means a low velocity (low volume) and the higher you set the velocity the " "darker the color will be, turning red when you reach the point of clipping." msgstr "" "Notez que la couleur de la note-point et la barre verticale changeront en " "fonction de la vélovité que vous avez définie. Une nuance légère de gris " "signifie une faible vélocité (faible volume) et plus vous sélectionnez une " "véolcité forte, plus la couleur sera foncée, devenant rouge lorsque vous " "atteindrez le point de saute-de-son (NdT : clipping)." #. Tag: para #: manual.docbook:1068 #, no-c-format msgid "" "Pan : with this parameter you can define " "the stereo image of the note (how loud it will be in the left/right output)" msgstr "" "Pan : avec ce paramétre, vous pouvez " "définir l'image stéréo de la note (de combien le poid sera dans les sorties " "droite ou/et gauche)" # à voir #. Tag: para #: manual.docbook:1073 #, fuzzy, no-c-format msgid "" "Lead/Lag : Lead and Lag allows a slight " "note lead or lag in respect of the actual beat. The range is ca. 5 ticks " "which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag " "can make a huge difference to the way your pattern sounds and feels. It's a " "groove thing ;-)" msgstr "" #. Tag: para #: manual.docbook:1082 #, no-c-format msgid "" "Notekey : if you select this note " "parameter the area where you can modify the parameter will change into a " "'piano keyboard'" msgstr "" "Touche : si vous sélectionnez ce " "paramètre de note, la zone où vous pouvez modifier le paramètre changera en " "un 'clavier piano'" #. Tag: para #: manual.docbook:1093 #, fuzzy, no-c-format msgid "" "The striped black and white area represents a piano keyboard and in the gray " "area you can choose the octave. By placing a dot on the octave scale and a " "dot on the 'keyboard' you can choose any note." msgstr "" #. Tag: title #: manual.docbook:1104 #, no-c-format msgid "Pattern Editor Piano mode" msgstr "Mode Piano de l'Éditeur de Motif" #. Tag: para #: manual.docbook:1105 #, no-c-format msgid "" "Drum mode (see ) focuses on " "using Hydrogen as a drum machine. If you are using Hydrogen as an instrument " "there is a big chance that the Piano mode is for you. It gives you a " "complete 'piano keyboard' so you can easily put down your tunes." msgstr "" "Le mode Batterie (voir ), met " "l'accent sur l'utilisation d'Hydrogen comme une boite à rythme. Si vous " "utilisez Hydrogen comme un instrument, il y a de grande chance que le mode " "Piano soit pour vous. Il vous donnera un 'clavier-piano' complet et vous " "pourrez donc facilement inscrire vos envies." #. Tag: para #: manual.docbook:1108 #, no-c-format msgid "" "You can compare the Piano mode to the Note properties Notekey (described " "above), only here you have a complete piano keyboard, so you dont have to " "select the octave first." msgstr "" "Vous pouvez comparer le mode Piano aux propriétés des Notes des touches " "(décrites au dessus), seulement si vous avez un clavier piano complet, car " "vous n'avez pas besoin de commencer par sélectionner l'octave." #. Tag: title #: manual.docbook:1111 #, no-c-format msgid "Pattern Editor in Piano mode" msgstr "L'Éditeur de Motif en mode Piano" #. Tag: title #: manual.docbook:1125 #, no-c-format msgid "Mixer" msgstr "Mixeur" #. Tag: title #: manual.docbook:1128 manual.docbook:1963 #, no-c-format msgid "The Mixer" msgstr "Le Mixeur" #. Tag: para #: manual.docbook:1136 #, no-c-format msgid "" "The Mixer frame () is useful for tuning a " "global or single volume of the current drumkit. It shows the current peak " "(click on " " to disable, useful on old CPUs) and let you set the " "maximum peak allowed (tune with the fader knob of the instrument), lets you " "modify attributes like pan, play solo " " " " , mute " " or test play only that instrument " " ; selecting in the " "Pattern Editor an instrument causes a blue LED to light on (near the play " "button). Near the global volume knob, you can set 3 global effect such a " "swing (shifts a few notes back or forward not randomly), timing (modify " "timings of the notes) and humanize effect (random velocity editing)." msgstr "" "La trame du Mixeur () est utile pour " "personnalisé un volume global ou seul du kit de batterie courant. Elle " "montre le pic courant (cliquer sur " " " " pour désactiver, utile sur les anciens processeurs) et " "vous laisse le pic maximum autorisé (presonnalisable avec le bouton fadeur " "de cet instrument), vous laissemodifier les attributs comme le panoramique, " "jouer le solo " " , muet " " ou tester la lecture de cet instrument seul " " " " ; la sélection dans l'Éditeur de Motif d'un instrument " "entraine l'allumage de la DEL bleur (prêt du bouton jouer). À côté du bouton " "de volume général, vous pouvez paramétrer 3 effets généraux comme un swing " "(déplacer quelques notes avant ou après, sans hasard), le timing (modifie la " "précision des notes) et l'effet 'humanize' (édition au hasard de la " "vélocité)." #. Tag: para #: manual.docbook:1179 #, no-c-format msgid "" "In addition to all this you can set up to 4 special LADSPA effects for each " "instrument switching the " " button. See next section for a detailed overview. " " " "" msgstr "" "En plus de tout ceci, vous pouvez paraméter 4 effets LADSPA spéciaux pour " "chaque instrument en basculant le bouton " " " ". Voir la prochaine section pour une vue d'ensemble " "détaillée. " " " " " #. Tag: title #: manual.docbook:1204 #, no-c-format msgid "Sound Library (Drumkit Manager)" msgstr "Bibliothèque de Son (Gestionnaire de Kit de Batterie)" #. Tag: para #: manual.docbook:1206 #, no-c-format msgid "" "The Sound Library saves you time in managing your drum kits, favorite " "patterns, and favorite songs. When making new songs and drum kits, the Sound " "Library makes it easier for you to reuse and mix the instruments and " "patterns from other kits and songs." msgstr "" "La Bibliothèque de Son vous fait gagner du temps dans la gestion de vos kit " "de batterie, et de vos motifs et morceaux préférés. Lors de la fabrication " "de nouveaux morceaux et de nouveaux kit de batterie, la Bibliothèque de Son " "vous rend plus simple la réutilisation et mixe les instruments et les motifs " "depuis d'autres kits et morceaux." #. Tag: title #: manual.docbook:1212 #, no-c-format msgid "System Drumkits" msgstr "Kit de Batterie Système" #. Tag: para #: manual.docbook:1214 #, no-c-format msgid "" "This lists the drumkits that were installed by your system administrator. It " "was determined by the compile-time prefix. On Unix-like operating systems, " "this is usually /usr/share/hydrogen/data/drumkits, or possibly " "/usr/local/share/hydrogen/data/drumkits. These " "kits are available to all users on the system, and users are usually not " "able to add to them." msgstr "" "Ceci liste les kits de batterie qui sont installés par votre " "administrateur-système. C'est déterminé par le préfix au moment de la " "compilation. Sur les système d'Exploitation Unix-like, c'est habituellement " "/usr/share/hydrogen/data/drumkits, " "ou possiblement /usr/local/share/hydrogen/data/drumkits. Ces " "kits sont disponibles à tous les utilisateurs sur le système, et les " "utilisateurs ne sont habituellement pas autorisé à en ajouter." #. Tag: para #: manual.docbook:1223 #, no-c-format msgid "" "To load a drumkit from here, right-click the drumkit and select " "Load. This will replace your current drumkit with " "the one that you selected. To load a single instrument from that kit, " "left-click the plus to the left of the drumkit's name " "to show all the instruments. With your left mouse button, click and drag the " "instrument into your current kit. The instrument will be added to the " "drumkit that you currently have loaded." msgstr "" "Pour charger un Kit de Batterie depuis là, cliquez-droit sur le kit de " "batterie et sélectionnez Charger. Ceci remplacera " "votre kit de batterie actuel avec celui que vous avez sélectionné. Pour " "charger un seul instrument depuis ce kit, cliquez-gauche sur le " "plus à gauche du nom du kit de batterie pour afficher " "tous les instruments. Avec le bouton gauche de votre souris, cliquez et " "tirez l'instrument dans vote kit de batterie. L'instrument sera ajouté au " "kit de batterie que vous avez actuellement chargé." #. Tag: title #: manual.docbook:1234 #, fuzzy, no-c-format msgid "User Drumkits" msgstr "" #. Tag: para #: manual.docbook:1236 #, fuzzy, no-c-format msgid "" "These are your own drum kits that you can manage yourself. They are usually " "stored in $HOME/.hydrogen/data/drumkits. When you are " "creating a new drumkit, you can save it here by selecting " "InstrumentsSave " "library." msgstr "" #. Tag: para #: manual.docbook:1244 #, fuzzy, no-c-format msgid "" "Loading drumkits and instruments to use is the same as for the System " "Drumkits (see )." msgstr "" #. Tag: title #: manual.docbook:1249 #, fuzzy, no-c-format msgid "Patterns in the Sound Library" msgstr "" #. Tag: para #: manual.docbook:1251 #, fuzzy, no-c-format msgid "" "Before you save your favorite patterns to the sound library, be sure to edit " "it's properties by right-clicking and selecting " "Properties. There, you can give the pattern a " "title and a category. You can use one of the categories already provided, or " "create your own categories by simply typing in a category name. The category " "name is important, because the patterns will be filed by category in the " "Sound Library." msgstr "" #. Tag: para #: manual.docbook:1259 #, fuzzy, no-c-format msgid "" "You can save your favorite patterns in the sound library by right clicking " "the title of the pattern in the song editor, and selecting Save " "Pattern. It will appear in the Sound Library underneath " "Patterns and the category that you assigned to the " "pattern." msgstr "" #. Tag: title #: manual.docbook:1267 #, fuzzy, no-c-format msgid "Songs in the Sound Library" msgstr "" #. Tag: para #: manual.docbook:1269 #, fuzzy, no-c-format msgid "" "To save songs in the Sound Library, put them in your data directory " "underneath the songs folder (usually " "$HOME/data/songs. To remove them, " "remove the file from that folder." msgstr "" #. Tag: title #: manual.docbook:1277 #, fuzzy, no-c-format msgid "Drumkits and Instrument Editing" msgstr "" #. Tag: para #: manual.docbook:1279 #, fuzzy, no-c-format msgid "" "Creating a new drumkit with Hydrogen is done with the Instrument Editor. " "Using the instrument editor you can load samples, set envelope parameters, " "set the gain, and a few other advanced features like mute groups, low-pass " "resonance filter, and pitch randomization." msgstr "" #. Tag: para #: manual.docbook:1284 #, fuzzy, no-c-format msgid "" "Instead of creating your own drumkit, you can also use or download existing " "drumkits using the ." msgstr "" #. Tag: title #: manual.docbook:1291 #, fuzzy, no-c-format msgid "Concepts" msgstr "" #. Tag: para #: manual.docbook:1293 #, fuzzy, no-c-format msgid "" "The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a " "piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a " "note, the sample is simply played back at the right time. There's a few " "concepts and terms that you should understand when you are putting together " "a drumkit. (See for more detailed explanations.)" msgstr "" #. Tag: title #: manual.docbook:1303 #, fuzzy, no-c-format msgid "Sampling Synthesizer Terms" msgstr "" #. Tag: term #: manual.docbook:1305 #, fuzzy, no-c-format msgid "Sample" msgstr "" #. Tag: para #: manual.docbook:1305 manual.docbook:2420 #, fuzzy, no-c-format msgid "" "A short recording of a sound, typically between .1 and 3.0 seconds long." msgstr "" #. Tag: term #: manual.docbook:1309 #, fuzzy, no-c-format msgid "Gain" msgstr "" #. Tag: para #: manual.docbook:1309 #, fuzzy, no-c-format msgid "Volume adjustment." msgstr "" #. Tag: term #: manual.docbook:1313 #, fuzzy, no-c-format msgid "Velocity" msgstr "" #. Tag: para #: manual.docbook:1313 manual.docbook:2444 #, fuzzy, no-c-format msgid "How hard you hit a note." msgstr "" #. Tag: term #: manual.docbook:1317 #, fuzzy, no-c-format msgid "ADSR Envelope Generator" msgstr "" #. Tag: para #: manual.docbook:1317 #, fuzzy, no-c-format msgid "" "An Attack/Decay/Sustain/Release envelope generator. After you trigger a " "note, Hydrogen will attack the note by increasing its " "volume from 0 to the full velocity of the note. After reaching full " "velocity, it will decay the note by lowering the volume " "until it reaches the sustain level. When the note is " "released, Hydrogen reduces the volume from the sustain " "level back down to 0." msgstr "" #. Tag: term #: manual.docbook:1328 #, fuzzy, no-c-format msgid "Attack" msgstr "" #. Tag: para #: manual.docbook:1328 #, fuzzy, no-c-format msgid "" "The amount of time to go from 0 to full " "velocity." msgstr "" #. Tag: term #: manual.docbook:1333 #, fuzzy, no-c-format msgid "Decay" msgstr "" #. Tag: para #: manual.docbook:1333 #, fuzzy, no-c-format msgid "" "The amount of time to go from full " "velocity to the sustain volume." msgstr "" #. Tag: term #: manual.docbook:1338 #, fuzzy, no-c-format msgid "Sustain" msgstr "" #. Tag: para #: manual.docbook:1338 #, fuzzy, no-c-format msgid "" "The level (how loud) to hold the note " "between the sustain and the release. It is a percentage of the velocity. It " "does not depend on time." msgstr "" #. Tag: term #: manual.docbook:1344 #, fuzzy, no-c-format msgid "Release" msgstr "" #. Tag: para #: manual.docbook:1344 #, fuzzy, no-c-format msgid "" "The amount of time to go from the sustain " "volume back down to 0." msgstr "" #. Tag: para #: manual.docbook:1350 #, fuzzy, no-c-format msgid "" "Typical samples that are used in Hydrogen are: the sound of a single drum " "hit, the sound of a single cymbal hit, the sound of a single cowbell hit. " "Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen " "will play whatever sound you have loaded. So, to put together a drum kit you " "need to gather short recordings of the bass drum, each tom, each cymbal, the " "high hat open, the high hat closed, the snare drum (snare on), the snare " "drum (snare off), rim shots, etc." msgstr "" #. Tag: para #: manual.docbook:1361 #, fuzzy, no-c-format msgid "" "However, there are no rules about what a sample can be. It's not uncommon to " "use Hydrogen to trigger non-drum sounds like: audio clips of people talking, " "a clip from a song, sound effects, audio clips from movies, and famous " "people speaking. Be creative!" msgstr "" #. Tag: title #: manual.docbook:1370 #, fuzzy, no-c-format msgid "Creating a New Drumkit" msgstr "" #. Tag: para #: manual.docbook:1372 #, fuzzy, no-c-format msgid "" "To start a brand new drum kit, select " "Instruments Clear All " " . This will give you a bank of 32 blank instruments. To delete " "instruments, right-click on on each instrument and select " "Delete Instrument. To add more instruments, " "select Instruments Add " "instrument ." msgstr "" #. Tag: para #: manual.docbook:1391 #, fuzzy, no-c-format msgid "" "Select an instrument to start editing it. This is done by left-clicking on " "the name of the instrument in the instrument list (at the left). You will " "notice that the name of the instrument in the Instrument Editor matches the " "one that you clicked." msgstr "" #. Tag: para #: manual.docbook:1396 #, fuzzy, no-c-format msgid "" "After you have your drum kit working the way you want, select " "Instruments Save " "library . It will ask you for the name of the " "kit to save. If you wish to overwrite an existing kit, " "you will need to type in the same name as the kit that you want to replace." msgstr "" #. Tag: para #: manual.docbook:1407 #, fuzzy, no-c-format msgid "" "Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits)." msgstr "" #. Tag: para #: manual.docbook:1411 #, fuzzy, no-c-format msgid "" "To export a drumkit (for sharing with others), it must first be loaded into " "your Sound Library. Then, select " "Instruments Export " "library from the menu. Select the drum kit that " "you wish to export, and give it a file name to save it to." msgstr "" #. Tag: title #: manual.docbook:1424 #, fuzzy, no-c-format msgid "Creating an Instrument and Layers" msgstr "" #. Tag: para #: manual.docbook:1426 #, fuzzy, no-c-format msgid "" "For each instrument in a drum kit, you can load several samples and set " "different synthesizer parameters. This section will step you through how to " "create a new instrument and load the samples." msgstr "" #. Tag: para #: manual.docbook:1430 #, fuzzy, no-c-format msgid "" "To begin creating an instrument, select " "Instruments Add instrument " ". This will give you a blank instrument to start from." msgstr "" #. Tag: para #: manual.docbook:1437 #, fuzzy, no-c-format msgid "" "Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides " "several in the data/drumkits " "directory." msgstr "" #. Tag: para #: manual.docbook:1441 #, fuzzy, no-c-format msgid "" "In the instrument editor, click on Layers. You can " "layer several samples into the instrument. Which one is played depends on " "the velocity of the incoming note. Click Load Layer " "and point the Audio File Browser to your sample. Note " "that the Audio File Browser will allow you to preview the " "sample before you load it. It will also allow you to load more than one " "sample at a time. But for now, only load one." msgstr "" #. Tag: para #: manual.docbook:1450 #, fuzzy, no-c-format msgid "" "After you load the sample, you'll see that there is now a " "1 at the top, and the topmost rectangle has turned " "light blue. To load a second sample, click the slot just below it, and then " "click Load Layer to bring in another sample." msgstr "" #. Tag: para #: manual.docbook:1456 #, fuzzy, no-c-format msgid "" "After bringing in both samples, you'll probably notice that only the " "first sample is being played whenever you trigger the " "instrument. This is because you need to set the " "velocity ranges for the layers. Move your mouse to the " "sides of the light blue rectangles and you see that you get a left-right " "drag cursor. Now drag the sample to the left or right (like a curtain). You " "will now see Layer 2 appear." msgstr "" #. Tag: para #: manual.docbook:1464 #, fuzzy, no-c-format msgid "" "The velocity setting for the layer is 0-velocity on the left, and full " "velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 " "to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)" msgstr "" #. Tag: para #: manual.docbook:1469 #, fuzzy, no-c-format msgid "" "Now, in the pattern area, set up a simple pattern that plays this " "instrument. Adjust the velocity settings on each note so that you can get " "the different samples to sound. Now set the pattern to loop and notice how " "your different samples are getting triggered. (To learn about editing a " "pattern, see )" msgstr "" #. Tag: para #: manual.docbook:1476 #, fuzzy, no-c-format msgid "" "For each layer, you can set the Gain and the " "Pitch. The pitch also has a " "Fine adjustment." msgstr "" #. Tag: para #: manual.docbook:1480 #, fuzzy, no-c-format msgid "" "Use the Gain adjustment to control how loud the " "sample will play. This is necessary because it's extremely difficult to get " "a set of samples that all sound at about the same volume. By adjusting here, " "the samples that were recorded too quietly can be turned up to match your " "loud samples (that had to be turned down)." msgstr "" #. Tag: para #: manual.docbook:1488 manual.docbook:1613 #, fuzzy, no-c-format msgid "" "It is very easy to set the Gain too high, causing " "your sample to clip. Remember to test the gain with full-velocity notes. If " "you clip your signal here, it will only get worse as Hydrogen processes it." msgstr "" #. Tag: para #: manual.docbook:1494 #, fuzzy, no-c-format msgid "" "The pitch of the sample can be modified with the pitch controls. The " "Pitch knob adjust the pitch in musical half-steps. " "(So, -12 is down 1 octave). The pitch on the right adjusts the pitch " "±50 cents. (One half-step is 100 cents.)" msgstr "" #. Tag: para #: manual.docbook:1500 #, fuzzy, no-c-format msgid "" "The pitch is adjusted by playing the sample back faster or slower. This is " "called the Dopplar Effect. So, if you have a 1-second sample that you turn " "down -12 (1 octave), you sample will only last for .5-seconds." msgstr "" #. Tag: title #: manual.docbook:1507 #, fuzzy, no-c-format msgid "Instrument Parameters" msgstr "" #. Tag: para #: manual.docbook:1509 #, fuzzy, no-c-format msgid "" "In the instrument editor, click on the General " "button. Here you can adjust several parameters that are for the whole " "instrument (not for each layer). The parameters that you can adjust are:" msgstr "" #. Tag: para #: manual.docbook:1516 #, fuzzy, no-c-format msgid "" "Envelope parameters: " "Attack, Decay, " "Sustain, Release. (See )" msgstr "" #. Tag: para #: manual.docbook:1522 #, fuzzy, no-c-format msgid "" "Gain: The overall " "volume of the instrument." msgstr "" #. Tag: para #: manual.docbook:1526 #, fuzzy, no-c-format msgid "" "Mute Group: Which " "mute group this instrument is a member of (see )." msgstr "" #. Tag: para #: manual.docbook:1531 #, fuzzy, no-c-format msgid "" "Filter Parameters: " "Bypass, Cutoff, " "Resonance." msgstr "" #. Tag: guibutton #: manual.docbook:1536 #, fuzzy, no-c-format msgid "Random Pitch" msgstr "" #. Tag: para #: manual.docbook:1541 #, fuzzy, no-c-format msgid "" "It's important that you understand in order to continue on." msgstr "" #. Tag: title #: manual.docbook:1546 #, fuzzy, no-c-format msgid "Envelope Parameters" msgstr "" #. Tag: para #: manual.docbook:1548 #, fuzzy, no-c-format msgid "" "When the instrument is triggered, its volume is run through an ADSR " "Envelope. The parameters operate as follows:" msgstr "" #. Tag: para #: manual.docbook:1553 #, fuzzy, no-c-format msgid "" "Attack — the amount of " "time that the volume of the sample goes from 0 to the " "full velocity of the note. If the value is 0, the sample will play " "immediately at full velocity. If the value is 1.0, the sample volume will " "use the maximum time available for the attack parameter." msgstr "" #. Tag: para #: manual.docbook:1560 #, fuzzy, no-c-format msgid "" "The attack, decay, and release parameters are all set by the number of " "audio samples. This means that the time changes " "depending on the sample rate of your sound card. The max time for each of " "them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz)." msgstr "" #. Tag: para #: manual.docbook:1569 #, fuzzy, no-c-format msgid "" "Decay — the amount of " "time for the volume of the sample to go from full " "velocity down to the sustain volume. If the value is 0, the sample will " "immediately skip from the attack volume to the sustain volume. If the value " "is 1.0, the sample volume will use the maximum time available for the decay " "parameter." msgstr "" #. Tag: para #: manual.docbook:1578 #, fuzzy, no-c-format msgid "" "Sustain — the " "volume to play the note after the decay phase is over, " "and until the note is released. If set to 0, the note will be silent. If set " "to 1.0, the note will play at full velocity." msgstr "" #. Tag: para #: manual.docbook:1585 #, fuzzy, no-c-format msgid "" "Release — the " "time to fade out the note from the sustain volume back " "down to 0 (silent). If set to 0, the note will fade out in the minimum " "amount of time (about 5 ms). If set to 1, it will fade out for the maximum " "time available." msgstr "" #. Tag: para #: manual.docbook:1594 #, fuzzy, no-c-format msgid "" "If the sample is shorter than the times that you specify, the sample will " "end, regardless of which phase of the ADSR it is in. If the note is " "sustained, it does not draw out the note while you are " "holding it. It only holds the gain (volume) parameter during that time." msgstr "" #. Tag: title #: manual.docbook:1603 #, fuzzy, no-c-format msgid "Gain and Mute Group" msgstr "" #. Tag: para #: manual.docbook:1605 #, fuzzy, no-c-format msgid "" "The gain sets the overall volume for the sample. This gain is applied after " "the gain that you set for the layer, and before the gain that is set for the " "mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 " "the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is " "set higher, the samples will be amplified." msgstr "" #. Tag: para #: manual.docbook:1619 #, fuzzy, no-c-format msgid "" "Hydrogen provides more mute groups than you know what to do with (over 256). " "A mute group is a grouping of instruments that are mutually exclusive " "— only one instrument may be playing at any time. If one is playing " "and another instrument in the group is triggered, it will immediately " "silence (mute) and start playing the other instrument. This is useful, " "especially, for instruments like hi-hats where the open sound and the closed " "sound are different instruments." msgstr "" #. Tag: para #: manual.docbook:1628 #, fuzzy, no-c-format msgid "" "If the mute group is set to Off, then the instrument is " "not part of any mute grouping. If the mute group is set to any number, then " "that is the group that the instrument is a part of. To set other instruments " "into the same grouping, set their mute group parameter to the same number. " "(For example, to group all the high-hat instruments, you can set all their " "mute group parameters to 1. To have a snare drum mute group, set their mute " "group parameters to 2.)" msgstr "" #. Tag: title #: manual.docbook:1640 #, fuzzy, no-c-format msgid "Filter and Random Pitch" msgstr "" #. Tag: para #: manual.docbook:1642 #, fuzzy, no-c-format msgid "" "The filter is a low-pass resonance filter. If you don't wish to use is, " "click the BYPass button so that it's red. If it's not " "red, then the filter is active. The cutoff parameter adjusts the cutoff " "frequency for the filter. The resonance parameter adjusts how much to " "resonate the cutoff frequency. If the resonance is set to 0, then the filter " "is just a simple low-pass filter." msgstr "" #. Tag: para #: manual.docbook:1651 #, fuzzy, no-c-format msgid "" "The cutoff frequency of the filter varies with the sample rate of your audio " "card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample " "rate." msgstr "" #. Tag: para #: manual.docbook:1669 #, fuzzy, no-c-format msgid "" "The random pitch parameter allows you to randomly vary the pitch of the " "sample every time it is triggered. The value is set between 0 and 1.0. The " "pitch change is fairly small: ±2 half-steps × value. Using this " "sparingly can help your sequences to sound more like a real drummer." msgstr "" #. Tag: title #: manual.docbook:1678 #, fuzzy, no-c-format msgid "Tips on Editing Instruments" msgstr "" #. Tag: para #: manual.docbook:1680 #, fuzzy, no-c-format msgid "" "With all of the different parameters available to tweak, it can be difficult " "to set up something that sounds nice when you're done. Here's a few tips on " "setting up an instrument:" msgstr "" #. Tag: para #: manual.docbook:1684 #, fuzzy, no-c-format msgid "" "Turn down the gain. Every time you have a " "gain knob (i.e. an amplifier), this is called a gain " "stage. With every gain stage you have, it's easy to overdrive " "your signal — which means the signal gets distorted by clipping. In " "addition, if you have two samples that, by themselves, peg your meters " "— what do you think happens when you combine them? That's right, you " "overdrive the signal again." msgstr "" #. Tag: para #: manual.docbook:1692 #, fuzzy, no-c-format msgid "" "If things sound bad and distorted, start by turning down the gain setting on " "the layer... especially if it's larger than 1.0. Then turn down the " "instrument gain. Then any gain on a LADSPA effect. Then the fader on the " "mixer. Then the master output fader." msgstr "" #. Tag: para #: manual.docbook:1697 #, fuzzy, no-c-format msgid "" "Test samples at full velocity. Your " "sample will be played louder if the velocity is higher. So, if you set " "everything to sound nice and full with velocity at 0.7, what will happen " "when you get a full velocity of 1.0? (Hint: clipping.)" msgstr "" #. Tag: para #: manual.docbook:1703 #, fuzzy, no-c-format msgid "" "Try to use samples that are -6 dB max. " "Visually, this means samples that peak at only 1/2 of full scale. Otherwise, " "turn your layer gain to about .5." msgstr "" #. Tag: para #: manual.docbook:1708 #, fuzzy, no-c-format msgid "" "Remove all DC offsets from the sample. In " "a sample editor, there is usually a line down the center of your sample's " "waveform. This is the zero-line. The beginning of your sample should be on " "this line. The end of your sample should also be on this line. However, if " "your signal is a little above or a little below this line, you will hear a " "click at the beginning and the end of your sample whenever it is played. If " "your sample editor doesn't provide any tools to fix a DC Offset problem, you " "can eliminate the noise by putting a slight fade-in/out at the ends of your " "sample." msgstr "" #. Tag: para #: manual.docbook:1718 #, fuzzy, no-c-format msgid "" "The ADSR will not be longer than your " "sample. If you have a short sample, it doesn't matter how long " "you set the attack and delay — the sample will stop playing at the end." msgstr "" #. Tag: para #: manual.docbook:1723 #, fuzzy, no-c-format msgid "" "Things change with the sample rate. If " "you have a really nice setup with all your parameters painstakenly " "tweaked... things will change if you change the sample " "rate of your audio card. Many of Hydrogens internal settings and parameters " "are done based on how many samples go by, and not on how many seconds go by. " "The sort of things that change are: anything time-base (like attack and " "release) and anything frequency based (like the cutoff frequency)." msgstr "" #. Tag: title #: manual.docbook:1736 #, fuzzy, no-c-format msgid "LADSPA plugins" msgstr "" #. Tag: para #: manual.docbook:1738 #, fuzzy, no-c-format msgid "" "Hydrogen can also add effects to sounds using any LADSPA plugin library. You " "need to have installed the LADSPA sources (available from http://www.ladspa.org) and while this " "will give a rough idea of how it works you should really have a taste of the " "real thing installing one or more plugin libraries, it's as simple as a " "scons && scons install. Here are a few places to " "download plugin libraries:" msgstr "" #. Tag: para #: manual.docbook:1748 #, fuzzy, no-c-format msgid "" "SWH-Plugins available at http://plugin.org.uk. Note that before " "compiling these plugins you need the FFTW tarball from http://www.fftw.org." msgstr "" #. Tag: para #: manual.docbook:1755 #, fuzzy, no-c-format msgid "" "CMT available at http://www.ladspa.org." msgstr "" #. Tag: para #: manual.docbook:1759 #, fuzzy, no-c-format msgid "" "TAP available at http://tap-plugins.sf.net." msgstr "" #. Tag: title #: manual.docbook:1765 #, fuzzy, no-c-format msgid "Plugins Kill" msgstr "" #. Tag: para #: manual.docbook:1766 #, fuzzy, no-c-format msgid "" "A LADSPA plugin is compiled, executable code. It is capable of hanging, " "crashing, freezing, screeching, overflowing buffers, and even phoning home. " "If you start having issues with Hydrogen, disable your plugins and see if " "things improve. Some plugins are not designed for real-time use, and some " "are just plain better than others." msgstr "" #. Tag: para #: manual.docbook:1773 #, fuzzy, no-c-format msgid "" "Once you have installed a few plugins open a song you'd like add an effect " "to and select an instrument that has a few beats in the pattern. In the " "Mixer click on " " and select one of the four available effect line Click " "on the Edit button ( " " ), than on Select the FX: this will " "bring up another window () that lets " "you choose an effect amongst those installed, they are alphabetically sorted " "and categorized. Once you're done, adjust the level from the mixer and start " "playing. Each round knob in the FX part controls the level of its effect. " " If you want to quickly " "enable/disable the effect click the Bypass ( " " " " ) button." msgstr "" #. Tag: title #: manual.docbook:1817 #, fuzzy, no-c-format msgid "Select an Effect" msgstr "" #. Tag: title #: manual.docbook:1836 #, fuzzy, no-c-format msgid "A new song" msgstr "" #. Tag: title #: manual.docbook:1838 #, fuzzy, no-c-format msgid "\"Song\" mode and \"Pattern\" mode" msgstr "" #. Tag: para #: manual.docbook:1840 #, fuzzy, no-c-format msgid "" "This is just a quick-and-dirty walkthrough to Hydrogen. Refer to the " "tutorial for a more detailed overview." msgstr "" #. Tag: para #: manual.docbook:1843 #, fuzzy, no-c-format msgid "" "Hydrogen has 2 main modes: \"Pattern\" mode and \"Song\" mode (refer to " " for the buttons to activate). When " "\"Pattern\" mode is activated the current pattern is continuously repeated. " "This mode is very well suited to tweak your pattern untill it's just right, " "since the pattern you are working on is constantly repeated. This way you " "can immediately hear the changes you have made. In \"Song\" mode the whole " "song is played. This is useful when putting together the patterns, to create " "the structure of the song." msgstr "" #. Tag: title #: manual.docbook:1853 #, fuzzy, no-c-format msgid "A new pattern" msgstr "" #. Tag: para #: manual.docbook:1855 #, fuzzy, no-c-format msgid "" "We'll start from an empty song with an empty pattern, as created by default: " "\"pattern\" mode should be selected now. It is also possible to change name " "of the pattern. Now let's click on the Play button and while " "the pattern is playing let's add notes in the grid of the Song Editor () simply left_mouse_clicking on it: adjust " "grid resolution and BPM speed if needed. Remember some constraints of the " "grid: if you are working with a resolution of 16 you can't go back to 8 and " "remove a 16th note; same thing happens if you are working with a resolution " "of 8 and you try to insert a note in the middle of two bars (looking for a " "16 bars precision): they will be placed on the previous or on the following " "8th bar (unless you choose off from the Grid Resolution LCD, " "in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor " "before adding notes in the Pattern Editor!" msgstr "" #. Tag: title #: manual.docbook:1872 #, fuzzy, no-c-format msgid "The Pattern Editor" msgstr "" #. Tag: title #: manual.docbook:1882 #, fuzzy, no-c-format msgid "A new sequence" msgstr "" #. Tag: para #: manual.docbook:1884 #, fuzzy, no-c-format msgid "" "Once patterns are created (), we can " "copy/paste/delete them simply dragging with the mouse (activate the select " "mode for the Song Editor and keep pressed left mouse button to select those " "you want to move or copy)." msgstr "" #. Tag: title #: manual.docbook:1890 #, fuzzy, no-c-format msgid "Inserting Notes in a Pattern" msgstr "" #. Tag: title #: manual.docbook:1901 #, fuzzy, no-c-format msgid "Adjust from the mixer" msgstr "" #. Tag: para #: manual.docbook:1903 #, fuzzy, no-c-format msgid "" "Of course we can always use the mixer window, either when creating or " "playing patterns." msgstr "" #. Tag: para #: manual.docbook:1906 #, fuzzy, no-c-format msgid "" "The Mixer frame () is made of 32 independent " "tracks, each of these is binded to an instrument, plus a \"Master Output\" " "line to adjust general output volume and a \"FX\" button to set effects. " "Every line features 3 buttons ( " " " " " " ), pan adjust ( " " " " ), current maximum peak, volume fader and name of the " "track. Clicking on " " will play the selected instrument, cutting the others. " "The \"Mute\" button " " , simply mute that instrument. The " "maximum peak indicates the maximum volume reached from the instrument; the " "peak must be in a range of 0.0 and 1.0 (in " "you can see a few volumes too loud), otherwise it will get distorted " "producing a weird sound (especially with OSS audio driver), in this case " "it's better to set volume down; keep an eye on each vu-meter." msgstr "" #. Tag: title #: manual.docbook:1975 #, fuzzy, no-c-format msgid "Shortcut lists" msgstr "" #. Tag: para #: manual.docbook:1979 #, fuzzy, no-c-format msgid "[CTRL + N] = New Project" msgstr "" #. Tag: para #: manual.docbook:1984 #, fuzzy, no-c-format msgid "[CTRL + O] = Open File" msgstr "" #. Tag: para #: manual.docbook:1989 #, fuzzy, no-c-format msgid "[CTRL + D] = Open Demo" msgstr "" #. Tag: para #: manual.docbook:1994 #, fuzzy, no-c-format msgid "[CTRL + S] = Save File" msgstr "" #. Tag: para #: manual.docbook:1999 #, fuzzy, no-c-format msgid "[CTRL + SHIFT + S] = Save File as" msgstr "" #. Tag: para #: manual.docbook:2004 #, fuzzy, no-c-format msgid "[CTRL + P] = Export Pattern as" msgstr "" #. Tag: para #: manual.docbook:2009 #, fuzzy, no-c-format msgid "[CTRL + M] = Export MIDI file" msgstr "" #. Tag: para #: manual.docbook:2014 #, fuzzy, no-c-format msgid "[CTRL + E] = Export Song" msgstr "" #. Tag: para #: manual.docbook:2019 #, fuzzy, no-c-format msgid "[CTRL + Q] = Quit Hydrogen" msgstr "" #. Tag: para #: manual.docbook:2024 #, fuzzy, no-c-format msgid "[ALT + B] = Show Director window" msgstr "" #. Tag: para #: manual.docbook:2029 #, fuzzy, no-c-format msgid "[ALT + M] = Show Mixer window" msgstr "" #. Tag: para #: manual.docbook:2034 #, fuzzy, no-c-format msgid "[ALT + I] = Show Instrument rack" msgstr "" #. Tag: para #: manual.docbook:2039 #, fuzzy, no-c-format msgid "[ALT + P] = Show Preferences window" msgstr "" #. Tag: para #: manual.docbook:2044 #, fuzzy, no-c-format msgid "[CTRL + ?] = Show manual" msgstr "" #. Tag: para #: manual.docbook:2049 #, fuzzy, no-c-format msgid "" "[Backspace] = Restart song or pattern " "from the beginning" msgstr "" #. Tag: para #: manual.docbook:2055 #, fuzzy, no-c-format msgid "[spacebar] = Play / Pause" msgstr "" #. Tag: para #: manual.docbook:2060 #, fuzzy, no-c-format msgid "" "[,] (comma key) = Tap tempo (beatcounter)" msgstr "" #. Tag: title #: manual.docbook:2069 #, fuzzy, no-c-format msgid "Glossary" msgstr "" #. Tag: para #: manual.docbook:2071 #, fuzzy, no-c-format msgid "" "This is a glossary of general terms encountered when using Hydrogen, " "synthesizers, drums, or samplers. The definitions in the text are " "simplified, but the definitions here are more general and have more " "explanation. For example, the text of the manual would have you believe that " "an ADSR is the only kind of envelope generator, and could only ever control " "the volume. While it's simple for new users, it's not quite right." msgstr "" #. Tag: glossterm #: manual.docbook:2084 #, fuzzy, no-c-format msgid "ADSR" msgstr "" #. Tag: para #: manual.docbook:2086 #, fuzzy, no-c-format msgid "" "A type of envelope generator that allows you to control the Attack, Decay, Sustain, and Release parameters. Generally, the parameters " "are proportional to the velocity." msgstr "" #. Tag: para #: manual.docbook:2095 #, fuzzy, no-c-format msgid "" "In Hydrogen, the ADSR envelope generator only controls the volume " "(attenuation)." msgstr "" #. Tag: para #: manual.docbook:2098 #, fuzzy, no-c-format msgid "" "Read more about this in the Wikipedia Article ADSR Envelope" msgstr "" #. Tag: glossdef #: manual.docbook:2100 #, fuzzy, no-c-format msgid "" " " " " msgstr "" #. Tag: glossterm #: manual.docbook:2111 #, fuzzy, no-c-format msgid "Attack" msgstr "" #. Tag: para #: manual.docbook:2113 #, fuzzy, no-c-format msgid "" "This is the first phase of an ADSR envelope, and is the amount of " "time to turn the parameter up from 0 to full velocity " "after triggering the note." msgstr "" #. Tag: glossterm #: manual.docbook:2122 #, fuzzy, no-c-format msgid "Attenuation" msgstr "" #. Tag: para #: manual.docbook:2124 #, fuzzy, no-c-format msgid "" "In filters and mixers, this the amount that a signal is reduced (volume)." msgstr "" #. Tag: glossterm #: manual.docbook:2134 #, fuzzy, no-c-format msgid "Band-Pass Filter" msgstr "" #. Tag: para #: manual.docbook:2136 #, fuzzy, no-c-format msgid "" "A filter that preserves a certain band of frequencies, and attenuates " "(silences) all others. This is often done by combining a high-pass and a " "low-pass filter." msgstr "" #. Tag: glossdef #: manual.docbook:2138 #, fuzzy, no-c-format msgid "" " " msgstr "" #. Tag: glossterm #: manual.docbook:2149 #, fuzzy, no-c-format msgid "Clipping" msgstr "" #. Tag: para #: manual.docbook:2151 #, fuzzy, no-c-format msgid "" "A phenomenon that happens to a signal when the signal is too large for " "whatever is receiving it. The peaks of the signal (which are normally smooth " "curves) get cut off straight at the max volume (clipped). This distorts the " "sound and is usually undesirable." msgstr "" #. Tag: para #: manual.docbook:2156 #, fuzzy, no-c-format msgid "" "An example of clipping is when you play music louder than your speaker can " "handle. Parts of the music sound harsh and fuzzy." msgstr "" #. Tag: glossterm #: manual.docbook:2162 #, fuzzy, no-c-format msgid "Cutoff Frequency" msgstr "" #. Tag: para #: manual.docbook:2164 #, fuzzy, no-c-format msgid "" "On high-pass and low-pass filters, this is the frequency that divides " "between those that pass, and those that are attenuated (silenced). In a " "high-pass resonance filter, or a low-pass resonance filter, the cutoff is " "also the frequency zone that gets boosted." msgstr "" #. Tag: para #: manual.docbook:2169 #, fuzzy, no-c-format msgid "" "For example, if you have a low-pass filter and you set the cutoff frequency " "high (i.e. 20kHz)... the filter will not affect the sound. All the audible " "frequencies will pass through undisturbed. As you lower the cutoff frequency " "to something like 40 Hz (the low string on a bass guitar), it sounds like " "someone is putting a blanket over the speaker. The higher frequencies are " "being attenuated above 30 Hz." msgstr "" #. Tag: glossdef #: manual.docbook:2174 #, fuzzy, no-c-format msgid "" " " msgstr "" #. Tag: glossterm #: manual.docbook:2186 #, fuzzy, no-c-format msgid "Decay" msgstr "" #. Tag: para #: manual.docbook:2188 #, fuzzy, no-c-format msgid "" "After reaching full velocity from the attack, this is the amount of " "time to turn the parameter down from full velocity to " "the sustain level." msgstr "" #. Tag: glossterm #: manual.docbook:2199 #, fuzzy, no-c-format msgid "Envelope Generator" msgstr "" #. Tag: para #: manual.docbook:2201 #, fuzzy, no-c-format msgid "" "A way to control (change) a parameter over time as a response to triggering, " "holding, and releasing a note." msgstr "" #. Tag: para #: manual.docbook:2207 #, fuzzy, no-c-format msgid "Did your eyes just glaze over? Let's try again:" msgstr "" #. Tag: para #: manual.docbook:2209 #, fuzzy, no-c-format msgid "" "Imagine that you're playing a note on the keyboard and you have your other " "hand on a knob (volume, filter cutoff, etc.). As you play the note, you " "twist the knob (often up, then down... or down, then up). You do the same " "thing on each note. That's what an envelope generator does. See also ADSR" msgstr "" #. Tag: glossterm #: manual.docbook:2220 #, fuzzy, no-c-format msgid "Fader" msgstr "" #. Tag: para #: manual.docbook:2222 #, fuzzy, no-c-format msgid "" "A slider control used to adjust the attenuation (volume) in a mixer. Faders " "always have an \"audio\" taper, which means that the attenuation amount " "changes on an exponential scale." msgstr "" #. Tag: glossterm #: manual.docbook:2229 #, fuzzy, no-c-format msgid "Filter" msgstr "" #. Tag: para #: manual.docbook:2231 #, fuzzy, no-c-format msgid "" "A device that changes a sound by attenuating specific frequencies. A tone " "knob is an example of a simple, low-pass filter." msgstr "" #. Tag: glossdef #: manual.docbook:2232 #, fuzzy, no-c-format msgid "" " " msgstr "" #. Tag: glossterm #: manual.docbook:2244 #, fuzzy, no-c-format msgid "Gain" msgstr "" #. Tag: para #: manual.docbook:2246 #, fuzzy, no-c-format msgid "" "In an amplifier, this adjust how much (or how little) a signal is amplified " "(volume). A higher gain value is a louder signal." msgstr "" #. Tag: glossterm #: manual.docbook:2254 #, fuzzy, no-c-format msgid "High-Pass Filter" msgstr "" #. Tag: para #: manual.docbook:2256 #, fuzzy, no-c-format msgid "" "A filter that attenuates (silences) low frequencies, but allows high " "frequencies to pass through." msgstr "" #. Tag: glossdef #: manual.docbook:2257 manual.docbook:2302 #, fuzzy, no-c-format msgid "" " " msgstr "" #. Tag: glossterm #: manual.docbook:2267 #, fuzzy, no-c-format msgid "Instrument" msgstr "" #. Tag: para #: manual.docbook:2269 #, fuzzy, no-c-format msgid "" "In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, " "or a tom)." msgstr "" #. Tag: glossterm #: manual.docbook:2280 #, fuzzy, no-c-format msgid "Layer" msgstr "" #. Tag: para #: manual.docbook:2282 #, fuzzy, no-c-format msgid "" "In an instrument you can load several different samples (each one called a " "layer), and have a different sample play " "depending on the velocity of the note. Only one sample at a time will play." msgstr "" #. Tag: para #: manual.docbook:2287 #, fuzzy, no-c-format msgid "" "Suppose you have a sample of a floor tom being struck softly. If you simply " "play the sample louder — it will not sound the " "same as a real tom that has been struck very hard. If you wish to mimic this " "in your instrument, you can load one sample for soft playing, and a " "different sample for loud playing." msgstr "" #. Tag: glossterm #: manual.docbook:2299 #, fuzzy, no-c-format msgid "Low-Pass Filter" msgstr "" #. Tag: para #: manual.docbook:2301 #, fuzzy, no-c-format msgid "" "A filter that attenuates (silences) high frequencies, but allows low " "frequencies to pass through." msgstr "" #. Tag: glossterm #: manual.docbook:2312 #, fuzzy, no-c-format msgid "Mute" msgstr "" #. Tag: para #: manual.docbook:2314 #, fuzzy, no-c-format msgid "" "To make no noise. A setting on an instrument that prevents any audio output." msgstr "" #. Tag: glossterm #: manual.docbook:2320 #, fuzzy, no-c-format msgid "Mute Group" msgstr "" #. Tag: para #: manual.docbook:2322 #, fuzzy, no-c-format msgid "" "A group of instruments (samples) that should mute (stop playing) immediately " "after another instrument in the group is triggered." msgstr "" #. Tag: para #: manual.docbook:2325 #, fuzzy, no-c-format msgid "" "This is typically used in hi-hats, where there's a different instrument " "(sample) for when the hi-hat is open or closed. With a real hi-hat, the " "sound of the open hi-hat will stop as soon as you close it. However, if you " "use two samples — the open sound will continue even after you have " "triggered the closed sound. By placing both instruments in the same mute " "group (group #1, for example)... triggering closed sound will immediately " "stop the open sound (and vice versa)." msgstr "" #. Tag: glossterm #: manual.docbook:2341 #, fuzzy, no-c-format msgid "Octave" msgstr "" #. Tag: para #: manual.docbook:2343 #, fuzzy, no-c-format msgid "" "A span of frequencies where the top-most frequency is exactly twice the " "frequency of the bottom frequency." msgstr "" #. Tag: para #: manual.docbook:2346 #, fuzzy, no-c-format msgid "" "For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, " "and 575 Hz to 1150 Hz. While the frequency differences are very different " "(20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they " "sound like the same distance." msgstr "" #. Tag: glossterm #: manual.docbook:2360 #, fuzzy, no-c-format msgid "Release" msgstr "" #. Tag: para #: manual.docbook:2362 #, fuzzy, no-c-format msgid "" "After the note is released, this is the amount of time " "to reduce the parameter from the sustain level to 0." msgstr "" #. Tag: glossterm #: manual.docbook:2371 #, fuzzy, no-c-format msgid "Resonance" msgstr "" #. Tag: para #: manual.docbook:2373 #, fuzzy, no-c-format msgid "" "When referring to a resonance filter, this is the parameter that determines " "how much of a boost (gain) to give the frequencies at the cutoff." msgstr "" #. Tag: glossterm #: manual.docbook:2382 #, fuzzy, no-c-format msgid "Resonance Filter" msgstr "" #. Tag: para #: manual.docbook:2384 #, fuzzy, no-c-format msgid "" "A filter that gives a large boost to a very narrow range of frequencies. " "Typically it will be part of a high-pass or a low-pass filter, where the " "boosted frequencies are centered on the cut-off frequency." msgstr "" #. Tag: glossdef #: manual.docbook:2387 #, fuzzy, no-c-format msgid "" " " msgstr "" #. Tag: glossterm #: manual.docbook:2396 #, fuzzy, no-c-format msgid "Roll-off" msgstr "" #. Tag: para #: manual.docbook:2398 #, fuzzy, no-c-format msgid "" "This is the amount that frequencies are attenuated (suppressed) as the " "frequency changes (typically measured in dB/octave)." msgstr "" #. Tag: para #: manual.docbook:2401 #, fuzzy, no-c-format msgid "" "For example, in a low-pass filter the frequencies below the cutoff frequency " "are not attenuated (they pass-through with the same volume). Same with the " "cutoff frequency. As you go above the cutoff frequency, the frequencies that " "are near the cutoff frequency are not attenuated very much at all. However, " "the frequencies that are much higher than the cutoff are attenuated " "(suppressed) a lot. This is usually approximated by a straight line (on a " "log scale) and measured in in dB of attenuation per octave of frequency." msgstr "" #. Tag: glossdef #: manual.docbook:2408 #, fuzzy, no-c-format msgid "" " " msgstr "" #. Tag: glossterm #: manual.docbook:2418 #, fuzzy, no-c-format msgid "Sample" msgstr "" #. Tag: glossterm #: manual.docbook:2426 #, fuzzy, no-c-format msgid "Sustain" msgstr "" #. Tag: para #: manual.docbook:2428 #, fuzzy, no-c-format msgid "" "The level to hold the parameter after finishing the " "decay time. This level will be maintained until the not is released." msgstr "" #. Tag: glossterm #: manual.docbook:2442 #, fuzzy, no-c-format msgid "Velocity" msgstr "" #. Tag: para #: manual.docbook:2446 #, fuzzy, no-c-format msgid "" "MIDI devices are required to send this information along with the note. " "Synthesizers use this information to adjust several parameters on the sample " "(typically the volume). In Hydrogen, it is only used to adjust how loud the " "sample is played back." msgstr "" hydrogen-0.9.6-beta3/data/doc/manual_it.html000066400000000000000000003143141211146647700206750ustar00rootroot00000000000000Hydrogen Manual

    Hydrogen Manual

    Antonio Piraino

    Alessandro Cominu

    Thijs van Severen

    Sebastian Moors

    Sommario

    Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter is still experimental, so ask in the developers mailing list for further details.


    Capitolo1.Introduzione

    1.Download

    You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

    If you want to compile Hydrogen yourself (see Sezione2), you can download the latest source files directly from our subversion server with:

    $ svn co http://svn.assembla.com/svn/hydrogen/trunk

    A certain release can be fetched with:

    $ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.5

    Compiling Hydrogen depends on the following libraries:

    Please install them with your distribution's package manager. If you're running a debian-based system, you can install the libraries with:

    $ apt-get install libqt4-dev g++ libasound2-dev \
            libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
            liblash-dev libportaudio-dev libportmidi-dev 
          

    2.Compilazione

    Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

    2.1.Using scons

    Decompress the tarball or go to the directory where the subversion copy was checked out:

    $ cd hydrogen-*
              $ scons
              $ su -c "scons install"
            

    Before compiling, check for additional options with:

    $ scons --help
            

    If you want to use features which are not enabled by default (for instance PortAudio), you can enable them with:

    $ scons portaudio=1
            

    Namely, if you get some error while running Hydrogen and you want to report it remember to configure hydrogen with:

    $ scons debug=1
            

    To clean up compiled code:

    $ scons -c
            

    2.2.Using cmake

    Compiling with cmake can be done easily by using the make_helper script. Decompress the tarball or go to the directory where the subversion copy was checked out and run the make_helper script without any arguments to display the help :

    $ cd hydrogen-*
              $ ./make_helper
            

    The help is now displayed (and is self-explanatory) :

    $ used builder : cmake
              $ usage ./make_helper [cmds list]
              $ cmds may be
              $    r or rm     =
    > all built, temp and cache files
              $    c or clean  =
    > remove cache files
              $    m or make   =
    > launch the build process
              $    d or doc    =
    > build html documentation
              $    h or help   =
    > show the build options
              $    x or exec   =
    > execute hydrogen
            

    3.Preferences

    First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).

    3.1.The General tab

    On the "General" tab (Figura1.1) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

    If you want to use Lash to manage your Jack connections you should enable it here so Hydrogen allows interaction with Lash.

    The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see Sezione3.1)

    The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching you need to enter the path where rubberband is installed on you system here.

    Figura1.1.The General Tab

    The General Tab

    3.2.The Audio System tab

    From the "Audio System" tab (Figura1.2) it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

    We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

    Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.

    Figura1.2.The Audio System Tab

    The Audio System Tab

    The following drivers are available:

    • jackd: The Jack driver is a professional audio server which permits very low lag and exchanges with other audio software. We strongly recommend using this driver to have the best out of Hydrogen. JACK server will start automatically if not already running.

    • ALSA: the widely adopted Linux standard audio drivers

    • OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort.

    • PortAudio: an open-source multi platform audio driver

    • CoreAudio: a driver for Mac OS X (experimental)

    3.3.The Midi System tab

    The "Midi System" tab (Figura1.3) contains all MIDI settings. Here you can choose the MIDI driver, input, and channel(s) that Hydrogen should respond to. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the 'binding' action line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action.

    Figura1.3.The MIDI System Tab

    The MIDI System Tab

    3.4.The Appearance tab

    The "Appearance" tab (Figura1.4) let's you modify Hydrogen look and feel (font settings and interface style). Also the VU meters fall-off speed of the Mixer Window can be changed here.

    Figura1.4.The Appearance Tab

    The Appearance Tab

    3.5.The Audio Engine tab (debug only)

    The "Audio Engine" tab (Figura1.5) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

    Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.

    Figura1.5.The Audio Engine tab

    The Audio Engine tab

    Capitolo2.Using Hydrogen

    1.Used Filetypes

    Before working with Hydrogen, please familiarize with these filetypes:

    • *.h2pattern: XML file describing a single pattern. Patterns are group of beats and are managed in the pattern editor.

    • *.h2song: XML file describing the whole song (or sequence). Songs are group of patterns with their properties and are manager using the song editor

    • *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs.

    • *.h2drumkit: a compressed and archived folder containing all sound samples composing a drumkit and a description XML file. Drumkits are basically group of sound samples.

    2.Main menu

    Projects: this menu offers file related functions.

    • New - Create a new song

    • Show Info - Set general properties of the song such as name, author, license and generic notes

    • Open - Open a song

    • Open Demo - Open a demo song (demo songs are stored in $INSTALLPATH/share/hydrogen/data/demo_songs)

    • Open recent - Open a menu showing last used songs

    • Save - Save changes to current song

    • Save as - Save current song specifying a name (default path: $HOME/.hydrogen/data/songs)

    • Open pattern - Open a saved pattern belonging to the current drumkit

    • Export pattern as - Saves a pattern. It will be stored in $HOME/.hydrogen/data/patterns/drumkit_name

    • Export MIDI file - Export current song in MIDI format

    • Export song - Export current song in WAV format

    • Quit - Quit Hydrogen

    Instruments: this menu offers instruments and drumkit (sound libraries) functions.

    • Add instrument - Add a new instrument to your current drumkit

    • Clear all - Delete all instruments from the current drumkit

    • Save library - Saves all instruments settings (and their sound samples) in $HOME/.hydrogen/data/library_name

    • Export library - Compress all instruments samples and settings in a drumkit in $HOME/.hydrogen/data/library_name

    • Import library - Imports another drumkit from the local filesystem or download it from a remote location through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen website for an example). To load another drumkit in your current working session of Hydrogen, read Sezione7.

    Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window.

    • Playlist editor - A tool to manage playlists.

    • Director - Open the director window.

    • Mixer - Open the mixer window.

    • Instrument rack - Open the instrument rack panel.

    • Preferences - Open the main preferences window. Read Sezione3 on how to configure Hydrogen.

    Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !).

    • Show audio engine info - Open a monitor with various stats

    • debug action - Insert debug commands.

    • Print Objects - Print on stdout current objects map.

    Info

    • User manual - Open a window with this manual :)

    • About - The usual window with license information, acknowledgements, etc.

    3.La toolbar principale

    Before analyzing the two main frames of Hydrogen, let's take a quick look at the main toolbar and its components:

    • Pilot the song using the start, stop, pause, etc. buttons

    • Choose between "pattern" or "song" mode: in "pattern" mode only the currently selected pattern will play, while in "song" mode all patterns inserted will be played.

    • An advanced tap tempo function: choose note length and how many notes to wait before recalculating BPM, then click the comma key repeatedly until the 'R' letter will appear and the BPM will be updated. (see Sezione3.1)

    • Manually set BPM

    • Manage JACK transport

    • Open the mixer and the instrument rack panels

    Figura2.1.The Main Toolbar

    The Main Toolbar

    • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

    • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see Sezione4). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see Sezione5).

    • Set measure type and Beat Counter (see Sezione3.1).

    • Imposta la velocita' di esecuzione (range: 30-400 bpm) [Hotkey = rotella del mouse] e bottone per attivare/disattivare il metronomo

    • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

    • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected.

    3.1.Tap Tempo and BeatCounter

    It is possible to change tempo at any time using the tap-tempo and BeatCounter features of Hydrogen. You can change these while playing or while the song is stopped. To change the tempo, hit the , (comma) key in tempo for the number of beats in the measure. After the correct number of beats are met, the tempo will change to the average tempo that you tapped in. If you continue to tap, these new taps will become a part of a rolling average. If you tap accidentally, or if you wait too long between taps, the tap tempo counter will start over.

    The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo on steroids. By default the BeatCounter display is not visible. To see the BeatCounter widget click the upright button (BC) between Song/Pattern mode selector and the BPM-widget. Or, it can be shown by pressing the comma key (,).

    The tempo that you tap will be considered even beats of the beat type. The beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change the beat type use the left arrow buttons. To change the number of beats that are counted, use the right arrow button. You can set from 2 to 16 beats. (I.e. if you set the beat to 6, you will have to tap 6 times before the new tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. Every time you tap with the comma key, it will show the number of taps that you have entered (1, 2, 3...).

    The button in the bottom right-hand controls the auto-start feature, and it toggles between S and P. When it shows P for (Play), the song will set the new tempo and automatically start to play after you tap the right number of beats (if it's not already playing, of course). This way, if you have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing on the next beat. When it shows S (for Set BPM), the auto-start is disabled.

    For example: Suppose you have a live band, Hydrogen, and a softsynth that is controlled by Seq24)... and you want them all to start at the same time. Set the beat type to 1/4 and the number of beats to 4. Enable auto-start (button shows P). Count off the band 1-2-3-4 (while tapping the comma key) — and everyone starts on 1.

    Another example: Same situation, but the song doesn't require Hydrogen or synths until some point later. During that time, a human (e.g. guitar player) will be setting the tempo. On the measure before Hydrogen is supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in on the next beat (at the right tempo).

    If you are using the JACK Transport, the BeatCounter continues to work. If another program is the JACK Transport Master, Hydrogen will respond to tempo change events from that application. Note that in this situation, Hydrogen is supposed to be a slave, so some of the BeatCounter features will be disabled or will not work properly. If Hydrogen is the JACK Transport Master, tempo changes from Hydrogen will be reflected in those programs (if they support it).

    Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see Sezione3.1 ). Here you will finde two spinboxes:

    • Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program.

    • Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated).

    Note that these can be set to positive (+) or negative (-) values. In order to find useful values for these, you will need to take some time to play with it. Also, you may want different values depending on the speed of your hardware, audio devices, drivers, etc. Using the BeatCounter effectively requires practice.

    4.Song Editor

    The "Song Editor" (Figura2.2) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel is a complete bar as shown in the underlying "Pattern Editor" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns.

    The Song Editor comes with 7 buttons:

    • Completely delete all patterns (asks for confirmation!).

    • Create a new pattern (and asks for a name).

    • Move currently selected pattern up or down.

    • Enable selecting patterns for copy & paste (Select Mode).

    • Enable Draw Mode.

    • Switch from "Single pattern mode" to "Stacked pattern mode" and back..

    Sotto i bottoni c'e' la lista dei pattern creati posizionati nel punto della canzone in cui verranno eseguiti (una casella == una battuta). Cliccare su una casella per aggiungere il pattern o eliminarlo. Cliccare col tasto destro del mouse sul nome del pattern fara' apparire un menu a tendina da cui si puo' modificarne il nome oppure eliminare. Non sono ammessi pattern con nomi identici.

    Figura2.2.The Song Editor

    The Song Editor

    5.Pattern Editor

    The "Pattern Editor" lets us create or modify the pattern (bar) which is currently selected. You can add/remove notes, and tune a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)

    First let's take a look at the (classic) 'Drum' mode :

    Figura2.3.Pattern Editor in Drum mode

    Pattern Editor in Drum mode


    5.1.Pattern Editor Controls

    The top part of the pattern editor contains a number of controls :

    Figura2.4.Pattern Editor Controls

    Pattern Editor Controls

    From left to right :

    • SIZE : lets you choose the size of the pattern (the number of bars)

    • RES : this is the current grid resolution (4 through 64)

      Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer.

    • HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern.

    • QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied.

    • Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your sound library as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

    • Note Length / Note off : these are 2 different ways to define the duration of a note. See Sezione5.3 for usage.

    • Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)

    5.2.Pattern Editor Drumkit

    The section on the left shows you what drumkit/library is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

    Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select

    • Clear notes : to remove all notes for this instrument in this pattern.

    • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

    • Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played.

    • Delete Instrument : well, deletes the instrument ;-)

    The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons.

    The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit/library. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys.

    Important Notes :

    The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default.

    Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

    Here's a quick reference of the above bindings for your convenience.

    5.3.Pattern Editor Sequence area

    This is where it all happens, this is where you can make music :-)

    In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

    If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note.

    (Figure above, from left >right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

    So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see Sezione2) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see Capitolo3 for a basic walk-through of how the pattern editor works)

    5.4.Pattern Editor Note Properties

    Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :

    • Velocity : how hard the note is played (the volume of the note)

      Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping.

    • Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)

    • Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)

    • Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'

      The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

    5.5.Pattern Editor Piano mode

    Drum mode (see Figura2.3) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

    You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.

    Figura2.5.Pattern Editor in Piano mode

    Pattern Editor in Piano mode

    6.Mixer

    Figura2.6.The Mixer

    The Mixer

    The Mixer frame (Figura2.6) is useful for tuning a global or single volume of the current drumkit. It shows the current peak (click on to disable, useful on old CPUs) and let you set the maximum peak allowed (tune with the fader knob of the instrument), lets you modify attributes like pan, play solo , mute or test play only that instrument ; selecting in the Pattern Editor an instrument causes a blue LED to light on (near the play button). Near the global volume knob, you can set 3 global effect such a swing (shifts a few notes back or forward not randomly), timing (modify timings of the notes) and humanize effect (random velocity editing).

    In addition to all this you can set up to 4 special LADSPA effects for each instrument switching the button. See next section for a detailed overview.

    7.Sound Library (Drumkit Manager)

    The Sound Library saves you time in managing your drum kits, favorite patterns, and favorite songs. When making new songs and drum kits, the Sound Library makes it easier for you to reuse and mix the instruments and patterns from other kits and songs.

    7.1.System Drumkits

    This lists the drumkits that were installed by your system administrator. It was determined by the compile-time prefix. On Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or possibly /usr/local/share/hydrogen/data/drumkits. These kits are available to all users on the system, and users are usually not able to add to them.

    To load a drumkit from here, right-click the drumkit and select Load. This will replace your current drumkit with the one that you selected. To load a single instrument from that kit, left-click the plus to the left of the drumkit's name to show all the instruments. With your left mouse button, click and drag the instrument into your current kit. The instrument will be added to the drumkit that you currently have loaded.

    7.2.User Drumkits

    These are your own drum kits that you can manage yourself. They are usually stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by selecting InstrumentsSave library.

    Loading drumkits and instruments to use is the same as for the System Drumkits (see Sezione7.1).

    7.3.Patterns in the Sound Library

    Before you save your favorite patterns to the sound library, be sure to edit it's properties by right-clicking and selecting Properties. There, you can give the pattern a title and a category. You can use one of the categories already provided, or create your own categories by simply typing in a category name. The category name is important, because the patterns will be filed by category in the Sound Library.

    You can save your favorite patterns in the sound library by right clicking the title of the pattern in the song editor, and selecting Save Pattern. It will appear in the Sound Library underneath Patterns and the category that you assigned to the pattern.

    7.4.Songs in the Sound Library

    To save songs in the Sound Library, put them in your data directory underneath the songs folder (usually $HOME/data/songs. To remove them, remove the file from that folder.

    8.Drumkits and Instrument Editing

    Creating a new drumkit with Hydrogen is done with the Instrument Editor. Using the instrument editor you can load samples, set envelope parameters, set the gain, and a few other advanced features like mute groups, low-pass resonance filter, and pitch randomization.

    Instead of creating your own drumkit, you can also use or download existing drumkits using the Sezione7.

    8.1.Concepts

    The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a note, the sample is simply played back at the right time. There's a few concepts and terms that you should understand when you are putting together a drumkit. (See Glossary for more detailed explanations.)

    Sampling Synthesizer Terms

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds long.

    Gain

    Volume adjustment.

    Velocity

    How hard you hit a note.

    ADSR Envelope Generator

    An Attack/Decay/Sustain/Release envelope generator. After you trigger a note, Hydrogen will attack the note by increasing its volume from 0 to the full velocity of the note. After reaching full velocity, it will decay the note by lowering the volume until it reaches the sustain level. When the note is released, Hydrogen reduces the volume from the sustain level back down to 0.

    Attack

    The amount of time to go from 0 to full velocity.

    Decay

    The amount of time to go from full velocity to the sustain volume.

    Sustain

    The level (how loud) to hold the note between the sustain and the release. It is a percentage of the velocity. It does not depend on time.

    Release

    The amount of time to go from the sustain volume back down to 0.

    Typical samples that are used in Hydrogen are: the sound of a single drum hit, the sound of a single cymbal hit, the sound of a single cowbell hit. Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen will play whatever sound you have loaded. So, to put together a drum kit you need to gather short recordings of the bass drum, each tom, each cymbal, the high hat open, the high hat closed, the snare drum (snare on), the snare drum (snare off), rim shots, etc.

    However, there are no rules about what a sample can be. It's not uncommon to use Hydrogen to trigger non-drum sounds like: audio clips of people talking, a clip from a song, sound effects, audio clips from movies, and famous people speaking. Be creative!

    8.2.Creating a New Drumkit

    To start a brand new drum kit, select InstrumentsClear All . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select Delete Instrument. To add more instruments, select InstrumentsAdd instrument .

    Select an instrument to start editing it. This is done by left-clicking on the name of the instrument in the instrument list (at the left). You will notice that the name of the instrument in the Instrument Editor matches the one that you clicked.

    After you have your drum kit working the way you want, select InstrumentsSave library . It will ask you for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace.

    Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits).

    To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select InstrumentsExport library from the menu. Select the drum kit that you wish to export, and give it a file name to save it to.

    8.3.Creating an Instrument and Layers

    For each instrument in a drum kit, you can load several samples and set different synthesizer parameters. This section will step you through how to create a new instrument and load the samples.

    To begin creating an instrument, select InstrumentsAdd instrument. This will give you a blank instrument to start from.

    Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides several in the data/drumkits directory.

    In the instrument editor, click on Layers. You can layer several samples into the instrument. Which one is played depends on the velocity of the incoming note. Click Load Layer and point the Audio File Browser to your sample. Note that the Audio File Browser will allow you to preview the sample before you load it. It will also allow you to load more than one sample at a time. But for now, only load one.

    After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To load a second sample, click the slot just below it, and then click Load Layer to bring in another sample.

    After bringing in both samples, you'll probably notice that only the first sample is being played whenever you trigger the instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light blue rectangles and you see that you get a left-right drag cursor. Now drag the sample to the left or right (like a curtain). You will now see Layer 2 appear.

    The velocity setting for the layer is 0-velocity on the left, and full velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)

    Now, in the pattern area, set up a simple pattern that plays this instrument. Adjust the velocity settings on each note so that you can get the different samples to sound. Now set the pattern to loop and notice how your different samples are getting triggered. (To learn about editing a pattern, see Sezione5)

    For each layer, you can set the Gain and the Pitch. The pitch also has a Fine adjustment.

    Use the Gain adjustment to control how loud the sample will play. This is necessary because it's extremely difficult to get a set of samples that all sound at about the same volume. By adjusting here, the samples that were recorded too quietly can be turned up to match your loud samples (that had to be turned down).

    Avvertimento

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    The pitch of the sample can be modified with the pitch controls. The Pitch knob adjust the pitch in musical half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts the pitch 50 cents. (One half-step is 100 cents.)

    Nota

    The pitch is adjusted by playing the sample back faster or slower. This is called the Dopplar Effect. So, if you have a 1-second sample that you turn down -12 (1 octave), you sample will only last for .5-seconds.

    8.4.Instrument Parameters

    In the instrument editor, click on the General button. Here you can adjust several parameters that are for the whole instrument (not for each layer). The parameters that you can adjust are:

    • Envelope parameters: Attack, Decay, Sustain, Release. (See Envelope Generator)

    • Gain: The overall volume of the instrument.

    • Mute Group: Which mute group this instrument is a member of (see Mute Group).

    • Filter Parameters: Bypass, Cutoff, Resonance.

    • Random Pitch

    It's important that you understand Sezione8.1 in order to continue on.

    8.4.1.Envelope Parameters

    When the instrument is triggered, its volume is run through an ADSR Envelope. The parameters operate as follows:

    • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. [1]

    • Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter.[1]

    • Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity.

    • Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available.[1]

    If the sample is shorter than the times that you specify, the sample will end, regardless of which phase of the ADSR it is in. If the note is sustained, it does not draw out the note while you are holding it. It only holds the gain (volume) parameter during that time.

    8.4.2.Gain and Mute Group

    The gain sets the overall volume for the sample. This gain is applied after the gain that you set for the layer, and before the gain that is set for the mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is set higher, the samples will be amplified.

    Avvertimento

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    Hydrogen provides more mute groups than you know what to do with (over 256). A mute group is a grouping of instruments that are mutually exclusive — only one instrument may be playing at any time. If one is playing and another instrument in the group is triggered, it will immediately silence (mute) and start playing the other instrument. This is useful, especially, for instruments like hi-hats where the open sound and the closed sound are different instruments.

    If the mute group is set to Off, then the instrument is not part of any mute grouping. If the mute group is set to any number, then that is the group that the instrument is a part of. To set other instruments into the same grouping, set their mute group parameter to the same number. (For example, to group all the high-hat instruments, you can set all their mute group parameters to 1. To have a snare drum mute group, set their mute group parameters to 2.)

    8.4.3.Filter and Random Pitch

    The filter is a low-pass resonance filter. If you don't wish to use is, click the BYPass button so that it's red. If it's not red, then the filter is active. The cutoff parameter adjusts the cutoff frequency for the filter. The resonance parameter adjusts how much to resonate the cutoff frequency. If the resonance is set to 0, then the filter is just a simple low-pass filter.

    Nota

    The cutoff frequency of the filter varies with the sample rate of your audio card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample rate.

    The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound more like a real drummer.

    8.5.Tips on Editing Instruments

    With all of the different parameters available to tweak, it can be difficult to set up something that sounds nice when you're done. Here's a few tips on setting up an instrument:

    Turn down the gain. Every time you have a gain knob (i.e. an amplifier), this is called a gain stage. With every gain stage you have, it's easy to overdrive your signal — which means the signal gets distorted by clipping. In addition, if you have two samples that, by themselves, peg your meters — what do you think happens when you combine them? That's right, you overdrive the signal again.

    If things sound bad and distorted, start by turning down the gain setting on the layer... especially if it's larger than 1.0. Then turn down the instrument gain. Then any gain on a LADSPA effect. Then the fader on the mixer. Then the master output fader.

    Test samples at full velocity. Your sample will be played louder if the velocity is higher. So, if you set everything to sound nice and full with velocity at 0.7, what will happen when you get a full velocity of 1.0? (Hint: clipping.)

    Try to use samples that are -6 dB max. Visually, this means samples that peak at only 1/2 of full scale. Otherwise, turn your layer gain to about .5.

    Remove all DC offsets from the sample. In a sample editor, there is usually a line down the center of your sample's waveform. This is the zero-line. The beginning of your sample should be on this line. The end of your sample should also be on this line. However, if your signal is a little above or a little below this line, you will hear a click at the beginning and the end of your sample whenever it is played. If your sample editor doesn't provide any tools to fix a DC Offset problem, you can eliminate the noise by putting a slight fade-in/out at the ends of your sample.

    The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the attack and delay — the sample will stop playing at the end.

    Things change with the sample rate. If you have a really nice setup with all your parameters painstakenly tweaked... things will change if you change the sample rate of your audio card. Many of Hydrogens internal settings and parameters are done based on how many samples go by, and not on how many seconds go by. The sort of things that change are: anything time-base (like attack and release) and anything frequency based (like the cutoff frequency).

    9.LADSPA plugins

    Hydrogen can also add effects to sounds using any LADSPA plugin library. You need to have installed the LADSPA sources (available from http://www.ladspa.org) and while this will give a rough idea of how it works you should really have a taste of the real thing installing one or more plugin libraries, it's as simple as a scons && scons install. Here are a few places to download plugin libraries:

    Plugins Kill

    A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others.

    Once you have installed a few plugins open a song you'd like add an effect to and select an instrument that has a few beats in the pattern. In the Mixer click on and select one of the four available effect line Click on the Edit button ( ), than on Select the FX: this will bring up another window (Figura2.7) that lets you choose an effect amongst those installed, they are alphabetically sorted and categorized. Once you're done, adjust the level from the mixer and start playing. Each round knob in the FX part controls the level of its effect. If you want to quickly enable/disable the effect click the Bypass ( ) button.

    Figura2.7.Select an Effect

    Select an Effect



    [1] The attack, decay, and release parameters are all set by the number of audio samples. This means that the time changes depending on the sample rate of your sound card. The max time for each of them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz).

    Capitolo3.Creazione di una canzone

    1.Modalita' song e modalita' pattern

    Questa sezione dara' alcune indicazioni di massima sull'uso di Hydrogen. Riferirsi al tutorial per una guida piu' approfondita.

    Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to Sezione3 for the buttons to activate). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern untill it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns, to create the structure of the song.

    2.Creazione pattern

    We'll start from an empty song with an empty pattern, as created by default: "pattern" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor (Figura3.1) simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!

    Figura3.1.The Pattern Editor

    The Pattern Editor

    3.Creazione sequenza

    Once patterns are created (Figura3.2), we can copy/paste/delete them simply dragging with the mouse (activate the select mode for the Song Editor and keep pressed left mouse button to select those you want to move or copy).

    Figura3.2.Inserting Notes in a Pattern

    Inserting Notes in a Pattern

    4.Operazioni sul mixer

    Ovviamente in qualsiasi momento e' possibile aprire ed utilizzare la finestra del mixer (Fig. 14), sia durante la fase di creazione dei pattern, sia durante l'esecuzione delle sequenze.

    The Mixer frame (Figura3.3) is made of 32 independent tracks, each of these is binded to an instrument, plus a "Master Output" line to adjust general output volume and a "FX" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in Figura3.3 you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter.

    Figura3.3.The Mixer

    The Mixer

    Capitolo4.Shortcut lists

    • [CTRL + N] = New Project

    • [CTRL + O] = Apre file.

    • [CTRL + D] = Open Demo

    • [CTRL + S] = Salva file.

    • [CTRL + SHIFT + S] = Save File as

    • [CTRL + P] = Export Pattern as

    • [CTRL + M] = Export MIDI file

    • [CTRL + E] = Export Song

    • [CTRL + Q] = Quit Hydrogen

    • [ALT + B] = Show Director window

    • [ALT + M] = Show Mixer window

    • [ALT + I] = Show Instrument rack

    • [ALT + P] = Show Preferences window

    • [CTRL + ?] = Show manual

    • [Backspace] = Ricomincia la canzone o il pattern da capo.

    • [spacebar] = Play / Pause

    • [,] (comma key) = Tap tempo (beatcounter)

    Glossary

    This is a glossary of general terms encountered when using Hydrogen, synthesizers, drums, or samplers. The definitions in the text are simplified, but the definitions here are more general and have more explanation. For example, the text of the manual would have you believe that an ADSR is the only kind of envelope generator, and could only ever control the volume. While it's simple for new users, it's not quite right.

    ADSR

    A type of envelope generator that allows you to control the Attack, Decay, Sustain, and Release parameters. Generally, the parameters are proportional to the velocity.

    In Hydrogen, the ADSR envelope generator only controls the volume (attenuation).

    Read more about this in the Wikipedia Article ADSR Envelope

    Vedi anche Envelope Generator, Attack, Decay, Sustain, Release.

    Attack

    This is the first phase of an ADSR envelope, and is the amount of time to turn the parameter up from 0 to full velocity after triggering the note.

    Vedi anche ADSR.

    Attenuation

    In filters and mixers, this the amount that a signal is reduced (volume).

    Vedi anche Roll-off.

    Band-Pass Filter

    A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter.

    Vedi anche Filter, High-Pass Filter, Low-Pass Filter.

    Clipping

    A phenomenon that happens to a signal when the signal is too large for whatever is receiving it. The peaks of the signal (which are normally smooth curves) get cut off straight at the max volume (clipped). This distorts the sound and is usually undesirable.

    An example of clipping is when you play music louder than your speaker can handle. Parts of the music sound harsh and fuzzy.

    Cutoff Frequency

    On high-pass and low-pass filters, this is the frequency that divides between those that pass, and those that are attenuated (silenced). In a high-pass resonance filter, or a low-pass resonance filter, the cutoff is also the frequency zone that gets boosted.

    For example, if you have a low-pass filter and you set the cutoff frequency high (i.e. 20kHz)... the filter will not affect the sound. All the audible frequencies will pass through undisturbed. As you lower the cutoff frequency to something like 40 Hz (the low string on a bass guitar), it sounds like someone is putting a blanket over the speaker. The higher frequencies are being attenuated above 30 Hz.

    Vedi anche Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Decay

    After reaching full velocity from the attack, this is the amount of time to turn the parameter down from full velocity to the sustain level.

    Vedi anche ADSR.

    Envelope Generator

    A way to control (change) a parameter over time as a response to triggering, holding, and releasing a note.

    Did your eyes just glaze over? Let's try again:

    Imagine that you're playing a note on the keyboard and you have your other hand on a knob (volume, filter cutoff, etc.). As you play the note, you twist the knob (often up, then down... or down, then up). You do the same thing on each note. That's what an envelope generator does. See also ADSR

    Fader

    A slider control used to adjust the attenuation (volume) in a mixer. Faders always have an "audio" taper, which means that the attenuation amount changes on an exponential scale.

    Filter

    A device that changes a sound by attenuating specific frequencies. A tone knob is an example of a simple, low-pass filter.

    Vedi anche Band-Pass Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Gain

    In an amplifier, this adjust how much (or how little) a signal is amplified (volume). A higher gain value is a louder signal.

    High-Pass Filter

    A filter that attenuates (silences) low frequencies, but allows high frequencies to pass through.

    Vedi anche Filter, Cutoff Frequency.

    Instrument

    In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, or a tom).

    Layer

    In an instrument you can load several different samples (each one called a layer), and have a different sample play depending on the velocity of the note. Only one sample at a time will play.

    Suppose you have a sample of a floor tom being struck softly. If you simply play the sample louder — it will not sound the same as a real tom that has been struck very hard. If you wish to mimic this in your instrument, you can load one sample for soft playing, and a different sample for loud playing.

    Vedi anche Instrument.

    Low-Pass Filter

    A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through.

    Vedi anche Filter, Cutoff Frequency.

    Mute

    To make no noise. A setting on an instrument that prevents any audio output.

    Mute Group

    A group of instruments (samples) that should mute (stop playing) immediately after another instrument in the group is triggered.

    This is typically used in hi-hats, where there's a different instrument (sample) for when the hi-hat is open or closed. With a real hi-hat, the sound of the open hi-hat will stop as soon as you close it. However, if you use two samples — the open sound will continue even after you have triggered the closed sound. By placing both instruments in the same mute group (group #1, for example)... triggering closed sound will immediately stop the open sound (and vice versa).

    Octave

    A span of frequencies where the top-most frequency is exactly twice the frequency of the bottom frequency.

    For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they sound like the same distance.

    Release

    After the note is released, this is the amount of time to reduce the parameter from the sustain level to 0.

    Vedi anche ADSR.

    Resonance

    When referring to a resonance filter, this is the parameter that determines how much of a boost (gain) to give the frequencies at the cutoff.

    Vedi anche Resonance Filter.

    Resonance Filter

    A filter that gives a large boost to a very narrow range of frequencies. Typically it will be part of a high-pass or a low-pass filter, where the boosted frequencies are centered on the cut-off frequency.

    Vedi anche Filter, Cutoff Frequency, Resonance.

    Roll-off

    This is the amount that frequencies are attenuated (suppressed) as the frequency changes (typically measured in dB/octave).

    For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency.

    Vedi anche Attenuation, Filter.

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds long.

    Sustain

    The level to hold the parameter after finishing the decay time. This level will be maintained until the not is released.

    Vedi anche ADSR.

    Velocity

    How hard you hit a note.

    MIDI devices are required to send this information along with the note. Synthesizers use this information to adjust several parameters on the sample (typically the volume). In Hydrogen, it is only used to adjust how loud the sample is played back.

    hydrogen-0.9.6-beta3/data/doc/manual_it.po000066400000000000000000003316051211146647700203510ustar00rootroot00000000000000#, fuzzy msgid "" msgstr "" "POT-Creation-Date: 2009-04-11 12:57-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Content-Type: text/plain; charset=UTF-8\n" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:219(None) msgid "" "@@image: 'img/PreferencesAudioSystem.png'; " "md5=2cbcf26e128bec63fae694af120c51d6" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:281(None) msgid "" "@@image: 'img/PreferencesMidiSystem.png'; " "md5=a0f8cb05143d95b13b6aed599fbe4430" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:297(None) msgid "" "@@image: 'img/PreferencesAppearance.png'; " "md5=0e8d04f6fc536d2f56233783730ba852" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:314(None) msgid "" "@@image: 'img/AudioEngineInfoDialog.png'; " "md5=2409544da903ec8b9f08edb34bcb54ae" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:429(None) msgid "@@image: 'img/MainToolbar.png'; md5=4f5dddc0a6fc51b5b98bbfd5dd1ebfd0" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:437(None) msgid "" "@@image: 'img/background_Control.png'; md5=0405af224f62d2e360cb2656379cbd66" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:443(None) msgid "" "@@image: 'img/background_Mode.png'; md5=b2ca832b899e6ec073f6d700c9c8e178" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:447(None) msgid "@@image: 'img/background_BPM.png'; md5=0729e6f172d37cde37dc6dd69d7df9e9" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:451(None) msgid "@@image: 'img/cpuload.png'; md5=bfceb68aa39947b9d8fce81d70350d56" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:455(None) msgid "@@image: 'img/midi_in.png'; md5=302ded0d23140e8bf169a137ea7695b5" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:459(None) msgid "@@image: 'img/jack_transport.png'; md5=a3510cfd235f685a5a5f4788ba4aa6a3" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:616(None) msgid "@@image: 'img/bg_topPanel.png'; md5=ac7d11337eca92242e28918f8acf4281" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:625(None) msgid "@@image: 'img/btn_clear_off.png'; md5=506e17500965351186046e8d4675e298" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:632(None) msgid "@@image: 'img/btn_new_on.png'; md5=5cff0140de1a7304dd60b3cacea9e71d" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:639(None) manual.docbook:705(None) msgid "@@image: 'img/btn_updown.png'; md5=4e40841f9213616bceba8538be720204" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:648(None) msgid "@@image: 'img/btn_select.png'; md5=0d4dd148b47cfbb6054cc598a901e511" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:655(None) msgid "@@image: 'img/btn_draw.png'; md5=834dbbf9b0b8f3d1343851d1529bffde" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:662(None) msgid "" "@@image: 'img/btn_pattern_mode.png'; md5=cfda76720e17b1b73a391b03d30a1f01" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:677(None) manual.docbook:1570(None) msgid "@@image: 'img/SongEditor.png'; md5=8580fa158929130b0af2f7aa08abf489" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:697(None) msgid "@@image: 'img/btn_hear_on.png'; md5=dc908c7a82db7350c7c7b6e79bb4e8ba" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:713(None) msgid "@@image: 'img/btn_quant_off.png'; md5=d52c33c75ff5b690ea357fe170060d36" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:724(None) manual.docbook:1554(None) msgid "@@image: 'img/PatternEditor.png'; md5=967f9e6860c1b53170ca33f13a4afbd5" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:745(None) msgid "" "@@image: 'img/PatternEditorInstr.png'; md5=aa7b047b212826d380d6afa3d54f40a2" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:754(None) msgid "" "@@image: 'img/btn_record_over.png'; md5=88def8ff2487f8cb71501d67a74d89d1" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:795(None) msgid "@@image: 'img/tastiera.png'; md5=344cc621fc42d367ff50ec3b01017b04" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:809(None) manual.docbook:1638(None) msgid "@@image: 'img/Mixer.png'; md5=150e569dd12b279484bd2066c08dbd85" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:818(None) msgid "@@image: 'img/showPeaks_on.png'; md5=4475949f7c1f11157b8cfb623022e27b" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:826(None) manual.docbook:1595(None) #: manual.docbook:1617(None) msgid "@@image: 'img/btn_solo_on.png'; md5=275a1dd4a4cd6b5b93a0cc6d0d2ca497" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:834(None) manual.docbook:1601(None) #: manual.docbook:1626(None) msgid "@@image: 'img/btn_mute_on.png'; md5=2313bb2e4cf132f8fbfbe46e6505f5c6" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:842(None) manual.docbook:1589(None) msgid "" "@@image: 'img/btn_play_on_mixer.png'; md5=2eb3b919753b61020e06fe2dda6529ad" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:854(None) manual.docbook:1480(None) msgid "@@image: 'img/showFX_on.png'; md5=faaad6e9491dac7d3478b96e87b1ecc5" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:863(None) msgid "@@image: 'img/MixerFX.png'; md5=af1f625d71ffb19d140a2a6e15e64102" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:1488(None) msgid "@@image: 'img/edit_off.png'; md5=125b96a529eb2984de90da816a21f2ef" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:1496(None) msgid "@@image: 'img/MixerFXKnob.png'; md5=687a99626a7e1aecdb9b45506380ec5b" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:1504(None) msgid "@@image: 'img/bypass_over.png'; md5=de70b2610957f2c6d494b5951193eb8f" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:1516(None) msgid "@@image: 'img/MixerFXSelect.png'; md5=d21233583479b7309fc704f9693d97b7" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:1609(None) msgid "@@image: 'img/MixerPan.png'; md5=5a331fe0240cfd3cabcf48c68fb11f11" msgstr "" #: manual.docbook:7(title) msgid "Hydrogen Manual" msgstr "Hydrogen Manual" #: manual.docbook:10(firstname) msgid "Antonio" msgstr "" #: manual.docbook:11(surname) msgid "Piraino" msgstr "" #: manual.docbook:14(firstname) msgid "Alessandro" msgstr "" #: manual.docbook:15(surname) msgid "Cominu" msgstr "" #: manual.docbook:19(date) msgid "22/may/2005" msgstr "" #: manual.docbook:22(para) #, fuzzy msgid "" "Hydrogen is a software synthesizer which can be used alone, emulating a drum " "machine based on patterns, or via an external MIDI keyboard/sequencer " "software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter " "is still experimental, so ask in the developers mailing list for further " "details." msgstr "" "Hydrogen e' un sintetizzatore software in grado di essere utilizzato sia " "singolarmente, emulando una drum machine basata su pattern, sia come synth " "comandato via midi da una tastiera esterna o da un sequencer software." #: manual.docbook:35(title) msgid "Introduction" msgstr "Introduzione" #: manual.docbook:38(title) msgid "Download" msgstr "Download" #: manual.docbook:39(para) #, fuzzy msgid "" "The latest stable version of hydrogen is available as a tarball at http://www.hydrogen-music." "org." msgstr "" "L'ultima versione stabile di Hydrogen e' disponibile all'indirizzo http://hydrogen.sourceforge.net oppure http://hydrogen-music." "org" #: manual.docbook:43(para) #, fuzzy msgid "" "It is possible to download the latest source files directly from our " "subversion server with: $ svn co http://" "svn.assembla.com/svn/hydrogen/trunk A certain release can " "be fetched with: $ svn co http://svn." "assembla.com/svn/hydrogen/tags/0.9.3" msgstr "" "bash$ cvs -z3 -d:pserver:anonymous@cvs.hydrogen." "sourceforge.net:/cvsroot/hydrogen co hydrogen" #: manual.docbook:56(para) #, fuzzy msgid "qt (>= 4.0) at " msgstr "" "qt (>= 3.2) reperibili presso http://" "www.trolltech.com" #: manual.docbook:59(para) #, fuzzy msgid "libsndfile at " msgstr "" "libsndfile reperibili presso http://www.mega-nerd.com/libsndfile/" #: manual.docbook:63(para) #, fuzzy msgid "" "ALSA (>= 1.x) at (only if " "you wish to use ALSA as audio driver)" msgstr "" "ALSA (>= 1.x) reperibili presso http://www.alsa-project.com (se si vuole usare i driver ALSA pert " "l'output audio)" #: manual.docbook:66(para) #, fuzzy msgid "" "Jack Audio Connection Kit (>= 0.80) at (only if you wish to use Jack as audio driver)" msgstr "" "Jack Audio Connection Kit (>= 0.80) reperibili presso http://jackit.sourceforge.net (se si vuole " "usare i driver JACK pert l'output audio)" #: manual.docbook:69(para) #, fuzzy msgid "" "PortAudio at (only if you wish to " "use PortAudio as audio driver)" msgstr "" "ALSA (>= 1.x) reperibili presso http://www.alsa-project.com (se si vuole usare i driver ALSA pert " "l'output audio)" #: manual.docbook:72(para) #, fuzzy msgid "" "Flac at (only if you wish to use flac " "samples)" msgstr "" "Jack Audio Connection Kit (>= 0.80) reperibili presso http://jackit.sourceforge.net (se si vuole " "usare i driver JACK pert l'output audio)" #: manual.docbook:75(para) #, fuzzy msgid "" "ladspa at (only if you wish to use ladspa " "effects)" msgstr "" "ALSA (>= 1.x) reperibili presso http://www.alsa-project.com (se si vuole usare i driver ALSA pert " "l'output audio)" #: manual.docbook:78(para) #, fuzzy msgid "" "liblrdf at (only if you wish to use " "lrdf to categorise effects)" msgstr "" "Jack Audio Connection Kit (>= 0.80) reperibili presso http://jackit.sourceforge.net (se si vuole " "usare i driver JACK pert l'output audio)" #: manual.docbook:81(para) #, fuzzy msgid "" "lash at (only if you wish to use " "lash)" msgstr "" "ALSA (>= 1.x) reperibili presso http://www.alsa-project.com (se si vuole usare i driver ALSA pert " "l'output audio)" #: manual.docbook:52(para) msgid "" "Compiling Hydrogen depends on the following libraries: " "Please install them with your distribution's package manager. If you're " "running a debian-based system, you can install the libraries with: \n" "\t$ apt-get install libqt4-dev g++ libasound2-dev " "\\\n" "\tlibjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \\\n" "\tliblash-dev libportaudio-dev libportmidi-dev " msgstr "" #: manual.docbook:94(title) msgid "Build" msgstr "Compilazione" #: manual.docbook:95(para) #, fuzzy msgid "" "Decompress the tarball or go to the directory where the subversion copy was " "checked out: \n" "\t$ cd hydrogen-*\n" "\t$ scons\n" "\t$ su -c \"scons install\"\n" "\t\t " msgstr "" "bash$ cd hydrogen-*\n" "bash$ ./configure\n" "bash$ make\n" "bash$ su -c \"make install\"" #: manual.docbook:104(para) msgid "" "Before compiling, check for additional options with: \n" "\t$ scons --help\n" "\t\t If you want to use features which are not enabled by " "default (for instance PortAudio), you can enable them with: \n" "\t$ scons portaudio=1\n" "\t\t Namely, if you get some error while running Hydrogen and " "you want to report it remember to configure hydrogen with: \n" "\t$ scons debug=1\n" "\t\t To clean up compiled code: \n" "\t$ scons -c\n" "\t\t " msgstr "" #: manual.docbook:193(title) #, fuzzy msgid "Audio preferences" msgstr "Preferences dialog" #: manual.docbook:194(para) msgid "" "First of all you should make shure that the audio engine is configured " "properly. The preferences dialog can be accessed via the tools menu (tools -" "> preferences)." msgstr "" #: manual.docbook:202(title) msgid "The Audio System tab" msgstr "" #: manual.docbook:204(para) msgid "" "From the \"Audio System\" tab () it is possible to modify the audio driver being used (OSS, Jack, ALSA, " "PortAudio) with its buffer and sampling rate (unless using JACK, in this " "case the audio driver configuration should happen before starting the JACK " "server)." msgstr "" #: manual.docbook:206(para) msgid "" "We can set some features of Hydrogen like \"Enable track outputs\" useful if " "you want to add effects to a single instrument with jack-rack. \"Connect to " "Default Output Pair\" connects the output to the default ports: uncheck this " "if you want to connect JACK output to other ports without disconnecting them " "first" msgstr "" #: manual.docbook:209(para) msgid "" "Keep also an eye on the value of \"Polyphony\": depending on your CPU you " "may want to change the max simultaneous notes in order to prevent hydrogen " "from overunning the audio driver." msgstr "" #: manual.docbook:216(title) #, fuzzy msgid "The Audio System Tab" msgstr "Audio engine info" #: manual.docbook:224(para) msgid "The following drivers are available:" msgstr "" #: manual.docbook:231(para) #, fuzzy msgid "" "jackd: The Jack driver is a professional " "audio server which permits very low lag and exchanges with other audio " "software. We strongly recommend using this driver to have the best " "out of Hydrogen. JACK server will start automatically if not " "already running." msgstr "" "Il driver Jack necessita del server audio Jack (Jack Audio Connection Kit), un server audio " "professionale col quale e' possibile raggiungere bassissime latenze e " "l'interoperabilta' con altri software audio. Raccomandiamo " "fortemente di usare questo driver per ottenere il meglio da Hydrogen." #: manual.docbook:239(para) #, fuzzy msgid "" "ALSA: the widely adopted Linux standard " "audio drivers" msgstr "Fig. 2 Il Pattern Editor" #: manual.docbook:246(para) #, fuzzy msgid "" "OSS: The Oss audio driver uses /dev/dsp " "and it's based on the OSS interface which is supported by the vast majority " "of sound cards available for linux; this said, the use of this audio driver " "blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other " "software. Use it as last resort." msgstr "" "Il driver Oss utilizza il device /dev/dsp ed e' basato sull'interfaccia OSS " "che e' supportata dalla maggior parte delle schede audio disponibili per " "linux. Purtroppo l'uso di questo driver blocca il device /dev/dsp fino alla " "chiusura del programma stesso, rendendo impossibile l'utilizzo del device ad " "altri programmi audio." #: manual.docbook:256(para) #, fuzzy msgid "" "PortAudio: an open-source multiplatform " "audio driver" msgstr "Fig. 2 Il Pattern Editor" #: manual.docbook:263(para) #, fuzzy msgid "" "CoreAudio: a driver for Mac OS X " "(experimental)" msgstr "Fig. 4 La linguetta Audio System." #: manual.docbook:272(title) msgid "The Midi System tab" msgstr "" #: manual.docbook:273(para) msgid "" "The \"Midi System\" tab () " "concerns the MIDI input. You can choose the MIDI driver and input, setup " "channels, binding actions to MIDI events." msgstr "" #: manual.docbook:278(title) msgid "The MIDI System Tab" msgstr "" #: manual.docbook:288(title) msgid "The Appearance tab" msgstr "" #: manual.docbook:289(para) msgid "" "The \"Appearance\" tab () " "let's you to modify Hydrogen and QT graphical properties." msgstr "" #: manual.docbook:294(title) msgid "The Appearance Tab" msgstr "" #: manual.docbook:305(title) #, fuzzy msgid "The Audio Engine tab" msgstr "Audio engine info" #: manual.docbook:306(para) msgid "" "The audio engine info is a window with various stats about Hydrogen and the " "audio driver. In case JACK is used, buffer and sampling rate should be set " "before starting Hydrogen (JACK automatically starts when an application " "tries to connect)." msgstr "" #: manual.docbook:311(title) #, fuzzy msgid "The Audio Engine Info Window" msgstr "Audio engine info" #: manual.docbook:329(title) msgid "Using Hydrogen" msgstr "" #: manual.docbook:332(title) msgid "Used Filetypes" msgstr "" #: manual.docbook:333(para) msgid "Before working with Hydrogen, please familiarize with these filetypes:" msgstr "" #: manual.docbook:336(para) msgid "" "*.h2pattern: XML file describing a single " "pattern. Patterns are group of beats and are managed in the pattern editor." msgstr "" #: manual.docbook:339(para) msgid "" "*.h2song: XML file describing the whole " "song (or sequence). Songs are group of patterns with their properties and " "are manager using the song editor" msgstr "" #: manual.docbook:342(para) msgid "" "*.h2playlist: XML file describing a " "playlist.A Playlist is a (ordered) group of songs." msgstr "" #: manual.docbook:345(para) msgid "" "*.h2drumkit: a compressed and archived " "folder containing all sound samples composing a drumkit and a description " "XML file. Drumkits are basically group of sound samples." msgstr "" #: manual.docbook:351(title) #, fuzzy msgid "Main menu" msgstr "Menu" #: manual.docbook:352(para) #, fuzzy msgid "" "Projects: this menu offers file related " "functions." msgstr "" "Fig. 13 Stiamo inserendo note nel pattern" #: manual.docbook:355(para) #, fuzzy msgid "New - Create a new song" msgstr "Fig. 6 La linguetta Appereance" #: manual.docbook:356(para) msgid "" "Show Info - Set general properties of the song such as " "name, author, license and generic notes" msgstr "" #: manual.docbook:357(para) #, fuzzy msgid "Open - Open a song" msgstr "[CTRL + O] = Apre file." #: manual.docbook:358(para) msgid "" "Open Demo - Open a demo song (demo songs are stored in " "$INSTALLPATH/share/hydrogen/data/demo_songs)" msgstr "" #: manual.docbook:359(para) #, fuzzy msgid "Open recent - Open a menu showing last used songs" msgstr "[CTRL + O] = Apre file." #: manual.docbook:360(para) #, fuzzy msgid "Save - Save changes to current song" msgstr "[CTRL + S] = Salva file." #: manual.docbook:361(para) msgid "" "Save as - Save current song specifying a name (default " "path: $HOME/.hydrogen/data/songs)" msgstr "" #: manual.docbook:362(para) #, fuzzy msgid "" "Open pattern - Open a saved pattern belonging to the " "current drumkit" msgstr "" "[Backspace] = Ricomincia la canzone o il " "pattern da capo." #: manual.docbook:363(para) msgid "" "Export pattern as - Saves a pattern. It will be stored " "in $HOME/.hydrogen/data/patterns/drumkit_name" msgstr "" #: manual.docbook:364(para) #, fuzzy msgid "" "Export MIDI file - Export current song in MIDI format" msgstr "Fig. 11 Esporta un drumkit." #: manual.docbook:365(para) #, fuzzy msgid "Export song - Export current song in WAV format" msgstr "Fig. 11 Esporta un drumkit." #: manual.docbook:366(para) #, fuzzy msgid "Quit - Quit Hydrogen" msgstr "Fig. 3 Il mixer" #: manual.docbook:371(para) msgid "" "Instruments: this menu offers instruments " "and drumkit (sound libraries) functions." msgstr "" #: manual.docbook:373(para) #, fuzzy msgid "" "Add instrument - Add a new instrument to your current " "drumkit" msgstr "" "[Backspace] = Ricomincia la canzone o il " "pattern da capo." #: manual.docbook:374(para) #, fuzzy msgid "" "Clear all - Delete all instruments from the current " "drumkit" msgstr "" "[Backspace] = Ricomincia la canzone o il " "pattern da capo." #: manual.docbook:375(para) msgid "" "Save library - Saves all instruments settings (and " "their sound samples) in $HOME/.hydrogen/data/library_name" msgstr "" #: manual.docbook:376(para) msgid "" "Export library - Compress all instruments samples and " "settings in a drumkit in $HOME/.hydrogen/data/library_name" msgstr "" #: manual.docbook:377(para) msgid "" "Import library - Imports another drumkit from the local " "filesystem or download it from a remote location through an XML feed. The " "XML file that should be provided is NOT " "RSS compliant (see Hydrogen website for an example). To load another " "drumkit in your current working session of Hydrogen, read ." msgstr "" #: manual.docbook:381(para) msgid "" "Tools: opens the mixer, the playlist " "editor, the instrument rack and the general preferences window." msgstr "" #: manual.docbook:383(para) msgid "Playlist editor - A tool to manage playlists." msgstr "" #: manual.docbook:384(para) #, fuzzy msgid "Mixer - Open the mixer window." msgstr "Fig. 14 Dettaglio del Mixer" #: manual.docbook:385(para) #, fuzzy msgid "Instrument rack - Open the instrument rack panel." msgstr "" "Fig. 13 Stiamo inserendo note nel pattern" #: manual.docbook:386(para) msgid "" "Preferences - Open the main preferences window. Read " " on how to configure Hydrogen." msgstr "" #: manual.docbook:390(para) msgid "" "Debug: tools mainly for debugging and " "monitoring Hydrogen (only available when compiled with debug support)." msgstr "" #: manual.docbook:392(para) msgid "" "Show audio engine info - Open a monitor with various " "stats" msgstr "" #: manual.docbook:393(para) #, fuzzy msgid "debug action - Insert debug commands." msgstr "Fig. 10 Importa un drumkit." #: manual.docbook:394(para) msgid "" "Print Objects - Print on stdout current objects map." msgstr "" #: manual.docbook:398(emphasis) msgid "Info" msgstr "" #: manual.docbook:400(para) msgid "User manual - Open a window with this manual :)" msgstr "" #: manual.docbook:401(para) msgid "" "About - The usual window with licence information, " "acknowledgements, etc." msgstr "" #: manual.docbook:411(title) msgid "The main toolbar" msgstr "La toolbar principale" #: manual.docbook:412(para) #, fuzzy msgid "" "Before analyzing the two main frames of Hydrogen, let's take a quick look at " "the main toolbar and its components:" msgstr "" "Prima di analizzare i due frame di Hydrogen, soffermiamoci brevemente sulla " "barra degli strumenti principale:" #: manual.docbook:415(para) msgid "Pilot the song using the start, stop, pause, etc. buttons" msgstr "" #: manual.docbook:416(para) msgid "" "Choose between \"pattern\" or \"song\" mode: in \"pattern\" mode only the " "currently selected pattern will play, while in \"song\" mode all patterns " "inserted will be played." msgstr "" #: manual.docbook:417(para) msgid "" "An advanced tap tempo function: choose note length and how many notes to " "wait before recalculating BPM, then click the comma key repeatedly until the " "'R' letter will appear and the BPM will be updated. (see )" msgstr "" #: manual.docbook:418(para) msgid "Manually set BPM" msgstr "" #: manual.docbook:419(para) msgid "Manage JACK transport" msgstr "" #: manual.docbook:420(para) msgid "Open the mixer and the instrument rack panels" msgstr "" #: manual.docbook:425(title) #, fuzzy msgid "The Main Toolbar" msgstr "La toolbar principale" #: manual.docbook:439(para) msgid "" "Main controls to start [Hotkey = Spacebar], stop, fast forward, rewind, loop a song or a pattern." msgstr "" "Controlli principali per far partire [Hotkey = barra " "spaziatrice], fermare, scorrere avanti e indietro oppure eseguire " "continuamente un pattern o una canzione." #: manual.docbook:444(para) msgid "Set Pattern/Song Mode." msgstr "Impostatzione modalita' Pattern/Song." #: manual.docbook:448(para) msgid "" "Set speed of playing (range: 30-400 bpm) [Hotkey = " "mouse wheel] and button to enable/disable metronome" msgstr "" "Imposta la velocita' di esecuzione (range: 30-400 bpm) [Hotkey = rotella del mouse] e bottone per attivare/" "disattivare il metronomo" #: manual.docbook:452(para) msgid "Shows CPU load." msgstr "Mostra il carico sulla CPU." #: manual.docbook:456(para) msgid "Shows MIDI events." msgstr "Mostra l'input MIDI." #: manual.docbook:460(para) msgid "" "Click to enable Jack transport: Hydrogen will work as 'slave' with another " "'master' program (e.g. Ardour). This applet is only available if Jack Audio " "Driver is selected." msgstr "" "Cliccare per selezionare la funzione di Jack Transport: Hydrogen funzionera' " "come 'slave' con un altro programma 'master' (es. Ardour). Questa applet " "appare solo se il driver audio Jack e' selezionato." #: manual.docbook:463(para) msgid "Other useful keybindings (not customizable for the moment):" msgstr "Altre utili scorciatoie da tastiera (non modificabili al momento):" #: manual.docbook:467(para) msgid "[CTRL + O] = Open File" msgstr "[CTRL + O] = Apre file." #: manual.docbook:472(para) msgid "[CTRL + S] = Save File" msgstr "[CTRL + S] = Salva file." #: manual.docbook:477(para) msgid "" "[Backspace] = Restart song or pattern " "from the beginning" msgstr "" "[Backspace] = Ricomincia la canzone o il " "pattern da capo." #: manual.docbook:484(title) msgid "Tap Tempo and BeatCounter" msgstr "" #: manual.docbook:486(para) msgid "" "It is possible to change tempo at any time using the tap-tempo and " "BeatCounter features of Hydrogen. You can change these while playing or " "while the song is stopped. To change the tempo, hit the , " "(comma) key in tempo for the number of beats in the measure. After the " "correct number of beats are met, the tempo will change to the average tempo " "that you tapped in. If you continue to tap, these new taps will become a " "part of a rolling average. If you tap accidentally, or if you wait too long " "between taps, the tap tempo counter will start over." msgstr "" #: manual.docbook:499(para) msgid "" "The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo " "on steroids. By default the BeatCounter display is not visible. To see the " "BeatCounter widget click the upright button (BC) " "between Song/Pattern mode selector and the BPM-widget. Or, it can be shown " "by pressing the comma key (,)." msgstr "" #: manual.docbook:507(para) msgid "" "The tempo that you tap will be considered even beats of the beat type. The " "beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note " "beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change " "the beat type use the left arrow buttons. To change the number of beats that " "are counted, use the right arrow button. You can set from 2 to 16 beats. (I." "e. if you set the beat to 6, you will have to tap 6 times before the new " "tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. Every " "time you tap with the comma key, it will show the number of taps that you " "have entered (1, 2, 3...)." msgstr "" #: manual.docbook:522(para) msgid "" "The button in the bottom right-hand controls the auto-start feature, and it " "toggles between S and P. When it " "shows P for (Play), the song will " "set the new tempo and automatically start to play after you tap the right " "number of beats (if it's not already playing, of course). This way, if you " "have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing " "on the next beat. When it shows S (for Set " "BPM), the auto-start is disabled." msgstr "" #: manual.docbook:536(para) msgid "" "For example: Suppose you have a live band, Hydrogen, and a softsynth that is " "controlled by Seq24)... and you want them all to start at the same time. Set " "the beat type to 1/4 and the number of beats to 4. Enable auto-start (button " "shows P). Count off the band 1-2-3-4 (while tapping the " "comma key) — and everyone starts on 1." msgstr "" #: manual.docbook:545(para) msgid "" "Another example: Same situation, but the song doesn't require Hydrogen or " "synths until some point later. During that time, a human (e.g. guitar " "player) will be setting the tempo. On the measure before Hydrogen is " "supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in " "on the next beat (at the right tempo)." msgstr "" #: manual.docbook:553(para) msgid "" "If you are using the JACK Transport, the BeatCounter continues to work. If " "another program is the JACK Transport Master, Hydrogen will respond to tempo " "change events from that application. Note that in this situation, Hydrogen " "is supposed to be a slave, so some of the BeatCounter " "features will be disabled or will not work properly. If Hydrogen is the JACK " "Transport Master, tempo changes from Hydrogen will be reflected in those " "programs (if they support it)." msgstr "" #: manual.docbook:564(para) msgid "" "Some of the settings to adjust the BeatCounter's latency compensation, and " "they are located on the General tab of the Preferences " "Dialog ( ToolsPreferences ). Here there are two spinboxes:" msgstr "" #: manual.docbook:577(para) msgid "" "Beat counter drift compensation in 1/10ms— adjust to compensate for latency between the " "keyboard and the program." msgstr "" #: manual.docbook:583(para) msgid "" "Beat counter start offset in ms— adjust the time between the BeatCounter's last " "input stroke and when the song starts playing (if auto-start is activated)." msgstr "" #: manual.docbook:591(para) msgid "" "Note that these can be set to positive (+) or negative (-) values. In order " "to find useful values for these, you will need to take some time to play " "with it. Also, you may want different values depending on the speed of your " "hardware, audio devices, drivers, etc. Using the BeatCounter effectively " "requires practice." msgstr "" #: manual.docbook:604(title) msgid "Song Editor" msgstr "Song Editor" #: manual.docbook:606(para) #, fuzzy msgid "" "The \"Song Editor\" () gives an overview " "of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so " "on); each blue coloured square on this panel is a complete bar as shown in " "the underlying \"Pattern Editor\" panel. Here we have complete freedom to " "add, remove or move patterns in any order we prefer. We can also copy and " "paste patterns: use left mouse button to highlight an area and drag it " "around. Dragging with CTRL key pressed copies the patterns." msgstr "" "Il frame \"Song Editor\" (Fig. 1) mostra la canzone che stiamo creando; " "ciascuna casella blu rappresenta una battuta completa come visualizzata " "nella finestra del Pattern Editor, mentre le righe indicano le varie parti " "della canzone (esempio: intro, strofa, bridge, ritornello, ecc..). Abbiamo " "piena liberta' di aggiungere, rimuovere o spostare le singole battute in " "qualunque ordine si preferisca. Poassiamo anche copiare e incollare gruppi " "di battute attivando l'apposita modalita' e selezionando l'area con i " "pattern interessati tenendo premuto il tasto sinistro del mouse. Tenendo " "premuto il tasto Control i pattern verranno copiati anziche' essere spostati." #: manual.docbook:610(para) #, fuzzy msgid "The Song Editor comes with 7 buttons:" msgstr "XXX" #: manual.docbook:624(para) #, fuzzy msgid "" " Completely delete all patterns (asks for confirmation!)." msgstr "Completely delete all patterns (asks for confirmation!)." #: manual.docbook:631(para) #, fuzzy msgid " Create a new pattern (and asks for a name)." msgstr "Create a new pattern (and asks for a name)." #: manual.docbook:638(para) #, fuzzy msgid " Move currently selected pattern up or down." msgstr "Move currently selected pattern up or down." #: manual.docbook:647(para) #, fuzzy msgid "" " Enable selecting patterns for copy & paste (Select " "Mode)." msgstr "Enable selecting patterns for copy & paste." #: manual.docbook:654(para) #, fuzzy msgid " Enable Draw Mode." msgstr "Enable add/remove patterns." #: manual.docbook:661(para) msgid "" " Switch from \"Single pattern mode\" to \"Stacked pattern " "mode\" and back.." msgstr "" #: manual.docbook:668(para) msgid "" "Under these buttons there is a list of patterns created and when they will " "played (each square == 1 bar). Click on an squarebox to add or cancel the " "pattern. Clicking on right mouse button over the name of a pattern will " "bring up a menu to change name of the pattern or to allow copying/deleting " "it. Patterns with very same name are not allowed." msgstr "" "Sotto i bottoni c'e' la lista dei pattern creati posizionati nel punto della " "canzone in cui verranno eseguiti (una casella == una battuta). Cliccare su " "una casella per aggiungere il pattern o eliminarlo. Cliccare col tasto " "destro del mouse sul nome del pattern fara' apparire un menu a tendina da " "cui si puo' modificarne il nome oppure eliminare. Non sono ammessi pattern " "con nomi identici." #: manual.docbook:674(title) #, fuzzy msgid "The Song Editor" msgstr "Song Editor" #: manual.docbook:685(title) msgid "Pattern Editor" msgstr "Pattern Editor" #: manual.docbook:686(para) #, fuzzy msgid "" "The \"Pattern Editor\" frame () lets " "us create or modify the pattern (bar) which is being played, or add/remove " "notes and tune intensity as well. On the higher-left side you find a pair of " "LCD screens: the first one lets you choose the size of a pattern while the " "second represents the current grid resolution (4 through 64). Selecting an " "instrument which has at least one note in the pattern will show a few " "vertical bars (one per note) on the lowest part of this frame. Those frame " "shows the so called \"note properties\". This are special properties which " "can be set for every single note. Hydrogen knows of 3 Properties: Velocity, " "Pan and Lead/Lag. Lead and Lag allows a slight note lead or lag in respect " "of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms " "at a tempo of 120bpm." msgstr "" "La finestra \"Pattern Editor\" (Fig. 2) ci permette di creare o modificare " "il pattern in esecuzione, aggiungere o togliere note e regolarne " "l'intensita'. In altro a sinistra troviamo una coppia di display LCD; il " "primo permette di selezionare il pattern da visualizzare nel Song Editor " "(scegliendo fra quelli gia' creati) mentre il secondo permette di modificare " "la risoluzione agevolando l'immissione di nuove note: e' possibile settare " "la griglia per 4, 8, 16, 32 o 64 colpi per battuta e i rispettivi ritmi " "terzinati indicati con 4T, 8T, 16T e 32T. Si puo' anche selezionare il " "numero di battute effettivamente suonate tramite l'apposito menu (da 1 a 8). " "Selezionando uno strumento che abbia almeno una nota sullo schermo fara' " "apparire in basso delle barre verticali da cui regolare quanto 'piano' o " "'forte' battere quel colpo. Il pulsante " " (hear new notes) serve per ascoltare i suoni man mano che " "vengono immessi. Infine si possono spostare gli strumenti nella sequenza " "tramite gli appositi pulsanti . E' disponbibile un'utile funzione di \"Quantize\" " "contrassegnata dal pulsante che permette alle note inserite di posizionarsi " "automaticamente secondo la griglia impostata." #: manual.docbook:693(para) msgid "" "The button (hear new notes) will play the sample as it's " "been added to the pattern. Finally you can move an instrument up and down in " "the sequence with the buttons . A useful Quantize feature is available activating . This way the beats " "inserted will automatically respect the grid resolution currently applied." msgstr "" #: manual.docbook:721(title) manual.docbook:1551(title) #, fuzzy msgid "The Pattern Editor" msgstr "Pattern Editor" #: manual.docbook:729(para) msgid "" "Rememeber this constraint concerning the grid: if you are working with a " "resolution of 16 you can't go back to 8 and remove a 16th note; on the other " "hand if you are working with a resolution of 8 and you try to insert a note " "in the middle of two bars (looking for a 16 bars precision), notes will be " "placed in the previous or in the following 8th bar. This contraint can be " "removed if you disable the whole grid resolution (choose \"off\" from the " "grid resolution LCD control). Now you'll be able to place notes wherever you " "prefer." msgstr "" #: manual.docbook:734(para) #, fuzzy msgid "" "Each instrument has its own set of features accessible right-clicking with " "your mouse on it; Fill/Clear notes fills or deletes every note of that instrument in the " "current pattern (remember that filling a pattern is always relative to the " "grid resolution set) and finally Randomize " "velocity automatically apply a pseudo-random velocity to " "each note of that instrument in the pattern. The more velocity you set on " "the instrument, the more hydrogen will hit hard on that " "instrument when played." msgstr "XXX" #: manual.docbook:738(para) msgid "" "The small green and red squares beside the instrument name are the " "mute and solo buttons." msgstr "" #: manual.docbook:750(para) #, fuzzy msgid "" "Also, you can set new beats clicking on which enables " "direct input by MIDI events or by keyboard according to the following map " "key=instrument:" msgstr "" "Si possono anche aggiungere nuovi colpi cliccando su " " " " che attiva l'inserimento diretto tramite " "MIDI o tastiera secondo il seguente schema tasto=strumento:" #: manual.docbook:760(emphasis) msgid "" "Note that the name of the instrument depends on the drumkit loaded. This " "list refers to the GMKit loaded by default. The position of the instrument, " "however, is the same." msgstr "" "Notare che il nome dello strumento dipende dal drumkit caricato. Questa " "lista riferisce al GMkit caricato di default. La posizione dello strumento, " "tuttavia, e' sempre la stessa." #: manual.docbook:763(para) msgid "Z = Kick" msgstr "Z = Kick" #: manual.docbook:764(para) msgid "X = Snare Jazz" msgstr "X = Snare Jazz" #: manual.docbook:765(para) msgid "C = Snare Rock" msgstr "C = Snare Rock" #: manual.docbook:766(para) msgid "V = Tom Low" msgstr "V = Tom Low" #: manual.docbook:767(para) msgid "B = Tom Mid" msgstr "B = Tom Mid" #: manual.docbook:768(para) msgid "N = Tom Hi" msgstr "N = Tom Hi" #: manual.docbook:769(para) msgid "M = Cowbell" msgstr "M = Cowbell" #: manual.docbook:770(para) msgid "Q = Ride Jazz" msgstr "Q = Ride Jazz" #: manual.docbook:771(para) msgid "W = Ride Rock" msgstr "W = Ride Rock" #: manual.docbook:772(para) msgid "E = Instrument No. 17 (currently not assigned)" msgstr "E = Strumento No. 17 (non assegnato)" #: manual.docbook:773(para) msgid "R = Instrument No. 18 (currently not assigned)" msgstr "R = Strumento No. 18 (non assegnato)" #: manual.docbook:774(para) msgid "T = Instrument No. 20 (currently not assigned)" msgstr "T = Strumento No. 20 (non assegnato)" #: manual.docbook:775(para) msgid "Y = Instrument No. 22 (currently not assigned)" msgstr "Y = Strumento No. 22 (non assegnato)" #: manual.docbook:776(para) msgid "U = Instrument No. 24 (currently not assigned)" msgstr "U = Strumento No. 24 (non assegnato)" #: manual.docbook:777(para) msgid "S = Stick" msgstr "S = Stick" #: manual.docbook:778(para) msgid "D = Hand Clap" msgstr "D = Hand Clap" #: manual.docbook:779(para) msgid "G = Closed HH" msgstr "G = Closed HH" #: manual.docbook:780(para) msgid "H = Pedal HH" msgstr "H = Pedal HH" #: manual.docbook:781(para) msgid "J = Open HH" msgstr "J = Open HH" #: manual.docbook:782(para) msgid "2 = Crash" msgstr "2 = Crash" #: manual.docbook:783(para) msgid "3 = Crash Jazz" msgstr "3 = Crash Jazz" #: manual.docbook:784(para) msgid "5 = Instrument No. 19 (currently not assigned)" msgstr "5 = Strumento No. 19 (non assegnato)" #: manual.docbook:785(para) msgid "6 = Instrument No. 21 (currently not assigned)" msgstr "6 = Strumento No. 21 (non assegnato)" #: manual.docbook:786(para) msgid "7 = Instrument No. 23 (currently not assigned)" msgstr "7 = Strumento No. 23 (non assegnato)" #: manual.docbook:790(para) #, fuzzy msgid "" "Here's a quick reference of the above bindings for your convenience. See " " for a basic walkthrough of how the " "pattern editor works." msgstr "Ecco un veloce riepilogo dei tasti menzionati." #: manual.docbook:803(title) msgid "Mixer" msgstr "Mixer" #: manual.docbook:806(title) manual.docbook:1635(title) #, fuzzy msgid "The Mixer" msgstr "Mixer" #: manual.docbook:814(para) #, fuzzy msgid "" "The Mixer frame () is useful for tuning a " "global or single volume of the current drumkit. It shows the current peak " "(click on to disable, useful on old CPUs) and let you set " "the maximum peak allowed (tune with the fader knob of the instrument), lets " "you modify attributes like pan, play solo , mute " " or test play only that instrument ; " "selecting in the Pattern Editor an instrument causes a blue LED to light on " "(near the play button). Near the global volume knob, you can set 3 global " "effect such a swing (shifts a few notes back or forward not randomly), " "timing (modify timings of the notes) and humanize effect (random velocity " "editing)." msgstr "" "La finestra del mixer (Fig. 3) torna utile per settare un volume singolo o " "globale del drumkit corrente. Mostra il picco corrente dello strumento " "(cliccare su per " "disabilitarlo, risparmia qualcosa sulle vecchie CPU), permette di impostare " "il picco massimo (con l'apposita manetta a scorrimento verticale di ciascun " "strumento) e attributi come il \"pan\" (posizionamento stereo) " " , suonare singolarmente " "uno strumento , " "ammutolire un singolo strumento o suonare per test quello strumento " " ; selezionare nel Pattern Editor " "uno strumento causera l'accensione di un piccolo LED blu nella sezione " "assegnata al mixer per quello strumento. Accanto alla regolazione del volume " "principale, infine, troviamo tre differenti effetti: swing (spoasta " "lievemente e in maniera non casuale le note), timing (anticipa o ritarda) " "and humanize effect (modifica la velocity, l'intensita' di come vengono " "suonati gli strumenti). Facendo doppio click sul nome dello strumento appare " "una finestra con due schede per modificarne le proprieta'." #: manual.docbook:849(para) #, fuzzy msgid "" "In addition to all this you can set up to 4 special LADSPA effects for each " "instrument switching the button. See next section for a " "detailed overview. " msgstr "" "In piu' a tutto questo si possono impostare 4 effetti LADSPA per ciascun " "strumento cliccando su . " "Nella prossima sezione una panoramica piu' ampia." #: manual.docbook:873(title) #, fuzzy msgid "Sound Library (Drumkit Manager)" msgstr "Drumkit manager" #: manual.docbook:875(para) msgid "" "The Sound Library saves you time in managing your drum kits, favorite " "patterns, and favorite songs. When making new songs and drum kits, the Sound " "Library makes it easier for you to reuse and mix the instruments and " "patterns from other kits and songs." msgstr "" #: manual.docbook:881(title) msgid "System Drumkits" msgstr "" #: manual.docbook:883(para) msgid "" "This lists the drumkits that were installed by your system administrator. It " "was determined by the compile-time prefix. On Unix-like operating systems, " "this is usually /usr/share/hydrogen/data/" "drumkits, or possibly /usr/local/" "share/hydrogen/data/drumkits. These kits are available to all " "users on the system, and users are usually not able to add to them." msgstr "" #: manual.docbook:892(para) msgid "" "To load a drumkit from here, right-click the drumkit and select " "Load. This will replace your current drumkit with " "the one that you selected. To load a single instrument from that kit, left-" "click the plus to the left of the drumkit's name to " "show all the instruments. With your left mouse button, click and drag the " "instrument into your current kit. The instrument will be added to the " "drumkit that you currently have loaded." msgstr "" #: manual.docbook:903(title) msgid "User Drumkits" msgstr "" #: manual.docbook:905(para) msgid "" "These are your own drum kits that you can manage yourself. They are usually " "stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by " "selecting InstrumentsSave " "library." msgstr "" #: manual.docbook:913(para) msgid "" "Loading drumkits and instruments to use is the same as for the System " "Drumkits (see )." msgstr "" #: manual.docbook:918(title) msgid "Patterns in the Sound Library" msgstr "" #: manual.docbook:920(para) msgid "" "Before you save your favorite patterns to the sound library, be sure to edit " "it's properties by right-clicking and selecting Properties. There, you can give the pattern a title and a category. You " "can use one of the categories already provided, or create your own " "categories by simply typing in a category name. The category name is " "important, because the patterns will be filed by category in the Sound " "Library." msgstr "" #: manual.docbook:928(para) msgid "" "You can save your favorite patterns in the sound library by right clicking " "the title of the pattern in the song editor, and selecting Save " "Pattern. It will appear in the Sound Library underneath " "Patterns and the category that you assigned to the " "pattern." msgstr "" #: manual.docbook:936(title) msgid "Songs in the Sound Library" msgstr "" #: manual.docbook:938(para) msgid "" "To save songs in the Sound Library, put them in your data directory " "underneath the songs folder (usually " "$HOME/data/songs. To remove them, " "remove the file from that folder." msgstr "" #: manual.docbook:947(title) msgid "Drumkits and Instrument Editing" msgstr "" #: manual.docbook:949(para) msgid "" "Creating a new drumkit with Hydrogen is done with the Instrument Editor. " "Using the instrument editor you can load samples, set envelope parameters, " "set the gain, and a few other advanced features like mute groups, low-pass " "resonance filter, and pitch randomization." msgstr "" #: manual.docbook:955(para) msgid "" "Instead of creating your own drumkit, you can also use or download existing " "drumkits using the ." msgstr "" #: manual.docbook:963(title) msgid "Concepts" msgstr "" #: manual.docbook:965(para) msgid "" "The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a " "piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a " "note, the sample is simply played back at the right time. There's a few " "concepts and terms that you should understand when you are putting together " "a drumkit. (See for more detailed explanations.)" msgstr "" #: manual.docbook:976(title) msgid "Sampling Synthesizer Terms" msgstr "" #: manual.docbook:978(term) manual.docbook:1992(glossterm) msgid "Sample" msgstr "" #: manual.docbook:978(para) manual.docbook:1994(para) msgid "" "A short recording of a sound, typically between .1 and 3.0 seconds long." msgstr "" #: manual.docbook:983(term) manual.docbook:1818(glossterm) msgid "Gain" msgstr "" #: manual.docbook:983(para) msgid "Volume adjustment." msgstr "" #: manual.docbook:987(term) manual.docbook:2016(glossterm) msgid "Velocity" msgstr "" #: manual.docbook:987(para) manual.docbook:2018(para) msgid "How hard you hit a note." msgstr "" #: manual.docbook:991(term) msgid "ADSR Envelope Generator" msgstr "" #: manual.docbook:991(para) msgid "" "An Attack/Decay/Sustain/Release envelope generator. After you trigger a " "note, Hydrogen will attack the note by increasing its " "volume from 0 to the full velocity of the note. After reaching full " "velocity, it will decay the note by lowering the volume " "until it reaches the sustain level. When the note is " "released, Hydrogen reduces the volume from the sustain " "level back down to 0." msgstr "" #: manual.docbook:1005(term) manual.docbook:1686(glossterm) msgid "Attack" msgstr "" #: manual.docbook:1005(para) #, fuzzy msgid "" "The amount of time to go from 0 to full " "velocity." msgstr "Fig. 3 Selezionate un effetto." #: manual.docbook:1010(term) manual.docbook:1763(glossterm) msgid "Decay" msgstr "" #: manual.docbook:1010(para) msgid "" "The amount of time to go from full " "velocity to the sustain volume." msgstr "" #: manual.docbook:1015(term) manual.docbook:2000(glossterm) msgid "Sustain" msgstr "" #: manual.docbook:1015(para) msgid "" "The level (how loud) to hold the note " "between the sustain and the release. It is a percentage of the velocity. It " "does not depend on time." msgstr "" #: manual.docbook:1021(term) manual.docbook:1934(glossterm) msgid "Release" msgstr "" #: manual.docbook:1021(para) #, fuzzy msgid "" "The amount of time to go from the sustain " "volume back down to 0." msgstr "" "Fig. 8 Carica un drumkit. Scegliere fra " "quelli installati." #: manual.docbook:1027(para) msgid "" "Typical samples that are used in Hydrogen are: the sound of a single drum " "hit, the sound of a single cymbal hit, the sound of a single cowbell hit. " "Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen " "will play whatever sound you have loaded. So, to put together a drum kit you " "need to gather short recordings of the bass drum, each tom, each cymbal, the " "high hat open, the high hat closed, the snare drum (snare on), the snare " "drum (snare off), rim shots, etc." msgstr "" #: manual.docbook:1039(para) msgid "" "However, there are no rules about what a sample can be. It's not uncommon to " "use Hydrogen to trigger non-drum sounds like: audio clips of people talking, " "a clip from a song, sound effects, audio clips from movies, and famous " "people speaking. Be creative!" msgstr "" #: manual.docbook:1049(title) msgid "Creating a New Drumkit" msgstr "" #: manual.docbook:1051(para) msgid "" "To start a brand new drum kit, select InstrumentsClear All. This will give " "you a bank of 32 blank instruments. To delete instruments, right-click on on " "each instrument and select Delete Instrument. To " "add more instruments, select InstrumentsAdd instrument." msgstr "" #: manual.docbook:1066(para) msgid "" "Select an instrument to start editing it. This is done by left-clicking on " "the name of the instrument in the instrument list (at the left). You will " "notice that the name of the instrument in the Instrument Editor matches the " "one that you clicked." msgstr "" #: manual.docbook:1072(para) msgid "" "After you have your drum kit working the way you want, select " "InstrumentsSave library. It will ask you for the name of the kit to save. " "If you wish to overwrite an existing kit, you will need " "to type in the same name as the kit that you want to replace." msgstr "" #: manual.docbook:1083(para) msgid "" "Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits)." msgstr "" #: manual.docbook:1088(para) msgid "" "To export a drumkit (for sharing with others), it must first be loaded into " "your Sound Library. Then, select InstrumentsExport library from the " "menu. Select the drum kit that you wish to export, and give it a file name " "to save it to." msgstr "" #: manual.docbook:1100(title) msgid "Creating an Instrument and Layers" msgstr "" #: manual.docbook:1102(para) msgid "" "For each instrument in a drum kit, you can load several samples and set " "different synthesizer parameters. This section will step you through how to " "create a new instrument and load the samples." msgstr "" #: manual.docbook:1107(para) msgid "" "To begin creating an instrument, select InstrumentsAdd instrument. This will " "give you a blank instrument to start from." msgstr "" #: manual.docbook:1114(para) msgid "" "Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides " "several in the data/drumkits " "directory." msgstr "" #: manual.docbook:1119(para) msgid "" "In the instrument editor, click on Layers. You can " "layer several samples into the instrument. Which one is played depends on " "the velocity of the incoming note. Click Load Layer " "and point the Audio File Browser to your sample. Note " "that the Audio File Browser will allow you to preview the " "sample before you load it. It will also allow you to load more than one " "sample at a time. But for now, only load one." msgstr "" #: manual.docbook:1129(para) msgid "" "After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To " "load a second sample, click the slot just below it, and then click " "Load Layer to bring in another sample." msgstr "" #: manual.docbook:1136(para) msgid "" "After bringing in both samples, you'll probably notice that only the " "first sample is being played whenever you trigger the " "instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light " "blue rectangles and you see that you get a left-right drag cursor. Now drag " "the sample to the left or right (like a curtain). You will now see Layer 2 " "appear." msgstr "" #: manual.docbook:1147(para) msgid "" "The velocity setting for the layer is 0-velocity on the left, and full " "velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 " "to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)" msgstr "" #: manual.docbook:1153(para) msgid "" "Now, in the pattern area, set up a simple pattern that plays this " "instrument. Adjust the velocity settings on each note so that you can get " "the different samples to sound. Now set the pattern to loop and notice how " "your different samples are getting triggered. (To learn about editing a " "pattern, see )" msgstr "" #: manual.docbook:1161(para) msgid "" "For each layer, you can set the Gain and the " "Pitch. The pitch also has a Fine adjustment." msgstr "" #: manual.docbook:1166(para) msgid "" "Use the Gain adjustment to control how loud the " "sample will play. This is necessary because it's extremely difficult to get " "a set of samples that all sound at about the same volume. By adjusting here, " "the samples that were recorded too quietly can be turned up to match your " "loud samples (that had to be turned down)." msgstr "" #: manual.docbook:1175(para) manual.docbook:1318(para) msgid "" "It is very easy to set the Gain too high, causing " "your sample to clip. Remember to test the gain with full-velocity notes. If " "you clip your signal here, it will only get worse as Hydrogen processes it." msgstr "" #: manual.docbook:1183(para) msgid "" "The pitch of the sample can be modified with the pitch controls. The " "Pitch knob adjust the pitch in musical half-steps. " "(So, -12 is down 1 octave). The pitch on the right adjusts the pitch " "±50 cents. (One half-step is 100 cents.)" msgstr "" #: manual.docbook:1191(para) msgid "" "The pitch is adjusted by playing the sample back faster or slower. This is " "called the Dopplar Effect. So, if you have a 1-second sample that you turn " "down -12 (1 octave), you sample will only last for .5-seconds." msgstr "" #: manual.docbook:1199(title) msgid "Instrument Parameters" msgstr "" #: manual.docbook:1201(para) msgid "" "In the instrument editor, click on the General " "button. Here you can adjust several parameters that are for the whole " "instrument (not for each layer). The parameters that you can adjust are:" msgstr "" #: manual.docbook:1209(para) msgid "" "Envelope parameters: Attack, Decay, Sustain, " "Release. (See )" msgstr "" #: manual.docbook:1215(para) #, fuzzy msgid "" "Gain: The overall " "volume of the instrument." msgstr "" "Fig. 8 Carica un drumkit. Scegliere fra " "quelli installati." #: manual.docbook:1219(para) msgid "" "Mute Group: Which " "mute group this instrument is a member of (see )." msgstr "" #: manual.docbook:1225(para) msgid "" "Filter Parameters: Bypass, Cutoff, Resonance." msgstr "" #: manual.docbook:1230(guibutton) msgid "Random Pitch" msgstr "" #: manual.docbook:1235(para) msgid "" "It's important that you understand in order to continue on." msgstr "" #: manual.docbook:1240(title) msgid "Envelope Parameters" msgstr "" #: manual.docbook:1242(para) msgid "" "When the instrument is triggered, its volume is run through an ADSR " "Envelope. The parameters operate as follows:" msgstr "" #: manual.docbook:1257(para) msgid "" "The attack, decay, and release parameters are all set by the number of " "audio samples. This means that the time changes " "depending on the sample rate of your sound card. The max time for each of " "them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz)." msgstr "" #: manual.docbook:1248(para) msgid "" "Attack— the amount of " "time that the volume of the sample goes from 0 to the " "full velocity of the note. If the value is 0, the sample will play " "immediately at full velocity. If the value is 1.0, the sample volume will " "use the maximum time available for the attack paramater. " msgstr "" #: manual.docbook:1267(para) msgid "" "Decay— the amount of " "time for the volume of the sample to go from full " "velocity down to the sustain volume. If the value is 0, the sample will " "immediately skip from the attack volume to the sustain volume. If the value " "is 1.0, the sample volume will use the maximum time available for the decay " "parameter." msgstr "" #: manual.docbook:1278(para) msgid "" "Sustain— the volume to play the note after the decay phase is over, and until the note " "is released. If set to 0, the note will be silent. If set to 1.0, the note " "will play at full velocity." msgstr "" #: manual.docbook:1286(para) msgid "" "Release— the time to fade out the note from the sustain volume back down to 0 " "(silent). If set to 0, the note will fade out in the minimum amount of time " "(about 5 ms). If set to 1, it will fade out for the maximum time available." "" msgstr "" #: manual.docbook:1296(para) msgid "" "If the sample is shorter than the times that you specify, the sample will " "end, regardless of which phase of the ADSR it is in. If the note is " "sustained, it does not draw out the note while you are " "holding it. It only holds the gain (volume) parameter during that time." msgstr "" #: manual.docbook:1306(title) msgid "Gain and Mute Group" msgstr "" #: manual.docbook:1308(para) msgid "" "The gain sets the overall volume for the sample. This gain is applied after " "the gain that you set for the layer, and before the gain that is set for the " "mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 " "the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is " "set higher, the samples will be amplified." msgstr "" #: manual.docbook:1326(para) msgid "" "Hydrogen provides more mute groups than you know what to do with (over 256). " "A mute group is a grouping of instruments that are mutually exclusive " "— only one instrument may be playing at any time. If one is playing " "and another instrument in the group is triggered, it will immediately " "silence (mute) and start playing the other instrument. This is useful, " "especially, for instruments like hi-hats where the open sound and the closed " "sound are different instruments." msgstr "" #: manual.docbook:1337(para) msgid "" "If the mute group is set to Off, then the instrument is " "not part of any mute grouping. If the mute group is set to any number, then " "that is the group that the instrument is a part of. To set other instruments " "into the same grouping, set their mute group parameter to the same number. " "(For example, to group all the high-hat instruments, you can set all their " "mute group parameters to 1. To have a snare drum mute group, set their mute " "group parameters to 2.)" msgstr "" #: manual.docbook:1352(title) msgid "Filter and Random Pitch" msgstr "" #: manual.docbook:1354(para) msgid "" "The filter is a low-pass resonance filter. If you don't wish to use is, " "click the BYPass button so that it's red. If it's not " "red, then the filter is active. The cutoff parameter adjusts the cutoff " "frequency for the filter. The resonance parameter adjusts how much to " "resonate the cutoff frequency. If the resonance is set to 0, then the filter " "is just a simple low-pass filter." msgstr "" #: manual.docbook:1363(para) msgid "" "The cutoff frequency of the filter varies with the sample rate of your audio " "card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample " "rate." msgstr "" #: manual.docbook:1381(para) msgid "" "The random pitch paramater allows you to randomly vary the pitch of the " "sample every time it is triggered. The value is set between 0 and 1.0. The " "pitch change is fairly small: ±2 half-steps × value. Using this " "sparingly can help your sequences to sound more like a real drummer." msgstr "" #: manual.docbook:1390(title) msgid "Tips on Editing Instruments" msgstr "" #: manual.docbook:1392(para) msgid "" "With all of the different parameters available to tweak, it can be difficult " "to set up something that sounds nice when you're done. Here's a few tips on " "setting up an instrument:" msgstr "" #: manual.docbook:1397(para) msgid "" "Turn down the gain. Every time you have a " "gain knob (i.e. an amplifier), this is called a gain stage. With every gain stage you have, it's easy to overdrive your " "signal — which means the signal gets distorted by clipping. In " "addition, if you have two samples that, by themselves, peg your meters " "— what do you think happens when you combine them? That's right, you " "overdrive the signal again." msgstr "" #: manual.docbook:1406(para) msgid "" "If things sound bad and distorted, start by turning down the gain setting on " "the layer... especially if it's larger than 1.0. Then turn down the " "instrument gain. Then any gain on a LADSPA effect. Then the fader on the " "mixer. Then the master output fader." msgstr "" #: manual.docbook:1412(para) msgid "" "Test samples at full velocity. Your " "sample will be played louder if the velocity is higher. So, if you set " "everything to sound nice and full with velocity at 0.7, what will happen " "when you get a full velocity of 1.0? (Hint: clipping.)" msgstr "" #: manual.docbook:1418(para) msgid "" "Try to use samples that are -6 dB max. " "Visually, this means samples that peak at only 1/2 of full scale. Otherwise, " "turn your layer gain to about .5." msgstr "" #: manual.docbook:1423(para) msgid "" "Remove all DC offsets from the sample. In " "a sample editor, there is usually a line down the center of your sample's " "waveform. This is the zero-line. The beginning of your sample should be on " "this line. The end of your sample should also be on this line. However, if " "your signal is a little above or a little below this line, you will hear a " "click at the beginning and the end of your sample whenever it is played. If " "your sample editor doesn't provide any tools to fix a DC Offset problem, you " "can eliminate the noise by putting a slight fade-in/out at the ends of your " "sample." msgstr "" #: manual.docbook:1435(para) msgid "" "The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the " "attack and delay — the sample will stop playing at the end." msgstr "" #: manual.docbook:1440(para) msgid "" "Things change with the sample rate. If " "you have a really nice setup with all your parameters painstakenly " "tweaked... things will change if you change the sample " "rate of your audio card. Many of Hydrogens internal settings and parameters " "are done based on how many samples go by, and not on how many seconds go by. " "The sort of things that change are: anything time-base (like attack and " "release) and anything frequency based (like the cutoff frequency)." msgstr "" #: manual.docbook:1454(title) msgid "LADSPA plugins" msgstr "LADSPA plugins" #: manual.docbook:1455(para) #, fuzzy msgid "" "Hydrogen can also add effects to sounds using any LADSPA plugin library. You " "need to have installed the LADSPA sources (available from ) and while this will give a rough idea of how it " "works you should really have a taste of the real thing installing one or " "more plugin libraries, it's as simple as a scons && scons " "install. Here are a few places to download plugin libraries:" msgstr "" "Hydrogen puo' anche aggiungere ai suoni degli effetti usando qualunque " "libreria LADSPA. Si devono installare i sorgenti LADSPA (disponibili su " "http://www.ladspa.org) e se questo puo' bastare per dare un'idea di base, " "sarebbe meglio installare una o piu' di queste librerie per poter apprezzare " "meglio il risultato, basta compilare gli effetti con un \"make && " "make install\"" #: manual.docbook:1458(para) #, fuzzy msgid "" "SWH-Plugins available at . Note that " "before compiling these plugins you need the FFTW tarball from ." msgstr "" "SWH-Plugins disponibili presso http://plugin.org.uk. N.B. prima di " "installare questi effetti c'e' da compilare il pacchetto FFTW da http://www.fftw.org." #: manual.docbook:1460(para) #, fuzzy msgid "CMT available at ." msgstr "" "CMT disponibile presso http://www.ladspa.org." #: manual.docbook:1462(para) #, fuzzy msgid "TAP available at ." msgstr "" "TAP disponibile presso http://tap-plugins.sf.net." #: manual.docbook:1467(title) msgid "Plugins Kill" msgstr "" #: manual.docbook:1468(para) msgid "" "A LADSPA plugin is compiled, executable code. It is capable of hanging, " "crashing, freezing, screaching, overflowing buffers, and even phoning home. " "If you start having issues with Hydrogen, disable your plugins and see if " "things improve. Some plugins are not designed for real-time use, and some " "are just plain better than others." msgstr "" #: manual.docbook:1476(para) #, fuzzy msgid "" "Once you have installed a few plugins open a song you'd like add an effect " "to and select an instrument that has a few beats in the pattern. In the " "Mixer click on and select one of the four available effect " "line Click on the Edit button ( ), than on Select " "the FX: this will bring up another window () that lets you choose an effect amongst those installed, " "they are alphabetically sorted and categorized. Once you're done, adjust the " "level from the mixer and start playing. Each round knob in the FX part " "controls the level of its effect. If you want to quickly " "enable/disable the effect click the Bypass ( ) button." msgstr "" "Una volta installato qualche plugin aprite File -> Preferences -> General e " "controllate se il percorso e' corretto (per esempio un'installazione di " "default dei plugin li mette in /usr/local/lib/ladspa), quindi aprite una " "canzone a cui volete applicare gli effetti e selzionate uno strumento che " "abbia nel pattern qualche colpo. Nel Mixer cliccare su " " e selezionare uno delle quattro linee di " "effetti disponibili. Cliccare su Edit ( " " ) e poi su Select the FX: questo aprira' " "un'altra finestra (Fig. 3) the permette di scegliere un effetto fra quelli " "installati; appaiono in ordine alfabetico e suddivisi per lettera. Una volta " "fatto ricordatevi di attivare l'effetto cliccando su Activate, aggiustate il livello se volete e infine tornate al Mixer: " "cominciate a suonare e buon divertimento! Ciascun piccolo comando rotondo di " "ogni linea del Mixer, dall'alto in basso, comanda un effetto: il primo in " "alto e' il numero 0, poi il numero 1 e cosi' via. Se volete disabilitare " "velocemente un effetto LADSPA cliccate su " " ." #: manual.docbook:1513(title) msgid "Select an Effect" msgstr "" #: manual.docbook:1532(title) msgid "A new song" msgstr "Creazione di una canzone" #: manual.docbook:1534(title) msgid "\"Song\" mode and \"Pattern\" mode" msgstr "Modalita' song e modalita' pattern" #: manual.docbook:1535(para) msgid "" "This is just a quick-and-dirty walkthrough to Hydrogen. Refer to the " "tutorial for a more detailed overview." msgstr "" "Questa sezione dara' alcune indicazioni di massima sull'uso di Hydrogen. " "Riferirsi al tutorial per una guida piu' approfondita." #: manual.docbook:1539(para) #, fuzzy msgid "" "Hydrogen has 2 main modes: \"Pattern\" mode and \"Song\" mode (refer to " " for the buttons to activate). When " "\"Pattern\" mode is activated the current pattern is continously repeated, " "so to help changing it until we don't like it, while \"Song\" mode repeats " "only the current pattern: this is useful when putting together the patterns, " "to create the whole structure for the song." msgstr "" "Hydrogen ha 2 modalita' principali di funzionamento: la modalita' \"Pattern" "\" e la modalita' \"Song\" (riferirsi a questa " "sezione per i pulsanti da utilizzare). Quando la modalita' Pattern e' " "impostata abbiamo la possibilita' di creare e modificare un pattern finche' " "non soddisfi le nostre esigenze; il pattern viene eseguito ininterrottamente " "finche' non si preme stop oppure si seleziona un altro pattern. La modalita' " "\"Song\" e' dedicata invece alla messa in sequenza dei vari pattern, in modo " "da creare una struttura per la canzone." #: manual.docbook:1545(title) msgid "A new pattern" msgstr "Creazione pattern" #: manual.docbook:1546(para) #, fuzzy msgid "" "We'll start from an empty song with an empty pattern, as created by default: " "\"pattern\" mode should be selected now. It is also possible to change name " "of the pattern. Now let's click on the Play button and while " "the pattern is playing let's add notes in the grid of the Song Editor () simply left_mouse_clicking on it: adjust " "grid resolution and BPM speed if needed. Rememeber some constraints of the " "grid: if you are working with a resolution of 16 you can't go back to 8 and " "remove a 16th note; same thing happens if you are working with a resolution " "of 8 and you try to insert a note in the middle of two bars (looking for a " "16 bars precision): they will be placed on the previous or on the following " "8th bar (unless you choose off from the Grid Resolution LCD, " "in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before " "adding notes in the Pattern Editor!" msgstr "" "Partiremo da una canzone vuota con un pattern vuoto creato di default dal " "programma (Fig. 12); assicuriamoci che la modalita' di esecuzione sia " "impostata su \"pattern\". E' possibile modificare il nome del pattern. " "Adesso clicchiamo sul pulsante di \"Play\" e e mentre il nuovo pattern sara' " "in esecuzione aggiungiamo le note nella griglia del Song Editor (Fig. 13). " "Le note vengono inserite e cancellate dalla griglia semplicemente cliccando " "col tasto sinistro del mouse sulla nota interessata. Assicuriamoci di selezionare il pattern giusto nel Song Editor prima di " "inserire le note nel Pattern Editor! Notare anche che se per " "esempio si riempie un pattern di sedicesimi e poi si imposta una risoluzione " "minore, le note \"fuori scala\" non possono essere cancellate." #: manual.docbook:1561(title) msgid "A new sequence" msgstr "Creazione sequenza" #: manual.docbook:1562(para) #, fuzzy msgid "" "Once patterns are created (), we can " "copy/paste/delete them simply dragging with the mouse (activate the select " "mode for the Song Editor and keep pressed left mouse button to select those " "you want to move or copy)." msgstr "" "Una volta creati i pattern, per copiarli/cancellarli e posizionarli " "correttamente nella struttura della canzone (Fig. 13) e' sufficiente " "utilizzare la funzione di trascinamento del mouse attivabile nel Song Editor " "(tenere premuto il tasto sinistro per selezionare i pattern)" #: manual.docbook:1567(title) msgid "Inserting Notes in a Pattern" msgstr "" #: manual.docbook:1578(title) msgid "Adjust from the mixer" msgstr "Operazioni sul mixer" #: manual.docbook:1579(para) msgid "" "Of course we can always use the mixer window, either when creating or " "playing patterns." msgstr "" "Ovviamente in qualsiasi momento e' possibile aprire ed utilizzare la " "finestra del mixer (Fig. 14), sia durante la fase di creazione dei pattern, " "sia durante l'esecuzione delle sequenze." #: manual.docbook:1583(para) #, fuzzy msgid "" "The Mixer frame () is made of 32 independent " "tracks, each of these is binded to an instrument, plus a \"Master Output\" " "line to adjust general output volume and a \"FX\" button to set effects. " "Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader " "and name of the track. Clicking on will play the selected " "instrument, cutting the others. The \"Mute\" button , " "simply mute that instrument. The maximun peak indicates " "the maximun volume reached from the instrument; the peak must be in a range " "of 0.0 and 1.0 (in you can see a few volumes " "too loud), otherwise it will get distorted producing a weird sound " "(especially with OSS audio driver), in this case it's better to set volume " "down; keep an eye on each vu-meter." msgstr "" "Il Mixer e' composto da 16 linee indipendenti, ognuna corrispondente ad un " "diverso strumento, piu' la linea del \"Master Output\" che serve a regolare " "il volume dell'uscita principale. Ogni linea contiene 3 pulsanti " "( " " " " ), regolazione del pan " "( ), un indicatore del " "picco massimo raggiunto, il fader del volume e il nome della traccia. " "Premendo il pulsante " "e' possibile ascoltare esclusivamente lo strumento selezionato poiche' gli " "altri vengono automaticamente esclusi dalla riproduzione. Il pulsante \"Mute" "\" , semplicemente " "rende \"muto\" lo strumento selezionato eliminandolo quindi dal mix finale. " "L'indicatore del picco massimo visualizza il massimo volume raggiunto dallo " "strumento; il picco deve essere all'interno dell'intervallo tra 0.0 e 1.0, " "superare il valore di 1.0 significa che lo strumento andra' in \"distorsione" "\" (specialmente usando i driver OSS) generando un rumore simile a una " "\"pernacchia\": meglio abbassare il volume in questi casi! ;) Infine e' " "presente il fader del volume, con il quale regoliamo il volume del singolo " "strumento e vediamo graficamente il picco raggiunto grazie al vu-meter posto " "dietro alla manopola." #: manual.docbook:1645(title) msgid "Glossary" msgstr "" #: manual.docbook:1647(para) msgid "" "This is a glossary of general terms encountered when using Hydrogen, " "synthesizers, drums, or samplers. The definitions in the text are " "simplified, but the definitions here are more general and have more " "explanation. For example, the text of the manual would have you believe that " "an ADSR is the only kind of envelope generator, and could only ever control " "the volume. While it's simple for new users, it's not quite right." msgstr "" #: manual.docbook:1659(glossterm) msgid "ADSR" msgstr "" #: manual.docbook:1661(para) msgid "" "A type of envelope generator that allows you to control the Attack, Decay, " "Sustain, and Release parameters. Generally, the parameters are proportional to " "the velocity." msgstr "" #: manual.docbook:1670(para) msgid "" "In Hydrogen, the ADSR envelope generator only controls the volume " "(attenuation)." msgstr "" #: manual.docbook:1673(para) msgid "" "Read more about this in the Wikipedia Article ADSR Envelope" msgstr "" #: manual.docbook:1688(para) msgid "" "This is the first phase of an ADSR envelope, and is the amount of " "time to turn the parameter up from 0 to full velocity " "after triggering the note." msgstr "" #: manual.docbook:1697(glossterm) msgid "Attenuation" msgstr "" #: manual.docbook:1699(para) msgid "" "In filters and mixers, this the amount that a signal is reduced (volume)." msgstr "" #: manual.docbook:1709(glossterm) msgid "Band-Pass Filter" msgstr "" #: manual.docbook:1711(para) msgid "" "A filter that preserves a cetertain band of frequencies, and attenuates " "(silences) all others. This is often done by combining a high-pass and a low-" "pass filter." msgstr "" #: manual.docbook:1724(glossterm) msgid "Clipping" msgstr "" #: manual.docbook:1726(para) msgid "" "A phenomenon that happens to a signal when the signal is too large for " "whatever is receiving it. The peaks of the signal (which are normally smooth " "curves) get cut off straight at the max volume (clipped). This distorts the " "sound and is usually undesirable." msgstr "" #: manual.docbook:1732(para) msgid "" "An example of clipping is when you play music louder than your speaker can " "handle. Parts of the music sound harsh and fuzzy." msgstr "" #: manual.docbook:1739(glossterm) msgid "Cutoff Frequency" msgstr "" #: manual.docbook:1741(para) msgid "" "On high-pass and low-pass filters, this is the frequency that divides " "between those that pass, and those that are attenuated (silenced). In a high-" "pass resonance filter, or a low-pass resonance filter, the cutoff is also " "the frequency zone that gets boosted." msgstr "" #: manual.docbook:1746(para) msgid "" "For example, if you have a low-pass filter and you set the cutoff frequency " "high (i.e. 20kHz)... the filter will not affect the sound. All the audible " "frequencies will pass through undisturbed. As you lower the cutoff frequency " "to something like 40 Hz (the low string on a bass guitar), it sounds like " "someone is putting a blanket over the speaker. The higher frequencies are " "being attenuated above 30 Hz." msgstr "" #: manual.docbook:1765(para) msgid "" "After reaching full velocity from the attack, this is the amount of " "time to turn the parameter down from full velocity to " "the sustain level." msgstr "" #: manual.docbook:1776(glossterm) msgid "Envelope Generator" msgstr "" #: manual.docbook:1778(para) msgid "" "A way to control (change) a parameter over time as a response to triggering, " "holding, and releasing a note." msgstr "" #: manual.docbook:1781(para) msgid "Did your eyes just glaze over? Let's try again:" msgstr "" #: manual.docbook:1783(para) msgid "" "Imagine that you're playing a note on the keyboard and you have your other " "hand on a knob (volume, filter cutoff, etc.). As you play the note, you " "twist the knob (often up, then down... or down, then up). You do the same " "thing on each note. That's what an envelope generator does. See also ADSR" msgstr "" #: manual.docbook:1794(glossterm) msgid "Fader" msgstr "" #: manual.docbook:1796(para) msgid "" "A slider control used to adjust the attenuation (volume) in a mixer. Faders " "always have an \"audio\" taper, which means that the attenuation amount " "changes on an exponential scale." msgstr "" #: manual.docbook:1803(glossterm) msgid "Filter" msgstr "" #: manual.docbook:1805(para) msgid "" "A device that changes a sound by attenuating specific frequencies. A tone " "knob is an example of a simple, low-pass filter." msgstr "" #: manual.docbook:1820(para) msgid "" "In an amplifier, this adjust how much (or how little) a signal is amplified " "(volume). A higher gain value is a louder signal." msgstr "" #: manual.docbook:1828(glossterm) msgid "High-Pass Filter" msgstr "" #: manual.docbook:1830(para) msgid "" "A filter that attenuates (silences) low frequencies, but allows high " "frequencies to pass through." msgstr "" #: manual.docbook:1841(glossterm) msgid "Instrument" msgstr "" #: manual.docbook:1843(para) msgid "" "In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, " "or a tom)." msgstr "" #: manual.docbook:1854(glossterm) msgid "Layer" msgstr "" #: manual.docbook:1856(para) msgid "" "In an instrument you can load several different samples (each one called a " "layer), and have a different sample play " "depending on the velocity of the note. Only one sample at a time will play." msgstr "" #: manual.docbook:1861(para) msgid "" "Suppose you have a sample of a floor tom being struck softly. If you simply " "play the sample louder — it will not sound the " "same as a real tom that has been struck very hard. If you wish to mimic this " "in your instrument, you can load one sample for soft playing, and a " "different sample for loud playing." msgstr "" #: manual.docbook:1873(glossterm) msgid "Low-Pass Filter" msgstr "" #: manual.docbook:1875(para) msgid "" "A filter that attenuates (silences) high frequences, but allows low " "frequencies to pass through." msgstr "" #: manual.docbook:1886(glossterm) msgid "Mute" msgstr "" #: manual.docbook:1888(para) msgid "" "To make no noise. A setting on an instrument that prevents any audio output." msgstr "" #: manual.docbook:1894(glossterm) msgid "Mute Group" msgstr "" #: manual.docbook:1896(para) msgid "" "A group of instruments (samples) that should mute (stop playing) immediately " "after another instrument in the group is triggered." msgstr "" #: manual.docbook:1899(para) msgid "" "This is typically used in hi-hats, where there's a different instrument " "(sample) for when the hi-hat is open or closed. With a real hi-hat, the " "sound of the open hi-hat will stop as soon as you close it. However, if you " "use two samples — the open sound will continue even after you have " "triggered the closed sound. By placing both instruments in the same mute " "group (group #1, for example)... triggering closed sound will immediately " "stop the open sound (and vice versa)." msgstr "" #: manual.docbook:1914(glossterm) msgid "Octave" msgstr "" #: manual.docbook:1916(para) msgid "" "A span of frequencies where the top-most frequency is exactly twice the " "frequency of the bottom frequency." msgstr "" #: manual.docbook:1919(para) msgid "" "For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, " "and 575 Hz to 1150 Hz. While the frequency differences are very different " "(20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they " "sound like the same distance." msgstr "" #: manual.docbook:1936(para) msgid "" "After the note is released, this is the amount of time " "to reduce the parameter from the sustain level to 0." msgstr "" #: manual.docbook:1945(glossterm) msgid "Resonance" msgstr "" #: manual.docbook:1947(para) msgid "" "When referring to a resonance filter, this is the parameter that determines " "how much of a boost (gain) to give the frequencies at the cutoff." msgstr "" #: manual.docbook:1956(glossterm) msgid "Resonance Filter" msgstr "" #: manual.docbook:1958(para) msgid "" "A filter that gives a large boost to a very narrow range of frequencies. " "Typically it will be part of a high-pass or a low-pass filter, where the " "boosted frequencies are centered on the cut-off frequency." msgstr "" #: manual.docbook:1970(glossterm) msgid "Roll-off" msgstr "" #: manual.docbook:1972(para) msgid "" "This is the amount that frequencies are attenuated (suppressed) as the " "frequency changes (typically measured in dB/octave)." msgstr "" #: manual.docbook:1975(para) msgid "" "For example, in a low-pass filter the frequences below the cutoff frequency " "are not attenuated (they pass-through with the same volume). Same with the " "cutoff frequency. As you go above the cutoff frequency, the frequencies that " "are near the cutoff frequency are not attenuated very much at all. However, " "the frequencies that are much higher than the cutoff are attenuated " "(suppressed) a lot. This is usually approximated by a straight line (on a " "log scale) and measured in in dB of attenuation per octave of frequency." msgstr "" #: manual.docbook:2002(para) msgid "" "The level to hold the parameter after finishing the " "decay time. This level will be maintained until the not is released." msgstr "" #: manual.docbook:2020(para) msgid "" "MIDI devices are required to send this information along with the note. " "Synthesizers use this information to adjust several parameters on the sample " "(typically the volume). In Hydrogen, it is only used to adjust how loud the " "sample is played back." msgstr "" #. Put one translator per line, in the form of NAME , YEAR1, YEAR2. #: manual.docbook:0(None) msgid "translator-credits" msgstr "" #, fuzzy #~ msgid "Fig. 1 The Audio System tab" #~ msgstr "" #~ "Fig. 4 La linguetta Audio System." #, fuzzy #~ msgid "Fig. 2 The MIDI System tab" #~ msgstr "Fig. 5 La linguetta MIDI System." #, fuzzy #~ msgid "Fig. 3 The appearance tab" #~ msgstr "Fig. 6 La linguetta Appereance" #, fuzzy #~ msgid "" #~ "Fig. 4 The Audio engine Info window" #~ msgstr "" #~ "Fig. 4 La linguetta Audio System." #, fuzzy #~ msgid "Fig. 5 The main toolbar" #~ msgstr "Fig. 14 Dettaglio del Mixer" #, fuzzy #~ msgid "Fig. 6 The Song Editor" #~ msgstr "Fig. 1 The Song Editor" #, fuzzy #~ msgid "Fig. 7 The Pattern Editor" #~ msgstr "Fig. 2 Il Pattern Editor" #, fuzzy #~ msgid "Fig. 8 The Mixer" #~ msgstr "Fig. 3 Il mixer" #~ msgid "Fig. 3 Select an effect." #~ msgstr "Fig. 3 Selezionate un effetto." #~ msgid "Fig. 12 The Pattern Editor" #~ msgstr "Fig. 12 Il Pattern Editor" #~ msgid "" #~ "Fig. 13 Inserting notes in a pattern" #~ msgstr "" #~ "Fig. 13 Stiamo inserendo note nel " #~ "pattern" #~ msgid "Fig. 14 The mixer" #~ msgstr "Fig. 14 Dettaglio del Mixer" #, fuzzy #~ msgid "" #~ "Compiling Hydrogen depends on the following libraries: " #~ msgstr "La compilazione di hydrogen dipende dalle seguenti librerie:" #, fuzzy #~ msgid "" #~ "Before compiling, check for additional options with: \n" #~ "\t\t$./configure --help\n" #~ "\t\t Namely, if you get some error while running Hydrogen and " #~ "you want to report it remember to configure the makefile with: \n" #~ "\t\t$./configure --enable-debug\n" #~ "\t\t Please note that at the moment no binary packaging (.rpm, ." #~ "deb, ...) is available. Contributors are welcome. Also remember to " #~ "compile with at least a GCC 3.x to be 100% sure to avoid any possible " #~ "problem." #~ msgstr "" #~ "Prima di procedere alla compilazione, controllare eventuali opzioni " #~ "aggiuntive con: \n" #~ "bash$ ./configure --help\n" #~ " XXX \n" #~ " $./configure --enable-debug\n" #~ " XXX" #~ msgid "Audio driver configuration" #~ msgstr "Configurazione audio driver" #~ msgid "" #~ "It's very important to choose the proper audio driver for our system, " #~ "since the choice may influence quite much general performances. The " #~ "choice is between Oss audio driver, ALSA and Jack audio driver." #~ msgstr "" #~ "E' molto importante scegliere il driver audio giusto per il nostro " #~ "sistema, in base al driver scelto le prestazioni e le possibilita' di " #~ "Hydrogen possono cambiare drasticamente. Sono disponibili 2 driver audio: " #~ "Oss Audio Driver e Jack Audio Driver." #~ msgid "OSS audio driver" #~ msgstr "OSS audio driver" #~ msgid "Jack audio driver" #~ msgstr "Jack audio driver" #~ msgid "ALSA audio driver" #~ msgstr "ALSA audio driver" #~ msgid "" #~ "NEW! Now Hydrogen works also with ALSA, the new Linux standard audio " #~ "drivers." #~ msgstr "" #~ "NUOVO! Aggiunto ad Hydrogen l'ouput sui driver ALSA, il nuovo standard " #~ "audio per Linux." #~ msgid "GUI" #~ msgstr "Interfaccia grafica" #~ msgid "" #~ "Double clicking over the name of an instrument in the Mixer frame will " #~ "bring up a doubled face tool to modify many properties of that instrument." #~ msgstr "XXX" #~ msgid "" #~ "The first tab ('Instrument') lets you fine tune the instrument: you can " #~ "adjust Attack, Decay, Sustain, Release, Cutoff and Resonance (both of " #~ "which can be excluded) or even add a random pitch." #~ msgstr "" #~ "La prima scheda ('Instrument') permette di modificare effetti come " #~ "Attack, Decay, Sustain, Release, Cutoff and Resonance (entrambi " #~ "escludibili) o aggiungere un pitch." #~ msgid "" #~ "The second tab ('Layer') can add WAV/AU/AIFF/FLAC samples up to 16 layers " #~ "to the instrument according to the level of its velocity and tune pitch " #~ "and gain." #~ msgstr "" #~ "La seconda scheda ('Layer') permette di aggiungere campioni WAV/AU/AIFF/" #~ "FLAC fino a 16 layer diversi a seconda del livello di " #~ "intensita' (velocity) che impostiamo per quello strumento oppure di " #~ "modificare pitch e il guadagno." #, fuzzy #~ msgid "" #~ "From the pull-down menus it's worth noticing: File-->'Save as' to save " #~ "the current song in .h2song format, File-->Export to export it in WAV/" #~ "MID format, File--> Preferences, " #~ "Window--> Audio Engine Info and " #~ "Window--> Drumkit manager." #~ msgstr "" #~ "Dai menu si segnala: File-->'Save as' per salvare la canzone " #~ "correntemente aperta in formato .h2song, File-->Export per esportarla in " #~ "WAV, File--> Preferences, Window--> Audio Engine Info, Window--> Drumkit manager." #~ msgid "" #~ "From the \"Audio System\" tab (Fig. 4) it is possible to modify the audio " #~ "driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and " #~ "sampling rate. We can also set some features of Hydrogen like " #~ "Enable track outputs useful if you want to add effects to " #~ "a single instrument with jack-rack; Connect to Default Output " #~ "Pair simply connects ALSA output to the default ports: uncheck " #~ "this if you want to connect jack output to other ports without " #~ "disconnecting them first. Keep an eye also on the value of \"Polyphony\": " #~ "depending on your CPU you may want to change the max simultaneous notes " #~ "in order to prevent hydrogen from xrun. Clicking on the \"Midi System\" " #~ "tab (Fig. 5) will select a menu to enable a MIDI device, a specific " #~ "channel or all of them, while clicking on \"Appearance\" tab (Fig. 6) " #~ "let's you to modify font size, type of frame (Child or Top Level) and " #~ "speed of mixer's peaks falloff and QT style of the windows." #~ msgstr "" #~ "Dalla linguetta \"Audio System\" (Fig. 4), si puo' modificare il driver " #~ "audio (OSS, Jack ALSA o PortAudio) con relativo buffer e sampling e altre " #~ "particolari caratteristiche di Hydrogen come la funzione \"Enable Track " #~ "Outputs\", utile se si vuole aggiungere effetti a un singolo strumento " #~ "con jack-rack, per esempio. Connect to Default Output Pair " #~ "connette semplicemente l'output ALSA alle porte standard: deselezionare " #~ "se si vuole agganciare il driver Jack su altre porte senza prima dover " #~ "disconnettere quelle standard. Tenere d'occhio anche il valore di " #~ "Polyphony poiche' a seconda della CPU di cui si dispone ci " #~ "potrebbe essere bisogno di cambiare il valore per evitare che Hydrogen " #~ "vada in xrun. Cliccando sulla linguetta Midi System (Fig. 5) si accede al " #~ "menu per attivare un determinato device MIDI con uno specifico canale " #~ "oppure tutti, mentre cliccando sulla linguetta Appearance " #~ "(Fig. 6) si puo' regolare la dimensione del font, la tipologia dei frame " #~ "(Child frame o Top Level) e la velocita' di caduta dei picchi (peak " #~ "falloff) nel Mixer e lo stile QT delle finestre." #~ msgid "" #~ "This tab (Fig. 7) will bring up a window with general infos about " #~ "Hydrogen and audio driver. Buffer and sampling rate of Jack audio driver " #~ "are customizable when the server is started from the shell." #~ msgstr "" #~ "Questo tab (Fig. 7) permette di visualizzare informazioni sullo stato del " #~ "programma, del driver audio e driver midi. Il buffer e il sampling del " #~ "driver audio Jack sono modificabili con gli appositi parametri al momento " #~ "di lanciare il server da shell." #~ msgid "" #~ "Fig. 7 The Audio Engine Info window. " #~ "Better check that cpu-meter on old systems and crowded /proc dir ;)" #~ msgstr "" #~ "Fig. 7 La finestra Audio Engine Info. " #~ "Meglio tenere d'occhio il controllo sulla CPU in sistemi anziani o con /" #~ "proc affollata ;)" #~ msgid "" #~ "The drumkit manager shows all the options concerning drumkits, i.e. " #~ "groups of sounds (WAV or FLAC) to be binded with every track available so " #~ "to obtain a proper \"groove\" according to the situation (disco music, " #~ "rock, hip hop, etc.). To let you have a rough idea of a good example of " #~ "use of these drumkits, it is advisable to play the associated .h2song " #~ "sample song." #~ msgstr "" #~ "Da qui invece si accede alle opzioni che riguardano i drumkit, cioe' " #~ "gruppi di suoni (WAV o FLAC) da associare a ciascuna traccia disponibile " #~ "per ottenere un \"groove\" piu' omogeneo a seconda della circostanza " #~ "(disco music, rock, ecc. ecc.). Per avere un'idea della resa ottimale dei " #~ "drumkit si consiglia di caricarli e poi suonare il file .h2song " #~ "generalmente abbinato." #~ msgid "" #~ "From the first screen (Fig. 8) we can load/delete the drumkit, with a " #~ "short description. Here (Fig. 9) we can save some infos about the current " #~ "drumkit and from here (Fig. 10) we can import a drumkit (.h2drumkit) " #~ "(Fig. 11) or export it (Fig. 12)." #~ msgstr "" #~ "La prima schermata (Fig. 8) permette di caricare/cancellare il drumkit " #~ "selezionato, seguito da una breve descrizione. La seconda schermata " #~ "consente di salvare una descrizione per il drumkit corrente e da qui " #~ "(Fig.9) invece di puo' importare un drumkit (con estensione .h2drumkit) " #~ "(Fig. 10) o di esportarlo (Fig. 11)." #~ msgid "Fig. 9 Save drumkit." #~ msgstr "Fig. 9 Salva drumkit." #~ msgid "Antonio Piraino" #~ msgstr "Antonio Piraino" #~ msgid "Alessandro Cominu" #~ msgstr "Alessandro Cominu" #~ msgid "" #~ "It is possible to download the source files directly from CVS snapshots " #~ "with:" #~ msgstr "E' possibile scaricare i sorgenti direttamente da CVS con:" #~ msgid "" #~ "After having downloaded and decompressed the tar.gz file there's only to:" #~ msgstr "" #~ "Dopo aver scaricato e decompresso gli archivi tar.gz e' semplicemente " #~ "necessario eseguire:" #~ msgid "ROLES_OF_TRANSLATORS" #~ msgstr "" #~ msgid "CREDIT_FOR_TRANSLATORS" #~ msgstr "" hydrogen-0.9.6-beta3/data/doc/manual_nl.html000066400000000000000000003133021211146647700206660ustar00rootroot00000000000000Hydrogen handleiding

    Hydrogen handleiding

    Antonio Piraino

    Alessandro Cominu

    Thijs van Severen

    Sebastian Moors

    Samenvatting

    Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter is still experimental, so ask in the developers mailing list for further details.


    Hoofdstuk 1. Inleiding

    1. Downloaden

    You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

    If you want to compile Hydrogen yourself (see Paragraaf2), you can download the latest source files directly from our subversion server with:

    $ svn co http://svn.assembla.com/svn/hydrogen/trunk

    A certain release can be fetched with:

    $ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.5

    Compiling Hydrogen depends on the following libraries:

    Please install them with your distribution's package manager. If you're running a debian-based system, you can install the libraries with:

    $ apt-get install libqt4-dev g++ libasound2-dev \
            libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
            liblash-dev libportaudio-dev libportmidi-dev 
          

    2. Compileren

    Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

    2.1. Using scons

    Decompress the tarball or go to the directory where the subversion copy was checked out:

    $ cd hydrogen-*
              $ scons
              $ su -c "scons install"
            

    Before compiling, check for additional options with:

    $ scons --help
            

    If you want to use features which are not enabled by default (for instance PortAudio), you can enable them with:

    $ scons portaudio=1
            

    Namely, if you get some error while running Hydrogen and you want to report it remember to configure hydrogen with:

    $ scons debug=1
            

    To clean up compiled code:

    $ scons -c
            

    2.2. Using cmake

    Compiling with cmake can be done easily by using the make_helper script. Decompress the tarball or go to the directory where the subversion copy was checked out and run the make_helper script without any arguments to display the help :

    $ cd hydrogen-*
              $ ./make_helper
            

    The help is now displayed (and is self-explanatory) :

    $ used builder : cmake
              $ usage ./make_helper [cmds list]
              $ cmds may be
              $    r or rm     =
    > all built, temp and cache files
              $    c or clean  =
    > remove cache files
              $    m or make   =
    > launch the build process
              $    d or doc    =
    > build html documentation
              $    h or help   =
    > show the build options
              $    x or exec   =
    > execute hydrogen
            

    3. Preferences

    First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).

    3.1. The General tab

    On the "General" tab (Figuur1.1) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

    If you want to use Lash to manage your Jack connections you should enable it here so Hydrogen allows interaction with Lash.

    The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see Paragraaf3.1)

    The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching you need to enter the path where rubberband is installed on you system here.

    Figuur 1.1. The General Tab

    The General Tab

    3.2. The Audio System tab

    From the "Audio System" tab (Figuur1.2) it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

    We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

    Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.

    Figuur 1.2. The Audio System Tab

    The Audio System Tab

    The following drivers are available:

    • jackd: The Jack driver is a professional audio server which permits very low lag and exchanges with other audio software. We strongly recommend using this driver to have the best out of Hydrogen. JACK server will start automatically if not already running.

    • ALSA: the widely adopted Linux standard audio drivers

    • OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort.

    • PortAudio: an open-source multi platform audio driver

    • CoreAudio: a driver for Mac OS X (experimental)

    3.3. The Midi System tab

    The "Midi System" tab (Figuur1.3) contains all MIDI settings. Here you can choose the MIDI driver, input, and channel(s) that Hydrogen should respond to. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the 'binding' action line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action.

    Figuur 1.3. The MIDI System Tab

    The MIDI System Tab

    3.4. The Appearance tab

    The "Appearance" tab (Figuur1.4) let's you modify Hydrogen look and feel (font settings and interface style). Also the VU meters fall-off speed of the Mixer Window can be changed here.

    Figuur 1.4. The Appearance Tab

    The Appearance Tab

    3.5. The Audio Engine tab (debug only)

    The "Audio Engine" tab (Figuur1.5) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

    Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.

    Figuur 1.5. The Audio Engine tab

    The Audio Engine tab

    Hoofdstuk 2. Using Hydrogen

    1. Used Filetypes

    Before working with Hydrogen, please familiarize with these filetypes:

    • *.h2pattern: XML file describing a single pattern. Patterns are group of beats and are managed in the pattern editor.

    • *.h2song: XML file describing the whole song (or sequence). Songs are group of patterns with their properties and are manager using the song editor

    • *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs.

    • *.h2drumkit: a compressed and archived folder containing all sound samples composing a drumkit and a description XML file. Drumkits are basically group of sound samples.

    2. Main menu

    Projects: this menu offers file related functions.

    • New - Create a new song

    • Show Info - Set general properties of the song such as name, author, license and generic notes

    • Open - Open a song

    • Open Demo - Open a demo song (demo songs are stored in $INSTALLPATH/share/hydrogen/data/demo_songs)

    • Open recent - Open a menu showing last used songs

    • Save - Save changes to current song

    • Save as - Save current song specifying a name (default path: $HOME/.hydrogen/data/songs)

    • Open pattern - Open a saved pattern belonging to the current drumkit

    • Export pattern as - Saves a pattern. It will be stored in $HOME/.hydrogen/data/patterns/drumkit_name

    • Export MIDI file - Export current song in MIDI format

    • Export song - Export current song in WAV format

    • Quit - Quit Hydrogen

    Instruments: this menu offers instruments and drumkit (sound libraries) functions.

    • Add instrument - Add a new instrument to your current drumkit

    • Clear all - Delete all instruments from the current drumkit

    • Save library - Saves all instruments settings (and their sound samples) in $HOME/.hydrogen/data/library_name

    • Export library - Compress all instruments samples and settings in a drumkit in $HOME/.hydrogen/data/library_name

    • Import library - Imports another drumkit from the local filesystem or download it from a remote location through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen website for an example). To load another drumkit in your current working session of Hydrogen, read Paragraaf7.

    Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window.

    • Playlist editor - A tool to manage playlists.

    • Director - Open the director window.

    • Mixer - Open the mixer window.

    • Instrument rack - Open the instrument rack panel.

    • Preferences - Open the main preferences window. Read Paragraaf3 on how to configure Hydrogen.

    Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !).

    • Show audio engine info - Open a monitor with various stats

    • debug action - Insert debug commands.

    • Print Objects - Print on stdout current objects map.

    Info

    • User manual - Open a window with this manual :)

    • About - The usual window with license information, acknowledgements, etc.

    3. De hoofd werkbalk

    Before analyzing the two main frames of Hydrogen, let's take a quick look at the main toolbar and its components:

    • Pilot the song using the start, stop, pause, etc. buttons

    • Choose between "pattern" or "song" mode: in "pattern" mode only the currently selected pattern will play, while in "song" mode all patterns inserted will be played.

    • An advanced tap tempo function: choose note length and how many notes to wait before recalculating BPM, then click the comma key repeatedly until the 'R' letter will appear and the BPM will be updated. (see Paragraaf3.1)

    • Manually set BPM

    • Manage JACK transport

    • Open the mixer and the instrument rack panels

    Figuur 2.1. The Main Toolbar

    The Main Toolbar

    • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

    • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see Paragraaf4). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see Paragraaf5).

    • Set measure type and Beat Counter (see Paragraaf3.1).

    • Als je het tempo van een nummer wil aanpassen klik je op de + of - knop. Om de metronoom aan of uit te schakelen kan je het onderste knopje gebruiken.

    • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

    • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected.

    3.1. Tap Tempo and BeatCounter

    It is possible to change tempo at any time using the tap-tempo and BeatCounter features of Hydrogen. You can change these while playing or while the song is stopped. To change the tempo, hit the , (comma) key in tempo for the number of beats in the measure. After the correct number of beats are met, the tempo will change to the average tempo that you tapped in. If you continue to tap, these new taps will become a part of a rolling average. If you tap accidentally, or if you wait too long between taps, the tap tempo counter will start over.

    The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo on steroids. By default the BeatCounter display is not visible. To see the BeatCounter widget click the upright button (BC) between Song/Pattern mode selector and the BPM-widget. Or, it can be shown by pressing the comma key (,).

    The tempo that you tap will be considered even beats of the beat type. The beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change the beat type use the left arrow buttons. To change the number of beats that are counted, use the right arrow button. You can set from 2 to 16 beats. (I.e. if you set the beat to 6, you will have to tap 6 times before the new tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. Every time you tap with the comma key, it will show the number of taps that you have entered (1, 2, 3...).

    The button in the bottom right-hand controls the auto-start feature, and it toggles between S and P. When it shows P for (Play), the song will set the new tempo and automatically start to play after you tap the right number of beats (if it's not already playing, of course). This way, if you have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing on the next beat. When it shows S (for Set BPM), the auto-start is disabled.

    For example: Suppose you have a live band, Hydrogen, and a softsynth that is controlled by Seq24)... and you want them all to start at the same time. Set the beat type to 1/4 and the number of beats to 4. Enable auto-start (button shows P). Count off the band 1-2-3-4 (while tapping the comma key) — and everyone starts on 1.

    Another example: Same situation, but the song doesn't require Hydrogen or synths until some point later. During that time, a human (e.g. guitar player) will be setting the tempo. On the measure before Hydrogen is supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in on the next beat (at the right tempo).

    If you are using the JACK Transport, the BeatCounter continues to work. If another program is the JACK Transport Master, Hydrogen will respond to tempo change events from that application. Note that in this situation, Hydrogen is supposed to be a slave, so some of the BeatCounter features will be disabled or will not work properly. If Hydrogen is the JACK Transport Master, tempo changes from Hydrogen will be reflected in those programs (if they support it).

    Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see Paragraaf3.1 ). Here you will finde two spinboxes:

    • Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program.

    • Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated).

    Note that these can be set to positive (+) or negative (-) values. In order to find useful values for these, you will need to take some time to play with it. Also, you may want different values depending on the speed of your hardware, audio devices, drivers, etc. Using the BeatCounter effectively requires practice.

    4. De Opname editor

    The "Song Editor" (Figuur2.2) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel is a complete bar as shown in the underlying "Pattern Editor" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns.

    The Song Editor comes with 7 buttons:

    • Completely delete all patterns (asks for confirmation!).

    • Create a new pattern (and asks for a name).

    • Move currently selected pattern up or down.

    • Enable selecting patterns for copy & paste (Select Mode).

    • Enable Draw Mode.

    • Switch from "Single pattern mode" to "Stacked pattern mode" and back..

    XXX

    Figuur 2.2. The Song Editor

    The Song Editor

    5. De Patroon Editor

    The "Pattern Editor" lets us create or modify the pattern (bar) which is currently selected. You can add/remove notes, and tune a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)

    First let's take a look at the (classic) 'Drum' mode :

    Figuur 2.3. Pattern Editor in Drum mode

    Pattern Editor in Drum mode


    5.1. Pattern Editor Controls

    The top part of the pattern editor contains a number of controls :

    Figuur 2.4. Pattern Editor Controls

    Pattern Editor Controls

    From left to right :

    • SIZE : lets you choose the size of the pattern (the number of bars)

    • RES : this is the current grid resolution (4 through 64)

      Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer.

    • HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern.

    • QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied.

    • Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your sound library as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

    • Note Length / Note off : these are 2 different ways to define the duration of a note. See Paragraaf5.3 for usage.

    • Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)

    5.2. Pattern Editor Drumkit

    The section on the left shows you what drumkit/library is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

    Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select

    • Clear notes : to remove all notes for this instrument in this pattern.

    • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

    • Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played.

    • Delete Instrument : well, deletes the instrument ;-)

    The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons.

    The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit/library. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys.

    Important Notes :

    The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default.

    Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

    Here's a quick reference of the above bindings for your convenience.

    5.3. Pattern Editor Sequence area

    This is where it all happens, this is where you can make music :-)

    In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

    If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note.

    (Figure above, from left >right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

    So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see Paragraaf2) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see Hoofdstuk3 for a basic walk-through of how the pattern editor works)

    5.4. Pattern Editor Note Properties

    Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :

    • Velocity : how hard the note is played (the volume of the note)

      Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping.

    • Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)

    • Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)

    • Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'

      The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

    5.5. Pattern Editor Piano mode

    Drum mode (see Figuur2.3) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

    You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.

    Figuur 2.5. Pattern Editor in Piano mode

    Pattern Editor in Piano mode

    6. Mixer

    Figuur 2.6. The Mixer

    The Mixer

    The Mixer frame (Figuur2.6) is useful for tuning a global or single volume of the current drumkit. It shows the current peak (click on to disable, useful on old CPUs) and let you set the maximum peak allowed (tune with the fader knob of the instrument), lets you modify attributes like pan, play solo , mute or test play only that instrument ; selecting in the Pattern Editor an instrument causes a blue LED to light on (near the play button). Near the global volume knob, you can set 3 global effect such a swing (shifts a few notes back or forward not randomly), timing (modify timings of the notes) and humanize effect (random velocity editing).

    In addition to all this you can set up to 4 special LADSPA effects for each instrument switching the button. See next section for a detailed overview.

    7. Sound Library (Drumkit Manager)

    The Sound Library saves you time in managing your drum kits, favorite patterns, and favorite songs. When making new songs and drum kits, the Sound Library makes it easier for you to reuse and mix the instruments and patterns from other kits and songs.

    7.1. System Drumkits

    This lists the drumkits that were installed by your system administrator. It was determined by the compile-time prefix. On Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or possibly /usr/local/share/hydrogen/data/drumkits. These kits are available to all users on the system, and users are usually not able to add to them.

    To load a drumkit from here, right-click the drumkit and select Load. This will replace your current drumkit with the one that you selected. To load a single instrument from that kit, left-click the plus to the left of the drumkit's name to show all the instruments. With your left mouse button, click and drag the instrument into your current kit. The instrument will be added to the drumkit that you currently have loaded.

    7.2. User Drumkits

    These are your own drum kits that you can manage yourself. They are usually stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by selecting InstrumentsSave library.

    Loading drumkits and instruments to use is the same as for the System Drumkits (see Paragraaf7.1).

    7.3. Patterns in the Sound Library

    Before you save your favorite patterns to the sound library, be sure to edit it's properties by right-clicking and selecting Properties. There, you can give the pattern a title and a category. You can use one of the categories already provided, or create your own categories by simply typing in a category name. The category name is important, because the patterns will be filed by category in the Sound Library.

    You can save your favorite patterns in the sound library by right clicking the title of the pattern in the song editor, and selecting Save Pattern. It will appear in the Sound Library underneath Patterns and the category that you assigned to the pattern.

    7.4. Songs in the Sound Library

    To save songs in the Sound Library, put them in your data directory underneath the songs folder (usually $HOME/data/songs. To remove them, remove the file from that folder.

    8. Drumkits and Instrument Editing

    Creating a new drumkit with Hydrogen is done with the Instrument Editor. Using the instrument editor you can load samples, set envelope parameters, set the gain, and a few other advanced features like mute groups, low-pass resonance filter, and pitch randomization.

    Instead of creating your own drumkit, you can also use or download existing drumkits using the Paragraaf7.

    8.1. Concepts

    The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a note, the sample is simply played back at the right time. There's a few concepts and terms that you should understand when you are putting together a drumkit. (See Glossary for more detailed explanations.)

    Sampling Synthesizer Terms

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds long.

    Gain

    Volume adjustment.

    Velocity

    How hard you hit a note.

    ADSR Envelope Generator

    An Attack/Decay/Sustain/Release envelope generator. After you trigger a note, Hydrogen will attack the note by increasing its volume from 0 to the full velocity of the note. After reaching full velocity, it will decay the note by lowering the volume until it reaches the sustain level. When the note is released, Hydrogen reduces the volume from the sustain level back down to 0.

    Attack

    The amount of time to go from 0 to full velocity.

    Decay

    The amount of time to go from full velocity to the sustain volume.

    Sustain

    The level (how loud) to hold the note between the sustain and the release. It is a percentage of the velocity. It does not depend on time.

    Release

    The amount of time to go from the sustain volume back down to 0.

    Typical samples that are used in Hydrogen are: the sound of a single drum hit, the sound of a single cymbal hit, the sound of a single cowbell hit. Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen will play whatever sound you have loaded. So, to put together a drum kit you need to gather short recordings of the bass drum, each tom, each cymbal, the high hat open, the high hat closed, the snare drum (snare on), the snare drum (snare off), rim shots, etc.

    However, there are no rules about what a sample can be. It's not uncommon to use Hydrogen to trigger non-drum sounds like: audio clips of people talking, a clip from a song, sound effects, audio clips from movies, and famous people speaking. Be creative!

    8.2. Creating a New Drumkit

    To start a brand new drum kit, select InstrumentsClear All . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select Delete Instrument. To add more instruments, select InstrumentsAdd instrument .

    Select an instrument to start editing it. This is done by left-clicking on the name of the instrument in the instrument list (at the left). You will notice that the name of the instrument in the Instrument Editor matches the one that you clicked.

    After you have your drum kit working the way you want, select InstrumentsSave library . It will ask you for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace.

    Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits).

    To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select InstrumentsExport library from the menu. Select the drum kit that you wish to export, and give it a file name to save it to.

    8.3. Creating an Instrument and Layers

    For each instrument in a drum kit, you can load several samples and set different synthesizer parameters. This section will step you through how to create a new instrument and load the samples.

    To begin creating an instrument, select InstrumentsAdd instrument. This will give you a blank instrument to start from.

    Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides several in the data/drumkits directory.

    In the instrument editor, click on Layers. You can layer several samples into the instrument. Which one is played depends on the velocity of the incoming note. Click Load Layer and point the Audio File Browser to your sample. Note that the Audio File Browser will allow you to preview the sample before you load it. It will also allow you to load more than one sample at a time. But for now, only load one.

    After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To load a second sample, click the slot just below it, and then click Load Layer to bring in another sample.

    After bringing in both samples, you'll probably notice that only the first sample is being played whenever you trigger the instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light blue rectangles and you see that you get a left-right drag cursor. Now drag the sample to the left or right (like a curtain). You will now see Layer 2 appear.

    The velocity setting for the layer is 0-velocity on the left, and full velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)

    Now, in the pattern area, set up a simple pattern that plays this instrument. Adjust the velocity settings on each note so that you can get the different samples to sound. Now set the pattern to loop and notice how your different samples are getting triggered. (To learn about editing a pattern, see Paragraaf5)

    For each layer, you can set the Gain and the Pitch. The pitch also has a Fine adjustment.

    Use the Gain adjustment to control how loud the sample will play. This is necessary because it's extremely difficult to get a set of samples that all sound at about the same volume. By adjusting here, the samples that were recorded too quietly can be turned up to match your loud samples (that had to be turned down).

    Waarschuwing

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    The pitch of the sample can be modified with the pitch controls. The Pitch knob adjust the pitch in musical half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts the pitch 50 cents. (One half-step is 100 cents.)

    Opmerking

    The pitch is adjusted by playing the sample back faster or slower. This is called the Dopplar Effect. So, if you have a 1-second sample that you turn down -12 (1 octave), you sample will only last for .5-seconds.

    8.4. Instrument Parameters

    In the instrument editor, click on the General button. Here you can adjust several parameters that are for the whole instrument (not for each layer). The parameters that you can adjust are:

    • Envelope parameters: Attack, Decay, Sustain, Release. (See Envelope Generator)

    • Gain: The overall volume of the instrument.

    • Mute Group: Which mute group this instrument is a member of (see Mute Group).

    • Filter Parameters: Bypass, Cutoff, Resonance.

    • Random Pitch

    It's important that you understand Paragraaf8.1 in order to continue on.

    8.4.1. Envelope Parameters

    When the instrument is triggered, its volume is run through an ADSR Envelope. The parameters operate as follows:

    • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. [1]

    • Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter.[1]

    • Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity.

    • Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available.[1]

    If the sample is shorter than the times that you specify, the sample will end, regardless of which phase of the ADSR it is in. If the note is sustained, it does not draw out the note while you are holding it. It only holds the gain (volume) parameter during that time.

    8.4.2. Gain and Mute Group

    The gain sets the overall volume for the sample. This gain is applied after the gain that you set for the layer, and before the gain that is set for the mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is set higher, the samples will be amplified.

    Waarschuwing

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    Hydrogen provides more mute groups than you know what to do with (over 256). A mute group is a grouping of instruments that are mutually exclusive — only one instrument may be playing at any time. If one is playing and another instrument in the group is triggered, it will immediately silence (mute) and start playing the other instrument. This is useful, especially, for instruments like hi-hats where the open sound and the closed sound are different instruments.

    If the mute group is set to Off, then the instrument is not part of any mute grouping. If the mute group is set to any number, then that is the group that the instrument is a part of. To set other instruments into the same grouping, set their mute group parameter to the same number. (For example, to group all the high-hat instruments, you can set all their mute group parameters to 1. To have a snare drum mute group, set their mute group parameters to 2.)

    8.4.3. Filter and Random Pitch

    The filter is a low-pass resonance filter. If you don't wish to use is, click the BYPass button so that it's red. If it's not red, then the filter is active. The cutoff parameter adjusts the cutoff frequency for the filter. The resonance parameter adjusts how much to resonate the cutoff frequency. If the resonance is set to 0, then the filter is just a simple low-pass filter.

    Opmerking

    The cutoff frequency of the filter varies with the sample rate of your audio card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample rate.

    The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound more like a real drummer.

    8.5. Tips on Editing Instruments

    With all of the different parameters available to tweak, it can be difficult to set up something that sounds nice when you're done. Here's a few tips on setting up an instrument:

    Turn down the gain. Every time you have a gain knob (i.e. an amplifier), this is called a gain stage. With every gain stage you have, it's easy to overdrive your signal — which means the signal gets distorted by clipping. In addition, if you have two samples that, by themselves, peg your meters — what do you think happens when you combine them? That's right, you overdrive the signal again.

    If things sound bad and distorted, start by turning down the gain setting on the layer... especially if it's larger than 1.0. Then turn down the instrument gain. Then any gain on a LADSPA effect. Then the fader on the mixer. Then the master output fader.

    Test samples at full velocity. Your sample will be played louder if the velocity is higher. So, if you set everything to sound nice and full with velocity at 0.7, what will happen when you get a full velocity of 1.0? (Hint: clipping.)

    Try to use samples that are -6 dB max. Visually, this means samples that peak at only 1/2 of full scale. Otherwise, turn your layer gain to about .5.

    Remove all DC offsets from the sample. In a sample editor, there is usually a line down the center of your sample's waveform. This is the zero-line. The beginning of your sample should be on this line. The end of your sample should also be on this line. However, if your signal is a little above or a little below this line, you will hear a click at the beginning and the end of your sample whenever it is played. If your sample editor doesn't provide any tools to fix a DC Offset problem, you can eliminate the noise by putting a slight fade-in/out at the ends of your sample.

    The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the attack and delay — the sample will stop playing at the end.

    Things change with the sample rate. If you have a really nice setup with all your parameters painstakenly tweaked... things will change if you change the sample rate of your audio card. Many of Hydrogens internal settings and parameters are done based on how many samples go by, and not on how many seconds go by. The sort of things that change are: anything time-base (like attack and release) and anything frequency based (like the cutoff frequency).

    9. LADSPA plugins

    Hydrogen can also add effects to sounds using any LADSPA plugin library. You need to have installed the LADSPA sources (available from http://www.ladspa.org) and while this will give a rough idea of how it works you should really have a taste of the real thing installing one or more plugin libraries, it's as simple as a scons && scons install. Here are a few places to download plugin libraries:

    Plugins Kill

    A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others.

    Once you have installed a few plugins open a song you'd like add an effect to and select an instrument that has a few beats in the pattern. In the Mixer click on and select one of the four available effect line Click on the Edit button ( ), than on Select the FX: this will bring up another window (Figuur2.7) that lets you choose an effect amongst those installed, they are alphabetically sorted and categorized. Once you're done, adjust the level from the mixer and start playing. Each round knob in the FX part controls the level of its effect. If you want to quickly enable/disable the effect click the Bypass ( ) button.

    Figuur 2.7. Select an Effect

    Select an Effect



    [1] The attack, decay, and release parameters are all set by the number of audio samples. This means that the time changes depending on the sample rate of your sound card. The max time for each of them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz).

    Hoofdstuk 3. Een nieuw liedje

    1. "Song" mode en "Pattern" mode

    XXX

    Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to Paragraaf3 for the buttons to activate). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern untill it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns, to create the structure of the song.

    2. Een nieuw patroon

    We'll start from an empty song with an empty pattern, as created by default: "pattern" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor (Figuur3.1) simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!

    Figuur 3.1. The Pattern Editor

    The Pattern Editor

    3. Een nieuw spoor

    Once patterns are created (Figuur3.2), we can copy/paste/delete them simply dragging with the mouse (activate the select mode for the Song Editor and keep pressed left mouse button to select those you want to move or copy).

    Figuur 3.2. Inserting Notes in a Pattern

    Inserting Notes in a Pattern

    4. Aanpassen via de mixer

    Natuurlijk kunnen we ook het Mixer venster gebruiken tijdens het maken of afspelen van patronen

    The Mixer frame (Figuur3.3) is made of 32 independent tracks, each of these is binded to an instrument, plus a "Master Output" line to adjust general output volume and a "FX" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in Figuur3.3 you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter.

    Figuur 3.3. The Mixer

    The Mixer

    Hoofdstuk 4. Shortcut lists

    • [CTRL + N] = New Project

    • [CTRL + O] = Opname openen

    • [CTRL + D] = Open Demo

    • [CTRL + S] = Opname opslaan

    • [CTRL + SHIFT + S] = Save File as

    • [CTRL + P] = Export Pattern as

    • [CTRL + M] = Export MIDI file

    • [CTRL + E] = Export Song

    • [CTRL + Q] = Quit Hydrogen

    • [ALT + B] = Show Director window

    • [ALT + M] = Show Mixer window

    • [ALT + I] = Show Instrument rack

    • [ALT + P] = Show Preferences window

    • [CTRL + ?] = Show manual

    • [Backspace] = Liedje of patroon herstarten vanaf het begin.

    • [spacebar] = Play / Pause

    • [,] (comma key) = Tap tempo (beatcounter)

    Glossary

    This is a glossary of general terms encountered when using Hydrogen, synthesizers, drums, or samplers. The definitions in the text are simplified, but the definitions here are more general and have more explanation. For example, the text of the manual would have you believe that an ADSR is the only kind of envelope generator, and could only ever control the volume. While it's simple for new users, it's not quite right.

    ADSR

    A type of envelope generator that allows you to control the Attack, Decay, Sustain, and Release parameters. Generally, the parameters are proportional to the velocity.

    In Hydrogen, the ADSR envelope generator only controls the volume (attenuation).

    Read more about this in the Wikipedia Article ADSR Envelope

    Zie ook Envelope Generator, Attack, Decay, Sustain, Release.

    Attack

    This is the first phase of an ADSR envelope, and is the amount of time to turn the parameter up from 0 to full velocity after triggering the note.

    Zie ook ADSR.

    Attenuation

    In filters and mixers, this the amount that a signal is reduced (volume).

    Zie ook Roll-off.

    Band-Pass Filter

    A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter.

    Zie ook Filter, High-Pass Filter, Low-Pass Filter.

    Clipping

    A phenomenon that happens to a signal when the signal is too large for whatever is receiving it. The peaks of the signal (which are normally smooth curves) get cut off straight at the max volume (clipped). This distorts the sound and is usually undesirable.

    An example of clipping is when you play music louder than your speaker can handle. Parts of the music sound harsh and fuzzy.

    Cutoff Frequency

    On high-pass and low-pass filters, this is the frequency that divides between those that pass, and those that are attenuated (silenced). In a high-pass resonance filter, or a low-pass resonance filter, the cutoff is also the frequency zone that gets boosted.

    For example, if you have a low-pass filter and you set the cutoff frequency high (i.e. 20kHz)... the filter will not affect the sound. All the audible frequencies will pass through undisturbed. As you lower the cutoff frequency to something like 40 Hz (the low string on a bass guitar), it sounds like someone is putting a blanket over the speaker. The higher frequencies are being attenuated above 30 Hz.

    Zie ook Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Decay

    After reaching full velocity from the attack, this is the amount of time to turn the parameter down from full velocity to the sustain level.

    Zie ook ADSR.

    Envelope Generator

    A way to control (change) a parameter over time as a response to triggering, holding, and releasing a note.

    Did your eyes just glaze over? Let's try again:

    Imagine that you're playing a note on the keyboard and you have your other hand on a knob (volume, filter cutoff, etc.). As you play the note, you twist the knob (often up, then down... or down, then up). You do the same thing on each note. That's what an envelope generator does. See also ADSR

    Fader

    A slider control used to adjust the attenuation (volume) in a mixer. Faders always have an "audio" taper, which means that the attenuation amount changes on an exponential scale.

    Filter

    A device that changes a sound by attenuating specific frequencies. A tone knob is an example of a simple, low-pass filter.

    Zie ook Band-Pass Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Gain

    In an amplifier, this adjust how much (or how little) a signal is amplified (volume). A higher gain value is a louder signal.

    High-Pass Filter

    A filter that attenuates (silences) low frequencies, but allows high frequencies to pass through.

    Zie ook Filter, Cutoff Frequency.

    Instrument

    In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, or a tom).

    Layer

    In an instrument you can load several different samples (each one called a layer), and have a different sample play depending on the velocity of the note. Only one sample at a time will play.

    Suppose you have a sample of a floor tom being struck softly. If you simply play the sample louder — it will not sound the same as a real tom that has been struck very hard. If you wish to mimic this in your instrument, you can load one sample for soft playing, and a different sample for loud playing.

    Zie ook Instrument.

    Low-Pass Filter

    A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through.

    Zie ook Filter, Cutoff Frequency.

    Mute

    To make no noise. A setting on an instrument that prevents any audio output.

    Mute Group

    A group of instruments (samples) that should mute (stop playing) immediately after another instrument in the group is triggered.

    This is typically used in hi-hats, where there's a different instrument (sample) for when the hi-hat is open or closed. With a real hi-hat, the sound of the open hi-hat will stop as soon as you close it. However, if you use two samples — the open sound will continue even after you have triggered the closed sound. By placing both instruments in the same mute group (group #1, for example)... triggering closed sound will immediately stop the open sound (and vice versa).

    Octave

    A span of frequencies where the top-most frequency is exactly twice the frequency of the bottom frequency.

    For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they sound like the same distance.

    Release

    After the note is released, this is the amount of time to reduce the parameter from the sustain level to 0.

    Zie ook ADSR.

    Resonance

    When referring to a resonance filter, this is the parameter that determines how much of a boost (gain) to give the frequencies at the cutoff.

    Zie ook Resonance Filter.

    Resonance Filter

    A filter that gives a large boost to a very narrow range of frequencies. Typically it will be part of a high-pass or a low-pass filter, where the boosted frequencies are centered on the cut-off frequency.

    Zie ook Filter, Cutoff Frequency, Resonance.

    Roll-off

    This is the amount that frequencies are attenuated (suppressed) as the frequency changes (typically measured in dB/octave).

    For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency.

    Zie ook Attenuation, Filter.

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds long.

    Sustain

    The level to hold the parameter after finishing the decay time. This level will be maintained until the not is released.

    Zie ook ADSR.

    Velocity

    How hard you hit a note.

    MIDI devices are required to send this information along with the note. Synthesizers use this information to adjust several parameters on the sample (typically the volume). In Hydrogen, it is only used to adjust how loud the sample is played back.

    hydrogen-0.9.6-beta3/data/doc/manual_nl.po000066400000000000000000003156321211146647700203500ustar00rootroot00000000000000#, fuzzy msgid "" msgstr "" "POT-Creation-Date: 2009-04-11 12:57-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Content-Type: text/plain; charset=UTF-8\n" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:219(None) msgid "" "@@image: 'img/PreferencesAudioSystem.png'; " "md5=2cbcf26e128bec63fae694af120c51d6" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:281(None) msgid "" "@@image: 'img/PreferencesMidiSystem.png'; " "md5=a0f8cb05143d95b13b6aed599fbe4430" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:297(None) msgid "" "@@image: 'img/PreferencesAppearance.png'; " "md5=0e8d04f6fc536d2f56233783730ba852" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:314(None) msgid "" "@@image: 'img/AudioEngineInfoDialog.png'; " "md5=2409544da903ec8b9f08edb34bcb54ae" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:429(None) msgid "@@image: 'img/MainToolbar.png'; md5=4f5dddc0a6fc51b5b98bbfd5dd1ebfd0" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:437(None) msgid "" "@@image: 'img/background_Control.png'; md5=0405af224f62d2e360cb2656379cbd66" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:443(None) msgid "" "@@image: 'img/background_Mode.png'; md5=b2ca832b899e6ec073f6d700c9c8e178" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:447(None) msgid "@@image: 'img/background_BPM.png'; md5=0729e6f172d37cde37dc6dd69d7df9e9" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:451(None) msgid "@@image: 'img/cpuload.png'; md5=bfceb68aa39947b9d8fce81d70350d56" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:455(None) msgid "@@image: 'img/midi_in.png'; md5=302ded0d23140e8bf169a137ea7695b5" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:459(None) msgid "@@image: 'img/jack_transport.png'; md5=a3510cfd235f685a5a5f4788ba4aa6a3" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:616(None) msgid "@@image: 'img/bg_topPanel.png'; md5=ac7d11337eca92242e28918f8acf4281" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:625(None) msgid "@@image: 'img/btn_clear_off.png'; md5=506e17500965351186046e8d4675e298" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:632(None) msgid "@@image: 'img/btn_new_on.png'; md5=5cff0140de1a7304dd60b3cacea9e71d" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:639(None) manual.docbook:705(None) msgid "@@image: 'img/btn_updown.png'; md5=4e40841f9213616bceba8538be720204" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:648(None) msgid "@@image: 'img/btn_select.png'; md5=0d4dd148b47cfbb6054cc598a901e511" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:655(None) msgid "@@image: 'img/btn_draw.png'; md5=834dbbf9b0b8f3d1343851d1529bffde" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:662(None) msgid "" "@@image: 'img/btn_pattern_mode.png'; md5=cfda76720e17b1b73a391b03d30a1f01" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:677(None) manual.docbook:1570(None) msgid "@@image: 'img/SongEditor.png'; md5=8580fa158929130b0af2f7aa08abf489" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:697(None) msgid "@@image: 'img/btn_hear_on.png'; md5=dc908c7a82db7350c7c7b6e79bb4e8ba" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:713(None) msgid "@@image: 'img/btn_quant_off.png'; md5=d52c33c75ff5b690ea357fe170060d36" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:724(None) manual.docbook:1554(None) msgid "@@image: 'img/PatternEditor.png'; md5=967f9e6860c1b53170ca33f13a4afbd5" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:745(None) msgid "" "@@image: 'img/PatternEditorInstr.png'; md5=aa7b047b212826d380d6afa3d54f40a2" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:754(None) msgid "" "@@image: 'img/btn_record_over.png'; md5=88def8ff2487f8cb71501d67a74d89d1" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:795(None) msgid "@@image: 'img/tastiera.png'; md5=344cc621fc42d367ff50ec3b01017b04" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:809(None) manual.docbook:1638(None) msgid "@@image: 'img/Mixer.png'; md5=150e569dd12b279484bd2066c08dbd85" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:818(None) msgid "@@image: 'img/showPeaks_on.png'; md5=4475949f7c1f11157b8cfb623022e27b" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:826(None) manual.docbook:1595(None) #: manual.docbook:1617(None) msgid "@@image: 'img/btn_solo_on.png'; md5=275a1dd4a4cd6b5b93a0cc6d0d2ca497" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:834(None) manual.docbook:1601(None) #: manual.docbook:1626(None) msgid "@@image: 'img/btn_mute_on.png'; md5=2313bb2e4cf132f8fbfbe46e6505f5c6" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:842(None) manual.docbook:1589(None) msgid "" "@@image: 'img/btn_play_on_mixer.png'; md5=2eb3b919753b61020e06fe2dda6529ad" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:854(None) manual.docbook:1480(None) msgid "@@image: 'img/showFX_on.png'; md5=faaad6e9491dac7d3478b96e87b1ecc5" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:863(None) msgid "@@image: 'img/MixerFX.png'; md5=af1f625d71ffb19d140a2a6e15e64102" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:1488(None) msgid "@@image: 'img/edit_off.png'; md5=125b96a529eb2984de90da816a21f2ef" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:1496(None) msgid "@@image: 'img/MixerFXKnob.png'; md5=687a99626a7e1aecdb9b45506380ec5b" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:1504(None) msgid "@@image: 'img/bypass_over.png'; md5=de70b2610957f2c6d494b5951193eb8f" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:1516(None) msgid "@@image: 'img/MixerFXSelect.png'; md5=d21233583479b7309fc704f9693d97b7" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: manual.docbook:1609(None) msgid "@@image: 'img/MixerPan.png'; md5=5a331fe0240cfd3cabcf48c68fb11f11" msgstr "" #: manual.docbook:7(title) msgid "Hydrogen Manual" msgstr "Hydrogen handleiding" #: manual.docbook:10(firstname) msgid "Antonio" msgstr "" #: manual.docbook:11(surname) msgid "Piraino" msgstr "" #: manual.docbook:14(firstname) msgid "Alessandro" msgstr "" #: manual.docbook:15(surname) msgid "Cominu" msgstr "" #: manual.docbook:19(date) msgid "22/may/2005" msgstr "" #: manual.docbook:22(para) #, fuzzy msgid "" "Hydrogen is a software synthesizer which can be used alone, emulating a drum " "machine based on patterns, or via an external MIDI keyboard/sequencer " "software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter " "is still experimental, so ask in the developers mailing list for further " "details." msgstr "" "Hydrogen is een software synthesizer die op zichzelf kan gebruikt worden als " "drum machine gebaseerd op patronen, via een extern MIDI klavier of via " "sequencer software." #: manual.docbook:35(title) msgid "Introduction" msgstr "Inleiding" #: manual.docbook:38(title) msgid "Download" msgstr "Downloaden" #: manual.docbook:39(para) #, fuzzy msgid "" "The latest stable version of hydrogen is available as a tarball at http://www.hydrogen-music." "org." msgstr "" "De laatste stabiele versie van hydrogen is beschikbaar op http://www.hydrogen-music.org" #: manual.docbook:43(para) #, fuzzy msgid "" "It is possible to download the latest source files directly from our " "subversion server with: $ svn co http://" "svn.assembla.com/svn/hydrogen/trunk A certain release can " "be fetched with: $ svn co http://svn." "assembla.com/svn/hydrogen/tags/0.9.3" msgstr "" "bash$ cvs -z3 -d:pserver:anonymous@cvs.sourceforge." "net:/cvsroot/hydrogen co hydrogen" #: manual.docbook:56(para) #, fuzzy msgid "qt (>= 4.0) at " msgstr "" "qt (>= 3.2): http://www.trolltech." "com" #: manual.docbook:59(para) #, fuzzy msgid "libsndfile at " msgstr "" "libsndfile: http://www." "mega-nerd.com/libsndfile/" #: manual.docbook:63(para) #, fuzzy msgid "" "ALSA (>= 1.x) at (only if " "you wish to use ALSA as audio driver)" msgstr "" "ALSA (>= 1.x): http://www.alsa-" "project.com (enkel als je ALSA als audio driver wil gebruiken)" #: manual.docbook:66(para) #, fuzzy msgid "" "Jack Audio Connection Kit (>= 0.80) at (only if you wish to use Jack as audio driver)" msgstr "" "Jack Audio Connection Kit (>= 0.80): http://jackit.sourceforge.net (enkel als je Jack als audio " "driver wil gebruiken)" #: manual.docbook:69(para) #, fuzzy msgid "" "PortAudio at (only if you wish to " "use PortAudio as audio driver)" msgstr "" "ALSA (>= 1.x): http://www.alsa-" "project.com (enkel als je ALSA als audio driver wil gebruiken)" #: manual.docbook:72(para) #, fuzzy msgid "" "Flac at (only if you wish to use flac " "samples)" msgstr "" "Jack Audio Connection Kit (>= 0.80): http://jackit.sourceforge.net (enkel als je Jack als audio " "driver wil gebruiken)" #: manual.docbook:75(para) #, fuzzy msgid "" "ladspa at (only if you wish to use ladspa " "effects)" msgstr "" "ALSA (>= 1.x): http://www.alsa-" "project.com (enkel als je ALSA als audio driver wil gebruiken)" #: manual.docbook:78(para) #, fuzzy msgid "" "liblrdf at (only if you wish to use " "lrdf to categorise effects)" msgstr "" "Jack Audio Connection Kit (>= 0.80): http://jackit.sourceforge.net (enkel als je Jack als audio " "driver wil gebruiken)" #: manual.docbook:81(para) #, fuzzy msgid "" "lash at (only if you wish to use " "lash)" msgstr "" "ALSA (>= 1.x): http://www.alsa-" "project.com (enkel als je ALSA als audio driver wil gebruiken)" #: manual.docbook:52(para) msgid "" "Compiling Hydrogen depends on the following libraries: " "Please install them with your distribution's package manager. If you're " "running a debian-based system, you can install the libraries with: \n" "\t$ apt-get install libqt4-dev g++ libasound2-dev " "\\\n" "\tlibjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \\\n" "\tliblash-dev libportaudio-dev libportmidi-dev " msgstr "" #: manual.docbook:94(title) msgid "Build" msgstr "Compileren" #: manual.docbook:95(para) #, fuzzy msgid "" "Decompress the tarball or go to the directory where the subversion copy was " "checked out: \n" "\t$ cd hydrogen-*\n" "\t$ scons\n" "\t$ su -c \"scons install\"\n" "\t\t " msgstr "" "$ cd hydrogen-*\n" " $ ./configure\n" " $ make\n" " $ su -c \"make install\"" #: manual.docbook:104(para) msgid "" "Before compiling, check for additional options with: \n" "\t$ scons --help\n" "\t\t If you want to use features which are not enabled by " "default (for instance PortAudio), you can enable them with: \n" "\t$ scons portaudio=1\n" "\t\t Namely, if you get some error while running Hydrogen and " "you want to report it remember to configure hydrogen with: \n" "\t$ scons debug=1\n" "\t\t To clean up compiled code: \n" "\t$ scons -c\n" "\t\t " msgstr "" #: manual.docbook:193(title) #, fuzzy msgid "Audio preferences" msgstr "Instellingen" #: manual.docbook:194(para) msgid "" "First of all you should make shure that the audio engine is configured " "properly. The preferences dialog can be accessed via the tools menu (tools -" "> preferences)." msgstr "" #: manual.docbook:202(title) msgid "The Audio System tab" msgstr "" #: manual.docbook:204(para) msgid "" "From the \"Audio System\" tab () it is possible to modify the audio driver being used (OSS, Jack, ALSA, " "PortAudio) with its buffer and sampling rate (unless using JACK, in this " "case the audio driver configuration should happen before starting the JACK " "server)." msgstr "" #: manual.docbook:206(para) msgid "" "We can set some features of Hydrogen like \"Enable track outputs\" useful if " "you want to add effects to a single instrument with jack-rack. \"Connect to " "Default Output Pair\" connects the output to the default ports: uncheck this " "if you want to connect JACK output to other ports without disconnecting them " "first" msgstr "" #: manual.docbook:209(para) msgid "" "Keep also an eye on the value of \"Polyphony\": depending on your CPU you " "may want to change the max simultaneous notes in order to prevent hydrogen " "from overunning the audio driver." msgstr "" #: manual.docbook:216(title) #, fuzzy msgid "The Audio System Tab" msgstr "XXX" #: manual.docbook:224(para) msgid "The following drivers are available:" msgstr "" #: manual.docbook:231(para) #, fuzzy msgid "" "jackd: The Jack driver is a professional " "audio server which permits very low lag and exchanges with other audio " "software. We strongly recommend using this driver to have the best " "out of Hydrogen. JACK server will start automatically if not " "already running." msgstr "" "Om met de Jack audio driver te werken moet de server werken. Jack Audio Connection Kit, een " "professionele audio server met een zeer lage response tijd en die interactie " "mogelijk maakt met andere audio software.We raden Jack sterk aan " "om zo het beste uit Hydrogen te halen." #: manual.docbook:239(para) #, fuzzy msgid "" "ALSA: the widely adopted Linux standard " "audio drivers" msgstr "Fig. 2 XXX" #: manual.docbook:246(para) #, fuzzy msgid "" "OSS: The Oss audio driver uses /dev/dsp " "and it's based on the OSS interface which is supported by the vast majority " "of sound cards available for linux; this said, the use of this audio driver " "blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other " "software. Use it as last resort." msgstr "" "De Oss audio driver gebruikt /dev/dsp en is gebaseerd op de OSS interface " "die ondersteund wordt door een groot aantal geluidskaarten die beschikbaar " "zijn voor linux; zoals gezegd blokeerd Hydrogen het gebruik van /dev/dsp tot " "Hydrogen gesloten is /dev/dsp is dus onbruikbaar voor andere software." #: manual.docbook:256(para) #, fuzzy msgid "" "PortAudio: an open-source multiplatform " "audio driver" msgstr "Fig. 2 XXX" #: manual.docbook:263(para) #, fuzzy msgid "" "CoreAudio: a driver for Mac OS X " "(experimental)" msgstr "" "Fig. 13 De Audio Systeem " "tab" #: manual.docbook:272(title) msgid "The Midi System tab" msgstr "" #: manual.docbook:273(para) msgid "" "The \"Midi System\" tab () " "concerns the MIDI input. You can choose the MIDI driver and input, setup " "channels, binding actions to MIDI events." msgstr "" #: manual.docbook:278(title) msgid "The MIDI System Tab" msgstr "" #: manual.docbook:288(title) msgid "The Appearance tab" msgstr "" #: manual.docbook:289(para) msgid "" "The \"Appearance\" tab () " "let's you to modify Hydrogen and QT graphical properties." msgstr "" #: manual.docbook:294(title) msgid "The Appearance Tab" msgstr "" #: manual.docbook:305(title) #, fuzzy msgid "The Audio Engine tab" msgstr "XXX" #: manual.docbook:306(para) msgid "" "The audio engine info is a window with various stats about Hydrogen and the " "audio driver. In case JACK is used, buffer and sampling rate should be set " "before starting Hydrogen (JACK automatically starts when an application " "tries to connect)." msgstr "" #: manual.docbook:311(title) #, fuzzy msgid "The Audio Engine Info Window" msgstr "XXX" #: manual.docbook:329(title) msgid "Using Hydrogen" msgstr "" #: manual.docbook:332(title) msgid "Used Filetypes" msgstr "" #: manual.docbook:333(para) msgid "Before working with Hydrogen, please familiarize with these filetypes:" msgstr "" #: manual.docbook:336(para) msgid "" "*.h2pattern: XML file describing a single " "pattern. Patterns are group of beats and are managed in the pattern editor." msgstr "" #: manual.docbook:339(para) msgid "" "*.h2song: XML file describing the whole " "song (or sequence). Songs are group of patterns with their properties and " "are manager using the song editor" msgstr "" #: manual.docbook:342(para) msgid "" "*.h2playlist: XML file describing a " "playlist.A Playlist is a (ordered) group of songs." msgstr "" #: manual.docbook:345(para) msgid "" "*.h2drumkit: a compressed and archived " "folder containing all sound samples composing a drumkit and a description " "XML file. Drumkits are basically group of sound samples." msgstr "" #: manual.docbook:351(title) #, fuzzy msgid "Main menu" msgstr "Menu" #: manual.docbook:352(para) #, fuzzy msgid "" "Projects: this menu offers file related " "functions." msgstr "" "Fig. 14 Beats toevoegen in een patroon" #: manual.docbook:355(para) #, fuzzy msgid "New - Create a new song" msgstr "" "Fig. 15 De Voorkomen tab" #: manual.docbook:356(para) msgid "" "Show Info - Set general properties of the song such as " "name, author, license and generic notes" msgstr "" #: manual.docbook:357(para) #, fuzzy msgid "Open - Open a song" msgstr "[CTRL + O] = Opname openen" #: manual.docbook:358(para) msgid "" "Open Demo - Open a demo song (demo songs are stored in " "$INSTALLPATH/share/hydrogen/data/demo_songs)" msgstr "" #: manual.docbook:359(para) #, fuzzy msgid "Open recent - Open a menu showing last used songs" msgstr "[CTRL + O] = Opname openen" #: manual.docbook:360(para) #, fuzzy msgid "Save - Save changes to current song" msgstr "[CTRL + S] = Opname opslaan" #: manual.docbook:361(para) msgid "" "Save as - Save current song specifying a name (default " "path: $HOME/.hydrogen/data/songs)" msgstr "" #: manual.docbook:362(para) #, fuzzy msgid "" "Open pattern - Open a saved pattern belonging to the " "current drumkit" msgstr "" "[Backspace] = Liedje of patroon " "herstarten vanaf het begin." #: manual.docbook:363(para) msgid "" "Export pattern as - Saves a pattern. It will be stored " "in $HOME/.hydrogen/data/patterns/drumkit_name" msgstr "" #: manual.docbook:364(para) #, fuzzy msgid "" "Export MIDI file - Export current song in MIDI format" msgstr "Fig. 19 Een drumkit exporteren." #: manual.docbook:365(para) #, fuzzy msgid "Export song - Export current song in WAV format" msgstr "Fig. 19 Een drumkit exporteren." #: manual.docbook:366(para) #, fuzzy msgid "Quit - Quit Hydrogen" msgstr "Fig. 3 The Mixer" #: manual.docbook:371(para) msgid "" "Instruments: this menu offers instruments " "and drumkit (sound libraries) functions." msgstr "" #: manual.docbook:373(para) #, fuzzy msgid "" "Add instrument - Add a new instrument to your current " "drumkit" msgstr "" "[Backspace] = Liedje of patroon " "herstarten vanaf het begin." #: manual.docbook:374(para) #, fuzzy msgid "" "Clear all - Delete all instruments from the current " "drumkit" msgstr "" "[Backspace] = Liedje of patroon " "herstarten vanaf het begin." #: manual.docbook:375(para) msgid "" "Save library - Saves all instruments settings (and " "their sound samples) in $HOME/.hydrogen/data/library_name" msgstr "" #: manual.docbook:376(para) msgid "" "Export library - Compress all instruments samples and " "settings in a drumkit in $HOME/.hydrogen/data/library_name" msgstr "" #: manual.docbook:377(para) msgid "" "Import library - Imports another drumkit from the local " "filesystem or download it from a remote location through an XML feed. The " "XML file that should be provided is NOT " "RSS compliant (see Hydrogen website for an example). To load another " "drumkit in your current working session of Hydrogen, read ." msgstr "" #: manual.docbook:381(para) msgid "" "Tools: opens the mixer, the playlist " "editor, the instrument rack and the general preferences window." msgstr "" #: manual.docbook:383(para) msgid "Playlist editor - A tool to manage playlists." msgstr "" #: manual.docbook:384(para) #, fuzzy msgid "Mixer - Open the mixer window." msgstr "Fig. 15 Detail van de Mixer" #: manual.docbook:385(para) #, fuzzy msgid "Instrument rack - Open the instrument rack panel." msgstr "" "Fig. 14 Beats toevoegen in een patroon" #: manual.docbook:386(para) msgid "" "Preferences - Open the main preferences window. Read " " on how to configure Hydrogen." msgstr "" #: manual.docbook:390(para) msgid "" "Debug: tools mainly for debugging and " "monitoring Hydrogen (only available when compiled with debug support)." msgstr "" #: manual.docbook:392(para) msgid "" "Show audio engine info - Open a monitor with various " "stats" msgstr "" #: manual.docbook:393(para) #, fuzzy msgid "debug action - Insert debug commands." msgstr "Fig. 18 Een drumkit importeren." #: manual.docbook:394(para) msgid "" "Print Objects - Print on stdout current objects map." msgstr "" #: manual.docbook:398(emphasis) msgid "Info" msgstr "" #: manual.docbook:400(para) msgid "User manual - Open a window with this manual :)" msgstr "" #: manual.docbook:401(para) msgid "" "About - The usual window with licence information, " "acknowledgements, etc." msgstr "" #: manual.docbook:411(title) msgid "The main toolbar" msgstr "De hoofd werkbalk" #: manual.docbook:412(para) #, fuzzy msgid "" "Before analyzing the two main frames of Hydrogen, let's take a quick look at " "the main toolbar and its components:" msgstr "" "Voor we de belangrijkste vensters overlopen gaan we snel eens kijken naar de " "werkbalk:" #: manual.docbook:415(para) msgid "Pilot the song using the start, stop, pause, etc. buttons" msgstr "" #: manual.docbook:416(para) msgid "" "Choose between \"pattern\" or \"song\" mode: in \"pattern\" mode only the " "currently selected pattern will play, while in \"song\" mode all patterns " "inserted will be played." msgstr "" #: manual.docbook:417(para) msgid "" "An advanced tap tempo function: choose note length and how many notes to " "wait before recalculating BPM, then click the comma key repeatedly until the " "'R' letter will appear and the BPM will be updated. (see )" msgstr "" #: manual.docbook:418(para) msgid "Manually set BPM" msgstr "" #: manual.docbook:419(para) msgid "Manage JACK transport" msgstr "" #: manual.docbook:420(para) msgid "Open the mixer and the instrument rack panels" msgstr "" #: manual.docbook:425(title) #, fuzzy msgid "The Main Toolbar" msgstr "De hoofd werkbalk" #: manual.docbook:439(para) msgid "" "Main controls to start [Hotkey = Spacebar], stop, fast forward, rewind, loop a song or a pattern." msgstr "" "Alle knoppen om te starten, stoppen, doorspoelen, terugspoelen en om het het " "patroon of de opname te herhalen. Je kunt ook de spatiebalk gebruiken om te " "starten en te stoppen." #: manual.docbook:444(para) msgid "Set Pattern/Song Mode." msgstr "Hier kun je schakelen tussen de patroon en opname mode." #: manual.docbook:448(para) msgid "" "Set speed of playing (range: 30-400 bpm) [Hotkey = " "mouse wheel] and button to enable/disable metronome" msgstr "" "Als je het tempo van een nummer wil aanpassen klik je op de + of - knop. Om " "de metronoom aan of uit te schakelen kan je het onderste knopje gebruiken." #: manual.docbook:452(para) msgid "Shows CPU load." msgstr "XXX" #: manual.docbook:456(para) msgid "Shows MIDI events." msgstr "XXX" #: manual.docbook:460(para) msgid "" "Click to enable Jack transport: Hydrogen will work as 'slave' with another " "'master' program (e.g. Ardour). This applet is only available if Jack Audio " "Driver is selected." msgstr "XXX" #: manual.docbook:463(para) msgid "Other useful keybindings (not customizable for the moment):" msgstr "Andere handige sneltoetsen:" #: manual.docbook:467(para) msgid "[CTRL + O] = Open File" msgstr "[CTRL + O] = Opname openen" #: manual.docbook:472(para) msgid "[CTRL + S] = Save File" msgstr "[CTRL + S] = Opname opslaan" #: manual.docbook:477(para) msgid "" "[Backspace] = Restart song or pattern " "from the beginning" msgstr "" "[Backspace] = Liedje of patroon " "herstarten vanaf het begin." #: manual.docbook:484(title) msgid "Tap Tempo and BeatCounter" msgstr "" #: manual.docbook:486(para) msgid "" "It is possible to change tempo at any time using the tap-tempo and " "BeatCounter features of Hydrogen. You can change these while playing or " "while the song is stopped. To change the tempo, hit the , " "(comma) key in tempo for the number of beats in the measure. After the " "correct number of beats are met, the tempo will change to the average tempo " "that you tapped in. If you continue to tap, these new taps will become a " "part of a rolling average. If you tap accidentally, or if you wait too long " "between taps, the tap tempo counter will start over." msgstr "" #: manual.docbook:499(para) msgid "" "The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo " "on steroids. By default the BeatCounter display is not visible. To see the " "BeatCounter widget click the upright button (BC) " "between Song/Pattern mode selector and the BPM-widget. Or, it can be shown " "by pressing the comma key (,)." msgstr "" #: manual.docbook:507(para) msgid "" "The tempo that you tap will be considered even beats of the beat type. The " "beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note " "beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change " "the beat type use the left arrow buttons. To change the number of beats that " "are counted, use the right arrow button. You can set from 2 to 16 beats. (I." "e. if you set the beat to 6, you will have to tap 6 times before the new " "tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. Every " "time you tap with the comma key, it will show the number of taps that you " "have entered (1, 2, 3...)." msgstr "" #: manual.docbook:522(para) msgid "" "The button in the bottom right-hand controls the auto-start feature, and it " "toggles between S and P. When it " "shows P for (Play), the song will " "set the new tempo and automatically start to play after you tap the right " "number of beats (if it's not already playing, of course). This way, if you " "have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing " "on the next beat. When it shows S (for Set " "BPM), the auto-start is disabled." msgstr "" #: manual.docbook:536(para) msgid "" "For example: Suppose you have a live band, Hydrogen, and a softsynth that is " "controlled by Seq24)... and you want them all to start at the same time. Set " "the beat type to 1/4 and the number of beats to 4. Enable auto-start (button " "shows P). Count off the band 1-2-3-4 (while tapping the " "comma key) — and everyone starts on 1." msgstr "" #: manual.docbook:545(para) msgid "" "Another example: Same situation, but the song doesn't require Hydrogen or " "synths until some point later. During that time, a human (e.g. guitar " "player) will be setting the tempo. On the measure before Hydrogen is " "supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in " "on the next beat (at the right tempo)." msgstr "" #: manual.docbook:553(para) msgid "" "If you are using the JACK Transport, the BeatCounter continues to work. If " "another program is the JACK Transport Master, Hydrogen will respond to tempo " "change events from that application. Note that in this situation, Hydrogen " "is supposed to be a slave, so some of the BeatCounter " "features will be disabled or will not work properly. If Hydrogen is the JACK " "Transport Master, tempo changes from Hydrogen will be reflected in those " "programs (if they support it)." msgstr "" #: manual.docbook:564(para) msgid "" "Some of the settings to adjust the BeatCounter's latency compensation, and " "they are located on the General tab of the Preferences " "Dialog ( ToolsPreferences ). Here there are two spinboxes:" msgstr "" #: manual.docbook:577(para) msgid "" "Beat counter drift compensation in 1/10ms— adjust to compensate for latency between the " "keyboard and the program." msgstr "" #: manual.docbook:583(para) msgid "" "Beat counter start offset in ms— adjust the time between the BeatCounter's last " "input stroke and when the song starts playing (if auto-start is activated)." msgstr "" #: manual.docbook:591(para) msgid "" "Note that these can be set to positive (+) or negative (-) values. In order " "to find useful values for these, you will need to take some time to play " "with it. Also, you may want different values depending on the speed of your " "hardware, audio devices, drivers, etc. Using the BeatCounter effectively " "requires practice." msgstr "" #: manual.docbook:604(title) msgid "Song Editor" msgstr "De Opname editor" #: manual.docbook:606(para) #, fuzzy msgid "" "The \"Song Editor\" () gives an overview " "of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so " "on); each blue coloured square on this panel is a complete bar as shown in " "the underlying \"Pattern Editor\" panel. Here we have complete freedom to " "add, remove or move patterns in any order we prefer. We can also copy and " "paste patterns: use left mouse button to highlight an area and drag it " "around. Dragging with CTRL key pressed copies the patterns." msgstr "" "De Opname Editor (Fig. 1) toont het liedje dat we aan het maken zijn. Je " "ziet de verschillende lagen. Elk gekleurd vierkantje dat in het venster " "verschijnt vertegenwoordigd een patroon dat zal afgespeeld worden. De " "patronen kun je bewerken met de Patroon Editor, de lagen kunnen " "verschillende delen van de opname bevatten (vb intro, refrein, strofe " "enz...)." #: manual.docbook:610(para) #, fuzzy msgid "The Song Editor comes with 7 buttons:" msgstr "De Opname Editor heeft 6 knoppen:" #: manual.docbook:624(para) #, fuzzy msgid "" " Completely delete all patterns (asks for confirmation!)." msgstr "XXX" #: manual.docbook:631(para) #, fuzzy msgid " Create a new pattern (and asks for a name)." msgstr "XXX" #: manual.docbook:638(para) #, fuzzy msgid " Move currently selected pattern up or down." msgstr "XXX" #: manual.docbook:647(para) #, fuzzy msgid "" " Enable selecting patterns for copy & paste (Select " "Mode)." msgstr "XXX" #: manual.docbook:654(para) #, fuzzy msgid " Enable Draw Mode." msgstr "XXX" #: manual.docbook:661(para) msgid "" " Switch from \"Single pattern mode\" to \"Stacked pattern " "mode\" and back.." msgstr "" #: manual.docbook:668(para) msgid "" "Under these buttons there is a list of patterns created and when they will " "played (each square == 1 bar). Click on an squarebox to add or cancel the " "pattern. Clicking on right mouse button over the name of a pattern will " "bring up a menu to change name of the pattern or to allow copying/deleting " "it. Patterns with very same name are not allowed." msgstr "XXX" #: manual.docbook:674(title) #, fuzzy msgid "The Song Editor" msgstr "De Opname editor" #: manual.docbook:685(title) msgid "Pattern Editor" msgstr "De Patroon Editor" #: manual.docbook:686(para) #, fuzzy msgid "" "The \"Pattern Editor\" frame () lets " "us create or modify the pattern (bar) which is being played, or add/remove " "notes and tune intensity as well. On the higher-left side you find a pair of " "LCD screens: the first one lets you choose the size of a pattern while the " "second represents the current grid resolution (4 through 64). Selecting an " "instrument which has at least one note in the pattern will show a few " "vertical bars (one per note) on the lowest part of this frame. Those frame " "shows the so called \"note properties\". This are special properties which " "can be set for every single note. Hydrogen knows of 3 Properties: Velocity, " "Pan and Lead/Lag. Lead and Lag allows a slight note lead or lag in respect " "of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms " "at a tempo of 120bpm." msgstr "" "XXX XXX " " XXX " " " " XXX" #: manual.docbook:693(para) msgid "" "The button (hear new notes) will play the sample as it's " "been added to the pattern. Finally you can move an instrument up and down in " "the sequence with the buttons . A useful Quantize feature is available activating . This way the beats " "inserted will automatically respect the grid resolution currently applied." msgstr "" #: manual.docbook:721(title) manual.docbook:1551(title) #, fuzzy msgid "The Pattern Editor" msgstr "De Patroon Editor" #: manual.docbook:729(para) msgid "" "Rememeber this constraint concerning the grid: if you are working with a " "resolution of 16 you can't go back to 8 and remove a 16th note; on the other " "hand if you are working with a resolution of 8 and you try to insert a note " "in the middle of two bars (looking for a 16 bars precision), notes will be " "placed in the previous or in the following 8th bar. This contraint can be " "removed if you disable the whole grid resolution (choose \"off\" from the " "grid resolution LCD control). Now you'll be able to place notes wherever you " "prefer." msgstr "" #: manual.docbook:734(para) #, fuzzy msgid "" "Each instrument has its own set of features accessible right-clicking with " "your mouse on it; Fill/Clear notes fills or deletes every note of that instrument in the " "current pattern (remember that filling a pattern is always relative to the " "grid resolution set) and finally Randomize " "velocity automatically apply a pseudo-random velocity to " "each note of that instrument in the pattern. The more velocity you set on " "the instrument, the more hydrogen will hit hard on that " "instrument when played." msgstr "XXX" #: manual.docbook:738(para) msgid "" "The small green and red squares beside the instrument name are the " "mute and solo buttons." msgstr "" #: manual.docbook:750(para) #, fuzzy msgid "" "Also, you can set new beats clicking on which enables " "direct input by MIDI events or by keyboard according to the following map " "key=instrument:" msgstr "" "XXX XXX" #: manual.docbook:760(emphasis) msgid "" "Note that the name of the instrument depends on the drumkit loaded. This " "list refers to the GMKit loaded by default. The position of the instrument, " "however, is the same." msgstr "" "Merk op dat de naam van het afgespeelde instrument afhangt van de " "geselecteerd drumkit. Deze lijst is gebaseerd op de GMKit, dit is de " "standaard kit." #: manual.docbook:763(para) msgid "Z = Kick" msgstr "Z = Kick" #: manual.docbook:764(para) msgid "X = Snare Jazz" msgstr "X = Snaar Jazz" #: manual.docbook:765(para) msgid "C = Snare Rock" msgstr "C = Snaar Rock" #: manual.docbook:766(para) msgid "V = Tom Low" msgstr "V = Lage Tom" #: manual.docbook:767(para) msgid "B = Tom Mid" msgstr "B = Mid Tom" #: manual.docbook:768(para) msgid "N = Tom Hi" msgstr "N = Hoge Tom" #: manual.docbook:769(para) msgid "M = Cowbell" msgstr "M = Koe bel" #: manual.docbook:770(para) msgid "Q = Ride Jazz" msgstr "Q = Ride Jazz" #: manual.docbook:771(para) msgid "W = Ride Rock" msgstr "W = Ride Rock" #: manual.docbook:772(para) msgid "E = Instrument No. 17 (currently not assigned)" msgstr "E = Instrument Nr. 17 (momenteel niet in gebruik)" #: manual.docbook:773(para) msgid "R = Instrument No. 18 (currently not assigned)" msgstr "R = Instrument Nr. 18 (momenteel niet in gebruik)" #: manual.docbook:774(para) msgid "T = Instrument No. 20 (currently not assigned)" msgstr "T = Instrument Nr. 20 (momenteel niet in gebruik)" #: manual.docbook:775(para) msgid "Y = Instrument No. 22 (currently not assigned)" msgstr "Y = Instrument Nr. 22 (momenteel niet in gebruik)" #: manual.docbook:776(para) msgid "U = Instrument No. 24 (currently not assigned)" msgstr "U = Instrument Nr. 24 (momenteel niet in gebruik)" #: manual.docbook:777(para) msgid "S = Stick" msgstr "S = Stok" #: manual.docbook:778(para) msgid "D = Hand Clap" msgstr "D = Handen klap" #: manual.docbook:779(para) msgid "G = Closed HH" msgstr "G = Gesloten HH" #: manual.docbook:780(para) msgid "H = Pedal HH" msgstr "H = Pedaal HH" #: manual.docbook:781(para) msgid "J = Open HH" msgstr "J = Open HH" #: manual.docbook:782(para) msgid "2 = Crash" msgstr "2 = Crash" #: manual.docbook:783(para) msgid "3 = Crash Jazz" msgstr "3 = Crash Jazz" #: manual.docbook:784(para) msgid "5 = Instrument No. 19 (currently not assigned)" msgstr "5 = Instrument Nr. 19 (momenteel niet in gebruik)" #: manual.docbook:785(para) msgid "6 = Instrument No. 21 (currently not assigned)" msgstr "6 = Instrument Nr. 21 (momenteel niet in gebruik)" #: manual.docbook:786(para) msgid "7 = Instrument No. 23 (currently not assigned)" msgstr "7 = Instrument Nr. 23 (momenteel niet in gebruik)" #: manual.docbook:790(para) #, fuzzy msgid "" "Here's a quick reference of the above bindings for your convenience. See " " for a basic walkthrough of how the " "pattern editor works." msgstr "Hier is een kleine voorstelling van wat toetsen voor het gemak." #: manual.docbook:803(title) msgid "Mixer" msgstr "Mixer" #: manual.docbook:806(title) manual.docbook:1635(title) #, fuzzy msgid "The Mixer" msgstr "Mixer" #: manual.docbook:814(para) #, fuzzy msgid "" "The Mixer frame () is useful for tuning a " "global or single volume of the current drumkit. It shows the current peak " "(click on to disable, useful on old CPUs) and let you set " "the maximum peak allowed (tune with the fader knob of the instrument), lets " "you modify attributes like pan, play solo , mute " " or test play only that instrument ; " "selecting in the Pattern Editor an instrument causes a blue LED to light on " "(near the play button). Near the global volume knob, you can set 3 global " "effect such a swing (shifts a few notes back or forward not randomly), " "timing (modify timings of the notes) and humanize effect (random velocity " "editing)." msgstr "" "Het Mixer venster (Fig. 6) is handig om het master volume of het instrument " "volume in te stellen. Je kunt het huidig volume weergeven of verbergen door " "op te klikken. Deze " "knop laat je toe om de " "balans te regelen, " "om dit instrument solo te laten spelen, " " om het instrument te dempen en " " om enkel dit instrument eens af te " "spelen." #: manual.docbook:849(para) #, fuzzy msgid "" "In addition to all this you can set up to 4 special LADSPA effects for each " "instrument switching the button. See next section for a " "detailed overview. " msgstr "" "Als je op klikt " "krijg je een extra scherm in je mixer, dit scherm dient samen met de 4 " "draaiknoppen die je per instrument beschikbaar hebt om de effecten te " "regelen voor een instrument. In het hoofdstuk over de LADSPA plugins kom je " "meer te weten over deze knoppen." #: manual.docbook:873(title) #, fuzzy msgid "Sound Library (Drumkit Manager)" msgstr "Drumkit manager" #: manual.docbook:875(para) msgid "" "The Sound Library saves you time in managing your drum kits, favorite " "patterns, and favorite songs. When making new songs and drum kits, the Sound " "Library makes it easier for you to reuse and mix the instruments and " "patterns from other kits and songs." msgstr "" #: manual.docbook:881(title) msgid "System Drumkits" msgstr "" #: manual.docbook:883(para) msgid "" "This lists the drumkits that were installed by your system administrator. It " "was determined by the compile-time prefix. On Unix-like operating systems, " "this is usually /usr/share/hydrogen/data/" "drumkits, or possibly /usr/local/" "share/hydrogen/data/drumkits. These kits are available to all " "users on the system, and users are usually not able to add to them." msgstr "" #: manual.docbook:892(para) msgid "" "To load a drumkit from here, right-click the drumkit and select " "Load. This will replace your current drumkit with " "the one that you selected. To load a single instrument from that kit, left-" "click the plus to the left of the drumkit's name to " "show all the instruments. With your left mouse button, click and drag the " "instrument into your current kit. The instrument will be added to the " "drumkit that you currently have loaded." msgstr "" #: manual.docbook:903(title) msgid "User Drumkits" msgstr "" #: manual.docbook:905(para) msgid "" "These are your own drum kits that you can manage yourself. They are usually " "stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by " "selecting InstrumentsSave " "library." msgstr "" #: manual.docbook:913(para) msgid "" "Loading drumkits and instruments to use is the same as for the System " "Drumkits (see )." msgstr "" #: manual.docbook:918(title) msgid "Patterns in the Sound Library" msgstr "" #: manual.docbook:920(para) msgid "" "Before you save your favorite patterns to the sound library, be sure to edit " "it's properties by right-clicking and selecting Properties. There, you can give the pattern a title and a category. You " "can use one of the categories already provided, or create your own " "categories by simply typing in a category name. The category name is " "important, because the patterns will be filed by category in the Sound " "Library." msgstr "" #: manual.docbook:928(para) msgid "" "You can save your favorite patterns in the sound library by right clicking " "the title of the pattern in the song editor, and selecting Save " "Pattern. It will appear in the Sound Library underneath " "Patterns and the category that you assigned to the " "pattern." msgstr "" #: manual.docbook:936(title) msgid "Songs in the Sound Library" msgstr "" #: manual.docbook:938(para) msgid "" "To save songs in the Sound Library, put them in your data directory " "underneath the songs folder (usually " "$HOME/data/songs. To remove them, " "remove the file from that folder." msgstr "" #: manual.docbook:947(title) msgid "Drumkits and Instrument Editing" msgstr "" #: manual.docbook:949(para) msgid "" "Creating a new drumkit with Hydrogen is done with the Instrument Editor. " "Using the instrument editor you can load samples, set envelope parameters, " "set the gain, and a few other advanced features like mute groups, low-pass " "resonance filter, and pitch randomization." msgstr "" #: manual.docbook:955(para) msgid "" "Instead of creating your own drumkit, you can also use or download existing " "drumkits using the ." msgstr "" #: manual.docbook:963(title) msgid "Concepts" msgstr "" #: manual.docbook:965(para) msgid "" "The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a " "piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a " "note, the sample is simply played back at the right time. There's a few " "concepts and terms that you should understand when you are putting together " "a drumkit. (See for more detailed explanations.)" msgstr "" #: manual.docbook:976(title) msgid "Sampling Synthesizer Terms" msgstr "" #: manual.docbook:978(term) manual.docbook:1992(glossterm) msgid "Sample" msgstr "" #: manual.docbook:978(para) manual.docbook:1994(para) msgid "" "A short recording of a sound, typically between .1 and 3.0 seconds long." msgstr "" #: manual.docbook:983(term) manual.docbook:1818(glossterm) msgid "Gain" msgstr "" #: manual.docbook:983(para) msgid "Volume adjustment." msgstr "" #: manual.docbook:987(term) manual.docbook:2016(glossterm) msgid "Velocity" msgstr "" #: manual.docbook:987(para) manual.docbook:2018(para) msgid "How hard you hit a note." msgstr "" #: manual.docbook:991(term) msgid "ADSR Envelope Generator" msgstr "" #: manual.docbook:991(para) msgid "" "An Attack/Decay/Sustain/Release envelope generator. After you trigger a " "note, Hydrogen will attack the note by increasing its " "volume from 0 to the full velocity of the note. After reaching full " "velocity, it will decay the note by lowering the volume " "until it reaches the sustain level. When the note is " "released, Hydrogen reduces the volume from the sustain " "level back down to 0." msgstr "" #: manual.docbook:1005(term) manual.docbook:1686(glossterm) msgid "Attack" msgstr "" #: manual.docbook:1005(para) #, fuzzy msgid "" "The amount of time to go from 0 to full " "velocity." msgstr "Fig. 3 XXX" #: manual.docbook:1010(term) manual.docbook:1763(glossterm) msgid "Decay" msgstr "" #: manual.docbook:1010(para) msgid "" "The amount of time to go from full " "velocity to the sustain volume." msgstr "" #: manual.docbook:1015(term) manual.docbook:2000(glossterm) msgid "Sustain" msgstr "" #: manual.docbook:1015(para) msgid "" "The level (how loud) to hold the note " "between the sustain and the release. It is a percentage of the velocity. It " "does not depend on time." msgstr "" #: manual.docbook:1021(term) manual.docbook:1934(glossterm) msgid "Release" msgstr "" #: manual.docbook:1021(para) #, fuzzy msgid "" "The amount of time to go from the sustain " "volume back down to 0." msgstr "" "Fig. 16 Drumkit laden. Kies een drumkit " "uit de lijst." #: manual.docbook:1027(para) msgid "" "Typical samples that are used in Hydrogen are: the sound of a single drum " "hit, the sound of a single cymbal hit, the sound of a single cowbell hit. " "Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen " "will play whatever sound you have loaded. So, to put together a drum kit you " "need to gather short recordings of the bass drum, each tom, each cymbal, the " "high hat open, the high hat closed, the snare drum (snare on), the snare " "drum (snare off), rim shots, etc." msgstr "" #: manual.docbook:1039(para) msgid "" "However, there are no rules about what a sample can be. It's not uncommon to " "use Hydrogen to trigger non-drum sounds like: audio clips of people talking, " "a clip from a song, sound effects, audio clips from movies, and famous " "people speaking. Be creative!" msgstr "" #: manual.docbook:1049(title) msgid "Creating a New Drumkit" msgstr "" #: manual.docbook:1051(para) msgid "" "To start a brand new drum kit, select InstrumentsClear All. This will give " "you a bank of 32 blank instruments. To delete instruments, right-click on on " "each instrument and select Delete Instrument. To " "add more instruments, select InstrumentsAdd instrument." msgstr "" #: manual.docbook:1066(para) msgid "" "Select an instrument to start editing it. This is done by left-clicking on " "the name of the instrument in the instrument list (at the left). You will " "notice that the name of the instrument in the Instrument Editor matches the " "one that you clicked." msgstr "" #: manual.docbook:1072(para) msgid "" "After you have your drum kit working the way you want, select " "InstrumentsSave library. It will ask you for the name of the kit to save. " "If you wish to overwrite an existing kit, you will need " "to type in the same name as the kit that you want to replace." msgstr "" #: manual.docbook:1083(para) msgid "" "Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits)." msgstr "" #: manual.docbook:1088(para) msgid "" "To export a drumkit (for sharing with others), it must first be loaded into " "your Sound Library. Then, select InstrumentsExport library from the " "menu. Select the drum kit that you wish to export, and give it a file name " "to save it to." msgstr "" #: manual.docbook:1100(title) msgid "Creating an Instrument and Layers" msgstr "" #: manual.docbook:1102(para) msgid "" "For each instrument in a drum kit, you can load several samples and set " "different synthesizer parameters. This section will step you through how to " "create a new instrument and load the samples." msgstr "" #: manual.docbook:1107(para) msgid "" "To begin creating an instrument, select InstrumentsAdd instrument. This will " "give you a blank instrument to start from." msgstr "" #: manual.docbook:1114(para) msgid "" "Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides " "several in the data/drumkits " "directory." msgstr "" #: manual.docbook:1119(para) msgid "" "In the instrument editor, click on Layers. You can " "layer several samples into the instrument. Which one is played depends on " "the velocity of the incoming note. Click Load Layer " "and point the Audio File Browser to your sample. Note " "that the Audio File Browser will allow you to preview the " "sample before you load it. It will also allow you to load more than one " "sample at a time. But for now, only load one." msgstr "" #: manual.docbook:1129(para) msgid "" "After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To " "load a second sample, click the slot just below it, and then click " "Load Layer to bring in another sample." msgstr "" #: manual.docbook:1136(para) msgid "" "After bringing in both samples, you'll probably notice that only the " "first sample is being played whenever you trigger the " "instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light " "blue rectangles and you see that you get a left-right drag cursor. Now drag " "the sample to the left or right (like a curtain). You will now see Layer 2 " "appear." msgstr "" #: manual.docbook:1147(para) msgid "" "The velocity setting for the layer is 0-velocity on the left, and full " "velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 " "to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)" msgstr "" #: manual.docbook:1153(para) msgid "" "Now, in the pattern area, set up a simple pattern that plays this " "instrument. Adjust the velocity settings on each note so that you can get " "the different samples to sound. Now set the pattern to loop and notice how " "your different samples are getting triggered. (To learn about editing a " "pattern, see )" msgstr "" #: manual.docbook:1161(para) msgid "" "For each layer, you can set the Gain and the " "Pitch. The pitch also has a Fine adjustment." msgstr "" #: manual.docbook:1166(para) msgid "" "Use the Gain adjustment to control how loud the " "sample will play. This is necessary because it's extremely difficult to get " "a set of samples that all sound at about the same volume. By adjusting here, " "the samples that were recorded too quietly can be turned up to match your " "loud samples (that had to be turned down)." msgstr "" #: manual.docbook:1175(para) manual.docbook:1318(para) msgid "" "It is very easy to set the Gain too high, causing " "your sample to clip. Remember to test the gain with full-velocity notes. If " "you clip your signal here, it will only get worse as Hydrogen processes it." msgstr "" #: manual.docbook:1183(para) msgid "" "The pitch of the sample can be modified with the pitch controls. The " "Pitch knob adjust the pitch in musical half-steps. " "(So, -12 is down 1 octave). The pitch on the right adjusts the pitch " "±50 cents. (One half-step is 100 cents.)" msgstr "" #: manual.docbook:1191(para) msgid "" "The pitch is adjusted by playing the sample back faster or slower. This is " "called the Dopplar Effect. So, if you have a 1-second sample that you turn " "down -12 (1 octave), you sample will only last for .5-seconds." msgstr "" #: manual.docbook:1199(title) msgid "Instrument Parameters" msgstr "" #: manual.docbook:1201(para) msgid "" "In the instrument editor, click on the General " "button. Here you can adjust several parameters that are for the whole " "instrument (not for each layer). The parameters that you can adjust are:" msgstr "" #: manual.docbook:1209(para) msgid "" "Envelope parameters: Attack, Decay, Sustain, " "Release. (See )" msgstr "" #: manual.docbook:1215(para) #, fuzzy msgid "" "Gain: The overall " "volume of the instrument." msgstr "" "Fig. 16 Drumkit laden. Kies een drumkit " "uit de lijst." #: manual.docbook:1219(para) msgid "" "Mute Group: Which " "mute group this instrument is a member of (see )." msgstr "" #: manual.docbook:1225(para) msgid "" "Filter Parameters: Bypass, Cutoff, Resonance." msgstr "" #: manual.docbook:1230(guibutton) msgid "Random Pitch" msgstr "" #: manual.docbook:1235(para) msgid "" "It's important that you understand in order to continue on." msgstr "" #: manual.docbook:1240(title) msgid "Envelope Parameters" msgstr "" #: manual.docbook:1242(para) msgid "" "When the instrument is triggered, its volume is run through an ADSR " "Envelope. The parameters operate as follows:" msgstr "" #: manual.docbook:1257(para) msgid "" "The attack, decay, and release parameters are all set by the number of " "audio samples. This means that the time changes " "depending on the sample rate of your sound card. The max time for each of " "them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz)." msgstr "" #: manual.docbook:1248(para) msgid "" "Attack— the amount of " "time that the volume of the sample goes from 0 to the " "full velocity of the note. If the value is 0, the sample will play " "immediately at full velocity. If the value is 1.0, the sample volume will " "use the maximum time available for the attack paramater. " msgstr "" #: manual.docbook:1267(para) msgid "" "Decay— the amount of " "time for the volume of the sample to go from full " "velocity down to the sustain volume. If the value is 0, the sample will " "immediately skip from the attack volume to the sustain volume. If the value " "is 1.0, the sample volume will use the maximum time available for the decay " "parameter." msgstr "" #: manual.docbook:1278(para) msgid "" "Sustain— the volume to play the note after the decay phase is over, and until the note " "is released. If set to 0, the note will be silent. If set to 1.0, the note " "will play at full velocity." msgstr "" #: manual.docbook:1286(para) msgid "" "Release— the time to fade out the note from the sustain volume back down to 0 " "(silent). If set to 0, the note will fade out in the minimum amount of time " "(about 5 ms). If set to 1, it will fade out for the maximum time available." "" msgstr "" #: manual.docbook:1296(para) msgid "" "If the sample is shorter than the times that you specify, the sample will " "end, regardless of which phase of the ADSR it is in. If the note is " "sustained, it does not draw out the note while you are " "holding it. It only holds the gain (volume) parameter during that time." msgstr "" #: manual.docbook:1306(title) msgid "Gain and Mute Group" msgstr "" #: manual.docbook:1308(para) msgid "" "The gain sets the overall volume for the sample. This gain is applied after " "the gain that you set for the layer, and before the gain that is set for the " "mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 " "the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is " "set higher, the samples will be amplified." msgstr "" #: manual.docbook:1326(para) msgid "" "Hydrogen provides more mute groups than you know what to do with (over 256). " "A mute group is a grouping of instruments that are mutually exclusive " "— only one instrument may be playing at any time. If one is playing " "and another instrument in the group is triggered, it will immediately " "silence (mute) and start playing the other instrument. This is useful, " "especially, for instruments like hi-hats where the open sound and the closed " "sound are different instruments." msgstr "" #: manual.docbook:1337(para) msgid "" "If the mute group is set to Off, then the instrument is " "not part of any mute grouping. If the mute group is set to any number, then " "that is the group that the instrument is a part of. To set other instruments " "into the same grouping, set their mute group parameter to the same number. " "(For example, to group all the high-hat instruments, you can set all their " "mute group parameters to 1. To have a snare drum mute group, set their mute " "group parameters to 2.)" msgstr "" #: manual.docbook:1352(title) msgid "Filter and Random Pitch" msgstr "" #: manual.docbook:1354(para) msgid "" "The filter is a low-pass resonance filter. If you don't wish to use is, " "click the BYPass button so that it's red. If it's not " "red, then the filter is active. The cutoff parameter adjusts the cutoff " "frequency for the filter. The resonance parameter adjusts how much to " "resonate the cutoff frequency. If the resonance is set to 0, then the filter " "is just a simple low-pass filter." msgstr "" #: manual.docbook:1363(para) msgid "" "The cutoff frequency of the filter varies with the sample rate of your audio " "card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample " "rate." msgstr "" #: manual.docbook:1381(para) msgid "" "The random pitch paramater allows you to randomly vary the pitch of the " "sample every time it is triggered. The value is set between 0 and 1.0. The " "pitch change is fairly small: ±2 half-steps × value. Using this " "sparingly can help your sequences to sound more like a real drummer." msgstr "" #: manual.docbook:1390(title) msgid "Tips on Editing Instruments" msgstr "" #: manual.docbook:1392(para) msgid "" "With all of the different parameters available to tweak, it can be difficult " "to set up something that sounds nice when you're done. Here's a few tips on " "setting up an instrument:" msgstr "" #: manual.docbook:1397(para) msgid "" "Turn down the gain. Every time you have a " "gain knob (i.e. an amplifier), this is called a gain stage. With every gain stage you have, it's easy to overdrive your " "signal — which means the signal gets distorted by clipping. In " "addition, if you have two samples that, by themselves, peg your meters " "— what do you think happens when you combine them? That's right, you " "overdrive the signal again." msgstr "" #: manual.docbook:1406(para) msgid "" "If things sound bad and distorted, start by turning down the gain setting on " "the layer... especially if it's larger than 1.0. Then turn down the " "instrument gain. Then any gain on a LADSPA effect. Then the fader on the " "mixer. Then the master output fader." msgstr "" #: manual.docbook:1412(para) msgid "" "Test samples at full velocity. Your " "sample will be played louder if the velocity is higher. So, if you set " "everything to sound nice and full with velocity at 0.7, what will happen " "when you get a full velocity of 1.0? (Hint: clipping.)" msgstr "" #: manual.docbook:1418(para) msgid "" "Try to use samples that are -6 dB max. " "Visually, this means samples that peak at only 1/2 of full scale. Otherwise, " "turn your layer gain to about .5." msgstr "" #: manual.docbook:1423(para) msgid "" "Remove all DC offsets from the sample. In " "a sample editor, there is usually a line down the center of your sample's " "waveform. This is the zero-line. The beginning of your sample should be on " "this line. The end of your sample should also be on this line. However, if " "your signal is a little above or a little below this line, you will hear a " "click at the beginning and the end of your sample whenever it is played. If " "your sample editor doesn't provide any tools to fix a DC Offset problem, you " "can eliminate the noise by putting a slight fade-in/out at the ends of your " "sample." msgstr "" #: manual.docbook:1435(para) msgid "" "The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the " "attack and delay — the sample will stop playing at the end." msgstr "" #: manual.docbook:1440(para) msgid "" "Things change with the sample rate. If " "you have a really nice setup with all your parameters painstakenly " "tweaked... things will change if you change the sample " "rate of your audio card. Many of Hydrogens internal settings and parameters " "are done based on how many samples go by, and not on how many seconds go by. " "The sort of things that change are: anything time-base (like attack and " "release) and anything frequency based (like the cutoff frequency)." msgstr "" #: manual.docbook:1454(title) msgid "LADSPA plugins" msgstr "LADSPA plugins" #: manual.docbook:1455(para) #, fuzzy msgid "" "Hydrogen can also add effects to sounds using any LADSPA plugin library. You " "need to have installed the LADSPA sources (available from ) and while this will give a rough idea of how it " "works you should really have a taste of the real thing installing one or " "more plugin libraries, it's as simple as a scons && scons " "install. Here are a few places to download plugin libraries:" msgstr "" "Hydrogen kan ook effecten toevoegen aan de instrumenten door gebruik te " "maken van LADSPA plugins. Je moet LADPSA geïnstalleerd hebben op je " "computer, je kan het hier afhalen: http://www.ladspa.org . Het wordt pas echt " "leuk als je meer van deze paketten gaat installeren, het enige wat je moet " "uitvoeren is \"make && make install\"" #: manual.docbook:1458(para) #, fuzzy msgid "" "SWH-Plugins available at . Note that " "before compiling these plugins you need the FFTW tarball from ." msgstr "" "SWH-Plugin beschikbaar op http://plugin.org.uk. Merk op dat je voor " "het installeren eerst FFTW (http://www.fftw.org) installeert." #: manual.docbook:1460(para) #, fuzzy msgid "CMT available at ." msgstr "" "CMT beschikbaar op http://" "www.ladspa.org." #: manual.docbook:1462(para) #, fuzzy msgid "TAP available at ." msgstr "" "TAP beschikbaar op http://tap-plugins.sf.net." #: manual.docbook:1467(title) msgid "Plugins Kill" msgstr "" #: manual.docbook:1468(para) msgid "" "A LADSPA plugin is compiled, executable code. It is capable of hanging, " "crashing, freezing, screaching, overflowing buffers, and even phoning home. " "If you start having issues with Hydrogen, disable your plugins and see if " "things improve. Some plugins are not designed for real-time use, and some " "are just plain better than others." msgstr "" #: manual.docbook:1476(para) #, fuzzy msgid "" "Once you have installed a few plugins open a song you'd like add an effect " "to and select an instrument that has a few beats in the pattern. In the " "Mixer click on and select one of the four available effect " "line Click on the Edit button ( ), than on Select " "the FX: this will bring up another window () that lets you choose an effect amongst those installed, " "they are alphabetically sorted and categorized. Once you're done, adjust the " "level from the mixer and start playing. Each round knob in the FX part " "controls the level of its effect. If you want to quickly " "enable/disable the effect click the Bypass ( ) button." msgstr "" "Als ze geïnstalleerd zijn open dan een liedje waar je enkele effecten wil " "aan toevoegen. Open de Mixer en klik op " " XXX " "XXX ) XXX" #: manual.docbook:1513(title) msgid "Select an Effect" msgstr "" #: manual.docbook:1532(title) msgid "A new song" msgstr "Een nieuw liedje" #: manual.docbook:1534(title) msgid "\"Song\" mode and \"Pattern\" mode" msgstr "\"Song\" mode en \"Pattern\" mode" #: manual.docbook:1535(para) msgid "" "This is just a quick-and-dirty walkthrough to Hydrogen. Refer to the " "tutorial for a more detailed overview." msgstr "XXX" #: manual.docbook:1539(para) #, fuzzy msgid "" "Hydrogen has 2 main modes: \"Pattern\" mode and \"Song\" mode (refer to " " for the buttons to activate). When " "\"Pattern\" mode is activated the current pattern is continously repeated, " "so to help changing it until we don't like it, while \"Song\" mode repeats " "only the current pattern: this is useful when putting together the patterns, " "to create the whole structure for the song." msgstr "" "Hydrogen heeft 2 hoofd modes: \"Pattern\" mode en \"Song\" mode (XXX XXX). Als \"Pattern\" mode geactiveerd is bij het " "spelen zal het huidige patroon telkens herhaald worden om zo snel " "wijzigingen aan te brengen in het patroon. In \"Song\" mode wordt het hele " "leidje afgespeeld en wordt het niet meer herhaald. De \"Song\" mode is " "handig voor het samenbrengen van de patronen." #: manual.docbook:1545(title) msgid "A new pattern" msgstr "Een nieuw patroon" #: manual.docbook:1546(para) #, fuzzy msgid "" "We'll start from an empty song with an empty pattern, as created by default: " "\"pattern\" mode should be selected now. It is also possible to change name " "of the pattern. Now let's click on the Play button and while " "the pattern is playing let's add notes in the grid of the Song Editor () simply left_mouse_clicking on it: adjust " "grid resolution and BPM speed if needed. Rememeber some constraints of the " "grid: if you are working with a resolution of 16 you can't go back to 8 and " "remove a 16th note; same thing happens if you are working with a resolution " "of 8 and you try to insert a note in the middle of two bars (looking for a " "16 bars precision): they will be placed on the previous or on the following " "8th bar (unless you choose off from the Grid Resolution LCD, " "in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before " "adding notes in the Pattern Editor!" msgstr "" "We starten met een leeg liedje en een leeg patroon (Fig. 12). \"Pattern\" " "mode zou nu moeten geselecteerd zijn. Het is ook mogelijk om de naar van het " "patroon te veranderen." #: manual.docbook:1561(title) msgid "A new sequence" msgstr "Een nieuw spoor" #: manual.docbook:1562(para) #, fuzzy msgid "" "Once patterns are created (), we can " "copy/paste/delete them simply dragging with the mouse (activate the select " "mode for the Song Editor and keep pressed left mouse button to select those " "you want to move or copy)." msgstr "" "Eenmaal de patronen gemaakt zijn kunnen we ze juist plaatsen (Fig. 14) we " "kunnen de knoppen , " " In het venster " "\"Song Editor\" gebruiken en het copy en delete commando dat verschijnt bij " "het rechts klikken op een patroon." #: manual.docbook:1567(title) msgid "Inserting Notes in a Pattern" msgstr "" #: manual.docbook:1578(title) msgid "Adjust from the mixer" msgstr "Aanpassen via de mixer" #: manual.docbook:1579(para) msgid "" "Of course we can always use the mixer window, either when creating or " "playing patterns." msgstr "" "Natuurlijk kunnen we ook het Mixer venster gebruiken tijdens het maken of " "afspelen van patronen" #: manual.docbook:1583(para) #, fuzzy msgid "" "The Mixer frame () is made of 32 independent " "tracks, each of these is binded to an instrument, plus a \"Master Output\" " "line to adjust general output volume and a \"FX\" button to set effects. " "Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader " "and name of the track. Clicking on will play the selected " "instrument, cutting the others. The \"Mute\" button , " "simply mute that instrument. The maximun peak indicates " "the maximun volume reached from the instrument; the peak must be in a range " "of 0.0 and 1.0 (in you can see a few volumes " "too loud), otherwise it will get distorted producing a weird sound " "(especially with OSS audio driver), in this case it's better to set volume " "down; keep an eye on each vu-meter." msgstr "" "Het Mixer venster (Fig. 15) is gemaakt van 32 onafhankelijke sporen. Elk van " "die sporen is verbonden met een instrument. Rechts zie je nog een \"Master " "Output\" spoor om het uiteindelijke volume aan te passen en 3 knoppen, de " "knop \"MIX\" zorgt ervoor dat je alle sporen ziet, de knop \"FX\" stelt " "speciale effecten in zoals swing en de knop \"PEAK\" zorgt ervoor dat je het " "huidige volume per kanaal grafisch ziet.Elk instrumentspoor heeft 3 knoppen " "( " " " " ), stereo aanpassing ( " " ), de huidige volume waarde, de 4 " "draaiknoppen voor de effecten, de volume fader en de naam van het spoor. Als " "je op klikt zal enkel " "het geselecteerde intrument spelen en zullen de anderen niet hoorbaar zijn. " "De \"Mute\" knop , zal " "het enkel het geselecteerde instrument niet afspelen. Als je bij het " "afspelen veel ruis hoort is het misschien beter om het instrument wat " "stiller te zetten." #: manual.docbook:1645(title) msgid "Glossary" msgstr "" #: manual.docbook:1647(para) msgid "" "This is a glossary of general terms encountered when using Hydrogen, " "synthesizers, drums, or samplers. The definitions in the text are " "simplified, but the definitions here are more general and have more " "explanation. For example, the text of the manual would have you believe that " "an ADSR is the only kind of envelope generator, and could only ever control " "the volume. While it's simple for new users, it's not quite right." msgstr "" #: manual.docbook:1659(glossterm) msgid "ADSR" msgstr "" #: manual.docbook:1661(para) msgid "" "A type of envelope generator that allows you to control the Attack, Decay, " "Sustain, and Release parameters. Generally, the parameters are proportional to " "the velocity." msgstr "" #: manual.docbook:1670(para) msgid "" "In Hydrogen, the ADSR envelope generator only controls the volume " "(attenuation)." msgstr "" #: manual.docbook:1673(para) msgid "" "Read more about this in the Wikipedia Article ADSR Envelope" msgstr "" #: manual.docbook:1688(para) msgid "" "This is the first phase of an ADSR envelope, and is the amount of " "time to turn the parameter up from 0 to full velocity " "after triggering the note." msgstr "" #: manual.docbook:1697(glossterm) msgid "Attenuation" msgstr "" #: manual.docbook:1699(para) msgid "" "In filters and mixers, this the amount that a signal is reduced (volume)." msgstr "" #: manual.docbook:1709(glossterm) msgid "Band-Pass Filter" msgstr "" #: manual.docbook:1711(para) msgid "" "A filter that preserves a cetertain band of frequencies, and attenuates " "(silences) all others. This is often done by combining a high-pass and a low-" "pass filter." msgstr "" #: manual.docbook:1724(glossterm) msgid "Clipping" msgstr "" #: manual.docbook:1726(para) msgid "" "A phenomenon that happens to a signal when the signal is too large for " "whatever is receiving it. The peaks of the signal (which are normally smooth " "curves) get cut off straight at the max volume (clipped). This distorts the " "sound and is usually undesirable." msgstr "" #: manual.docbook:1732(para) msgid "" "An example of clipping is when you play music louder than your speaker can " "handle. Parts of the music sound harsh and fuzzy." msgstr "" #: manual.docbook:1739(glossterm) msgid "Cutoff Frequency" msgstr "" #: manual.docbook:1741(para) msgid "" "On high-pass and low-pass filters, this is the frequency that divides " "between those that pass, and those that are attenuated (silenced). In a high-" "pass resonance filter, or a low-pass resonance filter, the cutoff is also " "the frequency zone that gets boosted." msgstr "" #: manual.docbook:1746(para) msgid "" "For example, if you have a low-pass filter and you set the cutoff frequency " "high (i.e. 20kHz)... the filter will not affect the sound. All the audible " "frequencies will pass through undisturbed. As you lower the cutoff frequency " "to something like 40 Hz (the low string on a bass guitar), it sounds like " "someone is putting a blanket over the speaker. The higher frequencies are " "being attenuated above 30 Hz." msgstr "" #: manual.docbook:1765(para) msgid "" "After reaching full velocity from the attack, this is the amount of " "time to turn the parameter down from full velocity to " "the sustain level." msgstr "" #: manual.docbook:1776(glossterm) msgid "Envelope Generator" msgstr "" #: manual.docbook:1778(para) msgid "" "A way to control (change) a parameter over time as a response to triggering, " "holding, and releasing a note." msgstr "" #: manual.docbook:1781(para) msgid "Did your eyes just glaze over? Let's try again:" msgstr "" #: manual.docbook:1783(para) msgid "" "Imagine that you're playing a note on the keyboard and you have your other " "hand on a knob (volume, filter cutoff, etc.). As you play the note, you " "twist the knob (often up, then down... or down, then up). You do the same " "thing on each note. That's what an envelope generator does. See also ADSR" msgstr "" #: manual.docbook:1794(glossterm) msgid "Fader" msgstr "" #: manual.docbook:1796(para) msgid "" "A slider control used to adjust the attenuation (volume) in a mixer. Faders " "always have an \"audio\" taper, which means that the attenuation amount " "changes on an exponential scale." msgstr "" #: manual.docbook:1803(glossterm) msgid "Filter" msgstr "" #: manual.docbook:1805(para) msgid "" "A device that changes a sound by attenuating specific frequencies. A tone " "knob is an example of a simple, low-pass filter." msgstr "" #: manual.docbook:1820(para) msgid "" "In an amplifier, this adjust how much (or how little) a signal is amplified " "(volume). A higher gain value is a louder signal." msgstr "" #: manual.docbook:1828(glossterm) msgid "High-Pass Filter" msgstr "" #: manual.docbook:1830(para) msgid "" "A filter that attenuates (silences) low frequencies, but allows high " "frequencies to pass through." msgstr "" #: manual.docbook:1841(glossterm) msgid "Instrument" msgstr "" #: manual.docbook:1843(para) msgid "" "In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, " "or a tom)." msgstr "" #: manual.docbook:1854(glossterm) msgid "Layer" msgstr "" #: manual.docbook:1856(para) msgid "" "In an instrument you can load several different samples (each one called a " "layer), and have a different sample play " "depending on the velocity of the note. Only one sample at a time will play." msgstr "" #: manual.docbook:1861(para) msgid "" "Suppose you have a sample of a floor tom being struck softly. If you simply " "play the sample louder — it will not sound the " "same as a real tom that has been struck very hard. If you wish to mimic this " "in your instrument, you can load one sample for soft playing, and a " "different sample for loud playing." msgstr "" #: manual.docbook:1873(glossterm) msgid "Low-Pass Filter" msgstr "" #: manual.docbook:1875(para) msgid "" "A filter that attenuates (silences) high frequences, but allows low " "frequencies to pass through." msgstr "" #: manual.docbook:1886(glossterm) msgid "Mute" msgstr "" #: manual.docbook:1888(para) msgid "" "To make no noise. A setting on an instrument that prevents any audio output." msgstr "" #: manual.docbook:1894(glossterm) msgid "Mute Group" msgstr "" #: manual.docbook:1896(para) msgid "" "A group of instruments (samples) that should mute (stop playing) immediately " "after another instrument in the group is triggered." msgstr "" #: manual.docbook:1899(para) msgid "" "This is typically used in hi-hats, where there's a different instrument " "(sample) for when the hi-hat is open or closed. With a real hi-hat, the " "sound of the open hi-hat will stop as soon as you close it. However, if you " "use two samples — the open sound will continue even after you have " "triggered the closed sound. By placing both instruments in the same mute " "group (group #1, for example)... triggering closed sound will immediately " "stop the open sound (and vice versa)." msgstr "" #: manual.docbook:1914(glossterm) msgid "Octave" msgstr "" #: manual.docbook:1916(para) msgid "" "A span of frequencies where the top-most frequency is exactly twice the " "frequency of the bottom frequency." msgstr "" #: manual.docbook:1919(para) msgid "" "For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, " "and 575 Hz to 1150 Hz. While the frequency differences are very different " "(20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they " "sound like the same distance." msgstr "" #: manual.docbook:1936(para) msgid "" "After the note is released, this is the amount of time " "to reduce the parameter from the sustain level to 0." msgstr "" #: manual.docbook:1945(glossterm) msgid "Resonance" msgstr "" #: manual.docbook:1947(para) msgid "" "When referring to a resonance filter, this is the parameter that determines " "how much of a boost (gain) to give the frequencies at the cutoff." msgstr "" #: manual.docbook:1956(glossterm) msgid "Resonance Filter" msgstr "" #: manual.docbook:1958(para) msgid "" "A filter that gives a large boost to a very narrow range of frequencies. " "Typically it will be part of a high-pass or a low-pass filter, where the " "boosted frequencies are centered on the cut-off frequency." msgstr "" #: manual.docbook:1970(glossterm) msgid "Roll-off" msgstr "" #: manual.docbook:1972(para) msgid "" "This is the amount that frequencies are attenuated (suppressed) as the " "frequency changes (typically measured in dB/octave)." msgstr "" #: manual.docbook:1975(para) msgid "" "For example, in a low-pass filter the frequences below the cutoff frequency " "are not attenuated (they pass-through with the same volume). Same with the " "cutoff frequency. As you go above the cutoff frequency, the frequencies that " "are near the cutoff frequency are not attenuated very much at all. However, " "the frequencies that are much higher than the cutoff are attenuated " "(suppressed) a lot. This is usually approximated by a straight line (on a " "log scale) and measured in in dB of attenuation per octave of frequency." msgstr "" #: manual.docbook:2002(para) msgid "" "The level to hold the parameter after finishing the " "decay time. This level will be maintained until the not is released." msgstr "" #: manual.docbook:2020(para) msgid "" "MIDI devices are required to send this information along with the note. " "Synthesizers use this information to adjust several parameters on the sample " "(typically the volume). In Hydrogen, it is only used to adjust how loud the " "sample is played back." msgstr "" #. Put one translator per line, in the form of NAME , YEAR1, YEAR2. #: manual.docbook:0(None) msgid "translator-credits" msgstr "" #, fuzzy #~ msgid "Fig. 1 The Audio System tab" #~ msgstr "" #~ "Fig. 13 De Audio Systeem tab" #, fuzzy #~ msgid "Fig. 2 The MIDI System tab" #~ msgstr "" #~ "Fig. 14 De Midi Systeem " #~ "tab" #, fuzzy #~ msgid "Fig. 3 The appearance tab" #~ msgstr "" #~ "Fig. 15 De Voorkomen tab" #, fuzzy #~ msgid "" #~ "Fig. 4 The Audio engine Info window" #~ msgstr "" #~ "Fig. 13 De Audio Systeem tab" #, fuzzy #~ msgid "Fig. 5 The main toolbar" #~ msgstr "Fig. 15 Detail van de Mixer" #, fuzzy #~ msgid "Fig. 6 The Song Editor" #~ msgstr "Fig. 1XXX" #, fuzzy #~ msgid "Fig. 7 The Pattern Editor" #~ msgstr "Fig. 2 XXX" #, fuzzy #~ msgid "Fig. 8 The Mixer" #~ msgstr "Fig. 3 The Mixer" #~ msgid "Fig. 3 Select an effect." #~ msgstr "Fig. 3 XXX" #~ msgid "Fig. 12 The Pattern Editor" #~ msgstr "Fig. 12 de Pattern Editor" #~ msgid "" #~ "Fig. 13 Inserting notes in a pattern" #~ msgstr "" #~ "Fig. 14 Beats toevoegen in een patroon" #~ msgid "Fig. 14 The mixer" #~ msgstr "Fig. 15 Detail van de Mixer" #, fuzzy #~ msgid "" #~ "Compiling Hydrogen depends on the following libraries: " #~ msgstr "" #~ "Het compileren van hydrogen is afhankelijk van de volgende libraries" #, fuzzy #~ msgid "" #~ "Before compiling, check for additional options with: \n" #~ "\t\t$./configure --help\n" #~ "\t\t Namely, if you get some error while running Hydrogen and " #~ "you want to report it remember to configure the makefile with: \n" #~ "\t\t$./configure --enable-debug\n" #~ "\t\t Please note that at the moment no binary packaging (.rpm, ." #~ "deb, ...) is available. Contributors are welcome. Also remember to " #~ "compile with at least a GCC 3.x to be 100% sure to avoid any possible " #~ "problem." #~ msgstr "" #~ "Bekijk voor het compileren eerst nog eens de opties: \n" #~ " $ ./configure --help\n" #~ " Als er zich bij het uitvoeren fouten voordoen " #~ "kun je best hydrogen compileren met de debug optie. Zo kun je de " #~ "ontwikkelaars op de hoogte brengen van de fout. \n" #~ " $ ./configure --enable-debug\n" #~ " Voorlopig zijn er nog geen binaire versies van " #~ "hydrogen (.rpm,.deb...) Helpers zijn altijd welkom! Compileer hydrogen " #~ "met gcc versie 3.*. zo voorkom je potentiële problemen." #~ msgid "Audio driver configuration" #~ msgstr "Audio driver configuratie" #~ msgid "" #~ "It's very important to choose the proper audio driver for our system, " #~ "since the choice may influence quite much general performances. The " #~ "choice is between Oss audio driver, ALSA and Jack audio driver." #~ msgstr "" #~ "Het is zeer belangrijk dat je de juiste audio driver kiest voor jouw " #~ "systeem, omdat de keuze de perfomantie van je systeem beïnvloed. Je hebt " #~ "de keuze tussen Oss, Alsa, Jack en PortAudio. Om het beste uit Hydrogen " #~ "te halen gebruik je best Jack" #~ msgid "OSS audio driver" #~ msgstr "OSS audio driver" #~ msgid "Jack audio driver" #~ msgstr "Jack audio driver" #~ msgid "ALSA audio driver" #~ msgstr "ALSA audio driver" #~ msgid "" #~ "NEW! Now Hydrogen works also with ALSA, the new Linux standard audio " #~ "drivers." #~ msgstr "" #~ "Hydrogen werkt ook met de ALSA (Advanced Linux Sound Architecture) driver " #~ "Voor ALSA gelden dezelfde regels als voor OSS, als een programma " #~ "bijvoorbeeld hw:0,0 gebruikt kan een ander programma deze niet meet " #~ "gebruiken." #~ msgid "GUI" #~ msgstr "Grafische interface" #~ msgid "" #~ "Double clicking over the name of an instrument in the Mixer frame will " #~ "bring up a doubled face tool to modify many properties of that instrument." #~ msgstr "" #~ "Na het dubbelklikken op de naam van een instrument in de Mixer zie je de " #~ "Instrument Editor, in het volgende hoofdstuk wordt deze uitvoerig " #~ "besproken." #~ msgid "" #~ "The first tab ('Instrument') lets you fine tune the instrument: you can " #~ "adjust Attack, Decay, Sustain, Release, Cutoff and Resonance (both of " #~ "which can be excluded) or even add a random pitch." #~ msgstr "XXX" #~ msgid "" #~ "The second tab ('Layer') can add WAV/AU/AIFF/FLAC samples up to 16 layers " #~ "to the instrument according to the level of its velocity and tune pitch " #~ "and gain." #~ msgstr "" #~ "De 3 draaiknoppen aan de rechterkant van de master fader dienen om je " #~ "opname menselijker te laten klinken, zo kun je een beetje swing toevoegen." #, fuzzy #~ msgid "" #~ "From the pull-down menus it's worth noticing: File-->'Save as' to save " #~ "the current song in .h2song format, File-->Export to export it in WAV/" #~ "MID format, File--> Preferences, " #~ "Window--> Audio Engine Info and " #~ "Window--> Drumkit manager." #~ msgstr "" #~ "XXX XXX, XXX--> XXX XXX--> XXX." #~ msgid "" #~ "From the \"Audio System\" tab (Fig. 4) it is possible to modify the audio " #~ "driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and " #~ "sampling rate. We can also set some features of Hydrogen like " #~ "Enable track outputs useful if you want to add effects to " #~ "a single instrument with jack-rack; Connect to Default Output " #~ "Pair simply connects ALSA output to the default ports: uncheck " #~ "this if you want to connect jack output to other ports without " #~ "disconnecting them first. Keep an eye also on the value of \"Polyphony\": " #~ "depending on your CPU you may want to change the max simultaneous notes " #~ "in order to prevent hydrogen from xrun. Clicking on the \"Midi System\" " #~ "tab (Fig. 5) will select a menu to enable a MIDI device, a specific " #~ "channel or all of them, while clicking on \"Appearance\" tab (Fig. 6) " #~ "let's you to modify font size, type of frame (Child or Top Level) and " #~ "speed of mixer's peaks falloff and QT style of the windows." #~ msgstr "" #~ "In de Audio Systeem tab (Fig. 13) is het mogelijk om een " #~ "andere audio driver te selecteren. Je kan ook de buffergroote instellen " #~ "en de sample rate. Als je JACK selecteerd en Maak Track Outputs " #~ "mogelijk geslecteerd is zal elk instrument op een ander JACK " #~ "kanaal spelen. Als Verbind Standaard uitvoer paar " #~ "aangevinkt is zal je Hydrogen een master kanaal maken waarin alle " #~ "instrumenten worden afgespeeld. Als je op de Midi Systeem " #~ "(Fig. 14) tab klikt heb je de mogelijkheid om een MIDI apparaat te kiezen " #~ "en één of alle kanalen te selecteren. In de Voorkomen " #~ "(Fig. 15) tab kun je de groote van het lettertype veranderen, de snelheid " #~ "van de Mixer falloff, de ordening van de vensters en de stijl van de QT " #~ "elementen." #~ msgid "" #~ "This tab (Fig. 7) will bring up a window with general infos about " #~ "Hydrogen and audio driver. Buffer and sampling rate of Jack audio driver " #~ "are customizable when the server is started from the shell." #~ msgstr "XXX" #~ msgid "" #~ "Fig. 7 The Audio Engine Info window. " #~ "Better check that cpu-meter on old systems and crowded /proc dir ;)" #~ msgstr "Fig. 7 XXX" #~ msgid "" #~ "The drumkit manager shows all the options concerning drumkits, i.e. " #~ "groups of sounds (WAV or FLAC) to be binded with every track available so " #~ "to obtain a proper \"groove\" according to the situation (disco music, " #~ "rock, hip hop, etc.). To let you have a rough idea of a good example of " #~ "use of these drumkits, it is advisable to play the associated .h2song " #~ "sample song." #~ msgstr "" #~ "De drumkit manager toont alle opties van drumkits, de geluiden die " #~ "gebruikt worden per spoor dat beschikbaar is om zo een gepaste " #~ "groove te bekomen die aangepast is aan het genre zoals " #~ "bijvoorbeeld disco, rock,... Om een goed idee te krijgen van de gebruikte " #~ "geluiden is het aangeraden om eens naar het voorbeeld liedje te luisteren " #~ "dat meegeleverd is met de drumkit." #~ msgid "" #~ "From the first screen (Fig. 8) we can load/delete the drumkit, with a " #~ "short description. Here (Fig. 9) we can save some infos about the current " #~ "drumkit and from here (Fig. 10) we can import a drumkit (.h2drumkit) " #~ "(Fig. 11) or export it (Fig. 12)." #~ msgstr "" #~ "In het eerste tabblad (Fig. 16) kun je drumkits laden of verwijderen. Je " #~ "ziet ook een korte beschrijving per drumkit. Op figuur 17 kun je zien hoe " #~ "je extra info over de drumkit kunt opslaan. Via het tabblad " #~ "Importeer (Fig. 18) kun je een drumkit (.h2drumkit) " #~ "importeren. Zoals je een drumkit importeert kun je ook een drumkit " #~ "exporteren (Fig. 19)." #~ msgid "Fig. 9 Save drumkit." #~ msgstr "Fig. 17 Een drumkit opslaan." #~ msgid "Antonio Piraino" #~ msgstr "Pieter Van Isacker" #~ msgid "Alessandro Cominu" #~ msgstr "Alessandro Cominu" #~ msgid "" #~ "It is possible to download the source files directly from CVS snapshots " #~ "with:" #~ msgstr "" #~ "Het is mogelijk om de bron bestanden direct van de CVS snapshot te " #~ "downloaden met:" #~ msgid "" #~ "After having downloaded and decompressed the tar.gz file there's only to:" #~ msgstr "" #~ "Na het afhalen en uitpakken van het tar.gz bestand moet je enkel dit " #~ "uitvoeren:" #~ msgid "ROLES_OF_TRANSLATORS" #~ msgstr "" #~ msgid "CREDIT_FOR_TRANSLATORS" #~ msgstr "" hydrogen-0.9.6-beta3/data/doc/tutorial.docbook000066400000000000000000000434411211146647700212430ustar00rootroot00000000000000 Hydrogen Tutorial Antonio Piraino 24/feb/2004 Ok, you've just downloaded the latest version of Hydrogen and have it installed successfully. Now you want to test it while creating your favourite song, this might help you to learn it, writing down a few difficult parts in order to play them over and over again or to be sure that in future a quick glance at the songfile will bring up immediately to mind the song. Hydrogen can be used also as an advanced click machine that can help you practicing (in speed, precision and rudiments), maybe with a custom pattern designed by yourself. This short introduction will guide you creating a a complete song, we will work on "Georgy Porgy" of Toto which has a quite straight structure therefore is appropriate for a guide but this doenst mean the song is _actually_ easy to write down since the drummer (Jeff Porcaro) enriches the groove with his personal touch and fantasy; Hydrogen will not play better than the drummer who is working on the song, most of the task must be accomplished by the programmer's sensibility and experience. Move on Before starting make sure you have a few things: The song to study on: either an audio-cd or (better) an .ogg or .mp3 for optimal flexibility. Optionally a rough layout of the song on paper: it may be useful to count bars and different parts of the song that eventually wii get into Hydrogen. The song we will work on has the following structure: Intro: 4 bars Verse: 8 bars Bridge: 8 bars Verse: 8 bars Bridge: 8 bars Chorus: 8 bars Riff: 4 bars Verse (with guitar): 8 bars Verse (with voice): 8 bars Bridge: 8 bars Chorus: 8 bars Chorus: 8 bars Chorus: 8 bars Final Riff: 4 bars Looking at this scheme we can see that some pattern repeats, so we'll use this symbols in Hydrogen's Song Editor: Verse -> A Bridge -> B Chorus -> C And to save up words on explainations we'll use two common TLA (Three Letters Acronym ^_^): LMB: left mouse button RMB: right mouse button Well, now unplug your phone and launch Hydrogen from the shell: let's get to work! Intro The base pattern (Fig. 1 and 2) is 4 bars long (divided in 2 different bars, each repeated 2 times, so it's [2a*2]+[2b*2]) and lasts for the whole song, from the beginning to the end, riff included; most of the time (intro and riff excluded) this base pattern is repeated 2 times to reach the commonly used 8 bars for each part of the song (A,B,C). Before starting let's set the speed to 98bpm (HINT HINT you can find out by yourself the speed of the song while playing it with your favourite media player and following the rhythm by clicking repeatedly the backslash key in Hydrogen) and from the menu Grid Resolution let's set '16'. To create a new pattern select the instrument Closed HH, click on RMB and choose Fill Notes: the first two bars will be filled up. Then insert manually the beats on Snare Jazz and Kick as indicated in the 2 pictures below and there we have the base pattern for our song. Note how the beats on the hi-hat have different 'hardness': beats falling on the beginning of the bar are set at [0.78], the others at [0.50] (you can check that on the lower stat bar of Hydrogen), in order to give groove the song. Fig. 1 Base pattern, first bar. Fig. 2 Base pattern, second bar. Before we start writing down verses there are 4 intro bars, all equals to each other, except for the last one which at the end has an open hi-hat. We should do then: Rename the first pattern in the Song Editor with RMB click on the name Empty Pattern and change it to intro_a, for example. Add two 'X' near the first one (which represent the second and the third bar) Create in Pattern Editor the base pattern (Fig. 1) For the fourth bar we'll instead open the hi-hat (Fig. 3): RMB in Song Editor on the newly created pattern, choose copy, then choose a name (ex. intro_b) and automagically you will have a new one right under. Select the pattern you've just created (IMPORTANT!) Delete the last 2 beats of Closed HH and move them on Open HH. Select '32' from Grid Resolution and add another 2 beats right near the previous ones. Adjust the hardness of these 4 beats so that the first is [0.78] while the other 3 [0.20] to simulate a longer opening. Fig. 3 Intro detail, fourth bar. First verse Since we have written the base pattern, now we should already know the basis. To create the first verse we just have to copy from the Song Editor the pattern intro_a and rename, say, to A-B-C_1, because it is the first bar of the verse that eventually will also fit for the bridge (B) and the chorus (C). Pay attention, why can't we just add 2 more 'X' next to this pattern? Because in the first bar there is a Crash beat which ends the previous intro, therefore the two bars are not completely equal; you have to copy the pattern A-B-C_1 and rename it to A-B-C_2, cutting the Crash beat cited before. Same thing for the following 2 bars: just copy into the Song Editor the pattern in Fig. 2, rename it according to the previous ones and add two 'X' (because they're identical), you should reach number '8' as shown in Fig. 4. The 4 remaining bars of the verse are more or less the same of what we've just written, so why redo everything from scratch? Bars number 5,6,7 are virtually identical to the previous ones so we just have to add 2 crosses to pattern A-B-C_2 and one to A-B-C_3+4 taking care of renaming the patterns logically (so to understand how the song moves around the Song Editor), while in the eighth bar there is a fill which closes the verse. We have to copy+paste in a new line a pattern already written (ex. A-B-C_3+4), rename it to A-B-C_8 and modify it as in Fig. 4. Note how in this case too the three Snare Jazz beats on fourth bar have hardness properly tuned with [0.10], [0.20] and [0.78]; you can't see it in the picture but also the two final beats of Tom Mid are both 'touched' to [0.50], after all it's only just a small fill, better not beat hard on the drums :) Fig. 4 Eighth bar of the first verse. The result in the Song Editor should be something like Fig. 5. Fig. 5 Intro and first verse in the Song Editor. WARNING! if you reached this point without saving your work, NOW is the good time to do that. A simple [CTRL+S] followed by the name of the songfile and you'll be ok. If you want to add some more infos, LMB on 'S' button of the Song Editor and change the fields as you like: these infos will be shown upon opening of the file. Bridge and following Now that we're done with the first verse you should have an idea of how the whole thing works: the first bridge is made of the same 8 bars (4+4) with a slight change at the end of the fourth, which forces us to create a 'custom' fourth bar while the others are easily added with our friendly little cross ('X'). Let's take the latest pattern created as sample (A-B-C_8), let's copy and rename it to Bridge1_4 (i.e. fourth bar of first bridge) and modify it as in Fig. 6. We have quickly completed the bridge! The Song Editor now should appear as follows in Fig. 7. Looking closely one should ask why the fifth bar of the bridge (17th bar of the whole song) isnt assigned to the pattern A-B-C_1; the answer is that the pattern has also a Crash which is not present in A-B-C_2+5+6. Fig. 6 Fourth bar of the first bridge. Fig. 7 The Song Editor with the first bridge. Now we can build up quickly the remaining parts of the song: after this bridge there is another verse, then a bridge and a chorus, which are mostly the same so we just need to create different pattern in a few cases (along with this guide you will find the song file with the whole song). Of course one can write as many lines in the Song Editor as the bars in the song but a whole song would become difficult to follow, plus the songfile would be bigger. The Riff Around half song there are two riffs: each one is 2 bars long but actually the pattern is the same, just the other instruments play something that we will see in the last riff of this song (where drums too play the pattern of the riff). In this riff the drums play the same pattern we already know for one bar (see Fig. 1) while in the second bar only beats two times (Fig. 8), then the pattern again and then again two beats with a small final fill (Fig. 9); again the open hi-hat is done with beats of different intensity: [0.78] and [0.20]. Fig. 8 Second bar of the riff. Fig. 9 Fourth bar of the riff. The second half of the song After the riff we have half job done. We just have to write down two verses, one bridge, a chorus repeated 3 times and the same riff at the end. The second part of the song is slightly different from the previous one because we have a few hi-hat opening during the verses and every 4 bars there's a small fill almost everytime: it's easier to start from scratch a new set of pattern (i.e. A-B-C-*) in the Song Editor copying them with a suffix like '_hh' to show the presence of the Open HH. As noted in the introduction of this guide, Jeff Porcaro puts much of his skills playing the song and this makes the difference between a song played from a raw and "cold" transcription on paper (or on Hydrogen): therefore the following parts of the song will try to be faithful to the original piece, but another 'ear' could give another written layout of the same part: after all this doesnt matter so much since we are showing how a program works, not to play like Porcaro :) In Fig. 10 here is how is the section in the Song Editor of the two verses and the bridge following the first riff; as you can see the first bars (48-50 according to the Song Editor's enumeration) are already written before while the others (51-71) are new. Moreover there a few pattern 'ad hoc' identified by A-B-C-3a_hh (Fig. 11 to see an example) and A-B-C-4a_hh since both have a few changes not present in any pattern written up to now. Fig. 10 Third and fourth bars in the Song Editor. Fig. 11 Seventh bar of the third bridge. After the third bridge we repeat the chorus: the first time the Stick is used instead of the Snare Jazz and we don't play the Kick (even if it may sound the opposite since the bass guitar does play here, so we have put the same the kick beats softly at [0.50]), while the second and third time the chorus goes on there are a few bars different, as shown from patterns C3_*. In Fig. 12 the pattern C3_6+7 & C4_3 (slightly different ...) which criptycally identify the sixth and seventh bar of the third chorus AND the third bar of the fourth chorus: if you think this is confusing, you may find out your own method :-) Fig. 12 Pattern C3_6+7 & C4_3. The Final riff The song ends repeating a slightly different riff we have met before: the first 2 bars are the same (i.e. pattern + 2 beats), while the in third bar the drum plays actually with the other instruments (Fig. 13) to finally end as always. Fig. 13 The final riff. And this is the end. The goal of this little tutorial is giving a quick overview of the most common functions of Hydrogen: this piece of software can also run for other purposes, like an advanced 'click' played with the drum, or to loop playing some part of a song difficult to catch; however, as in other things, analyzing the song itself helps the comprehension and here too, Hydrogen can be helpful reducing the time needed to write down a pattern and tune it. For comments, suggestions, corrections, you can use the Hydrogen mailing lists (hydrogen.sf.net) hydrogen-0.9.6-beta3/data/doc/tutorial.pot000066400000000000000000000436411211146647700204270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2011-01-18 22:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: application/x-xml2pot; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: tutorial.docbook:7 #, no-c-format msgid "Hydrogen Tutorial" msgstr "" #. Tag: author #: tutorial.docbook:9 #, no-c-format msgid "Antonio Piraino" msgstr "" #. Tag: para #: tutorial.docbook:18 #, no-c-format msgid "Ok, you've just downloaded the latest version of Hydrogen and have it installed successfully. Now you want to test it while creating your favourite song, this might help you to learn it, writing down a few difficult parts in order to play them over and over again or to be sure that in future a quick glance at the songfile will bring up immediately to mind the song. Hydrogen can be used also as an advanced click machine that can help you practicing (in speed, precision and rudiments), maybe with a custom pattern designed by yourself. This short introduction will guide you creating a a complete song, we will work on \"Georgy Porgy\" of Toto which has a quite straight structure therefore is appropriate for a guide but this doenst mean the song is _actually_ easy to write down since the drummer (Jeff Porcaro) enriches the groove with his personal touch and fantasy; Hydrogen will not play better than the drummer who is working on the song, most of the task must be accomplished by the programmer's sensibility and experience." msgstr "" #. Tag: title #: tutorial.docbook:24 #, no-c-format msgid "Move on" msgstr "" #. Tag: para #: tutorial.docbook:25 #, no-c-format msgid "Before starting make sure you have a few things:" msgstr "" #. Tag: para #: tutorial.docbook:28 #, no-c-format msgid "The song to study on: either an audio-cd or (better) an .ogg or .mp3 for optimal flexibility." msgstr "" #. Tag: para #: tutorial.docbook:29 #, no-c-format msgid "Optionally a rough layout of the song on paper: it may be useful to count bars and different parts of the song that eventually wii get into Hydrogen." msgstr "" #. Tag: para #: tutorial.docbook:32 #, no-c-format msgid "The song we will work on has the following structure:" msgstr "" #. Tag: para #: tutorial.docbook:35 #, no-c-format msgid "Intro: 4 bars" msgstr "" #. Tag: para #: tutorial.docbook:36 tutorial.docbook:38 #, no-c-format msgid "Verse: 8 bars" msgstr "" #. Tag: para #: tutorial.docbook:37 tutorial.docbook:39 tutorial.docbook:44 #, no-c-format msgid "Bridge: 8 bars" msgstr "" #. Tag: para #: tutorial.docbook:40 tutorial.docbook:45 tutorial.docbook:46 tutorial.docbook:47 #, no-c-format msgid "Chorus: 8 bars" msgstr "" #. Tag: para #: tutorial.docbook:41 #, no-c-format msgid "Riff: 4 bars" msgstr "" #. Tag: para #: tutorial.docbook:42 #, no-c-format msgid "Verse (with guitar): 8 bars" msgstr "" #. Tag: para #: tutorial.docbook:43 #, no-c-format msgid "Verse (with voice): 8 bars" msgstr "" #. Tag: para #: tutorial.docbook:48 #, no-c-format msgid "Final Riff: 4 bars" msgstr "" #. Tag: para #: tutorial.docbook:51 #, no-c-format msgid "Looking at this scheme we can see that some pattern repeats, so we'll use this symbols in Hydrogen's Song Editor:" msgstr "" #. Tag: para #: tutorial.docbook:54 #, no-c-format msgid "Verse -> A" msgstr "" #. Tag: para #: tutorial.docbook:55 #, no-c-format msgid "Bridge -> B" msgstr "" #. Tag: para #: tutorial.docbook:56 #, no-c-format msgid "Chorus -> C" msgstr "" #. Tag: para #: tutorial.docbook:58 #, no-c-format msgid "And to save up words on explainations we'll use two common TLA (Three Letters Acronym ^_^):" msgstr "" #. Tag: para #: tutorial.docbook:60 #, no-c-format msgid "LMB: left mouse button" msgstr "" #. Tag: para #: tutorial.docbook:61 #, no-c-format msgid "RMB: right mouse button" msgstr "" #. Tag: para #: tutorial.docbook:64 #, no-c-format msgid "Well, now unplug your phone and launch Hydrogen from the shell: let's get to work!" msgstr "" #. Tag: title #: tutorial.docbook:67 #, no-c-format msgid "Intro" msgstr "" #. Tag: para #: tutorial.docbook:68 #, no-c-format msgid "The base pattern (Fig. 1 and 2) is 4 bars long (divided in 2 different bars, each repeated 2 times, so it's [2a*2]+[2b*2]) and lasts for the whole song, from the beginning to the end, riff included; most of the time (intro and riff excluded) this base pattern is repeated 2 times to reach the commonly used 8 bars for each part of the song (A,B,C). Before starting let's set the speed to 98bpm (HINT HINT you can find out by yourself the speed of the song while playing it with your favourite media player and following the rhythm by clicking repeatedly the backslash key in Hydrogen) and from the menu Grid Resolution let's set '16'. To create a new pattern select the instrument Closed HH, click on RMB and choose Fill Notes: the first two bars will be filled up. Then insert manually the beats on Snare Jazz and Kick as indicated in the 2 pictures below and there we have the base pattern for our song. Note how the beats on the hi-hat have different 'hardness': beats falling on the beginning of the bar are set at [0.78], the others at [0.50] (you can check that on the lower stat bar of Hydrogen), in order to give groove the song." msgstr "" #. Tag: para #: tutorial.docbook:76 #, no-c-format msgid "Fig. 1 Base pattern, first bar." msgstr "" #. Tag: para #: tutorial.docbook:89 #, no-c-format msgid "Fig. 2 Base pattern, second bar." msgstr "" #. Tag: para #: tutorial.docbook:96 #, no-c-format msgid "Before we start writing down verses there are 4 intro bars, all equals to each other, except for the last one which at the end has an open hi-hat. We should do then:" msgstr "" #. Tag: para #: tutorial.docbook:99 #, no-c-format msgid "Rename the first pattern in the Song Editor with RMB click on the name Empty Pattern and change it to intro_a, for example." msgstr "" #. Tag: para #: tutorial.docbook:100 #, no-c-format msgid "Add two 'X' near the first one (which represent the second and the third bar)" msgstr "" #. Tag: para #: tutorial.docbook:101 #, no-c-format msgid "Create in Pattern Editor the base pattern (Fig. 1)" msgstr "" #. Tag: para #: tutorial.docbook:105 #, no-c-format msgid "For the fourth bar we'll instead open the hi-hat (Fig. 3):" msgstr "" #. Tag: para #: tutorial.docbook:108 #, no-c-format msgid "RMB in Song Editor on the newly created pattern, choose copy, then choose a name (ex. intro_b) and automagically you will have a new one right under." msgstr "" #. Tag: para #: tutorial.docbook:109 #, no-c-format msgid "Select the pattern you've just created (IMPORTANT!)" msgstr "" #. Tag: para #: tutorial.docbook:110 #, no-c-format msgid "Delete the last 2 beats of Closed HH and move them on Open HH." msgstr "" #. Tag: para #: tutorial.docbook:111 #, no-c-format msgid "Select '32' from Grid Resolution and add another 2 beats right near the previous ones." msgstr "" #. Tag: para #: tutorial.docbook:112 #, no-c-format msgid "Adjust the hardness of these 4 beats so that the first is [0.78] while the other 3 [0.20] to simulate a longer opening." msgstr "" #. Tag: para #: tutorial.docbook:121 #, no-c-format msgid "Fig. 3 Intro detail, fourth bar." msgstr "" #. Tag: title #: tutorial.docbook:130 #, no-c-format msgid "First verse" msgstr "" #. Tag: para #: tutorial.docbook:131 #, no-c-format msgid "Since we have written the base pattern, now we should already know the basis. To create the first verse we just have to copy from the Song Editor the pattern intro_a and rename, say, to A-B-C_1, because it is the first bar of the verse that eventually will also fit for the bridge (B) and the chorus (C). Pay attention, why can't we just add 2 more 'X' next to this pattern? Because in the first bar there is a Crash beat which ends the previous intro, therefore the two bars are not completely equal; you have to copy the pattern A-B-C_1 and rename it to A-B-C_2, cutting the Crash beat cited before." msgstr "" #. Tag: para #: tutorial.docbook:133 #, no-c-format msgid "Same thing for the following 2 bars: just copy into the Song Editor the pattern in Fig. 2, rename it according to the previous ones and add two 'X' (because they're identical), you should reach number '8' as shown in Fig. 4." msgstr "" #. Tag: para #: tutorial.docbook:134 #, no-c-format msgid "The 4 remaining bars of the verse are more or less the same of what we've just written, so why redo everything from scratch? Bars number 5,6,7 are virtually identical to the previous ones so we just have to add 2 crosses to pattern A-B-C_2 and one to A-B-C_3+4 taking care of renaming the patterns logically (so to understand how the song moves around the Song Editor), while in the eighth bar there is a fill which closes the verse. We have to copy+paste in a new line a pattern already written (ex. A-B-C_3+4), rename it to A-B-C_8 and modify it as in Fig. 4. Note how in this case too the three Snare Jazz beats on fourth bar have hardness properly tuned with [0.10], [0.20] and [0.78]; you can't see it in the picture but also the two final beats of Tom Mid are both 'touched' to [0.50], after all it's only just a small fill, better not beat hard on the drums :)" msgstr "" #. Tag: para #: tutorial.docbook:142 #, no-c-format msgid "Fig. 4 Eighth bar of the first verse." msgstr "" #. Tag: para #: tutorial.docbook:149 #, no-c-format msgid "The result in the Song Editor should be something like Fig. 5." msgstr "" #. Tag: para #: tutorial.docbook:157 #, no-c-format msgid "Fig. 5 Intro and first verse in the Song Editor." msgstr "" #. Tag: para #: tutorial.docbook:164 #, no-c-format msgid "WARNING! if you reached this point without saving your work, NOW is the good time to do that. A simple [CTRL+S] followed by the name of the songfile and you'll be ok. If you want to add some more infos, LMB on 'S' button of the Song Editor and change the fields as you like: these infos will be shown upon opening of the file." msgstr "" #. Tag: title #: tutorial.docbook:169 #, no-c-format msgid "Bridge and following" msgstr "" #. Tag: para #: tutorial.docbook:170 #, no-c-format msgid "Now that we're done with the first verse you should have an idea of how the whole thing works: the first bridge is made of the same 8 bars (4+4) with a slight change at the end of the fourth, which forces us to create a 'custom' fourth bar while the others are easily added with our friendly little cross ('X')." msgstr "" #. Tag: para #: tutorial.docbook:172 #, no-c-format msgid "Let's take the latest pattern created as sample (A-B-C_8), let's copy and rename it to Bridge1_4 (i.e. fourth bar of first bridge) and modify it as in Fig. 6. We have quickly completed the bridge! The Song Editor now should appear as follows in Fig. 7. Looking closely one should ask why the fifth bar of the bridge (17th bar of the whole song) isnt assigned to the pattern A-B-C_1; the answer is that the pattern has also a Crash which is not present in A-B-C_2+5+6." msgstr "" #. Tag: para #: tutorial.docbook:180 #, no-c-format msgid "Fig. 6 Fourth bar of the first bridge." msgstr "" #. Tag: para #: tutorial.docbook:193 #, no-c-format msgid "Fig. 7 The Song Editor with the first bridge." msgstr "" #. Tag: para #: tutorial.docbook:200 #, no-c-format msgid "Now we can build up quickly the remaining parts of the song: after this bridge there is another verse, then a bridge and a chorus, which are mostly the same so we just need to create different pattern in a few cases (along with this guide you will find the song file with the whole song). Of course one can write as many lines in the Song Editor as the bars in the song but a whole song would become difficult to follow, plus the songfile would be bigger." msgstr "" #. Tag: title #: tutorial.docbook:205 #, no-c-format msgid "The Riff" msgstr "" #. Tag: para #: tutorial.docbook:206 #, no-c-format msgid "Around half song there are two riffs: each one is 2 bars long but actually the pattern is the same, just the other instruments play something that we will see in the last riff of this song (where drums too play the pattern of the riff)." msgstr "" #. Tag: para #: tutorial.docbook:208 #, no-c-format msgid "In this riff the drums play the same pattern we already know for one bar (see Fig. 1) while in the second bar only beats two times (Fig. 8), then the pattern again and then again two beats with a small final fill (Fig. 9); again the open hi-hat is done with beats of different intensity: [0.78] and [0.20]." msgstr "" #. Tag: para #: tutorial.docbook:216 #, no-c-format msgid "Fig. 8 Second bar of the riff." msgstr "" #. Tag: para #: tutorial.docbook:228 #, no-c-format msgid "Fig. 9 Fourth bar of the riff." msgstr "" #. Tag: title #: tutorial.docbook:237 #, no-c-format msgid "The second half of the song" msgstr "" #. Tag: para #: tutorial.docbook:238 #, no-c-format msgid "After the riff we have half job done. We just have to write down two verses, one bridge, a chorus repeated 3 times and the same riff at the end." msgstr "" #. Tag: para #: tutorial.docbook:240 #, no-c-format msgid "The second part of the song is slightly different from the previous one because we have a few hi-hat opening during the verses and every 4 bars there's a small fill almost everytime: it's easier to start from scratch a new set of pattern (i.e. A-B-C-*) in the Song Editor copying them with a suffix like '_hh' to show the presence of the Open HH. As noted in the introduction of this guide, Jeff Porcaro puts much of his skills playing the song and this makes the difference between a song played from a raw and \"cold\" transcription on paper (or on Hydrogen): therefore the following parts of the song will try to be faithful to the original piece, but another 'ear' could give another written layout of the same part: after all this doesnt matter so much since we are showing how a program works, not to play like Porcaro :)" msgstr "" #. Tag: para #: tutorial.docbook:242 #, no-c-format msgid "In Fig. 10 here is how is the section in the Song Editor of the two verses and the bridge following the first riff; as you can see the first bars (48-50 according to the Song Editor's enumeration) are already written before while the others (51-71) are new. Moreover there a few pattern 'ad hoc' identified by A-B-C-3a_hh (Fig. 11 to see an example) and A-B-C-4a_hh since both have a few changes not present in any pattern written up to now." msgstr "" #. Tag: para #: tutorial.docbook:250 #, no-c-format msgid "Fig. 10 Third and fourth bars in the Song Editor." msgstr "" #. Tag: para #: tutorial.docbook:263 #, no-c-format msgid "Fig. 11 Seventh bar of the third bridge." msgstr "" #. Tag: para #: tutorial.docbook:270 #, no-c-format msgid "After the third bridge we repeat the chorus: the first time the Stick is used instead of the Snare Jazz and we don't play the Kick (even if it may sound the opposite since the bass guitar does play here, so we have put the same the kick beats softly at [0.50]), while the second and third time the chorus goes on there are a few bars different, as shown from patterns C3_*. In Fig. 12 the pattern C3_6+7 & C4_3 (slightly different ...) which criptycally identify the sixth and seventh bar of the third chorus AND the third bar of the fourth chorus: if you think this is confusing, you may find out your own method :-)" msgstr "" #. Tag: para #: tutorial.docbook:278 #, no-c-format msgid "Fig. 12 Pattern C3_6+7 & C4_3." msgstr "" #. Tag: title #: tutorial.docbook:288 #, no-c-format msgid "The Final riff" msgstr "" #. Tag: para #: tutorial.docbook:289 #, no-c-format msgid "The song ends repeating a slightly different riff we have met before: the first 2 bars are the same (i.e. pattern + 2 beats), while the in third bar the drum plays actually with the other instruments (Fig. 13) to finally end as always." msgstr "" #. Tag: para #: tutorial.docbook:297 #, no-c-format msgid "Fig. 13 The final riff." msgstr "" #. Tag: para #: tutorial.docbook:304 #, no-c-format msgid "And this is the end. The goal of this little tutorial is giving a quick overview of the most common functions of Hydrogen: this piece of software can also run for other purposes, like an advanced 'click' played with the drum, or to loop playing some part of a song difficult to catch; however, as in other things, analyzing the song itself helps the comprehension and here too, Hydrogen can be helpful reducing the time needed to write down a pattern and tune it." msgstr "" #. Tag: para #: tutorial.docbook:306 #, no-c-format msgid "For comments, suggestions, corrections, you can use the Hydrogen mailing lists (hydrogen.sf.net)" msgstr "" hydrogen-0.9.6-beta3/data/doc/tutorial_en.html000066400000000000000000000505501211146647700212500ustar00rootroot00000000000000Hydrogen Tutorial

    Hydrogen Tutorial

    Antonio Piraino

    Abstract

    Ok, you've just downloaded the latest version of Hydrogen and have it installed successfully. Now you want to test it while creating your favourite song, this might help you to learn it, writing down a few difficult parts in order to play them over and over again or to be sure that in future a quick glance at the songfile will bring up immediately to mind the song. Hydrogen can be used also as an advanced “click” machine that can help you practicing (in speed, precision and rudiments), maybe with a custom pattern designed by yourself. This short introduction will guide you creating a a complete song, we will work on "Georgy Porgy" of Toto which has a quite straight structure therefore is appropriate for a guide but this doenst mean the song is _actually_ easy to write down since the drummer (Jeff Porcaro) enriches the groove with his personal touch and fantasy; Hydrogen will not play better than the drummer who is working on the song, most of the task must be accomplished by the programmer's sensibility and experience.


    Chapter1.Move on

    Before starting make sure you have a few things:

    • The song to study on: either an audio-cd or (better) an .ogg or .mp3 for optimal flexibility.

    • Optionally a rough layout of the song on paper: it may be useful to count bars and different parts of the song that eventually wii get into Hydrogen.

    The song we will work on has the following structure:

    • Intro: 4 bars

    • Verse: 8 bars

    • Bridge: 8 bars

    • Verse: 8 bars

    • Bridge: 8 bars

    • Chorus: 8 bars

    • Riff: 4 bars

    • Verse (with guitar): 8 bars

    • Verse (with voice): 8 bars

    • Bridge: 8 bars

    • Chorus: 8 bars

    • Chorus: 8 bars

    • Chorus: 8 bars

    • Final Riff: 4 bars

    Looking at this scheme we can see that some pattern repeats, so we'll use this symbols in Hydrogen's Song Editor:

    • Verse -> A

    • Bridge -> B

    • Chorus -> C

    And to save up words on explainations we'll use two common TLA (Three Letters Acronym ^_^):

    • LMB: left mouse button

    • RMB: right mouse button

    Well, now unplug your phone and launch Hydrogen from the shell: let's get to work!

    1.Intro

    The base pattern (Fig. 1 and 2) is 4 bars long (divided in 2 different bars, each repeated 2 times, so it's [2a*2]+[2b*2]) and lasts for the whole song, from the beginning to the end, riff included; most of the time (intro and riff excluded) this base pattern is repeated 2 times to reach the commonly used 8 bars for each part of the song (A,B,C). Before starting let's set the speed to 98bpm (HINT HINT you can find out by yourself the speed of the song while playing it with your favourite media player and following the rhythm by clicking repeatedly the backslash key in Hydrogen) and from the menu “Grid Resolution” let's set '16'. To create a new pattern select the instrument “Closed HH”, click on RMB and choose “Fill Notes”: the first two bars will be filled up. Then insert manually the beats on Snare Jazz and Kick as indicated in the 2 pictures below and there we have the base pattern for our song. Note how the beats on the hi-hat have different 'hardness': beats falling on the beginning of the bar are set at [0.78], the others at [0.50] (you can check that on the lower stat bar of Hydrogen), in order to give groove the song.

    Fig. 1 Base pattern, first bar.

    Fig. 2 Base pattern, second bar.

    Before we start writing down verses there are 4 intro bars, all equals to each other, except for the last one which at the end has an open hi-hat. We should do then:

    • Rename the first pattern in the Song Editor with RMB click on the name “Empty Pattern” and change it to “intro_a”, for example.

    • Add two 'X' near the first one (which represent the second and the third bar)

    • Create in Pattern Editor the base pattern (Fig. 1)

    For the fourth bar we'll instead open the hi-hat (Fig. 3):

    • RMB in Song Editor on the newly created pattern, choose “copy”, then choose a name (ex. “intro_b”) and automagically you will have a new one right under.

    • Select the pattern you've just created (IMPORTANT!)

    • Delete the last 2 beats of “Closed HH” and move them on “Open HH”.

    • Select '32' from “Grid Resolution” and add another 2 beats right near the previous ones.

    • Adjust the hardness of these 4 beats so that the first is [0.78] while the other 3 [0.20] to simulate a longer opening.

    Fig. 3 Intro detail, fourth bar.

    2.First verse

    Since we have written the base pattern, now we should already know the basis. To create the first verse we just have to copy from the Song Editor the pattern “intro_a” and rename, say, to “A-B-C_1”, because it is the first bar of the verse that eventually will also fit for the bridge (B) and the chorus (C). Pay attention, why can't we just add 2 more 'X' next to this pattern? Because in the first bar there is a “Crash” beat which ends the previous intro, therefore the two bars are not completely equal; you have to copy the pattern “A-B-C_1” and rename it to “A-B-C_2”, cutting the “Crash” beat cited before.

    Same thing for the following 2 bars: just copy into the Song Editor the pattern in Fig. 2, rename it according to the previous ones and add two 'X' (because they're identical), you should reach number '8' as shown in Fig. 4.

    The 4 remaining bars of the verse are more or less the same of what we've just written, so why redo everything from scratch? Bars number 5,6,7 are virtually identical to the previous ones so we just have to add 2 crosses to pattern “A-B-C_2” and one to “A-B-C_3+4” taking care of renaming the patterns logically (so to understand how the song moves around the Song Editor), while in the eighth bar there is a fill which closes the verse. We have to copy+paste in a new line a pattern already written (ex. “A-B-C_3+4”), rename it to “A-B-C_8” and modify it as in Fig. 4. Note how in this case too the three “Snare Jazz” beats on fourth bar have hardness properly tuned with [0.10], [0.20] and [0.78]; you can't see it in the picture but also the two final beats of “Tom Mid” are both 'touched' to [0.50], after all it's only just a small fill, better not beat hard on the drums :)

    Fig. 4 Eighth bar of the first verse.

    The result in the Song Editor should be something like Fig. 5.

    Fig. 5 Intro and first verse in the Song Editor.

    WARNING! if you reached this point without saving your work, NOW is the good time to do that. A simple [CTRL+S] followed by the name of the songfile and you'll be ok. If you want to add some more infos, LMB on 'S' button of the Song Editor and change the fields as you like: these infos will be shown upon opening of the file.

    3.Bridge and following

    Now that we're done with the first verse you should have an idea of how the whole thing works: the first bridge is made of the same 8 bars (4+4) with a slight change at the end of the fourth, which forces us to create a 'custom' fourth bar while the others are easily added with our friendly little cross ('X').

    Let's take the latest pattern created as sample (“A-B-C_8”), let's copy and rename it to “Bridge1_4” (i.e. fourth bar of first bridge) and modify it as in Fig. 6. We have quickly completed the bridge! The Song Editor now should appear as follows in Fig. 7. Looking closely one should ask why the fifth bar of the bridge (17th bar of the whole song) isnt assigned to the pattern “A-B-C_1”; the answer is that the pattern has also a “Crash” which is not present in “A-B-C_2+5+6”.

    Fig. 6 Fourth bar of the first bridge.

    Fig. 7 The Song Editor with the first bridge.

    Now we can build up quickly the remaining parts of the song: after this bridge there is another verse, then a bridge and a chorus, which are mostly the same so we just need to create different pattern in a few cases (along with this guide you will find the song file with the whole song). Of course one can write as many lines in the Song Editor as the bars in the song but a whole song would become difficult to follow, plus the songfile would be bigger.

    4.The Riff

    Around half song there are two riffs: each one is 2 bars long but actually the pattern is the same, just the other instruments play something that we will see in the last riff of this song (where drums too play the pattern of the riff).

    In this riff the drums play the same pattern we already know for one bar (see Fig. 1) while in the second bar only beats two times (Fig. 8), then the pattern again and then again two beats with a small final fill (Fig. 9); again the open hi-hat is done with beats of different intensity: [0.78] and [0.20].

    Fig. 8 Second bar of the riff.

    Fig. 9 Fourth bar of the riff.

    5.The second half of the song

    After the riff we have half job done. We just have to write down two verses, one bridge, a chorus repeated 3 times and the same riff at the end.

    The second part of the song is slightly different from the previous one because we have a few hi-hat opening during the verses and every 4 bars there's a small fill almost everytime: it's easier to start from scratch a new set of pattern (i.e. “A-B-C-*”) in the Song Editor copying them with a suffix like '_hh' to show the presence of the “Open HH”. As noted in the introduction of this guide, Jeff Porcaro puts much of his skills playing the song and this makes the difference between a song played from a raw and "cold" transcription on paper (or on Hydrogen): therefore the following parts of the song will try to be faithful to the original piece, but another 'ear' could give another written layout of the same part: after all this doesnt matter so much since we are showing how a program works, not to play like Porcaro :)

    In Fig. 10 here is how is the section in the Song Editor of the two verses and the bridge following the first riff; as you can see the first bars (48-50 according to the Song Editor's enumeration) are already written before while the others (51-71) are new. Moreover there a few pattern 'ad hoc' identified by “A-B-C-3a_hh” (Fig. 11 to see an example) and “A-B-C-4a_hh” since both have a few changes not present in any pattern written up to now.

    Fig. 10 Third and fourth bars in the Song Editor.

    Fig. 11 Seventh bar of the third bridge.

    After the third bridge we repeat the chorus: the first time the “Stick” is used instead of the “Snare Jazz” and we don't play the “Kick” (even if it may sound the opposite since the bass guitar does play here, so we have put the same the kick beats softly at [0.50]), while the second and third time the chorus goes on there are a few bars different, as shown from patterns “C3_*”. In Fig. 12 the pattern “C3_6+7 & C4_3” (slightly different ...) which criptycally identify the sixth and seventh bar of the third chorus AND the third bar of the fourth chorus: if you think this is confusing, you may find out your own method :-)

    Fig. 12 Pattern “C3_6+7 & C4_3”.

    6.The Final riff

    The song ends repeating a slightly different riff we have met before: the first 2 bars are the same (i.e. pattern + 2 beats), while the in third bar the drum plays actually with the other instruments (Fig. 13) to finally end as always.

    Fig. 13 The final riff.

    And this is the end. The goal of this little tutorial is giving a quick overview of the most common functions of Hydrogen: this piece of software can also run for other purposes, like an advanced 'click' played with the drum, or to loop playing some part of a song difficult to catch; however, as in other things, analyzing the song itself helps the comprehension and here too, Hydrogen can be helpful reducing the time needed to write down a pattern and tune it.

    For comments, suggestions, corrections, you can use the Hydrogen mailing lists (hydrogen.sf.net)

    hydrogen-0.9.6-beta3/data/doc/tutorial_fr.html000066400000000000000000000564541211146647700212660ustar00rootroot00000000000000Tutoriel de Hydrogen

    Tutoriel de Hydrogen

    Antonio Piraino

    Rsum

    Vous venez de tlcharger la dernire version du logiciel Hydrogen et l'installation s'est bien droule. Maintenant vous voulez l'essayer et recrer votre chanson favorite. Ceci pourrait en effet vous aider apprendre crire les parties les plus difficiles, pour pouvoir les couter plusieurs fois ou tre sur que vous pouvez, d'un coup d'oeil rapide dans le fichier du morceau, vous le remmorer immdiatement. Hydrogen peut tre utilis comme une "bote rythme" avance qui peut vous aider dans votre pratique musicale (dans la vitesse, la prcision et autres bases), peut tre avec un motif dfini par vos soins. Cette petite introduction vous guidera dans la cration d'une chanson complte. Nous travaillerons sur le morceau "Georgy Porgy" de Toto (dsol) qui a une structure assez directe, ce qui le rend appropri pour ce guide, mais cela ne veut pas dire que le morceau est _vraiment_ facile crire vu que le batteur, Jeff Porcaro, enrichit le groove avec son touch personnel et son feeling. Hydrogen ne jouera pas mieux que le batteur, la majeure partie de la tche doit tre accomplie par la sensibilit et l'exprience du programmeur.


    Chapitre1.En avant

    Avant de commencer assurez vous d'avoir ces diffrentes choses :

    • Le morceau tudi : sur CD audio, ou, mieux, au format .wav, .ogg ou .mp3 pour une flexibilit optimale.

    • Eventuellement la partition de batterie ou un schma approximatif de la structure de la chanson : il peut tre utile de compter les mesures et de viualiser les diffrentes parties du morceau.

    La chanson que nous travaillons possde la structure suivante :

    • Intro : 4 mesures

    • Couplet : 8 mesures

    • Pont : 8 mesures

    • Couplet : 8 mesures

    • Pont : 8 mesures

    • Refrain : 8 mesures

    • Riff : 4 mesures

    • Couplet (avec guitare) : 8 mesures

    • Couplet (avec voix) : 8 mesures

    • Pont : 8 mesures

    • Refrain : 8 mesures

    • Refrain : 8 mesures

    • Refrain : 8 mesures

    • Riff final : 4 mesures

    En regardant cet arrangement nous pouvons voir que quelques motifs se rptent, nous emploierons donc cette lgende avec Hydrogen :

    • Verse -> A

    • Bridge -> B

    • Chorus -> C

    Et pour sauver les mots explicatifs, nou utiliserons les TLA communs (Trois Lettres Acronymes ^_^):

    • LMB: left mouse button (boutons gauche de la souris)

    • RMB: right mouse button (bouton droit de la souris)

    Bien, maintenant dbranchez votre tlphone et lancez Hydrogen : au travail !

    1.Introduction

    Le motif de base (Fig. 1 and 2) se compose de 4 mesures (divis en 2 mesures diffrentes, chacune rpte 2 fois, donc [2a*2]+[2b*2]) et dure la chanson entire, du dbut la fin, riff inclus ; la plupart du temps (intro et riff exclus) ce motif de base est rpt 2 fois pour arriver une structure classique de 8 mesures pour chaque partie du morceau (A,B,C). Avant de commencer, plaez la vitesse 98bpm (Remarque : vous pouvez trouver la vitesse (en Bpm) du morceau par vous mme en la jouant avec votre lecteur prfr, XMMS, et en tapant le rythme avec la touche antislash dans Hydrogen). partir du menu "Rsolution de la grille" choisissez '16'. Pour crer un nouveau motif, cliquez droit sur l'instrument "Closed HH" et choisissez "Fill Notes": les deux premires mesures seront remplies. Insrez alors manuellement les notes de la caisse claire Jazz ("Snare Jazz") et de la grosse caisse ("Kick") comme indiqu sur les 2 images ci-dessous. Nous avons le motif de base pour notre morceau. Notez comment les coups de charleston sont accentus de manires diffrentes : ceux qui tombent sur les temps (au dbut d'une mesure) ont une intensit de [0,78 ], les autres de [0.50] (vous pouvez vrifier cela sur la barre de statut infrieure d'Hydrogen), afin de donner du groove au morceau.

    Fig. 1 Motif de base, premire mesure.

    Fig. 2 Motif de base, seconde mesure.

    Avant que nous commencions crire les couplets, il y a 4 mesures d'intro, toutes identiques, except pour la dernire, la fin de laquelle il y a un coup de charleston ouvert . Faites ce qui suit :

    • Renommez le premier motif dans l'diteur de morceau en cliquant avec le bouton droit de la souris surEmpty Pattern. Changez le, par exemple, en intro_a.

    • Ajoutez 2 'X' prs du premier (qui reprsente les deuxime et troisime mesures)

    • Crez dans l'diteur de motif le motif de base (Fig. 1)

    Pour la quatrime mesure, nous allons remplacer par une ouverture de charleston (Fig. 3) :

    • Cliquez droit dans l'diteur de morceau sur le motif nouvellement cr, slectionnez copier, puis choisissez un nom (ex.intro_b) et un nouveau motif apparait en dessous automagiquement !

    • Slectionnez le motif que vous venez de crer (IMPORTANT !)

    • Effacez les 2 dernires notes de charleston ferm et remplacer par des charleston ouverts.

    • Slectionnez '32' depuis "Rsolution de la grille" et ajoutez 2 nouvelles notes juste cot des prcdentes.

    • Ajustez l'intensit de ces 4 notes de sorte que le premier soit [0.78] et que les 3 autres soient [0.20] pour simuler une ouverture plus longue.

    Fig. 3 Dtail de l'intro, quatrime mesure.

    2.Premier Couplet

    Nous venons de crer le motif de base, maintenant, nous devrions donc connatre ... les bases ! Pour crer le premier couplet, il suffit de copier dans l'diteur de motif le motif intro_a et de le renommer en A-B-C_1, car ceci est la premire mesure du couplet qui par la suite s'adaptera au pont (B) et au refrain (C). Prenez garde, pourquoi ne pas simplement ajouter 2 autres croix la suite de ce motif ? Parce que dans la premire mesure il y a un coup de cymbale crash qui fini l'intro prcdente, donc les deux mesures ne sont pas compltement quivalentes; vous devez donc copier le motif A-B-C_1 et le renommer en A-B-C_2 puis couper ce susdit coup de crash.

    Faire la mme chose pour les 2 mesures suivantes : copiez simplement dans l'diteur de motif le motif de la fig. 2, renommez le comme les deux prcdents et ajoutez 2 croix (les deux mesures tant les mmes), vous devriez donc atteindre le nombre '8' comme indiqu sur la fig. 4.

    Les 4 mesures restantes du couplet sont plus ou moins les mmes que ce que vous venez d'crire, alors pourquoi devriez vous tout refaire de zro ? Les mesures 5,6,7 sont identiques aux prcdentes ainsi vous avez juste ajouter 2 croix au motif A-B-C_2 et une A-B-C_3+4en prenant soin de renommer les motifs logiquement (pour comprendre par la suite comment le morceau se droule dans l'diteur de morceau), car la huitime mesure se termine par un remplissage qui clture le couplet. Vous devez copier/coller dans une nouvelle ligne un motif dj cr (ex. A-B-C_3+4, le renommer en A-B-C_8 et le modifier comme sur la Fig. 4. Notez que dont les trois caisses claires Jazz de la quatrime mesure ont une intensit respective rgle [ 0.10 ], [ 0.20 ] et [ 0.78 ]; vous ne pouvez pas le voir sur l'image mais les deux notes finales du tom mdium Tom Mid) ont une intensit de [0.50], aprs tout ce n'est qu'un tout petit remplissage, autant ne pas exploser les peaux des toms :)

    Fig. 4 Huitime mesure du premier couplet.

    Le rsultat dans l'diteur de chanson devrait ressembler la Fig. 5.

    Fig. 5 Introduction et premier couplet dans l'diteur de morceau.

    ATTENTION! si vous atteignez ce point sans avoir sauvegard votre travail, il est temps de le faire MIANTENANT. Un simple [CTRL+S] suivi du nom du morceau, et vous serez bien. Si vous voulez ajouter des infos, cliquez avec le bouton gauche sur le bouton 'S' de l'diteur de morceau et modifiez les champs comme vous le voulez : ces infos seront affiches lors de l'ouverture du projet.

    3.Le pont et la suite

    Maintenant que vous avez ralis le premier couplet vous devriez avoir une ide du mode de fonctionnement global de ce morceau : le premier pont est fait des mmes 8 mesures (4+4) avec un lger changement la fin de la quatrime, ce qui nous oblige crer une mesure spciale alors que les autres seront tout simplement ajoutes l'aide de notre gniale petite croix ('X').

    Utilisons le dernier motif cr comme un chantillon (A-B-C_8), puis copiez le et renommez le en Bridge1_4 (c'est dire quatrime mesure du premier pont) et modifiez le comme sur la Fig. 6. Nous avons rapidement termin le pont ! L'diteur de morceau devrait ressembler la fig. 7. En regardant attentivement l'illustration on pourrait se demander pourquoi la cinquime mesure du pont (la 17me du morceau) n'est pas assigne au motif A-B-C_1; la rponse est que le motif a galement un coup de crash final qui n'est pas prsent dans A-B-C_2+5+6.

    Fig. 6 Quatrime mesure du pont.

    Fig. 7 L'diteur de morceau avec le premier pont.

    Maintenant vous pouvez crer rapidement les parties restantes du morceau : aprs le pont il y a un autre couplet, puis un pont et un refrain, qui sont la plupart du temps identiques, vous devrez simplement crer des motifs diffrents dans quelques cas (plus loin dans ce guide, vous trouverez le fichier du morceai avec la chanson entire). Naturellement, vous pouvez crire autant de lignes dans l'diteur de morceau que de mesures dans le morceau, mais un morceau complet risquerait d'tre difficile suivre, et il prendrait beaucoup de place.

    4.Le Riff

    Vers le milieu du morceau il y a deux riffs : ils sont tous deux composs de 2 mesures mais en fait le motif est toujours le mme, et seul les autres instruments jouent quelque chose que nous verrons dans le dernier riff de ce morceau (o la batterie joue elle aussi le motif du riff).

    Dans ce riff la batterie joue le mme motif que nous connaissons dj pendant une mesure (voir Fig. 1) puis une nouvelle mesure de deux notes seulement (fig. 8), puis le motif de base nouveau, puis encore les deux mmes notes avec un petit fill la fin (Fig. 9) ; encore une ouverture charleston avec des notes d'intensit diffrente : [0.78] et [0.20].

    Fig. 8 Deuxime mesure du riff.

    Fig. 9 Quatrime mesure du riff.

    5.La deuxime moiti du morceau

    Aprs le riff nous avons fait la moiti du travail. Nous n'avons plus qu' crer deux couplets, un pont, un refrain qui sera rpt 3 fois et un autre riff la fin.

    La seconde partie du morceau est lgrement diffrente de la prcdente car il y a quelques ouvertures de charleston pendant les couplets et, toutes les quatres mesures, un petit fill presque chaque fois : c'est plus facile de dmarrer zro un nouvel enchainement de motif (c'est dire : A-B-C-* dans l'diteur de morceau en leur ajoutant un suffixe du style '_hh' pour rappeler la prsence de l'ouverture de charleston. Comme nous l'avons vu dans l'introduction de ce tutoriel, Jeff Porcaro met beaucoup de sa personalit dans son jeu, ce qui fait la reproduction froide et exacte d'une partition (ce que fait Hydrogen). Les parties suivantes du morceau seront donc plus ou moins fidles au morceau original, mais une autre 'oreille' pourrait donner une autre criture de la mme partie. Aprs tout, on s'en fiche : ce tutoriel explique comment utiliser Hydrogen, pas comment joue Porcaro :)

    La fig. 10 montre l'cran de l'diteur de morceau plac sur les deux couplets et le pont qui suivent le premier riff ; comme vous pouvez le voir, les premires mesures (48-50 au niveau de la numrotation de l'diteur de morceau) n'ont pas t modifies alors que les autres (51-71) ont t r-crites. De plus, il y a plusieurs motifs 'ad hoc' identifies commeA-B-C-3a_hh (Fig. 11 pour voir un exemple) et A-B-C- 4a_hh qui contiennent quelques changements que nous n'avons jamais crits jusqu' prsent.

    Fig. 10 Troisime et quatrime mesure dans l'diteur de morceau.

    Fig. 11 Septime mesure du troisime pont.

    Aprs le troisime pont, il y a un refrain : la premire fois, le clap baguettes est utilis la place de la caisse Jazz et la grosse caisse n'est pas joue (mme si on pourrait croire entendre le contraire parce que la basse joue, si on veut rendre cet effet, on peut mettre un coup de grosse caisse [0.50]), tandis que la deuxime et troisime fois que le refrain joue, il y a quelques mesures diffrentes, comme le montre l'appellation C3 _ *. Dans la Fig. 12, le motif C3_6+7 & C4_3 (lgrement diffrent ...) qui reprsente les sixime et septime mesures du troisime refrain ET la troisime mesure du quatrime chorus : si vous pensez que c'est confu, cherchez votre propre mthode :-)

    Fig. 12 Motif C3_6+7 & C4_3.

    6.Le riff final

    La fin de la chanson rpte un riff quelque peu diffrent de celui que nous avons dja rencontr : les deux premires mesures sont identiques (c'est dire, le motif + 2 notes), tandis que dans la troisime mesure, la batterie joue le mme rythme que les autres instruments (fig. 13) pour enfin terminer comme d'habitude.

    Fig. 13 Le riff final.

    Et voila, c'est termin. Le but de ce petit tutoriel tait de vous donner une vue d'ensemble rapide des fonctions les plus courantes d'Hydrogen : ce morceau de logiciel peut galement tre utilis dans d'autres optiques, comme un 'clic' avanc jou avec une batterie, ou pour boucler sur une partie d'un morcreau difficile chopper; cependant, dans tous les cas, analyser le morceau lui-mme aide sa comprhension et ici aussi, Hydrogen peut tre utile pour rduire le temps ncessaire pour crire un rythme et le jouer.

    Pour des commentaires, des suggestions, des corrections, vous pouvez utiliser sur les mailing lists d'Hydrogen (hydrogen.sf.net)

    hydrogen-0.9.6-beta3/data/doc/tutorial_fr.po000066400000000000000000001051561211146647700207320ustar00rootroot00000000000000msgid "" msgstr "" "POT-Creation-Date: 2009-04-09 22:14-0500\n" "PO-Revision-Date: 2010-10-23 20:13+0100\n" "Last-Translator: Olivier HUMBERT \n" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:73(None) msgid "@@image: 'img_tutorial/PatternBase1.png'; md5=b29ca465510b455a384e01069b994fe7" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:86(None) msgid "@@image: 'img_tutorial/PatternBase2.png'; md5=563b824313dbfec5a7a758c33fe4f4bc" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:118(None) msgid "@@image: 'img_tutorial/Intro4th.png'; md5=e30c9452bd46ddcf50f73b882625a02c" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:139(None) msgid "@@image: 'img_tutorial/Verse8th.png'; md5=0c259a57f24d12fa4fb95209e2d4e00f" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:154(None) msgid "@@image: 'img_tutorial/VerseAll.png'; md5=cac72dce1d6f0c72b717b9aa632df9ac" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:177(None) msgid "@@image: 'img_tutorial/Bridge1_4th.png'; md5=dcb1ea6550a88b9b84bc4c2f8e4e2dd8" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:190(None) msgid "@@image: 'img_tutorial/VerseBridge.png'; md5=26e68ef8504c3d44cc72dabae9f595d3" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:213(None) msgid "@@image: 'img_tutorial/Riff1b.png'; md5=5bc07a79ee5abd6a675389f3714fa5ed" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:225(None) msgid "@@image: 'img_tutorial/Riff1c.png'; md5=5a79773a26f39e67d7d9edcbea262bd5" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:247(None) msgid "@@image: 'img_tutorial/VerseBridge_hh.png'; md5=8e8e42932a729232c0499f2517c028e2" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:260(None) msgid "@@image: 'img_tutorial/Bridge3_3a_hh.png'; md5=36695f590e102a05c7ddac079c8815f1" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:275(None) msgid "@@image: 'img_tutorial/C3_6+7.png'; md5=c6b445d0ced92d63b4749174951b8467" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:294(None) msgid "@@image: 'img_tutorial/Riff1d.png'; md5=bc6d918be1a3413c697a410de2b5df6b" msgstr "" #: tutorial.docbook:7(title) msgid "Hydrogen Tutorial" msgstr "Tutoriel de Hydrogen" #: tutorial.docbook:10(firstname) msgid "Antonio" msgstr "" #: tutorial.docbook:11(surname) msgid "Piraino" msgstr "" #: tutorial.docbook:15(date) msgid "24/feb/2004" msgstr "" #: tutorial.docbook:18(para) msgid "Ok, you've just downloaded the latest version of Hydrogen and have it installed successfully. Now you want to test it while creating your favourite song, this might help you to learn it, writing down a few difficult parts in order to play them over and over again or to be sure that in future a quick glance at the songfile will bring up immediately to mind the song. Hydrogen can be used also as an advanced click machine that can help you practicing (in speed, precision and rudiments), maybe with a custom pattern designed by yourself. This short introduction will guide you creating a a complete song, we will work on \"Georgy Porgy\" of Toto which has a quite straight structure therefore is appropriate for a guide but this doenst mean the song is _actually_ easy to write down since the drummer (Jeff Porcaro) enriches the groove with his personal touch and fantasy; Hydrogen will not play better than the drummer who is working on the song, most of the task must be accomplished by the programmer's sensibility and experience." msgstr "Vous venez de télécharger la dernière version du logiciel Hydrogen et l'installation s'est bien déroulée. Maintenant vous voulez l'essayer et recréer votre chanson favorite. Ceci pourrait en effet vous aider à apprendre à écrire les parties les plus difficiles, pour pouvoir les écouter plusieurs fois ou être sur que vous pouvez, d'un coup d'oeil rapide dans le fichier du morceau, vous le remémorer immédiatement. Hydrogen peut être utilisé comme une \"boîte à rythme\" avancée qui peut vous aider dans votre pratique musicale (dans la vitesse, la précision et autres bases), peut être avec un motif défini par vos soins. Cette petite introduction vous guidera dans la création d'une chanson complète. Nous travaillerons sur le morceau \"Georgy Porgy\" de Toto (désolé) qui a une structure assez directe, ce qui le rend approprié pour ce guide, mais cela ne veut pas dire que le morceau est _vraiment_ facile à écrire vu que le batteur, Jeff Porcaro, enrichit le groove avec son touché personnel et son feeling. Hydrogen ne jouera pas mieux que le batteur, la majeure partie de la tâche doit être accomplie par la sensibilité et l'expérience du programmeur." #: tutorial.docbook:24(title) msgid "Move on" msgstr "En avant" #: tutorial.docbook:25(para) msgid "Before starting make sure you have a few things:" msgstr "Avant de commencer assurez vous d'avoir ces différentes choses :" #: tutorial.docbook:28(para) msgid "The song to study on: either an audio-cd or (better) an .ogg or .mp3 for optimal flexibility." msgstr "Le morceau étudié : sur CD audio, ou, mieux, au format .wav, .ogg ou .mp3 pour une flexibilité optimale." #: tutorial.docbook:29(para) msgid "Optionally a rough layout of the song on paper: it may be useful to count bars and different parts of the song that eventually wii get into Hydrogen." msgstr "Eventuellement la partition de batterie ou un schéma approximatif de la structure de la chanson : il peut être utile de compter les mesures et de viualiser les différentes parties du morceau." #: tutorial.docbook:32(para) msgid "The song we will work on has the following structure:" msgstr "La chanson que nous travaillons possède la structure suivante :" #: tutorial.docbook:35(para) msgid "Intro: 4 bars" msgstr "Intro : 4 mesures" #: tutorial.docbook:36(para) #: tutorial.docbook:38(para) msgid "Verse: 8 bars" msgstr "Couplet : 8 mesures" #: tutorial.docbook:37(para) #: tutorial.docbook:39(para) #: tutorial.docbook:44(para) msgid "Bridge: 8 bars" msgstr "Pont : 8 mesures" #: tutorial.docbook:40(para) #: tutorial.docbook:45(para) #: tutorial.docbook:46(para) #: tutorial.docbook:47(para) msgid "Chorus: 8 bars" msgstr "Refrain : 8 mesures" #: tutorial.docbook:41(para) msgid "Riff: 4 bars" msgstr "Riff : 4 mesures" #: tutorial.docbook:42(para) msgid "Verse (with guitar): 8 bars" msgstr "Couplet (avec guitare) : 8 mesures" #: tutorial.docbook:43(para) msgid "Verse (with voice): 8 bars" msgstr "Couplet (avec voix) : 8 mesures" #: tutorial.docbook:48(para) msgid "Final Riff: 4 bars" msgstr "Riff final : 4 mesures" #: tutorial.docbook:51(para) msgid "Looking at this scheme we can see that some pattern repeats, so we'll use this symbols in Hydrogen's Song Editor:" msgstr "En regardant cet arrangement nous pouvons voir que quelques motifs se répétent, nous emploierons donc cette légende avec Hydrogen :" #: tutorial.docbook:54(para) msgid "Verse -> A" msgstr "Couplet -> A" #: tutorial.docbook:55(para) msgid "Bridge -> B" msgstr "Pont -> B" #: tutorial.docbook:56(para) msgid "Chorus -> C" msgstr "Refrain -> C" #: tutorial.docbook:58(para) msgid "And to save up words on explainations we'll use two common TLA (Three Letters Acronym ^_^):" msgstr "Et pour sauver les mots explicatifs, nou utiliserons les TLA communs (Trois Lettres Acronymes ^_^):" #: tutorial.docbook:60(para) msgid "LMB: left mouse button" msgstr "LMB: left mouse button (boutons gauche de la souris)" #: tutorial.docbook:61(para) msgid "RMB: right mouse button" msgstr "RMB: right mouse button (bouton droit de la souris)" #: tutorial.docbook:64(para) msgid "Well, now unplug your phone and launch Hydrogen from the shell: let's get to work!" msgstr "Bien, maintenant débranchez votre téléphone et lancez Hydrogen : au travail !" #: tutorial.docbook:67(title) msgid "Intro" msgstr "Introduction" #: tutorial.docbook:68(para) msgid "The base pattern (Fig. 1 and 2) is 4 bars long (divided in 2 different bars, each repeated 2 times, so it's [2a*2]+[2b*2]) and lasts for the whole song, from the beginning to the end, riff included; most of the time (intro and riff excluded) this base pattern is repeated 2 times to reach the commonly used 8 bars for each part of the song (A,B,C). Before starting let's set the speed to 98bpm (HINT HINT you can find out by yourself the speed of the song while playing it with your favourite media player and following the rhythm by clicking repeatedly the backslash key in Hydrogen) and from the menu Grid Resolution let's set '16'. To create a new pattern select the instrument Closed HH, click on RMB and choose Fill Notes: the first two bars will be filled up. Then insert manually the beats on Snare Jazz and Kick as indicated in the 2 pictures below and there we have the base pattern for our song. Note how the beats on the hi-hat have different 'hardness': beats falling on the beginning of the bar are set at [0.78], the others at [0.50] (you can check that on the lower stat bar of Hydrogen), in order to give groove the song." msgstr "Le motif de base (Fig. 1 and 2) se compose de 4 mesures (divisé en 2 mesures différentes, chacune répétée 2 fois, donc [2a*2]+[2b*2]) et dure la chanson entière, du début à la fin, riff inclus ; la plupart du temps (intro et riff exclus) ce motif de base est répété 2 fois pour arriver à une structure classique de 8 mesures pour chaque partie du morceau (A,B,C). Avant de commencer, plaçez la vitesse à 98bpm (Remarque : vous pouvez trouver la vitesse (en Bpm) du morceau par vous même en la jouant avec votre lecteur préféré, XMMS, et en tapant le rythme avec la touche antislash dans Hydrogen). À partir du menu \"Résolution de la grille\" choisissez '16'. Pour créer un nouveau motif, cliquez droit sur l'instrument \"Closed HH\" et choisissez \"Fill Notes\": les deux premières mesures seront remplies. Insérez alors manuellement les notes de la caisse claire Jazz (\"Snare Jazz\") et de la grosse caisse (\"Kick\") comme indiqué sur les 2 images ci-dessous. Nous avons le motif de base pour notre morceau. Notez comment les coups de charleston sont accentués de manières différentes : ceux qui tombent sur les temps (au début d'une mesure) ont une intensité de [0,78 ], les autres de [0.50] (vous pouvez vérifier cela sur la barre de statut inférieure d'Hydrogen), afin de donner du groove au morceau." #: tutorial.docbook:76(para) msgid "Fig. 1 Base pattern, first bar." msgstr "Fig. 1 Motif de base, première mesure." #: tutorial.docbook:89(para) msgid "Fig. 2 Base pattern, second bar." msgstr "Fig. 2 Motif de base, seconde mesure." #: tutorial.docbook:96(para) msgid "Before we start writing down verses there are 4 intro bars, all equals to each other, except for the last one which at the end has an open hi-hat. We should do then:" msgstr "Avant que nous commencions à écrire les couplets, il y a 4 mesures d'intro, toutes identiques, excepté pour la dernière, à la fin de laquelle il y a un coup de charleston ouvert . Faites ce qui suit :" #: tutorial.docbook:99(para) msgid "Rename the first pattern in the Song Editor with RMB click on the name Empty Pattern and change it to intro_a, for example." msgstr "Renommez le premier motif dans l'éditeur de morceau en cliquant avec le bouton droit de la souris surEmpty Pattern. Changez le, par exemple, en intro_a." #: tutorial.docbook:100(para) msgid "Add two 'X' near the first one (which represent the second and the third bar)" msgstr "Ajoutez 2 'X' près du premier (qui représente les deuxième et troisième mesures)" #: tutorial.docbook:101(para) msgid "Create in Pattern Editor the base pattern (Fig. 1)" msgstr "Créez dans l'éditeur de motif le motif de base (Fig. 1)" #: tutorial.docbook:105(para) msgid "For the fourth bar we'll instead open the hi-hat (Fig. 3):" msgstr "Pour la quatrième mesure, nous allons remplacer par une ouverture de charleston (Fig. 3) :" #: tutorial.docbook:108(para) msgid "RMB in Song Editor on the newly created pattern, choose copy, then choose a name (ex. intro_b) and automagically you will have a new one right under." msgstr "Cliquez droit dans l'éditeur de morceau sur le motif nouvellement créé, sélectionnez copier, puis choisissez un nom (ex.intro_b) et un nouveau motif apparait en dessous automagiquement !" #: tutorial.docbook:109(para) msgid "Select the pattern you've just created (IMPORTANT!)" msgstr "Sélectionnez le motif que vous venez de créer (IMPORTANT !)" #: tutorial.docbook:110(para) msgid "Delete the last 2 beats of Closed HH and move them on Open HH." msgstr "Effacez les 2 dernières notes de charleston fermé et remplacer par des charleston ouverts." #: tutorial.docbook:111(para) msgid "Select '32' from Grid Resolution and add another 2 beats right near the previous ones." msgstr "Sélectionnez '32' depuis \"Résolution de la grille\" et ajoutez 2 nouvelles notes juste à coté des précédentes." #: tutorial.docbook:112(para) msgid "Adjust the hardness of these 4 beats so that the first is [0.78] while the other 3 [0.20] to simulate a longer opening." msgstr "Ajustez l'intensité de ces 4 notes de sorte que le premier soit à [0.78] et que les 3 autres soient à [0.20] pour simuler une ouverture plus longue." #: tutorial.docbook:121(para) msgid "Fig. 3 Intro detail, fourth bar." msgstr "Fig. 3 Détail de l'intro, quatrième mesure." #: tutorial.docbook:130(title) msgid "First verse" msgstr "Premier Couplet" #: tutorial.docbook:131(para) msgid "Since we have written the base pattern, now we should already know the basis. To create the first verse we just have to copy from the Song Editor the pattern intro_a and rename, say, to A-B-C_1, because it is the first bar of the verse that eventually will also fit for the bridge (B) and the chorus (C). Pay attention, why can't we just add 2 more 'X' next to this pattern? Because in the first bar there is a Crash beat which ends the previous intro, therefore the two bars are not completely equal; you have to copy the pattern A-B-C_1 and rename it to A-B-C_2, cutting the Crash beat cited before." msgstr "Nous venons de créer le motif de base, maintenant, nous devrions donc connaître ... les bases ! Pour créer le premier couplet, il suffit de copier dans l'éditeur de motif le motif intro_a et de le renommer en A-B-C_1, car ceci est la première mesure du couplet qui par la suite s'adaptera au pont (B) et au refrain (C). Prenez garde, pourquoi ne pas simplement ajouter 2 autres croix à la suite de ce motif ? Parce que dans la première mesure il y a un coup de cymbale crash qui fini l'intro précédente, donc les deux mesures ne sont pas complètement équivalentes; vous devez donc copier le motif A-B-C_1 et le renommer en A-B-C_2 puis couper ce susdit coup de crash." #: tutorial.docbook:133(para) msgid "Same thing for the following 2 bars: just copy into the Song Editor the pattern in Fig. 2, rename it according to the previous ones and add two 'X' (because they're identical), you should reach number '8' as shown in Fig. 4." msgstr "Faire la même chose pour les 2 mesures suivantes : copiez simplement dans l'éditeur de motif le motif de la fig. 2, renommez le comme les deux précédents et ajoutez 2 croix (les deux mesures étant les mêmes), vous devriez donc atteindre le nombre '8' comme indiqué sur la fig. 4." #: tutorial.docbook:134(para) msgid "The 4 remaining bars of the verse are more or less the same of what we've just written, so why redo everything from scratch? Bars number 5,6,7 are virtually identical to the previous ones so we just have to add 2 crosses to pattern A-B-C_2 and one to A-B-C_3+4 taking care of renaming the patterns logically (so to understand how the song moves around the Song Editor), while in the eighth bar there is a fill which closes the verse. We have to copy+paste in a new line a pattern already written (ex. A-B-C_3+4), rename it to A-B-C_8 and modify it as in Fig. 4. Note how in this case too the three Snare Jazz beats on fourth bar have hardness properly tuned with [0.10], [0.20] and [0.78]; you can't see it in the picture but also the two final beats of Tom Mid are both 'touched' to [0.50], after all it's only just a small fill, better not beat hard on the drums :)" msgstr "Les 4 mesures restantes du couplet sont plus ou moins les mêmes que ce que vous venez d'écrire, alors pourquoi devriez vous tout refaire de zéro ? Les mesures 5,6,7 sont identiques aux précédentes ainsi vous avez juste à ajouter 2 croix au motif A-B-C_2 et une à A-B-C_3+4en prenant soin de renommer les motifs logiquement (pour comprendre par la suite comment le morceau se déroule dans l'éditeur de morceau), car la huitième mesure se termine par un remplissage qui clôture le couplet. Vous devez copier/coller dans une nouvelle ligne un motif déjà créé (ex. A-B-C_3+4, le renommer en A-B-C_8 et le modifier comme sur la Fig. 4. Notez que dont les trois caisses claires Jazz de la quatrième mesure ont une intensité respective réglée à [ 0.10 ], [ 0.20 ] et [ 0.78 ]; vous ne pouvez pas le voir sur l'image mais les deux notes finales du tom médium Tom Mid) ont une intensité de [0.50], après tout ce n'est qu'un tout petit remplissage, autant ne pas exploser les peaux des toms :)" #: tutorial.docbook:142(para) msgid "Fig. 4 Eighth bar of the first verse." msgstr "Fig. 4 Huitième mesure du premier couplet." #: tutorial.docbook:149(para) msgid "The result in the Song Editor should be something like Fig. 5." msgstr "Le résultat dans l'éditeur de chanson devrait ressembler à la Fig. 5." #: tutorial.docbook:157(para) msgid "Fig. 5 Intro and first verse in the Song Editor." msgstr "Fig. 5 Introduction et premier couplet dans l'éditeur de morceau." #: tutorial.docbook:164(para) msgid "WARNING! if you reached this point without saving your work, NOW is the good time to do that. A simple [CTRL+S] followed by the name of the songfile and you'll be ok. If you want to add some more infos, LMB on 'S' button of the Song Editor and change the fields as you like: these infos will be shown upon opening of the file." msgstr "ATTENTION! si vous atteignez ce point sans avoir sauvegardé votre travail, il est temps de le faire MIANTENANT. Un simple [CTRL+S] suivi du nom du morceau, et vous serez bien. Si vous voulez ajouter des infos, cliquez avec le bouton gauche sur le bouton 'S' de l'éditeur de morceau et modifiez les champs comme vous le voulez : ces infos seront affichées lors de l'ouverture du projet." #: tutorial.docbook:169(title) msgid "Bridge and following" msgstr "Le pont et la suite" #: tutorial.docbook:170(para) msgid "Now that we're done with the first verse you should have an idea of how the whole thing works: the first bridge is made of the same 8 bars (4+4) with a slight change at the end of the fourth, which forces us to create a 'custom' fourth bar while the others are easily added with our friendly little cross ('X')." msgstr "Maintenant que vous avez réalisé le premier couplet vous devriez avoir une idée du mode de fonctionnement global de ce morceau : le premier pont est fait des mêmes 8 mesures (4+4) avec un léger changement à la fin de la quatrième, ce qui nous oblige à créer une mesure spéciale alors que les autres seront tout simplement ajoutées à l'aide de notre géniale petite croix ('X')." #: tutorial.docbook:172(para) msgid "Let's take the latest pattern created as sample (A-B-C_8), let's copy and rename it to Bridge1_4 (i.e. fourth bar of first bridge) and modify it as in Fig. 6. We have quickly completed the bridge! The Song Editor now should appear as follows in Fig. 7. Looking closely one should ask why the fifth bar of the bridge (17th bar of the whole song) isnt assigned to the pattern A-B-C_1; the answer is that the pattern has also a Crash which is not present in A-B-C_2+5+6." msgstr "Utilisons le dernier motif créé comme un échantillon (A-B-C_8), puis copiez le et renommez le en Bridge1_4 (c'est à dire quatrième mesure du premier pont) et modifiez le comme sur la Fig. 6. Nous avons rapidement terminé le pont ! L'éditeur de morceau devrait ressembler à la fig. 7. En regardant attentivement l'illustration on pourrait se demander pourquoi la cinquième mesure du pont (la 17ème du morceau) n'est pas assignée au motif A-B-C_1; la réponse est que le motif a également un coup de crash final qui n'est pas présent dans A-B-C_2+5+6." #: tutorial.docbook:180(para) msgid "Fig. 6 Fourth bar of the first bridge." msgstr "Fig. 6 Quatrième mesure du pont." #: tutorial.docbook:193(para) msgid "Fig. 7 The Song Editor with the first bridge." msgstr "Fig. 7 L'éditeur de morceau avec le premier pont." #: tutorial.docbook:200(para) msgid "Now we can build up quickly the remaining parts of the song: after this bridge there is another verse, then a bridge and a chorus, which are mostly the same so we just need to create different pattern in a few cases (along with this guide you will find the song file with the whole song). Of course one can write as many lines in the Song Editor as the bars in the song but a whole song would become difficult to follow, plus the songfile would be bigger." msgstr "Maintenant vous pouvez créer rapidement les parties restantes du morceau : après le pont il y a un autre couplet, puis un pont et un refrain, qui sont la plupart du temps identiques, vous devrez simplement créer des motifs différents dans quelques cas (plus loin dans ce guide, vous trouverez le fichier du morceai avec la chanson entière). Naturellement, vous pouvez écrire autant de lignes dans l'éditeur de morceau que de mesures dans le morceau, mais un morceau complet risquerait d'être difficile à suivre, et il prendrait beaucoup de place." #: tutorial.docbook:205(title) msgid "The Riff" msgstr "Le Riff" #: tutorial.docbook:206(para) msgid "Around half song there are two riffs: each one is 2 bars long but actually the pattern is the same, just the other instruments play something that we will see in the last riff of this song (where drums too play the pattern of the riff)." msgstr "Vers le milieu du morceau il y a deux riffs : ils sont tous deux composés de 2 mesures mais en fait le motif est toujours le même, et seul les autres instruments jouent quelque chose que nous verrons dans le dernier riff de ce morceau (où la batterie joue elle aussi le motif du riff)." #: tutorial.docbook:208(para) msgid "In this riff the drums play the same pattern we already know for one bar (see Fig. 1) while in the second bar only beats two times (Fig. 8), then the pattern again and then again two beats with a small final fill (Fig. 9); again the open hi-hat is done with beats of different intensity: [0.78] and [0.20]." msgstr "Dans ce riff la batterie joue le même motif que nous connaissons déjà pendant une mesure (voir Fig. 1) puis une nouvelle mesure de deux notes seulement (fig. 8), puis le motif de base à nouveau, puis encore les deux mêmes notes avec un petit fill à la fin (Fig. 9) ; encore une ouverture charleston avec des notes d'intensité différente : [0.78] et [0.20]." #: tutorial.docbook:216(para) msgid "Fig. 8 Second bar of the riff." msgstr "Fig. 8 Deuxième mesure du riff." #: tutorial.docbook:228(para) msgid "Fig. 9 Fourth bar of the riff." msgstr "Fig. 9 Quatrième mesure du riff." #: tutorial.docbook:237(title) msgid "The second half of the song" msgstr "La deuxième moitié du morceau" #: tutorial.docbook:238(para) msgid "After the riff we have half job done. We just have to write down two verses, one bridge, a chorus repeated 3 times and the same riff at the end." msgstr "Après le riff nous avons fait la moitié du travail. Nous n'avons plus qu'à créer deux couplets, un pont, un refrain qui sera répété 3 fois et un autre riff à la fin." #: tutorial.docbook:240(para) msgid "The second part of the song is slightly different from the previous one because we have a few hi-hat opening during the verses and every 4 bars there's a small fill almost everytime: it's easier to start from scratch a new set of pattern (i.e. A-B-C-*) in the Song Editor copying them with a suffix like '_hh' to show the presence of the Open HH. As noted in the introduction of this guide, Jeff Porcaro puts much of his skills playing the song and this makes the difference between a song played from a raw and \"cold\" transcription on paper (or on Hydrogen): therefore the following parts of the song will try to be faithful to the original piece, but another 'ear' could give another written layout of the same part: after all this doesnt matter so much since we are showing how a program works, not to play like Porcaro :)" msgstr "La seconde partie du morceau est lègèrement différente de la précédente car il y a quelques ouvertures de charleston pendant les couplets et, toutes les quatres mesures, un petit fill presque à chaque fois : c'est plus facile de démarrer à zéro un nouvel enchainement de motif (c'est à dire : A-B-C-* dans l'éditeur de morceau en leur ajoutant un suffixe du style '_hh' pour rappeler la présence de l'ouverture de charleston. Comme nous l'avons vu dans l'introduction de ce tutoriel, Jeff Porcaro met beaucoup de sa personalité dans son jeu, ce qui fait la reproduction froide et exacte d'une partition (ce que fait Hydrogen). Les parties suivantes du morceau seront donc plus ou moins fidèles au morceau original, mais une autre 'oreille' pourrait donner une autre écriture de la même partie. Après tout, on s'en fiche : ce tutoriel explique comment utiliser Hydrogen, pas comment joue Porcaro :)" #: tutorial.docbook:242(para) msgid "In Fig. 10 here is how is the section in the Song Editor of the two verses and the bridge following the first riff; as you can see the first bars (48-50 according to the Song Editor's enumeration) are already written before while the others (51-71) are new. Moreover there a few pattern 'ad hoc' identified by A-B-C-3a_hh (Fig. 11 to see an example) and A-B-C-4a_hh since both have a few changes not present in any pattern written up to now." msgstr "La fig. 10 montre l'écran de l'éditeur de morceau placé sur les deux couplets et le pont qui suivent le premier riff ; comme vous pouvez le voir, les premières mesures (48-50 au niveau de la numérotation de l'éditeur de morceau) n'ont pas été modifiées alors que les autres (51-71) ont été ré-écrites. De plus, il y a plusieurs motifs 'ad hoc' identifiées commeA-B-C-3a_hh (Fig. 11 pour voir un exemple) et A-B-C- 4a_hh qui contiennent quelques changements que nous n'avons jamais écrits jusqu'à présent." #: tutorial.docbook:250(para) msgid "Fig. 10 Third and fourth bars in the Song Editor." msgstr "Fig. 10 Troisième et quatrième mesure dans l'éditeur de morceau." #: tutorial.docbook:263(para) msgid "Fig. 11 Seventh bar of the third bridge." msgstr "Fig. 11 Septième mesure du troisième pont." #: tutorial.docbook:270(para) msgid "After the third bridge we repeat the chorus: the first time the Stick is used instead of the Snare Jazz and we don't play the Kick (even if it may sound the opposite since the bass guitar does play here, so we have put the same the kick beats softly at [0.50]), while the second and third time the chorus goes on there are a few bars different, as shown from patterns C3_*. In Fig. 12 the pattern C3_6+7 & C4_3 (slightly different ...) which criptycally identify the sixth and seventh bar of the third chorus AND the third bar of the fourth chorus: if you think this is confusing, you may find out your own method :-)" msgstr "Après le troisième pont, il y a un refrain : la première fois, le clap baguettes est utilisé à la place de la caisse Jazz et la grosse caisse n'est pas jouée (même si on pourrait croire entendre le contraire parce que la basse joue, si on veut rendre cet effet, on peut mettre un coup de grosse caisse à [0.50]), tandis que la deuxième et troisième fois que le refrain joue, il y a quelques mesures diffèrentes, comme le montre l'appellation C3 _ *. Dans la Fig. 12, le motif C3_6+7 & C4_3 (légérement différent ...) qui représente les sixième et septième mesures du troisième refrain ET la troisième mesure du quatrième chorus : si vous pensez que c'est confu, cherchez votre propre méthode :-)" #: tutorial.docbook:278(para) msgid "Fig. 12 Pattern C3_6+7 & C4_3." msgstr "Fig. 12 Motif C3_6+7 & C4_3." #: tutorial.docbook:288(title) msgid "The Final riff" msgstr "Le riff final" #: tutorial.docbook:289(para) msgid "The song ends repeating a slightly different riff we have met before: the first 2 bars are the same (i.e. pattern + 2 beats), while the in third bar the drum plays actually with the other instruments (Fig. 13) to finally end as always." msgstr "La fin de la chanson répéte un riff quelque peu différent de celui que nous avons déja rencontré : les deux premières mesures sont identiques (c'est à dire, le motif + 2 notes), tandis que dans la troisième mesure, la batterie joue le même rythme que les autres instruments (fig. 13) pour enfin terminer comme d'habitude." #: tutorial.docbook:297(para) msgid "Fig. 13 The final riff." msgstr "Fig. 13 Le riff final." #: tutorial.docbook:304(para) msgid "And this is the end. The goal of this little tutorial is giving a quick overview of the most common functions of Hydrogen: this piece of software can also run for other purposes, like an advanced 'click' played with the drum, or to loop playing some part of a song difficult to catch; however, as in other things, analyzing the song itself helps the comprehension and here too, Hydrogen can be helpful reducing the time needed to write down a pattern and tune it." msgstr "Et voila, c'est terminé. Le but de ce petit tutoriel était de vous donner une vue d'ensemble rapide des fonctions les plus courantes d'Hydrogen : ce morceau de logiciel peut également être utilisé dans d'autres optiques, comme un 'clic' avancé joué avec une batterie, ou pour boucler sur une partie d'un morcreau difficile à chopper; cependant, dans tous les cas, analyser le morceau lui-même aide à sa compréhension et ici aussi, Hydrogen peut être utile pour réduire le temps nécessaire pour écrire un rythme et le jouer." #: tutorial.docbook:306(para) msgid "For comments, suggestions, corrections, you can use the Hydrogen mailing lists (hydrogen.sf.net)" msgstr "Pour des commentaires, des suggestions, des corrections, vous pouvez utiliser sur les mailing lists d'Hydrogen (hydrogen.sf.net)" #. Put one translator per line, in the form of NAME , YEAR1, YEAR2. #: tutorial.docbook:0(None) msgid "translator-credits" msgstr "" #~ msgid "Antonio Piraino" #~ msgstr "Antonio Piraino" #~ msgid "ROLES_OF_TRANSLATORS" #~ msgstr "" #~ msgid "CREDIT_FOR_TRANSLATORS" #~ msgstr "" hydrogen-0.9.6-beta3/data/doc/tutorial_it.html000066400000000000000000000611101211146647700212540ustar00rootroot00000000000000Hydrogen Tutorial

    Hydrogen Tutorial

    Antonio Piraino

    Sommario

    Ok, avete scaricato l'ultima versione di Hydrogen e l'avete installata con successo. Ora volete provare a usare il programma per ricreare la vostra canzone preferita, questo puo' essere utile per aiutarvi ad impararla, mettendo nero su bianco alcuni passaggi difficili per poterli ripetere fino all'esaurimento o per assicurarvi che in un futuro un'occhiata al file vi aiuti a ricordare velocemente come suonare quella canzone. Hydrogen puo' anche essere usato semplicemente come un click evoluto che, insieme a un pattern di base (che vi potete create a parte), vi aiuti a prendere pratica con la batteria (velocita', precisione ma anche studio dei rudimenti). Questo tutorial rappresenta quindi un compendio al manuale e cerchera' di guidare l'utente di Hydrogen nella creazione di un canzone completa partendo da zero e l'uso del programma per altri scopi: in questa sede verra' analizzata la canzone "Georgy Porgy" dei Toto che e' abbastanza lineare come struttura e quindi piu' adatta per una guida. Questo comunque non significa che sia una canzone _facile_ da riprendere fedelmente poiche' il batterista (il grande Jeff Porcaro) arricchisce il groove con una miriade di aggiunte personali e con un 'tocco' senza paragoni. Dal momento che Hydrogen non suonera' meglio del batterista che alla tastiera gli passa le istruzioni, e' evidente che parte del lavoro va fatto dalla persona stessa, guidato dalla propria sensibilita' ed esperienza tecnica.


    Capitolo1.Si comincia

    Prima di iniziare la stesura della canzone assicuratevi di avere alcuni strumenti necessari:

    • La canzone da studiare: puo' andar bene un cd-audio ma sarebbe preferibile scaricarla sul PC in formato .ogg o .mp3 per una maggior flessibilita'.

    • Opzionalmente anche uno spartito di batteria oppure mettere su carta una struttura di massima per quella canzone: puo' far comodo controllare il numero delle battute o le varie parti del pezzo musicale che si inseriranno in Hydrogen.

    La canzone in esame ha la seguente struttura:

    • Intro: 4 battute

    • Strofa: 8 battute

    • Bridge: 8 battute

    • Strofa: 8 battute

    • Bridge: 8 battute

    • Ritornello: 8 battute

    • Riff: 4 battute

    • Strofa (con chitarra): 8 battute

    • Strofa (con voce): 8 battute

    • Bridge: 8 battute

    • Ritornello: 8 battute

    • Ritornello: 8 battute

    • Ritornello: 8 battute

    • Riff finale: 4 battute

    Da questo schema si evidenzia come alcuni pattern si ripetono nella canzone quindi useremo questa legenda, tornera' comodo con Hydrogen:

    • Verse -> A

    • Bridge -> B

    • Chorus -> C

    E per accorciare le spiegazioni useremo anche questi due classici TLA (Three Letters Acronym ^_^):

    • LMB: left mouse button

    • RMB: right mouse button

    Bene, adesso staccate il telefono e lanciate Hydrogen dalla shell: e' il momento di mettersi al lavoro!

    1.Intro

    Il pattern base (Fig. 1 e 2) e' di 4 battute (suddivise in 2 battute differenti ciascuna ripetuta per due volte, quindi [2a*2]+[2b*2]), e dura per tutto il pezzo, dall'inizio alla fine, riff inclusi; nella maggior parte dei casi (escluso l'intro e i riff) questo pattern base viene ripetuto 2 volte per arrivare alle classiche 8 battute per ciascuna parte (A,B,C) del brano. Prima di tutto pero' due piccole operazioni preliminari: settate la velocita' a 98 bpm (SUGGERIMENTO: potete scoprire da voi la velocita' della canzone mettendola in esecuzione col vostro player preferito e tenendo il tempo col tasto backslash di Hydrogen) e dal menu Grid Resolution selezionate '16'. Per creare il pattern selezionate lo strumento Closed HH, click su RMB e scegliete Fill Notes: le due battute correntemente visualizzate saranno riempite di sedicesimi, voila'! Inserite poi a mano i colpi di rullante e di cassa come indicato nelle due figure sottostanti e abbiamo ottenuto il ritmo base per la nostra canzone. Notare come i colpi sul charleston siano accentati in maniera differenziata: i colpi che cascano sui quarti hanno un'intensita' di [0.78], gli altri di [0.50] (visualizzata nella barra di stato in fondo alla schermata del programma), in maniera da vivacizzare la resa globale del pezzo.

    Fig. 1 Il pattern base, prima battuta.

    Fig. 2 Il pattern base, seconda battuta.

    Prima di cominciare la stesura delle strofe ci sono le 4 battute di intro, tutte uguali, eccezion fatta per la quarta che in fondo ha l'apertura del charleston. La procedura quindi e':

    • Rinominare il primo pattern nel Song Editor con clic di RMB sul nome Empty Pattern sostituendolo, per esempio, con intro_a.

    • Aggiungere altre due crocette accanto alla prima (che rappresentano rispettivamente la seconda e la terza battuta)

    • Create nel Pattern Editor il pattern base (Fig. 1)

    Per la quarta battuta invece c'e' da aggiungere l'apertura del charleston; si puo' procedere cosi' (Fig. 3):

    • Click di RMB Nel Song Editor sul pattern appena creato, scegliere copy, scegliere un nome (es. intro_b) e automaticamente ne verra' creato uno gemello proprio sotto.

    • Selezionare il nuovo pattern creato (IMPORTANTE!)

    • Cancellare gli ultimi due sedicesimi del Closed HH e riportarli sul Open HH.

    • Selezionare '32' dalla Grid Resolution e aggiungere altri due colpi a fianco dei sedicesimi gia' esistenti.

    • Aggiustate l'intensita' in maniera che il primo dei 4 trendaduesimi sia [0.78] mentre gli altri 3 siano [0.20] per simulare un'apertura piu' lunga.

    Fig. 3 Dettaglio dell'intro, quarta battuta.

    2.Prima strofa

    Abbiamo gia' visto come creare il pattern base, dunque per cominciare la stesura della prima strofa basta copiare dal Song Editor il pattern intro_a e rinominarlo, per esempio A-B-C_1, poiche' rappresenta la prima battuta della strofa che poi andra' bene anche per il bridge (B) e il ritornello (C). Attenzione, perche' non aggiungere due crocette consecutive in corrispondenza di questo pattern appena creato? Poiche' nella prima battuta c'e' un colpo di Crash che conclude l'intro precedente, il risultato e' che le prime due battute non sono completamente identiche. Per aggiungere la seconda battuta si deve quindi copiare il pattern A-B-C_1 e rinominarlo A-B-C_2, togliendo poi il colpo di Crash citato prima.

    Alla stessa maniera per ottenere le 2 battute seguenti e' sufficiente copiare nel Song Editor il pattern in Fig. 2, rinominarlo secondo la serie e aggiungere due crocette fino al numero '8' (poiche' sono identiche): il risultato ottenuto dovrebbe essere come da Fig. 4.

    Le rimanenti 4 battute della strofa sommariamente sono una ripetizione di cio' che abbiamo appena scritto, dunque perche' rifare tutto? La battuta 5,6,7 sono identiche alle precedenti, quindi e' sufficiente aggiungere in sequenza due crocette sul pattern A-B-C_2 e una sul pattern A-B-C_3+4 avendo cura di rinominare di conseguenza i nomi dei pattern per capire come la canzone si muove nel Song Editor, mentre nell'ottava battuta c'e' il fill che conclude la strofa quindi dobbiamo creare una nuova riga nel Song Editor, magari copiando il pattern A-B-C_3+4 e rinominandolo A-B-C_8, e modificarlo come da Fig. 4. Notate come anche in questo caso i tre colpi di rullante (Snare Jazz) finali siano stati opportunamente accentati rispettivamente con [0.10], [0.20] e [0.78]; nell'immagine non si vede ma anche i due colpi finali di Tom Mid hanno un'intensita' di [0.50]. Si tratta solo di un piccolo passaggio, forse e' meglio non picchiare troppo sulle pelli :)

    Fig. 4 Ottava battuta della prima strofa.

    Il risultato finale nel Song Editor dovrebbe essere simile alla Fig. 5.

    Fig. 5 Intro e prima strofa nel Song Editor.

    ATTENZIONE! Se siete giunti fino qui senza mai salvare potrebbe essere un'ottima idea farlo adesso. Un semplice [CTRL+S] seguito dal nome che volete dare al vostro lavoro in corso vi togliera' ogni preoccupazione. Se volete aggiungere anche qualche informazione supplementare fate click con LMB sul pulsante 'S' del Song Editor e modificate i campi a vostro piacimento, queste sono le informazioni che verranno automaticamente visualizzate all'apertura del brano.

    3.Bridge e seguenti

    Ora che abbiamo riportato la prima strofa per intero dovreste avere un'idea del meccanismo con cui creare i pattern successivi: il primo bridge e' composto dalle solite 8 battute (4+4) con una piccola variazione alla fine della quarta, quale cosa ci impone di creare una "quarta battuta" differente, mentre per le altre basta aggiungere le nostre crocette amiche per sveltire il lavoro.

    Prendiamo dunque come campione proprio l'ultimo pattern creato (A-B-C_8) e rinominiamolo Bridge1_4 (per indicare che e' la quarta battuta del primo bridge) e lo modifichiamo come da Fig. 6. In poco tempo abbiamo quindi gia' completato la stesura del primo bridge! Il Song Editor adesso dovrebbe apparire simile alla Fig. 7. Osservando attentamente la figura ci si potrebbe domandare come mai la quinta battuta del bridge (corrispondente alla 17esima battuta del Song Editor) non sia stata assegnata al pattern A-B-C_1; quel pattern ha infatti un colpo di crash sul primo quarto che non e' presente nel pattern A-B-C_2+5+6.

    Fig. 6 Quarta battuta del primo Bridge.

    Fig. 7 Il Song Editor con il primo bridge.

    Procedendo cosi' potremo creare velocemente le successive parti del pezzo: dopo questo bridge c'e' infatti di nuovo una strofa, un altro bridge e il ritornello, sono tutti molto simili quindi basta creare dei pattern differenziati solo per quelle battute che effettivamente differiscono. Insieme a questa guida c'e' comunque il file con il tutto il pezzo. Logicamente si possono creare righe tante quante sono le battute, ma una canzone completa poi rischia di diventare difficile da seguire e il file relativo occupa piu' spazio.

    4.Il Riff

    Verso meta' pezzo poi ci sono due riff consecutivi: ciascuno e' lungo 2 battute ma in realta' la sostanza non cambia poi molto. Il pattern musicale per la batteria e' lo stesso, sono solo tutti gli altri strumenti che eseguono qualcosa di simile a quello che verra' poi rappresentato dal riff finale, in cui partecipa anche la batteria.

    Piu' semplicemente in questo riff la batteria esegue il solito pattern per una battuta (vedi Fig. 1) mentre nella seconda accenta insieme agli altri strumenti (Fig. 8), poi ripete il solito pattern per una battuta e di nuovo nella seconda ci sono solo due accenti con un piccolo fill a chiusura del tutto (Fig. 9); ancora una volta l'apertura del charleston finale e' simulata con due intensita' differenziate di [0.78] e [0.20].

    Fig. 8 Seconda battuta del riff.

    Fig. 9 Quarta battuta del riff.

    5.L'altra meta' della canzone

    Una volta analizzato il riff abbiamo girato la boa della meta' del pezzo. Cio' che resta da scrivere e' la solita strofa ripetuta due volte consecutive, un bridge e il ritornello ripetuto 3 volte con in coda il solito riff finale.

    Questa seconda meta' della canzone differisce lievemente dalla precedente poiche' nelle due strofe ci sono alcune aperture del charleston e ogni 4 battute c'e' quasi sempre un piccolo passaggio, il tutto tradotto nel linguaggio di Hydrogen significa ricreare da capo un'altra sezione A-B-C-* perche' a questo punto non conviene piu' sforzarsi di incastrare dei pattern precedentemente creati, ci sono troppe differenze. Copiare quindi i pattern creati in precedenza per la strofa e rinominarli per esempio con un suffisso '_hh' per indicare la presenza dello strumento Open HH. Come viene accennato nell'introduzione il batterista originale del pezzo aggiunge anche del suo ed e' questo che fa la differenza fra un pezzo suonato e un pezzo riportato su carta (o su Hydrogen): tutto questo per dire che le parti seguenti della canzone sono riportate cercando di essere fedeli al pezzo originale, ma un altro orecchio potra' dare un'altra interpretazione, in fondo stiamo solo cercando di insegnare a usare un programma, non a emulare Jeff Porcaro :)

    Comunque ecco in Fig. 10 come appare la sezione del Song Editor relativa alle strofe e al bridge che seguono il riff; come si puo' notare le prime battute (48-50 secondo la numerazione del Song Editor) sono prese dal vecchio pattern mentre le altre (51-71) sono nuove. In piu' sono state create anche due battute 'ad hoc' identificate con A-B-C-3a_hh (Fig. 11 per vedere un esempio) e A-B-C-4a_hh poiche' hanno alcune singolarita' non presenti in nessun pattern finora scritto.

    Fig. 10 Terza e quarta strofa nel Song Editor.

    Fig. 11 Settima battuta del terzo bridge.

    In seguito al terzo bridge abbiamo tre volte il ritornello: la prima volta il rullante e' sostituito dallo strumento Stick e la cassa non viene suonata (potrebbe sembrare il contrario perche' il basso invece suona, ad ogni buon conto lo strumento c'e' lo stesso smorzando l'intensita' a [0.50]), mentre la seconda e la terza volta ci sono alcune battute fuori dal coro come segnalato dai pattern C3_*, in Figura 12 il pattern C3_6+7 & C4_3 (lievemente diverso ma pur sempre tale) che cripticamente identifica la sesta e settima battuta del terzo ritornello e la terza battuta del quarto ritornello: se una notazione del genere puo' confondere e' sufficiente adattarla al proprio sistema.

    Fig. 12 Il pattern C3_6+7 & C4_3.

    6.Il riff finale

    Il pezzo si conclude ripetendo una variazione del riff di prima: la prime due battute sono uguali (cioe' pattern normale + battuta con solo un paio di accenti), mentre nella terza battuta la batteria invece di suonare per conto proprio accenta tutta la melodia degli altri strumenti (Fig. 13) per poi concludere alla maniera classica.

    Fig. 13 Il pattern del riff finale.

    E con questo siamo arrivati alla fine della canzone. L'obiettivo di questo breve tutorial era dare una rapida panoramica sulle funzioni che tipicamente si andranno a utilizzare di Hydrogen nell'uso comune: come accennato nell'introduzione, questo programma puo' comunque essere usato come un semplice click accompagnando la batteria dal solo metronomo oppure ancora si puo' isolare un pezzo particolarmente ostico di un brano, riportarlo nel Pattern Editor di Hydrogen e metterlo in loop: come in molte altre cose ci si accorge che anche la sola analisi di un brano da studiare ne rende piu' facile la comprensione e l'esecuzione e anche in questo Hydrogen puo' aiutare sveltendo il lavoro di una semplice stesura di un pattern e successiva raffinazione.

    Per commenti, suggerimenti, correzioni si puo' utilizzare le mailing list attivate per Hydrogen (hydrogen.sf.net)

    hydrogen-0.9.6-beta3/data/doc/tutorial_it.po000066400000000000000000001106011211146647700207260ustar00rootroot00000000000000#, fuzzy msgid "" msgstr "" "POT-Creation-Date: 2009-04-09 22:14-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Content-Type: text/plain; charset=UTF-8\n" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:73(None) msgid "" "@@image: 'img_tutorial/PatternBase1.png'; " "md5=b29ca465510b455a384e01069b994fe7" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:86(None) msgid "" "@@image: 'img_tutorial/PatternBase2.png'; " "md5=563b824313dbfec5a7a758c33fe4f4bc" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:118(None) msgid "" "@@image: 'img_tutorial/Intro4th.png'; md5=e30c9452bd46ddcf50f73b882625a02c" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:139(None) msgid "" "@@image: 'img_tutorial/Verse8th.png'; md5=0c259a57f24d12fa4fb95209e2d4e00f" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:154(None) msgid "" "@@image: 'img_tutorial/VerseAll.png'; md5=cac72dce1d6f0c72b717b9aa632df9ac" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:177(None) msgid "" "@@image: 'img_tutorial/Bridge1_4th.png'; md5=dcb1ea6550a88b9b84bc4c2f8e4e2dd8" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:190(None) msgid "" "@@image: 'img_tutorial/VerseBridge.png'; md5=26e68ef8504c3d44cc72dabae9f595d3" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:213(None) msgid "" "@@image: 'img_tutorial/Riff1b.png'; md5=5bc07a79ee5abd6a675389f3714fa5ed" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:225(None) msgid "" "@@image: 'img_tutorial/Riff1c.png'; md5=5a79773a26f39e67d7d9edcbea262bd5" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:247(None) msgid "" "@@image: 'img_tutorial/VerseBridge_hh.png'; " "md5=8e8e42932a729232c0499f2517c028e2" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:260(None) msgid "" "@@image: 'img_tutorial/Bridge3_3a_hh.png'; " "md5=36695f590e102a05c7ddac079c8815f1" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:275(None) msgid "" "@@image: 'img_tutorial/C3_6+7.png'; md5=c6b445d0ced92d63b4749174951b8467" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: tutorial.docbook:294(None) msgid "" "@@image: 'img_tutorial/Riff1d.png'; md5=bc6d918be1a3413c697a410de2b5df6b" msgstr "" #: tutorial.docbook:7(title) msgid "Hydrogen Tutorial" msgstr "Hydrogen Tutorial" #: tutorial.docbook:10(firstname) msgid "Antonio" msgstr "" #: tutorial.docbook:11(surname) msgid "Piraino" msgstr "" #: tutorial.docbook:15(date) msgid "24/feb/2004" msgstr "" #: tutorial.docbook:18(para) msgid "" "Ok, you've just downloaded the latest version of Hydrogen and have it " "installed successfully. Now you want to test it while creating your " "favourite song, this might help you to learn it, writing down a few " "difficult parts in order to play them over and over again or to be sure that " "in future a quick glance at the songfile will bring up immediately to mind " "the song. Hydrogen can be used also as an advanced click " "machine that can help you practicing (in speed, precision and rudiments), " "maybe with a custom pattern designed by yourself. This short introduction " "will guide you creating a a complete song, we will work on \"Georgy Porgy\" " "of Toto which has a quite straight structure therefore is appropriate for a " "guide but this doenst mean the song is _actually_ easy to write down since " "the drummer (Jeff Porcaro) enriches the groove with his personal touch and " "fantasy; Hydrogen will not play better than the drummer who is working on " "the song, most of the task must be accomplished by the programmer's " "sensibility and experience." msgstr "" "Ok, avete scaricato l'ultima versione di Hydrogen e l'avete installata con " "successo. Ora volete provare a usare il programma per ricreare la vostra " "canzone preferita, questo puo' essere utile per aiutarvi ad impararla, " "mettendo nero su bianco alcuni passaggi difficili per poterli ripetere fino " "all'esaurimento o per assicurarvi che in un futuro un'occhiata al file vi " "aiuti a ricordare velocemente come suonare quella canzone. Hydrogen puo' " "anche essere usato semplicemente come un click evoluto che, " "insieme a un pattern di base (che vi potete create a parte), vi aiuti a " "prendere pratica con la batteria (velocita', precisione ma anche studio dei " "rudimenti). Questo tutorial rappresenta quindi un compendio al manuale e " "cerchera' di guidare l'utente di Hydrogen nella creazione di un canzone " "completa partendo da zero e l'uso del programma per altri scopi: in questa " "sede verra' analizzata la canzone \"Georgy Porgy\" dei Toto che e' " "abbastanza lineare come struttura e quindi piu' adatta per una guida. Questo " "comunque non significa che sia una canzone _facile_ da riprendere fedelmente " "poiche' il batterista (il grande Jeff Porcaro) arricchisce il groove con una " "miriade di aggiunte personali e con un 'tocco' senza paragoni. Dal momento " "che Hydrogen non suonera' meglio del batterista che alla tastiera gli passa " "le istruzioni, e' evidente che parte del lavoro va fatto dalla persona " "stessa, guidato dalla propria sensibilita' ed esperienza tecnica." #: tutorial.docbook:24(title) msgid "Move on" msgstr "Si comincia" #: tutorial.docbook:25(para) msgid "Before starting make sure you have a few things:" msgstr "" "Prima di iniziare la stesura della canzone assicuratevi di avere alcuni " "strumenti necessari:" #: tutorial.docbook:28(para) msgid "" "The song to study on: either an audio-cd or (better) an .ogg or .mp3 for " "optimal flexibility." msgstr "" "La canzone da studiare: puo' andar bene un cd-audio ma sarebbe preferibile " "scaricarla sul PC in formato .ogg o .mp3 per una maggior flessibilita'." #: tutorial.docbook:29(para) msgid "" "Optionally a rough layout of the song on paper: it may be useful to count " "bars and different parts of the song that eventually wii get into Hydrogen." msgstr "" "Opzionalmente anche uno spartito di batteria oppure mettere su carta una " "struttura di massima per quella canzone: puo' far comodo controllare il " "numero delle battute o le varie parti del pezzo musicale che si inseriranno " "in Hydrogen." #: tutorial.docbook:32(para) msgid "The song we will work on has the following structure:" msgstr "La canzone in esame ha la seguente struttura:" #: tutorial.docbook:35(para) msgid "Intro: 4 bars" msgstr "Intro: 4 battute" #: tutorial.docbook:36(para) tutorial.docbook:38(para) msgid "Verse: 8 bars" msgstr "Strofa: 8 battute" #: tutorial.docbook:37(para) tutorial.docbook:39(para) #: tutorial.docbook:44(para) msgid "Bridge: 8 bars" msgstr "Bridge: 8 battute" #: tutorial.docbook:40(para) tutorial.docbook:45(para) #: tutorial.docbook:46(para) tutorial.docbook:47(para) msgid "Chorus: 8 bars" msgstr "Ritornello: 8 battute" #: tutorial.docbook:41(para) msgid "Riff: 4 bars" msgstr "Riff: 4 battute" #: tutorial.docbook:42(para) msgid "Verse (with guitar): 8 bars" msgstr "Strofa (con chitarra): 8 battute" #: tutorial.docbook:43(para) msgid "Verse (with voice): 8 bars" msgstr "Strofa (con voce): 8 battute" #: tutorial.docbook:48(para) msgid "Final Riff: 4 bars" msgstr "Riff finale: 4 battute" #: tutorial.docbook:51(para) msgid "" "Looking at this scheme we can see that some pattern repeats, so we'll use " "this symbols in Hydrogen's Song Editor:" msgstr "" "Da questo schema si evidenzia come alcuni pattern si ripetono nella canzone " "quindi useremo questa legenda, tornera' comodo con Hydrogen:" #: tutorial.docbook:54(para) #, fuzzy msgid "Verse -> A" msgstr "Strofa -> A" #: tutorial.docbook:55(para) #, fuzzy msgid "Bridge -> B" msgstr "Bridge -> B" #: tutorial.docbook:56(para) #, fuzzy msgid "Chorus -> C" msgstr "Ritornello -> C" #: tutorial.docbook:58(para) msgid "" "And to save up words on explainations we'll use two common TLA (Three " "Letters Acronym ^_^):" msgstr "" "E per accorciare le spiegazioni useremo anche questi due classici TLA (Three " "Letters Acronym ^_^):" #: tutorial.docbook:60(para) msgid "LMB: left mouse button" msgstr "LMB: left mouse button" #: tutorial.docbook:61(para) msgid "RMB: right mouse button" msgstr "RMB: right mouse button" #: tutorial.docbook:64(para) msgid "" "Well, now unplug your phone and launch Hydrogen from the shell: let's get to " "work!" msgstr "" "Bene, adesso staccate il telefono e lanciate Hydrogen dalla shell: e' il " "momento di mettersi al lavoro!" #: tutorial.docbook:67(title) msgid "Intro" msgstr "Intro" #: tutorial.docbook:68(para) msgid "" "The base pattern (Fig. 1 and 2) is 4 bars long (divided in 2 different bars, " "each repeated 2 times, so it's [2a*2]+[2b*2]) and lasts for the whole song, " "from the beginning to the end, riff included; most of the time (intro and " "riff excluded) this base pattern is repeated 2 times to reach the commonly " "used 8 bars for each part of the song (A,B,C). Before starting let's set the " "speed to 98bpm (HINT HINT you can find out by yourself the speed of the song " "while playing it with your favourite media player and following the rhythm " "by clicking repeatedly the backslash key in Hydrogen) and from the menu " "Grid Resolution let's set '16'. To create a new pattern " "select the instrument Closed HH, click on RMB and choose " "Fill Notes: the first two bars will be filled up. Then insert " "manually the beats on Snare Jazz and Kick as indicated in the 2 pictures " "below and there we have the base pattern for our song. Note how the beats on " "the hi-hat have different 'hardness': beats falling on the beginning of the " "bar are set at [0.78], the others at [0.50] (you can check that on the lower " "stat bar of Hydrogen), in order to give groove the song." msgstr "" "Il pattern base (Fig. 1 e 2) e' di 4 battute (suddivise in 2 battute " "differenti ciascuna ripetuta per due volte, quindi [2a*2]+[2b*2]), e dura " "per tutto il pezzo, dall'inizio alla fine, riff inclusi; nella maggior parte " "dei casi (escluso l'intro e i riff) questo pattern base viene ripetuto 2 " "volte per arrivare alle classiche 8 battute per ciascuna parte (A,B,C) del " "brano. Prima di tutto pero' due piccole operazioni preliminari: settate la " "velocita' a 98 bpm (SUGGERIMENTO: potete scoprire da voi la velocita' della " "canzone mettendola in esecuzione col vostro player preferito e tenendo il " "tempo col tasto backslash di Hydrogen) e dal menu Grid Resolution selezionate '16'. Per creare il pattern selezionate lo strumento " "Closed HH, click su RMB e scegliete Fill Notes: le due battute correntemente visualizzate saranno riempite di " "sedicesimi, voila'! Inserite poi a mano i colpi di rullante e di cassa come " "indicato nelle due figure sottostanti e abbiamo ottenuto il ritmo base per " "la nostra canzone. Notare come i colpi sul charleston siano accentati in " "maniera differenziata: i colpi che cascano sui quarti hanno un'intensita' di " "[0.78], gli altri di [0.50] (visualizzata nella barra di stato in fondo alla " "schermata del programma), in maniera da vivacizzare la resa globale del " "pezzo." #: tutorial.docbook:76(para) msgid "Fig. 1 Base pattern, first bar." msgstr "" "Fig. 1 Il pattern base, prima battuta." #: tutorial.docbook:89(para) msgid "Fig. 2 Base pattern, second bar." msgstr "" "Fig. 2 Il pattern base, seconda battuta." #: tutorial.docbook:96(para) msgid "" "Before we start writing down verses there are 4 intro bars, all equals to " "each other, except for the last one which at the end has an open hi-hat. We " "should do then:" msgstr "" "Prima di cominciare la stesura delle strofe ci sono le 4 battute di intro, " "tutte uguali, eccezion fatta per la quarta che in fondo ha l'apertura del " "charleston. La procedura quindi e':" #: tutorial.docbook:99(para) msgid "" "Rename the first pattern in the Song Editor with RMB click on the name " "Empty Pattern and change it to intro_a, for " "example." msgstr "" "Rinominare il primo pattern nel Song Editor con clic di RMB sul nome " "Empty Pattern sostituendolo, per esempio, con intro_a." #: tutorial.docbook:100(para) msgid "" "Add two 'X' near the first one (which represent the second and the third bar)" msgstr "" "Aggiungere altre due crocette accanto alla prima (che rappresentano " "rispettivamente la seconda e la terza battuta)" #: tutorial.docbook:101(para) msgid "Create in Pattern Editor the base pattern (Fig. 1)" msgstr "Create nel Pattern Editor il pattern base (Fig. 1)" #: tutorial.docbook:105(para) msgid "For the fourth bar we'll instead open the hi-hat (Fig. 3):" msgstr "" "Per la quarta battuta invece c'e' da aggiungere l'apertura del charleston; " "si puo' procedere cosi' (Fig. 3):" #: tutorial.docbook:108(para) msgid "" "RMB in Song Editor on the newly created pattern, choose copy, " "then choose a name (ex. intro_b) and automagically you will " "have a new one right under." msgstr "" "Click di RMB Nel Song Editor sul pattern appena creato, scegliere " "copy, scegliere un nome (es. intro_b) e " "automaticamente ne verra' creato uno gemello proprio sotto." #: tutorial.docbook:109(para) msgid "Select the pattern you've just created (IMPORTANT!)" msgstr "Selezionare il nuovo pattern creato (IMPORTANTE!)" #: tutorial.docbook:110(para) msgid "" "Delete the last 2 beats of Closed HH and move them on " "Open HH." msgstr "" "Cancellare gli ultimi due sedicesimi del Closed HH e " "riportarli sul Open HH." #: tutorial.docbook:111(para) msgid "" "Select '32' from Grid Resolution and add another 2 beats " "right near the previous ones." msgstr "" "Selezionare '32' dalla Grid Resolution e aggiungere altri due " "colpi a fianco dei sedicesimi gia' esistenti." #: tutorial.docbook:112(para) msgid "" "Adjust the hardness of these 4 beats so that the first is [0.78] while the " "other 3 [0.20] to simulate a longer opening." msgstr "" "Aggiustate l'intensita' in maniera che il primo dei 4 trendaduesimi sia " "[0.78] mentre gli altri 3 siano [0.20] per simulare un'apertura piu' lunga." #: tutorial.docbook:121(para) msgid "Fig. 3 Intro detail, fourth bar." msgstr "" "Fig. 3 Dettaglio dell'intro, quarta " "battuta." #: tutorial.docbook:130(title) msgid "First verse" msgstr "Prima strofa" #: tutorial.docbook:131(para) msgid "" "Since we have written the base pattern, now we should already know the " "basis. To create the first verse we just have to copy from the Song Editor " "the pattern intro_a and rename, say, to A-B-C_1, because it is the first bar of the verse that eventually will also " "fit for the bridge (B) and the chorus (C). Pay " "attention, why can't we just add 2 more 'X' next to this pattern? " "Because in the first bar there is a Crash beat which ends the " "previous intro, therefore the two bars are not completely equal; you have to " "copy the pattern A-B-C_1 and rename it to A-B-C_2, cutting the Crash beat cited before." msgstr "" "Abbiamo gia' visto come creare il pattern base, dunque per cominciare la " "stesura della prima strofa basta copiare dal Song Editor il pattern " "intro_a e rinominarlo, per esempio A-B-C_1, " "poiche' rappresenta la prima battuta della strofa che poi andra' bene anche " "per il bridge (B) e il ritornello (C). Attenzione, perche' non aggiungere due crocette consecutive in corrispondenza " "di questo pattern appena creato? Poiche' nella prima battuta c'e' un colpo " "di Crash che conclude l'intro precedente, il risultato e' che " "le prime due battute non sono completamente identiche. Per aggiungere la " "seconda battuta si deve quindi copiare il pattern A-B-C_1 e " "rinominarlo A-B-C_2, togliendo poi il colpo di Crash citato prima." #: tutorial.docbook:133(para) msgid "" "Same thing for the following 2 bars: just copy into the Song Editor the " "pattern in Fig. 2, rename it according to the previous ones and add two " "'X' (because they're identical), you should reach number '8' as shown in " "Fig. 4." msgstr "" "Alla stessa maniera per ottenere le 2 battute seguenti e' sufficiente " "copiare nel Song Editor il pattern in Fig. 2, rinominarlo secondo la serie e " "aggiungere due crocette fino al numero '8' (poiche' sono identiche): il " "risultato ottenuto dovrebbe essere come da Fig. 4." #: tutorial.docbook:134(para) msgid "" "The 4 remaining bars of the verse are more or less the same of what we've " "just written, so why redo everything from scratch? Bars number 5,6,7 are " "virtually identical to the previous ones so we just have to add 2 crosses to " "pattern A-B-C_2 and one to A-B-C_3+4 taking " "care of renaming the patterns logically (so to understand how the song moves " "around the Song Editor), while in the eighth bar there is a fill which " "closes the verse. We have to copy+paste in a new line a pattern already " "written (ex. A-B-C_3+4), rename it to A-B-C_8 " "and modify it as in Fig. 4. Note how in this case too the three Snare " "Jazz beats on fourth bar have hardness properly tuned with [0.10], " "[0.20] and [0.78]; you can't see it in the picture but also the two final " "beats of Tom Mid are both 'touched' to [0.50], after all it's " "only just a small fill, better not beat hard on the drums :)" msgstr "" "Le rimanenti 4 battute della strofa sommariamente sono una ripetizione di " "cio' che abbiamo appena scritto, dunque perche' rifare tutto? La battuta " "5,6,7 sono identiche alle precedenti, quindi e' sufficiente aggiungere in " "sequenza due crocette sul pattern A-B-C_2 e una sul pattern " "A-B-C_3+4 avendo cura di rinominare di conseguenza i nomi dei " "pattern per capire come la canzone si muove nel Song Editor, mentre " "nell'ottava battuta c'e' il fill che conclude la strofa quindi dobbiamo " "creare una nuova riga nel Song Editor, magari copiando il pattern A-B-" "C_3+4 e rinominandolo A-B-C_8, e modificarlo come da " "Fig. 4. Notate come anche in questo caso i tre colpi di rullante " "(Snare Jazz) finali siano stati opportunamente accentati " "rispettivamente con [0.10], [0.20] e [0.78]; nell'immagine non si vede ma " "anche i due colpi finali di Tom Mid hanno un'intensita' di " "[0.50]. Si tratta solo di un piccolo passaggio, forse e' meglio non " "picchiare troppo sulle pelli :)" #: tutorial.docbook:142(para) msgid "" "Fig. 4 Eighth bar of the first verse." msgstr "" "Fig. 4 Ottava battuta della prima strofa." #: tutorial.docbook:149(para) msgid "The result in the Song Editor should be something like Fig. 5." msgstr "" "Il risultato finale nel Song Editor dovrebbe essere simile alla Fig. 5." #: tutorial.docbook:157(para) msgid "" "Fig. 5 Intro and first verse in the Song " "Editor." msgstr "" "Fig. 5 Intro e prima strofa nel Song " "Editor." #: tutorial.docbook:164(para) msgid "" "WARNING! if you reached this point " "without saving your work, NOW is the good time to do that. A simple [CTRL+S] " "followed by the name of the songfile and you'll be ok. If you want to add " "some more infos, LMB on 'S' button of the Song Editor and change the fields " "as you like: these infos will be shown upon opening of the file." msgstr "" "ATTENZIONE! Se siete giunti fino qui " "senza mai salvare potrebbe essere un'ottima idea farlo adesso. Un semplice " "[CTRL+S] seguito dal nome che volete dare al vostro lavoro in corso vi " "togliera' ogni preoccupazione. Se volete aggiungere anche qualche " "informazione supplementare fate click con LMB sul pulsante 'S' del Song " "Editor e modificate i campi a vostro piacimento, queste sono le informazioni " "che verranno automaticamente visualizzate all'apertura del brano." #: tutorial.docbook:169(title) msgid "Bridge and following" msgstr "Bridge e seguenti" #: tutorial.docbook:170(para) msgid "" "Now that we're done with the first verse you should have an idea of how the " "whole thing works: the first bridge is made of the same 8 bars (4+4) with a " "slight change at the end of the fourth, which forces us to create a 'custom' " "fourth bar while the others are easily added with our friendly little cross " "('X')." msgstr "" "Ora che abbiamo riportato la prima strofa per intero dovreste avere un'idea " "del meccanismo con cui creare i pattern successivi: il primo bridge e' " "composto dalle solite 8 battute (4+4) con una piccola variazione alla fine " "della quarta, quale cosa ci impone di creare una \"quarta battuta\" " "differente, mentre per le altre basta aggiungere le nostre crocette amiche " "per sveltire il lavoro." #: tutorial.docbook:172(para) msgid "" "Let's take the latest pattern created as sample (A-B-C_8), " "let's copy and rename it to Bridge1_4 (i.e. fourth bar of " "first bridge) and modify it as in Fig. 6. We have quickly completed the " "bridge! The Song Editor now should appear as follows in Fig. 7. Looking " "closely one should ask why the fifth bar of the bridge (17th bar of the " "whole song) isnt assigned to the pattern A-B-C_1; the answer " "is that the pattern has also a Crash which is not present in " "A-B-C_2+5+6." msgstr "" "Prendiamo dunque come campione proprio l'ultimo pattern creato (A-B-" "C_8) e rinominiamolo Bridge1_4 (per indicare che e' " "la quarta battuta del primo bridge) e lo modifichiamo come da Fig. 6. In " "poco tempo abbiamo quindi gia' completato la stesura del primo bridge! Il " "Song Editor adesso dovrebbe apparire simile alla Fig. 7. Osservando " "attentamente la figura ci si potrebbe domandare come mai la quinta battuta " "del bridge (corrispondente alla 17esima battuta del Song Editor) non sia " "stata assegnata al pattern A-B-C_1; quel pattern ha infatti " "un colpo di crash sul primo quarto che non e' presente nel pattern A-" "B-C_2+5+6." #: tutorial.docbook:180(para) msgid "" "Fig. 6 Fourth bar of the first bridge." msgstr "" "Fig. 6 Quarta battuta del primo Bridge." #: tutorial.docbook:193(para) msgid "" "Fig. 7 The Song Editor with the first " "bridge." msgstr "" "Fig. 7 Il Song Editor con il primo bridge." #: tutorial.docbook:200(para) msgid "" "Now we can build up quickly the remaining parts of the song: after this " "bridge there is another verse, then a bridge and a chorus, which are mostly " "the same so we just need to create different pattern in a few cases (along " "with this guide you will find the song file with the whole song). Of course " "one can write as many lines in the Song Editor as the bars in the song but a " "whole song would become difficult to follow, plus the songfile would be " "bigger." msgstr "" "Procedendo cosi' potremo creare velocemente le successive parti del pezzo: " "dopo questo bridge c'e' infatti di nuovo una strofa, un altro bridge e il " "ritornello, sono tutti molto simili quindi basta creare dei pattern " "differenziati solo per quelle battute che effettivamente differiscono. " "Insieme a questa guida c'e' comunque il file con il tutto il pezzo. " "Logicamente si possono creare righe tante quante sono le battute, ma una " "canzone completa poi rischia di diventare difficile da seguire e il file " "relativo occupa piu' spazio." #: tutorial.docbook:205(title) msgid "The Riff" msgstr "Il Riff" #: tutorial.docbook:206(para) msgid "" "Around half song there are two riffs: each one is 2 bars long but actually " "the pattern is the same, just the other instruments play something that we " "will see in the last riff of this song (where drums too play the pattern of " "the riff)." msgstr "" "Verso meta' pezzo poi ci sono due riff consecutivi: ciascuno e' lungo 2 " "battute ma in realta' la sostanza non cambia poi molto. Il pattern musicale " "per la batteria e' lo stesso, sono solo tutti gli altri strumenti che " "eseguono qualcosa di simile a quello che verra' poi rappresentato dal riff " "finale, in cui partecipa anche la batteria." #: tutorial.docbook:208(para) msgid "" "In this riff the drums play the same pattern we already know for one bar " "(see Fig. 1) while in the second bar only beats two times (Fig. 8), then the " "pattern again and then again two beats with a small final fill (Fig. 9); " "again the open hi-hat is done with beats of different intensity: [0.78] and " "[0.20]." msgstr "" "Piu' semplicemente in questo riff la batteria esegue il solito pattern per " "una battuta (vedi Fig. 1) mentre nella seconda accenta insieme agli altri " "strumenti (Fig. 8), poi ripete il solito pattern per una battuta e di nuovo " "nella seconda ci sono solo due accenti con un piccolo fill a chiusura del " "tutto (Fig. 9); ancora una volta l'apertura del charleston finale e' " "simulata con due intensita' differenziate di [0.78] e [0.20]." #: tutorial.docbook:216(para) msgid "Fig. 8 Second bar of the riff." msgstr "Fig. 8 Seconda battuta del riff." #: tutorial.docbook:228(para) msgid "Fig. 9 Fourth bar of the riff." msgstr "Fig. 9 Quarta battuta del riff." #: tutorial.docbook:237(title) msgid "The second half of the song" msgstr "L'altra meta' della canzone" #: tutorial.docbook:238(para) msgid "" "After the riff we have half job done. We just have to write down two verses, " "one bridge, a chorus repeated 3 times and the same riff at the end." msgstr "" "Una volta analizzato il riff abbiamo girato la boa della meta' del pezzo. " "Cio' che resta da scrivere e' la solita strofa ripetuta due volte " "consecutive, un bridge e il ritornello ripetuto 3 volte con in coda il " "solito riff finale." #: tutorial.docbook:240(para) msgid "" "The second part of the song is slightly different from the previous one " "because we have a few hi-hat opening during the verses and every 4 bars " "there's a small fill almost everytime: it's easier to start from scratch a " "new set of pattern (i.e. A-B-C-*) in the Song Editor copying " "them with a suffix like '_hh' to show the presence of the Open HH. As noted in the introduction of this guide, Jeff Porcaro puts much " "of his skills playing the song and this makes the difference between a song " "played from a raw and \"cold\" transcription on paper (or on Hydrogen): " "therefore the following parts of the song will try to be faithful to the " "original piece, but another 'ear' could give another written layout of the " "same part: after all this doesnt matter so much since we are showing how a " "program works, not to play like Porcaro :)" msgstr "" "Questa seconda meta' della canzone differisce lievemente dalla precedente " "poiche' nelle due strofe ci sono alcune aperture del charleston e ogni 4 " "battute c'e' quasi sempre un piccolo passaggio, il tutto tradotto nel " "linguaggio di Hydrogen significa ricreare da capo un'altra sezione A-" "B-C-* perche' a questo punto non conviene piu' sforzarsi di " "incastrare dei pattern precedentemente creati, ci sono troppe differenze. " "Copiare quindi i pattern creati in precedenza per la strofa e rinominarli " "per esempio con un suffisso '_hh' per indicare la presenza dello strumento " "Open HH. Come viene accennato nell'introduzione il batterista " "originale del pezzo aggiunge anche del suo ed e' questo che fa la differenza " "fra un pezzo suonato e un pezzo riportato su carta (o su Hydrogen): tutto " "questo per dire che le parti seguenti della canzone sono riportate cercando " "di essere fedeli al pezzo originale, ma un altro orecchio potra' dare " "un'altra interpretazione, in fondo stiamo solo cercando di insegnare a usare " "un programma, non a emulare Jeff Porcaro :)" #: tutorial.docbook:242(para) msgid "" "In Fig. 10 here is how is the section in the Song Editor of the two verses " "and the bridge following the first riff; as you can see the first bars (48-" "50 according to the Song Editor's enumeration) are already written before " "while the others (51-71) are new. Moreover there a few pattern 'ad hoc' " "identified by A-B-C-3a_hh (Fig. 11 to see an example) and " "A-B-C-4a_hh since both have a few changes not present in any " "pattern written up to now." msgstr "" "Comunque ecco in Fig. 10 come appare la sezione del Song Editor relativa " "alle strofe e al bridge che seguono il riff; come si puo' notare le prime " "battute (48-50 secondo la numerazione del Song Editor) sono prese dal " "vecchio pattern mentre le altre (51-71) sono nuove. In piu' sono state " "create anche due battute 'ad hoc' identificate con A-B-C-3a_hh (Fig. 11 per vedere un esempio) e A-B-C-4a_hh poiche' " "hanno alcune singolarita' non presenti in nessun pattern finora scritto." #: tutorial.docbook:250(para) msgid "" "Fig. 10 Third and fourth bars in the Song " "Editor." msgstr "" "Fig. 10 Terza e quarta strofa nel Song " "Editor." #: tutorial.docbook:263(para) msgid "" "Fig. 11 Seventh bar of the third bridge." msgstr "" "Fig. 11 Settima battuta del terzo bridge." #: tutorial.docbook:270(para) msgid "" "After the third bridge we repeat the chorus: the first time the " "Stick is used instead of the Snare Jazz and we " "don't play the Kick (even if it may sound the opposite since " "the bass guitar does play here, so we have put the same the kick beats " "softly at [0.50]), while the second and third time the chorus goes on there " "are a few bars different, as shown from patterns C3_*. In " "Fig. 12 the pattern C3_6+7 & C4_3 (slightly " "different ...) which criptycally identify the sixth and seventh bar of the " "third chorus AND the third bar of the fourth chorus: if you think this is " "confusing, you may find out your own method :-)" msgstr "" "In seguito al terzo bridge abbiamo tre volte il ritornello: la prima volta " "il rullante e' sostituito dallo strumento Stick e la cassa " "non viene suonata (potrebbe sembrare il contrario perche' il basso invece " "suona, ad ogni buon conto lo strumento c'e' lo stesso smorzando l'intensita' " "a [0.50]), mentre la seconda e la terza volta ci sono alcune battute fuori " "dal coro come segnalato dai pattern C3_*, in Figura 12 il " "pattern C3_6+7 & C4_3 (lievemente diverso ma pur sempre " "tale) che cripticamente identifica la sesta e settima battuta del terzo " "ritornello e la terza battuta del quarto ritornello: se una notazione del " "genere puo' confondere e' sufficiente adattarla al proprio sistema." #: tutorial.docbook:278(para) msgid "" "Fig. 12 Pattern C3_6+7 & C4_3." msgstr "" "Fig. 12 Il pattern C3_6+7 & " "C4_3." #: tutorial.docbook:288(title) msgid "The Final riff" msgstr "Il riff finale" #: tutorial.docbook:289(para) msgid "" "The song ends repeating a slightly different riff we have met before: the " "first 2 bars are the same (i.e. pattern + 2 beats), while the in third bar " "the drum plays actually with the other instruments (Fig. 13) to finally end " "as always." msgstr "" "Il pezzo si conclude ripetendo una variazione del riff di prima: la prime " "due battute sono uguali (cioe' pattern normale + battuta con solo un paio di " "accenti), mentre nella terza battuta la batteria invece di suonare per conto " "proprio accenta tutta la melodia degli altri strumenti (Fig. 13) per poi " "concludere alla maniera classica." #: tutorial.docbook:297(para) msgid "Fig. 13 The final riff." msgstr "Fig. 13 Il pattern del riff finale." #: tutorial.docbook:304(para) msgid "" "And this is the end. The goal of this little tutorial is giving a quick " "overview of the most common functions of Hydrogen: this piece of software " "can also run for other purposes, like an advanced 'click' played with the " "drum, or to loop playing some part of a song difficult to catch; however, as " "in other things, analyzing the song itself helps the comprehension and here " "too, Hydrogen can be helpful reducing the time needed to write down a " "pattern and tune it." msgstr "" "E con questo siamo arrivati alla fine della canzone. L'obiettivo di questo " "breve tutorial era dare una rapida panoramica sulle funzioni che tipicamente " "si andranno a utilizzare di Hydrogen nell'uso comune: come accennato " "nell'introduzione, questo programma puo' comunque essere usato come un " "semplice click accompagnando la batteria dal solo metronomo oppure ancora si " "puo' isolare un pezzo particolarmente ostico di un brano, riportarlo nel " "Pattern Editor di Hydrogen e metterlo in loop: come in molte altre cose ci " "si accorge che anche la sola analisi di un brano da studiare ne rende piu' " "facile la comprensione e l'esecuzione e anche in questo Hydrogen puo' " "aiutare sveltendo il lavoro di una semplice stesura di un pattern e " "successiva raffinazione." #: tutorial.docbook:306(para) msgid "" "For comments, suggestions, corrections, you can use the Hydrogen mailing " "lists (hydrogen.sf.net)" msgstr "" "Per commenti, suggerimenti, correzioni si puo' utilizzare le mailing list " "attivate per Hydrogen (hydrogen.sf.net)" #. Put one translator per line, in the form of NAME , YEAR1, YEAR2. #: tutorial.docbook:0(None) msgid "translator-credits" msgstr "" #~ msgid "Antonio Piraino" #~ msgstr "Antonio Piraino" #~ msgid "ROLES_OF_TRANSLATORS" #~ msgstr "" #~ msgid "CREDIT_FOR_TRANSLATORS" #~ msgstr "" hydrogen-0.9.6-beta3/data/drumkits/000077500000000000000000000000001211146647700171255ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/drumkits/GMkit/000077500000000000000000000000001211146647700201405ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/drumkits/GMkit/clap_Dry_c.flac000066400000000000000000000422171211146647700230340ustar00rootroot00000000000000fLaC"f @/ Z@`l~WN( reference libFLAC 1.1.0 20030126Y}H\ߞJJp Ao/RL"ѣ+#I [dF_} TH2cR8pe&x$WePrpe­h] Hbzn' x2PAr%A]K N}R2!+D`\!); U[NESc v^Q‡:NO|/%: գ^QR^`q`lX6N>fLa׽>/&v < <Ŭ<Y@C)ɒm5?vDbE3.tb[J8d<ЛQge lHv\}TdwVimXIW1f{mWIGT G9<4MI+12OeQkH5˕ăk^ Er啵*K#g^Qh$xǷ=[EoO|IHzd1!%Yϙ$!6)A+$SK#T3GJ͓cje&K[!nШdR.I^\JyGtWM\>,@WTzWjGط*M݇7[}pN1EonhZJXj6A(6V:KTw7ƜrdY̥b Ua:jߎS];y=)F(DmA _Ix!O~X:?" x4$aJN;7F ,ǔGal*缵0EgֳZE&w᜴#LXSsAirbn:ȦXY:E.Stl>| 'e2I@ok5vԩ AᣉF`Mo-I!?gve4bo4UG p-S c]GA?Bd}R^!y/>7$;-7v BxV4N).њmn6('lӲVID-$DA}S,QN۫dr:M'd]¡&1q @i8 !Cȯ>~M,jɽ躅+N~4W9g%E%u|rXɞAa V[O4}Z BXr{mRmr[cϏ!S_M O%( b**SõaoouTm%oDrx,zve7k5gBZ-lN (zXANӧ}4$N-Iiw}!kPI?"i-V&0Xpc8Bjiք^qff؎?KxPˇC&dZwW5Pѻ,Ϟu%ͱ-]bf!P;9Nf /?h;* Ko|,u%%D@'o=3Đ= 0O\53ցhJ= b\2Td IX"j. v`^,%J S"j=S\OJxd@8|x`̂lؗ_;4 6B.8=P= }5.RFC<{ʩ>*ĶNłrHY Z#1aOLN4Z7X>6_O=ZJP%(o&SK8&C上pu15$q5¡5}+!E)+۠a7Yh9Bťb_ݣ$<+)c|wꉧY&Z15r`ڸfS.ޙr\iȣ@7:*dND>FVWS*S!iy6G1Zt'ZBdg蟫שl.ʯr2/xV5]s*:j3/˶ ( &~Q~Cup2bf~jrn}jEj!!Ɏ*yb-sY?*wX]^)  uI,0!$tnA&(|b LYA\W?Nw$֟C(bByitF[Ӏ4w6c.?o &Ԫ\|40<ӏYMHݷڟu, W 2IȂ9d2VH^fbX݁4 ǂQHǖh]v 7p_t9$φS6 LY7#'@rnGIV؂9t;.xE9e٤lV'ۯF[̂sU ۮdRTLڊEW鶣L)n`%A 1FqX]udT73" XaLZe68ΊI>"EgU?fG]<b M u,(g$. 4!kYn!7\496pv;ШKmώn$[fhݬIrS&с?uo2 YEj@RkVp󠟏IG )jƸ4)ϝ]oVdw:ЊB3bSBQB͈YE7&M J&g2Q1#=BB deQO7K)";rBɡոL j)2K(W:d&e͝ҕQj@JZԛ1!8Irƿt# z֚(`>RVc ~YЍY5Byh% %瀐'0*8Q,~q-YWT_gĬfĜpROh:%y}}pr}WwRD^g_ibшdS/Dq4Z!.g28ײ%7MB #2b'A6JYpRY %CixmOy*ÐRL5 ! V&<چrqYeb]INۤ67Uu=O0 ԛ5K#S$8xA2Iَ5GSQ?{~JLEj,]HnsIjBl"b C]O[*UV/ ̈́)m ʄ\o+4@-h{vZ.Lyג<ܵy(G<QT1x;hp-9#Tą(fKXKjE r.;n_mEEDi\g⽚Ɵn!@+K-AMfq`4F[B0檂;hk.j/8+F;Oq2w~.Q`иC"=t>p iښ 8L='z90KXgFFhUJ:<bV9/G2.9 'ՖER9?t!g܅{B둄H&Ҽ54'ɹ`ڜ9/оT[)RWuxj-A'-e,>%<7,ו̩7ʮtLZ`âK(xϗ⩐-{4ڷ9&c1K3Jd֞YyJ=e-1OYq6u/+rg tTt!K+i9J4BN O)kj ĹgԣvϮ[9}j'  Vu 坎pB2TSy g;"ܰ |q3j-ApU!|%ջW Rp( b5sd.pF 8Z/*`%O2#p2B%E74ݏNv[|2."Z8Vz߼ 6!FW t`LS NQKZ6*=Ed.٦| #M9]*LFDŽhtNyo ՂmmM(fA .?gєTԥmR5hTJ+%6*J|ʿxUzd6E~0Oz΍mjQ*Flf &`O zDičËa0PG=aBe?i*+#PM=":URG1O!Auek8 Qc|2y.jrh) &):?o[PR}"W/؁<9zk6"734YP",J 2\Z9M7c|5l!!o%FI< ū=-8ؑrUqǸq̺;.( b{7,vv(K˖zE< Y;HJf<Ot_s> tׁF pv3Ƴtб@9$Rɿb6+}⠨dBV M7t "ms#[Ev޺av|3B̢Yzh"(QY6 }+J$FDRHG}ƽ;`')~3|.GvlEB8<ʫyA"I7!JDH"MCK9~e[FGgFLBdn2qϴ`"L6@&@vmp9Jݦ9wϸ7VuM1P.,@;_Ϫ-rdj(>=2Z "LG,YJлNWNb>!v| E Ls8zUQ4fP$&]9"=?.$> ] NB(%E=Ü뒌)IԡIa?XHK\>@ܦ+dk4Y~ka4X0~ʑvUt)gV0>YL=Evf.g t/4b%A㺜'T9r&% 3^W,YYDB}㜤N =n=O"A) l!؈jbvUxUsnT{U-qb]ZmsB?i#xCF85E! CJ%EQ/›BMԢazVKÝ1:ܕoϵb-^3QONs|Dh+a1p_]JAFE7Vl0ƹz)?4IwV~"QiF_2uuX٨Ou6D_ [lP  fz ,2"oBwcdRF`hY6>c4 /'\% #؛ jU)o&TuTˆQwOM4 *۟WB#tT/#~I 9SSW7##3`YnB@T=Bߘ(ATe@*{[f&f|t2N?~pw{r[m7?J —Pl )^Q-֝ē mSlկE&X0qM~q)y>RR|6ltDu_APEE5zK9 k`>"Ԭ=6e{y,1G\ϼJ{O(c =X4%j2 }i$ctmdRx{Mٞ$E'"rq^3׷$sQ\eL a4qNۡl!xξ=0ft)vBNeTiCJ픖I* :qoF@ͪI5]I[뚎r9iYrGK汊}E[BB%ğHgMON8Wv)h=P8z< +ry$geo95 ko^bFu?,s&O'bMn-0r:zﻂF5j*2&SImJf{ Թ~GwYU@~Ȑȣ)|U)pXJL913"V]YʵnE3H Yښz&A$`Cf Lm{ dࢶۧLU; D' /d囖nƇzo'Va$Gm lZ Z`bu1-/B S٧mfLB_JzaXݙݓJ>'i&5ea^Vy֤&ч9gU]fIhQUGsKj,T;z2wr /xZ7T{s'meW,:˹կTZdkI:D'd7I ^2dg[M_U"ђ^_BU% :l_/HC2;܎I/!ܯ^ *j*U,|bB{IӜפc1ʢ?{fABKHM~xq)M6 *b7EMb|{e7_ I"):bx L0qoXᕫp]5d v.Dc1U.:@ӯ=g-T ,j8֎\j#`r7YVKEċI U;nVE>Sꓕ:%B~ Pś"T R;B/rgJʞ2jHzBԄA2AB1s[,26W=1ňgz?~#٤$/c DC,,c1&NGiм=[U 6;W? L/` O'zBuНj va}PzDDIKћt"4"wksRaB"_`7Iv+(s O:/>no K;;%?F ӏTD''"ϋSjtީhK臹Dو?V5VJ.W2o()$xvF_b$0c ^-_xUo fJ#X U} EH'l9cAL%f,{)GkYz_) V'Q鋤,OҽVJjuM ԩ8_CCtL K!*tDO5"%"Qh*1[z+5;La?u_lGMr7pmZ5da1ÞُQjI__Q=}&dG:&!\aF N ,Ay7Z79_s_[,\X2#wə_4^bW* A@ H粛v|/Qׂ/-"S.A={VY|#QNB]gO D)/SN1Zm 5rmEŲ)(˫PgDi ئh3Xt;D$L 6΋󷉕:ZNuJvi/KXL!UDTM7U$t%~!o<:D'ͱoէ,5$CҮM~a^;3*9hk5S4*_X^7Ow~5D}r\/]|#4dhoۅ~v.orh›d^Yi{MNv,RRMȒg.5!&*PMG+-5c㖶 #xmh1a-S:X#Fd__5ۛ O!Ե/:`V4?QSYt,Տ{'sB\I/sys@ 騮a1q镅mIwS{GdxeTh('pm,=ϱs%⊿8{$wH w yO-%WiKsPz4H +XٓT^"zFE; F-H: Üz]|,)R1gOqw/jJN/wdωE0:Lٰ0r 6_hr#ߖsMz اC&f<+W 7<v p![M'@SHR%L'Gc1oz@(t 'i 8[ n&yݴb>Z;6Uʾ)"#/JQ;%X"h{8  <#Zib_U#y9Z4B,Z'#bq0uVLJthӪfmo2Ȅ5YaOƳhl!?zgHtZZ9H/|sgf%V:Xs1h:@l'^L%7#dnp5BJB颔dGޑ^&bv%M稇G~JAPHJ\Jm\ ڇWܢc7]L;> dlhKQ+"I&9V|N#SZz|}9Mȣc|+wV3s^8 #B= @QB Ie(z툍k3SS❕fjUЬ#)"B䊟,\_u#fLi;*ބ4{Ą0{llע 0$.fW>Of:Wf{CkH0@SpWJl+*.MÛ!ͻ9mLlh))KVᗦrъԎm%&_OO")$j*:~,78v&yvG! bOWq Pf\N6IkH&4-+]sA28o8˻_ob"&]x6㫴DBm wTZ@`@T\Q9o&( 2<%-nė.Zjd>X#JN;ܥBDF~Mb*R_6H{AUJUh껮s\ՔLp &\8t]Ȑ:tt z7Yl }(Y t)2MO%UfGJ7*w(5o@, &K3t_ >Axip;,w@7[wRj@$,Eȷ6RJGD5g }춽epC/S(LMP21LJ؛۔8ĻwxKN)fn| K\<:Bܸ$W5aX!5m0%BRI)u^tN'c{ _;lxjE弰NYLwDr »`* E:4i/d_bTr%藍 {F:ҏ ILJxh2|_`)JU4ǣEO;EWbe?']v0>]%z )LsI4MVqmAe;zo7O.MDf5x&_Ozn'4EyZuem>xҩXm1ruUge5ܳms'<3e6ZDR?d}%mZrxE2PݳuEMj&j_X:!CUdܒOɧ]搒hud-fH@.8 ʊЎNY'3q"PI^&myJblEDz dr* pˈN=(__عaӚ`zEkn1s| z"R^{qD iޘNfنg+; c&]O=ˋ,B+5pBh:Z>}=$2.rg"3D k#}{f[Ek;9dbzsSJ̷B-8BY'AM$`dWb4Ij2bjnʉ)!6T?&i>R'Ϫ^6w@lܬ t~,=~>$e]DlƼjy$9#˷XU Qҳ wHGh9SJ Qj#\H%wTH-AFw1 +z0:䅐+B{3AjJ [+"Ү|:bnuUӖB߮EPXA୤\Bk 9]LGQ]͒,&CLM'L%ª@b)!D*©KzxWRE"@0RM S|RpyM< + $kb*JS?QSxon4SƊNl4`ńA#@ Lb^G]?)Qٛ ziiއVI^"*q_|?aaq}a'CT.Oʳ&x8eaZ9i-0`᠈樤?@c] 6Zc0M0e)F}P7YZAn7kĵ]PXu7Cx&R0`!a4ڢ; 5vQw" yᏑ2:*v&hpb;pv=fdAχd,a9U6>@raR,TM&x3?Fת[j ;T|'+[7afVdʇJ@@_Lo_sH![4%IV83[#BD"1RJRL})MQ΢< u7'Zyk<Ķhɋ˖yS=Bqކ P"}4a5w}[+&X~TW/3uyf^ήIA~<*+h8V)RDu '˵d-|FEEӏt$Su0QEl@7p M暋 &8s<[/$n-B9ddndGCX~jI dE ˉnctC\AT/~ ٭ "9CHlka\ IyT.m:R5fC ДaEc z0>Vq\*f,ZuUnb1>2S][^X{(ꊭ~Q.l# p I,vmjŀA֊`G*F1lB鿺 I5 ,i"Ž|L2'%@vi篲):Ngc4[-[J r6k:*k p&B._^Ū_к ZqW49,co~NN l'2gjeq$< (BkX^_耞z)W!X %,#DBԸHe!H?LH4ЄС 벝qj Mナ9w)cÈ\YU3x.Q{n%,l{tBBZYS Ulrpq!Tz}`ڿ ox*6*9A$Xe_ŤE0ʉZ?ư]h0СWP* sjPeS }[JL3TxsDU-f'Vel!glO+ʌ/.t9scf')Y ~m`GG:62$⦝mN,;מ,cPǬ*Vyݛĝ8 /.Eq):-h>]ߡ5Bzg ` 0`ӇN.X$2G-mjLCS閗DHLK1R}D-}`kI}i OS̩;VPLiR.UB،emZ #DkђO9.;K5|e4bwUjͫޔD$2x%&-ᄺA/X4&ѽ&s3 j<'ZGoW/":Tʭ /@|0XcϏD+@A%\N#q#0_ރaтtӨ.%W fėzbFv-A0&n4zU7 B:kLK} J6zh `RN,q/8 st+ %4׍4f?"a_G <oK3wiV?!a|؎]:A:kPN-+Nz9rC Á*\m7bAcO \Ȏj L'..eAO,S,ҡB" -L@L&M&xҠoߊfhrI-Ru$E_d >AƀaM!z4.X .xBgMl޿/jPBp't!(+H;K8qXyQZ%i{2@44-*#0Df@X.~HB,PjFpDTC"1Ti6/y.}Eu `0r<4t $ s]٘8"fN{" R?p4F^/x[uAI#2 cNr;/qœJ7c`iˈ@XQ2J7p-C+Oj !/q%6dehCHXr:€sh!nf Uz(6\RCLV%yVUG^ Fu|ڼΎB+ y ^;QY;V83me.Ǔ'"]w Ӗ(\׉3{^i94%l\R%+I ! <h 1B[ut"y^aJ9JNO_{v3(1IDo*U@5B&Q?DWaJG{t8 Rڬڏ?@BJ7npIeT2;w+f;I.o|JZǤ]zeG2 PڡNTĐoʧU9aJ- 3Fb3 $tc&@iKĴ +a DCAEj@DY[Z ]v=Emx$ Kn-GR]!NWlCHᔏ?G7Jc&ɵ= X."H2O1MXj|'Q!aCX7rrn$O[,GvI|؆65Dt넽*[p{RI͇)򐏅@][-$= ;I  d! 8ΐqmymx jy2Ge'u-s7ڡzr0W(eNt @6 6)ͯ\ OyJxHJI^ُeȒGܼ, UKʉ;xh:|9_pvؿm'Dڨd{bLVnA/)p5(ݫޗG9OX,ptrT7CUY w ʩa2ZCq;/R*%Dث72b>|N夗K61LMTߣ6a6z*(E$Ihtb j*}R=p60&Rgl5D/3FPIvktU@~|U:J{VO9vdlW"B9w3:C?)}PMglz %SYȠ+qM]m/UR4*-:h<~+ $:J~­egѿb:^^F 0%:"w>qȥ On{Z06q$&&!Rx)fkT pLF^W_0/DR 4F9"57vD_©e% C" ,ӹbD'.Dc\H]PTڽ$RK5A;n1h8lZYi%M&5zTj1ɖR nGbT_К}XEܵCS),nzZYRFy# gO+Q?M='J5gԤ]*҃ sT`Sء+fi]aTG _\& Nu{utF{ߩqk%Y" a:^ENPt jX~[d[wӆwD_`=H+sQr\8Iq)")g+zMQ/*@k;? gXuT\\ cvNpgc1 ITaAaX' FVP;Sн%.doK¿ rɺ[aր_W|̓Shڴ${$Bzqw v'/]\dS3Ujn֦;cVf.-p~qCF_ܸn9$Zm6_$vNbF,NJ;=2c:,8%T#N"jfL4 I,^HNiq[Pz<0!gH!eFhOJekﵾ4|I<+ͷkXG$$ܭl'JUQjLLo3<O/Ҭc;E}U%҄qt =%u2N4I?1 c}{Ji%dR]ʢ96M@-ߑ^QʾX!RT8S-:fnt^^i󮵿18cTJ"z=hbH0N0A#M3z Ypv ={I!jД2$ф鼋3jRy\etȿF%SdVD]PPS1`'<}{ۼ_velDZ}f261Xd>Hե gD q"Z ( *Q̷R67ކ(}toT%)䢩ЊZ)UVۻ`o:_Rv{!A6pEQEXU(ԝڹKY~)Dߡmcjϋ?0'M`,c"v h:@>HJJ(l+EuC˶vOF$ytM|(Bip"⡂3X֘NKܗSݞ@.yc8m>Zk0"9K_,ZX nJaDhX E0|Yܓn3Oj}P< !cp nL m63$puң<Ԍd|ݗЄjU.\V)H͙;x!'QlV ɥ0[Ss'WI6 ޝ\pڙqL$T)YLMފZZu$']~+U=FX6 rQ@|V[.f2l.najᐞo]'$9yU~MX=IQc2gi:o*ҴZ).C4k7pN1چ)lOa#%pJ֌X#}gjN}QaZfpQl{LK،Rӛ0Y'_`;4I ԤŝQ 8DA8r:"SG~f[C jT^q?ɩ-y%MRD |X㣟>(Cp&̩fz-׈FDL) Ec'uDaRPHm Ղy܅3׭V*U NОvJ.,nt;J$}1/Qb[5W>뤰4v Q@!X_Q PxGxb ArQ<]"0Pog_ j=|Jy:>%Q>$z˂JQa=o}+(Eh/cIRCv0&]X+8 a*_#rM(bV5@ڜ\->)Ν ԇ\=>,qsBY)1L%oy C&,XfW~IS9 `̥"ɡ٭H[{N- V&x7ߝmxkl%mnDet~w )~67;)UXX{%t0*$0q=USp;"a;REh@r2wQmJbT[X-PHr֯fr.UVU9O3%.X#:2*WOJ?yz.S95YEPD$oG|QJ1˒UZMXK+-.܅>{Ns5~h[} h9. cD"`+2lǭ:(@~^*w驖yX TF+eRs${|}і((_L[ˌm q* y9!Uҹ/|maްl`qunW)Ivr{RgYL`*cD!D_| Cv(UvSW(ʗmmzK&9+@QulVϵC_ ^#ltƬaɅ,QA쯬.& DJm7؛R,L0!O^5ұF^m^w_@"hS"SCN.iңtFl6,,jIFfng$e .ccjxiR3[:\jfC_{zM:Fi0GX"g ,wg{O\IjF&,-"8ƒ\" !cGSķZ+%B-W;GX/P9!sw6)R Ѭ">ՇXFdfrdWI[Ix]#)wI0:\?02E||4w0?Zއx:x`ҏyçҡr n̉sD}5) k1e. *^J'iHDpbXDR꤂0%(NB D\&h}KK-,촬2!< IܦG, Adtƿ/|~[$wÄ{얇t0ANiyY,| Qa%jl%Rlipאj 7z=:s3uwTy+򛓱)ٲ/AcQr Q$(R$m /3ȥ7L֓ue&D|^&a*g5N(DYm N :ȀU(/Ole u-$Iɚ0+Oe{n*1p{ZkQS[aU>!X8NookdIEiguLj']%2տ؜u^.Cv@>ѳ!G Ym#6z@֊ \@R!Vh7bנgN^%ٕte>%̫Y񯞍LZp| b}O63L#GwI\HEX2'K|ӯܯ1.[PkިSt:s?F4at_. e[oy8V@kyJӗ. k -;SJyMJ6\x3w~u{z.! N9M.-r/ s&ш]Nz2KnZndLAL p4!#"6xܰ\%UqC<,`0?Vsz&JAPiK, 0^|O(Z*!d+7SKۑ٫R&\S Iްc +E5k C:*o{=ȈCm-4u sBTF`hИθQ.Kd۫Dr)F 9jgax؍,B |e XDcQ> Z(B%s4&c;9L8t& {[J5(N饣 "o+6C CcZ((,o Ο!PC6(UK)np֣X;fʈxFԌY,n A"iL•Ep4u/kXpd\t+e)/q@J2T`P5%-9nD9nUY q#@B$Z-Hp㋱tO&qYeL,d慔ڪ!nrA! 2>HhPOq*HY}%H[p yKQq}j$y+6❩w(nHˎ,|VB%%6I2,z^3:Re‹& }' 9WIkͩ8B"uoEN]~ܛfUCOTA{u}܎ȅ炪Bɤ )hCz7xgpAJۑA^h۷XΩUt[4xo8(Pi+MR-hB]5ezKeqJ 8_G۔/5dؼ2@Zد}`ߞY_N\ h[b|)JC `fcy.À)f.JLӛ7nr(xn<jNA8.sЈzq3#䣜ob#-6'bʈ #pdXV`(LH#+rZ Gn XKK${<&evJq06< KT4yMۙ c-uz޲-7 1Tj0\ /كNikhCt-(h`[ R$j{2 ӷ<|ɔ<]c9#6 j 8 M28>0D =ЩDDDj,S`$1D\=&7n1gA.4R#M%Чdݾ"hTV"t 8ۖ*'XZ/w S ws USͺ~;@Wί7/Ua #"^tC4%&!l|*@$ 93fE$OНl 'qś(!cd}/ʫw@&ı s$^9LKKeP ϰ6\%L2f4\@dط?#L ^ r(S ,Í6^#&,Gz05C3Θ‰V ɪjC& XAr%rA> Uz%qoJ4(}DLQ6QP=(&@;#O ?n<>%Clg5łwUbH?kຄD[ɨi{ zf T R Y~"QM</PQ&3$+T#Id}\/?˅)[Y6s:|"`KƒD30VН dN0JʀQ= `푕-i(-] ,"!uk^JȇJyb/릚0؍`҂LnB _w|jYTDǡ3OX ?'̵t)A/3q]0Y0c_)y1ky~l] o6==_5B:$_-gЇ|xļS01 }[`gx7}i9ڹ'^[ynԘ'5Ԋ-GjV Bj#' 0vllXZJ 8a$1G"J|U}'K2}`v@HD>R4Z{,)OW9Ʒ?Xh}v&TޗR)6ޅŃd崆uU@Q*SGyj=;VdQ2 pq˝bA#6 80Ͳ4'k,kpuX~ y 3"h8$gp= V=c$2KaaLqrT;# Q+UaZo5)t!i^掱ui"3l$W63<: XaK'v%i)2|k-6ubz:3 :LVoPp@ qy6Z6!Ɋq|\YȟxNeyۢUE'$_?R#&'a9(B+XQbe4'mX{f NTGDYuC>#o ?pF5W 9y괚g?$7/RHgd;)\ԊEqs ԐL &WIn&"ȄRIVy 3I)p>n*dpL#qD)x xdU]H{&UtU'wq6H@/灼7la/.ϧL<*eʟMkSzy8m,ʩ^ב gOXщI7#rd´?V<2Y_55lyY8zm@_. yZ^G1tpv}DxNq;hHkpLV":s- ߾ 2W &&_h14JH|̔m! K"'%Ndn0Ni_^*p-K RCb'L@81R~f/<V]6Jǂ_Ŝ@{˾P)%!ԯYD2.M1@ÏL?SWK_8BtpbgH% uƒJIÏe6xd) QpreL.Π}t.-S"fDX?.!/GJtdC^𛣕(J H(߃X_:/>n KQg9{+:Q,3q1#?^!A7~@扸FF(JT#HKxmb-isqqItu"m:X p/t Xo;];5DŽ4 lq%I-XAbzH Qh Q H EFYoz}{{ XKg%gowC.q& >vɮYqC 6~ȋm!c6o8)*rJn ez Q3J<o$^M(#v < ">ʠi5 -- VSL/bL"}DftBq]BW'lK1'Y 1Tlaܭһ eEfbd0thSY+N_O0( U̿Ƭm@4@UU=(UFvw\R-1A'&ȴ1&mǏ_r?C;:MAS̏T՟Ac*ݔ؇r +BlJ3[v `feCoڍsZsމO]>⸂[t(g'''^v,mI#  N3ɢBV7W%F36$AgyR SGJ #8؉L*䌘Cnį-驥iGjPH2FdE`Skd0&$[0yESKuRCY@CE U,*$M䟢y;vW؎.ZÌ r0nbgqJsUw5R\1>fTOC!\ѣgˁR.g2c*颙\"ObVNSyOMvJ*K9"MqC~ TfˌM'g3z[z^8dЛLUYaL- ;.yn9]5؂nʛd j.] Me^oӫYisgVD*"cr)TזMx2?Gy@u8J)4LxEKy"5zx߳RVJR\3UJbYݾCeli]a,~zO2B]7\AQ*nHV)ح>D+EcBMWVr{c( E=*&Y~G|8]!C>>>'rdu8^[Ǯ|"“t0yw?V*$;%1ӈ$9|c$ȓ#~0{Ca '%^kwc󛲹IFV%W5=_ y*h}%r/h$l s|)9 GF"`| `j\FbFz`HDHˑItTz~ś\D:zO3EHrbͅub"֕"i7eyuUQjey N-9~&1K#'9EzhFF,v۪+sżxqXN^FT {ϕ_usZ1'O;R]Jb#HF)oE a5cڷDzﵓB[_lRgMnoK*z Hdw4P z .svRCڷ`@*^ubaKx,UGNDѹr'5Qg. :KaUo3ױ ʦ$GIE;|~8+e8SiNq:2z 0REpsy˿<b3=Mڒ:em2/αo[qJ>u )T򠡼 n"\5)^u^3+RGGy dcRYm9>]cqZ=!ќMf5B5&;v)rkN,M]7m]fUw ܼA\lIŦϠV$ISqym /Rkte;% xR`ȼ2Z5$hCBOV YExg$JY$ݷ#n)@bVԂi2.t7Itm˕5xExC]9.bZSXKtt,iQ9Y ~PIIfݻXMmދKgON ]_9 1[m+^,%!Bt]: Y2dWBh}ȓլ[S4ji<\+(2hsP!@j^+F>RZsT%KwkEz ڏT}?0IO;/mB N{s$٥eCRU?z%W/F8$pW6ս qA \UQ|cwf}-bq{h$c9>M"jsD̗˴g/lTHa'- +c+  ]nB|w:I.wWc?v@+0HA#,`lUR 27fb47$3k+HIuv6d ůƶKH\EV!dfGyώCLُ%eպ?N=W`C:d$1pAF4 T${ RR[>+[׬-(Ttnԧ^a[1CgIW _f"ifus'G!#}Ĭ-T%G' φqQ`S?0azKI91A◈sA%zbTG] ȕyfD)5q!]AӖx xͱ"N4ӻmF S 0X!yifq$:y"K  r0wQ RJ$.: O~ϾcS6EߪI#Y3- o@+ afĴN+yēqj ˝ۃ[4 ؍t A5fĨ>`& Fi_;ȡ޸K*R"dS˳%7]AVL- >BG}^ս@% rKX~nj[9l("k+]){8‘̓>ToXY"[-A5s/yz+ab4TTkkq։]_)o̸]@Ɍ\_K+Z ;ʨ`D.l. <\ZFxQ!m3gGʍM6tc \ 0b$/IpnL" FJ JJԣ ).' )" '; 2)prnP9dj0aS e' _`h;{틸`{BbIA*4>y$9^6*F̚hZQEQi<#Pw\@,,Ntrfɚ4HEKcMϛiH3$} C^sW#! h|Y~oy?" "lE\6> q ;0WeFp`Byx1QkrP4M$X_ZCdSL6NWˡz)a};mRu3<ږjtX }3_Qв$3l;֧FX˅svVn$ڊHG & -ǏY#O`GS'&lΈEny[tQ2eKUc|,-1O5JVL%Er>p(8Rg"*w`EvḺDF%'-.$Kc^3ާHrfGhMVfWqE-E""ⷲᾇK1q 0$M[N:>7Q @X2[A@bQTJ< Q`Iڃ}eq 4jmW{ B-`- {5ɨð]!26RHAU=n7I҆9B -ɳДw'vNeCE$1bm܊vw3GH)&x[KMkCVڑS(j4eRB~$9dgL7̤e2ރLCWsN( EMGk*Lw-_ٿ@i?p`z !$iK@iCD**6eZ 5Ĕ?ɠR"uRUl|J5*XA51!15l:404ETei\"4O/C0'4bbRf`C?A>b 7}3J ƀS>JXwHwɉ'= 0 SyuuYRM)IHS1͜MuArx ]3[ 0 $J58[] Аu;DșIMAOB A(8RRlHeg-vfƘ5LiRRh.@07E!L\]<+*)Ǧb `C+O&JbX罇rS@HUK?! AIX:m7*ha6+ Fp񬂳Lw  里Я-K@BY Td>j,µ>,%Ӓg2??xCna B{4)j rZ`eYGW5 L=YbǗF?V[/Qo#,eßM NęҔ7Rt4BÞL( &܃i;ahLCNNA ҝ2A,{>R>H;14쿖oX`I|4J0HJ02N[}g"CzO-WJBºEe]WcW\2$ Ei7{zg(J2*|Tg8\/p,.l[uz @uE6.be_WZYJ-OFRD>>AqT.!b[jl BA{oĈ} (!aJP䱦nTHd,b^Y#Q.ȇd&,f-8X矱 ѠX#K:!m̆z(+'}=Ƚ6:ZwCۗե1at eh".q\ܜŶO"a9ڱgpF( h(T9b$C w)&}!aBF)u(C~|.$`b˽HR-q䓋U_b00$7d}=m36]D 'Q5W{"Qs P93f^oD?FֺwBx'0Omj3fݕiȂS ;fw8$ )ΘRI짼zr|dʰyF[FpE_!WE0fdk.LΕ b.2a?7m6%fzD{gu(@s%n '}, wUPca#m*%>R r ^QGlps'cX!p2Fw9k &rl%- uY}q5tK$S]_JUG'JJ65EsP LVsPI^՟zbp%G Y͇'`) } (> -ՍAEL-v\C]b6/YNo򕄹3A*>NѴt]??0DHce&SD"n`|/w73p,#(n Da"p,b~Gt(C' e5L!."0yF՗ͻ8{:H$-2"8vs"M#6ΠA_#r YT[:EF);[.ǐn-S+οH ܎`H_ɤ!M!_'x%, !-'xb"C~CRRa-2`GYH$^ٸDIM8YM#p3&߶v6ah\ВpAgc]VhU jSzȩ//hgU b(^6Us\OSMAW}P"Z"0& y˔.NyI[: qF/lI,JN*,N1+1)D,TC" IxKhl s<`aa [m$q[BWHwŰ3Tpq`ClgBVbΖP2cm"t[꺂h з\\:jIbfjgXДFաI JE,BD&՝Ӭb3,~eUx1/q`GP - ؼRd 0و-S\ЇXuaNykn٨JGc" $R"3a]e^+1r(1r``:T?Rx73P6cXjgo%@R?zNYV]ZMXB-;sGJ+Z,S(t+ 2s CWJS7M. =oMȚD8b]ĵWT.!Cu4~X0 l1sYWd'fPb喥l6& KD\lW^>Lq!k!\< jbhb0Ґaک%Ѵsuf+G3z6nv)Y]Z>Y GHDK.7}sųC?5 q2z (kIC4 #wveKG ͋̍),uD Tw@ Z$hU7-(\VD$t3JfmIָqq[IV5®iߊ[E@:M@,ÒDha?793{s2;iqz:OwqNMH_/^%orj *lAqUG~yD@K'WxžFwDNrPrJYI qFP$ JGU4fPu9踐P˷״(&{l]p^Y1Pu}&;ts7FL ayGPmg =rУ4pJǢ a+`ےBv"%d*HJP/;TDKMTȈ?}zYA{-kQzEɸ܋’YCJ3=Xlj>썺F% }$LԐ&,q'8sAEу%ed h1@o@IUFNO!672.NhE0"bXSj pبLbZ~Zr܉ k{]"bvhaEs$QT57:F^MZ 1͂PM?[tDPB/#b6CSWVHިE^C PG̻{OL1qWmX*츂銑_A ]r<d }{#8m>fa!2F^]/LA3BwR#;Y<9(kCR'9={NYb.4"m=N,^Yv2$hftz.~%~(I,WuİK9o!mvA'22HsƸ/2&b'ZNxk2LTu6N3~m vW>tG!3i}\` 9;=~4g08Ƥg)(HU[.Aqq߳|ZY{JP 0w-^63޲0=Pa ׊X.|0ʿ)I͌4L6Q5cYL`^0 ;+3'Kc\uM?'p婝B(>wT fHiF!%2V Uh$[κ-z&f* l#t3s|}'ggyl%́ʩyt`}ʴΦ-2Md9F*HagC!uLDgp.c1bESt=i{2Luyu[FIapG¾iw,s0X=ҁ0܍ml;m!vkt h69]sh#˲j5g6,-,; a*_P6$%T*3 Ŕ[rzAyC6 "QGn}p#d ~K%tSgE%G9ThU&" Ʒ$˙U^b_ i4,}!$6Ҽ i}:*NNj^%BmĜ5PddtdR 8[ɍur $ B;5iڠӥDyP:CH z@bs$BT̟ l$w&5b,^ H5OږLӴtQH+gx[QMRs=mxE a:\&z:_dn hyr\寱",BA4`!Ӝ:gmI!"? H_=^δQ :Pzp_&SŌN0|ͅXG>U n5X3}eЊ  hߒ $!G 1-uG?rJi0Ge!H?-Ȝ/s>#c)D!UӢjoQkzEQ$SFp™n3WapmșHhE)[9rGS`rN Dg䬍ݛ#f:`E'ܹc>Ϗrвb1,U$*\ ?+)r" ~RKSQX0P.= #q2b[#.ʃ cYB0TqZjT)[XSP X@R%k";HQ)ݦL{¾ZhZ8yZƱ'hA(w> oK<ŋA!O0|y8BsиLfґTES!=?g'GG:MSجg(hUf"PQa5lZ[⵭=ToE&uY1qF1xYa(9kJ1n~HK FBk6bKsb# j_*-"QW퉔Lo!!;YQ.kY ~`O iqZQ:S'NPVfj6OBav8bByHlf{;'KOp=g[y"ˣÒmwN"RfVMҦ)8CHT1D+r_"oWfO||3$noL2__s&PLw_(62~‰ #ɜԖ#2Q^I?$ݎ9nbR S!D$qjk7v}b< B_V53RQh߀2cqr K#H6JRM^FI5 v2 h4DB(cI5ePhInkf, y˻եaOUD04f)Tu ?)^#fNB1'JH)AIFt=d)sKu- 4,wm9 Ev+"V4-(/DztBX]c KIȪ.q4j7UM~ - $g%?Q(AdbT+n> +w"~Aؚ%v =a]{)ሙR c12+hےy"VITDF'J̼"Ffh5B *Z덨5 ̦9V?ɠ[9,aN{K+l6ebJBVf'!aީ.AljV5?!^A/+7A'W 8y|zdɛVZTZ FLWA$|&B>lQ$(@lF0'bSꈱ2g$b*QgYK!# C WBh$:jHt ~6\0bTkhlv$Ba `HXjDŨ,±-`TF|Fw ,2|eC$;y>F8E10 :[=G~^>#oްAȠ!g>Dr+^$vۑ[RO R:X;>#)G2ִtȭi p+<-n*]B 6 WPű 4i倒6Ls4ɂHF  7 ˊ2XnXLU?=4C[lhZ$ 'xkGҞIz(br} cf/\/ql|K1R4AjAB,mƟ_'%[Be[DV7z0^y>PTj)}+r ^{ԙɪ&/Tc!%quŰk(e(nz)$B[|7Ulg#9 !y:g.5_D|ƼZMhMN 0 #:$4sHK/o{z(.u#$y4=@<&Xc ămx8㼢lXPM /;-znKUĿGS֛e*i[Qy zړX"[%:BY(5~ v]u8;-$`A˥M!oQ&̿%න<afig,?Ѱq YsSODQSI0d-1Saf6N&Ǚt'Q!{=Y-B٦Ttk-OU5,XU췙K_ Ht5 fBZޭBfz:^C:yb&`b{⍰|H3s)'JUo5͍H"fح >4Y|wP=L7gZ(:i͖Ü[nzXhw2mJs}t6׼W:G*\fL4+[چ4nDXYPjQj7a>. $EKp|.+EP;+\Mgpς CH1M![T*5N5Zc~O޳K~^Cn{ 3E2Geqs~Q!ǩ uJ7NĢbzUtc/'ebNi>f BZ"Slh>dtv#"E(>);.Y<$}<.rʟ5[ھeuv$aCӨs%rMjԎ:l҉*]mv䇻9mXr'pm|@c>Q|GZ%Jӗ(4 $Y t5p>܅b0C jV BtTLA [P~tD+iJs BXѤҾBwl@ QF8VŻ(072ŧmLx*S >#!/ɵIH1~V,U̗KJ8KG.5G^N]xTI "qrmhgi||hv뵮Ѻ.Ga ŵ4^7O?w͹* ):l}ע%-ˮGɒSK؏W5Ͻ.Шs:%>҃,xu혣,P1τ T"oˣqJmP#r2дۈ\4쫍L&N[O!NkxRgDUP6S4P|<3h>C~:&D*qL*iߦ2.GNc,Ea8U>Z8됚6T+v$!v4kj %.P-Loԫ5ѸW֩A%Z6*T) U7TTNmdWQux_.Rh[ӿtY..^ThO^C0Okv Sx%^fwAs6|d֬欢eȾِC|zj]뙯] C#>ċ'P$q^,Om4bO3&?(ۓE2\вt{$jY5:Wwt/O[.Z ") ũ ܳTI[382yRF_5^LaŃ~ͨY.Vp8jd2j oV,:қyR|VUbP`y(# B8OhmBՠpVmftإJCGu$+SNP'ӄrJOM!gJ/PqMsMeܽ2c$IGE>ATɣWtD:5EXȸ։'<k5&JM-6qqF>~ )A,[Ea˹itI5J>ranR71H]CD$=ED`_- 'Y/I;܀GwTvgr4 >IA:Sˊ@b݈ =]1reb ċ? U#2 mL]4*-0Rg''gw .M{ {o#^&hJ֖%W,ęb쪹D,J֮8v/UV_ i@gZBOzqU' iqKjҀe1?R~Rњ?$czGU؜YoR?Qm|U sD7>h~p+ jdOݛfr} j@hkHH`l.JVPbiڸp/cɐR>VXc)NkZv~k,x֒Ar^+{}(>=ݮ]qCFѮnrXnB@ *4^|3 LFByHiNz$۾L@`T?~HE7Rƾ˴:"EwZpWZZHuto^Uϧs52pYB njy-仒B*҃tWnq)G渋&\F3Ҙ1Q#w%K.4^b)tO{:uT C#4G(HWFj = O|5dT"=>8Э6to4IlTY4JUVr/qYwLR&O\n:Ŭ/ONgzЃc~?Ňp- hrVD`\1ݧI-0V̢m]RЛ(.ڱj2B{$iv%9Tv]7mךx\s]҅Y_oזTZw6j&j j ϫyM/!\,)*&+lCHxuB7yQq)ĝgyqeqFu; 6< `H;sJ,WR6 ='|2ډx^ !X:ޭ'deX\{tpdQg1@C1ތ?S0|Y).;= $mK' -ˮ&arz@u&zzWQQcgFtIWe{:њcFY~fvXGm醕u&rFմ xѤ]G1,JWA'&{AOjwr._CH,֗4`~zU7nj!OR*'ÐZ %˔f$6Q.&V,].flrR9,F?Yvg%"5;L"ߐtDEo}3]Veg{>f4EQkvXOfSg9:I*fjo5h|ԯ£.Up;"RZ#6tPV Z~(Z<} ? 5G+tCJÚ䌂T7.̲͠uk>#)~\ivke/Z>;[>5T(Ob֊> k%_lGZ 4h(qB?j:e;p2?]%[Rު ~,[m="!d|W w39li/%Է/ YۥR8E>uX?K5!8ܛ_:gC0{sWz SLy(/yC[ǵT鎂 ^LH V-td0133sŇ4CV + J*y,fȺxJ+crZiO2[K1 `eAoJ @0w4B5j)\~(v'VcyKlQ;0[C^ٴ!A̺C*0X +۝ȑ<RLA{ 2.N"7h}%6fva{Vj3wda? `ߚP=rz- <m@ g掆:6ZOJUϩ"#VXiEޡhD;X*![1 m{׭B ͸a%$RExcdCO"씱[ 9Ȋ:#|ܲM֒_ϧI3)ܲd sxE#,SCb/"6C%[vSF=a1 l+i8 g54!&Yek2\+գ!&M.d|!Ǣ&M,2pW nЩ#TB<" JZhm1<2lFZ'REOᇆ)@-1 #.a o!IBtF'xQ&RXQCH)N,"updJOxk ͻrU_]JgRJokMM"-U uNe}$qdUܠDe  - H:JWXT *,Œ o,e:($_./ȁ"ggc`G\_ߗk\ !Np`┎6UmC"/C`z-E(U_+DŹ`Wm L?쾀~n0 Ja,P`&aTg MayN"2yuI h@ L/:Ӆ1X$¼%D?|Gx͓4s#5Ƞ8%Lp#4eҰx.C4F܊3I`Dpoh(B@DF%P-PDK5?`D'4BޚQ0pdhW&SԢeU2DI)\5֝C9apVY6xݠ `+A 5G[uTC&٪#IiLNf+o  eGœѢiH R7ghAUee(b(qcf4ؓ}t )Gu){\ldW~p@iƚ437J^`lYN{i1UMr[>{E'AZm%f"x_ r)ݶ C ǂIjuCo(DY:̨*h\EH.!BTrS^2(sŶLU\zih\76lf7?ioɠij$ j@zs- F0ASy?^[lONK6) !NvTUmIQBE|at3ˈ wP(CtIP+Zп)R٣l1>qgL;F&ܔbG 60drLHYT`nuly5[ڦR Pc[ Hv3&k>طC&/Vx;~pȁ*/9ȣUk} FSؘĬ@X/TQDlRb@>f A|eHq.2oMOH8*W4Dס6OUۧM 7b-wv],݃b6٢.6q.(I:د҃SADOjo h>G.E CXB퓖ta "hJJe8Q/fh 0#dE;Y"=WYZ!eT!-?X#q՝"HǗk:)}D/. _~6MK^1F A<#* fP(Rl4)ƄA\&PGg=xpȴ> \T4[OSrCvT N2(1uBh͆"Tg9wńV;:)I:c^d9yyLz觾E!㳦';+tRKWnŵZ#;#^i%> 2{= U_?t5lO99Y8`Ɠ(#wj4JB" 0*&c6_ܞuuKmb/Ș(KGSrj.HVӑEM}Gbw?׍@Ri6@S&dnU@ u%K-0 ~tav1 Sׄ!S[$IS {At/ s^ sy=қdzF@h)#'ĚBGD ZybYSf7jEjMdW]xh,4p_켠=Kni[&ޢܙm][n%&@3Ҧ/:y1Ypw5[ Ш)?/5N#u\Q01edYD[a^M2ɱ7h'kͪ2T#(B %0%ɍU=q*a?]v;ͨ&kC7*LیٱjSԖ c9.;^sֵF0b'=VȚDIT IjKByOU\+2N14< $y}ЌHo) pR$e{P@Vr!EvX.QΉAGwgi]|,1rdo ~]7<;V [^Ojp[( /Æ 8E 54Nk򯭖Gj|B:Qm/tVItJSf '-(l D$܈#p[Yii[$k)WuEGEa#.!QWk>M96sbœ]XAʭkTB')(7kȒ@ ȶN[O uGIvc9mgvŬ!0J+E1oOg @.վ!^G UQ[AJGi?iaY{mOG{ fUco5~řrr%L>0H! z^t8'AJz6 x]djT:_^ Μ̴jņNPKp}@O2q^F^CXe]^y㞤@!Ah3e}UGR\b$ T_s`/̗z3d݅з)ॻT!#2DY25 q\(V O$52.4 Xd,Ϥ=%#7TIL ч^.` ËI;|>*Q3\Lg <N;a%٬?ׄ*[V~)?ձxjOLfȶO)Ɯ< !u3̌ꅏu765zEfIz9tF (^u"2,6@=V]o £%0gjYgknڶB<_G;01T/b?6z?i9I cX} cJikCb槃BqFx!a$o(ιWWfݧr⤪M-i^5PˋvJLZtb!M]-Ț->s摊̣PGE!klџz6/^T'<43YʥB3}Cк_o.Mwn #Ȅf8* choҏg!Ow-DLo2і\VM]mޒ3>X3#G z=[ $7E#~K,ׯǸEpu !+D +6S y7- xJ N_1Tq?hXe2xsTi~uKa3 l4)+.OF՗5CLj Fv#`zSt)-~4vH 9Ҕy/3K)jzVdv\ sx,KOMARj_lQyXuҥrT3B.&N3竖  d%k_ВFa`lw?'oQf!飝ܟ8b:3V,0 WjTJv T Ae\F>j"7/߲(6+ǓCf E҅INʐkm 5\3y/HoD2]UWAVPGUeICd,κ HradE=.eA;~Yc6 ƣ|P?g'0_ 6/B*^"*ɴ޸C[rЅmOrfVpWV"G5M?"őF#< *U`s+Ԩޝ1RlW#*%gJ-Ԙ2'_jIQ_w$ PߐPSOԢ#4خX"/!6-CJ5d kՎALǸзs5xZ8VQիБ[|5ՔrmZ!l/h=tuTzzȖmg]+E>zR8l&_":_蚂w36LbKEs3(]LƬcB@};T9N#ZdO8Y_z>!4GymfM1Ĥ3~mt29trHfR7"M/G!ZR>$ ́^(EA\f 9_mQ6FW #y,zX$-2dZʕ+#U|%G޸XG ]Aإၑ^0/ Qjމ mUbTi%Bbnw^{PpVhLKr,)׵7AXY%Z$V~ǭ3?;A4|Hw&w0MLs^[A֌@ (:OBHNxuReOg[vT)1[F!%ٴ%,B~Yc.UB;9QLO'9qڻKBnG^b^x@ƍvJF"!I{E$9Є|Zrp"tJs!| k(i~Ā#`rUԲOaw#QޱO0 fy}h%aM&$: :\5O&VV%ĂvZу˹:I%璜Jߨ= -TI+tU@̤`69eeDwJW!meswJwDK>9fu{>\ B0珅4脭YU)|{ÈgK?ulNet*Ph-ǯA>7J5*U1 LVCQ^J}ց>V`MmDch`pbUQGm.Co ʖK7̴4MBI|Id o;wo^)d3<)U]3FdҚE8|}gLHPjWJEڮ.VvB}Y%CAlײ\!Χk&KqҐU_McS߭b9B7L|}CU+CUqlahu|kA$օwoU߬ rGi= jyߟ8 j|rD?RWXqO5;mQ ڍwJ]؍UhB_(A'a[;ϱm:FYZ"yD*yezhMI^65z!s{z+v S+SV'\9,m7]Jß2aÉÅ*^}>KM[ JәAR^o6ن|TVڮx<)wL-mKU&1ah]H^q* qr3dz +OKx)Rm.ҲK#TͷQ$\#I:+tO֑(eBٹJ=zedQ2ggc>]9J<%w +Fց_/;MA$\CN']KJpܕ i_7]+eFw s`ay38"'-o~K"HHMcȋygcK~'޾K#[pe;ke!#cOH"LDbuG7Gǯ={gЭiQ?Kȟ-sddV쾩j~ ݊=OHj Ɂ9_ڈn\$ !-Z/3߃X :!O2_8S}xjz޴-&Su:OܦCi2ؓ~ =xT3ޅtdroc UR.q%Wh>e-ʶ嵮o;͟rk-+L<@zKOWV@u7d "R==5yWTfEsg.m{}7)dF%2J.t4tآ tmDLV#$^:Yᒕ"9?ujFJ'^ʓdJ! \Bs+I>Ml7|k-ȵ,,WFmͦqfj {rA{wfCny DIM8i߶.AyЁQ+ILU}-/!1"*G$x:ФgJЮY\;9lwu_CÓs r S{,dZ`}%MFG.?\:'yjK}t;CK>\Ra<̱tN8̄si zc7(d~9Q8IA,( ?P兴!LfCFDt&x\P55'* #Db8@L7:)<+H绁❋+B2[T0:y |aQ+)@8O?Bk&)+TEi:S# !Il|k=vG#;  Ltদ|HZh a8eQϿ# O`Ng`H*k IT@[ ? C2Ⱥ +oT9$1}xX*$H4*93㜕"3 7߬[S,WIg@:ߝW(ҟݙ  " ]$jFGQ]D; !-VGpD+@/@*Iܮ`<2Q<,%I$fd@!%|Uk4Lt¸`!(mGFaqˀ$ T2 c]A+~F(1 O|:$g=m l#E,p":9(Jk8=f*PCtQ 9A^ 7"MTrA6zxMK:=euR9G#3C!G1 BDTD^v3dT%q:UP9qeH忂Af̖D2뿑&u$2=yHFk3 OCs7jb[ HdLOCQ@ dGڄ`f$4N`&L&/w8."ps0(Zr>y(ye~|9s⇤:,AcJA=[L$U'\E BbI%/2[JecD1iuҵ"AYi%,@zJqO:tR<2уȺI! caELe$&Ur! Ib$d(Q$%_l0-:>9F!UKUfq `5H`Qg"Fœ,܏+KK H$f* (nG_!?tn${%aQ*NJ,0H#1": ȩ%cJ/5/WکF<;&%XVWb u(梡 O QVldMO2hhȊdc0), ,d}GBk"G|)u8p9XdDQM[4=BhhT_9cLewՑ(*HN9?Q("Ԡ=>LvbYc,̈!S f1TAqJ-8poZ>J) `~`1w`ql!jmTR D j AP3On~# v7m|qxm\:@; ch0NV}1L8ǡЂ}]ȎbFO qr}dE}p"j,.&pYIe9#4{@ mHX#_>Bc3 b@-fVq sQ"lh5CZ,,-#0x$<&&#+VU3ۉ(QcPƶRZ`)Y JK8E˒w{4 9b@Qu+\'̤tuK#xt (%bwT*0JLh(?Ov;O*xPj eT$qT u Ndat6sPmѬQRዙ(p#5롃bH\3(1ɽl23iLo;,!XyeO}9B&@IROB>)꓁&"%U,7 }IeN eS/EN(KuT9LB-3ʮܦtv{$* !O)h*!,pw#8ϣ.*ʣbWWnł8yg d@X/Ws&ĚfNglHd8JG _R9uL - V輬.hq Bl+đrH~1 Ȩh%o.dJ0]B~vZdv%K-E#E2׆(WSpDrښ6/a'!鄈'JEhG$ ȡ8Iaq 4R%մ,%U,VCauk*ݔJ<tG>""hGȎ Ye%Nvh a@5!;Q!H:'")u1':X(]q Țz!Lʒ,)m )ٓ^6t)V3gIA?GBm !2:?3򩏐#Q .DJ[&`; 'Djhg\P  Ii ~S%0/auq?gTѸ_I baJ'<5:Yq.&[jj0Q(vt G,Oq\ahVjSOQ诐<{aڄC@ ,j}{tq3[=/B|ŭ$wӞxjE(T#lk2\,j KmF)cA<&G'$Iw 5b S[\g+: }5Մ@`=pY0zCGI{ LK 9b MqsԞE*.c޴yQ"vY5)':xPb\Y5NIB`V0gr"tDPv\:Eb" *KQ|'o1u뫛*8Χ*cbY יJT}ۧ?܂ H'ւ+SI y.?siW^n7s^*1"ا 1&@vȆ &ڤ Eyql-!"[eeU\fFM_+ߛL8.E |V""Gd+f=l^^q]/4EHq{QtA$ou*ցIsQeAӖۺ:2i{L 2'om-I*'рy4BI.϶(t"¢Ơ$ bUcquCY6kdHπI}w$v);]3XǭN3`bkw`;2J+6QHHlWI8L5~[vk|N%rf( Jʤ!trbPcUIManu`\ŮL- RyZfyZ@qso]9AG_~_0\tΎVI?oi`2&p' LRXPۺsvyѢ D6]sHhU0ۭRx,z̦ύ$E"UH˭u M,=Źk8J/Sjg3 ..A/dmbgAr9!hH*%T$r[@䁵k kACWGf\(;{b'f(i)|:PJɪk]߸!s&w_*U5|5V/7Dm r s4?p_7'K_V6Tu6aJ"Eb <07p7ma3*Ef܉ fit$n3U;$.Iob&h)ӻ7ht)146Q@c\/O**jD mGB39}nejhFÌvVPm(J3e{y@D2*;b!-K!ۋ tBU#eƩ"F,+^TBu,$DMS~3[ԛ735NMK)z HgR%`qF0!'D1H`0W13G FGj>%9X4jRŋ%tR.:jR\`K7"݌|ȋc7tIH5\R3GVq2oO 4/\+T D4ca+BĄo'KQ0 SqTTpeh4.aF#u 7nVȸC[Ʀ;z}E%a#c+Ž9g^\!9>\H =XD䩁qp.`D7\6!\3 LS\U^I#ahMq)Ŝ1 zRfcY3k6V( ɋot-$)2aFK^rK9! kꢚC_>0qO#G6zPl ؄e"vTp4ՉIfXP"ЎLytҁE6d rS2r/2kh 6.5U!o$C"4]6A07UJg>|43NRcRfL.0#m<Ё2|dw?F%'>W^]<\ptǵ1E fQ7F$7f6dE ~/T5 =j /{J p=MnUF=ߎxj ZkaqJkDiŰZL3aJZmi/ uLgUXvKO_:nPX.ʝnwKZuzFָw 'RȖk exav52,M#?6~띌1uK0 ox@i]v&\qNDqn_Z̄ %;_"Tt[{A5YLo(ꉛ_hQ,}Y J %%%%} z81Ӂ* HDKjLpJ?u+2&Z (:C2.Ǽ4W:Ўղ67Ka 鞆J-H `BIcCWYCPCkS¶EQZ/HgCfWO`5 ?L';:-FI'~4=Խ U-UOI_Y,ܼB]r+6EJeeT?[ &R%SMR$RG&^ۋ3=ՙc)5hPe90X. qؤD`'=ZgFX*leq& ʑI$zKRBLG7i?f)sJx<0C1U$.i: %M7Y]lB͊h`GgOW/%YJbӷV,xQTjejiF*Qau iV]٤ lmZ(u;] D6I*5H-sTpkQK̜/DOWdauEلQN]̵%~akF +KOQqj@glۘ1>Goѣ8Jl;_ ŒRkh*W4°.dVCC8=rHר٬w>24:+,@QBXĕr=ks:BB& C@A9!3\9 ^Kυbmi^7R,mk~H,02;ez>n$]hAzbs !>gu,zK)̲X`43DŽÎEoD.}P%'A̖jj]+h(;[@;? c [Hޤ\=QNacj{cG,pU̺ &MPYYt@$JZ]S܀1u-u~J/#̡il}|cUnXFAjieӈxA2eј+\/rxޟJa?4)"ׁQi_:7ѓWQ4#a+ O/p#<{t g@ =,]GܥbS‰(C2XV_gW[\¢蝾SyCQlڻӹP8ԧaACdIQU"QeNr|f1D=O\ /`6LIn%32QdspjD񕔫Y-> EW,R!džr2ݗWgOD:pkc[OPJSJSSsf䔈z`@`;NH6+'.^'3%CCiRtjr9!-k<(N!Tby'!@Wi_+.( KaQݍ'2 }]3i*dްX'.^ýH`JILK2u y)3ޕzqGS?PeJ h7ш]+H[tVGJB?y2͏>I Wxm_|ɉ/,{4(I}x圪X%5W9sÌ>8򲾉}K{rd]zqUKgŞqiQ%I<2};ڝP +4y6Igrs?_# XO`  〨ԵtGpflITno7ytN's6ƙ|z^=o8z.o 袊VHؼ@"`tdssQO1u$K`AT`lYeW̏ fW&&ii1+̔D)f+0y 2ʺ: ~{gŃ2ʒҍ<ۿdCY*;f_uO$*bJ$U;6]Waa_:2Z.\OҧY*l䥥TqP @(X nI-Ⱦv7p&X//g[(f.]'QCUpLh[|E~QQ~`Ьk #CJIX(f[֎AtKrm:%e2+&aLzH(?##Y*IFz8U1BR=ZbSE$Z}<6$*ʽs~,j Z ՞(?(_b=+4zZ/vDʔg=uɈx(c63)At{r)SlU+a遵 8-fwI򋘎ط}Hb&O ƂrOe \|~/R ]Ljb:4JDhFh\"k!dSو;ddr~00hf~Y-vqyyvUb"3D3ׅypR~Oj%pM8cTU++rO nhRK\" qK|hْ\*Ğ &:! E]gZ5tޱaU3AW`QAߜ%6P6O݁" ,"An`+ 4Rfsۖɡ䣿Lwh5/EGb\W䚴*JNfEkˌfhNS$V_'˦at`ܒȥwZd]&0OlG-dT7B<%zitଋ:Mg>5z/륤HҠO,piDr{W&4a{}D}ϼDme.F%^缌T(&O,{%*,UIk=7 ~:^գbZ5{) KsR[9vH/ ݗ)F9&s^3r)ġJ$}[^-J 6ԽmŌDs$"\F lQ:7dX(LA'ɍŕL[V/ 916X.ݼtZЫ$)ǯD,غ!¥ .GA9 MUyuҘ86 dO«κ r>+i$nu~뼔ez9Rm.Ţ0DJd(E%$O>bBh;>~!VE#6.fYEښHᩙ3Mz//υqagN̮ cRqʤ$$DKd,,t'HVuȁ$Nt[~2&[UmTЧV2wY%͔|w!^TS*6/]Ph&oo~Yƙ`Q/[%k$"K)V` sE306iHG~޻ a1Jtkd-FOB-6)fػz If呞7YxªLe-iW~۳ *ULVY6)bkRHuDh]EЏ&/'1]NC2e&Ube)cDҚ(?ZxX3]B#2S"O"[g'm%|$ULT(4+w;̓O=+YlS"5afALE3||טjHūڅwLҐO šUr8э5HtaoaV(QCa6T ֥.:Q)f%JNa`5Ii6oy(>/@\򮺊L޸^}+H]Bn*4ހSґW+,5D̓QR)CdFҿ%(vv&FWZg-'qVώ,?gɡy$u4y?eғ--.DLrulB%#zILoc+K"3qguhi ^6hPE29^I*塩!r> Zj!)4qHNW~KTxȄ xY L ,}b<|( h67_c+rIBG\0DjQ:wgf#Qehz+3OQq- ) ƒ^ְ[+$̫)[*oU)tl\0oxw=njT`ˆ9ȕMqU7\+^‰t9=l>237ek9p7si/| bFd'G]]ǃpOzzօ-Ap8y|0{63^/&pg.lBzp}x w`p ( 4 ̛1^|x7svQD RbaLa:[P=l|_9/agvya#Hax  ZF >FOCҮĥ!@2:= % >@ҧ+ V 0uq}P!+srGf ̥o@1BF#@X.W a8lRb"Ѣ e& )T{;vs^'%#9iT"!!!4% M-Ph츢r`{'LR̵3ddcdSD"'cA B>)WMSUaP!r!~1=LN-<@ +1&7FaW ?-V@CC@>- o^&<< EzKinX >K9V9$PcΈAhs4.Ũu|p$ZQz61 rl Q5ssf`&\afv`K `!CaI@ 5H߂}BTQu &1`:IYEcd=$F-%a7Ă .iQPաxCsxg+<dHT `U->%SW:iM0@PVᯨDeL/fuHOKiU"& _ A]6jU"8)}P + K _l|(`ftXttzHXR,^Ƌ5Yr#@"nŠ 8a[#cEЋ62eۇF 9bј@ƌR55 #4QU.Ȁ!<ġ P .t1-"ЊVGBF {?o.x'rf=9P;J=,.y{zz/X5ATâH]=3BbࠊV._UW Pz65oaXYGQgih0*dTR'儅v 9R!XoKЌr(/|\ܶ?N22]F0tς$}MaĭJ܉i^Gd)&aʚ 6WX*™\0B>LG׈zPW?)rqH@+9<ħkKxMnI@v)Uzjtnd{^[*蕰rFܘd⢡K!9Ls"QRBeuT|cBRRTq mɓ@Dz3ĄhmT99bO/8Шn+TL C#' %v#ؘn\@spE 0L@Nh&,NQ%ЧR#duX¬?LFG)^_s{92qrk/j#H!̖hL6ʯy"͟i.c%ԗ- >y+yX`̥= TEB/`1ͺu\2OO Vr4dE!jrBM>Vv+Q 44Fķc``dꘆ,&Єk$ap n,Η@Znp{Bw[Qk١4իW)d Nh(853Jf@.Ჱ"QYd΍O&PKrl4E -ptc$mgqG"bcCj _*3Bc55>4Y Ew$D<;@qMł.TxQ80iFD\S\͌:j|:Pש@潇Y s I2Uh>P(sJzY56Faoи: OViF Jթb,+S>Oc'x| $@\pfi?&f#1;fKX/ ~zw]$MeJBv+8p]: m95odY@ Kg4Re:;' VR$91\NzD!ҟ.x9w%ttcA,&}pVΡYİB\:XV ǣ&rJEw\Dhɤ0q#1i (AT#).Ո-v8Od؎5Y!dHqPq|"[t0-DV"[[rRʳ%yH?|T4) vMLa>)8fvn8dB0Lpޗ~/ zol t~5n<ĠجP ^^Ve ]A~L!לY F>XdpsXJ@{iZWcHs TrIB#* ӂFfT>_;p$c=H/VKB6Օd(Tfҽ!f oK["BAj)88QuSߓ$Iܦ;ݏ_ qH1} 2:Jܜ' ΊԮņIiq|k̫.%1AQ+Bʿ'^f{MBZ^i&E#_G'b<=@}(5@rBE4$y b&7Zn|bF2Q@-ǂ_` cf}j4X+JrrÏnmY&=p&,ipK @*&?;$"DLȑ$H6\k>Jɯe,BdU!p@C!tuSiv2.Q\^O@!+QP氛۷*T؉VUOD+{{?bB(^x-N9xq\)" F! 'SNgS{Z#䣨 !GE&1EI5E+M͋90=TFič-rd cn!zE+7Va5PBIuyˇ%$K=%.2媧ƈ ƩG塤c))0z7 =5V7EM Z@԰Z%*c0Zj$I (~Ӂ{,)Y A0e#4xU~uFU=5//0/7|%> V:ԖŪbB@D:9eZFa{t]F^jRT"1aZu rC{z/ ^HQS^w)o$!!rl'YJR.Z!=8&c )'Xp\ůj ٤AYDMgP_#؅UF^IŽ.1vt۬ } q7u㖪P gcL*±sx&\ g q M @PUK:B^v $7A瓤LLbFO̬[T6)Ra3oLNꇱmFա?a-k1YZJ)A#eS6!HF<] KKSLV^%'37ɓTrWog?΅: QY=B7Y41E_ךk!CrǬ80'\Y U6x`X!'쀃DRĩkR4ZC/ 6 eH?/}Uc9(@JT%IS .xےHbQlq ū[ ![Ѣ k/HСI4JJC7'(~v M//i٦h[X b -h@+#Gɧvc_wkW.6*X8lnp-?oA#'MuנU19 ?- բ(+[;5 f /MQlDߍ5 c}Hӷ("1sյj}F:?1ef|g,fEx .SGw~܏RêF и%nȶqXcDBy-՜npYqT*k֦+y><@y jIdjqBx l# ONP[ 'Rvz̸#dS2EpTǛDv=}:O oELHvk~6t_qЭ`n^z Lg]GeNO-.~a\l2=\lTfo$OI nHHco,CzI:Qk,R&z '2dvK| е3-"}fdNXDD2No=$(·L%zr(uм.orTQ oL4I̘.'uxҟӋ\l*[8!CBz+;n1 OƼ[*#_,˴x !Kdd"6G^lj-Tϵ; 6&JתfLZ$fI!OtlHFq` a-Votei7xEt\f:mDP[e]O;5V1d&!"N(0StF\|hr  D3|lĆmSSZ0YZ!/_;2'DT ?[px6״AqUŌԶ%/SksZ%`ّqEiLp,Z)_BB#Z/F 0lzmM~@u|4D:33B@l#Kբv*ℤ"> ?D5?q˻)p/h-NMAfL0R C{e y@ijYU!Ȝ"hV)"ۏP,HR.V켝#@vĪ F^I(D[A~GگҨIpdM_uoܲAG%[eW z"F EUzhRrdfLqH/ex\PI*wޖyɘ%60uk.4p;%vVhLD 5qC':a.NIwIѝWl5U >jt&[TP1RP@#98UV4#3D[ jvlۆEW JK$Ie{a[k 2Ԙ8/4 @3o><`HTBd[aܲ1`yG#'1GbPԓ4?I Q`z*%PNj2Mh{%E>=|5)/&6j׹^W$KKhk:΄ axƬ#udUUI< Us{}/@_KOf7R g IE\RnwmӰ,͝%FMFцq% Jآ섃*)&4&A:D,(A)?vx M)p2f P4+PHF{(R{9,"3 tb>XqehG zLu&ȈB)#] EKY-l*B{&\t52{ʸ躔 'OdWAi+K.^k\/K8hD\To1WMH2&NJaWC==f|FUYxUEtxZq+TTUm5JyȕWbec3dBFĚ"noEުwnt `>),vlW7,#f{~jFxAT=_ۼ#%dzZ%cRdԋОW:I} )E8U*OV4lb ,fAiFD7GInY9tͷY ~Y58ɺQJEJJ4 7V"Ԟ1:2wBܒAgȶgZF*J5sJc*8 0zHQnUKJ).se-@+&7"S7PY{vW͡eo}hN|kJ?+y_%kaFg,IUIWP(yi%-^QL* V"hK)¿##^狊f`CpDeJ(˷Å.Ww9T4X5(-29Z4D{:f8v-Q|E(Ю&}:)Vtʐ9\Hk>-BCxLdQz&Z|1TJt+^MM_$Z*^Y#98΢R% hɻ풧BI*3D9e{h\$ ɼ^cLDۮUDT_4RXB ;*T{|0 #Jyz 9F|j)K򱥜.{ VW;bW,Y39Չ8C[IYx*wuΆs}buNKG .AKWN j=P-]D鲄IF#v{cGΥǮQl+]CHNș/< w"CZܪX!$1dmڲFvą d '%}]{.vWm޴J ;Dl34+MUGRd6}%_xetep[SѷHuJ̒ԍ]ͱ4VtD:|g@\Q„dNBq9JS1ac3fY A)rJJ5 IN-ewn.ERzCCj6<]^KJGذLʾL5uvzWRYNUc)T>ԏ0izkoCWT8%#DB sR̎ :.SP*vʙZL#r[W&Ϲ0i)BZ&YB뉖1Y KZA#XQj*&XTVOj%Br~C4|T?7jv\( j__݋ &ꪽMTCo7%Y܎t'[R5Lh)ZuFS]VDRf^QsԶ]j)$?ӘjbN:\YJµ0Pg0&*2͒#}?ɧDȏ[XJIN܂LQID(u.PN2prYi~qRdd.njh鍳.z{zbyȮϕ L)Mmh!!K8GX_;e / K청R :Gc(tDmD!mIuBw,4ZJmמ\XVMIŬ%Lng4ED=Uv QڿKMyz8ٶ\:c'qX&$$~]jJTɰ X Sv@TedZ'8 ٲjbg* X(VES[gO&%% ?_6TRyzW6BҘHN(<^WԡFW/ D:yITvJ2K$zή)(,γ<4S߽-ߺ33L 6Wz xVa5Ʉ(*5ݬ;Z@Y7+&EVcZ(b񺦓II#u!Y-ymܷ3HQW~wITYoI)JvWT KvbH#$tE;(R>?v?Hqe9nXdߔ[Ͱ9]ؚE8NJ"G]oQգ~VMWRXhJc|Rcy/KZYkKlbʵ궅Nd1m> eRn;N R0b-5&tn_?}E4~B ,jo9o&Lj+ Z2(.+ >"8 QK&=&Cd* XQdV@轇Bcj'e!!Codf#Y*hzbc&8T}Յ47͑HCHٵLT$0 x#f)۟x )zrShD7E^g9)0@Pbdi-$J2ׂ"\'LmlYX}2:Cd B?`ûlagXas$Dd&K LF8&$pVA6CT'GB QB:&9j#cMqLYߪTsEE225%rNIXDA]v*MeQdx^ `E S;48KW3h#0[jgv)CD _`os:jeQC J) Rx 4\) 6Al+>$,TDwԭ*{K 6Q{V)JB(t* 4@TEEԨߜ hMEՁ 4H;ύ~FtOc"m!eE}&ZVxQȂ*a 2ֵs Zљꇶl{DOU=,nmַ3a=$Cjٗ.\PD@ɂҝM\LKc( GC+Q{B[ dO3D%XJ$\n(A_ y>^D5@AFsw6 :>UN(&Q"gN{ok7NŦlȈC\:0e.Cv"!qP6>؀hϴpf5(9.)7X$`DL`fD,/A 0mbKHHk7*#6dS_kJir&БUYcrdrhN q (n /` (ajEoP3OI#.P bFgW5ϋ+Pa٨c5J6.*(d6CE%,,R^;xTXPy* D@\À#Lh<^ Yc$?{eMpMb1qmcHgܱ! b[] BN@~VAČT‹&$qqĔQȂ3?M{ P&Mv4Nz'ZV;ʅLyS,͔d.\\"*TIM4h@DKr]1(>SȺJNd|@9sղEhH9<uj MYL@iF}JI Lo$15ɞmaLwI݃$~p P5hӛ>P$.lM9n/ ӭw \0) T+"oĨlD!Dr8%@.qrLKrD7(uar$F)^4063(l-SPj|, *mVKohB#GZD!jN 3}?ؔJYd:P.غqX:\v#0l!!c7L@$"\_oLϚXE!dߜtOO1Ue,Oz*wI@] ڮ]_obĝ#ڽP(c\gL?ݹusy0".zTVZZ|LYm?7Kz FI?`Qs_4QB̞`FxV˄91,oe% (ab'P0!*MD){:iUhnYBµ'Tɇ-c[& 'PY EVT@c%EVBeeM&T@8ضqd&"/V> F{t)Cd90Ƕ-c[+ZDLaNj (,  3\J(-kSر"V1AuqNVضpe`J3l\&A0j/l&x EVT)JR(-`~=lTzUcT71>`j|*0eJR1*R 1O LtNyF{t = JR&U'ųPߏЫ)JRЫT|b{b O8Ō eF' Yoщ2*radž&VɅkZֵ>'W< DOJ0Ƕ- O*8U*Rɕ(-*PXp-+c"xTzU{b@Rs eJR Q@(wq҆=PT YǷCdSnɕܻҌ8͓kQ{d§-*Pߣ1c>xL>V=R)JR 1N#0e|8cV Onɕܻ{ޔaǷJP1-cpT oьbxF 3\8<$-vJPXǠD/|jq9¬o+l&9Q U\+Z1=P߄Sn)JR7> 9rab{b&U`ʆ>F1=cŲ4*ɏ"xYR)JR's*ʔ(l+Zֵ8b'ʜF'JR^c1On&=.s*qP[8Ų4xEp*P[8<"VT)Ac c0eF1Ol[82T܊lDv$(§kQ{dlQV8SrQ)JR> &8Cd.0b{f'ʜ="9s*1cAʔ¬J   gT6Lyų*'\aZ\܊0Njg^0jq`~0eDų`dZ{t(-U)JR1cS*ʔ oel7.aZ^L*q20'&VsÈ"cȞ(-*PߏlX¬R0eJc LTp4xJ:cS"-1dʂ=*eC~Njg2 ǷJ&V0'J+Q{g9zQ&8Cdʛ8lʔ¬R71On7>F1҂V1V O8Ųe|=dʛ{ҌqOn](ɅkQsr$ xLC~ {ޏD/lT'oelaPqlR@O8Ҕ7'JRۥ(-A"0eC~=ljeXU 1=~kZֵj/c 1F1c1N#1Ҕ7"| {t7'-`ʆ JR)JR1R2LoьOn6L8JP߄ZF"|kSJc򵨽7"qOc1b{tR@X2pSpT)JRc1-NjdjeXUeF1+Z1c1DS)Cd.l(Ʌj.0N=c1DÏ l+Sn 1Ҕ)JRAUcSV 1cO8 jp'ʋ9FҌVjq1b{t)JR1cʰeC~O1>pT¬J g2)JcضF¬c)Cd/l90j/l9sT'JR(l+ZF1+S1j/lT oьb{t7>T'8U p!lj|V1R)JR(ojq1cɕ(oщҔF1c1cضq*R)Cd§,6 1=P߄S)C~9¬`[80eC~b{t(oьOlXU 'oE푹w(µ8E9L+Z^rac> &8b'ۥ)C~b{f{tA*c1cS9s *R)Al)JP[8ld&8Ojq8aOnǷAlT(-R(-`ʔ52R{t(oщҔ)Al2F1Ҕ)C~b{t(oьc>T\aZֵkS 1Ҕ 1Ol[80eJ g1c0eJR eضqc1c)JRǠ eJR(oǷJPߣ >V=#1jq1+ZֵcJ52Pߣ1ҔDlLz U`ʔ`ʔ)JR 1cۡF1=R'ʜF1DZ֢zQ=PߣۥeAlT)JP[&T)J dʔ(-RU* g2 1b{t(oьOnqR)J'{g&jq1[g&E휘T1b'ֵkQ{dµ8c'JR(,b| `ʔ7'-c05>cT)JR)JP؅y4 XH< $@II$I$,4  @H@HI I$ $H<$I$ I$I$II$I$H@I i$II$dI@I$II$@I$ I$ X<HH,,HyH<,H@I$I$ XIII$@HI$I I II Y$ HI P I$I$I$I$$y$ $I$I$II Y$4y I@, $4I$ $,y$I III$I Id4I$I YHI$I$$$I$4,ddH@dI$y$ I H<`i$I I$I @p,HI$I Y$I$I $I$ $ I$HI$ $@I$I$,II$I$H@II Y i$,H<H<(iI$I I$I PI$$$@I$I$@I H89%?bWHq<lO,vry]QW֘8) &Y 0izaqaMbš1pVG#T:}0ddթ.?2Ex*Pdw+ߔ:jup^ t$u:L4M |u(?VIՑ~!b7<+ФL8NMvgv:+5n+:(FUTA#UV}ڊV)XO:~a;MA}3)> 1|/z6D+@UNw}nyn? '|>.Gm39&aGD7ʊ+3ϡ8 3~[Nq~~ծיO`Nn``a_|'^` c.ç|^S]_Ͷ~vݼm8Ra`UUx0oRvRiÖڛMұr6ǵŵYߗ>B—solG^ ka& H%l,j!41\ 3 [@# a+hfr ls}-(I¯+4LFgKẝ$^i?-Wm_; 7 uҡe1 1Ç@?)Z~'OXy'M4|wd:;%B?)d||uGzreLe'6 Xk;,Z>O#KS B5$s *+_%ELdz9Dr5t_vW=LL'O7j^<؁D2d(\eXNjHULAut+̄KL%~.C]oRۗ4GXu=?}39nj͵~6 )`TTXXNB@,~'΁5=EZCE@(\(怴nꁕSK7,+ N&$FïO,|y}u Z1rJ/ޕd&$BNNX?ZuHs^EV |{R xrZշZ&d@8W]_īt`I  JE#k5f"'Lu#wuXZH" 6ZE!KhԿmt8W'>*pUI+U9v D0nM-bi[]MVяŖͳ)NG-*&[DW|ȕ 'T-UV/_"E:&'E7OO# Uy}RHiYM}1 2x&kGJ ?ջ (FóRC* Hڡb/Hψ&01Z3F^{2D,RU%M"G@AU]G p3i\Љ~9tgRlӛ_+B[+(O Þ./FF>=uY@#36BJ5I@/M)s5 Zm)3΀W2"%O\fU'}rx0134jcGD~SDȔ0Aۯ~?`]d_8,Md f'Nh\oX{(Ie֬2VDhqKn^]GE^,)kfchg1n=b ռF0n &䉋4M9l$W'G7i!@ی;pC/P:u Kd[0"dy@eמO2UnlG -&jWX(G *>f֤nE(4O<(lU/ds4M94ib퀷FISUbܫ2H]L$К䬋LJ(xW办ܴ̃Qt\vw4SM"E .DoAHkTG90`uQ2d]ռ8ߣ6Ek'L wm:?K' +UFҔs Q}8do{Xd^( EhN7^Dن5g\̭Je-*-,Oa ԳYlk<mТ/t!h!g49pjw3GV5te() ݨikt NvD &5Jo ٟT9R-iaBr(GǥV7j)O K,[+j[5[:Le4Dn$Lgg]XNt@R͒^E5hxơ3 WUɀO:YwHPY2I nx rsf4mPR\;.ˇ;K6g9&ŵ)t9 RMX >_)e$-ҽUKp,@U/ʦ2.,a"AaY@;%L%w#<ȈpWߌ-`'fZxҌ"h$@i~9mC | wIT)Tq_s>@jC *(a" NGyʴjWE+>ClVh/W~e+)ALr=a,9+k-]xZapG.e 3D#=O6Ǩl"‡Rf}7]w/td!tp=gӀBP[Ud09D&B4g J36wnMu&T2[DqI/!im\ce@c)>D{o=;͡og*LZJB{2 a94O=5xBu<Yn>QT- ՕO1v.2dNh螟TAa*x)dn% 2I@w4_[q؁o,#W8ûn{cdUQfMn%H^YD~%,!8jV}_<*:6l ós*~` B W(2mڝSDC^(;ߏBي8KIw)nZcGwxG5~$W"{b:D. /SX ScϯG%$pYœ1yHrZ0,,F.1f Csߥs{)1=<;.oTQlj?Θ|LI'62qEa_]f~j 6 .H֏+?>;%xAytC}E=*x4|ws#xlPLaڈUZiKf!OŰF4m[|ǢA-+&"DK;W2֠gzQԖmVnO1nEha@z%,TK |'ʑ.l%oA~s"A1+kGY5TEA(@Z~6e9Q@RZF/Zyr11ZsKv;~˛>OT``޽Cށ/Y)lVX!:1^7+ nzO$8?"dou@,HmBU;(֝ȣrs (YlbXCq+M!s̋hXkd5Bٶ*5v4] eInk/4}oW䯃pGW%8 wW=p11WJDwwIRJfcSimR4D 1@Hj\khȽWcGJ2N:fZbF93xxD" verkDIn̵mPDɄ *</(!Lau:Us0'eO/旖OXHSxf5U{j#-ɴl@$ŢBX0v4,x MfHBp=eBbn>Krl!?x;# ?JB J!JI BXT% ڼ]s[@615 U.L`}".5Vz@R}FI(=u\5`,/̲ngt v8WDpmj`N ,t3Y)'ޗDvָ{E";DȢen%/tbeB|Հ|A"H#d;5H^a8{N8'xuZ7q_O4U(:JFY)]*߄9+!& YQd}[ToGLbMQv)ecQQEBzedA'!A+/L-+Js*cdvZ坄5ceA62r 8401@FImL.`m|y:`_M ɔ>&~>_t_U,Q1Uj1Trb)|fq@ 3 8+-؞cbRo&Y'4]]4u1Sɾ=]& _۟C`Hupʸci'N`yCLyb"N5d?A$tO6dFt_){7S*|@=7:ٮKpSjhhh6(_XS N-'oDo!8yK/ (_W xA$8?n@PVkqE%weAaPyE:8̏kgNKUnp^RpEkOߦ}'u3 4Pٸi1PZau +Y|!/t&0viLcy $T}B'lGXA:Z,MQjҰ[Ö'<[hN$"+hE, G ilבe2ROG&ë԰m)ipTpat\DnˑzL aĚ#s5F 7C'?*8Oz%c >UD&ػH xCwqίuR@#o#ζfd@ A&Xz A |l[f((c]=I-k9[˷ <讳 ϭ y$倛so  .)jXg=P0A`c߂HA_~N%eC)F Ѯ&5E;b{"1(S,c]*IJzQl [QHqYpCȣnth-r&Io2|x;Rrp`%4h5⺎45R;D~946)jx=9Fzn|79e+SnADwHءO9T^1抝DaFTB6EwNVy<$ЎOϧmn`ygY;R _E&'XjpELTIs&I!gy_fKB/F- Z׃eA6a2:Bvf2]Iv]B{HB jCADIh+= q6@Q6n(# 3y;q~"8 jct Q~d-!|nIݪC&tAHz5lC$\keZIl!81pm\퐢uSt$W` s%xm/ +@xsa%_VaA}2/Ku?cQn@|Ke&v鉶 9l:b8Z.ITvw4 ]Ek)B_x@qxd}~Qg̼͠6*SlI*7v> RHeN0|:5|n:F'8N/_OP>SwCCr(AF,`A_ 4[+RJfO-[ KH1=,Ix+n.ēvFmn3ws=퀸Q|;myyOFkc;.P8]dW;V`[tH3YHW{?9,׃k@ K^҇-Eʗ 65 FV!ˍGǑ?`v8"ln0Ʈ]H~PXQMGBhiHaNx d"vk^V%xHaGVG"Ю\E!*s]f;e<(8LF@Rdz8}!ҳbAm||ڵ $JW̤K"Qfͅt iF&uIn.%݋ŢM mY0h0:X_4 !"rT}}1!"Qf ʺ'_4=#  HD7'z ,z`]lnP91ވȮi\A#%!ƾzxg Vb(>zi&e%LaEi@D|EsI ecC2AIIжk&Zj/:%iVNx$Ai=P#8"!mfS{ _[#$n~PX>3|y"$D5HаX} W'p䄛h|nIKXNP1"۫aSGpP7<+u s] a$ʸAkiu'E^Tջ+ӼP7g`;VOPd,rLL0~%0+&KUx_zROGNK30 J B {B˭ jd!uF 8l?mw\cX G*!r5*Mfĺ>غxT#U/\JYhib}Jl zf1V:&O"q2k7*rO"7$Z(5lNW? /á[`-D  D*]>B5+se&g3³'_Ti^W#:OEX>L{B8!lx6so8yi<-,BI_S"H$j|jR܀K6*3Z E;kD d)@mlU |#Jzl{Y~th`uoHP,q%[W` PX {GEOGGínpsbACLu %,H?cbvPRsr$HƟ{`R~Iㅿ&ًd\Dˏ4N6Ct'\`GoXAe?'ևWo6&`"ȐܹKxhwf$QDS[ =5Ω'C{.ھBK2IKʉٸ^!j*McXi=uU4+BM$DRKAXmb܋?{MA u-. 6+5G)cI'Nӓ@#hf3ۂ:,'|x` I c(*$(#"tΓNAB!`sXӄ#]Ƙ~= Ϟ}{)B/ cr ͤ" |4,7&ܷ볞Hp[$vǵOe գOBpWu k5/Y)f #v!4$J5f߭Rlϟ0DfL3YO6!ֆ4 -yr9n!]`o` (.%~VPM7hB:g63Cѱ__\#@Ad/,XKE44Vh(D`b_Xۘ{f@3cа"7gMDױa!eZ\Ie4,ߏnt7Ip!wT%Fj,Ӝ{XL+Eب_+WPp 8jPgʈ)/oP}B<^ {'=0D)Og2% }IH&}(=RQg"̢(QiV-G䪚EM2 2fmc[AQepe;i q)J_0Q"߄,{wu!HHD("˶}.ޕp C4g,ulh-hg %veqc0&wK,Kbd6PWWBȼ!IlX prpC\Ϧ&[PUJ?d|dS0(ְԹi>؉~= "ӛ.K ew k 6BS\$dNtmsžQf,V$&h5Z{Vz,NE҆saZ:y/'0ldɸ:7ˊW:kѧHL,c(^ԅ] ~ůx :"!h^zMOi?IDAh:vKάO9F%^"xSOŝGIa߉3JL\s0+b ,KNخ[&"P9'#-xt&E-t9s^8~¯Tn }> Wrqg klקc .&&]Q9_tos$FN(Rc^ l,+4RG!m.Vz>ӿ}H Շ Ep$M%+3P#U H?0Z _uWzu6t÷[keT]59|Yke6:22,%胘Ld>,*%j͈j RK8iޱ QsuEZsw8uZo3 GGv)U:CV-+C8J 6X%0.4TQડ~ Tu7m"BP0|~w|So`5X#Y;SM`dUaSM@'嘔^aq\'ʹF@#3摫f'&V,qMm}YƦwBo y9~i5o8$6f]H7XѽPCs,-rYx KTT=LHتhB ZCF\@“CSg~'0Tb-ĂáJf/qAGE8n֋prO[gw5^AKdpZP-j@I>6:Tzƒ'D\֙neOq8V$ !bsH9Z%<\dC¾u/ :Z:UiԵ*rla_,][U핇jo=- NKFFI;"B$"aYTVDkvD0T\հVzsIƲ&A FUV>Y)!t݃RHqʿ$gTilF A"VfPyu]%t94PU9oO&cdJWva{! Q)q)G s6O1Kt<1)"{F;"c1`Zv$R-YDkOng@ռsKSy9#ip ad|SX'l?TK4}]'>>3蟴2 c GbMJC1{mNAk5d֨v/֦ávK`)P v0Ig#l clgѐqlS v\9h4NC T'UWFIm.($W ( דtxr&=c8:ҷ[!Y*'GP4)J߫Q  *:>հK''ZY5;֘jw.8N\BDQX[͓=Ҍy zFu? R(i\R)}hF.:_lj %S+fjqBeT2٦['{j~Ft@CPXh`ëbRM]$AXIсTKs{XAƅV']jO ]b0pl@ h'cnƝY|CH$.XTbs*iPR <\PI&wA]-f͗.GB9fL40$j 75U5d&ϝ yc8=*+-E$l90\RA_Fx++FPȉ)N -'޽P"PN/)J]ᜦ`9O k#{MiljǦ7#&Je$kDCJh\BD&d_ 9{7wpq 7˕Ik~k%>.qim|t!,Oذ ˹W%5ƙ7 F~9'8,0Rd_&^tkf^S^^a)L?:HqUȚ8dx nB$J }x@wiGi(e#v攜WCc̱D=ћu<,νpZ»NE% ]orb3Vꋤ$ , w\`[gĊ]*y xc _ΕǸJfMofPC66@wp Z\x_v3¡xn-5S]=c|.2ȥ,l$ؚCwQ>tO$bM礟8~ot2$ؚtVS*[aA7hc/9cD!ݓ3zAAZF@ӮK(;=f$ 5'҄~ H1J}VeeQWZTMh2#9/v| %n5PK\ވI L^grҎq,L?drFkj = &D3xx%쐾d\G_C]Jv9r9ۄI@ӚSN8hMqgCwV əD fjwq9ǔP5\''}4-ZlJC˜~  BUԧɖ-p0кQ.qiPV~DIGPD'Q:8V 3 uE.f/wmG`(`PF??*$|}6ё SRS0-.t4C`nâ up AM68v.$C3VAc\h!~kv(Ӗ%ik$@J}NY0rĨIF͉"03u;sX(lEya8g%Di>D\bBs~LsAFHP.Ă)&VtlRq"ku^pmߟ #ZT!uϔU$$ٺz[U(wd*AbBtq<4(D1ܬ>e ՙN/8d_J"Fp7K#PC㨖?T1䍪9mӞ??܃Am#oO`zDe0VJEBLfrˈ)l_ #A/+1{qVDƖHUɩn;{vnGd(YP$BtcxJ%|<%)=UFSŎo =Z dqq]ߋ^trebq>K?v~G c87Ď?]}1M촹D"AfceO|'U5r뱻+H)6ZSY>E6(\Kq;lekiBH_h܎I3]QMEpYAP/ȉ8$gwl#ΕSwr24!ݑ [ >ݢC2 ϪRDtJų%x8G/j`?.d2Md=M'TIpȗb&uBK!>T ǩɯJ&“Qx9rmΚMՖG!@d aRB~U7-\Ϧ.,d6 R/>/ +ܥ阍+mRvFuY#I薒lgJD!a]0'I 9"k5ДrvuX g\o寶Rcs רS Rg'"d}h:6B Q`Ē8xB|Qh& 1fŸ/~[p\k $zA$__w5l7,\U]eO|u,D=7Φ&Aq0ZĠ5O|S[,v^="{mx!($&< &˚-oOEy-ym/J-*5[ǎN X5ac2KDxqk6ir2*ɑ{ȿ7zvh ]*/+&+x)H:*zDB${R7ԃOޔFyK)tb/MvduvT@-$OR̬4<[_«>S)R"r" .*UBF d@%}ܳGޱ^v-wmWGz.ROWv|B/Beh!bɛmh>Mc(x.Q7[P*!V5DQ9k,m@bs|t=ǖYʼwQ~T.YzmT (D$+&$E֢-k#sZs2$n$8j g\bpJ jeS d袷)BœQJiy佑*_.քdyK_Uji'C[+ϫ1_ޙLt^Cgn}m.enGiC˶\Ύ6J)ʥ g=ߏ3|ئɻ8S%plZwE lytzD WatJ%L|J' pM.@GU3=P MgH9Wȼ^HՕލ ]ԋ-jne+HK*2V ۅ93kӡ&wB!ďi894nl$ $O2K>kq.u$,8h,Kͷt2C뷪ST5DHcSSʯãa*TfuTgLa2>ɩ90hŵT|xS]cT,[O0%/kJ-ug-W%̟YrhKk "5A^O iK}nL2^p촩>ɤ PK_~R%[|ki3@"{bҮD8'D>K>s`STD%5WƢʏV BZMDLY8)gPG:$TN`~>&GjtD>eܶ`_-_->Њ"t,1WYo%xDfJD#4V {ڭ^Bd0:h# Fi͖Ϧ/iٺ,稽Qd^셥W7ICF$hӅ챫CW_@ u%ku M3$%آUd6W\ :Ǐ,Lm%/.s#1Ɏe mdDޅIc&nɵ}D"tc{}$..,hHm إA,`))eB(vDd!?3-zݎX3"Up(RǪ7K,`ths?1=kvB/RAL2QMjx]Іg1Vu}BXbWԴ/[w*%bwF< #/|6lr'y4"Gy"'졛ʪPґ?ͥMYH۞m^OreWHh法L٠ $\<o0 >COS֒q=ߑ?y/!;!w3 lv!i-YWdUuU|&Skokk\l~V:kKI}. InR z̒q'YgU掙Ѷ51CE!ƾΪIdX9ߪ.td,t]8sS'9jGh7,AP>l25kWO~X"]T%7WwSM񕸓4Uj__3$" sI?I}[ 4go},j"M^?iQMU33]Tzªի젍2x / b'm dMRXex)S+^ĴGn9Wo0KYD 8\ޛ$Y?-\+# x4@u;NqWC,U1@ć#0ݝ Cb-O^tAX|]_f]"c>%NaOeHUJ$0>fwb*݀VM45x6kZ3..6pcї2[_'3QǿaGX1r105 K's*7KB^pd&nʾ-W4LNߊ68=[~e^z"HNJ'D<̊(8ʨp^K0|`YK]D^sӓt|yKQ"g1C`x (I(9fO<^3]:7+dx_zc>pձdmjP}R4"GJк3A`ez<|ţ]N+i&s\8pP:d*sMbZB4+qpS\|51q9{qGѠ`;)A;5w^bKE4 iLg|Cm[*NyD @I Ȃ0yH!z',sOHrD+O<ַ;q,UD .Y}+Tv)$g<۽>Z'V$%P~ $*૒CplkrMVV5sqqf/JP?3Wy笷+M:R|bӗ!\ e+dK#[툧(Z%XUc}sh|@+\VtrW6"ݣZIY{z4Z{ФU\ 8M/:(!S9Lū +qK-.1s6!/9\V]۳̈nFK}~>bs>KdV}߿$%w]k De8>+2}}p[WZ#ai贄nB]u"Ex*hN/ b)pAvM<ۖ-{\°Zuz ݲʍUg[R_/^,~uPAٍPVD}iɗ)ƠX%U3 xNW{#9i ˿g-}jUAGi[8lI(ۥWԻ7Y|2RnFfggpuez.-[D=d;%~qt]w8C̡駂:@8Yݚg\{xoRZCGsr!Svj'8d8A`zL}D ch7GZ{'-ުJJQW1b(`lt߹1R T϶jg2Q"~ǝ?g 넙VC"u[/4*tVl(rx Vy>DDaU?lgƼ]W :P!V8)yi$%!_Sb ᬲx{YLX/G2.4&-+^VP|wOjTKo&r+e{GTU9sZX0rȷ9C"`Փy:bS0@: QgPXXu)ݘXzt+]ZBڠzr*򢦡vBmT 9,Z _(Rɾ\"!氌@C a< @Yu4 V]<"])FNkeiǖ6N\[>C&%L = NH{"u'|nZ#s(izD:ST % WgnN\5쏑هAof-ݸ{XA[-;{Ô;p*t}Hcvg8S9"FBmZD][Y&RMJ:͚puoD\:Pr@߳dV?pUP"PsQŽ >,pޒ" Hn8c -`P(Vb]́>"F N ƲMzY+N\g޵ ]y1eSۖᔟ:,阭=)KZ[m' [$h{b!=g/ ʡ8\%j=ywwz " ib5 ȍ1*VW"9/9+ &Jc))'F9c0DmQM}Ϻyj::VΣ^5YI3Ά{4=2A5/W.:e׃Rk(@X} qqGBVa;@:#.٬qYr>^{%}"<%FET]]2M5-^ fM@!M9Bl>!I/z/v>?Rkp={P$f:Z30^}v+'Y:OBT_:Ғʅ R))eQZReʴ'5>ȃ:,\6~ihZ$D=4ܙX7)= rmTuj`R :8IL^=8T@ +@XSg|,$TTE !ܚ ]~wBL3yFW͇3Q_˯b 5:2){A(£3%*RlLh "آ#n H++$"/+895/GA" P[@7*%uO oh "@ 4i`ŭ1 bm 8ނ9:7k.x\-p?ܲϡ,vpo^L袂QڳF40BY˷^WLxWñҥK- CҐc2CXaoZ-kn+ZZp} ׻Wcjh }`d XJ<V`14$PAB.B|P%p2EAN^4j?8XOZW˜qd!6pʂ}JR'{$/t ӊ?ɡ8hwٿpp@yQ4P_i*iЉΞǫJ .,WGc:i1}j/\L_AitD|C|G:w\H?!FKs(:k+VU-F[bUE8QX&l>d~v%R'}ef/-S` 2 R[*gPOIʡ :|n|rZygHեYY'F`jrzg5Jۅ5͂6S=obPa⣯C8-URv> wQӇM=RῊxét/h,z"@Orn@CJ6. #\\f'ZC# 0%5M+bE9d.rIvW;f$3 #3(5aY8oe-Yg.$Vb &Y5RA0 J =-l#F@ ]QAU,ʸJ9W^PMFbdqLa #F4aAjW. OE{*>5)D)P4F$Fzx6> @8cqyD0B7kD0"l?UܒІzFKR{T1TR^VX`&Dx?#F= z 8<9 DL}ѭ.y)EʸK\b:efa@e1F\/Y`LnbZpqX/#+lqK 49]MQ1*3od ӅISK h@+k_)0ypi.gzaAp͉^8D&3n% 5$Jr% H3 *cVbjF3qx-r^~trv)G8\A8xUKFHQp+j.{*E36&ZR|%N]e'pX/&Zdx6ّ"t>J%{8x԰b1oTe ZC66ӓ!& gAČnc..Fiw#7Рl0gc؆` ^$48XnvP=dPcjL!mE _*rw[ >2wE!E>5Vc-`΢KYRd1"7rni=8 : +%zڜ0De2%4~w;À~%6i&D%`ן^`?yg`ʐtdjř-S ~^8 +(^Z1BD56=tu;Mr;3ujA]5S;& ag>xUri"s Y𼕧YZVVs9lu+ Yg-f}˧[w _BEv~TyD~8 ^xӡX8o~$u]6o4mؖ3ė)D,3MNQz NEXc{tGI=H7R#` *xD)v\-GB 1pV+ Q4^\StDv"PB,@aL"1!8FĎQ=exM ̘ -i?Ti T I+T@\.ܴd/iI`(e⍭IkVzQ n_ ( c2cFg&Pھ'F+/ zdTce;RC s5Irf{)pp4n+ĐՓz0Z􎤠9J)*ϱ͡_LQQ% '9 78lBC Fvj\^ ɺNұֿA-c}PA3`M✡ TrQһjr ՅThpƕ>%hc B&+AihzJ6ݹM|IS8ғQ,X֫Mƀ"1d~`p>H-kkWNNn,sGlآ* d K Z9 =rH<"bN% 5± vz/8 A 0BxBӤnHxzL~|Jtu/D'6eB?}Q_Ԑ0G_q;+Ueh$&wrOc: ʱͮĔJb dbɧl$9J0hfk'1Z;%.3Ĕ*Nt|u,' n7X%Uǐ#Bh⟄)k`M@g*~X'C#>.dѮ^vY*[RC™yN NyF]у]* W{nVT% k%ـ8N&َJo G PeDZJߔʨpo'TEXSul9 0۴b?2}jj#_157?l>G(QB{{f1X+g<$)XE/{TZm"?"Aa NC+*r7 QkZꐶ*I{ 657" 66 `'Q΄H r)P^iQȊD P!kjC:<~lb!٨$e}g<5튪F>%3i)U*x9`L\EOHZy4c"dݏ֭G4/`ZYPLrMJ%~ 8nu#Pȣ>{WcٟД+eDyU' t΀OΜKnPMZXS"XPݤ^F5譨awZ֬(Ik%r.}F<IJm$)J:e>ysu̝XIrY^dJۂ_Qv]: XL2Րg;jxs&! #"B ~)ZX f p7A׻C/X#_ҳd"0/(/\@4Lr1r.]~(a7zԹ"c54|ݩ_(U ]ڰγH=JHtO6mS!~SYh\ĕ#O>TZU_9/u(n.IC8:ݬ74l䠹rFrUQcx9" ռ-~U ̸V-SP罄K{OʹИf!{SzYS* 4NHTKZ˨Ĭ*?zxASTlBƥxǢ:_*'#Dt%$#.,@B].jR'Yݧ-H;w%^4a7A+HI]r|V ֮, m Qt]x-q^cĸ&Q+Sf ;:2 "GzR,;Jj&c}vhcS[*/wfK&5Eo&ݿD )eI&09&F=ɻAk9nljp(Ewڌ:uJDw>"tܻů=rQ l8(d%82_C#`TL;&WC+ kϜz"~m֞[{xjkt0afZcR,CRdVcUTQ(#|0z!=PF܉)Sm`3%JV\-oC̰+*999N&{|RꦡJXq:ÙT'J͕\fk3f ڃhiNW jO5L%=#Oߩd3$uho井SNǖf"LK˄ؗqA%n./u١]eIOOeyֱWsfӨBI:ܸք!6nhС7jHc"4,=ApʜZgΩJC)zM1H0 Ը |*MJ{>aD}wTQ̄CP\$f0+Є}?FU:55Y&-ÛZ;7'YS%.289\`X3t~XN6w8 xW%@M㫬\:Gض%)~jbܖK v9#Vq\ yzuDu4eVBĻ 47/$a'6Q9j9X(T` <~Z'{%HUtmNNABe՝oqVvQS\DTpS*FI(C4'ZHZ$"03# Ҽ;6RJ)ʒբ&.hed-Iw}&:-c"\:L4k'-aRCN˓+B,Y;̝o|ÈTVm$rk3q ƖfƐ٧&=_m˜[f'sYJKk> w֚I@ udp5E֗u'n&;H75CިoE@PB j7OPȠ53\~tşONr<0mA C\xN؎E]?VT[ #dx:UihFHqEiʬLd$lkGJfFet#BU%kY4ZNBT]2b2YWbwƓ{s)$Fjl]#R:^j'^使 nǍ5I2(p"x堿.d$6mtV4dFmݼJ9>?\/1 tDdhr=G/zG+EV"0XJ5VQ8)a=ټcBт]q;S/VIٯJ':Ӥ Cl4J(r1{[ՍL `d%G_퓪be|3TSutJ3fQC\E-g mTBw\E/"%`ݤtșrd 7^Q?"kyFܩs搻P K;umi;l b`}>ҨE9_u.I2) H $M"fHm#[@9Z0Iyk6(1]D6VP$M]P )2!ۅ/eV6O\CT?˜@k(̙M(-f%H`%w}D Gx4 (1h&cS6l_ukD7 6koZޛ/몕Th[Or#ϻ~Gf$rWb޿GΕlP&Y3]w\ {t}uiz0E"ګ53^#(}Tb ǖDO.<$۪N 74!T鲩erM Cܝ~Hs]~r#cVYywn~cܽ3Usz !R+hhx_봫 L0~P_!*GPЅ>2n*2e_Y RmJ 1X'n9/WR!,a2$tTZ9Flp0 ;+w}|nԼՋ"S'9zDL{ԫM@:{ٌbfB0|ţI/&ӈ}lNˆ/A r|fpMz\vJ ҽ+URM1|5lI<Ќ7\O Q .* Y0SYʊI"Ȼ 8 ա3݋X\m>Gx;z֘%5.Q^X$ԢTWe0׉߉Yh鵘b.uYLVOtaՄc x]WØqѪƩ*bUh"~FHS",CDEv}>&mid="QUz4d7Y*^ёY{LToډ1:%+;E{K9ZTLB4!4̆@e:y=v8_r fȳAdڃ1q*WXlEF .V?\<8)utM\-Qs|g%aj #Q ^\3ਗ਼Mf'y.{Xll rKغI:HGpݲ0~K!h\O Q61FxmZDcb>E,z85*)RUlhxtRj$ xFBU%l._B++-w&V0 R:r_lbUL;FV8zxES) 6%Q_vzaHHR/4"G.Bە=~(" $u9v?T(cD-dJD]#2 kn̼d=G56LĝsG/#5ze{ې:Gƹq()LMhTq$uvzԪq Wzzoo{V8ڧV (]0ya XWlX߲q \n|Q#qF#?T4 eg6c&F}6ʬj۬M~_#g) ͬ`u('F+j纪\iz&ȻYOBA) dG3dQbFm~xȹ!zs HlaD7in2(I:O KC[5t}v[oBrb\g&-Ag7,;/(Q1ԽY1BktKx:}\ITGh&UM=aװ#Kw4JkY&\2]+ITճg Om,@ؿ--3 :ykoTH6Ʊ+k Jm*F6XY2sNiaxev*>Pni"#+NDq}$SXJeAGn.·r4) ee?0}y2!gYl*j[,23~z6}-\ļ%& ,8 `cG5[w%}T2c]''Wĺ^s^ r Fw8Ȝ*F$2!qrP Q` 5e{4}h_]> fDY(*q\Nc:p(GZ)ȶm_<$cJGih(O7Sߒ[jײH5K[ Q( a33Π:Й\hCFUTbE$x-( B-@j͐F@rq"MSØ] y=*-pv9lt*)$cPV'k'0)W Z {W',5 R"Y6P]ҸC uJ" OQqx(uȑԙT#y4VJM [v8xPP%ˆ8 <3|kC bS7>M`/!f_ %Ȅ3ӭTw%>hr(_g8)>rƒډ_@WxD ,RЈHI$j^%]'ڌbd~lb=gDb(4%=/gwѧxp9fǒ:S.SϒpDH9-@Xag$ZrVuaE /P0#Vz 4wJֲISڻgv:@ZJ vF#F)fxnPU yp*sQǟ8B$j PH% 6#[OPK-'i'VYlTw~1S皐2[(L>RR)O HzL1*hJ o<*R5xOe:4zTicЧJu¸#Oyd@Wb8m'Vv<[ЊPע;''Z;bg咠6ub pNQ+XFMie?ѰnBz!f\E#2 NiMՁ`,tΧ4PC4!:TJĘ3n@E9'6TIleAB&dT 0;2n<8=…է1ZDQL9Az1o K\@VgTN~0x}$7YUq W6w:C Dɦ]|,ɧZY̦,@u؝ 1Pמt"}r "@ޮEoiZ.NPĘ]Ld|LHBW3*1I()s9Z62iMHFbT{P6,dűE/jp.<{}`<77Ɵ 1d،{; ?=-]X7Vx!/ \JỸB%t h1*ŁW*ٜ*: ?4טI/P X(+n_ʰ|Y5hj}Y^-AGqXTWƱa9'3rK9< 'srcm1A`iIjh: C좝&{C5 =$Cq.ɑCt:_}-[ֱ?#l$ZĢ3TLN4D}"\V;y IhYCs.F[P.}<#6Xs͜ZOQV2s+ % [+69 @J'$DM&22FLe5sLbd$#6X0UJ)F( KH>//4q|x3"T+`U(b5jMId,p:EӢNȥGEĻVtX(uٝ8e2`q")so8!6VKͤռv~Ϙy!*b5T=q(]Af0GF!+w?TQ6j#%o[#?!ЗEWɃ N k!21@K/@wZh(HD  8*T.-KG(rP\gF -"ODAՅw_ &BA8S]P5tfmB2: !$#-$y:%y4ޖA#WYZD"n+ 8 4kΦ0S47R2}yEtUKu!ϬN2if`@S:w:MLasALƜ oz}Bn]7F@'q0+ McIbC-(~d_Ap-%QjdX[p8&X9} /i7QcxtGDVRgSΚ`izrQi d7Lנc0 77H)"BKM}⏇w}ll>q }YGèW~ҠoH:˩Uh.Taʠ8J'.>[hJ +RM4 0T.dIvuJPdni&8d#|҇%A/3KնA'm~C*(nK15wr䗲2<ŝ;(QM* >IΗȉKi i`L2 PE,KѢ'ٸ:YZ}}I#Й.Xh#<ͣ! FX^}H v-cs OʃģyUlfxԫflҳ-\ZX`_C:Ucǧ8֕ J4R&MGB%"{$ozy'X+ Zg#bpEUWlN] AQJ*%n8?EBFrhA 5Q!NK$mS4ƀU,M&UwLQ e!cQߣ&4#P3xޑNS4c̫/5(ݨsUv~VtZV&0,U\0<]_%DF Yc< #DQ 0 kRv%9x6 P1#+7|ȍ*E?JQL -.}~cשjL2a%S AJgRA^1hLw_v[;"H#D_?hFZy%DŽVTL:*`НrbiqJ#‘CoAu;p׷q̙4.uEh UD h=]tJy37x55_h^鉖rXN(lC !Q 3~[JcUH`Ol$0FhR"' Pְ%t̩bBsoQ <2JӃ}Z!dB_7@Ũ/2_L.Geا 1X gu絉PC/'#+7#pȆ&Y'VEEq#4&֑ t ??8.rTsj]Ֆ6N<-Vd_nTt#~peԅ"0(<#_OIp9*~9Fݐܑ]hQ_[+$&O&3Tg*s.hѬ4t8Pi{ ܸWHa# o>Jn(鎘Ge91 'WC8>b(M|OD srBb'O؁e)蒇Lj ~$? T^bX$E2o*ʢ\ʩ&\sǒJ1DKN88K)56)J9*opRkCu,eJaL*`b: dFe80YvJ}\d]}(ПL>])z$X#Qdϣ;>>84 M?oJX6q;U-Bde3@/u-}y #E8x-b!Uc3H2[pȡzvďD11um.EH|ro0W-s+R9gMF~ڒGi&!@&޿ooxWK"uv@;Y|DG.+F{|NDGe )L쌏+$$~)f4>y:3w!ƨ+_25mC$?pd!ʶ2<]~N ]I#`n1_RjUc:ίd#y핰_8BfvQ*^p׉P9Kr0 XبdAwT0 *>KWPzڛG 鳪"U>t~æPD^J&.6ܩ jηRե,<瑮wR/4koO(|ái19Qw.UިKR KSlv<&"zVRbSn!{lx#jt<%kŎi}Rtt) ErTK!+EG[=ĻjAQ,]7+a>DD$Ic}!'G][KIaO6[FyZt_ϾE*)D~ ;>㋼4IwI&6?6f~%<[#JLD1 B)c#*7 XY[SjlF0aI$ԃ Na_#oGx263K_,Uߓ۞T;{+-c&,*Y%ֽnWf%[LX6/"Bl]۾<]iz>xTҳ6ʒ"1[r\2ۓZ))Q'QfC!a&4DN68IIcWF;Z]hL#xby披P-=<|&lT!l#6]GH-k/,=@JmnHNeNb$)Ҏ6'bd@AHm)*܋TηN Dh._^.}m ԺMt7Ӆ\[?rt.liuAbB-:$!JM] P!nCkސU#kj5* 0GOz8H! Z59U'}-U92UIP<{y*!"eTEr2R5zW36{.*g}b72T#]@ԛc;X>$+MOm6-e'ZiYn0I|cLa%ӕ{rX)vY2rC[?HFA"(RoxmVs޷DbwB_R:+L:,5r&袛"i@u\˝zHl|MMx4<2"=uS#BN%8Q^8&v×DCx&FəmYif )Cǀѭ~g&RX{Ӥc2%$ȫ/ui-枬[t^ %=+OVDuِ(ln%\s\H;ZB ^ٜ&qيΝI9'+(0 dF//,qhP5mIǧ@]d!#g. q I 0mliL)nЦM$\OQP]a/cԭ(FUG\!$ysAEV_[,Շ 3②`E^K7z1 M+"9$>,f+I[ _*F[ib !8hk+3^ V;"JSGziQ iH@+| ׌ibZQ\jR=6J/G~=Fcā Vb֑I6A ȷ%^H$EVjק@Qq*pEz F\zw YTah ~#Ήe 'zI2p4?C1i4&HU#:i2n14INW&7ۑLiSknytYhzęgK@T3G- 'ƱD@+cnɶDͭ{8GLrUGQ^[o7y,Cҭex6My$RyƄrKk5or} gG@VTM}tUΐvnJN>M O>й4isɟ8` 0N¥V +n vnquyNuQ{ie};])2©H]p xJnv Fu/a=ӏ+~ey*V\Eo&y64M/o6eQi,19c;IR HuVASBؿ9N~X5DщS{J?bW(E%3s^bסtO7!3^Pf,V-avX~Nx +D'1+HdE*oFt.Xn #d^#h XX;JDJ͙o%g(z4?a臘ֈ-\%c-2 )!j|8<95H^U H[ xVIZ'gWy:nֻ/'EN]1ڕ*NAز:"p+ʁGw=?5mƸ2Rk>uo,Dߛ@J*h IA>d&US[\"fAZFM4:\b3QЯ zx)>ȲM qԳOU8!$-$Id,/hѧ%ʱgDW s]%82N/f+<#yq9Ib{%I?9bc߫PtdMKS74Skw@9cNYh6hqV]uzE~Ơ\]5ڟKQ]'*8HgaRJVkcD/ x9c s<:"|\cUeuu)X!CML D_I#`Sʣ\6h33mNXǝ[M )j+}g\j~gC:t1vŜ_:i-X|UB n@* ^u_0V^U[t"S FtJf$. )oS ,q3K#U#?gOY\'U}fiZ|UѸ$[7.y153rgF mk({YϡpvQ^2}ENq)%Z: UY/ڧgƿUJa+wCj=ӭgӈj)7!dqt$I5d22{HU~iD$5yV2xNa-$('(瓋f!;:4׺,c3Pcf4uD0NağOIq"DNbŠAz_"-fDI--%SY.Vq0N#yA3|8,2F牟&j1 @ b `廦K49O"l$rYuZXM2w \Qi)]\S`%I㦉yEnr(2ơ&eBZ);T<2WQ,F_%D|?hL)&\A9^|p!کZ045߉mݸEm]Mn1ctH9hϥM\$9UsϨs6wC5яV먴zx7=+9^ !z1LI8NFtOMɵP0zCƀ*v'hBx}1ZP!%% po/BNh'k_m:(EA\d,|*or?ylDŽ%gh;F6V ,娊Ɲ}f]],*̍j=M*Ԫr^YTaJ1^I }])2h͈/yz9~N!y5n`f\MPY h7, /|Ћ Q1ƉQG bd0OC?Pl#>қ“2J(_`@`'5Ti;V&{:#͈N>Wjɨ-nH:hk.$04pN1_lk?7$ M^Gul$+BDL[RHd_ńVq8_a]Fr/xK:,& 4Q>| 8r%jyBVFŚB|8ץ`?ܼۗ_6iƜ%Қ/F1k_d沤[0(>E3tb#g!G_yYk'9pM2S淘z9M @Z*׎o}yiBhߝ#U$3E.J3a9hDa UڍA$p!Ǒۙ=bQ" ofqI(N B-GE\V%lq9SW]yXa ǴN<BCbf8ί۹3 DJ1.hM" b! ] XM[5>ކ!p>v`hD*AKElpi `Ta䏤2F=@7B@b ;};Y$-4r+YŲW ra<](dmњ&4־PsB%y 'q,"P^QΔrTBtczK)y1u+|@n& b2ûaO/VUEҳIq:uF; ӻE >mn)ء'y 0U걵K8vYxE\;hR*]I@%ʌ+Қ?coA ~:/L)"6RBA 3$jAoO=@YA4of}WqcO{nϝ%*lTobHP*󗑴-UA8#IhLT0b'&UhfHF@e瑜u"K+چK%2$As;z# tB$K$T&l3/ۏ'hYp6 LKEV[EG44›bA0'IW"E-7b_ї8eEƚp8C+_w,ĉØfm|2Y{EltMle+fáD-/btw x\l3g&YX_Ny~S|*:5U/.4G^z /uGJQ 3Wݩ&LI:}ڿOuDخŠf_UDr",3$3zxTxAn3!vl | Zi/h ]BP zڣH/|?0;n8aꀄZh @Df㕗asl98RlB:Pc:~[.@gpigꘁE1x@V,l?ʜYI5S=iz]b3>a]v3\^q7D996b ӚRBަE=1]Nmj#KC.vA(MۦpZR+ -rպ/لqGT;⨄]B$VfL4CA# x2/"]1|G$oW-E$}7 S!ڋ0Nnqv WҊ&T9vHJgCo%5vmm9꾿5dg!Gg}R=*$V&"(gR<*`T]n*5*~* D->:WۍR&_UVJwzJWN,;ԃ|F۷CTxDސiWD36 6f[;KrVҽroToE2ڋ7ķ):EA^xґ{t3t}]qyԶf\Y5qOV}JRXM:AǬ4_#Ա)nQلz;@yP~6rd+2Ѭ"y 룬U5⫌;gHϛFq^fB-_]ۓusYZ޿+.kK=) hUQ%Rr+SRR([͖p!-4mk`G:0ZC!8lqnJ T6 8bto/fϥl)![e[ /IRY0٥AoĒ25cMGgITa(^T,NMn-A% 6l!fb3s*-nf*jEqfTӛ{%D?|ɡ+>stަ}S Ε.#QBxL0;F 5ݬԧWU1jgeVZafǯ5f]X *"ɥP—&^m~$;G 5ҰЦ:f|i %'9_U펁TV{%7G݁Х"le[λF;7Gm^YA._鐉o$|ɝsJA r,۽=W'3޵Ź .?ninxkJr1BC!]szYZS٘ܿyl+C $wDijWt$Ԅ\6Xy%Ik\\D?]}=ٕe Ki֎ x;0O7r *0KP 7/ĘƉ`w_ݜ)yLҡqL Ent+<+~YGUVx㪹v'NhAKk|VAL~V-kU,lQp9:A'?K KeaO3^ ki᛬d'9&{UI|(+$͸Hr H;$8dDY;&ܹ#jň˒dIݡv%z%9tJ}~+y0kQ frXO ӂ{!;upD]F3rganlt^bm 8JŪWmԗQ-@͞auFC28e3xzOn+';aVG[㎊.f<;^-AL]B- {_66}՜}uj7'ft|u~(2M!wZ 1AFfU @^Qe0)h S5}1/d9`F20Nxٴ; UJX2Vrx8^E V625Jخ dP(G@DUZE!3hC̗5=lPvЈ^AOl /hV(IAq\S# m0X=_R†6ψ]-*+HVT E 4@zڨK0pH QGUuޭ}8nGy1,ӝcx&@#ԃV:05Dc`ICdHcc 'p1uIY w&kcXaҖЈ$ +z*/H/G^niEC`oB EŔL 3".o+f`C@9ܳP>]`'cbj(ˀ5Hʘ7zAΗ,% Y%:D/bSG"FPAMhRHg -l|A{uEVp o0>||,٨uAvhKs0i G@mkC8I{pI?KS {sX*g  23_!\;͙%TY)T+W[48EuUO}?ބ<Z"R12 e$xucB.nLNa%rvAqzo-u7'Z*vlnlx׿J'/\2n:()+È{KaIGPަpUE1.~Jr!vWr)? :h)tEmDZL˃٠l]^/F [#-8j~T6R7{ˊ.qӰoE} ]{WS& 捑kJ} $,SSjhp$%y W@n{JXxF~RKp9{ \W,`)x 1'0,mmvHcF20y#{vc_dQ;:2v_:̸̐w6Dd tS@+p R` ~t FvF<3I)KX$%6dN=tI#D²M"lm6 z8VH 4 V%* Mz}pI(e N(GtO1N}PxI-_b_gyx\sⴵb~AOb{~8pxl!.*秤Q[ۑO2fHp 55%rTP升,49/˜L9 zcEdT!OUQ:`T#;-Mc Tvn LP\>[]~#ѠjpY7q0! kZVy;n N )p5c Yc#KT%`OABr*wwՍVntca 0O6ܶ, fkLH@FݸVzݒ!ic]@ʠ@P_H|SA2C7"ECs~HS_$$#^v00aWpmaۡh?Tume鷺_.|d2+&mXL`\e"\9#mXȩFмM$]}&`TR,.%$>0~9kLٴaŕD_ @@HJvQ|]IƐTp̉Rl2,"ZsmNVY@ʀD~ [LUPz}K_.`)[%WxR!i7DAX/T[j,>A׎=ƹ&z:6Ύ=㇃mћVrhϪ̴$\{!fBoDiձf%iAFr:怞e ƕcwɱF ;x2 CBR7ܖUՊ"^ܭ4"J i[I>& p9URfp˻<::׆PmI&EBrvQ;Щ8L-<6.ꉿ\Thi<Yn5XB$0r ۀ-ޯd"G^ fZ5KpA:4i8[eUH `um60RrZ;mgMLROًQ^ dd+sG( ڢGY;%Z=]7iȗ/ މݞ=DZ s+b=y,^\($쎶MդŊhsXrʽ>.@LFX&tTc[96^Op'1JYpIq神ҙB|8М2DFE6H?9NK!2q ?uVkF6T&YêߦmD=wi<ຳ_cNT7 J.Th` IUPMلd)E|,K׌0!HtH P[0{oMy;oD #ĵR̯݉,+'\Pt$a>$P 2EXlwӐy ,v v#2\"8 BDwRhA} !BdҲjHe>C)=B&RC "C+NAq)? u?Ċ6RHTs˾0u˕>Ƒ^adBjSEo+7<2}ö+'wD%Ȓc3OaNܚ;6S + *eȆ6(erbW)Bn@Y泟-ɏI~,Ț $HR=9sO,PnFF7T\ `ފ"SU+ Cr{}0C!m[ޣc,ժt_|).@c[`OWA+/cD}̓6)wa,!tabʏ#JZѧZIUiDxoa(ZQn 4G_9QLJ +ؙOH+"|3[WaɍC.sJ韎h;Zԥ54( `8>[8,T%D6 4\evx$䦤4)NԚJEJ= ?Ңn e~NA+ lE(٦qvyNXy!PT hI^e{ep+;Ҹh'R:g"h]` ;uw^.[Z/x|7\礋%ZX-.G*M_ nJf`Io/hInU~ʅLׄx ^aZWF(n̵y k$ G+U' a)ȩג6-ygf'5|XUԿ y6hOspRf+a=^ԙHoĦn &I3LĠH6ᠵB6TCvb\RGӦ3ڛx>3mEU ¨ߧI7P[kS%Ӽb:rϯw8"/bіCOgDD@)DMF0M-)bPO|[Oy䂸T 1Đ)KUNi_ qO_)^Bd_>->5 7p=ݢMnV9 1`Y']kVIJfRzAY6'CI*_Ob,2&@[d rgIS$'Rf&$g *ZxfJBecrU$m$}e," ]-BҬPW܉pW&FOC`+(iyW2ËV4~`<|J UI#VTXDٶ(D1FjbGh0z_ svPN\,W.=$\XMS6M\10\kļ[)(:t;M '' .jRJw؀Y<͠bԤ}{V&&Y{*9Id~v(%ۦ#gw<'@VIV]-]Zsl= ѐF9n7!Ӳ*сGgoLWn¿k 7ew .Hf@a?&f(F7= ZXYɽ[5o(,TPY^VSE&9@ndqM%^urȊ"m(7J~w:,8@I>LEdaBÛ=thDX}c5Wi8)Eգ:qOsG"xb gh&7վ79z|9g/Y>2H2lAS)\b{n]TFx*F|̫rU*X4Cgl*$<@HRYD&Ok{6Z-)CPMNe# !! ōk`UL6ԗ"OQbCJث^Gv+I.9&o_Xid}ГG3ĿIg\IJ':Ř|2͹٠1hև53`2pw6NJae<ݡgr5qc9u0d4|X|c/"hDzq%ݾ$;S"6мg #V&Yi85۹Srpf튥rFWΉN*&:~- H2ݒV$+%ԙ@9N :@>É٤ymlw)?ߚ$gs{wCct-C"|.뱥|C"ɒ[sM ѕSOՄ$fHѺOOZTX#,> -g{HG1VJFP-VlFT|C=UJW`,UF6o))lNcEԳkׂ)_ iGReĮdw :N#,Cj<"s~5⾒RFe|ږA^qW_ߨ_a˷@oaO^_B i !3Evkd, q,%\bur]Nik}{Ac ,U ?'y8:ʖ4qc$#ooiDQ"Zk'TTb{+'t!ryd:4.-11/RƑ}j=OL@ۢx 8yEڜm*؃w!gIYD~X/qeSWgK$2(dZ]ڭzF")m kd_;uV\a޹Ҡؚrv"ЦX S\}*F(&k<|=4UlYNU("1h0:aqH$v莫k8{"Ft\nsUS_BD)ë_Rz cnXBlT#3`t $[{ڎ:ދzSWza02B7/,o)YPV%) LX5-Ibm=_<% r jǂ 7{z{:5((Oh S"ݮlURd"?0ϷտU`LpcelNq_" EC\ 70+2kh3y**D$οX0GeU/-TW"hojhjfXEGϊ[|Z+~ͪUzsӓ\})بSGga39_/xB% 9b6y;^iez~ub:=LJ31$ ,B*iN+."WbLGuP҅jMUhd{!ܩz)JܲGߛ;\T,`OU͔/E<>Y@< wBR㙩wh-Q%_5 0@s p5\'N+$[b8d%!!'Kwe $uxL$K̝,1݇cH6kXKZ7@W?rۺ~vgDbm>0u~R&8W7gNfŁ0$90*ժ^?Bt1MK,}Rx\hE _2 73΀iHDydW:Q^4LY(4u y4S`'O.+0x UYFk&(YmnK } 4&j$]Ox&%4#"Xi~4ǝr"8{ѷ^ՇUT3BK7sr(#s a) p_elH,ZRA)ʋ:`W/X}cH-CSaR7|eh , [ zd.}Qh>~AL:Df|H`+L"\j Iwt=+9HW@ZF$,t8p8}vד1ۻIݵ  %4<܊)vsUQȀmp: 4;A'4UFXRF"+!B(4֣$&!L BEa؂2_^ax "Œ5Qp aPNZSS 4Ma)G-_(E ` Rkea7Oڱ hp%t i[`9^:_D@#md 8^%y'n,.w!N7m Nj@ k2Bm iaXH@>r ™Sdab(34FiCAu鲠DZ'0x2m8 L@#,TKgӒ4ZxBpGic4k$xʷmJDdo\fco[?>ax\N qS [[B[‰bFh͜1-e ޭCN]$,(wHSa]9wPiCQb#"|yjm֧y"!Pr(W )pQ!ANNϽI{p.LڟYj!Jmބ<&,Bwol ]D0H;YnBܸ+ebD 4CriT 4U3 2$ 9ĉ"r4¨Zkp8:Њsሏ,#̧FX7 I`lI~;~E dύ0#VՃvRiQ=CMhJO?Cb+Qd*W [ O3GLElygxB‰^IJ, j拆3Ql@o_`E`{ø_."yR+_{&@qwC{4‡bv8f<qhcĨ䙄k9{ fKwp.XD@M dLר,A8W:ŃfSe(.&yU`Pk G:3ɓw0FN*bZAmJ6p1TCZY'ɔ" pS^^>gԢ)QV*УBpUyZv/5"TTxu EV@H\G&Np1p]\m:WR 7@B?"êT*Ual.F̢TLg X؊\9;*QO8X6H̃)D1t_Le$Y%q~ot<2%!D&F97 sGq֊0Hg&%QU,9-$y V+tMYLImH3כ,5[ނ3y7i K<4kXP`#B4B=ǣ-sqh"̔_ *jl"`TLuHfh3̢/Sd{'H^i@- ȭݹS)j ν [X=|%Ŧ]F0.r*>fCR O05DFf-g EpFcՕwNZ%=[&͈۾z6y\MB!F^ Gole[M~(mD2jȊPZY VhA80u͕'X?P+b>B&~aiB( \3˶80uDY(t*qK٤p#;kġf |~(`W&#vMfoLmqTc b%P%BIE pB(m=‚iD o*W x:TnQ,i&y*d2NG!zoe=D,13LPnwÒğ[ xJi}X+?hmc@@48}{CE+-hn|*dx-vR*[g~3CpU6D  udPEm)s ;5g2|l?e3Kra= 9yd7xK ٓo~&Ch PN g`ZI0|j˻E _G?LJ_f?4I3P7 65m d 9HB0Ft|]d4.D\1w2F&sI/-˛LG45b jak '*5 xEiIN? YgqBԦʦ[HQq/Ѓ{Tvo4w00/ʏ$@nI躙w Uei 4%'+mO&0NRS0wǠ i mTg8i~ 1`bգTƒZљ)dAj3=&pVݸ4?N]Bk.:AxC0q'ןQ"quC&TR#[*2=;5==,y_巿5X-"C9 2T%RnS!WuXkBJɞC]F.L`GoV!m,ͽGϲ:.{_]{d|W,@S4֜|aM&d2]+A\AxL9`ȒPג|epTØMThx#GxCdNPҤp+˱p 946VU˧Q{ ^s}Wg_&jX\`M/I:`0$|iWkͥXcZ7i /U \.6,RS na/ ,*$ SL׬#HCU5VL uo/m34lqսN-0ծN/A;&^M+(S`mK=9j~q)T ~]EZcAl~~6ol'YD9ה Cf*tF40Q܄R *٢A|~OO N"(dAK4j'lN½I/&911\g_hMBQ0"y'[s4&gѼ@cz_[!jus\#U$tC NF@EVKDcX,䢆c(rJBQq|-AN[:,.^CR?:b] DLPZcuROT';FJЈA4,R\nٰ4Zts'^-byHcfGr*Jv M2j"&ٲB/cU?A_x'bAyD0&`)4Zf[M aҹ?^.Bȍ O@,b;RVRT_bh (l1m'ȂNx\MC@K+,oh?tlHTEbjHlj0i@KF!cP[̛fW6@.y!h3 F<NV<^XLJ#~ a1?'bO-kB :-@@@i !kb2!c Tʅ]8"<@9*`CuSrmӠH?/q(6 %ҥm"xYT.KT[UPr=B`UjܻH1kf]lNS@(WYlA'*ri:wVdLi1Ut4t< RmGv/1&(=ȂElaL~vk%J{Wztlser2g2U8)5Keu#S mń" bA#CC(SaV2 4\5g ۲X {=JTn 9#E .% LcF#SV+}`(G9Hexg,h Ij5xB u1("R+ZgY\#K0*{EA[9(bJzi4= Ωݞʌ0r{LX%H.(mM0B3ټ{Tpڛr[ܭF 4w//4."6\J]yg$]RԪdV2mNJL?Av/f(PYi{?(3SI;4c,ю=(DfR,)G尀ہS)Ky7[FlrQ瀑B$^Zw[qu'0ּHFΩ%z+iз0Ov &u&Ũ#ƚ~;^M+A$絯RBMZ)!$Mr@)# F2uCR' E( ŲGWi:IvTB~Ɖ؃=WBU : @I_8xb9T ߔA%^J<}[Kߗ7EΌE!܆ bmc A:d 8rfyCndXB5 8¨5urbq&R"^%Q" Aј.᡺;ٌWfni+Y: "dFq\h:'jpm?RHC[(p@}fఠ&:E@S"JGnQ:E@;_.=Iy-}R/E^kDjKMoS 0nAѮ.;Գ0@T";FchU-{JtRpY6xeli7U"+El=tm0-,*72)3NŷkIeVLa7f_Ed1(1N=r#02& 52Iv.$!K֘# |Dqk 桦F4~K$,{hoZkڟYd/E0AnUeJhH\x@2ss6*x\_r2XNj&ʚzɁ kmS^C&k2rd(Sgmf]FںQB c  ~:_*7Zu#RțIFg xRIx/guyE9xe[9/!~+7 ^={_*Zt9M$%h@! ;q6vICzbN74ߐY.x}S9Q9N[9B) ke[=~!Pb~` |I0 @iD2)׳jqîdD$ '؈:| ( 6Fs+PkPuуi=oI/n Q#sK͏B>s0]ҪlJ%+AϤ@ bfLиv1"QHm')ICl ›ӫ*L]D1ʎB!d /(K5 9&fo^yJ|QG6[q/)E3ozWsNUX~7qwaɢyONōLzbQZiT 4.ဗ_Ab7(Q܏S!L,jٞ(eQia(vwЭqX͛^2(M ^ex^q6N*e4N%吺A|7,6{ ,8-fq&0o"nU`筍=SO) zԽ ]4v9[n{-'3۔>.$M\UtW[a0_JnXwZ"=dpCv/ԥq7a[Y)E{i@e5*h߷X)X_ڰB{vsbR~*̱nS@e\Y=,-{fA:q֍. GZ1|PyGq3lu2 !jfU}[s'BRnɕ(Z,i%-Lz4@ ,3ӉEUK*-mnE~mȂRҵU5e# MLǝGOIe4zh9k.-f1d| `!)8"uQj'8'^dyھ) YBsJ^X$t d0\">J'*]ֶ$$UT!pj慻9!2}EYoLBe2T5v1@Q*Ӯ}!. )NlX߈Y3[i(dOq4`6ъZ̆GU4Wak"#/hA;'5ŀ㛛<*7Acb>ssb$q8 =\6ʈ`?a*fWaۖcd:Xц9e9Aꋝ<4 Pe(Ѡ[9D^?ρ 2b5!#bRN.T{Iq<;$=S.[TVpzY\ЏD%; Fd˾VK94KuBގ i2Bk@9:4]j=LvrPFL#~2)EKz(5hw{3 ;tD|O Rn T8WNi:˜ lgo{Yu3քvg|"8IOJ|qRJKR-7B| S{CVd$;9q x\_:\6*`8J|FÛbF2ҼLC\֒f%l<䱈2ΫKM~HԛOEvZBE)ʮӘPݶ{ЂS,Rp"?>ՁkհPyGsL@^VkU%P9TVMV uKg :+ jpH}5E[WKbV}B##.CzDS 5][ ڻ,kXkFCϛ^#l-$"ktLN"ݺzh8\SLY\C1z~4DˬHmedcNi@EHRpyJ2?rE&]MY\#_z]6>U˺qӦUvKC "1& $@59NW94BAС8$* DszkIJ"wNF4FMb8QbwNX.!8mmXsb>X\B韔ֵ@2oֈ= hN2 jmB$/rXTehTYebO(ctJ:Ը{5Dm=5ደH Okǖk~5XJbSWRi1vnΙjY*WobP4rsT#WtubˆN]b큍DtJ#a]ݛhv?Tl8ΫZ߽c1Gn>5r.R.ߛGw~5˿8y<{:`f`e7&ĄIhI/q9wиvo_[^] _p/bپ''.igjHkt2xӉN"E'C,o}b% ~aaQዒ?1ĭdڿ6~91w顟*;f띝ozw;;Fbv5 dU:7}S*fN RI< 3;agRGgDj -MUp! Yeg(ʶ׽Wgٞn8*˥%SrWgoh؜ɏ@/ S7w5-g.͚FON>D!] (Ug;GVYbXU:<2ks91 eZ[ͼjp_DQoVPޡf6mhyHjQRsh dOD`S57V% qgѢksϡP4;8g Y Vdq4z4E_pe|ע.3#N+'=I7-o<(F#ӽ@a ثws;AKjAm$ܦ"lVEީ^-ۧLT[VM)/;;,f6Q3Q34'sgm 2$vHmLƁNq "%7BZWʂQk.D62׷PGBGa--\ *]WB^7,蒋(պD+u˙gYcUʥ?8,YF$>Ӝ`T5U+C6 YDerVi2ELRM6P2;XtXS92F$IѿNx60o"q DGAtVt-ЫH rqvXy߱r]N+cCE 9 Ӎn N9EUNNNgJxIp(:+7 w3FcD|m6_s Hʛ^J0A;HIfx2!8.y|ƅqCE9)5Vㆵɥ.Kg"cݵ1C$)T^ыFQs$o=Sn Q0L 2pog?|J-@YIӚ_̖ ֣%6ƥٔCaYfycn׵wGmų8ޚKCH5 PPױs}PlxUr IY!,'ѭϤl,3oݐE$XnŮ`pb\o0jW`_kA(jMGAhե47Lͪ-f[څ#|nL aƩ|rp:ai2J2I"P&[FC:q<;*~(P8ۅ"!L5ZWiz=6MPlҽq,PmMNu0(!9ntD7zT1ʞ-GiHHzX=7DTLb3t TZՠni;: )fLUR2vۿfpE0Xm5^YV :%ȱVrF%OeՓ˦ws8VyiY?F)K 'KJy -ݧs"&`dҒa6Tl8DrӘJW6%ZQ@"iL"Tj.W#9+&diU-]Iх$)(ŲgkC|"A+nMꘖ@h8bO\NZoA\؞_8܄'ȡTu}@'i'R !B *(\Ch9A rmC8ITZm)$dcknkS:'`t|+AUZeNzZNWb 056FUJ3+A"-D*[. FiԲ.,S ggu+3-. fi=* AW,BN`UEISFvl\bBl;7wmPv֤@6ԩrL^rʸ[?e@1#7 !Oшh==056n.ZkB%mn/2p.pD4U˼D ,oSx﷪yBoʘj)Y xbL a"RoqT6݌ fn -v,7^k [@SQ`M ~7[Lܚp룚4iMEfXtngR0By4i>™D f6c. 2or>` D-jt63;fa1l.V_[lYщ"nF3O]LOKEhF.pΨzpaiq-`1fcť2S=,"fX qL LvqpnDsC|EZ d 6N`Ewt$seDF-(ŠO!d&@h>V-ѕ1\4M#1/Ӻ!!SyJWQaS8h\3 ebVny?V>ɳC@ 47r <($8ڐ4E{oGv$ Q1)Q *`?ŷhNe#%.C1DSy)l@BH ;ppgnKm@V,d s]KQׇd$s@w|OOF(K )EO\!US؄ڠ9Uw;T5X$ޖ2 _yI,*fVz/4+rIUpT za%A1%_X`N"V$$Rk"H)oZ*+} KA{9p]Jr&|&][p*N$5k]T`._qS:2D5^O9"\c'^ٰSd)|&{ RqcU<^o;xi6E$sEXۑ%hӰYL0Pb JHYbt!fnųsǮa* bs1v.'ZГaZH@9T"f KÌYl<zwx#[!BO:JF-ؗf.C8n'"Pr]Qݴ}HFMG\K=MDۣ-6 F UrAA05x, RȀ!pTu /(Gq:%:d810vܑ@Qx,`" BVPǣ_Q6ҧp6](t0ɻ֐4p} ُxpk J0PpЅ9S9,[4z{Lic2Fv~X)l8;-kLl[lr)BX B4lуAHHU+xz#!3e"7' 0fOy ru~Atc Q!`si,ւ#BA t5/%{8h/x;!0:׮Xql8V@e j6;?GK'K;@hdҋJnqXt CiX-&5ApF|yk.M9 $_VlF6 5טDٍⲩT0_zJ14 EY("MHIzRgs"$aXNfY D |F ՝aOoNi\Ա!m7 \ 7Ɨ]p1XD%NYG~qZ6ޥ8'joQ),jF>E__'O#tZ$}(1{ dS=Y P__ lO\*}~h 6=zꦟM/@̢\Bygc2%K' ҽژ⒜zxbԽ?,/Ёߦ\}U@^WZH= hQ^5,d=NĤ=eUףgî]O٤d +qʡA`u)&4q"5cٔ*b i}*ď~e6af5%vs E>tME@| wah $G"b˿:{ѷ5ZSu~z8zIok!,hwQ>FI* >gTzr=V(^} 2̈o6tyDžwJLgʮ2r |2][2Cn~Op`o#xiWjQbo8v6/z3$xR4BL_/׏5`AO& wvʆa+jUcT VJ$Hmc 7qFA H"&V"IYX 8> oF.R2&OS G~]ًk9[U2C >BiqZԢs%p5 62$0ڃ>|-v$Lr<53^L$H*bc^OUKQH)L7ٕvEN|Eg[S*8N$j&oh-lhjdj,Zr'\Iq5JEE ͼI{֜"""&{Q{Ei~Vu.q^Sg%/cdik0wEK^ne,S+BI$Rd)LIHz{uJ"X]_^bdlԣKJe%UUK\VD{m)(Z~:KHH'@,@VhMaITsAUhMrHG4z$W@o&q_*PF&4JbM[>Rn+W yZM=G[Krߝũ1 RmL32챕gȏ9҉*c!U?/NV1^#dNm*mNxT@_3Ti~IoJYRD Ef4>սIg!D]/y€֖`7C" M^fCa" QRjvP-ѲZ3ߣ~xVBd&ʞUJtTf3\JS:&M{wq`x+F\fqTW+'&뷨PiۺeZ\cVVcTC||wH 8t]1+ xCqLu "۲f^{=];vMoqF솨M}w93՝mULe x5;C'>y*K%g%MmqdtJu:$SO&V3S$%^],duyT"j[w (Gp[r?+Y4,OSl@IAT $9%A"\ē0%cj94KߒOi\ BFf**`)qz]9iB!;Xi- Qq C' %/pJFFݏXaYa.Bf"U?m~#VGND$x;IJs_Sy!#%D*(r) bNJAß>M(ifoM]r A QgrS)tԣ"OGK*RQ!?_^[b)׮;NG{O"OJn8'x!v*"$-#GB3"-k;b3oPS&VWb~w;HAp֡7{=](Jui WKHi F.ۿWNU0ya7p{ GuQ(|SX ʅ`QF%IrctenNnU,8xKt q@ܐFʇ2 %&0:>kg- y$t"rt0LNGe4FhN*i.~NsigA4]2x'1xb Ky[!M,#źrË)GꡛR<zJg:j,-'#J_E73Ͼ^,:kVbRc&TK C^ t(x5uU~&ʹʖ.̖OR+O߈yI]]*J.ʬZ@I,^9u |eHCg F5ˆ)΢vVⷃ jUP0>W!DjIX+߷5=%곈 [%SǓ+RllPl4PU MWP2EX+ZiHQvTji-,+]e*10uT9 u蝔%Ѽ0M65i1܂>)"JBs$B9Ҿʝ5\'/߬o]k;\Z߻;²dW)Hi'<7xѢ֦|v!Vxևu}%4QcLԄֹc|ofLrz¼DۏȿYLJ}ۿSߍ*tz~/hsNl$LhQ j_%I9!KiA~z|mO϶3&Rw_diK@LЙ].UyT(QYSUqlsH X% =-yۺ1Nj發 3P*"F&7(`lh| ^4rL0uvWt1 l"DDXQf B\ ͔ B4T ^ L,d [ $`"#OB8$\Rx9 ,SHzU)Z, Uu?N0|t)BIݚ%!E㖰<̜0W󲅷LQ;VH,#F2EZ+h aPZc R=@{C JB15F E2cF*Wcdȷoۗel iljhXଔtq7as@We%V.`Ysy"/oa.N!:2"D W.%͏YVa)Ty>F16h*HfEȁ`-JG]1Z`znKqD'B\|]ѦbSӆ $ ňٚ!ʡ n)@+!{9nV50(R 6,$ߛRxL Z/ $XlhI2.B~`0hP6ʑ@)n!g{ ^7 DܱJDn#pNuׅD%8hckaWɈ{gQ}tcffDLe(givV3>e xGHmH+LXC.Ü3vhюQ? !gz\R7MǧI Lk !r^I`aa3J M^#ڌF6x!(^4yq&9f({}ZF*z!12 p*pĝtTWwAE<k'3cԲbjg ɎQ4 Sl :Y`Hc eޏ{v§ լ5XDt|ޙJ,biypiV2^ Ķix\F\ KL|+;Hw65=e"0(\µŠ/> AR%B\ j߁ÑZD9a*P,qFƆ)LD;.("luՑ C9}4De$^BD-cD5@-@g(^]Y+_7\oΫJ6т>RІo}/*GQb$!*pEҿ :eq`M𞿝Q&zlt n#FC/* E!t?14R1CdP-˥*!^|%2G>mXUX_FfÎe`ԢW?|FY_R&q P#1!gkC.𰀧AjA8HWĭD"j5eT{HοK8Y#,=5ěEϚ0߾ Wry], >'nb-oz2uآ.*f~>Z\"ej ۺb&}ָE5ZI1uVq~7I>7-!<d^Q9Q T3N-U]( D'# pfRJWrȵ#R{%]4W<+L\ Ma3n M px(٫W`HGIQjr!Yܰ' Sa`r, ~[zQ2 rܥ_,6A0"%H`ɣ!/Z%M)|Ջu E 3`]F򅑕F)bJ(-i`-s?K?1gHJAcޮ'"H JB0*]K#JƉRH""qTDPCBtfBlL*dCT왁B4IJ1HxB@/[T9~_ fh3|a;M:% ^څK{~S~/ :j7MuMRCh٧t뚌lXfCB4㎺D~Tt3 "b ?e)rCqZݿF1 ˿vӡzhZOLI@YFqյ=\ M_pDyԜcf*L .Cl ΀ i(%ߠ b} 7vB'*Bh /L8 jSh" x>b9&h_4]A:$K}bq|[}xL*r ]N!LW:qF_#$ApHstbmr"9կj4#/Uk[MJ,4d'hT*'HԬ5βC9d J3cѯBa)\r0^m&$}^ˇ N]x"v+,[ٹנ<6[C0E.d#6pdX7DATE3XTՓ屌 1ZSE$'H鿁9"=Mh:'%N-x?:0E{3# O: bHЎQxf$FKaP~-B=N^V|+Lv~7# L:G06< \< 'btNSBp割 ͻ7)ѥyC29ͤw(֧Vx/HP (o!>&p?1옾F3kp%+F*J1Z7îa0B>eK=ڍ^Dp[ȦU -b#t9;Ϻ|oHD#xWs2yl$ejP#!au퓇O I-J]fҬHNҹt{0#,ܞjK(F&CETJ5W5$L[,Eg0nsx1`(K{bBF)cj{i('uy’4_([TCM䫂NiDi]c΋pɦfeN8-6^rKUBV2,(f=mIKkEtDו Xi{-+X t)5uOD |ԑN8V3b#rd[B#t+ꭙrRILsk&SL\% fQ";4EwNoĔj,ELt liK@䕂taOmsC%@L`Mx"J?4fV8731 8 )4J%AN%u v(_TTKHzoÄn,7 ![殧} n.Ȧ(j"= G*GX ES/V '~Y MDBEl.ђ!H#tPUQ%iĘİFg ()Q_{kXP"NZ!Tkh\Epp]i)|-B<"enEĈ:Y7 .YڵPܸcH[D^6otvȀSVGQhDsVڙiN5A!4R2 'nXL o`8Uq,'JiQqİ;yU&m,U6`!>T [eMI1V8QI#sA9GsPh[s7@6; IHOܲ5d֢5$ q^pEW;_Nc`t!BO~(]:Pd>켹;0bbvEJu1C/,~JBa'P;KŅ:Tx[sNɿK&8j7TYp6P}ݮBn \ZǒYD^cU, ԰|a6)EK%=w-/Eu#7(؉Jb~\u~g05(FMW% K_dz<ƕ-!!N{+m-dL?:nn%-H'9J-2Rx嵲NB+:vI. .QqEFժ* ؜ 2+ Cﶖ\?M>ҦUed maeղ ]LwR+xT cup:7a y#_ Vaa@{(ݴC58D c&CMhAlBMMY#C4cP#%+KZe>;ꟿ+fHh.-Zzƍcֹnt[_pwcvH{? %LgfU> ^7rIUQ؃I.4҂-rΖVo<2m]CS><XH靺aj{#TVڙiY' I"h"7(/-HA +ܴ~nh!yOVM2 ǗBCLzB?,EN6z'nwexvqL|=[z ؓ ء{yTtXv _&CRN萕 cgh^ q[-Id8d@ruSM&YeL\˒ۧdC+\vDFl/~CZB'Y "ьHkaJ6w'F%dmSaT 'kTJT ֨sژ)]|²TǺD.{D!yZQl?do7ԑ*=hu)8,(KV9aYdɕdI+AJ]'XvG!PYO^ޤg.|8XYPNll +++6e$ f# JńGp5!bH,`tj6HґYOdh&VF+K)2tQBth±HOr *7!+~I1/0UGNhC'̑*-w Zb ML5+fBsb$,dc+ITmYU;ƣ/:$e os-.suń՛F*_\^`bBa }J%SvY3 TDƺ*kg:y9j3]z.)p|~WsL~О|2/Ӎ38:R;8U?=]i w$ӠFjfI"(QBD{ jyu.8!M'ҙne6`?zw Uvo#AoܺsO*,FҚWTjҷw'rԽY5Ti0Uxl/]UxyRJܺ&ý:((8T1BEyͿ6AQ8V$.O_דtwT2v?a}qWL7zAKB$~(ms+dMRD[Vc?mVLMuJ.J|&kls*o}hܳWAbs46땦"&ʎʱFShv;A$HS4(❺ +bOjRKqq8!rfoO&Gݫ^ Di=C\\#Y a8Q:E)(ngJ RF1!ӮZt$ mF1:Z&&S03aD*lNTQ U#ȵCn==Ht׼8W=iWT[[,(5iTXFoY'N \=k6 '8@=(s$pt]:U:T"EV^6Kp< P劋Wۥ1鮭yeŢ%iIghpڝ]o8x_m҄SdZ=X$"'[7C^ƽ93ܪ#n22)OB$͎0,W OFBZqHUQz˽ͮX()#d;/;鰐MA^KV3x]q$)$JCrNmgƚO}z({˭uU%z1HFmfܓOhL@D&c2 w[K"SCyUIN'C8ǧ.JEq6mg &ʮbئ67l)}e&Y&W,tߔ]7L .m\2{9BV8벵^etvKZ'ڈRd콥D4v+*ea3[fcꕣJ-(;-jtLP*%Df'VD+ҩ,)ߧ2%%*#:5ؼ(GVIdq7-)]G~j0[|Ewxk?(r/`3dv|23*-.-u̷+$E[6JXۃ5 Ad85,Rcxqx0*_2fIYz:Rw zdsd~ SS2g)l*ѧ,_<ۤXVv3(DMl(q+M{bgj\-Ȓoi]gWܦ8gUMKU"~514rОhE"ևAt}f}LeoW6:5Gi=*"5KbXM8, Mzԑ,ͪgt\$tWWL0wF~"A$Gv%Q[;}~t.x%o (щ=Q_&,]–/TlQ ʔeSg]Rb'AER} *ˆǕU%ѣ8RW] _ gZr/m $tq '09-V l>ڈӴn\KLC: | އ&bB'xBDY߰f忬2P9 -dԖt\*_ꈍ7+ hQB#Ǵ犳/{FaR%*$ d-al pȎ8.:/秇C2=_?B8tF ['b(d"Uc&Jc3C?Ȃ'kGU)t>& gd UG &,n9tɣcI;7CA#C/N]G)a+3,8`Lq>$~UB D4uU $Y _F\ƍsn4\xd84p;'i8z%Z X:t97F@u7X2PG[PCHGDn"YOpnxIt hH(&dH&:w3NjU ^*DPPi7"ASL+vD=hDdd5zQڌik MQ&tG 86x)i7j)ÀT2v n YOHՋ'& 0i+}fB-N>Ҋxv/d 1[`0Ūx &f 'OyBk$ 铵ż`~x$EKHM"كr"VJGL&dS,[A@ E2P.` !gpiI!R<4kTI35T &r1u` t H#<(8-%K .RT80rtRŨ8Q% +q1t)"v+!fM{<"k}@ijOcz[2ͨ[tTؙ} >,:4y4Mm䓣@qPt6mH(ϑn(#rS{?jd$\h XJTe*. #HE> 7HH(eKyef`-pGD2fLۅ%ldz)wO0p)<,MAt ' ƆCbƔ­ Kh(%~:QپIlf$h}ZNU-())G+t4qrNtxIReM<;g _,oJ+Ԋ .unb@/XXGvUE="v*UN"Iۧ*ƗY5#; lEQDv^ 9^vFτ&˂ّB b"WXh]%Tb!JwW.,Ds^Lx+i%X.qL7T_` lnM Qz0p%*[D$ & 0@W A.Qx7rrq]QYWS&YAG$a&>c-2yV~"+$ X97C` 0H̚Ȉl͡ (LUM1ң2xpWāTRkD䊐nD2osD{LC]۽:N/5 \a.U~7`@ w%:GRϽJji:O0G{B>,*]AY"r|  >gWZŝI.Dљd  G".oN ?4n>)%DVO>๾%3UY#uWK/$"}p6 HAh"2P%,.^Il9>}D0Ƿ[&@XaI>h*4 A/87UTh]=`6itTl(bNol}a8m0RPaGbuN&X:FxJ84Շp%eItdluN=:IA#n <0)@[ 5&L,Yg +Rm+$>N'B`aۛJo"ǎ V$]>BXUZ92*D\(<,>dt 2١UX^E&y-V`a/m2\.5BVwxM~a7.QL;dB02 B+x9׮2V;3d4(+֖]zTRA4s?"d)tY$1EAH0ŋl[RBj$2aDDA(ł-dًiC XVy0q4y+X c$E咫F`qO$?ຄ̟ig,o%@tha"JO eZ젃Kv;L?MlEW2OA"p恢k ji*#*@n.j(u"sc77p=1'm?2II_+uxMbL0/i *QB%DZqSnbo O[HD!7o? [W($qSQq9$.TIes_lk#-\K+e={cƠ:t4C hMCgi-kYmU|9J7Hp[$.,MG=5Iłϣ^5*:׳%DK(%$?&jA)k$ت>/ب5+]S?O\o"p!gIRs6&u QO%` `Sƌ&D][LJO̓"DO>-s!ӥ|Ӎ>Z+xWr46(dLT9o/IYKH'wp] GUQD ႖v]KQ6XԅMwkn䰹%H`BKDhzM{Dw)sc&`퇹.@$$A )Mon(wԮERsS1*ʙ ̧DZL2ءgSDeA"/zQ}c2D#FK'$j}vWIZ_lTLznJPǂ!R=I9H:nʹ̟$+im2J |2VFekZ8r1C?^8|g|Dwg ?&6U#4p+$1z{m#"Bڌ A.y匥DX-"hjKLP;!U]R.D/(`C!(pB Oј@@).I6r,$IS|4`RsbLj_M;E[Z7.GuF>+[?PđTں VglXy>*j¬$MWU~$s0޵z;սnj@+2sH|ՆOz>ˑ3=%keH M[y\Kۻ1V4x6:-4]"Ѽ:> [}$eW\u"#I)RHa^!M}&WQhM*88NB)?OX֚jUK0ٗ-BBM8^ YɕW,#']qs`J9ݥq%*L״'W넫xMxwohiÎ)8Q؃ w͹cn~?T'?hXrCFUIe'r/|}mi ,I$'FQ"#cW$hWIO \B v~%7D߰}m-i l(R[֩XމhLࡇE9GH-8␼2[Ke3*D(o3Rkif91őg+2LD1&,tgaGK+RȍYv)T&ArDHk`.~O&Ւ&EET'/?Gy㾐.4! .q"7(0F˜.(R+S8v/A,[8LGej^y4Rvk=)mKђ-~Խ⓹EDd[aT"v*d¨QT v҃h_ oԖ$Ѓ P;VEUI$6z,"SRy#>%FZ ."~/~9mtjImm(|۝u6YėƱ)se# ZIyT%e.ΤDc|ЏYIG.Q4!r{ֵF3.d'NB<\)ĭxvf)i(ikZ*QOƵT{k%cI asRyI6IhaiqA (PA3(5xQ%piEER$+c2{%9)dLy`) 1Oƙ$czz^ȗ# ^[1ԎD13 [KK1;wer"Cmj=ye8/Q4C{.*αTr_"owq?"R̥D"j …XPEEd/ȬRIֵ \,^i`+er҈ CZO(EH8ȁx.:hq2J2ԓ<KO a3HMkZ*EWFhA`rIKZ}ֈN9V:F(~exakm߷w;O7&E/r:Zvwk6X+$# 4mTf,vSՄJu/+/<%RzU HnFR;:߱Nۃ{ݬ尾kZ*Ei '7 B5a4#?m݄wwwww v6;݄wpvn;݄w an#mwww Uwwpvn#hkP@ l#m݄p wwpה6#݄w Uwwwwwwpv6;Gwn m a6;mGpۻa6;Gw wvB;mGwpЎ6#m݄wwpvnw wv6#m݄wwpۻan#m݄wwpЎwa6#݄ww 6JCmwwpҬ#݄ww vl#݄wwpۻwan#mGwww wwwv4#m݄www wv6#݄ww wvn#m݄wwwwpۻwv6#mwwwp۰wa6#mGww n;݄wwwwwpۻvn;݄ww vl#Gwpۻwvn;|aya I$@I$@$I $I $I<I$HHI$I$HI$@$$I$@y I$$yI I$HHI$I$HI $I$@ I$ $@H$I$I$H $@@HI$I<I $I$I I @I$I $I$$@I<I$$ I$I $xH $$HI$$yI<I$$I$ I$ $$I$pI $HI< $@ I$I $@$I$@I$I$I$I$@I$I$I  $I$HI$I I$@I I$ $I$pI$$@I$I$I$@I$I$$I$I$I$I$I I$xI$@I$$I$xI$I $I$I$I$xI $I$I$I$I$I  $@ I$I$HI$$I$I$I< $I$I$I$I$I$I$I<$I$I$I$@$I$HI$I$I$@ I$I I$I$@I$I$I$$I$yI$I$$I$I$I$I$I$I$$I$I$I $I $I$I< $I$I$I$I$I$HI$yI$I<I$I$@I$I$I$I  $I$ hydrogen-0.9.6-beta3/data/drumkits/GMkit/cym_Jazz.flac000066400000000000000000001757531211146647700225770ustar00rootroot00000000000000fLaC" @:|$zG. r2( reference libFLAC 1.1.0 20030126Y2K&YH<*saJq7YPreg@1@8DӉ3#mh*qc U$91B(ad}[a<2d L{t4R\L0'KtP}͂:8X׀`0]t|]܆ 'lUd c|"dЄtXOfs8R^~V#8$X03C)h]g2>_NtJ)3C@!n'Brmu,-tO}ͳ'XvF`sZYd_Q_I843v~ 1CsMv;z+M NGc*Ԉʊښtݟ:X= VNDbUbzK|>K AU/tc(yz+;ю+b${c;DVǬ;޻k9fД-#`e_He\ˮj9jKF6SqkOBų2mY.+kR nD+b X97\3%ltIYK-~fE NI"r]xW,XAOZu]j>qO gvr\6n3dm6̹hA1I)wܩٗ^>NjFS$ttЫ&U-fo6a(hz_ھwx^+_pxK:L *[?}.aIBx,cQ6ŋ!(-+r2 ṋ3UxT\aء-z7HM0uӍYF}U_ tIg$ L% A, 0p}/bQeQp:8z˕qW;&֕0; PnzO21%z/mW@F vh4fձJXdl֢\]8_# MoYGty@1Tx " 5WYljv_kVh#ݍbs~?C܉s؄piqy 0\``y4PتosMCF ^A7k0=ٮ;Pɕ*Gv藯FӝƎ A\]]Õq 4pCQ tq)+eCO3V" 1 :"QفCJƹ f lRhʢE$ jf:>V"X2yop ^PRoas5nR{]D'g37UEОRaOhU3#AQ8҇ Z`0YiP-IlSRx'tb'BuSft^H2rFgHX J{N]g L@<5 Z.};Ma9dѾuf9& )z${ͺ0z}Q!z|GWwOchQ ߗP^N7'.!!c:S~Y*FBCYL؏˽Vk2wt 5(hw.ڳ5,vgK8͘8G%8")3=r&N{yr%eY#B}Uw~ '7FsO[6Ż2~{Јiq^yLkn?)Hq3IrQ 3> ؉2aG$ 8?ZjF&M&‚5dakwcݼ~wJډTf@[ ^yypׯk߯RrygʋyH{[IRE\.]mB~ m$feOIœ1Q[}d*wfWX% >Ӆ29Bfgz1b|[T7kˊe]R|Ǎ|$F.Rf&} 7 abN90B|4Ƴ(74{N@ U2Ϟ~ژfw8jVs/ DQ}/ vr 䜯cgƎЙ$׳5\%H.nVꍕ$[F5#, qq0%.֛j¼qQ7SQ-<=ytWy!ޔ,TpIR8+7M`(<<{ԧqC=}:aEwaoSEbx?%p 6 :ʭ< I^^b%{W<)~\6ԟ3*6 NBĹ{VR 4M. `26ofk5߭԰ NI]+f-IF;?q0Y(Ms_> }Jx8<[g" * cZ!Gb}@,o n,l@}18nwmHI%aKM^GU/wzuBlӒZ%~lHTB4j5͇~^BmCx X*ⅴjЯV:8mY@ <$6 ~jG#%JH;7ĻT@~)?RA>/xq%PA"G1WFxö ( c>O$\'6:Ma.I }jW,7"(\BWա[hf] /!SAXɢ3[=Y^ip$*D,Qp'| "&J]n\/KDM t[Kf"9^.{w&s0c-:!2'9Zoa~ЈӕO;9´{$C__JRu{=N--4CA{ X4ȰL!ӵ;ј(8 \M<ǵw?`V 8#N#HAQȪbv'S].EzACUZDgDb3qs'$QJ ][%6 빓N!Ւ@K?PH)yEvMVj,\LjHN"CMG Gy9o߮|,r9;SԌ3H~`gў6$aP.0 AC#ks4h-Z`QTƞUwLĐ HD:n&a( ;1xg&ɟv]*FaҨ51z+&̨fj2x)HO>) rDH(CF>Nfm,KIB&zx{_! C/1kYZZLɣ]]C{Ѹ!"K(gtmDM_wʅٙ;nw#/+3K3--N ,CǕTQP!2wN L)N{zsLYSI$Z~>OV`WW̸] 5*6 e_:^GFg?,uKMN2MiiEd4!zp,uMw\54j"ݺFç)&kIL}Y ytgh(~8? p L F ~SJd Oe:J鸥F⫆AQυ *G9+ Tld˻(h4`QMjpE_mb bܐR:o!O~@um*}30 ("v 82xwgvf;r3ghH!ǻc/+5H/P5ԁ?12u]1٬Z݅WEZ |xXK2}*} YI}_Ud՟-\{ &ɰx7TA :_:ܽ) 9Bp!NdHl!=$W5%[ `B%YkIC㕈zQ.Y'y0/gPJ橱<}0}!\˾wXqtᡖ`7BF;$9]2l%pi QCJF4- 8LڜaNJg2yxվE9(tCF.* ~8xNm51!1 7dAº8O央KKCds7oPk\;Jt}pl3CV gn4dc([Ux_՘VpeP:+3ʈ4ul\1Jerq8 w]42Ķ`&@.SLYE#b L5x, A˔Q$PJ>i3K}Z 1(JPE3J')B  $ SX/U'D}Z"܊ @H` qڢ\Yg=Oƌ嶿pܐMV*"b.YdEhHх0ذ;V^Xڍr$Z\BHFMI'dвKC &o3,cҰC6sYSPD.6  |5Sۉn!nD:]zOLXDbx$Xy"5EQDNerDDЅ< )'a&Y"k17a~(>S,?dyp,LyN1[LW;38pPLӅ 0~Mt3ٴ#$hf L#5yuR֣hKkn&o8rXl*_$f`.yȟӴVR eH(`ޗn>h(QȄ CYxA&MPQ`tOvߘ({oO$;Q#[]_ș3wJelctWpGeis%yÕ*Q$ [R)&bIAlu%nPNܙo&Ӧc'q0p^:=EX3na§v._qRY.[IoNowPܩΨj?heI0(@ l"}PQ,Xt G۴$Ihhh?nTJBgkvU]C3EE 4f;;jytt'A!\z=6Y!߻T ,bjH􋿗 n::~u%UQCbH'I!<"/}E,h`A$X0#VFXuS癴DkRc׋iQ4nPF /c M\% XZdesO|7ldC0i}`q5g]AiVEږgS 0/'jV䪽ueqɀIPC>kD߈B~dbB KKn0_ɑfBd,pZR ^5#Ȇlk70kV li_ђ%V^%ynEP6xZF.B<5o! XpW3̜E f"ƴ$F\x!>G/@)t!ئ1K3,7S1Y "<ۍؠBY;TEY0Ki}w`rOp aܛ˔„hVf,9R;6fBA@]j5!M ׁAb ,Z'S&ks$Sy W5Ti Zza{zր'BG''y*>:aӱu[_椑hߓ]B9d jbI2i0?>$@oW{_X?k%; ݣٱ-<@/5+szʰɡPY>O`t^QAp4bhՌ5oZP'w̫O9X͑]@U]j0խ L7:p^PUM c^gYy*,̷ ͂/+>4"PSK5VoZFh^h-*DV𑥱Yz%-Qx«éS-(|v2L0:/Yxfχ<BQrOny5p͐ &]!3PnUPsbmO­eC^jۉs׌2P)7;W$PazV%'Y[6g^N] @))2 kayȾ%i$TPZ6x6ߏgA;\'7$yq g2ٓQ1H@MyuEd )Y"!b*spiiq@xrּ7,uA9lmpXd^)Ap0YމŞZU t9G Y.f7;@G -(Sp v;c4Բ=\"~R{n)ft&'׸QOߐJ'G=|DuQhCFk"@]01Ynb_6iTz%B"μt^w«~pH>3PjsHڑՠxB(L$սTic$ۋp2E-2Ֆ VH`VKǥp!4NjgEBHI';FTzuSX6<]_Fyt/1yRWk,X 5h7{T  ,+ {JR ԉqZFɨJKR=K#=wQ`C3:I${oibU=I"-2\Zz\:O~*Mi:oM1nB15ED)I ׻!яB |~4> t2ƶ,v@Ԑ(K.1)FcDwܬ~6ts$u(îJ͈,(G3!qљ/ToPub]{4-ss"%7:;WzZ8?o#CRX0T6(r\R0I2KV {P+]DJEĽ.{ML?Bc[hҘ&|8XSoႣ*Y{%xLI\JNAUQVseɲI dT.SrZJ]Ug t. }+=1=ZvGmcJZw4ԏ53ث)[HLDdBvͣ9"\\I,-9,p:]SkijLΉ+@ɔâLA ՛ym_ =iM9)B)o[×XSG+w.Cp %Qd E^ Jf"^!~݃[)<3-:W0iP?2\XQlޒ 7ĸە_$R!Y2=rhn+V# >3$E&ZGN+("mRCs z7d2yyP(zqښ`!19 2:u5"iߟ4ȡwj`wh$P|w)ŧ7,ݙ訳B.S/ؕJ+΀a1^~T͂?ץ%qKWz<+bzZ{t Ѐ9Jj~4oEX 87%ŌƈdSa_B̑Z%~w$jcQByf|E@tzU-ڒ~ Bч:7B+nkG)te1M jETHnEoT8 =,ǹJX2uͿm+x %Rsm)W dAYAz^y̙ORZ/wy6ns€Of5< ԏ$O\ebS7K l_Sې))nwiCuDg\M+AҟTCIHdף*찵4<}\ZEs #hHV#[X% G֖6qu(Q èqvYPH/ktj<) %]*l}8yw R/\kE;rrlBDϾUO OO{s&˿:y u=GM;Tڴi肥em$4dUf8"ʁTr+@4!8m0rb!*LfS (v^ KCEpX9,WAnNDYSI -w6z#үG(|yAۄbO VKlp hlFDY^YǍrY E0-}?g!bY?L?" !3 q}!i8NaKoX0Mn95Ma_]'b.bhľ LN0ϒ2loYxާD^҇P!"=isۉp'2A7S/^.%Gjrd@1*ߊ! @Fb әs̳+fMz`[ӟuY r k[4r0OƓ54ּ-!u Mx/Xhf!Ahթ+,vcuQ޷*R!:g܏0:)$› J.s 6AB(5SD鍑OP{wvQda#ד $??@kBEkO @EBξɎ2P1ŗNEDEi0rpN;:Ge$7ᑴ#R۬zJwP4XOS)7ͮwu!~ 1\!w!N1 6́h, %UmzܜAG$c: @>P 0S+U"zsdȁM/̤-ǘCBnVkRRBA{2g ^1οļdGNL r"X01&.kXr@@UʙmnHJS<،H" 7,ndbGTӄ (rP~бUbjR 4L ~h뛾TLŋ76ɒ` l62>"{- = Rܕ6>E"E`p_ޥUSGi«y(aF>gYUa OH "륳)fc̒C˄Tnu*pz.VʃPS԰ n>Trwcɼ(q3{KuQԳh6BwVu0:TVGay$'Xzz'ꛀ-#|&5O|(:-d#&%w[6lB 2ɖeK5dL$wrƚ12P c YPIh܉P]젎t [)IK~܇刃Qm7FWDdDqO$&#&)&FwǴ ,iNQ"ĕ ǥ{-y8h fA U"X(*gAN6a3R8`_%$/"vL5[3H|`-);=U} rC~-MowM|~XU Z١DA$m^ Ԗ. I b}jԙ_hT#;tO^(dO-'BD@/.&oJ؃H18brYJ , һ U$e=wKژy[t{޿Arƕ`* )ZY2T]Y9rJ(Ie tGϚ0h,cGH'ӄ0t EPn,>?N= Zݕ(mWzvL`*; qs={=m ShH@ k+G]QA"erzo['0k(gPaqB.$Lp-m#ث>H*ai|>g_L %8J\X nèҸ+S/_d"MǍ^1w98ʿA?x̼4>&jsDIqH*vS!TF']bFCD`]++ܿʻn 'ӻ ,Sxrs}4yYT1wFDg58>vROx:(s'RīcikE+]9RhbPn|OCMX؟4\t>Khu(oXco6yRRe2~(3a#K0K|djIO0͉ETN`P=*Aե&8EtYw8*.% !wYgQg= ~e1+(ҐRXUDHa`)Bfv-ex$5Nd)QNGɊ؆-pB9y1T 3L271;=Nf N|t)6q<w_R$%YupL|R )c*1 H1HV꫻pl&4B-h>dF 0emU%(揮m(Cd(|+j0㼽'm+|Μ$' "ɍW7.DZD.ʉvն, ^6HoQURw=HRVYH>b>,y`6E2U# 2M ~I_"iא  B4` U` 7@Ë/+?MnehljGGmë$}ȌB f AKa]:*dV0dz}vQ_)pZ~tEM*\d]1qy{q&9;+:`Y%? !]5"CiY= ])aj\L 7evPa!6\u *j7I;"Uw?Gdl;)O>L]3YocnO.γJfaD}g!qS2#":7 PƮK]A씫B *? M6ؒ)x Չb nXDğ˗afJT]$$HLKo>^;mAdඡ{*(hO+\(Yc.Jq[PX9û!4cXҗt<*B%1g\* p^% w6dSXZ#4)x@ӎF<#Pg N/Mb%TߔQY39EZZ26 QKLB2Bv!MNy.wOj$ Dfbu@=.4(*6g`5xLHp_.1Zxd+9N00sކע' #!TRsTNK>˵4J%XWf^IG JC.CJ^e+\V ma~-sEjd\;li*Rqt~0颭1&#IJӠZAiO,$= vʴ%=5=P h8HgK0^:(3n" G/̪/䎣dUDbWlE bxDO4]JUId+Hur_ak2!Ҋ u@Ћ8V7ffQZ?ETBjORm\] wS؛IXl Q*AGN8etyz0'qpFg׋ZHUkfq66LSmPm]CΥ.us%c:67|z@@SDe eE*5ӭ㧧){i:== 8]8Z)}09D?{+H7L n)!2ҕrl_ 1˃+2])o"(EDKօ3# b'v!q2TYu7mԪTF飉"o9 A]*HV|{$/E=TronyDŽsk;{B-k;' G1!HVa!i9\EPg1다ڦs6TG_)|[F?LlG t+NIRBnKO'Z`#p^&Tb=I}us$ҧK]{gqt@æWi%8a**#Z9D|2qs@NtR8HL|zP{e] HdPt2wS{UyIy2X"sw2坪 eђ0|ԒO) $)p)W,j@YC[_}meyYJM ԫOD@2qDӔxT :J[(rfdg{vuc6hD5YŵSHy:mIaaKHS>pl ĀTSceYZ,f x/&B'' #-%>$#ҧt$/^/vu5}362PQ{IT>:O IVn(}i]i +QČD=ZVBb|%dl3 Ko?$Z\-S[zU2I~NJ'] I.4f͒vmT>z5 (DA׸,;iYSUJ _1ڝͬ71KCvR)pQi=08vZŲm49M40"k&fE^)C%ݣC6uתBqG(Ḩ4 xTP7E(zzBdhB|'1^^=9ObӈƴB뾬xRO%ip{ S fԋ%R`&| NgaZ8>%m #OHYa-<% =훅>K fH1afq6(|Yrc1dn n\ (I=W/nx7)[,n\0Suf!|b6gsɟ#0̬2y|2ASfOT0-o1m2,s< zKB)m\R]U)X`h\5̘ /XYH]Iu D+hL1r e5B,|{/Z3,dņnvĒZ@6W͟SRU(c[Kn-d:XۗTv$êB>yd3< !`QuBaKG)#Nie?Zx! S\ 4QMe>h?zI jZ'}h?6XlTRU"Fҭ7bޜ-3 0 || EBizm,Q{#rB*-{ &mg15Bxn"DzCۮh^,D26_哩uiQY5R1fjM1X-iZw'KGP̻?Wb,4!zkD A %A~@Ij3z}$@EqCrY`&q@TQL0@)@.򀈌J$@h@0-' fJh#^7CPճXbVOBC̒"f@EҪCx2Nqc۽<R28΅ l7Üȵ7T Zlw9~o2H=V(v&NZOz S-9=)Ifɼs}2!Y!X$+qB<)p7Dx| }Hqx2(^u&]>!mE(Qh?PLd/-]ԆѮVcL՚%8AE1EɦֆwY]1 f= MSjܛ ˺#h=xA^5D$ U(\]Mp(BD: ƃFU AиXf"&E sy E<ۜ"V wyd37/"+66>"HXbD-D%#ѠWv+)7)˞_RK>XeqVARڛ+.O+QœtPF eq&EĈAɎQF/5xKR9H)gap)d ?DRHj~X Nd-"!#Q!:EWYsT#W˃cI$/Ya7TՃM oh*pOFHuLD{ RqxJsc J'+a^,4FUma~- RtA-DԁX$E'-JP?Nz|}J(Nqi^yon[Ig8gK[D'Զ9G)^ JxW){DP2Ӌ"}p#@>\V (T-zSVZBB^] =sSsZ1Uפ,b:C@Gm'Bjl zxEd0#I9) =PÀ6i"箒p%6=__|IbXoH/f,Hh`m#IdkAeTnA|,"hvSzh4e(_ 胣g"[1T?^ɵ5{/h󗍈1/fa^⛐D㐜$n[" Ej^͒HYq e&ч&v򇅊Ȩs Fm4IsF0/*i YD{{Ɠ-'/po>=j-[9SpGl.V( zXR;M<Dk Z]$ q4T o?iƔ 6⇺~3(\Y7wW_֤ !!YYQB3 ""H_yMpT`0 UM]s,A|#K>;/%ϛLBp]6lrE?í +YOڷP4+CF"^XEN1~ pD hj%DT&x(,^bGTa36I] 4"2=Uѐ; n"3:@@M"Axl":ǥ(d!QO$9~м &-K29rf'U<֟qGMQٗI_B%G")Y`r܂M|v-~ŸyzF b* XΨm!%rap\KCS!e5N@Lkد^jH Z>q #t@ax( bv|6Co"^F6^΅mҴ\! MpHˆDb&:[&֏-ID3i,[o^hS YO(R{u |x.+=>4{E`]ZM{A'#P̻$?35'ltN/y_,6ZKpX"r3yKLC v 8|fAaL+օI:B'vvo`|؆߶k#)[IsB%jUqB"3NJNi!|DIZqA"t>@=%& K6P. ,/IzyYM04fVMvcޑZe|.e|eR%ĜGИ"WEaT] Ӝ2pYfIt/8MF%OGhg|^l Sb%:0 6E,cܑ`G~ޡ %=s8.M7T $%0pauՇ4V W>H+&bdzL`}&PRy!S]2”ȂYP{ tHk9>=IK"A?r Rک3l\2)Еnj2ek MtȒ&ފl~2cJl[:١Rd5hbSW"CK;J9q~4RL% )ĢX׺7ҚSo5G09 k؉,JHSEr5\+W`va]@#,5'kr-.@0QJK=)6T# ܱ[->c/؉@iа_pЛ=(eodYP`\iHa1( %r?Z]\n`! 2ɢ2GB=K-Υ kq3@^ FM*"P5w\4 Â\Gǟ cH/Sq8h#0~At^nm`'RJ|d-'ML lS|t; vr>C Bܡ%|}EW mWTGdtU=*Zr`Le&ė+Q1v_ ilJa@C;M$~z>9lOkm3*0zH%}5mJ1i__eIT&ЇV Yi_aH!cI:8J.:Ʊ1WY$w^AN @I&%j{ "\7-nƨ{ @#sN.kWLx?Rġ 䢬ԏn!OB(n/Dlm|Şu)яAC<ݱH/ĀM' xY TMMAAf%E:7~g 0la^%ۿz"Q+vMdbmC1,[ecH}dH[T8TR_3X,&xr3~0H\{ : (¬DLas\Qx,\FE,&B=nx3kyPv. -`|\3[ִk},ElQ5[:!R4Qz Rf obG*nmVU,(AҮ_aEyi,r.5WmcUz-W]}n`K%8*GbS(:#rz W ӘdI D=Ul!ZP0es )*O-%9sX%~ j3VRmԙ:B*tKsHgܨd۟ŵ{g]&ېSV].T>YKi"mJLTviҁVrHPS*q:Aj3K($e{tFᄈ&~Ea]ʲ# *VcmJdSuТomNVX{Bn*F]5{URj|t@ [%uCd q E݁_҆W?*!8 =GW5h*Xa1!8$TݔtoL˄PtF"$ ts_J_%kb3І0 hә =EWx%6ֶ_K1d1vSJ_+JV|7*uj,ڥ?r-jcuT$L'j!O ݌EWL`> `$X3Re$q^%Ia!0#^qD^CG8r"$MzKރ$W~pN/@Bly䮆0 CSQ1xnܺ8M$q<*, Qr.23$Y[P<(Q/$j]4K=\)j"Pn9|(#5!挅}X[Yq" ƨSH.BszAFLf)L(fUI9I (4 7,zYϪ-Y[tI_n.u yn: m$Z-rޜPg˦x[ӯ]*imLBcR;sZXp ܧTOKA,BxI5+(dτ9VUpl6HUYF`mrT{sE)F{{O%'AY՘݋b}[w1}'S7'mtfj3GWqO(D Cj_K۷:TRÝD !F1eB #Ou5 VڕcUKJU,XV55}bZ+k V=\-p_~fy ){pz\>#RU}G25?}N \RQmf">CNWfR/.@qm]8i3lOxJ f+IPDÖj؇11t@"UEwTM-j3JD)KvA 4V/[/NJ||~)NH"6!uH药ož3%M}^-,7ݮO&9[O--ojQ*-Yn\܈" A1l{Rr!.eu>b`H:HAZ<. nJ_eWls&D^+O--rc~6K^yb.Ǹ tķJ&74TPO&!CNAyIRS!F1un u߆\nu:INm-JڬRi$Tay '[{1^P@3MYaNd15'X齔c^5Rhx6_֌=re,U]H˲Ŗ?=mR3,F'ߺ%!^95)BԶm!PU z3^*[?g_:=Y:|X{Zruh QPziJcƛM5bQ$vt' 3;P6䄁͗!{y`VpPYEAZjg`5ʄS]/FK95zT;j=OQ-nd}ҋ>tmdI"$1mcZ> ͝)aFMlg.)ӁtEe MkK(`X}֯*&% `HF;NU0Llк`,V BY4ԈOkJ[QKVD)=ifPY֠ơ&U=^M{&/Mp'y]T2%j^VC](< mEovSo_]^BI9R~_$_{D啊=#3HžsXrŬȄ>̟\ni:J*fWҖYhA]VFLO߾QRLKG18{QmXne!ˣʯ.p96VsȜ G;׻@Xx܈7_ߩ1ˬAQuȊ]2 T r IJa)o{EW@K2Ͱ[y>Jʥ-5I.\{oF\Q]:ҥq|f# %u!!kWK-_(hZLǂw,ft0xQ֙a]6$U`郧U<P$ǂBΑo>?Ai ֡hwz5,WP11Ry1n![o[pvpd1u^dŎe:*92wk_\?Mc/['' i:)"hL1Pќfش( IA37 6W줠<Bݎi֠? ?Iba)eg%bێAzO+#bMLauԮyo,o/9n5}jG4^AlCS:kUrêUHC=B [oi9}f]ZQ\/o3Y#F\#o)e=B:C$o{Të]cx8#Z$XCyt=_o^7YKEzQW>>?/JzF|VTpmq^%ţ>!PRU iU-[ [ےc*OqE+HԒq͢o[0/ F(Gg#5f4b$OER,vXTzpqhTW2OEX3KaL64(Xkʄf"Z+Oe%cj*g ?CK0)HƁl4ȏo{j 351cFnUU;vw 7Nv&fqLH[k}7v hPꭴD/aQP1F@2Fǂ0.!Sԅ;R*1N䖄.r!%P&&"$ȁ]M^nf[͆]y{ZE3:sHOlU`ybV };S%Sz뎎yEVrLɸS4YSZGKvXeiڵA(v"_^3sz3ujϦ],)kn$ѤƒAymO̴=Jھe߽<`M\:`ab2'[AƔڸΥD$vAš]-XAYꃰroU(TO⺓]2r; !Ia*o.r/Rm:m3$A>~:G^;c'}͚7Ng \R9|[‡r\ҴH-5ӝa.*4iw5rrCy0P#^R| ʞ狃_0VxW=抿$Pl?}FYq{IsjёF3O[G jN.(S.R)d*LV־N ղ=F*;($T]yLMw}Eۧfn'=+'6H.xl0}3XDy!ԌI$Ȗ\iqG5ȁR^;7+i!mwdYrUi/|D'Q[*^?YuѠ1c]Z(ߚ7(1! aI+[TGC$unxR3:VWIӫ L@#j('2쓊YwJ<3-5E ֽF)l'z☐O=V6]K6b?+(,GλE1K%tHF҈ϩB'Q;jOӏ"f }sTC$3a_<]!1ҸW^ PHv:K )R?ձK$by?rz!Wŭ`hTwYX$*f𶶡T2Y'T9z^Asc z8\N]CsXR_+{8yE?f|}.l׷L-w$܅e53u: SʷG k1ʙ옪NN(iУ' #P7dQ=1Oeu1Ő! (I wRLM-(/ lC+'o*N#0q8)$Hv\Jdv\a>󋒓@׿':jr+iV\a(b5y%?WٻfPoY4]!R\I|J $[ƂIˍj2rU'2}E Q]Ⱚn"5e n ]bAF_nLXU YV逰r(?"XH9&!a$qyi g7M ;Oc F@fg!ҿ e'蕠|(n_&Қu_)$QL16db7iTk1FZ;+9?UK{Y3Z!faNyȪYpP ]Q-|&3"[E;;oD6ij)WvCEjݳ* i/\D-Ș5Fۊ}a2iJV񮻘}K+BrM( 8EnxHSTYdL6`p D~yh7{QFfĞæXٌzW]xmO1ig:dA3% ]s !#VӒ1E%aqR6uU.ZivХ9 tCC]'; 2uq gj%93?bmywa + wOh͘P`/̻%se-C[ƿSYX]!h$Pxė++'EoG l_`e9P ʏWl&, ӷ1WxȽ)N~mFT:Nw& J&Ѭ:55:u+5^A41oTDS1FypcJ1:IH4T]o]g_d>X wkņа|G`Uu^2:=iĒ7$9ۢƘBvni#/F^#2m/!#ŃpO@!ʓhYlJNcݠlJ hsWZxjP,M&# /< tw %t'}os[thI V96\h?"J-<- l-KbIܐ 7Gzov L[)OdVnha3_Z@ H(f2R/I ű֑L+S0c[6c0Qc 9o*9:8g&&Z*Z/'%qQpܒee0%xg]' dl >!*3@U@'⺒)ʉVX̕LTK,\ٮP Lj$ %1nv/dz,qaL L Nт Ge>+@pP.R ` 0v[{ЀMwlA T_)*A{I;LA ډA>J;MQ,ᒡ|h<# EQ C>!i-{EUɝ!U(J--Yîm[9I"2; 3jH54w $N +TxrEJo|ʰ+]e]^`)[C ,T BPЂ J&j>ŴűQˆaf aqaC k0eLT' Oh&M0R H-,t/<ԿP]{ "A ]_)c %m?]2>szuD쾹8TFg:dQ?`IjY! f 濢lWh6_ʳaPy1$2YES:aCIratjACBNr-[:z66 N!k`'1 r9p VYJ-SLVܨ2e\PaaA_O+m]DmH'>Wu _2V+}+[֬b֒ (O[k35.T`~]$+R.& =,qIJ=mAHL.<8 L1S2<_imeD!Og{IUѡ_]jE4p7vJX 6 f3ZK`T|Z㥰L5FIEz*!NsO? ,84WmEl:ΎMxI!.HJ^ uĿCW">P3le8]?k@%`@kAY񌿵CO͈ W}KM;]}#X*A9HFs,OzG&!LF`__Es J)WuA\*Lx95ULЊ/"N<'@f]3dw_GDj̨@9EA0SUFT!VixS0?-%!&n2KCaeD$-+\,Kv]1l1BX]^ I"H> F%Z+D@bY.REv9Y9Ev#P#Ʌ`)D,N:+瑟8@YLh`Ba6)S{0N6UA_ښTtO<3; M)V{ Aiz#X{#1/w;PIc6'w9 ^GԮ ~hIO3@zWk@[뮸" "57@l"D(RF,o OPCcQ1"{ cW•ȯei # ,%U& cX?!CE;2dy@1/"1 r'(LA dG c3;PP;Ej(^UHZwIkZ }t Ɛi9b)l Ku$ْ)UBbN8KzYPIrs9`*¶Lyk.e7!\\]:wЄ-0^Ws6a(܌W a+L᜼G*[N3pT9O0@|Ȃwj';aݎq2{e2zI" *YP $2u30fxGW*׺[ӡ*s]WaAR3bsxxP,; `% M ײJxr'sC#@ tE3XwްE_."ep\ /Fgk˹[YZRUaWJUpZ^d+' ^b_TdxX u('Ő/; yXhpeh6dF~ c2q F$R̗$ HXh\)07:4+1-^\k, lk|z;7 x  T犭%{>\ L׈%K9V-^NGʖN*V cDqS*-ʁA@ lG *JRkzR8hpacL$"`B{*|;eCQw#eXP#QG*i3)C)b㰽>P%u#8ò2rZBmPT~:}-&72xH!%&.ó,D‰]ґ7ϓ^JKH[ꅞ%b&gcwD1>Q`9-aU= HQ6OA|CKnVt.cjFLB*-mCP'/L`+gFDYaa;!d~Vnӧ/9Ti[p2n{N'2PcSV,YȲ+ Ɵu:\EYe񆂫6dȯ}[0r⦢$97&%[h D F}f Np `U)=I]Ee#>obM#C씠Uu'&n\"C8I'RAW EmdIȯHɌ9Ӿ{batf;BP: Wes1b7½{ioW#*/ H{(Jxw}hRAȂD4VYnt,,Xj"PEߙv_ʄ5W4MZ\Эr]s#ZwW/A&-Tj7*D]7:TZ/QEq!'yY4jwC|FHL8K`N^4a3Bh#yj1T賲 Mkkb-&\$`"*ZJ8& gY1!-a6# WBgJ_5LG-ٌ&"dZ"Vx81OKEXËHXHFs'.Z Kr^Blɏi v -"VneSr#K+N }ߎ {#wO!E(U8*/jdN`)}"{xjȚc2ÝƷÍ Zk אE Mt%39 !E#I B 5"맼#©zח*FZxPz|K^T HAf%dj(p`]9Y`< Kl 5 ,!uN}:Z Qm8vCKqňģlӘG3|wVvlo¢9`u& UƞIEU(A d/;Qjt/H܄7Q|ƒhLTH74ZJ0"^n2Y]Rl@"{9NSW U"Zs"?Ȧާ6"MJ|%~0DžU[ @C- ^ Bh؎]cns !VhA9Z/) PO, d<Ɏzӕ/. PL%Y2fN5y[auFZp5&LrKO~J,'܁=Ј j0f뎲.!0kXI d!wgvaDgh&#N( T###V$- PJAgJ "x癝z&oHvo2s\y_IE^"T [#9BdA.\ ku rgДؐDrUq N"A''vrl6;j\2HO\Xm]MyF ~9|S:k4C&e_`GUn{%WZ^R?0)VraKvUC:DH(fl#.RA1f(ȅ#?3A\=sٷ4t}yoLiL"=盵!۠Ҡ5O{QҰ$b~[9H@f6GqUD fŞ"2` *@f+rOq ̆)75KgF4aIC%2 *C[!@?d'O "%&$ep 䎪NHұp,R0‡zK/0V'U2~xL3r\u6`GX,{' %dP4. cnc :vRJa}t?\dXTwaŠnq\bHnE<|qY908P\JAX0w|/NǂBY !iE`Ptk@#"0,B8Sy h2+ġXj_Չ/:{hTo<'̧ YIV1tj)^m)&~˃1BV4yE|&=XZhRcC=<006‰a5>Jq9[We6kg6y֕zIgqgB,Z5`8j_obwV&BE\c,uAo3T! FvwզՖ2,Ե" i]f6B:Ж1G%n P\P%#ƃ؀F"wz2Jc1+r g-,AjGo^8T:a#Oxs9x}+7' TD ANROw4n_#D@%R$$a"C&qtr*f浧=$,(e22;XN#vL6`"6KWx,;K ݶRpa#cXL`k %{Y˛hSWxҫS|7IeAEN p!q*wSI|g,lK%b>foֺ!2sԂRs b-@q*ioitjaUEifNی0E-[ՂR\vPI-E;By)y$Xol- ~ SN0CCgram<s 3"Eqv WEfY?rْL5y aim] f5;GY@Jh(2~(C: RorM%i"BwkUj7z)fG`sCSI$\'Yj.JVO2Y?1f N\($zg -mZ$ ]08;CG": 9Cc"pGF}e8pPVy #a~nEbs3 wId#t4vLfiyC.203/c^3Y)PEEfEm `S{7僗 U)Zʡ%tp@G±{Q~aN=fZhGyܾwE+ccOیN:F0x#綂|dA%';ART)wD.J9gMY`X\:cҶDZfe=11(e;3K7k=^KEL&۔^=Eq6O1QDG EFm nؕ73KMpZ?*8N "[10o*ei4VaLD;+{YKPv満f։琝K([/4oHOu ])U[`y|Kz2˼zTI44,*Hl ӋnZ<#䞱A2V@L?f?d,r6@"W>8/Gke΅oڳM**翂/8la6y*v:tJwHQBHvř, 3GJ^ <.^u9F+rp|N$Ko1RS}Mk$"3. bTqj@LI+[ WcE+Wv&6 i+_6<4<%H5W$$9ozg$Hp>FM''jP@791\y|@oV{&_ t;d8>:)LA\u7bd&U:4WYʟވy1WV'fc5U 3aM2wb5|: yI.#?|иx3IJO|ߡɞ秮N_b1KȄ$1Cs[MSz[ոp%R)" Xw`S]VʛcpJFUg? #=ݽ%\Z diKȈ`m8yWXO삉9Y*.r3!D=勐U4kJEf{p9LOIN=wN^n6.**eBFN|iM--y4HMHg|R(RZJ%i&AC qQ (za,ԕg;55LYxPہ&CJ# a6jZUtGni ɶ:C`}SR8 /)j`_2tBǀ@QR?ĝU ^o~\S϶DRF*6|H3n`{gųݲp@IeWF~~5GضShIdrw6!x}!ѶXUtQ[ߖk"Yvn|*֗@蠿%(pvWPI6dǯ5_.u)V19yD^] dʘSߝ+VQCA2_T +d{58> xk})%*ːPM ȕfBaz;L5He5T#d"ŕ̅.\S"s. KP@[4NGfww Cb5.vUrdٹ/m8o&Z1YCOtH'N "vH~Sbl*˴"~ E|IlRâhWxP[CĊMHۓ+vYPVW\يp׏#2'jCdX<29%8 :?m Dq$DĂDiP6td~EP"eŪZ"K;rn!^P2rg޹EK⡐?KXghXGGpͩ/N9*ߛLMa T_]2䧒zgu݋&s1.翘(=sT.QRjT#l1bb 6nsن7m< +wSE='T'߈]~l6<)k&1ᄆ?)@FbeyIOfw.,sXW͓F6cC> ԉA5Q_U]`r5ОkY =)oJV(V_TȺwnJJr:5g좽4iVuIR2=m&^#- ;iw`9tOLE^ڣ9*,:JRÔR"/PWeO ǂOt't%dfgIKa(NɪUTiAv ֡zQΪ:0Q^O/:[59f}©#,62Ij7"U( fSj1n쒄SPD]ClQ"ݩ}Ee咙& 9/lPtZ#̄2vRfcBaڔ-˙k2j"Ú)VswBsR2=KPԤhɃrz̒Գl:8(7ŕZ7=)}|@NQ*+a2CzWIQL}Ѹ CEvK/^0)PmQ{!un|#Pԟv;7`O$C>qX3¾Eػ7IeZ+J2`+xت)y,,HNjo/Jf . ~\BBRNdҖY& x!Fa -eB={@5UrPɴRq#KU^KieUɂ͇6WDNbfCS Ml֖Wi4lfJ;^&0&ߨpѠITaraYcb"#"iZF\O';\D<*56e!}' 1܄Z\P93rC6kn:#od󨘈Xyf/ԥrW+" \6#ꭢ0jve[Ϯ.t#*z>BQIڟeL]⌵!$G^~Nz&,D0&8!ᓥkuQ%ȟAčt >:!kDHY(@? *G}`BKyMmUk+_J/jUv*c`HbGgd}j"B/(HSYŴ7dSiI*['(dTaySG!`J^CRUYg>TdhG LZ6ۈ*Y\] ^K׵ą_U+pFQ]-$Ԛsl܂оE~q`H.:~C,P$DWr Kb}}O)iHO_g?5ǹ̋_~ m)|m--EE '/Z" /ϩYH9Y:jPx >[e3. KS9ėss.>apb Rf.>vbaXaGƮᱱGa2YFQT!1l@h奚H7rH8N)p·g;/ ܄hRsN}pdU*hqSX "7F 2WZ"atɯR]J"K%XNcQ@fUca,+zJ ~>VhnfV0I;=&ϛyg*s; Jf JW Hj,9Y,#V ZwHHwM(2p`g:D}.*18bc D +z L j%7 x,'+1YԵEЀ]}zDG?@@jx9!V5Tr5[Ƹ 0+n7Tg跹dL^L`F߄Ţ E1`B* S20T!pbИ}X)3R,헋NE#Re`D/) (%¦4F0w(EdfJxe6.9mQ` Nap+2IPmή ͑4(,/{)k.-IAP'"xp.ȌZQ)@8q%WZ5xl c/m)@M ,t8ELRAiuʈn{,q]eXH0'T%DUf' PFs7ݾB#>]u>t8,ʺѪ> zѴ1/X ?LhmE"}[.NlƅvRbr"<S GDӥQcN $wh>6u;ٿ*[k^'\mvµj"U5xCۚMFnAbL:WB#n\L -,n,ȗ=&1CzTix$$*ԄL4P9T-agzTVrtd\֊ 9{uSa _H#5Ǡ3cN4ߍKVAU*`Mj)gJ %-+TEl2?g/#J+8VC?X˅H."䘮 VpBnP"GzeBU!f:q 75%tmro1|x>eR#lJij _WlO-rI_KiNRKɓey&e+?5J?(͠`"5zdvfG>]UbL({(dF'ldmJJ%*R%OXQ#xTѴ-VG ߵ#P1ς,digh}e<܀ZYKne`"ct.X9!*^͔n.'w֘Wt^3ΊIحĂzj鼂%)ӣNai-9bHyҵT(B y #jDF), !JKxoch2V U$b=O2~ !@VD1v9 #\K$}i2{rV>7w)1,_P葴 yR.3dd#S3uzRU>NJ2RLү[n'ěJHG7Fɨ (_ c7AgI<ѽ-.ePӃ"7a)!?+8$ɔ7{IGVΞȎ$byxHj16K8zAKTF*)cأѤ.5ԓw 7P[k$"B(7% Ṁ{LMSqqcψK=` _8'`#w@jQZ2P)$nC]KL>`@!SNم SƍU27qOvH"#;qb*{—.5րPCMKJ;N%e7 Vu-Bi:M0엶x(t-k'.'Wr1flTќwAn<4 Vp lumӔ%4K1}B5 Bٵ !q,pu)~hV \wrWW[wkf GW ٱLw$&b%7JD5ͶD\|Z~yA&Ys3)0s YR#F#g0Qq2+2#w"8Tw@[4eg*1^)3*5dFE7P,P?p۳!X[+}f?D..lM6N5t'6@]jeU./Z[lHAtVE7p"7#J_dd8w8ژ)[Hɳ^ʐ1/㮟!aU;it89,MǛd4p>hPւӘgX=>@ Y Jvff0z?@h"}YJ‰~NESdBďm0aq? Ԡ.H9@N*ok}ITGDnJ&o!zvao!Ӷ)Q%HLyHD Zsn9*.iN0Blqn}J(^*}pq I9d*|_#RO4Qu* W,!:dSK6[cҔcai3 ߣV" D ' vȏV“)M.+*\d@A8 XF{T"+Py "~5b+uKF'b3:R edv {,c$XMI+<5evTGʄӛ;zڻ&AՊ_\@ڪĴ~%!))\ Cbc] Q*Tw(ʐPR Ĭ#1I'_2Iͥ3Րy*Aod~2LZ8x%rOc6ZAi/1HB25( 1>xhoerL<}‚~#y>8r{%Ɣe:ḲR6M/,NɊ@Ո͉+URЌ: OA:8#29 oP̍N;Rem7U3cmC4l)D!*4pFQL1itf /%C˷;QS+nAHR4aj`(TzzC]P>jNXodQEQEQ @"yDbROs-0:e 2esIJ5蛞dNPn3.gjifl ޻'_"K-:Be95$,&9hA7PKNJM3;?/<Aj=V/:lh#0-բx$a,AK0=-abob .O.fivC(GHnN@.jÖE2QpHykCdx4Ѳ" {CᎳEDñ\-/OՎ13&֕Tzr *ZctFal\ A1 )֯ґH*s2O \p;3IgyD(Q|XdJh2弶<{S;fikBGv[!WV%.5]l[NqXC +23Y[]R (ܙ) ji*r'DFO,&ijbaJ"+E~8 [Ve-ͼ1p /jgڬ 7=)SK2z|'Sʙ&$lD`D`E𦙿Te/H3HLv* /!xJnbZ:fQ%#)oVv^ R{>'dHv>܋,?Ce%8E.ž3o)2fS%9^#bm玢wSV,J(#8zBeӓVOi5yzʔHeԵ[qg̈S] +X5|EmWlDXQ~y,($i[!~~h{bVQEPY*thr B624]e0*T6liydaIMKL-Gmp,1"ZgS&_iV&5"Y BA[am'hۺ*'UR)Psܱi1Ay77xlKi4?-PVYh-F(VYì^fK;$6Vݲ#Wi,h3wYg_럐(#B͡/UjmLch'TRͫyV܉%D|Wq(&Dh:CiV~'ѓ*bY0+G֞{RX(GhH5e>V~!$zÂ,Sҷ&R|+aA;S((ISekB$F6 #_LzaZ8 ?+:6}c)f:E=R+eUlqfjb|qkyQ\F洦|EY|8bx7ՠ3!zL7DAXf,oɋv.qP kUljݺR%k-mo؄]B͐ט&Y:DRMvZ8 2!YؕA=vQx}3Gqbsf@[^!V~2X#(m) %L3Ofl/RX + n;6_Q7_^lȪG3OX&LS EUSkR5(͋TxʕjXI;C+ 6R֔Mb$l|fd.{ xJ#@{Q$ؾ5/h0ͭ[R\ݫŹs 6 kBsq HTsj~E[I CR%eE(I'EHidUsq#wӇϵh2GP&X)~݇$&bksA;Uۿs6%z8)s9Od10*Аz.&XOb1(fO3 VVhrf>y7c_{6+2! Dl,.M$7tWԑ׶B͕WUnhs7䦝ӺR*#|i;kY4,ؿQ2K??2_ @d.cR5VRəDiT_VP<9ٻ6K{7tl%<6դSΩL]VvQDf(gcgzNP:#G9a$IQ66$p"Ό3Ftj "K#yy1>D-|fJp*T dvҮ[$^5<ȄѯdʹMZ/d+nw_GOgsG5`XZL{8LNr֔:/J킜|D!DٻpNbJ o0n)^])R.V );Y F9Y9)%oxb([*G2tgԅHt27gEu@gLwELt6h&J$=8 C&7Xt<̍1! 3\e9cEC@н}C8Ut:=Q-Lєb-Qˇ0i 8!Z,28 46/%E*Qzvsp0Q2zNg.ٽmVKL&-"B*"w #N@]M{ z_jbWDO'ۡ 6U\nȬ4;YFSp#JNa׬d n1A`ɔ4h6C]ïZK鉏Fc*S2te991kɵ TlpP$>AO\)J@S348XnLTe).6g犆|(9@,-RhϯM 5Pϕ66Ć+ )a9}LN44Dr}e&cSuGr'C!Q^L]i4jSeZB!LAF P22'U\n΋th;"8EUro zĤ d=D-AxOCH1 ^Bv" )GɔcώZ\ o ^j#!LR'FSr .A@O^LRwjP_%9`e@OIh iD "]¤*ʔ22L  p SB~&#"ǁLD~G$Dy@! TIq k"5"eh$̍G=pB6 *8]Xb-G2Aֹ AH t-\\#Rv%b#WCҿ0=)(de0V D9sM1 C8Ueފ> Zqy`(H8H0ldJW%A%Ej#0->|U9xV+8aB RyG4HiEW鰸sa & @fSf:̌ ? % ʹ KIq1uyיK(֣iaўdFVrG{ FTl*y4:5bH02G3йP%+;[F"|v \9`e@Q?3B$˂> K]CD@G 9RR;xdAOU4 Eu4jVqj($F!U$aZ#B+%3ûDB:v<I@5 M[!sEYq;£Ȭ4p@[Y ^@'Y "" |@PD  <`|@@ #  "& ""&""DD@@D 81 "DLT@DTDDD@DD 8 `xDTQ11> DDD@<GTDDDD" |D@8 >""$|@DDDDDDTL@DDD@8 >"" & """""""" |@DDDDDDD  b"" """ b"@D@ Q<""LDD@Pq"L@DHDDD@Q1c& """""""" |DD@DDDD@  "" b*" b |@@DD@D@  """""D@L ""DDD@DD@ 8  |@DP1'""DDDDDDD@@DDD@DLDTDD@DDDATLDDDDD@DDLD@DLDD@P1> DD@DDD 1)@%!A!?J B!A@  !"`" """"D@" `" G@D@DDD@11q1Q"*&* b""""""" |DDHDDL@DDTDLD@ `"""" &"""""*"""& |DDDDD@D""" GATDDDDD@ >" "DDADLDDDDD@D@1>" " J@I$I$I$I Iy$H $I$@@" "*&""*""" |LD@I$@H$I$I$I$I ,i$Hp0P@P1" @*""" |DDDDD@D@@0 0P ""AI $I I$I$I I I$I$ |D@PDPDDDDDDDDDDD@@D@  #P UUUUUU@@ $I$@ $I$Iy$I$H$@&"""*""" b"*"" |D  """"" |D@DD@DHDY4I$H$I I$I,I$Hd $I$H$H$$I$I$I""@DDD> $ `&""(b""""DAI $I4I$I$<I$@ $I$@I!I$H @I$H$hdI$I$I$9I  I$H  H$i$I  H$p $@ $I$I ,I4H$I$I$$I$I$I$I$@I$@ $H$>"""" |@DD@ 0P@I$I$I4$HI$I$I$I  *UUUUUUUUUUUUꢀH $<I$Iy$I H$I$I I$I I$I I$Iy$H$I UUTUU@P ???)$H $I @ $I$I I$H $)$@ $I$"" `""DLDHI$o-A4ULbZ(QRNAΡqyEz OFDy-Ֆ \>RwXpaށSu{`ؠy4Y$Vt!t"Q^eƺH}ҡ&/mPI5e@݊ A(PWL&NLyF R:lh؛MXnךkѹd,򯛔S~7f@!jK2k<)w^r5ZjNTb KsjԡTXJ"W/”q\4UfXI81;вsH8LV Gk\S F ֬<[AB:?a f24,姓AdA;! w1l]s~q_ 3~[VeŅ· ?M1%&)EC>̍Z  Biw;ڟJh' \@>Kb~% )$bf e:.:r@`LAN lGՑPO#DB4G0?بQqt( khb.3cC=<%OLG)0 5 B͙c2 "+YgQŝ{|فsԵ% 5"#-aHWNYP  ,΍ óEaE*\o|l SaeqiDqw"nmsGM\UU˓6P1QOouZlB?hو5Mu(f1֜`nI30PӞaBlܵ*wi pZu6 chL6wwBK_Ry%ժiZ姙0󎌄"ssCEN~dz[p0A<-! v#D표./5 +$ղv1PM>d3cD:Џj5#:t7LxW$Ӫ74NwH ¦ wۢy+XZdB -$Âmu>e.L=ۣ7)M% %`Hy42xpȚBt0X0χ-_x#U<[N𦿲󚛅CM[^+]?;]'8v,M)#r8y {|s7.f'u `uI#Qx#'Boʯ[[1y&;ס+{U&bǃ^t!{6]}͗oYD kE?T@B_OFi'[g{mV@oFCpD=*ۈ,s.z!zo_´"$SBRi_6RW:rʊ@|ږgj˒I\i1`Irp&4:~Li'؛ ^^-,]1B*1:T'vGS. VjA?~g@S.(p 60o+l":$hg 'JLf4U~Xr-/f3Ml^3dT2F^#2ᡚV4׏VC6 '\Dhf%ȝx|xC1J"K~ÓZE/S$Hی- ⠜;[Ja2 aF\bK{T!GtBfQt¦%`K48h(y˯xr%Q(lCrF$e9h*p8fe)[,BPT CP (z9q"1}sHͳ2֘xH>nKz5x m₅32=i|YHyUYZdx%Aӛ(xpDy<4rx8<#zɲfP\脰C/(.ei#:e)"xAꇍ&\fHeR6[o#^jwpGbnc&0\vz&25u:sޫlA (Ifd΋WY-$cV# nP 7n\#ĤO+FS4 Jn;'d۵*wNG9-8CHT@[nm00٤!ܻC <cz1SC'FDΖF>$=L ESdwsdDM|c5"jq,zF\Nu6 -UZ R&Xqpǰ:vUJuC&%K{ $w@TD՟̙ad'O D;A`o4(5YўҼ ^^4Z8R wUO5rtCgn]u-]]}ޓdWV8s fcN'/&knB_ ժCNשj Fu~>|nH {rM"J;2%4'Dn.$MIFZ 4g^# ަnk %n* v;=[ k!!Na?46I|Ν~hMU궳!a.ǛULz/? #z0/s͟b΍ $mHk{X&'VRGoxXsvSd%p?ATCp̂(8@K(8Eճ7 y`$<MpI4',G~X7g{WK+Mu5h\"ms*0:tIջCs\:HȪFrAp.@@M]C+\1.s(PݩYrR #m$4|t$;}`tٶ,}Gȕ VcOyPHT'gH}/Gk,d@ghc,P;xAO]_Mhd,>b+kDkKcT`j1H}D$/L:.eMK.Z$6٫oyf>$ "ڿք ^G^J82K"=AצR.1^z\dЈ"X*JK|a[ q#IjE;| "NnZ}c"5I^+ߓqLb;2y\G1?S*]Rٵ?,iU;VA!mR 6iR4F2yV7dque?mMPa󔪅2 c7ca7J5EqCb8-'JNDDL=;寧Ψ:O%GdסwTaSpT%y2(VkAiS;5f-6@rP:y PDtQp3"H}6D5nWzQR[ Ƣtk5ֱF{x.)䲖]Nħ2g~TW7AH k:hxou+ Oc0ģ'J$7j]Dsw#kҒV$,Y/y' CGSNT%=FxE#Q?7ҺuAheU7\&"1Jlr[(x[Q `}zXd +/cE=K&n%lԵZ=#(}c|6.2IO҈= (]`yڈ/4%VC$,JWd81hvtnz<[it 5Ep6$ɷ6ϖ,+ni!j'Gh,*SGa_2cVF1Vd!kE._R)NF^y6D-X8hi2gS4NfHig YȤUC{Bs,BT Z`ȻɌ\%%%Wzj_+4 0GdN(so =+v>1JJb.) ^$cW!%" q.D1$E{%Z+G5\ Y93_8u!M:"")UOgV#NW27Q;k5Pt76eI1gᬵ3I@4w,<0DHZtCK,2 Ir֐@J{QS-VUE:\ݘme2**37DO.d9cмSsf!j{=0!849.׮n{0#Mpë $ICeK!W"HCT}ڂcdWZJ+=z3@'tϢl#:PyXۛS‘l%c#㾵/] ƃ(0S ;S|ms{Ȇ/kY@L1^g1:ӄ97n|,-,t%j>\w$.*bȕpID^4#,Edi|peʘס@6@&`AgƝvӇNp|j!I7}XΒh ? KՁ?ɏ<0|+ 0FhH2ui/s|(xQGiWsYhK? 3E DX^|-C.Pg)W|ZfNpr!"|nmJѱu,s/N>)ƼLѷgf7-JeKA @-aLk@UL~mpb4_6STQ]"ȇ$"MC5`ľ*Vf"7tO J-$lCGWy١kTG}ZА%]}I.`&EDWISeS;cv#{$a{|~RuXOhz6\fDK bj!SXVst&.JPP, zWrqD2 +`໣hڍFr6*$6X ٠k5}"RvmG*_- 8*]Xs, ol=Ҽ0Ẍ oU}Os,kY;VW ~'j:ͧPxp M!Tb 2] iDj:XgUzldD?X klV"KĊzf0Rhj'7'cP9owkⴹ.71{e:676(i\,N^f3yexԂ*TJMX+' }!Ѩ&S\0㦂-+i|`jR˘Pü#|8f@DFg LUϚGH3'.*0.OB2K^P8D>Y@(epFFD^~zC G7'!·)bH|_zci)`coHR+%SY5!,W)!y3'nsH<]N _$ބ4QZt?ϟ%387^ܽG:a 4PXls2?}F݇N[6-jfÇFb3 Be/|}$TD`hM5j$qbQXڰ7]gӯDn}eRE%Kg*WW¤ʜ&uVOJ!jbPBr{QY3{v[۩ t;&-yiXQdbAӸ"!^2M!F&@#99< ) lEWyE t0NkzЋ1nox֎~+q)\w{F;N|rK{.I܋p]*4H:(=+ |5iQD }_hq$(M1uV+h5cUjGI'2 ;GD0> 'wԁ|cFUlp=d1!>n),M'§Ml7cH^M  \) O%}G(5ٕU}dʠx} @T\)fH:a N+.~]%8 o;m{,T@^K;`-?lYX\L/34F#+9r[!?~"&.WӲb ^5%eྈXL B5F6ZtNy%Pp.4'^"ip-V"P|ug9Qo$!76x=r؀a8Cc ND.#,Ut]#8"JIȨ2K*{uB){?t q:ZXJ|js?O.C*2XPL0\I㛏g>@ΛG ox+fL 蕊PJ/PqsFϷD4^j6sݢ-9]v?cWu`ކV1u"VBkB(NUadxU`+Ж;eCy粪iQfi¥7b.oKƏ3Eq:#{?ç$]CL%n>!U3-ma)K-|AA*lj5XnId!2W/FT&9*5_ F/. vy_o=-e8anpVDtB\*%kAnXzu B-ueUg_no?&VRA2l:1 |QN>̵Wc~M^qjjW#:msE>):p,LĂ{-OZ3R [|>ěwq+*K={ZvLjlyun-Wa=Ф4VLT$ ŻdƯ':upG;D"+F/*0]rD[نi.HHaHrjuaGJ\BK(2 qS 8O"~"5JW/vvnxt敇U+KϖB)D{977,^߂pޕ)ߏ*ֿ&xΑ[c!.hɴ0mh1o|g=4OP6Ȉ7]«m5G[m+p[f3b'8E6_Yw4DB?b J:DzDv]R0^-|(K.zDBfKk@M IGZA<'ut^`ǥT6>df(j3Uts| EAU7/AjOOJ|\m/2 $i(|Qbŷ jURzxjHpl9xj` X9OAi'()-ze:?`K UhFf& LY>c-s(zt'gC(:9"ˌ7GB< u~Z$5'àԺܕΈtr^ARÑfZ.( )8kRˡӏ o K$Z^6*õ jK{-=%;c+D<rR=% ]\qM\IYm'S/o/d[U j* ?-WSlH˭7&]懩e8u"fKTE&Ss,!3RvVNN{'MQr,rg5bب8x?Eb^u|KQ|*Jbbh&n!ծ,nk0Zfe) TIKcSU2b*)UeUNLj!ONe?gH}yg'lqN!inaGmiCGy0y~QzD_,$*|v:nam=w_}go/#,t#FI9G􀸬FZ) @3tϗ_ z:'NTn,,28]eQfí=r݌Z5.Z a!?FT˘!(ሒ.TKdxEǗb0;%}άcEu?N yepヘӒ9~AV¾004R(y#KpJarVrժJhmP7Bȉ=)9I.b!XQߌkʚzsKuq|XTtĹBjy6%5jd%$})!2><9? gnt]o?5u܏M$}F|ݽ'B2jVMFk%֯]1*'vs> q K7Uګ6D#Po:^Dٌ#̻l`"BbJvUsudi;N^5D|\RF1f].T0AUh킒iBxn.: O~W)wv.!H"7BۍM<䗢J\ʱoirK,6/Kn׊Q̞ ɓpT5QHI#`1X+JsikN?Q92 Xw]44ʬWVݓ;T)Fs 8A'T>kKvI$VIqT[C^/yoF_.vUsOd"~ I( h:zQε!bAW]h4w|UOBbզKcv{>lUO8i@ ˫LܶY2T?M~(q{4~?'˄o,>s%l)WV"~G!(f&p2zUFmdF!fB^x`ƧƬRV&9Ht_qv #("q0$.l\HYoS\C5-Y1ώMe1Wo^+,Dy\q#JIJ"Yt;)&Z{0>U 3vqgc۱TfU'6:(p:^<<(6J]TV8S UBT^;`ōP`\ @i~f,&7ņ*@pfCxB:Li{."I3ȭ m4^LaYv-)\ ekYIz!B[\2de|d@ 3'czUk L]V fEI*4'dC]f/y_dÇJ#'9*aU:XD\17U ja~j]fa$f%PއQ`hnq2!/"ҳ |Fh]D Tp. ?mr Cf`߈a[-6ԍɃ e9>%\-N\Og( M{H-C^J,ƌؚJ&rC~$>.T -\vP'ܢ)Q].,IJA*= hd?b{ż pR,;~|/S5<%1(e2c|4`fyklRӳ(HK2A*RSd5# N}F]JxTx:Ƴ]zF6T^d`O,[kC#?)AGl H -y-L?BUg~䤖u A_: =c4h [B2Cąl޺.IDGJ] 벑CNdK"[ʁ(]2&VOe2 UjC6Yg 譲O-2"䁏,ϦN2vL0=ܨkQ1l I6A֋:*r&,T98B 'W&4:iL M7adF$?V%&Dk'꽀JQ+K#v:Dװhm}s9BҧzXܟXOsB-@PL8$O%>E98(Ii#)E-H U¢r2(u+^a:f9l-U'ܜ@.ݫ%:zZI7b28{^*kLEuD!M[wtEo$s^"DK)哆z.GzG)()drh{7PC+)+ i /48H3RH78S@M-#^R^(# Mȏ0 >L%)j- ޥQ$u4mX|؛8G0F:ܿA LLP<65%0N8A=X CؗĻI[严_kʠRF(]<6#UH::RU!K:) _ kv1PN)u9џncn1C0:3to?`Wle2䆢/1cH͡,:fGjP#eĆ!ғ\N{7ECxc桦L{vWf]_Zb*$N學j 7@e٬m?qK!!)J]PtR>uVVaj˜1zm8pD8YK-c:q\p\mnmNtOr.LolCP{[J-ȨWňtRTV) ZɅ@\{q"b= (Gb4B~Bո}w%{5q12űOR*aX >|-k_7A#,pjgRU׽6vW4Ɏ#*GaArp‰aX'&-\]6+ @iNq;ҮTgڵ@nazR t'Z6ޫElZF}IVD_s9Q1Ԓtw5o걻9RS=O}yւ]r"34Z76s)j oZ o݆n(*ǵNyQ63YII2qvo>/qyl)nbŻ{)T| ({rhc go5IZscmg8n1\<'J 4~  *TnjKauJzmܽ|kEueaM#sebh U"#UewWIzd/zuE?>W>rV]!Q0|fw Ԩdɫ>Ӭ,qt͝"懲-h0n{+A^j"[ۑ[lRh {x7Ӵ'LHkR鉶+E0]4^~8xL켹DmvATLA6Ȩұd5L5%@cfJ" -w*v$k-γX͎~POrVKIQ^x!j 川h LH|!.r5yYD!>UF,cTH7%:㪐D! /mrh GVBI,ͣ˯ (tu֣irXҊ>T:+}#Ԁ p"!ha6H5")qMF9A}#Z$a1uM ̃hy Ǒ_|8am '>% 5 țd,p:O4owxKom ]*ɆExUyN# :JV''uEv#4K3o2 E:S=BûE.o6uQ˾Q0E\֛=(B> = (난 odr0N151F%9`yOg_]CD!36?79w>NV 3T""s(9-t?8ղ1y5íY쟟_Tv֯Lz=z88s*Q(sʒGJ8D7 Y"P}2AKwQ\I;&HZ.yJPq c/'+H׵vdj>$iA65g ySŴh9 ^t  v)H9a%Ra^)3驐[>p9r8mUKDe·Wɚ%F3(\9lZbH@ i- F+n-_M=kQPiγ B Rъp*ER7TGK?$LR\9BvHXմS\7Xdkc_ 0"IeJD,.w.Hx6?mbx }>^_Hr蝫TER1IŝBgkU . ,:bU(HUh~˺0ETzn q"&Q!u U,c-GRL~*$ReU槓$Oy Co6LOO"ҭ M%\Bx<Bogm_ln˸& (LHP, {-A\K0(~}Ɛ0¿ :aثr@!ES9I2lNM L1OhS|Rk5 : W9N6I@uEd&,ȗ;[1+>wK@""^` Kn$%&5}?jq6b+ )[((KvbϮ[Q1)mg0UOs,RW1Q{֑$D$/{vUx#ITN G2ň%(i_nș]8 á\QS,IVDFfvA`3 6)"~҄{5%K r)T4XK(>V h ?wM%U~iED"Y/;Xf.uF ?kݩbA._XNb qY<őUfteJ@/%S/W*KnJ~/1h*.*-=ҝ+4ryh$TkԄo:zZMX-~cUJevZ92m0 Â!?dI U GaS'` ?s2#z%&)a*?EPڝ'm>CiY.@tb\Hk ގ@;Sk305Hb("8ǃvr-i$[O2Plb*8A0#v0pGhݲҘH NNJW5KEnv*l1- K,WxC\[4+ @c\b\_l͵;b/7'%k5"! LƆ.ۏ(,&iزڙmUOL6h%FMUc~:))oD~ n"غ~MX P(nR fFjlz.xD4YY =1=rCTj *"u?.G(DCʧZc Dڪɗ2(yb7 ?'ɜ@uPV*1VMwvǢJWWǔeydΧ!k<%c<@&QS;L7~ E5mW~;X}7P}+2巂fĦK/J镢 dL3CѺ܇%;vWrI}Cfrw jqcъ[zY 1 WŮP0.)(hqIZH{BedU\{X/%S&G"uẩ^0oHWv{wuFog7ܺQ)o,:%r6%hQ ' I>5ZղWv[V'f*󂂱DU*]B$;DB9|JWL` ruJPFlhY)_\]7f3-o lw[ar014/'[youE505(>BΑKbځwnD1^QD1-V|yIRD- D:AHC1+ m_1&DG_ vI@x$F-D!o랭NpP6C)έUA>Zі{W٤UVAVau͍֗Cr9PCgޱ` Śv'^כL~Q/Rjbʧ̑B>Ϯh$mpĐI5n M|JwXX LhjzZa**NY kZU~4Yj Se!P7tTZ'ᡣQ6Je'@@|ģfԇ-DI&$^;LNgDÑ)yKAT<_{s˔rr ]{7,YINh&=^Yӊ,ՆF9Ӧv1 #Ķ n9ݴ^让͸UjeJPp䯃k"{oTqS(\ZyʌGSSKnTӤ(] >Umy3WFy;:;rWr榡KT* ӻaܮ=c:w-wᩚxf@C .í]@k#}`4E"+$Y}`"-hӠrlHHCȝ&TwGx*rSY :-A: `rhZq ;a c#٘nA$Cas ׉:z^^ͼQB֤EHm&,$QķP5հX# =LA\gVKr881t4o$m.`EU鵓JLJxm'"7\i }w*ǡ 7]0B_MKnf8H@cJ,e03tSnT&Yi$x_1B1M!Yd9CL;"Z(G |-~nƮ`UJ4u%?Q5 bgR3 O-0K' 7VSq#dTGt/ܻ D9>[ f-_Y!?i˜q?TZmc\s`VS2 X&4+ oBҒl`MBGj^kgޒ+.=PL蠩QL"܀5& dXqmZS Y"33W W@+=D@t0&1d` he:! Hd AN 2:A d1w{Ģ}yPo\Jf{Q+1 n}p %g1Sqti˥ץh"̶D\fY.xA=$[+ WC3+ЫYL$S#T4Q!{']ΨM yI 6)xpb!`u.HX"aH#[ٯ;:%qd7\_ru1d9pIy" D '&YE3ߕ-1ΐ& g?Cyğ} 0HW{P.]N.Mx>+YØȩQn`_f/ԕ`dђ!i8-i=|7$D0b#my9^BR1%O@yv?H!,6)@~dNA'-v/"/öΥXa88,.GELlcbtgo)9aL~-?< ^EZ؈!7t<"st/A-<:Y<{ATU J#Ђ{%g%,^LL%?(>L%ե{O' |kKxu3hJ\~PΆ]PԛyٔEyF &tҹc8jIvvR6P1RDGS/^"* o ;EFkXe/Q;_:.kdR}*47EQ': Q VB'8C H(/|"P~A;Eex{{Å:`p%] Hgݛ[E(DD`1D?2b}aKpӋ ZO8NpP[Zz yT岟W>SӶ܇U8q0L>aCm6 5J,vd8D6p0rwR~u l{fpbMv`WQwq/TǓlZ։]h@)u,kj3lEܝqV}}#(Iᨁ['ϱYanyJ\,u"QEt"9QlNl`# $2&" Ih1 .DFi3!<-4JV /}t~\&[C$&_^^a7o y(.&R`6.$lepD{Xp$8㝔(44$j<ʸ`فɫ48ҕwMj?7 HH =dKP hxP&]"ǔO\ BJvL+> ҿ/JJފX+u$jsT"TqKF$1݊X"BL.^K#Y>!]5@/p$3#7D<\ˇ V!Nh؄Zb9ܠ=RM #$M@'&51ޞG3M(K/hIMC` `6]2(xy{MUdCwzݲڿz8jT[)"%YBE+wIH$5 3],uG 3`w@BBsBI>UD)` L@@Cj]Mkdh6z-~ja,1]F"(4`M47VtayuEe|2vIm_lD"8#oj gZSD?+V0( vQ;#B0` h)ၺ?,FUs֞._=l]&ڦ49JY:Bf4JHI"MG::ZMxk(9J0"B^$Q5-FF&p֏YavowǮcXсŬPzZtr$DzT>]G$.BQTႴZ6J ̌*@xޚL_1oQ QT鲠 6'޲Qg/--))a4Ķ~a/h=&;[ia~ UnpFjtCNT1(pdBtQns-LLg54L>O _-H ;1UM!ƚ^𫑒Mdt C<ɄX()VoU~v-nz"ަoڐcZ4ڪtwM#$=cCOylʚ8@7`W-JGA'*d0˦'B FuT մw`)+jΒPY;R9T }cB1[4ڵZ̭Kh];Ks g}װc=?BbymdCz6 ;]BTu[lTu-tu2iaCaVUԣr%ҏ;o$[S DÑ @:wхW7Հe<2@BUx[Ej_Om>RT3juшL֙qXNƂf²lQ/4b K%u^dfp~z ˔uaWϑwU{ov5oje>v)"i@&+mf| G>Mg˟V!"̧XI<0KL8&qR!.+|5"au4g(N%R.ZIܒ9}O#(La7hd'/xD R|gbr҈W)QQqH@er 2E $_q^RTJ̦á-lV xY,zR34Յ7 >ɑI!HP-P @<-%X kz 0eºS*b՚ʖrLv& x:0ጢ)t_Iv^Eqb׍E@0}i񔎿~fs!!$Rܷ2 hɗN=J";ÆZ~V/  ^s AM9Qn˳CuU-42h)5fSQ L^N=o2jTڑ.*1"~*cSqDjS Ѥ6սg2hlWC"/2޸+F9hʥVyDL"ر_y2?_+fSI-r|geo&gcw$"#mtf6aRNDT+k1m˧eodOIdF7i۪4-ޑ=PK{ [fY%94nfHBESp2͟ffY"&eq~n#N6WIR(Rށ3ӁoO D%$[cn:iYrjT)(;zZul,u\ѥ˲cOʪYh#ݭI_F8mA%ad!׶=dg_+|yz2f  O,lU z gedXAU"$ߏa r!1f-H#9"*Bev-ϸɉeI}WX,!vfe"ُZ[*e4헽BZZxIPr2LZVn߰)9xhXmAȭ*`%d)r4'4|:xCщc MhZVܭaW !i[R *GiQF$KTVce0 H8ґfD ^mؤ)uDt3чQ2%Kp xH 5nʦt㽀KsbF"2Yaglg"βz|!F6o`T$B:4%h~-  =eJ.<<)Vsd /d&]\n N|z *\Ѓk2՘RM-2 #dD ^afJhj:oٿ%[kTՄdA{ʁ#=Q-lyѯF~^OnOJKx⚲T@%ͧu|8}9 ^)h"Nsw.*R]"ɄjTN2+8Jؚ>LkaIkWD<$Y6vl|&7BbrBv.3Θ_kjVKie}s1Ϸcs+Uʑ!14MŕEuvj3#+9ӑYғҙ/*sgfbܐ 7Y%}3Ķݯ22] +S}X/qQBLD&@VMXuSC4)(l\ʖE) qVsqBE&(vsaM}V%FR5b̷n]ngx@u9SK}a`MWBccaj "9|"]WK5̅s 16'vmayM_Zꭊ8VSN;^R vSцELd\.<\[k\W0a"_,#q:.5Ψm{ ]f rw&'Qd-M]-Aqʭna1uk#H&,:Sȁ9!=_[p9F`K]sEk]#q:\N$o's@%oc%Z#*B]q'E;<}32R,NTp]fx𼩎QZ~Q[SQnSZKt[divM}*+&gjrDߑ%KTyM}5ҳHuy숗.SͶK3+U* BJ>+϶ir^x^oơ Z)7])Cl {1RFZѓ;4}ˆ)]>r&((Ďu1ũLQۣS]+sh QӺ1:$"x̂ʏ JF4z4nC-Qa4Z'D+Zn8z|u7xHn$"wE6SKZ9n\n\}B9?mr9A`V[y/ʔUX3aȿ=udSJّѪG0J*g[nc= h9:.,C+bC-̢U;,3AE'4j-Wҋe' #PRAZč8=W{|&/c"ǧ,.y&Yv:>i<\+z&Jt!Ǡ+C ɩd\2tVok )8F*[8eq~ZY]^-~iA\SDRq7y2I4Ȩt"'o)$f6^ׂ~~%vf+ÅvBE7m+ Qc֥UL<[rz|QswJ9"&oْR $褣$]Rn~BC5./.lmH@먔cD|%04bUL3X%TUK1Geh$ZVl=]:|Mm +QG@̊)o74I D:Her31+r͑8GO2b/,v,Ʀ<|7ñ@\J˘4f'%X|/8g7 F8i@lEj3j [w|iH ^{ |A#6p[ EȈ{,b'(`H$\!zlm8m ;tK2fTI#mqY(tֺHSe3@1"4Ҷ2;_ )yRF, EݍնL@ҷ<wN=&&A)D]Oȍ[圏C}1j 1O+kQ9fWJB6Eg_Mcgȝ% (Y)J+? F^N:'b=1Mhv5(0--[zR-I.[f$zħ8M*2UHTtW-^lC$06,M:':ŏug4LVŲYI:T" %IA3Zgt R>*E\_\HDzLSqOQA1202TgV$[~!kqNL>=—~e&F5J{0nlu%OB+)4}WIֵY$xiPDՄQԞE"w]y+0Ϧ!i= Gb `y5yC\1KHΫL$|,W dXf6+AdIcwtg}[G/?)q@GCTn!Zee? !G!%+P'`lWfnGH (Z龙sI"x|j:Z!ٌq%~'Dx}iBDDz8 [/GGM $%#cf&.X};qڤ®Q}? 2y]beD'ѱbo 72fZDR1(R6)<9CȆ$wFSP&(Zb|R F܎ ;y,A7;!hEmQDYF 9,)F[:N}K(/C XHDl D5%fDx缸 `ƤD/טAG IPEJOyH Hdd?'pw?\``yd j>(MS[џ@zITVKf"xͮsuZ/'Х ~U`vBgs /Bh]*f_ U(4 ; ,jе|Ȫ8P^ﴻ#!9ꙄFإ|wm9"D$/OM(E3x|/ fy^EoWa+27 ?`]~W02L=MB|ե$W*<0!g^bqoTpR^za2J=VQ%gD( 6wd\x*@6_IBEOVvLKu(//(/e3>JQk+Db!:0ؚZBl".j /G˫W1'Klrj7N$ڼ@~TjGqv(p]"3R?xQuRƹeMd+0\7u}[2qj_k';FsR{ݪ&AU+-Ⱦ$ӢiB> ȩ9:3g]6@ 5Τq Kiw-@D|qfEڭ4g,"4V4 ZRgMs$g?LdcJ"=DO\,`ti {VɛHR,ľ<-"үכ8z4{2/a(פ*DZc^xM)y|õ`85 f ŧMڸ+%Q6F8d&XUx-%Ҕ_E|>RFӮT42#Z>sӋUm-CT!M,C},EW&k$߾15EQ5QBOH 'gt:)$xP,M} Hw/-&7CToHQzߍ=b[R8ZۋeYv<'~m"BR^jϖ ?/vHd|NP<%`bI$J&ҩC/T>NK\\!ށ$0B)a?znDy戉ru(!]Q3hKt# T<Hɪ{;2sDjYYf-lTU#n&*fhJ/שX KL`:dƂ[c jЏ (hH-y߫c*+Ε$TQj^NmC*P@ YPDj9>LtN0KkKё~+יJiM*4,5y6V.m47+͚B3~-G*ĵ}$Ȭ])L "ݯW]8L!wv tWN[w8+NjidBxA$YbTN]5RT5ATjܬַL2d0R:]HeRcqQA'6k NԉiRb6+yDPgErz:_Qxܷ^\c3E:jvd#th(e2 v6st=bm5`yh[uBh;V"x.G%2;Z1[Z Qճ7yY(ٳ*\QFL@׬gFzBv(Dd^hJx/9Iz};_G_g4qk\8Ossz+뺟{bNSxoĩJuc4wX!O ^ a $T.i}Vdkf$7=|,\AwY0JQ-M5s=z͵۟SdI{:.M\QŌSwX0w>y1 FtYD3ķ^SOl\ #Y&vm(R#4EHQ0 C4?HTIit-zj|ˤ[tn˖pR_lwM*VC$ƭ;ՙ%Iz @LI[iJj^6(} ;底ߪ[ ԙ|dp&$ntԅ>2?wa5~DOl['4$* ɀ[DǢ,I@V @`pS"9"lV!% &G5`FT/ 5}%xic P d,8h(ևຽT̉<<,#oL&-\!*xBPe':2iFL`ccO ͅBȘ-29^-L0xdSAxT){", ?"!'&._F1w 6Й "_J-E8p]45Ө" (`rhkfG“/o9S[I<fBYe^HRI,h ɳha 0Μ&HT(&6<5@JB?#gz@T |,Aleg_gt1'ktfcxmِ- Hd@[˥ ǚj/58t,,]Єeml1HPڄBV?7 +):i>^Μf`łe+Su(L"Be Yz֔ xNJ9=uTd"H<+IG tQɌ .,}<CHZb-XBƯ6xZ:M`"/q!iAN2ՎCcN?JS+"'0i_g j*ѦHVBEe110(X *$ lYܬYAZU'.U#6y^ AU@S-w8`@ٖimr %3j8^XjG%XݓOJr-aocbE[;2%x9*e_6=|oIH; .65ghd؊bRRz,]B A+D1B;LvȩK]R% Cµai".CV7[L6>!rBP5 ]a_XfGpMbCnFDp@itHhL*?P;d؍Ք 7TIsBf҆&CcMAVR>)=X[opѬ:.DJ(0I&"5RukX[r|,]T.%˖E~$ˆ>{LhXe2W5']`i$Ck#]HDcmYo:G, _R(Τ%x"(T5:ɞ c#A߮tOMЦ+"CcB#~NS$Zhq d,aez#%q7D#(rz՝IW4JH$nΓ :$"-k8HD8 sot4fhH[U7!S0$H>0HUq*2a!vHgD:r(UA0¯@8= T&?EZh$zf[51Q?yFJWВ)9?Q6+V$xkBDLN$GD&Zڊ+[/{ (0 .Fn=K"fûbvM*'-XkJI\CT\ҹWTan:qDT>UTAr.Q gDT^r M5B"_zBuir{Y٫z_Xy]: E QiTw!"~[dƘ\O 쟪ݏg:AtQƏC_W1b%[FT[P"dRMl:5&H\9RX8T~uO6[u4u]U1kKxMK5m2ފUb$JxWDZO)E`Y Lj~~D е*/DT;Nh2t#rblDLK)&_D ,CtVIϙFw'Q&k]}rFKdV\{JSǗ`49#3'X輫aWY65sK6>\8MՍxk7+aH̲Co..IJQj/%_eV1mOH*rg#ȓtv.[Bxd 7")U,PS7bd'4qEddQ9>4ҧ},2B'f 8̸F1lbV'XUr%-i g&+HCA$MR%xaQ D@1>! [D@K2 Y J[7*HȰgh떙9]qEƜƱ7^:"MW4*eiO ֺ*dg0MW.5bK5FDNtXF>^pc+I>O+$I0~]=لU~=JtIQnђ[2qfˑo6Yg\_k]qf2.i. ?--J RFF.3AX(Զ&F{yz7uDV/5ܶUc]. *W_M<+ "+Y+^"|JI<[.p8M#(ӬN\㚋;Mu`nh;둱F-^H \B9E6 OtQƅWeO}NFNs~|THsqf"jyuW ^Sv8.Q4,hOp[:Psz*fTSaua>Ӌ*L8CϡjgPk+GD\&">Nd ,ȶ5v4 E XIv NݍZBB]%RH`p3tAF32p>&(vRP_ ,YHz$#f˧)&bF>P'xQ8ΈvFOH/w4xݹcꄗY@DExeYwxA4/s]|#-3%VI6JBKy֕hv떆MB9 BC"HYEUUQ$@MNJ{:c6~{kv`I%jQe6K[DdBKb|]QE.G(tY򄂯8 '>Icr8 tיBDe: .Eoa YChQ`Zi{TL$3L>Eb'Lɢ$̓8IG&NʂqLFfA(&J!HxH!eͣN'>fVtI}bz ;GdkRQ`XR؉g.hU6iOo""d 6hxiOoTI#h_S_W(&}jU":t1G-]h e&v­+DPDh⛒ײj!s*%ux'UŻ.Mf_ BկtIqAJY03WY[li&8p .UCNOwg75F.H,gɛhnjXG.AԆ7 j2ڛ/X\q]sMZQmΈXY&ڌp )Il/j%LT"$bh=d`#i}[..IЯEI=9Z)gMJW3CJlfύ㪛WABdږ)SQTT|yi̸ W\R%PQBb,p|\g0P.{VCmhZ83$KʎW'NqAp?ChZ]e)]x$*|މѨUI޼FƏ:sK.)YE:Dي퓭)XdDP(mg.mTYI|bpQjkf$)Ky iG"&d! u([|&Fʿd +T5NhnLԓ 'BclM8g\R0׈2crXWf h"E!&) (ڲ,˅G*tQ͵R*'Nus1[-es1%n ẹ9tS^!l*b*2' aŊ!l*}n&}ǟꄗZꤋHb= 撻!Lz^KcƥF̸pWv[9)PlDhZ+UZDZ u(ue+Ȣ.W j,ex[ޘ[ )/Kڡ%ޖЪH/j%\pGbW{Bi5H.Uݒ7Q+qtR1°O;u_sQ*xY/2wAb 49s2{i.RUHAW2- v"B=|Rtgk#)w*M-kPQ&~͉uQʊۄSB A**{M}e}.i MF9]q@d\!j9Ħhۇəb, 6ʹ»Iw;Z"U$zSmoXi@,ATKp\B׭b(+?C)+A/C^9Y%bDgFQ-[+5o .D\]KNqQԅkZֱ<16Q2D\Ue%Xk.2rA]ޒ#)X +&{<y |B㵿bX3{G(`P1<>ֵbsX_9ljpO_pHX_wwp3{A  `J,R2'2wa=#R/qG(epHZ,2z2z!Kg9ֱC/$x%eqx,2z/'/==v}wv} `q kZ,0+$)wwa 8< ]X3{'6ǻz2yǀYjACwe9EXe9 GMkit Artemio <artemio@artemio.net> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">GeneralMIDI acoustic drum set made of samples from Roland XV-5080 synth module. Thanks to L.-E. Johansson for samples.</p></body></html> 0 Kick 1 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 kick_Dry_b.flac 0 1 1 0 1 Stick 0.69 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 stick_Woody.flac 0 1 1 0 2 Snare Jazz 1 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 sn_Jazz_c.flac 0 1 1 0 3 Hand Clap 0.88 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 clap_Dry_c.flac 0 1 1 0 4 Snare Rock 1 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 sn_Wet_b.flac 0 1 1 0 5 Tom Low 0.96 false 0.44 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 tom_Rock_lo.flac 0 1 1 0 6 Closed HH 0.89 false 1 0.78 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 hhc_Dry_a.flac 0 1 1 0 7 Tom Mid 1 false 0.8 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 tom_Rock_mid.flac 0 1 1 0 8 Pedal HH 0.89 false 1 0.78 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 hhp_Dry_a.flac 0 1 1 0 9 Tom Hi 1 false 1 0.42 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 tom_Rock_hi.flac 0 1 1 0 10 Open HH 0.8 false 1 0.84 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 hhc_Rock_b.flac 0 1 1 0 11 Cowbell 0.8 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 misc_Cowbell.flac 0 1 1 0 12 Ride Jazz 0.8 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 cym_Jazz.flac 0 1 1 0 13 Crash 0.69 false 1 0.88 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 cra_Rock_a.flac 0 1 1 0 14 Ride Rock 0.8 false 0.58 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 cym_Rock_b.flac 0 1 1 0 15 Crash Jazz 0.77 false 1 0.78 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 cra_Jazz.flac 0 1 1 0 hydrogen-0.9.6-beta3/data/drumkits/GMkit/emptySample.flac000066400000000000000000000101471211146647700232720ustar00rootroot00000000000000fLaC" @XNF΃Hzbd)( reference libFLAC 1.1.0 20030126yWhydrogen-0.9.6-beta3/data/drumkits/GMkit/hhc_Dry_a.flac000066400000000000000000000466071211146647700226640ustar00rootroot00000000000000fLaC"  @6@&ڛ0Q( reference libFLAC 1.1.0 20030126Y48$J$JB[*Q"BG|]6gR">Kp̏RmY G#T=aBόD5E N>YhC]2Y# HNrtK`"]rcRdWƗΩ9Be] Go69¦NsQo?rJE{:#jyssbo4cIoAY=M? ::&n%=Bo╱_exEV2qwFmj$=b B 4KMJ !-TL)Q`àc5#anfx#VEm8mgGQo^E'hFY+ugivErv Lym4Z7"<-Lb|&o=HƈFw}$ĉ@xup,j4|1ms[)T]8aYB)DT ~̴~"KE]W4AF>_*m#L^e22EKZ~+C,F'@DJ*!'Uz[8ROazI$ fq~*6VP5c\m+m"nFID{BeĐrZ4˔|kqxTٜ-Ըd `YJc#'r,rq'@0Z{cB) M yP0+q=IyϷ7P\"SeBZ|2蟵v+Ln)]3+Bdyv%[jy9(sO nc5qALƳH˩)7xN'Ē%]qe )7M*K4:k(tI U6-5zj^i V;(J1 Fq!Z~uwUdiqfn3iHc gyimH֛,rTs*@{#j\#%y E @oU%q |V%xőI1KNnTfV>?ǚvj?W24$[ApmXԢsu;),IůVjlr X񒁰|K[wmOMf /yioY![@dHU<ąOJ@?&̬m=!>}g m-9[s]1<2%_aШߊ$.G1G\m ~-A"z&xKe#WV^N3z1&rqsu5zs"ceݶ6XKg LBbO%2Ԏ!pJw2aiP˅#K? imODBD!%=bĂJ%rXXI-2'}:\oߐB|N3M"yn+I2_( Ԅ3Eg0d N{ɾ㿺ܔw _N%ViI𲰀K47QEA:򓶞}T?31&*ݴA7b 4販gnV!d_T% SoO{I"F+[QSY2\s͌oK@'+``6P>|٤D4;u]kf9&ҩ|Es&rJqd * }H1b8#h%gD'\w9uD{Jch|GQlƙ eR˚3٤;2IeYXIkTF[?7w xy'F~#>V.ЙHCaN'[;ቤ+4Y&" -h*T ic{$7CKC/QBIjevGesUGcKOa Ut!5{ETŴwV V"ADZw#7B N'F$ {|\W˅ Mn^ O ۤ`‡#mx[6!쾙{[U>5븩Qġ<] N-HrNj֩CrՠuIiGgZG xWasrn5i= (Ujg5S$f]3Fuf8=܊*>*ӄ= Zlѻ픣ug0V //'Z(C_cJECȡ@-bYu+B![P'@(w4K!Ε33Be[U"h紿DQ[o(oM;CLDWX^V* 3Ԅ 5J1;=+.{G_ Cl,`5v> 4;Lf0t }&]ou0+۪f_vW޼FΝXJLQWTh6 [=fxD%NQ ɽ~C\ghOrhBQTBQrjZERz^V駱DzS8uJDdNr!2i;T)"`!pMh X#GHqHaYA]c- e's^tJٿ}*9X3ZpaYD[t&Ϝ=)xbSs孇JĜh&$ʰm4ecǤ>hk)mZթuLM_zzh~S%)yK\M8V޽P[h$T݇yD`l'E LD" '3YxVdw`/=ɶ kR${Sy8xt]5FGpwzf2!bS?h)c2\yqCOGLfKWPxu0d 툌=aDM2m2A1*#(So8<ˉ*fc#@]@@L2Qo)"b;͍֯"ͨA2YY[]:Li,E#L#jm;pG̦Lj2"BK'5 [TfnoMX3x`9\xr}DכEXԓTv=L)[ݺɴ _-x£ 4q"0'MOdJ%w;#odX= 5{(6cʫ,"[2oOP2Hd7c3]rJX}~x " USW# g&{<2!է$_Rv|(InЃ m0(`bNuXj`9O.oL~]I2XScK[gZm!¯1|u^k{ña@$>MѼy`*CԔ: _)Vĝh1CUF5G/f3"j}"㕢űfuMV e'5d}660;GlVV(vj)4~FG dh7]e.zSnZa=?CyOg7: Ó Glt9"M\]Znx+`G\B/}tPVv#ul TFj{}k ;'5Quqx6XHID8~yH("J7BLg67LVfDgzj*0,%kGILab$*bϬJ=᫜c {ۺu)ЩFkwF 﨤@OglUo4.y/} f|<xH RZ{=Ć2Va*CӖ *pvn+SC X`?g. mi%#3bu45E uȑmdSB(̶Er4ղ d&=aC&*} ]T^#K;x,$Qr)D_FY :afg 5Ox^ =A޾sKx艺°IuoPv bnxR~4阉t}h8g; ȡE fNmCx1n;$(z]ZB=* *xpMR*ET!KL ,UrLFfQnJ uOmE :Muk|2TU8cDܐܘA*OGmD/6$BelAF ^9xo i]_eK8+k.G%˧QAI&+_VȉI]e#tt >JfaZLֺ75cP!`עÓ@ZٴB&gvCA23&wǏ gO:U-vһ?Pbd3"kfK^^n d!k/%sJV~C zlN%?{7 \lv}bFG&7~fnB5 PaŐ\9Eu.JscX)=0h%:(9leRlW+<˼ƌgd_iJ(qM.*C:q5-:{E GGAҷzS=vǺ.V@c@hɅ/LMqJ~ŌDfANK䓂hq(&Z}R~ӯY!C*!$-UMMfůrdH؀A.l{$=*@_MCnؙTAI/!?A r&*. v bxXN0O:O;/_T &P%aXe8@q@]k Epa\״6ԎmC?WkI(_R;&2ꭉlv !s**U$ tpe%{oO46\=YXPyv a;:D[K~&PohidՄŅHfU+=Nc0sdhQɪt值9s[+iqKFƿf! Ƌ Th [9ʘ1 U/N \uUJ#A}ezP(U~71b$L1h&.xJI%,!న 2֞Sȹ!Cl"[Mv_͡ Px`T `%hlayʝ{ y~ɖdH8B{Qժt 3tu(T *@0E{`Lyzk[1%;j{OB 6Y;LD? !}$%Nbq-+&S^Gr!uK LTe= RA dДa-7($;<݄h+ȁSyZN԰:4 bRځ(MH{.VM BkQfŕ~]͡MFwb^^~W!O;1IE%QՏQ۝K76_M jeM)YS-F:'y ezhMuh=<㙕[N18e!c³B+IrcqI-L?F_˚~5..ޥl{E6y/Vb5Fx/Mr!"q)T9K=db$S=}.YacGmP:h <ԆGL,g 28' Jaaz؟D$+[hW$%VA/J槀'KSc> #|w%JYt}2(Ehg ,O'UTX4+Tcf?$䭭-DVo@y9?(Y5*LH𔂙`GI!Dl '@A=qIN`P7QM3[y&c_S@:ɚ=?j5R%trwqʗ:Eb|lo-n?wX_%^{3XgnA輽KڗBˊ5r-Yin92;ej&4)wS_pOba'pN7^4.QWb `JFpF~+QM+=&J𙖆])lovciX(\%8#u$?_XdMh.!S1%bO1Yg+_2 A eXpD K|$^;e l;mIR/ x\z0(|k-t>tf "ƞ>4 DMМVW7wb_q+>y5 &v&7㐥%U} -!S"c:[FK/Qs"Kd]5 ;b_b*[K.Ukl1ON}Z{Se{/ ӎ -Vc\m#dʡ~@^Tؖ6QJՆ'z2]ZC{ǧ-<b5l$:MY5 y>(*4 16(hyO_ Wyx/S,CvS01wXȴeHn^_Q;8r ˆ5Aꁺ|hڦE r${D]4㉉!4peW<<ލ/uR EQ>&dXdut.)?T4m-OrztZpJM4җɮ-zԋ `.T6Zjf1K$hBs8%&7a~#z/;VZS#]L;~E N[x"hN:9:pu sk2+.PS W c'&/ A`CYoA+(]B*:7UʂA*:5>2.zZHA Dԟ}XVDW~Q )J(ndgKMf-~򰡖y,I#NpUosGD%0D M-]D&*">N&c .X\(FB\b:Ē:E\;[)(+IGslkdBAJ7H3=kP&֣a"*sSdvsD3}Hd]] F*Is5T+҅oN*Q#&\2GtjzFa 3rq# ܡI13Z-9Mn.~7LZ2蠗bgK]]RI xV;Eܹ e2*SQ'NX+?aCQGq9 eHk~JFLO &}u1;jjբISc7ʻ)&0&Z*7p-lՊDz &1ܝlR$<·Tb)I00^Rqӌ1D؎ '% ,\okI4nҠ$A-3¦4ϙ ;?K l]f> p_T6Br+mXN\i'&y^s!2xHxCZ8^f-Y͑3˿ quKjZ]B\j#!%G:ELeL-;a,:&%ûbm{h_mF Ӳ747ZX=?UݶxC8nVˍE {'Su f>R*$=F:Mn(K X(:V*VKyWa wHQ&E9?*jT=K ]QZ;%UMV5VN[BsBGdF nTR`&rf͡_@j=uszjx@Ԏɗ-kK/!D=`75x8pNf3 ivl JV2~p;acC۴ 82 "E&CQDB. !,YV#lbB[r! #r{ũCuAr!%Z@A YBP &_̥HC[]LL=Mm@iDHp\V $ bК'cF˺9 ;$cḨ{=&IQTO~ ,Ę0n_X,k(<Wr?nAdg- Yӣ_ֶ Г`#gi<@BPL&VG<0PEYu{ Zjb@RO2hU$+O /uA"ȓï!ӫv@bڙ*T`PD9?#גGꦗ(Ίf3.B:C&bUk,!w (Rtjwny`Ttύkzx~Jݜ|2LYU4O20< ОS"ZU8]%}Zp?8ǚc(Yguw̞qήEұ'.v|7a=%By:yL,E;`w +|S hQjqDj%%ү'd0ɒ"ĕFh]-RDnesr\N8һҽF'5@%iS;mEmV3ti54VCJey$s,(C(C}]0Uh_ ayRCbm^뽣)$FML_X\lo bb{.ӿ L8HŁB`Wa;Mm".sRi~wjvۺ>)H%gXKS8vŖ8ψImPKg5!PCj/q0N Q?^Ҋ[&4˿W,_1t| ӫy "%CQU "}m-%?1 fFjLZҟPZeQ#A =MAa'! 2L .E#6UQAF#) PV ,ꜷ ؤ*E'^yg|{@@V uh!}n!C% LgKiWo]w8a@$Y:&SLt$}4$̺KPcpHODj cG +6rRߨKN$>eLESIJ0LJ@Got:Gjl8?L=e&cQSz0/Ёu<3k7eTEB>:Yk=doz*Ap|lgK< xJ:t96cܡ;R-qMtP\w S6fz00BkC޹zH+' gqd.dp},Twf@tvlp*-j=K9{e(0B810(RP|*I `FS4+^E_;>g{F3=ȍ!nB4yCxW";eL=8N5h JN@aqTM]:\}9Fd9N(VApq4ϠkXGf&tZ8eA^DjsKV24$1s71!Bb֬F,CtRXw(hM})DR,s"+w{B䓱,%zKuKLBzpWAǡ\ɘ&)tv@iWa9"=b%Lq$ }IbDK=$G&Zi:jkXk]=vQ0L#VDǝ-WR81F=Q}SD|ᯋӡՕ]+TBUeiX'(̶B u:ȝ@0ĭk/0ɲXݿ3-o=pWu#pL}l /NưrI|, 6J IZK8VRI3XA4 uj,w9so %83OCse3ՑgčV Y:lҥv2b IL!Z<^ %XX-[V8!IZR80Ĭ7IU6^$F?2V[ ]DSv'3--QY7hHE&ASSkAY8^۝9s9$dᯣVh$D}i_-GB}$`miR, $髳 3-2O(fQ*й$c7~<3;Ҍ:3erJ ,~ߙ *M$XL1)]%0F?!R8s(V? _NQl֬qu#IF[;QJ,|}nwP3eM03Tݢbw9̡=nwJ$옃&w{e f~(e$2R $b%jc'/(̶udNImh֏X&:Z99sY#zb֬F? _[zerC0e3 O6@Rd@,0=K hd vԻ6wwaj]a†)Cewam," +$;W rdD ݆aJ/)J  /3 OPK R _f ZwwwajXdwwwww >0-C1WwwwwwpLFC!WwwwwpL0XDxXDwȈpfK iajh*O,2 R$; f 22# R$;R&^)\ww{A!Wwwww "(m?3 F r$;w+Cܮri? 3hydrogen-0.9.6-beta3/data/drumkits/GMkit/hhc_Rock_b.flac000066400000000000000000000656431211146647700230260ustar00rootroot00000000000000fLaC" / @F8%] 0A>:5Q( reference libFLAC 1.1.0 20030126Yj\@!2s֜XrvK@Fܠ4$8D&~>a VyXPK1 9!Xh;:sM9rV.):ʁDl%ͯ#dW}QO RIMֈna]&qi|9c儞&O tHbUX}Ʌb.ϬjS#5hLo=`{G K_qvs֭u݃S.¦#)_,p&Ӌ2kty +}$etz^å2V [59mDjd]ce@}k.$AD yaߤ$!I#>6Li`tHe,:tZQhj{R4Jus2-kvbʠ]^2#Wž\)Ϊ1%iQ %m&Mլv$"EJDwk.};vGc^ =FW"kb"V|. Mlv7jq}19Y..tr$y" CN{#rkU|T&U,>Fڱ@MU;kToh6ӲXND7}}D%O0Rx+ڒ%+1_c0:oT:eت43#=>;o9'Km!ܷx\{SN2'$ I~e 0ڀ jdsN)~yI.>^N b 8iRтM%o@*& )$(k 410>q#QNzLjT}mHOX$βgPm51-gDSQy`kE.&IX8%+KJ =4Xj*pȟ(́BGUD#v9 [^Du ϊ||di"3nZ=@~ ٌ|ѷ%r-H8~QA(*rxWZ| B`P;hS[`0ֆ ZP lP/¦ d*gv~Mv_"W1P4Je{[Kʅ7X*,ox݁iww̓o7PQpU;;EtH1= 99!KYHw,$Ctv]մcWEe8! 1w[ޅH4ϪvS=u#"Z" 21r@¹<Bf 3wz.$`ѮXds4(R;F3HSfU(,Y,ŵN5ŕ87'վaѰIFTyI,(e<>wjJ{ Ǻ,[ٷ};Q?u\*o{4HBӽGe-5?tWL-3f1_1iIϴaT2so4׀P 1^[L&y*'+ <,%칏 y9LFK>6>lemKXۻ}K~aIPB> To4Xi>cXNk( &Y+\v ;#٢*`ĔBF;")WJNUӔG0[F- 20(DzgD&L599q|-m]yA,bB_]E} 5H - 8n$6٢B5řέ:>q8ѥ6,W %B[L5ȴ* lRØбEFV.ѹwn!˳~}.<"bHuͯc[ve/ :G`knTͬ*坫rBVn A8kOlZ!R0E+^ ¯˜XuԉE~9ϘvN37cHbNL)+!ڹ'Wr*^StgW"$S;@dzv]$5"]k{ ́p-[JUj;(㘞lmB|"HJC%3К%:%uрt 2M#]Ó:N\k-'DY6ԻOZ7Hw\fpAFٵ5y+(/fG+3~ SunB qR ')Y Ê nFZZi\ju%db-Nm6r/SL}qI\)`4†T{Wژ\V<+w/x-kgG{U.~4#pf*uy\.&Ebg91]Ly)LwAdR(-3晤wdž7T7S$kya1g߷&AG\S^E-Ò蟵P]H-\$45hSts,į&o5t+jO`yD)*iWjm]O6ehV~ueF H^n5] L -\(2J:<}<[o~HER>1\niO;>Ӌoh!6G9&F'ߏTvIUyUUbT_#u9<䞽RO٭S<ޣQ ~] wj9[OFru͏粈&HLc n̿@hQwNE mAgl*u+mC[QZqmO'JJϐIZfw>1r#7ACƕ%YkRn(4h{DSD!)bK&2DS[y#MY՞Z\Д$4@eݑ!g ׋ }LJ (p^P#P͠< C?7kahZ`)Ro㳈pb(ɾon ѝOz HFp[ TLv>sKP{sA2tr`Oٹc'8f"VMZosX1*:ڧXjS!G-HMy~)y\ߺjzQvoq9]9jWUZuåOuu49?4jҚ"SJMQ(@Î )SVȭIHIFǥ=%DhKё,jgea ߜˬ0շA\L?QL/]F)q3W-1&|+e i'&Ezhz_jȑtqϭ7o#|sJla-i5DKB˔ .2h" PBt}?s 9HNNƤnAԎ' +] N{5nɧDV\ % N D@KnkUM55[0QI\s& SxD6)A¡~XVI˕lC*"iRD_CS1KbXmIR>Ao[ġ{nF)FlՔ E۶z36G(]x QM-'*C#Gҡ tR-I@RQUzjуzyƸZS'pb6R>>WO|Fw dcx@QR.]7@pKU-.LHjvU(KY+ɫHuFhS)KJ&\zjW_D+]!0HÕ*p{J;p{r(W2L[\ߕoG(+ٮXh{&|^`Zrz'uYqf |ez~Z@"SP$dec>1!Y]R[  m. n2#<[|ⷷ6q "HBD1 /8N RYt-kGuX3ΜRy!^IJDs[(Pwmz*zw{ |CU{gh4E&js "c]؍GUg0YńI,){ ^XZe/%ȢaPzE(RaNq9ԧ'V͝]wB._rKlbVlCg9nģP}Klv$nth&=cj>/Y =.vEEd,s`Ęl8Lg*=}v1z6I*kV^7uEjOE*m*6FtКKŚ(*J2lIā+~O1[ 64t\$_Fj+@INe-9x2 :&d=B"}D@\P B.&zCɋ`Ēg*bUm^∄\O8e)M[OH0Y&Ƴ \ Rj dWێݡzJ[,7) %b?l]f_S>QY;޵䬅Fl4-`$qD5JNJI89=>Dc;rMҏqzƪXs2p63l5Z(E"8d|ޓ:O4) 1(<EE:qtz*}{6DMf$@qu o);^$CXPڶxqi (<(u* wfjr"H)+SL y ᭍HFd_TpɄ7{EQVD xN/]֮'NAI߃L_M:O>1N&Ȥ2e ќIZ=0g;tzb7:E"ɽk 7l- pV;-k&6r#*º.-ެL[z3[3L-H,i<.weE:#՟o&q\BU"MҶS\ Bڪ=D OpUHUb׷O?e!|w]A+~QP"JV8급u ՗fH<1oW( :fyNP5e`X ,˂{jeЀQJ axJJ)_]Seh&^ I [u>ZNբ|aZ\YN_}݌f/|fAqo# [_IkL\I`gh2~AF# [G/mIb P2Oi4'-QV'9VK$P֩deH^LN4gDxȼ\/j 5'{*^_{wp8Ӡj-#D$[@7Piiw.'b.)&ƌ%% L\ Z,/5eL P,Z%Q4"alttĜRԥE/ CEԁ+Tf9G刳2VbCl-[<ʵ!bbM^Ҏ#?%S,)$7E'u{9!`S-B4}tUڳPXX~ѵ:ǖvK!f-15&?L*&C;&iW&D u;xCK+:q>:gj6>jk%uފD\1q `VHp!KhwY5@ϺB2b7x9c6sjUB߳d>;$! jaH-,N>˱peHN^$Ԯ)kMwuh3ׯ*3(H^YğkKbe P4tfikJ+RGгXujjWJr\iH6}^ 7HN^ճ F$LYd_n+jtnH,v#1"D oI3RI'Ld7iY5Wz*ǭ5HIw!7ᐿ|e+n@i-ޙ%W|f'mM lԶuoғ$jܬ搎B)!R 0Y݌n8>nap 3'$zΜגϣo퍙.Ydl7:rc[D`Eh^GV mY9w) l|,Ə"Qr ϿL\bϜ %eD6ak3QqVnťfY0a`?6Yp8I&QXyğ%Z1y%Sy~b t@n fBh=K`k;Y Q=1&h\pJ8({ pv>dO Q߬7L+XXVljuMcHX .aX VPpDjmUI6ډ' IM%Dv`ֶmNLsC6\l÷;չD[ 6}2Y 2B*ХH+T Րk&Ӂ ž(xNL3 Cd6DAzq31cz( \WR3|EItwoa7jp{XiE?` M5H9Rі"4ਇ 6>7\P,>!!LYsgt<ڷUʈukK0_1#@`U$cA"ƃ́9ea5GSD쿎ݛJ579< :㐓R&; ~]Zq.4B1xaDrljo3K7)S !xM r@/ȡJ=Q/&9j?j1Nh .%lۆe YsMVS(ddrL&y!o^o~kIh$c-*'AVLIڲ'xDѤI3\&7ÇՁd)}eB$-C>pdd0FRFB&߈3tGGNFS6@-Rn /-ƐUE<[f›ĩ.Iyga&:م78 k  -EL ;WB;\@'ҭtTXHGj"|>2OL:!oT^r|\p}CC~}V qG,HC1}T,4 :C^Rj'7 aE`bwHv]e3z!2%.+B[ln^hfevZ*_7HiauW\Xn_ yPٸN1Ĵ[?1HOkn W U$;u=tK]ll>oq*41p-d$pz@N~ M!SGL ?yt-NuU#QQ&1&ΕQLHAPfKy/b.v,#u#E Xupεa*,<<g:]l( Ru0ΰ4V6S(d52wxM‹"$MBnjz+XPaqqbBZ0Dh[]]gZG.*NM%=@ݦG EG@X 2R{/nrU |w壈҉g,09} >H@X[&h;sBĆ,\U+v KfLxlZ֗%Ĵj)݄_JLT]RtR˦pܰ)"%&h^-S>N']'uGTJgfNQ}W<ޠ@f;@HWMZ˷ŵ]5##[t^X ]B`OS:iLV<|+n{{41#wHؚýh?LǾuSxG 1F :YChG9Fbf ɠXOr̈1raS $xV;#A}Lxhah ,+t *UGƤ޿xסb+Mr{fZ$.*#)+c>M*FQ`J_+#ѻ9O44EY au;` _|îmliܨ*AADܥx(s©T9J(&TĊ(B6GҎ_Z7[Yo—)*%š#iQhldʿӻ1ȩr QpP^X`<-Hf- Q-ëDCA P0e >g ^NS%d.yTT,NAandI ^d8x k{}l>PVQ5sC&KL"ThۄԂ%Ah% oMBKq:G ²IP?I2}B_+vfWZ`BғӸ ԀCb$Iv+2Gx*t~[f)9WK= ;CÌZ Ċ\ &bCd?q9B}`UMn LbG">sJEM9þɈhX ͑}35X0*Vq0DϚτU^;3̓|EJ[TY1{PD 3-OBFP =%Y3 >RN0$=ܭK Z"$@ AIp u,u"8ca*KI߬ 웜mXx=o۩!h-R׵+wxoא$l.q,ܻtb$LP腋T 7 ?{TVA"$4OY My/D95H82O6Ww0ӚSG L? >8p(՟F)Gz@ZI[L!%U^׼iE-es,Z0Cc__IOޙv)4BoU"3%JùRS]$\{h ʻ{dהhg҆0T~D,'(FMw ]i ϷE#pͩ#?YwIPn\LIe9rr9"@Gs(|Amq|JyY=R>amPrbfz6(jus.:숒,BBi%OɄԲ=Jj)/oKj"# |)>b\e/3$GL&oQUZ0%YDY٩WauvWtc=!5"Ro5.}kj C ],ܢJ k_ F G)!!c״YK3 =aYgF")'veSKMI۴\$z9vj`|?.xvSjCj;c Np 6=Pt9&-wy h8Du haj~O,1[ckOlGKY򖪺R]^CT6v6td Qޣ,XƊ AcX:<֕D75"v N!t^!R 4H!AQQ5(D嬳R[Td/X-I!wL񰴌eN;ŸB}k,&[I7;Pw67hB>imr$g6KYibق4IM*ˆʂ i!(&U~^x\뺭dCia$d׈!|Mj ;\L $tLCB z |b'H%Cj@Cz[C^*]6520j:{C&]6{wU at$4q(э8sLIF Kh Ȋڰ|q_Wi^/\2wgɜLw۱"A M hp74bZ :Ǥ8ڌݷ@gDN9-dDf0AABƷ XY2TRdW_&m_~ W7p\u3R0[ 8IϘz`p ܣP4鄠croSs^ JY7}N arJ-jANY̩?T @kbrx |HOA hokK6'#۔҅d<##NCy'%3Nϒ޸aYAuÀ~Ε,Aday,DAK2PxF [U6;-n%ӠB]u֏3GHWbpN 7fɘaٷ%ĝr!Cf"ջ@EFpǹaVkkGD&8<0,SW/gk?+k(EIDԌ;4-n*N.XGrƃΦO̖wxb@/)!EXC^@OU-l9Wdޚ*JF+/-[Dڇݒսkud9ٲ#F#Ꙉ Լ47ohmoL|M2ip9 iXtuU}*;9<φ5еR[Z r\gFI㘽I$ %b677p?k%~`]tRRx䘶L%Խ2^ Ǽ4^Z7R6UWN]]ZL&AgFE][T"&"#+}c&_D7x[݊ ^jwmJJav-Ϸ(vd %VO nu4 3ɒjO2oe5p" n[ (WH'sN/Hب6# zԋ(_~O/O:;DNIԔvdӼDQT_Īp&VL oV_e 3<40k ^e]@S;զuI+M; G @1i0ZdMN9>uXqO=WeT}eWJڡXFuPEf?oPgnM-c62 y#es*= mJGN Vez{dHY(PZM 2\R>XhG9ӿހB\b}$Ȯc~(Jq^L7~SnG*Hd [&X]0 Cn6Ҥ2)UuUm+a?<4hȐ1FbiG,gRꗸ"2Z$]15DxYh9{V[YaOsd/0\~΄iT9(YaOS{ >.xjaJ_ZC-.v(*-`Lq[ֱxU7^/n9/4_aV/Z"0/NR?vFZ^@ ZecԕcC(Ƒ`4LcdCߣ9/XlI H c!o ft,:t׸˿EǶܓWU_3R@BO}{?&*ZJhlqjjy|ؗ D*U!h /N/ڨF< e0H_3(4]Y ͨv'o) ML βDx& - O_ѤcA^DSܖ#{|k>(5ăA~J(*B2 a2PW: 4쾛)"Zjp=w*2;+,ItD Di2s,3{C)LGr!d6IHv G`}+ vv厛{ +f݋.'bG1*|w] bTif;.怴]}jޟZMA'=@N$1*M)jRg .@2 F0ȍYfHĐ~ FY,Bb!N@MvYnnN}L(/# \ݰGx ƹ1xy/C5U|#B3D*E?m # "z:nz IMkrO+6!3nh&ilSfh 4D N{=Ä&BHJVB`goRuB{̣8 8\u!LKr87HQZ prX[h>ra51g8"G.b2 9=hǶVf\B?/_fKVt1 1Kc ~"u0!ׅ^CG. # g+~ 4V#Z rϤ @-tA.)bM1ǻG"HS <#@#$AQ xX;j!Y1d> 18tTd VZ0U u#V SDNISxKmeLn:Ih= 7_"vv/jaBڌp\9|DC]0F2%ǎuH&;Q%' ʹ+p`a3_۞b*sJ514E''7&!n;8!Ìw[eʹHCƐ!MnA@]Xz#_1U[o^F:f}gy)R1n\ }S'r:I tv}ۗ6f;9Dmn y;?; ȍA(h;vNEҮ3h4oH][{ci>Fp8.9^ΆXp%>\PjFVu<˴3MtŇ0{NT@^$R{:}Wz'-$d8=[S+#T%Xfg D1pBP'Y"TC/?7d$ԣti#ԄUܸ/Z4"4 8UD)Ȁ@ ڌx@mhf`@tء*le梹kF'8r,V Nno {JՑK(y%#]畈a-ڵ.5Uo`u,c+ay{)!uf~VTJ k+jb |bD L:/Ύ79|ja5qM# 8q bTcRwv$s4V<==ED{q|ﴖJC9;gɹi D- 'LB0z|Ԡ2% ~4:i^pׄBO> WpL}'۔n?B7Aʬ߮qv#{jR517k$A?ȄbQfmrYʥ"IXr>S{lTV]9<=x\29ǍƖ^+c(݀iiT,C0&+ƘP)YLvQr)7vX= `NCM+h dҴDWeT*57}"ɶbu$s5"TtS(*nd͘٨$z:ūRPv dCͺoк׾*V`\*l2!2׾F!"o#@:<*, 3Yrn|CEn}?IԮ⤓1MYw0Y#DEx1Ͻ[ V9pYIKGf 37 B'YIGJ/ۢ~6ın fNMaH/!]Q~R.Ŕ6~0L}Ӷ[Dc0y/NvmV* 9M(+v H}4QqJD'x$0Hz#;JU#H6=AĘ:%S~hXJs/? |} 4HÍGanP-X,@u@7%qmia*&fm.0yn!'./Q-%s\C;T_W_Aŷ[HHÀT&`T L>]`W~n>pu'ڷoi Gp {^v͔@3s'nҵ2z\:U( C o$(4p.eiIH$40Ƕot^(VI;b V hV6oy7P++$M+X? pfCJ1` ѹR dP S| C`48;?!xGCK&p3 7OKa #PiX$>š9-F2K|NLŁ pqPKّ'B*lMm   [DaYJHX\ gTJD.ޞc1iH$WGb.HsMNa5ggt I@DXtN@\+ ։l# KÒVE`!b '!^1*΢ABDSU$[-oLCJ v=VjDef*G=w$0 ݊X$F d9 APxOII`Nw8|@x`&)rClBjpةnˆA(SH<KCB^#`,OkÐ;*'2xzRFՙ:ь#CpsQ %v5,htR+p2\AaH#g-sK ;RH'ĩQR`Jߒ玳DÂ1:C%pm }u<q5gou:#8; DGP+I I1< G :Kk  En|UmЯT`T"͝v5AexR:R^RJV܅tH'C4H jTl{o%AOUNBɋJ+}(RӼDT}]yܴA*(d1jn# MLRTdV&הdYNL4?y$gYzjnx.;ݡ{#*O(X囟ZB#|iz41iejRHzEۓ\& KZt- nۛu8\xv\ޤGc.TH\/O@ auyY7 R]CLE(p*Y{-^"d/i;% * UFO}kxez71`b%{[7:"y%׺ KXi9+MKYxS|i T{$k**TX?uWVQq #u M"B'n:uZ@H1Y$Q_w_Fcc+t#p֛\R HKsAVU+) }wLMS0M YV1롩1Q;:YiUAwEiI8%!d"Ho3!i΋;#G(cS令%"9b')W.z]|nT|m о,B-@W 㔓OѺLcX>j\sR\%(̉?d3VE K6;M[a)$.49oL|[ URʭ#D!"+$!4N\W?}U5^ZvhJ8Ja3});\9$ivsAT8TPVړT>]kk2OT8֞ #qEkΏ8I>R\]i\; /%p^7*= wRauz(q$p|yf 4d %k)BvTӮ~zA[ *ts4#u!D9] 5Td[JdT1]12jb‹PSFvs}$m~we5o]CdRKϤ5f+S6.Ú5f;ikK po:/t72R I;>ɐcT&bUpó 42};J($p']^$7eVU|k+P4UYd#E*7lmmo :c)p`NrF}Evpi]T?lPA]+[rw<>Wg$tYxR(%lL8ѫ-hcٲm;MFKgkCވo[sծ0quw-(ވ>_lu+Z.bHct"E2CĬڙ/('dP^ATEUAvxY.%R"~i)]Ei\"o 7U%Y6rtKNݠ(R#Ԙ+^L~I.vKʃ^O (Rgٜo5%Qg60i~Yv5Eg6)3 >3I &{AQUUUUUU\zVjTQVjEfTQVse.P]aUUrQVse.P]ͥMfs5Nv&;9/-!?X}s2}EXOa Q'pBzL~;Ya?P]AfVv a]aUUs__l!k`F8rm 姰KnJ5)r]ˮר"Ö갋p\;9U_fh- zdV{P5wfRLPo> ʠ ^vC\WMwWsdLPoQuUUUUU\zᕽAvQUUUUUUUUUUUUUUBÍSMw vN j'Lshydrogen-0.9.6-beta3/data/drumkits/GMkit/hhp_Dry_a.flac000066400000000000000000000301161211146647700226650ustar00rootroot00000000000000fLaC"< @Ң_qԫysNo$Ea{<U;[3fx[x.MV2HuBqI},[BzV?I1$C]J1eR&,>D[ET<(9CcKnRP,}i 7$ԞAfZ(ЏMȭDj#oUك2u!O5a5暽w:ݰP;ڡ~t9ͅtѓ-QIOޮBpn!ZBc ꛿ijy,c癫Y;{"k1FC\5($H_c 'JNvBz@F2*wG y?W#/]<]s!s Dj؀x ̉47Dր%Tz|-]WAh2+ŵ1֨hլo|7EgX`ֿiKY diM?BuP,6rPzb?-p$(̞Qdad#VȈXྚ7"9)f(0T*Rj$J-ږI? 2B9slW S^OX6t)0n ?BI`r&{D^ mx |U'rN2Ҋh cS5ZHљ؛\C2xM|W.ݤE/)DŚ Hf5N[,C,-i;Ecr#Z&83Zy(1x& WJxǴu->vqIlXJEFTFI]_2HOn ~(KjgbKT9zܺ`5aspdkμ Jk~Oh {n@pJQAm}aB J4"\ED'πH! ނ6,$UR2{T$g Hmg n;0U#DJ- Ib;2YbG0^}⽴AN!%е7RS|-#'(A9>oMs<#- ;~fNmgעCZ5JjXs]vsB|?isDGXǥ;sCٍd A-T#~,ȣr {)䛬BwHLm2<.0a9VD'Ra&Ou_f1zWqP:_d}Bmb@>ÀRܡ7H$*8c ^Ob9;Y"QD] J"\\Av*=/|\~A/, A6b,:ją`ZQwEIn;K $C]SS@tQaAa%a r[N&$܂IÄ 15?n>a$R +TÒ8,介 0Lp裌|WdeR'r9nVǟV}̫NxB=!֝zOS XOTL9Yh2 <ƴѯ ,. Bhqhbg ]3*Ŗ8 ?r@xJulHjZ ! dol!0Rӷ?0QpFg3ɖۊIl(ȯ!o0HKSӪNx=<ѡBc m[vU"$B^L=:DM{0Km9Cj$-1%g-rNCQJ'lʽσObS]UP@²+CpVNBI: /'& ĖM\OTh8qsÁfԛk'ӆ\@}Ը?S>vd:|.:ڏ[-dס0@ϐ$aѭ w"Κ"O "QljVwd,ʺ-Tv@wm`Y{KCh޸Lqn%HVdh ϢrrpqޭJr6yn շI 2$"ϔt{!?2)+t޺:]I!mZmm Q%iF)5n WN3\yJog&qPD~"܃{PBٛDm)h"էYb.}w{ŵ?(e|i5 ^o GJ 1a"P ExmLЫ X0l@TvP$:b˷u7T%EΫvB$|e"Uw\ SDN_*| %"iUZ8 bms!U]*:'xr4mHipu0ޏm%b6;=f{ܭxoEKӦf93D|OeԾVIkHY(he=˔˕$&0Hv u}l\S.~\SK] }s&OH+0>_*sK5^xlNqQ {UxESļW4I`{݁d,fn5ϝ~Dr!d^_$.2"'t&T^$ M)h>VAfiN#,Ev aErSؠWK6}XuY'TkMb:2Iٳqk)HLjVc')#lL^B+O(/,azA<$kyY5$7\vg],$j\ |GDƄz,ÈOVU+fW${x[|鋵-M4-GReÆ־8_c(̎DD9ÈӣJin-pJdqLMgQ, 8+'R9'{WvXzK q-CXS%qPCk>>c$e*`jjDja_:2̤~|1r]d¶,a)eƟf.Z7rQ&:58d֘e{ Tx(fp)3qUIO $nbk%;-A#_V @1XnBb4:++e Is{ ll_cBa@#cwGT" th ?2apcLlE˱(D:gNm#:ᒘk@L@Η$ Kr15-L&<§I8MdLR$Rap!kPbU&&Ju"'kəR¨^!r OśWV!iXd?JcDgX^s9vfOҲeA;cĶWa*Ȯs—5'5>esTϼ -ՒT)HNpM`@+ބ-Rh @g# {'v#bѶ!qf$w9aD;cG P<'jϥr ,ø#$\5EF~|})Zvpյrqj)MQSĽ]bڐ8'IiWLEw8! K)OrS^'&Sh%1;&NCidޮY0e_rbfJiPlJxjwWE{0FH"HP&(e/ i! k% CiHFqDxy R`:J׸`ǙF!y n?)>Ag*{ i.=u߼%j w"ېl_kpxk;eԚI81B!^m@a#XHT;{9~"9%1Gp`AC %3oV wCR2a?\h),pjRa3r&9C:,qa-9S.Mяϙ7O-#bO SsZ95 K؀ }9nu'K;WXR1v`JAX =AG*xGC8K{8yvx{2ᰅQII8t`0Σ x %:&)/CEpyX`ESX5W>.ɛ&2:xWPs#Pxp b'yY5925^|=_ҥuO ,|l(J-oVIW4e4h[̠,BeLHء~]]c"h"$y O+Orj5ij^Pph{@PH EpJν/[v6 :j.53|+ge~N^VkH2tXC&nsTE==XXQLa\= L$[NTl 7Q*rUfc !,39M6Fp]ke_7qo"0N:kW ls݊E7ɶNrqYǽ/9O۹fLQ)8ߤT;`A~[?er1p{*:-{{k8H Z*D8YIhyH AbO#/d ( ^p 5.<:PH %;&[aEu 6T;c7l/f*z2`l#0h4Xq b& .m1HLl6HØ QRAЀ)&hVXl ߀'vA;0aB~Tyt xA/:UHԀw `@PmA t P "!d2/Robp3BȨZAg>`VC&v#h@ Z*vTTk# r%+F@rbB`_`.$粁 ACTp(1Q|]Baq$,PeGI[xs VuWt"m! T0 D%A~w:@Ǧ@$ @3/ADJz_XwЌ5 60Q1$!!CRSe p8&b+zu !8RFZ@ɱRٌ"F`M`l,0 Тi_1Oq@VKT6'!ތ pIZ?^l8hBUׄF5br bt/'5B;.sq?IP\'"0OXf9 p'Ē5fuQ1E[bYzwU 9+M[$T,Ҕ1S/}5Iʍ&i th,dPYmP4",aP[R҅VZ^I饃E7U ]BmW*%z˿*fS:VCs PKdR;楈d4zY&ɽK!L^To1D_ ɦ =YGkl%,/auҽ${$=-*QK>KjiȋxQn[=YGo@1D{h,IM1`^n⟱4&썗Ä;ALjS'} .;th,gocaT]: pii(H[ &eAeC2jEsԻT;#mB{xƬ!쓴[)01%C0C"K31#21#1#ȞHČHČHČ$23@(La1@LpLa2L2@L1@@@  $cY` YX@  @ @ Hd@ h@  $@,Y @@ 4 @d(&A2(@c&0@e@iD&a1@ Lc L`&0 &0@ LBg@ @,X@ H@ @ Y)P@   @ 1 &P ((M @ <0A01A4!3P4/(@L#P2E@ d@ FF`^F@@F @ @x#DhF`^#5@ @ e8# 21BиF:l. F @!.rR):+Ha:T,4a1"b4h@#L!iC 0!F@F%`% f&` ^& j&d&Bj&`% b&b&b&j&^& h&@ 4@ @ (&P&PM 3   &PL@ @ 1 M *@  9 9 8 9 8 9 89 2`(2` ,  X p p x q&EX3EEp2E@Q&E5 $PbBBdS+Hһ.hyx|%l Wbr- FhT*%ZEPb Hb.IR. FH%Ě#i$S$YCY=ШR1P$lA4$iF!PT: I!hC* e!08BP[܆zPE FH~ wL4ġS!UX+BF@bu ʨ#x &F $πC"8l|,H6 C$lqEY( BYb)ދHPn<>di x0 "R6 5H. p# , ".p/0..04/0//!5!4!////50P3P54!.///..5!5.0%K@@p./."K@@@K@˄LL@L@@@@ B2pP# #.#0"ȸ#."hN`@hKK6NB\ 2|*@ @ @p  p R)x($  x  x x x hT 2,&0'@&@d @ @ dF1 &@ b) &2 2 p f[QLD.0JD#` HBQ6p"`@FEcd#@EF#H @ p%"E" bDH#`@#`@ p @YI$! E# HH"H$es>,XgcCAe"(hb( ]=(P`!#"!D%g6*"XT2,D4",%2 !!JI  JGd&`& & |@L@L@LD@ b"""""".""""""&"""""""""."0"02"""""" """2 4HH$I4@ $I$ @4I$Hd$I$@ $$Y$,I$I$!I$I$I$I$$I$I$ dI$I$I$$I$I$I$i I I44i @ $I H$i$HI$I$HRI$HdHdHdHdI,@ $I,TuUUUUUUQDDDdDDDD@QQQQQqQQQQQQQQPRi @ $I$I$@ $I$@I$@ $Y I,@ $Hd$<Y$I I I$BI x$$I$I$I$i$i$I HTDD@T@D@TDDDDDDDDDDDD@T@D@T@TDDDTDDD@T@DD@TDD@TDQ UUUUUUUPUUUU*I$$I$I$HII$I$$I BII$@I$I$$I$I??GiD 'hydrogen-0.9.6-beta3/data/drumkits/GMkit/misc_Cowbell.flac000066400000000000000000000272111211146647700233740ustar00rootroot00000000000000fLaC"5 @@fy`yp( reference libFLAC 1.1.0 20030126Y16Q ɷq~~O!N7P!Mעg l@(mw9| &un#33%/#xcš;4T 7y%GCf>Ert]]گYuj,RxL# LiŬ*G֛zANZëEjKlo@7"t#ZoRj%@u%piքR{U1 N׬f| !Qu_ h } q>ܿU3L3D xຶ2W:b[ejܠS㦖 GH}m7GUMӑm1֩Nד&*o-_i4׎OTCܝK1;P5B3 Dn%v6g#4fMʿ[$噖܀4ݒZƱŦUEV0T#< ®Q~p:#i B7n-YkrXfRiD+æ+CnOGxB?[G;n81LEL椸#`Rr0:9rOo|ԎC#R4Hn*3Hț❰x9N#T'RF#$ J͡ZWZzGxV㵞xb5"EZ5ۊn.F*mPWrV2隐L*o( t\H):$ yq[ `[&sVS=vwd*nf߽< ڸLFaPEݷ>Pn=1%=qǬ.?_mk4ό ,DUݎ5EK\. X]l@qK݁!PN"eRR,A#RWڬ܊OѾYtٓ7sSEKt~j'TM%uEnBo"F+6<ĩ\f"CA_ +ё5b\ |5A:Kt U05 .4Z"bM5UK1"gyeCDodHik}Biվ>'}tݜyt}ܞvXZ( NÖThĒpjtM̾F gQ(;Y zE"92nj9A sĽDZН]ppٖYVZڨ?ӑwb)ɳ}$HĦ?7J"K)\{}P/G- Ud\~wd \uM]z ;@&gH>=X[ ʵ]YPfN Im4β[-[m"$3pjޞtOٕ䑬botsJyeɼllrS[.>#tY4/ Kأۙ }XA-WT7S9[ TtG}p, 'k[~܎ؤ1$K^Jiǚh~l<1E%4B2W|9IY62×fÍw ٟ1^"3NAs횲R.5# WIg c^j,ACb^&x)B h~&8ƣUljfj"s7y" 4pC9ao~-/Ay, .hB˔@ $ȺS:EȺ*JA@![G_ҽ -H!09n]-'E* ^\uvUsEb,TDUъ G5zE~qsԦ]&$êA-ɥc)sZa05 R,5?%v5DVorTDZ-jK$_ ^\#9$uO=^Yad]D| 0_)Lm 6&lYOANe.S7zvHD79o ٞ7F2;UjArU żjFV5Pϸ .o aR d >dx.Oq*͘$ŝxInasS_uKSd((6p~k%Ͳ-oeQ?{/!`ؓyH7ޏhpDU?CDT#Cb3쟲 Yx0!v|RE^͖ ҜFT~jDZ^ UVyS ;C>>2U(]c}Nࢊ^~s1V]׺J8ۣIϋJt6ܗ2 R  < -"nWJ%&mJHIBC8O]bBs$Q#ʷ% L Me)iB} $1HtSԖ6<77.S@)^{soIl9 0\!xΎ8))m h1]Ea݅Owʓ)^Ky_UYXz[@ ߗ79+Φ@!M%FlF-#1 -, `,aK':GG,SJZW p7X}-6m|wVU+i o"¿T,q_XG\Є Y$_jITZWP|DiwI1FZ jJ6,nL+1bT#bĤnQ}0"jH{ZMһ &64H,I2'x3UnK*\f"[ VaKk"Peuc^aŸT;n|*NirA*akqhˆnyG;c"';lQ\ E{%Nun wՓu8㐰E.hNJ#'XyP6M>s-T8 ըE/`V}M:' };0#)R{AC"b=elo6cc]F^"YO,[oV/[ȅq'6HdVWCʌ ySol D4K.,N)j-Y$}}K807qqY)R>Cw>t5DɞGDi0țN"űpJ[bdӝ洹5:\Sz Ѯi_IyZLMy f\ܢ N7!#?coϫ[  l;_*./)XAeh`DfI^LbiI A6V4BҁṃLي<(?= bZ/:$). ` )DR$,o, c^$ryCC8p6 7;EߪC=BYnY] G+((@KF'4,kg%%&JzȩeBX򶌤K$nOP Nq+54&ní ð[nL .&>=7:F/ O;ѾDrV 5&T1jĉ뱾6GpQ@hz+B~^ukiLA( u2Ʃ[gOAF$ /hpy L4lpJe `]DA0W,s hȼgeP! %9o yGWj:`U B,߅GC=.?|qUJCݒB"v"p?ua&͒(n+KA*N/B/O|iUB~I*_+OgiO/ax7}Rf g:=VLUԖ|ࠤWiS8@S$Sa2(G @h)bH@gGa4jcK{-2F^Nb9%N2D=^0BU:C=-Y6!|=U5 I\J%1ވ  wҹ%,եB噪oi=/9TQ!-=T&]w+$uJ!@:RvJdcnaD)0T98 ]S"i_,±ǪA'% eIgc\kNTpg+5!yt-.e=KNmD&O)'+T9bNSM5g`cM Z(ΞnąO&[aAHdwp JTiwÙJ&B|[~eXݮ!P;.Ù0cs6<|{(mmHq![u:a~Jowng-6#V0u8+C;4p*H'QSf4lVQhF> h&(<տA.53RI%$)Qn419 5DFf[Eb.aPUX~&ɔ{+(*A\|,.8L-0+b lǘ6% HYx[ }k!Ȟn'I;OUw_ !\+7K@-& A!GTJI+J=^a'2Yv\C+>U${5!,aŲ[)tȜ&1G9+-\^2{=/ /ЙL%Tl;K5fcU|Y9c3\x9(! T^VVSB̰~Me~ ):$Cd^R`/"SSQ3XYE{ A9qKa FR$J6b% LL>(-0&J2$|b"2a Yѻxl% `pu:ǤFX!CGդP V5s1|RMǤm\X,-g1ӛNWjr `P NӜ,XA~âYS5 Gҫ ʺ٢]ʓZ [zZ]|&Fҟ,.IPF"tA^V ySX<1& ڝb^4Wm %EԲy ̨r`\e!U!-wJ9B)!f LHt5f-^b| \[K)u"AoP6U bRφdWIMAu. \7~κ *1{[pVմMdTe8I6s;`hm{u)_־Q6< T`bImo%q0 EI5:tB\P\-&WeuI|]]ynܴtVUIIW.ce(sY&+Zz+ 'HNjV:'xUC]@ԑJ&ےjv~e1(d :FU̥Dmk՘gCGr`/y?FI|1uh"2Sq3- |jԴ5?k{cHy? dAjкbDIqb"BF 4$qDƭ tc?J;}oeoҩ.a,6;LAeBmE* Y\U8}z.A5R2;O=^)~֔$3NB*\J1q7>?*(6`YRh' Q<壃ƀ)J wÎWG25r7ei_F'`iqm KnݡĪfH3G^"\^i#?y!UE4KbJRg0El\%DwGq/TJH4 $}wЧI?)2y>XJ%vTWv0 b;eE ųUZ]cl'jHdynwH;3KI[t-o yaRhQȜ&nYFx'lƎlwG-4wJ*GI$7Moҙ_ުdٹlP'_毪-}bT_o)bErI$@lSGMj+o[f峛9m[7Lo_?i`qm$I$9T H05Qr7MnlƑ%, /P-oe*GI$I$7LP'HI$h3$K,-F̷By`ql4lhoxj+Gݱxh#i$}W$7Mp 0 0G7L.~ynw.[7M,t.`jŴ7Mo)TW$I$7Mp 0FGT$J q%Ly`[]#i$nIB8I$I$I$n 8I8aaHJ #iscG2 0[I$A0GTf[I$H3qm$Aqm$7Lg 0GI#t(GA.ŴH4 ŴA0 .ϯi$I$n t-I$I$n 7-3i$I$n8h3t-I$I$Ix-I$I$h#i$I$I$I$h38I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$Ihydrogen-0.9.6-beta3/data/drumkits/GMkit/sn_Jazz_c.flac000066400000000000000000001146371211146647700227230ustar00rootroot00000000000000fLaC" ~3W B?j(TJp( reference libFLAC 1.1.0 20030126Y$Hf wK`nI/{\%P Μ=sR1s+,E^27U,(;2`+h^YО @j]I6'{khn"^^5JhYNlw>h;y%hB2Yc|O{ 4˿ʀD+Fmn?S"Ys?~&9Nvg_%DzuW[l!8ljW.}AXk-7d@&j@賄@]ƋAJ G$,ԃanz3ߜʟSδf_XL5#`ţ’޾cҟ]dd9YG_FsDpi%V)Do? Dw7OרXj=h_;UAޤ_yIrΪ\#ZѺU)UermQ6߆ٞhNViyW,U}{, 0(^((aGF LmR/c!4J h{"g\%8n!/SW"b0r廐)P|bJ zw "xk S PC)^3_cS3y]g5A~W;9A¹M7~ Xavs#ku.-ז-߰ARI[w<I tSȩŴD#jW8\O;KF?V?_h892 B?p3'+l4"Fl0ŃY9ޡdD&i3Rȩ,8d@gV5|# 2#= p^&ԌSNIo Hº{JV = Va \+ 353!ک\kNͱLGd_Y΁$v;XI8Sc؍H0;)噖{cg'%!!e1n}QuBDDObrv2@pk l!fŐ9f-qìM0+$.q|ߢg~Ldۚ)5̕쥛THC" ]tF}{:m Տ)OMZ(&ugs7[sk*J0T+gYX: a#]1URDžVɋ黓'$DsPwxweJx tc "] Hx{w8iЈ՝`DaCOJ} -I˓ H;vLi|zRBѐh j>_`wN 5 F!Z /|oS{r U)QHN +뤕#.]h6hZؖWG9KL̞P֩~aJmH"s\t[}TCDd1jwCe"~fH.X0 `ded5H-UK-㖲vyȎshOtՈc 0 h܈cH7a\-`hU-R<цC6d1%B-|B],>~PgnNG9&g9#lJISh_G[|Gx(.@21= Ɩ>/8 i8F9aD_vWR)DzA8 I/E$_o~+=c=ȗogYґOQ\J"JXiЌ߳A:d7<0k.F%a\y?+95lEb CeT/xmيD|il4[O/Pիd?w2ZYffŒxE 3YmJ Mg:1 yk=w,'%.,OAK^V7JUs!p`J350E_+nWT֒N|WXfl@Y%{;3"Xs"oCA;A>'#dJduf,xV zl&+s P{D}'ICMIAg.K@R{Mdh+d?Lˆ'F"/:MD~ThXXj PvCq- /MG yHYFwh8@'y6MT[c@5qc瞠BBV(E_m&++4KWLWȄMݤ~B7XlN C;ۥ ^&R\L+WIQ[Y@0/m1>t=RRǥĦ86+X:tinq`$v P:{Blrs3&k{\$*TaLzBRc^NoU>Њ^%S1Ze' :rQі5-a3v$E8.{ڢI+ ;Z$8Lqb˒LK&vsRj%߉EB9?͖En'3s tf/j>fĶ qe@R϶Y>3 ;Aĩ3R܄g02sԍ]I TNOW~4Y*SKU3^_*C(* ПL#[[ٛj7i0.K3AA*m@>n~](„dݮNВqj?!<Ӡ=bTD j5G\Dhw?zAebGp#%Pv}ԅ\^oUW kZNx!]X!1/> A U:nU6riWG-۹$yS*GT:n| &4*)9ϐUo*c6%OtYk2P%|M0xIJM(Q~Vbz,Ħq~pUQyJc7y)b C"|#LfW]] 4;_XFtQ_ -puK飁_U4 TF%$P[ qe@%Il.i+BG|ch&dɍ{[Ij8dRK%O8FzxhoX.q:acvg<5a!SūP2.kq7ˌJ,|5uͬzhm.MYD5ȟ3P -#Q#mIq"&-78&8_&B7zI}cN#0vk$jFt(bpŵ֏V5eN8p-v_L'ʩB̅%I?}:)z]zvXH JE@TF7V)WOVi^of_5χʌ[peG:o`vhXWvEEDf#NzXcG1(_&jcrDNmHz?!6Pa kQ?fQ"JrlPudˋTGOH\9P)~Пy}jS:v, a5|9ݰ^'7}ð`Kǜ`/vrA\s27o3i}rM$R74큜4>f) a/ܣE +cB=%PO` .'`gAJʵ@Xk%hRjIy\*~WΗ<+EHEQțB_5jBJk1Sa`x2w# !pLλXl-GDUw%'8951'Q ȅ#R'xY %5--.SWrXEIlB8PJ@f Ҁ|8ُ6Q,ۈ9JWev%q8c cy}x(uÜZ`_/,J15x# NS~E`\ AKϛM޹ 14e򮯉|fc8$=#HX@r:D3U,) #\*V!m"\\עTn"AMGj\dYSL;A3W "TR۪ 84{#xJ%g:ٯUc0| w&JґEGd= 뮵\O84= c-I8  SYT< I_qc!$`'h:#DFDhs+v8&o4+)m?Rq=Q2Iv f1${2OmB#I5wnu(lH(O&YB 7L?mSX*hcƹ;# IqH0*yyNOw rl*v&l;A_RJͻTԍ^YL<2Z*jBzGyƽ(fO(n>@ 2C]`u eS* ܟwnߪ`7F:ˉ)pzU@؞ 2d٨&ptµ9V]:?M#o bqCK(/ĵֈ-TiPNe-6vW}94K-Zf18]&'&NdorED^@hu}o*O-s$l2qjYNIze(hcVA*~~%Gao'Kœ&,.19;?|INBfzw0ϵTW]Pe9b00]g+&^6y<{eI(]S^c tx5"6Uyv{G, k!mĎ<=2P$r&f]8o#4bX}*3[Uڗ-rSi>G*mja^Yw+L9b[j)7U2ͩT%ǻe V+7P/MijH)723!:}23uo|mdQe)̦/|KDulD8koqz% y\85tbJp*ma),]T @PlzwN#wѓS+%P_8%OH{ֿ~Tdp/n5sL{9Be>ƿ9#5>Au|hQKÆ؂6!#zPҳ{,,#|E%λk|?`ǫ_Ơt@4oּRQD-M/[L ݩ\|Y#Ҙ}IZDtw~ hg>BBs|nq&%R"~0`͗%/9\OM(&@*2)P%}arLP2j2\" j ~vl?맙A+}FRg՞ABnZLt"*#siZ9|-pe3G pe؝OU%lY9  ?1a 5zwxZ+&%.Rp4ĕԭa̪<ϤjF7]t,PQkb0 g1)N7>*pۍ+jֆN=i.1z7j_8H؈VE+۟ȷMpƉֹ¦5HU餝Cuw^uIdn>II6火e!Q!z- B ڧE]Aߒ0~ELLgEII "yuUQWZ{l?*P6_}sn+OXǏQHH<.t~@P'a"m^/+ }a2kgCm"GonhjL 'Mԥ yusaYC?LAPHO0T2 8J,Y PA4lX$81cC̀b4~rqsOF 8'"g56u i>ap$e (5`;@J5 6Ӳ1I9F֩G*z9҈9{غպ0O#2Hy-1[l[8tDVn(C` ..xq*44w.nχ {J|,l.adsgt>_g~@z. 깫aN]$n{|PFAWN5 J||{)w>"zQGZ+K > =X>L2#Ha !"UĘCyTXGŘm@@l)xFlzn J+:,qYb+~?&(D_5Dh|d}=YBx$[oQ+} 'WC$fHT*ݸ]&Aܡd1E4)p9$3xmQ}YbFg?IMjVE**ot}`% Stq&L431R1ޫבv_m֒ZE*4qQ 1Ժgs`Z P v<-dU1=ڔԞ] C aQ_yJH 0k5T,gL5:4Y-"5bL %$.:Lr)_Xa[1`1pX@ :YE(fgL(7ec%GR$.SL =_Br w?8te!Ta3?JUKNj )/x p=.j.[!<ǾNKnLRj aLuB%Vo d&Fx]xdHb"mhL)گQ;R6`zi> h Ǩ H c_H8C+P7,ޣ^DJ;[1g9N&;rd$uC T b g!ЇO̴Ǩ`VS5.B <e*gS/ ~} {r\ QhCv]Ǫmb8`O$Ro8rSBccTwn sC<ֳ*~K @|k?U %osr<#{Hg<%Rh(4D 3PT ZtEQ|J֙ID`~"k9ɥm~U17#9eLXLQ7#l3E''.%8TUt~Lv1b2'ao(r5.+ݷjF^]^QhhrIwY*\5mIۍ'NHLXT[H]FRSD ChaAJ^ȑ7" h cw=G:׫J(&'o{ r)0 rY*K-N8KL0_OFeJ'ٍLMD18r]v}B2}ec*qd&15h/ wЯa()bx)qk.oq/dX*+wUMc${FӉJ*-1V#u> :Eڋq$B+YfGA{?2X洃̦OJNܮ b R+ܧB4- #eqemqe=_uXmVa@;Շ`M$r➊:6"iI# ,MtAuA*,qe]VUmM"9U$iICAnیV Ω9@ssFݔ *]L1 ` qM \zK%QK.)8]ցɈ>H C{bJ=z}o"Ss4r4ubk1E`^@;KK-B o(2vH,(rwjKy{fpÍgg6P_)#8֏*FVx="jg!f6&Ѭ=>!Iϓ9CؼQ&GZ3ͼȐM%Tw1Dg17 Tzi{9 xe;fZ$fȍSϕ@+"»rVkӹ4udӰ"D^;nRe4աóׇ*YGix[M}ߧK񮒳3~ZVS&f0s52V˝P&I9P$]ۖ?)zS6O@4dfk=m^ vH#,V6"G,gh`KI._Ґ; g'tfe0A/;$n]?z rP"r^~7;Z-"lg2J )Lj}JhS lGClksKK6z"(AȜ^<ǔ `˦%`1&j.UZyJvH(w%k)@*!BhYN{$7wN9S&S\w?Gdm5YƥБP%HMɔ5]8*^QD5@vN3IXtY<;';<-4:J:w}{/23XMf44!fX8tVJ%Ԩ~!"rTzODQʿJe-KXdŵLrް@)D@BJ1 [`J9* M($W-JzabW..pE*JTC[ F`@k ǁ;H2ݎ} C)@c"oF/''"LYBZY(i vJ9dJEi'iqNqKULyNȟ_ƊnTt9Y\V=ё&L$ X,A +90I%9cwyj+笨uԑ0?lE`WykG380ν*Ij\ የ;ޠbIr" _Q\Nzˋ"9[{%m#\Ģj+x_Dx[ÉΙ^bekgd6"0E\[H ,mcq=z7r+[9vX8:Nԙr#I:N/Mp=m&i%FȂ7r:҇#䪃57֜W"]*C3u LױI?&3>W N:GIKIsI.u\(}l !FK JV\ r#tVUf7zHH/4l9˒pц|?e¯PC܆H2r #\Pk78ke"]f7+n-R'ZT(~\zt@1'&ƓB:5+ye]0P;jjKvpe﵌UN/SNg S$XieB y'ilWyK;y DMlz#ᶐ#'vX7RؓE9HYK~mC$yj*N1II΢k-܌Cv {%+fpC}9}B,"GS|yOjOEhg.*r ~9yNAPnhB;j0⡲3z++\c?rHԎ_~ :tξFhĘMV ő@2Z+OKcRG d"3dmѐ!txpT`obQXrJU_#}kr9my4%?OG= ro-W&7+~/z\:-)\{J뼄Yi iF /Bs c;5S,ߠQ@5]e`/'bi A9:}; 9Ԯi wF}1lKE! 0MpR#`SS(hbH!ıo5S9ȳnHD°nE >l*N ƕsgѪ bYi{x2FAJT*w,pe7f u&W]*ʠ>gYFaYB="3]Dw=`%-^ )H l Z~窉!l!T4PD}a~D2qHI\T`%];닻Wv1W• u +DX녗\ib+)EIIG -#Dpߙkt(0nrHl?FHwpG!HKWd;O׫YB)H ,$rR.MTB.X2٪1`|Чn[4SRdM|MewG\LjASX65k\>Fy%$8^"'weE *A,bY< *kSq7R4h_: b%t:@oD+&4-TFC#/"Ho j*BV P:܁CTsЭOTz1TF02 k+tœD[kcW\#KhwlL`0 )d%ד[(kZVUrz63#(tv%O}:*1GVMZUVՆP2{\ Maȧs"\҉:㠺1Ej%63qe-7R}AeߒcAU^yMx6::|vX Ru|V$hlEerqp&d9L$0XQşQ#~k1zQ3#6q$&c ]Ғ+M#-/6J-kz">nH0 Gd&M&er㘋.Fj*jQ0Ͼۄ;[[&ժKKjS2OTk$Nk0:3QId1@V$+9p! AQvBr@ۘVzRF#,h{$Q C ?_Ig~^˗XUbSɭ4PD_u̦;06 !%-{NG1+T42+7k9hG3nI|<"Z %`ƫu8*a H0<O RMIap1ԉUڤKqdn> D6;L=l[y!G7 Eꢫ]©\UZz rlfߐ*y6 XQ% np1}YEC*4D/,NfڜM5OVN$OS"Bq>?v+  Dkq䔧"KF'I,LHi$;/E2N=PyJ-t7Jml)la@ &" GDK=/-*7oڭ>D$mPŀo" +iFv+(LY":-1M¢Y藕8eO !-tNC~^ԍRGSe eavෂ[me^P[(gRT_!) nWLT!Q8MdDZǠʲ6tLAs3^~W"j&~Ny&9IakF-3<AzRk/MMd(xe^*FY;LgzEvktz4qbԒhB$0f u2C#T%_eQksgQ{=3IWVհOo$W !E-'1nΧ¥ܥƌGHUI-rs')+:"k5{lqLufwb 㖆0FWySepn AQSm[-%h/ NFIC錹fӃ?׶,⣧F̺zы;7Y <= "|C!7X%Z$M<{pQ5[#iL?3s > !eGA 3SIuZL=Bù=ђӣ 5U%7L.j_2HVƒyc9ytlӓnZ)UP+[$N\s& 5)|%_כ {BR +\zo r @HjcjdrҙoU>{r ϸXɆHHTAMg!m87PYF5g[RniWֹ6fy= x sS£[LjtMo5Ј}9]uN2:E3c>32k9O/ƭpWɦW7wjtөƉf{QHYtekj6gVd@D^#ư25eT7d,wWrHmk*c| ,H /qK[:`Yz/\sxF>| ijRv7&'!*Z/dtK2k4вe!=77&%fdBxU},54 nM(\c ճje<+bQE5T4MRiOFQyٌM%e+kq$O[v,LG&+I._+zM5 +ZLPLznWM돘J7Ĺ!-"ֲ0BoB9a2B#_ m'c 8gzQ~KL\t4urJP%4]3WЖY_ۧPY"CkZ ._|\iR ]]'װAJ_&p ! R8}e4-iZlj)6#i!DT^N,o M\3]? kBxV<5D3~o#G ŢO؝iqJ_m/TD-fs7O^hHsU)<]˧o1ϛL~zʗ*{zf/uk4-~6 ,%\Q.ݢ^ Y򜛶e7B86ZXela,JI'QnZ qJ`z3/8l)#گȠ(9F0H)uV%*Evu[*b$rvz 8lR>тp1vNjd, ^1CXL2ә.rơ툄P} o̮)жAeə,LBRg ʁx @ i?+5w ŦbaqlLM%aX!Q RK^10BYngml%|لo!zWR3}E97!qҼYr9qH4f/!QP|We}`ҚJu PzyYm┤.춠sLѝuKBlO;Jj)Y ;q'ѫG5 YQFatG0gZ-A$Ti^tU$bk^>bCv7]3 T{w$o؋) '↔({_I7'tV6GC]s=;.?VHMW{IhQ/%jo N%ec=fz61aQ^[I?'WWJ9RL)%jWIۘt< )% X .D+ƝJmΆRDD^ع\c'K@p7:˒`` ja7#q$JlA CEӲo$Pˬ$Z7tK4i}/욀 ~¶2j>Y(~gխH!)0mj^LQ,v#BG?&h&3r96FMhVXRֹӛ쯨ľ @nZ @W n|undn!P$AUX}Dx|o]2,oo"Nמ#4},DB :ûYǙEf$N3 |h9* Uw!bNj2/6-&atLΡycOAUE0N:HBpfID5}Ҝhd7B0="L룜lX)lI)I"9Ν5(tD׮J4MҠ댳 <=ouiy(B3q9U- Ȍ % sZ'ܫLDٶ%K)f<[bxc*ze驋v7 ]&KHQw[10Nŭ|k_x(Ys 7n+ړ&3SEba=H?%DuPZl24zkeBTH.3=z{ִIb]mČ3BǔC Y&.["G Cc != 4 7E451F;vsbFE2#H{ӣgdmeVD! )qGc{&rG7q,jԒ.]-HOE+bU=wEO'{ sAڨup16ϴ] Zmxj!1͉Ey`l崹BCQKIPU)L!eEw \l`i^BϯHof FlQe+^$8޵UiH2Wˎ7ՌRkG=VL[P8$+0YќНĚ5iVV+Iu_Ze[+ kڔ $-;ɨmk7 調]?Qo6ٶ5{d?AZ I!AY=rX$O\7Ӗ@vyi5*~E2Cٕ?"G{kNR8%#m*7AEj"'RT!M6(/ *K[v"͎BcL S8?R%FoMǑHW<%vI\/آxboLo BqyhS"<0z0!ۊsJ1-%..ccX @εz#@wF |0NL:2R$@iΉsSHjv{eK=bݽ2{a9XC@T75i$a5ߓ'd'Tsqu%)$ P`C#<.ݓ9M0Ҙp&SS8d&Jf@ĿAp2n@- c&:^T5M'漳X;݊V.ٌ],뾕ע԰ 4k<AA6)z!2QՓf0j:yХ.Q dȌzI,eٟ˩v4yJŲ 6]СBxijr\ZeZ$H8,hDhF;5(W`oG0&R؏ "jH"Tt$/ܙc%m*+KY a_3c5A8bǟ-s%eVG!0ˀ邒`ˣmf3x6W*%y{v[RݎME!wZXP˦lQ/+I뉳 &*GfZTz`nLSXS|#}%L N^b8h(]͡0{;7 V(ϣz️o~-h1aD*異ܳeZ"R)k ![hFC4Dkhgc(W>xC: L@ZP#t{˶sD ka|amZw91Z23~تÙ#uv~8`fYƧDAg>.$7aR0H6_*fP9,汤%_&u{7l`jRUC5D2PN |4G1ʜY *0V7(ˑ{`Mye)Md$jg]3%zMZVq$XQLfٶլBz1heEQ`2% @5`ϓ%GWIGJ5,XhKӰ+H0B?ل|cnU_[5Q%&L" .oG "Zăp9|AgQj#lة ,ι ::vCB~Z+~/1Sk@f"Fku1-mؾSgU_o UUW7$ˮ2 -7ygTbdu-*V䳿?}"QjZ]#ҕkuѰB8Ibcgw}06bqP)ԬETDcwȉ<Ԍ%-jG;ΪgX_2arTJG@BCf;g`XBo'AEŹ!2vfiou?𛞩g4kWzIZKS.Pa301դ~5CA6j hl[1MH-=8ose%򵣰mKЕyE'8 ȧa95OdY=шڻ=J:(Sa`= M܆>T5" ɀWTC:+DC sC^ m٣thY/tDg[#{z9(& ! [ Q-qpD4 Id𬖮ydW0X71)CNĿU 4wA'9*cgڡKS_kt]ba2u2?չZd`R89E3$  *:/ɡCDEy@,i&C] v&#+q"!+*~.Y)i"\VD-uvCjϞ{+;:炎M*e0ڑK,$HA%%&P#ⲳp9 X`[FˊF̀uZ-h@T" ^@rM`Lձ)q5YC, Qߴb["?!jGg)ȍ݆%+FX6mLyV sd 9-;F_)ܙCaR$p؋nrcչa LLCD( c(9DV aTYV̌E$-di%|Z"JXͅ $vMY<="A!J7~#@0mQR_ʕ 7\^4ȱ]iR%l^m՗XpDFiڮ4IuIz,d7KS/QOƾEo&RB @ӛ"f/T*!PS~Fb[n#̗7;L2e|Y^W5[C$EEzsSqw>됨+oo#T)E 5!%P|iF6X/{~43#fTNDa}rR,`D˟$FsUOZE~kXm̘K^QBNÊ:6 t\vW.=V ^sɒpU>LdG4&y=UP2%7*EW P5 JIڤup*D*cRZjUuZ$E|.֩KW61J()1V+6'7UuHGcN-pfdEsC޴ɳ]J1/*Ci,Qc389$4 ndLRT[jlh睻=N([={ L $R,U4tR"Y$0& ' $HMyhGD脪H\WIyT:|p}gȞ:LYAh$-t (xy7%Rhx{;Bs,.wU"bY# PCF{| \ D V8lc=]Y/$+%q |Tp&o5BSۉjW$1.ַK1]N-(bx}E$[}cBBUH<:S$o^qON볭ܑ5Te621Hk3I,#i%vBL Ѯ,ĥPr 42`qC)UF֡Y!)$:yyBx(/&hT Us݀dPlE5@ê2SЊ^ZYg݄tmt(i/0zXo9DGƢceؙywb6<%^sXTm O5eU7} 'U)b^_AEiIݐܩecޥ5y7V&;|N)*%verPKab=W.@W&?촕yy8v R\-?0:XX})@WH~>4I"ğ |8cY$”1 =Br-@~TC2)2}TmSL"|JGF rWqoԦS)fT,o6z9Expywa|wƸ:Vs_^տ!#?9/dדdi7^(ڴ2}ēuN"t@% OyҒ#+Iڭ0MɟO7Wܸ_nw8zrLdyN->f.QAڿ[YN$'/tbȲ` 4TJ( ӸZ—2[;<|nvhws4"*uDj*8 p5\UypN I 0+Wxj{ӭ>P& 4m;LxDp0g"2,(>Ծ!ͣVF )0w2w76'QaL6b@5?huyf@nVٵ^K^,):pfx )GH"SGB/kBI?LP_/hl F_~Gb<0Hcұ,@_/MBV)TǨZVAgnW$MJLבQf6-WrÐvx(LHk?ϤI$n4;D1--MN= 4Wjjxz9!I5cMEԬ7B<0XjCĩTm B7v fYnp)Ѩ[ m#A/LPq \ۉ Xڧ3px:BzJd)F%AA@x\H`FVw`Q/{a&,*8DjG0X<90B&$ǍZӶBZ>@jSf)FlPգ>ZBe]+kaCJ>:(P9c3B@܂ԭИbCɳۃB@KMv֩b@}G(TA)!yedϐ5ATqrPN_@rz=~|hXz!YĴp\FAz?N֕BwAgn@L椮F%9֪rPKVl*ߴӰ&zh^f",.#>Q" MPR b C#K#JG z+v۸Ų1.J8U®Va4 BbYh4 1FDDHajUdl^B4쉦OM:w<"9Qv"pDfo 0>9avj`rӔ+^EzzZPIQz~f;j|Nm@9><+8{z(OdfeBכtY[KΤٳU|/'㋛IƖ kIJ;xx,8v}xL6і WBsg Wz~\eܭ͍C^8 Ҩ{:diGհz^tformބo(Q ]gM v8I̮ oXD$|/a i1`7tTChEb2,[jZ@߾Vqfr}e-D⽅']/%+D-휑I8U%:Aݤ+ v%Usts-vHR8&L@G58JOaƸo_QÁ~0^f95:J}UDfEH/3U#&iՠn)Ї-J2;"ϊ9CPws+gh+pG&+YIOܟ'}ٻcK.s\|;ta!a]F 1s ::-g VvPM\HtR۽O]˨pt5< X@.CB)ݤG&?GI*0e1Qlv=-SD5uB̴:{&hF1b@oMYye3N?C6}s"HpD +bVܚ%X:4y @ֵaH%k Lݎ0 (I(ÒגP146d "XL4+0G A324lUpcF AU 6""B8Xc " `"0mP`ѡ!C30m(j(h T4l@@`ѡ!v(4UD c.LD@EPA^fpT6" &fB@H] HCPf A;`wa?pb(0;Xѱ6hL@E 2F̄DDw 6 Cb &B hLX (pUPff )J? 1a@1/0hwcd.DD` yRy630m 4&d hL@H] A6x]!Cb*30mU`ѰUT6D@E c"""*30h 333UU !aG :B" $.pUU`ww 608XUT4$,pDDD] UUT6(30mP`wpyh0;`ڠCb "l@HDDDDD] UT6B(hLDPff`ڠchl̄@EUUU cd.H@HXo3!T4&B "Pi)JQ4l@@f cd,tT4"3UPЀ4&B"""fBtDD]6(08Xڪ63`p yj30mUUUPT6 "DD@EP؈UUT6*lDDDD@EP؈  UTjlDDU UUTj3330mUUUUUUUUUUUUUUP؀Cb""fB*l@LDDD@L̄̄DDD@HDDDUUUUUUU UT6*EUP؀ UUUUUCb &fffffffffd"""fB*@EUUP؀UT6"""" "EUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UCb" "hEUU UUUT/33333UUUUUUUP؀UUUUUUUUUUCb*lDDDDDDD̄DDDDDDDDDDDD@EUU UCb(3 UUUC`"lDUUUP؈UUUUUUUUTjDUUP؈ [Àx4hL̄  20h`wwp 9-c,' csY`h@J` Аv8 hHXh!a8 4&d,4e@@Аa 0h!B@7t`鐱4U !UCb@(ARLcAjz!'FH] 3!2UCB(30mUU  Cb" "ݎ !`t!wc(hH UUA0' Qx'Gch0;`ڪ UUTjl̄ CBBpU,hА3!cfBHDݎ 2L̅ha lD@EUUUfw y=,@Ef Cb 08'ċ  BT6UP`ѱ4$. wCP(eh!vL!3!UA4lDD`Ep!E B'`wwwpjlDD@E !`wсLn  UCb "PЙ  6(lp O  O @)G{^p!/f` 6" " !232cB"fB""fBDDDXnwwa]ݎ B' RЁ<Z =@cj08Xڪ TjUPff C`&ffffBt]˻3!a.CP2!v8"d "DD@EU  63Pfff`ڪUUUUUUC`"EUUUUUUUUUUUU  UCb"P 333!33!UUUUUCb""""" "3^fff`w yC33333 UUCb""""ffffd"fffffBL̄D̄@L@LDDDDDDUU UUUUUT/30hfff T6""""""fd"" &ffB" &fffd"d"""ffffB" &fB"fB"*DDDDUUUUUUUPf 43333333330mPf`ڪUCb""""""""ffB"fd"" &fd" &ffd &fffffffffB"""" &d""*0mUUUUfpx60mf UUUUUUUUUCb "lDDDDDDDDD@L̄] !32!UUUT6"(3UPЊT6330mUUPffffff 33!v:fd"*lDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUhydrogen-0.9.6-beta3/data/drumkits/GMkit/sn_Wet_b.flac000066400000000000000000000561001211146647700225310ustar00rootroot00000000000000fLaC" @w@Uݖ3E*jT7{l( reference libFLAC 1.1.0 20030126YQ֒ ZW8/clqIOP2ө7īb34EZgެ̣*T9eIFy.!lڀN Mb]8ޭ=*!/@zRfICyyxJkH]WmRI Kng:rD6єnta:"t wJU[[ח١ khhK-!aǏZ,bCkN\z 7EP1p !PG`]; EUr%8o[=Urs*]Ċf q\T͒}ZZQN0dytI9՟3y>.F Aw^nTLOt(^LQdЁg|7BGZI:˵,r22";|7v:_IDܥ 9\hBxv4|4NosFJ ʥHdk4,s5\Iv!s&Ddk.A[=3 ]GV,F,ӱT )jE:JczW'ϴF4äPMMx}c1KruF+?ݨ)p.q?K\^lP(jfr AˇIɇHTFdf'+eun+(~gH$k=h&Fd\(2A];6gqdus򲾠9 i2w暇B,Mz(b.%vLV^P4ި΋ ӮfSwdθIC;Ɏ\-x#4+7=m_:WaCJV^'؃wB T(UDJy$K0YtwC`R"tV}6ʴ09ٰhx^3f:]pV6mЇTu7de\+<9&*JPAz߶J4Ef/^Ks᯽t#?118w2ٌ~eK&e(I( n}4Y\M_l#םhƎ*Sx ?ٹ˿k>ZW0lԉADלDjԺSP-a\7<9NQ3"b&EqefM ]aZ c+`ы= h/iy`r4\jxba"`9o5wGbg!wo2Z:׎u%JE-*(~^ܴTIAUӬG,=r-B|ٺ3ah0;JZWmnNK=3ʪ#^Ll!5pD„RgTh ~ R:Va"h J eğ*UM úӈ(];$v,x :[ =v\-=b]B eCb-%;VX65<6AJ/JH F\\ot _lD2q$<\6G9䃋]3 H@@@[R LN_JյEJ;Vl1|o |9иPg }!BEUY_?_1}pL`ILS lse>eNy^ 6v{W/]9J+6'$eR,2}U\ZqĴF և9rhdqNr G=q3ţC5ϴ3iƷB)Ed?_o45<( BackSabB84,);fi.NK],/R8 1_x/3 Vĺ&rG .HGqicEJ~ ZOEo!~7uo-10X62*rnVT /MEATy>bc^V2ZQJlSn qY]em]9EH'1I@ G:ΜnV)}Kg??`YO7R%*@6#kSޢ&6 rAS(#u^f/9%T6$Hi'֏t:w%c%gjvF(Μ[96Bm;~,CM *:dKDl<"Gevpa< =MErFQ;HF^t])TUPr(qIȳV}ا,<ѥq7Z"|ǀB؊JPpm.GTSzD»:t$wZiBMb^DPPER _wsbR4$I1 Oq%ӄ #KՈ6Q#)y2AR5vNWȋ9q,j:aDH?!6PQ[KYKFQikJnBXual?m2z$ʓ[*̝v% .p57Uk?f'.5, ͵[v*'|{mWN8uO)5s {I=OI2ͫ>Ddͷp<-\Avm0OF:C <܅¯ B.l$diI(EZC4') V"q**H9q@21 X($Fy/dF[PAuϋiSV!U-f& /IBEa?jzЯoU 웅Un`"4bغNV6{2v綺:"[\iE 7Y)u7TfBڨtVɥ\) F"d(ݻp:lD({K=\$1<+Bp?[8)x0-f6~ Zgs7phL=S2(>U^oQ[6W:pG4C.aVB@K9ZEkС%e\.zHI[;:TobA5IX@_DQAfC%o^\ào+[+%Y5z ] F`A`d.[p`>}ot:3ey۸꿘Ȏ:"G &y9tS^$Z+1QΆ0ӻ}w}_n> N&vdG:6Y<uĒbd*z $/)U?G XO4}K*/I,}7C+Fyl\lz8}#ڠ -8Q q_|:ϳ}#ǯҴUQS6? zJD䃜7x=!ڱG6tmz~!"E!0;DYY+GNsHL1;ȠXÿ;@~fakָ7LJhś~W;"}8Ht梷ڭҍ~ HP(; ޲ ?iHEp& уwm S:xD(Z('N?77A+q@aZT Bi dF 1C jJzZK4$,s&JFN8Т2X3(KDڥfnB h=AS1*gPDM$ehV^UH4d ||"ę-W$^.M;;۠ma(&NjuXKήX 6.^VZT#pJR |bׇ~2)(%dǀX_ysTkѢή'`3<` ` ))G;zR_iٸx;"*$۾c%L{-uC lA'^|`jTD/cF^P{aҳEd 1 TXrouq[ebDiSʃCUP'ATl8ѳ8p |q(2 Yxs{վ3c#a/~/t3eMBx%zgpd(MIi M2yۇg&CӄzeuQ֎s'cq34 R(M7jbP`7qS+ A$ GhE ˆxF*1CɒIhCWDce sNdpRdؼ􌮪SgCɂټ,hB\r\\5 pY;I?l迳+JZXL(a`!N(b0<[r(kyXxvmhE8N!x0\.Zs`ChV"O9y=i &*' *v_g5tGIyT +ajLZ>b-8c2vbX[$n-va3l VĈՊ- HMXpPe>GPoKf֑f#qJլ84A=ٝ%d(~总R ˸C&!^-pk>be^ |>-v[lBU1J}jyv|cM7KVX`DFDܽv &tM+T\]ġTœ(0,II铂&YT~: %RCHO{)@mpٍ+%{4wRƚ;怍y)/(c6c6F  eb,W2B1t p $bbb#| IupDT*QK }>JMv!F z WVrrp$*& n٥ocҠƭ%tDXfЀ~a|m h>^dȠ SQ͙lg=kXɆ00s1YGͫͰE\}R)UN+.:t)J qگQ6P&y^+:гRT6sTAkpD/ae?>ZJyS ;MSa/U8*.(/I.ߡ_]7wNE9_~j -1򺡒?e^]|Ma,&KZ{RTD*"V-x~,Xl`!pa4z:X1Gs'(_(BycdgT+E.wǞ?k43ZVۭF%uͩd1=J* /kUi2Vdh2'!29">}7 (2M$AUS3;-:r٣CaDw1}mY`̐VXYM xoʳKRR_zj,}wg5N}NE[Nۊ l!²d'4d蜹CbSmVҫga (LL\'9U%$i6 /\0VJ\L!U覝#[$KvB24wA@˩g $Ra?}R1@wbS9rB&JdLfu!#:$՝a`* u P7h+ \ETIcЙ&/Q,AV. U&ÍSS,z_Ƴ/R4omnu3?ψojY]-Wh͚ z]g|ձ#O=*ԡ땪l&SMzѝ\^e7Q=ueisMHH Ox¦hPqȁCbL!4 s QB RVhʮ[:8%[pҁ ݻ*T0[;Zࡕ`F9m_mEf BFx,+ԜO"P*-y.Ίk,\4"2<|s*Hl U@j',/`Y F\΋},IJn}Ұ̍Gx'"FMuذfTH.Љ3  zsF%+8 ZV GDCGZHf]u$[O.6;L{_4s퓹>8̘n8(2=5v YS%vXl$I|Pv_(旒Ž켺yQ$`Hٟ-d((^-d]!))iq]\zgLd+,ϥI:vAFRӸWdW}RddxLJETI\æQN2cbIc zƬbЕUCC`" OyvCSO3RQrK&] xҒELcX_JIv|ΌlKqnoa5B!*_OTL4YpI= U[Q@ZmnaȳU'/$hOyn)P„ltjR ;QR*p]ghY͑ZAm]ӷԗ6G 9ҥf KQlkWF{|FKՔ"txg92l{[dQcPEDͨhLRRVļ%"XFo_uoE(c3/ڥnk;q蚹E8Eһ crJLRv$>'MdV 5IMN覢lYsKQWGvUⅬ|R[RE B+ӊFm*׸]2\2#5[I h@m;]MЃM4B~% Qڞ෬s~*2a!jMCP2V.V >;EwmB$Y,3o,ēvcKlU O)p,$c?xC7Ԫs醩{OVGȱ[[C%9-UNnc_S#Nu lg%n3uvj7eB,(<"xsv5<*aV] [֩gYp[k6TG"iDf{$jŒCPɩz[( "!Bt,.9' _46A2!?Ku\"g!I^#=Tl֘df"""E0_"ed/VFk2J`,Z3 #gh{jևU3g+me=(Cy/9Szm|g{Ub\U;B"/L~ݑwx 2Sђr&t5WM9l$.kUuGKۊ& O{+&OJ|M\nrp졷 qk]UnΉ?*5It:2F2-DF9*l3br8D"# ~C>^L\Q\g+fDjBwf"I2&mϪ#KzYPR҄ /;3|z.WmZ*jUؤWt0B!]ِ)U]Gj&_d"*RVTdB'jhf\2n]&fUխrRu4 6rLY&2!ӎdK2\v_IQqn.SQVMډW/PܾM\?y gڏ)Nbn Ot+YP"S-\VDJ+W'B#y1Eʇ޹D1.eb22&g LƴFjhDR)b:8C)KI(~q$3F2* 8rLD+L2B`0[?tLVlTowq}^N2ūq\DD)LpBn8g@S̃n: F&BQ6ƸFT(bPH4ezTzYbckH0Cx432fhg.9 $9FJ Ar*!=A2Ʃ(#PN73FaWvaܰHL8[ARH왖rG^/І)!'2%UZAqPD:trNkf%Q%L!rT:L0"$8Up)9T̴ʎRGg9\# sUCG6Э" Ȣrg%nD@1TIЅǴ\\"QT`m %\B0@F b; 2Tȱ)?fDISm 'ƙ eDq[=䊄_ fERT /\.PdEe Ȏlݩ2 )Bk6 u@VLLәQ%b+SpGӍ\#'P (>B%WUSFj(An$LCm)@F@%ڢTbG5vt9cXްC$.p2<" [S3tcJ㉈pm)SL:F+s#4{L& Cj:C@ 0q)\5/1NVG|B"X}am9olBs 3Q#*+(Cw29XgԂPcѣ[XDn8H qR 8Bye1TP(592ѠJ*h5eFu{5V|lQ=22QȎnDSb%StT!ڲewuunP1?p1Q 2C`29 2XV4= -:F1];h4(N*HD} KCbHdnEmlDR# AAiRhŋЋu:=ɉ!cz:Y5M?@NԼA@ ̄FXHi?XE#rA%ANa[:&6{Έ9EBGJt &3[ױTahE "cJE]2vD('Xm[aPDG̋4 H0QMIC, da9:5^LH2-},zlU{bϰ'F 53.U!H! U2twsS:qN&O2A+!IX9 %G_:m"O #W:/2 Bva"KA AιrWF2u(FjFC XFe2R?fuz,Cֆsݚ}V !DekN@7yr@Ԉӳ\̑,J)&6<*e3t""TBHPb֣Ԏi=RVBM-ڒ6тJ٪; $"`,vxDֲ{$bN-R4a+"1ѺvG ĘMϘ#;+Tad ͒ ))(heѸ#p |2!] T!aJ$!ؖe,KiTTK )yQ1;2*=ՍGۺNtӗ*yFɍ ]#>$L0il3V*X˵*!VWM7$ 63IH!2zs$ d=5%BS+$D QiUf ?䊗9ReBTqnz̝H!6v>L"ѣ%MkHU:1Ew ɚ2VKB|A QS[+ eZ%Ј+'HE]KFЬ `b!uTDȆhvjJݡjtE*QJBY%DCP7j۲ܑ$2t"| c\܊Mv"k'Da&##}Cvy̞\#m~MMf[h'If0""nD ݛ}D6ZnI%ha.tH$gK2=MШ*.IؕNbOA%4"\2JEMJY `Y zytXAZ:˒cB,MQr2*YtTdX{6_]H5 }FBfB ݾ77i$.]"ڏLbHM%i%ih4/l_NޚTBV"2͛kFQD"#2=RԵ}:wmbVuh/ІIekF15c=ST.nC ̉j2bEє&S>IY͔L?yRDSܾO+Bm2m6&]o!XCX'וЏtEDIcJ"lTMeլ2ؕ&#U,G_9w,f'h<'A HJ# ى:QC2LZO_Lш®bĨ9 "&K hHGxGPjR}]2Mֈ[ t,kRR 3\5X-eRG#^˷QL}S\ymfH!JUd *RNbQD+4LN3ԪvM R" "t%e##FKk.B,QuKzVda=6̳-bK/%RtRfdC֤+\rv&#Tk/IFC:MhNB nT"-DDy]zHEZ?U'ͻh m[mSVDFcJro]D6339ZО2DC>[djҦ䰚Iu3kʌwI-3 66&MɘCdޚCD-&Ҷ"t3gh!/6JI$a4ypeѿXL3qQ""\&"#&D#tRͦȬ-Htnձ=4\2#6JKgFg~1d.%I10i&bods"b)%}#k6̨moȍIkd"ˤ3tՖT]4TjdDN%̌ &Uh7 T'46m/'*E5[VBLRBiD;7M'n5kR$M[W]tNMɹ'H51D7Y M Hp&ԝچ C}3zeHշS5=yU*:~Q #T"#75Dwų؉2 WMiFƗcUh!;4nFJT jn*wf{ mĸ"lfH#c!u 9.X ~&8""" Q9ġhGl* B.@VR$!"Q8D>DdF")qBdJЄ~KJ"b$RF7D"V#(mJ0.PDH@ PJM An~["ZbLZ)cJBV LH ՘8Q%W(BAEZ"""De0H"d&NrVQO <1c k*R*e (+H"Ս1.MkA!j$E%%5B DQ,k&D!Uckhe̛IMRe$K #"d!LDD)F+DcdA!nߋ(DȄ""p踤& (aЮIFFdXq$E$FQ' Dl)]XEcKBaµH;xAE1z$HJDHLi @"UaB"] d.xHK m\etSeF4ۡeD[q u) "@%  ;z֢'!"d(h\B{Pi$Bdi cn bKDE0Y!BZ+̗!2. DTIҘ@I1.&)-2֧I{~dHm x&ARX!\YP:bR\¹U RHVB_ %Z-% iHxCQ N $ IQ`) "A#I&")q)~EI%"2e<1[Nul% !LDZR"|B0x׉JE|dDH()AEyN!<PLx'8Vu"=DH--B$y!, EֶCؤ">$.L'vZP%JYqA )""#DhB=%eTLPB$G58P Ե?q$2!iG摉LF$jƊHP&/LИJ4 zDql"$E$$@ $4LD ha(18*kBe2,H$K& LDbq"SI%ډ\D%dɋH!#oHLz#XCBv̑"2(D0TEh*N&,OM&B5"QhSH%D#]5uk(.rD ! BX-J!%ȹ ȑRi"&B%-$G[QISdG"n "hL􅤨X/Y2 UKDyK#! 4HB!I)! QP$%0kԒ-G 1h^A"$l|tR75Yh.%ic]l.i&GKB%Ŋʕ$Ij+Q$ZC) "a} Z-Bol!bUF]]D$Q[$!*"]N Jk#BddQ$d"j*D!NNp@唗Yz_۔ȴ,H"HE.&#" .J%$d pďe%eTL+WU4I'1H[,I+d2O*H*+%AMKQ$F$!./")TJV,6DI2"Eym %GCqiW2!yvEȖ6Z %!L":XXB2JHĜ䳄Rh2$#AkD4hEpVEM!N%e^Y8b8a0~8q!F""!# 0# aB0Da1B>Caaqcab 10<" a?80BqDa! F0LJGaÌ>>0xÏa08C?8B?C88?a80??C?!?8È|p#0!Gx##bcC8Ï110!?cG<8?CCbzQy ?6 ]UUUUUUUUUUUUUU8UUUUUUUUUUUUUUU:qS誧UUUUUUUUUUUUUUT誜U:UUUUTNTT*qUUUUUUUUUUUUUUUSNuUUUUUUUUUE:)QUUSUN*UUUUUUUUUUUUUꢪuUUUUUUUUUUUUUUUTʪU8UUUUUUUUUTNuU:*qSTUUUUUUUUUTSQUUUUUUUUUUUUUUUUUUN*uTTꪪ'TNN8UUU8N*UUUUUUUUUUQN2LUUUUUUUUUUUUUUUUN&TꢝUUUUUUU:qSU2QU:*uUTʪUUUULTʧꪪUUUTNUN*eUUUUUUUUUUUUUUUUUUUUUUU:):*tT'UU:)UUSUStUN*ETꊪUUUUUUUUUUUUUUUUUUUUUUUUULQULSU2hydrogen-0.9.6-beta3/data/drumkits/GMkit/stick_Woody.flac000066400000000000000000000441151211146647700232720ustar00rootroot00000000000000fLaC" 8 @2T~ȄqgG%!( reference libFLAC 1.1.0 20030126Y5pTF o"c4!k r~UW\DgJbka Z1L<&jauP|&-r榎u\ &ު )JtVG2!&C2%J)R؀#J3hvH[h^X(z aN#? bg0R l6TL_za $%%JtMlohmdpAqQnRY9 :=kNن:: `÷2*ٿeLX9+BlɁ>mh֒|n)xuFo%T*'+^eBz΢1n 5!ϋ :Z/UeVՑ7DMp G<ȴjEVFȯ)$[4j#./?uHDلx Zw*mEÊcZ%MYĩr # UÆ{LkY$nL$oX]Vnþk9&L4D=#}+t~=a!rNuLQB:oyrB^*Wsowzen\:c֕ Cp˅M5hIoƵt'\UfpJnW?58IG/0SN9EKk#e'(a-k,-| 1)#Ž"}>DU&^-κ"N*o!d :XCJ=%. P!qRbrYP qMcej2mL'j7]{%B0unӧqi7ܫf8t8Hx7tۮ/Y$"ޒy|h%HsV'[ԃ~Tyz/N /z'P!i#!S')؛5)e6IaX>q `b[RWk9f;dl D'`5iG$̸9@ tm"-/m0Z{¿pg2W9MZg{e!gS]ޚ[:z&/I\%R검lf7Ny78:a0S* OS(j3m5TF5OqdPW\fqD R7ڃD/ɼ4޷Dr]S;~d ;TY\ؖ**kyMqU*!4s5Eyϒo]6 olru#(Tpw'L[X[+ *QA(+(6<9iH~*)"o } D r2 "Ϣv=ǀ:A0糜xhkM Q)%[I8T0 ȤvV)Ľŭz\J`J SzJ' ]aHg<ధoq0'rC-;dVh|ɣdDUh6&<&ڡ9;5GnJSDjъ̥  h^Ih+,;vbJ<'ֲl~Ka$%UilEvC{ .m0{РR|bSP"~_9XuSYZXʏL,9M1 CO=^za+4$ݹ-7> CNk`FjQbRz6DGa>`ұyḋt0J NjQMvW10U <S UCG]ZOs"jURd~A@o70U<E/Y1~jl v10PmHSQ _%2&}ml\5ԣ\OͣKwFxM':"@/λdrB!4HY'. ~dAIO%E٫w*-|˘ E? j!ƌ#V'*)+N5!b9UwdO 8 bMϡhV7ZR 1TuщI£P5'rdQA #H%nֶ͸̪N|~'%X)_$)JKEhV~ȣ;NӖW!83ħ 50v1 8-⃱h(٭V)S C?#ϔ\@t.tc&B׌Gen':5|(0"5򄮎&SZ];tvE9I*wuvVu}Ë{A?PD{GVS2Q*꟯ƹ":E;7&Ku}\3'Gd BkVbw95]O."Ow΄˗LtHF':E 9'߼봕TN }U3+,rC}͡F?H 0(Zr 1o%;Av-m\"R3H ,༙' X2je,4}AsÖ>c Vj]ke'J6 1{ՏY l`O*)b1aD,E Ɲxy҅cMyiO R._SipĨbK,9*p~("w)|/9J*i5'zbG,B+A9i' cǒlq"EwttMZ̔ړJeM$+фlSӑx V$;4]DHμyzNeH_΢~2wfjKcJVj,>B?~((c#=0jb6-29!Sۆ4S(+`V5{<i+Bns0hn^6K(sQ<\Wz݀.Rtt; "(2@oY17L2AvY4ФُH>T|%'׼G&-Tg,}UҞh~ݖ ч߰ep`v:O I8_tX(*~uS(5t 1iPZaڄkCw~,3n2[^7xDa*r7ZkMO6ɱTepLMlbnI^ĉ Ж:2a|T(( KRS^+#u`:_H(uynu&%S<<fCuZ8q&%8fA1L]1~8ʛ%=bn} W^{gU]n|6T45>e=@)k[.يҪ'jL:)'*φNVo&Zբ!AFW!bAjwZnίRH1sp~C0tXدf-?^ԟD^v3"uЭ#*8'`9(e(I8""5xåzlL;S).Q)4tܐ%`j&))yr\M878پo4W6L  ODq4 f6-1Z~i2?22hjn "Zm1g}Hۦky&!*cRlC|IMf]u+r_3B,O+)YF;vV¶Ҧ~-/<*@Ub7M * Ay}_.=U=:qpj4AUHֈ8n#ioj9r'/QT oIi4v{IIfsf,%h޻6/ם'6$"aRI22O;*FPprQͳXu;+- EeSj0G\d(RʐHfmh QR.ع)4*5\A?U aFPj07 ~]w>z@Bzf4GiGrm)ATBh*2l V>NZNN^ܼHrwmu^*tD(gޓ^Z*glnY;FouiDx-8gF xehs.}?̗p|GAzqB. ,_)w\иE(*-jHSr?=A@32ѻaXK JKI NBD ΐﵱDX"lqAtC` PLD 0 /*+3(-k([P @顀}ǺOY^e⟽uKR_}!l\VZr ac@$,+ !]rcĶ&1{v)A( 9LbJCșGI7du0vDU2n#E!auB_?.rhVtZ1sPdl^'Y"e\guH۠f¾vJ|qP,Va*6?nyͿ~ ׇq0vGA\cQi$iцPntmZDraNViq,[4v 4>ZU}g"ɱs8̍!QzlX.={8xv55':JMbvUxY'xJ;ty403>Gd |urPm1|TexT]/*`XC`Ίa=\z}]Maԍ8IvZ90Sbu{l9hqĀ`}zzB7枾)Y,ٞ,MqďI*GU$Iahd.փ󔱖dZl)\F8 TEk%}4M2mE(mĦ[Lj822}-F6s*Q4;r>ΝPN9+܌D[y_ s~5]|F^N k.jI3fFjoUNo1z$VyTNicR˱؛PQ8ˈFem?kH{f!19yQ;Y$\*~=йX9~2gd$+?B+C5f$\4(woHAdfM:m׮sOkpRbl^+ j2nWWiʄ~(~=yG=h  tDLBt .UmnfϹz4Z0aX(^ ^HhTW1Mljr3Pv\Ujm!*./DvH(j}+?EZ-=EYJ1\ETccJjqzzU.G m^!%۰-o ל:"=0*<*hjQIqZ: )At:FCJGTEdpJOb-]h@JBiKt2tw NAYa=FXtZ[B5X`R S ]s-AVI  / o&ؐ<V¼Pwe5BeIx(7]WA%Km-;:`DT]c{aGT){ ɺMz Qun*: /NUv}"W9nA[LPl;$c>%)nQk0$0dT!BJ3)q2!W[I'l,yݖvJ2WI~ mq%tf!N(E#Tr.`3&JIu#'˖{eFfҠv6}Bey+%q,MJrwKqBsZ ۬.  lCjo<'s3Blvqgi/>.[m<XXģuvol`Qaw_^R+ n==ֽ2e8oJH=֜)wAH<  qZ4 /#LOQ#mB)%mfS $o߃!C DRMm2!>NFBо&"Fl-'!*D! jBeL<^I FXYa6z2mu@LI!Œ2 4Ɵ mxe6bR&":܌% ݵYMӄ&OQ'*^'"m~lw/4^Yz@.\GΉZ)%R%8D :.¹jj  _wntJ!l 3` +0.JpGDz|g*pd#xK#Y$fL7WƚpE|ˉDZbDLLt#S/~Rèθ2a2ۓlGh:!l_A+~'fʋL&(9 z5ւٌ|ÏXعc('2 E2>HIꁬ,#DTl8x/LCu;*|/X'Џb 8`U}!-4rEyM-;sk̗BBƢcFB*4\.(/1];H<WBEU%?@BMHSQݒw; Oӏ+Aq3>&+5e"}kPYR1"E |H, K>5kߨtɅ[1ڼ $: h7#F^AТd&' !ڞr3S 7sESdj:3ͭIl#T蔧{EV)X:aу+W\%(gc?UC)Qթ W[T'*LS8ܫ% YQTD׷:MMXw@ R\mziaA-8ܝ"uk $dVt/i kx,"y TYjzvB=5V7 x5w:ݭ/NBZ=?Q=bt[+EK꒚#K:Җ^"k)q7a` Tx+o ┻=" }jD%}4{HLs%Z l.h_gify%JG[(KOrKm.H.8Ur k-9ҫNL&ߐxeܥ )QRNy9Oxđޅ3AyAbMT)JW;}8y6!OFٰ7c5b>c#,]Z*35yFl(eKhЖ/tZlSbF-XKYWN (Kh#ިk¨g-|kGi'=ͧK''_b2Cbo&IPLQd DU7T\>a"ClXXRdF8<aʹ @ Ɗ;}E8AE j*L zѥ9!C<..Q`ik9G{2C' L%$npmI'}2a熹#E̱I2LĄQmo\ilVySJfvǵ5s('/Y!/ׅ-fC'&*L DM!\ikL"H | llj~ ^qCW X\ &*Tl" ^S; )r">U$EhpHy4$BS$-$4&^C#xXOpQ h;"&E`%\)h?zvWlu-0{Jڰ0H΢Q&A, e(>Fo{ʤS~7IJf{ÅB-^ETw52J)#і){L=XM9 .f+}-&k1=dH$7"DT dGć{JF1O/h:"pQ]A3(Mi ֍O!g -1Ѵb b$6Ŋc [wdg:R1"mS w%pҳPСAC7+H (C! 5Y&5e M.47reIןG tοB7#^Di"|ZXRZI.i,rd #c]w"k1q4.G5oz̥a3U4!/dtMؘ--4<$d#2Jp`bc2Yt"BŠE%^(#4,"-|E`/oXN+;+L(3, i Y&,FiOk}ETD]@ecʝkKb]$`"=F !>U˘*bfK؟2dM?5үM w-I-C\ NZWYSuIwF暊[q |H,J&qBs<9ϳIo^lBjcpOl h;1fZo F4TܒQ&X_PFќHh%'5o_j,VP]\j~#"mL-P_̚jn_%~FBRAw.S^)-蕅ol5YZsFܝ䰂YIE*9(PLu*At2 %xeWndE*cF} ګ33 ώJ jzk8R\0[y"9O28MdrDJ%ׇժ0^4? Y (."ҰB""۵xr8Y`=7Sebh(2q{ 6)fMf<1zEQt&ܺpm*'Ԣ$.[,<*FbDvaJI@CCʼ::9(,Wȼ?9f! GkVqwVOF9K}4 <"ҹ  6xMeDuY8D*.CHf$DR|)`sTwDTuH+BID֝E8QɡT\&F '孎s ґ5i6ɧƋD$٤Z8nK0cĊ޳&wO:J0&Gˊc*GkVɬnjϩXR$Tx}&iH1^VuGMhJiHĊBɪ_VzVzH,8fuǕf~S3LQlK0( 9_Yb5yXrO"fF(]]%1 +ã-Qw-ZbDhjGj601J7u&JģJ6Č/5i]Ӗ0aӢnHVR?4|d蛒NӮ;U#/4fYJI9ؕ[qEfaU~[1XHVdJ;DیVw{E\QيnJbY#1HO̖q",; lK0ÒyPEAFJc uVeGuMd*n)JP4J0b_K϶0ꄟt>ArQ)JRlHA`Mr$XӒD[,ڬ_j.n8h+2Coc+&"[0c*EHn&$](+&䊵e%ؖ`آӨEHn++?Y^|%Q`)*GkVW+3 ϒ)JQ%R/+yK?ho204~BIîI+6LR)JRmfc/*(~c%6úy5 z31c9(Ҕ)JR)JQ%R1yXrQ)JR)JR)JR,‘^V JR)FؒʶJ#1yXrQl~IJ4)J6ĖViJR)JR`I%QaO>iJR)JR)JRlK0caF,FiJR'Z4lK0c1c9(Ҕ)JR)JR()/+J4(9hydrogen-0.9.6-beta3/data/drumkits/GMkit/tom_Rock_hi.flac000066400000000000000000001110041211146647700232210ustar00rootroot00000000000000fLaC"h @bwCY* r( reference libFLAC 1.1.0 20030126Y3U \gii B2)6;`xh>W N\G:T+[OQT9³Ą>̐K}X-|O"7Υ^a`9YcoSp/(TaHZ&vc6V -D6KxT-)J1p!YpP[u|k]#a/?hBr@B=69 1F(1ǁL*)u[MJ$V&i$V!oh$>WGqC,3]lI亵s.')`͖WU9˾ug}> "+[K2y'bpZq`}qp}t%Ї7L2Sܘ\q "]Dƀ/­f@/ͪ`BAR~qTo Y{Fǥ9azTQ`[|:5|w%K A 敀D{\?NRK=rVyTJ#H$^rFc]>M9l6xK)M’h7)h"``4.D"RcSG} Q#Q[xv_&yno1c BUPC6V.=lQbg^fdlfTA)t]?Rh|W圽6(*kkGB6 hf ʖor-Helq 9qh"c5b77/:lm@݄%CXԘ sbyE4r/0&:.V7am9mP_(gGsȇV޹6a™:+=#%v)?l}r ‚ZYoPVU'w EjiP!9BGBE?ʟ6ψj`!ͨ߶\_l9zvNI\A4vk\[gIe=ȏFabS]Zc1Wj"Ub2O/[E.I{}YӑQ,.kqrT)%K#]7Fټxh Qow Z(\f#%tnhE 9zF,\fP/N4)?p:H^FBP^3~.)9 u&SpNTub`r4Pźk+\=J% jmPo>`ЫO8]"Ÿ1>+GH12N #"P PٔL,L]-Ph4NWR-Rת_z)+~ .YÂ%0~fLmƠR><ٮ(Uĵ`jQ1p2qN9J@9ղa>&8͖$%*= 9<}Ca}DqH^z]9TTgό6BE!C1K1WX,JT;$;9OTpPk"o #ȕ5N siCsMǧޞM6d45̨=$&+ݖ1ףnmfH3":9z,tXګ ?agH 4K3^I; ylk-U>ABуO$x"_ʃfYK fJ'u{*0N伞UOͬ1dV 4;Ti1(Di9R)UPWp—mrI4RjTmS>K4#Lyʹ `0lfZ1Jj'-ըG)`Q$$f6۽ &mLmo1Sf6>:aFIBVO VMu%#u - Y>k$͢?*ș,ELkzʫ5g(jiq[o E,Fy]y+ÛYe*jփ6;HYPT7km^_>՘;$O*B6H2W3*"0@ǶY2d]9ɍ^t)mD䮶ra?b6IVH<ؤ&RhN;<7Ć+6lu,FD*㒹M%H/Mg?DxȉEDuFQo'qcD8-'!mXe.Ј-Nvbũc MM=PG-G}nbIY߻H?"ɱpLJwwBtsX^zx-1J.YKjZ]ȳiҹi GؔGi4O"G9s7#=7"dB˛c`mvӜk%0ռϓ +c&H |j~EatJUZmOtMR攲-C+񪼶ڑ72-~Z%HO2h4xM,lHK#a"|d14WF}lՂUK֕$89֠5Aҁ [C9KI_zH`b[a6@3u C fxREmOiWLmݪ? yfT;YYhJ7=(T9#vB%ۤ14*P&{9VFí?(E?-&if*c6CB=ESjToҢi#NbFj =/ݐQQߴ&d OrY|dB,*P^qVJK>&~s !G+ z83e4CrnE0o)٫ȔznIhĈq"+pJY˓8Ezu4QORC}.Z+%'GRGR\#|T4c8UH50^R |&Cڂy#2Bsm{DGmx[bJ1[/~C4O[4fWhUW"$ja H}4@T CÔD#vrK@ 8DF"+¤uT)7f QhfMJQ yfUPv!R'TG֍BP#blK'WvY{I{$wE*" uL/0l‡.bq `F ,ę6fH"8f8;܃]lh|vZQ^0UCl -YTicI;P{GLhYfYsv= xޣ@J+$X"%T^W~w#6S7ex޿hLSBD9W<۰^<wC6m>vBmTyhoҸI~Ẅ́ف>0^ dDlkhtTk+TV ~EM̜T4':yq ,Posm*r:&0r3Q隣G<{_& vuMڞy՟x/dh ͑hN$+bަ"9> fHhfgѝ Y^~D.d4S#;JaLCVi'2p`{s6Xn|LC@7ݮp,sqdw=JfEj)NuD*˔f(z'IQ6bzQ.m;##92ug86喷8ϠJdeVM۴T݁]Iz *= [-t&/qiI1fHUYK^ 0欻AV𐢂c$N$)*.b4mtxab8<4L }Ƒ^H Tp4l~N+爌+zUI6=A UczSi=*4ŴeP{OSqK#ذ9ʔij2F2z_~@PIldAp$ʞP{YxA 3HJ`9x5w_\"82MK^ Dn>H[SlY\^e ORw@mj3+jY$8cUR,ٱZYg,km7;VRO)\}%sTZkO6J>,tզ(q(PҠ\+N:!]zu9?)!1~uUW j "H3K]|} s# 1!?Tr]Y%\hIYU 2U{$Yml),Vj `6/RwX;t% uGOٿYti[DpZD<7rK; 戂9je3.V4k*<Ʒԙ) µfhfÕL\E͓DI5DE֧K@p^¬28"NutU[1*˒ ek vդAb(ag]eA'P;1=ߞHQ n|HhxiVxޤ8YBxfBMŏ nMDkPd$i/^J"VTo]dh(L!ђwrY %з!gog\>- kG@2  u]'|SϹ+G~0*D M@q#i""5FousBC6_^xL O3l"gՕe]~Aazz$݉An$תu/## /aEHRuL^~|!*ݬC(ߦ5L%*r5*C::؋,qԖ8,0_ W5`/lMrOH́HkUͱL*,K'ME5iՓ p{Z^@Z'>(a]A ZwG8VЋ<d"T2ON/ɱcЕ7:=c&U# g,Z<#$%6=3`e lx0Gzs/qn{A-fX'C.̥)W`2΍Qw]*R㋢F؍ctp-ֽgHC,&SMCh]A5/?:&Ac'3K%E+O #6#KQ:=>4XiF_G9'/&(g͵%Du76]anه\b"ŧ%̞gc.GH@uDYID"0beVLZY8EHiРc$,uXHp]xPa2Ewz4ua:URΛZ,XV' *xbps9ͯkܮ ; R3I840P4+ .DXT𱬋d>5<^R%5t$ܙۆ`FR`3!]ʇ6F%`&ະ(Yqb2ȐH`(tr0T p<iI?Z9jO/c[ 2јG[8řI,ޖ].HJ K>0$m̵\uq]~=i_VnЗN{NK> %%-Ce h}"0 |.Y.YOxn'Yu+;[^[aGiUZ ɘJ#t$Z}^ūGV ,nҮW|~B@5»&Yw'Lzqd.h`MמB- 'fT{Z-#T$FQ%vwVAKgV P98v':xӧ%_vX̅n-gJCkjv[h,{fs:sXD$L:YHR՛V*GY_{MjV9)%=ls%쇎)Jq-R1s(X(Hp&%{e erX -qRITaZ'L'KAbRf5I˜ϝ~ g2.Jg܇[|&8ʬζFoyZSto>5SSU`r+=uPy'rN$R#Y 6Q:.NӪuqRuhONU7%۲o 7R! >5(P`6[1 On+: OKLۈҊ?a NF6M50"OS7:ۣJ~WN&qlF*gÄ?A<]hl ,DW+jE\geh0jp;Qfg/D.5 \j/CЉG%BE>ݛ\LH`#G/J2լG }'@^Vzև'V?nQHXEX:!ѧdWN?[llR=-#)Ȭlվ" oʔ&^JASDS|?rcHc0^ k c-%IQţjQgx<֥'kV\ U㐫0w,ð EOMQ(bBkG>-<GXI aPיMj64 _;چI*!ZlvᓍM !31KxȞ^ΉGDA1(ܪ|Ok"L+7ӰktQ~ZN0_ ၡ `J #d5U9ܒ<_%XX/y8Ņaͻ%S%e,/ 76>Q WyW3L&*Ǎ)˲ 3,3-&fqѕ%1)rQTr+lpKN"}i{i;gg T+-Q4Πd;hREUkHU#T5T"Xmז)vU7FMS_hk0 BJrVJx qh#~Wb/\WO+w5:9 *ZE+Dq1<󬽶![JJBdgJN5DkK Jmq{[!/ h޺i:~R&r/P {tY$RV1dr JpuM@c EP ;A򘡲LF 'h; {#!$q};lS63Jq!=QL-:Rej$`Wu=߮(g3:X%JAOs(맚$t> 8):9f\loIO,-YD6!r%0v۠))li%F(h 1HV١V? ꎋn$a1E8Uҋ[ ?^|5=`[I߶" g*x DzoF"QDu%hjs."qEU|T]6xe [4:aZ ͜?mVV*9knSٹQm?QC)`,z9aY=[&220{'P=&}H?.i)lF]#sH5NͶOiSLOH4Nkzx \z2((OGR4Q z1[CKs|:KUAŪ[IVBm՝`Iw0B)t{ RV!o*8 3FRQy/VS/% kI_5P|M ;\\ _ -Vd6]Mz-q-cee 84Q$I[raMx([QPYxVY?X3شf0tE0ew6XC$_E>s@f-Vz,/"ǥr6;H:7oR_:Җ[_ݴ&vJq͝AÇ||wEOjͮQ;%cA&\wj/k**\[~|X̲Ly2Lu<:ud- X-v"le^h 0Q:iYB%%ը5BKl ABTA, Q/ԛycH2hna3WJ4U`TJW *\_+N0̗*ش!3vۄfS'T+W懜)oiS`A b p^2ī6uӹJlٍ;eC+0,c nkȑT"S`iy?9 OCi|OYoHiYž)<2ÅoEG/ JƾNҢxoeH|_nӔU]a4QFdgjw$Kֽ'M%ie(Mfddn5[[hփ!(H1#$Ydӗ靖l]}M't-3Ί7Q9Bajk*Ƿd$~ih~ʝ̬moT[WMמROjS'RP&+ D$Kf|2r-wG;नLPF~ [f$*Kkǝj28dJ,cEvq/ξYނڐqΙQHI-VY2V0 + + 5 3@zz-0?߆2+Y4QVOM<(x dvԄY VYP g+ Õ Sc_.'BZxt@AA"7RPa8Y([Kx+r\"ȳA+GruJfkhg9<#Y1e!8{ȔPU) DQ~:Z* \AQ)SPa&(q(7̢Oz"ws]#W%PE``5CVI %$'p^ȁi[8X^vuMaO1JR`@('϶K$La<;BJ%(Sa V:.oAt[FUۄd q hⰎ"8mǏsHթFY-Hf6P_'dd(t67P@gDV'ʼn J~c@W;R( >ӥ> S:cVx '7H@BV @wv$+~ծ?HTsDZx `O"YQ뛺eG,t=rbْ#hv $r>[hb ]ЪBu BIW־wdjӮgsJݐ{c1;# 7K(~kڥKD~DqVN(řt72*ˬ vUf5ǡ]&j#3Hlj y/I8bյ YB‰1fGXi]?&SD(P){<&HB 2o@/E Dzu5t*_¹}D^69bfI"J7ZYM٠J9RY4 \(M?=8dI3]2` XV *qj+Ȣ?$÷k㜅Pq4- ش:&>)X Ac˵ǐ_ CsW۬1`?2]Cen^m'r5oK0$:U\"JCqftr$4m*C :sJܽГL >vIJ?T'Ct?:4@ $_ EЀ4@5õYvğ=v M58J(r-~oa@d9e&B(]|pH֏ګ 7pJp4qB8,!!Dma'&$jaCC^_XiZHOMS& AV?Q y" yGȊSu4PF=np<V V~S.Bŭ܁#R&ؤ7e P _pf)^Y%Um/ 1X#(]UKZ !_ oRXiO"T2KihxSf`\eWB[fP%;F] cL)STb4dy @cacASSH0Vţ84b=xT2lTk=wWRqlF]zowjEbjEȈl(V)s$ E]tocտkJ[7U!#R`Cd ^řh&%6]jV#RMȄv3 & :“!g9X8 f_vX)\7Mu EYOcXIsitjIbp&.?˩E6Bat0R( Xc2'Xa9cekHa8!c_eY[l%x{=(e\dY\Rx{qX}*Jxؾz_/+KSld LJnXO[lU0C Wfm\ظsU/0R POYwJ3XbdҊ%M abĚ#ЬW0.7<0t̨ h̄OKb,5]o fM q!PG0$$߂B~oX&nҼp(K2j\˲G=1H{q4\?`W eB}Juj}_\vY}#[þW6\7p~ykK1SKy9R沟H#OhE$bo0WGӍ7%"RR? rm ̽YL^~ǢތEBgʻIBc&rU!03iW7~!.[ \b- xkDl!>-I`EαШ̓# ?-U_TQxc,jglu ujI-И&Dkc%2ӹV/&ѝ\7.P9>bgnLA 8(AsVf@KADijgS0SM- -d)NE2aſ1 ^r 0T&JxJ[_!DQԈ/uQiw6VDkx8&Ta1 Cbr"!ofB]\˦8PL?Ԥ̶LD, GAXIj9k\(x]wG}L㳹Rj:JݚgZY'[$m:!Otn. ߦuGvU(SoCL+X`9;& + O?í A%n{Ho1鎅)^InkKBU.ܬF%5 ώ6V-+#OX{KI {qbcFE'RRi]AYfF.+*h[3+ WzXp>‚K]S@@l,"g@XYF|7rbBu!<Ӓiޟ\MƹOo7M<-?,&=m>Ιe­HMAr$NDz^x1hv-p?Y*r.XwS6#HQ~5XȠfHRl U5aPд,UHP 9xF+pFL@zR@.B"."I7 u3XNr)|x[ʐ5!~C=G!X 96+MȼUCZ 8HXos#s*ÃS Cn@W(lR>_rbf<] &L %C4c+lsL%&A.PUtuW@lt ʳ+^M馄lV/ o6-Nn/ foJ0;5ܰKU)/--)z'&ex9Ca_Ȇm1!"G#&FBTHa# ŠZx* a쵳(TЭ i!p)YH鈴CG=[L"פk>HvqHj555"BčD=jNvnm$ɬ.M*&hCK !A1L(Fd/z3@VCXw}  O5&|9P#|B|^C('Ђ bPnJ>~ńWY5P?ٵ.~f { xMi^zA`-2&vG^"WjݩҲCW7d SM_`E4L "3(+1[@ az%)9ߏUh(RS ~ bG_f:d4J@Oōd?wzFg{4z:P!&i*0"F"&"QhL31+ +T!ɷ9ItP\av?y Ӑ;RO"L;'vip@-ʼn1mqyr.xLMԭTIɉ,H E" RRJWVxp; U OA϶og:x>A }0Jh19i<-wp (2ID90@~u_H&u v3gDhˆ1;rꆑD_w!Qc %O9*?9zg ?kEѭ ꥙DpmViW0+8 ISʔ/Onj d&́zjA_YfkSLxn=S#)X갰mtTt"79 Մܬ~{Nؔ'gbm#y; [Z{D1C5T'c9(נ,IGV]gk!'K$MP~ގLLOuEsGx1uXj"SIKLu0I\+Pj(i{hl%A OJ]xIG ^ؽIb:%Qa:,J`\qF28+.GJJFiL*=L]^F>܌FJsUt菷 b֟^X3,;Ejz '!}>Q.(d.lnN8mB@yA ;+ Lt"xkb5fOnieD"IRA7[9;@i¢ĦH5F耴#b|UF<4l"82%9<3]-!;;5R#"  ս1H52KD-z1lcȪ~d5fBXRһoя .[%7#7Eבʣ",O9QН]-'5G(A@HYɖVXT%8@/1vI#WB ZQaÕ_D D(8%[># cg=wP{dvsfPf,^}! Y!TZ%3tieJ}ÔS`1{Dd!D[R{>m^ؙ H>=&|N)`3#_ۑb:)%e@zx‰sԩX+B!q<]RF?Z#-6"9J ZnEvDvT.Zrw:υ*Ok'/j ZʧJC ºi 9@m "NH;VE7*M58Dqdڊ:@I>>ukLG)1+|Լp43ğXo/Jh?=]ACkajD2ldO)P[$>4ٙ>l쓠&³R Sy$ףrԕ*Ie_XKSa`0Hr:&OSօ{q,bҖjS:" |s!!]m-pޡ)W }˲wrtfع\AcU&}Ss;*~Hq`qO.97Jrf [nO aVqz,s0;R u'@j|hE+Z_Qc%hm'"+fѥb\)<{^M1;Tec#%9t:64K[N\1k41h %;6'2/u\"Kellbܱ2V%@ɅT]2YGJ!reHzsCܥL] A~{~I)㰍6>}$҂A>,< z(]GKͤVA^g=Ue%oXT}_n2Rܔ˸L|6s'Jz4$a-&CFYzi("YƍLM8v/ThZj@GwO\K !|f7&mCCZLͧd2sWDh%-P(C6a(1QF&.گen"]"-,u)'Z˵Ri0+"xTa7,M䇧+sijZS+T#v;ELYaiLgvDl DS 6~dzǭ2%c*PZrH.' cPH+4K{x'?ifGNz:fz{"To}TnKEM7OxW<[(IB+ޚbMX2`FHmʸXQc-th\t9)ڑ<]r7\J2sUx/|M@biVciKBOm"L5;á=ńDl8ɍldA)& 0'P9>!o]\[J3K(KޑϑtvZ(50X,YUN7ƨG>=aD :')hu7J?󫠥^35ꌓE<[eA .*]4 gU)KdgkqՔ1KL>z'q;}H-0 )"y$TеZ{Mcmb`/P3)[ yc:zC!y1^ )M;Wf&7.3܀tNKSF^C2+%PNP̏P\fd߈ЖS )A#J!ic7HuȮV{VUIr~e3UFcGK %uUl;H l/*loS']T[?ag@tY%7ey 0y gD-ZoY9x݃L.B@Kz["yV#3+,%"K"L\[<=(;r FPp,tj=RM#-m*'0Vt''A%: NK%Ob'қ1v#}]#!ҭNŨD>" "B[mTm:kKhNY V?~''{0D` }hلl oJk-{oIB FKDd%BHS]ѵgXF$WAHH7S /XПG@B9ual_ UA3}ue^ @zt/+ft|yC:!rJ ǿ]C>R?4B3_*ٸ=!$f؀$lJ&G)nVhHDt 6J[ q&T#eT7u[D "IBrDW~-NbZ3X'e >{SH$$"!0HWvK ʷ?% npbı6%2T6 n~F5 Mv<-;a&%^Z‡l/aqD3KȰ yX$u i*:<_k)U6@k\(OCePh&_sAec$Q%9^mwȋBexE"ίc3B.X(-']NxjLSUJ$l`̵ZP{ȡ zM3_T: q"G#6d hObo0T51z3\P"Q ~z*.=bGH*_\^kҫgw3hG-Zt%״_"H|QG/YU٫BdKIġ"BC8x·z(JD!]^\a w!E@ڍe5TCݢZQ_0F?E!'JZ+AtR!Td0nHz %ґpK;'؋ԾՍ\9j ")e*a%rZfo: Oa,J*"M䵖8%9ض^\roN͈Oy{UJۥMY",H`tNa/19ƟU"RAIa:Sр|T JtM5 1 9 ۵flijHSxԈ *rI:xb35pH|G#uE0+te_OT hEI^}Hr 5 O*7 _HFa?5zT-glo;3J>T<lvjM.dHd̈.|C&j +T -UVۂˑ5]y@j16Y &?8]Ȑ ͕18Y.K\v\:ABV WW"ܶKc#";U|_\N&pouݰ!JDSo%oDЪWZH F^U] 9!6=,dѦxB?* ^MB!75tkw$"U6 zjm$ґ^x3dėV딝@u·mTY#UY'Hxd$yƘB<4/kӦ6ش2JDDz܈;{ \ lR"\&&x3h#w[˅eVNBA}MvkTFHx|גRZsVi\ 8&\UwjҦj=~{K<*kYeiWhBX;H8I( j Y; (+JW/N)ڢvMs6 U$S]t_bus\։Mf(TUh:]!K7Hxwp12:;A+;-/DйX&VXeXWaQXK($Td芴(|x Ps7JQ˸\e|XXaC]&  > {!aAVBdg ^#|&;5E`Ǔ*]M)۵ʜk"t!,,bRr6$BT}\q"C^ ښCoK !3&$F^Ɔ] L j"Ɯ!=Ψ};)r2"TXV0AŃZ '=  $JP&@p+k_ .Q~5/Eoo3Foq1s S7-cpwLi-aaE $+($ vLb%vA-УG>0D& D6Y ڌIfH@&c% >ş~0pAyvu]ݮ8f' /( \ŋAP/3 -olEL($FI_U./mIW;I|Cr2=d)‰xpt Ma78Nq_2NÓ&fسPK$lbqH /Ow/(5&N@$ɅKkv- [Xn22'JPc2J UgS0uiٛ YΚOk\/yC,ؽuvWEa*yUK= mH|4HH~iA"8Y' ,X X!T 0Xhh@b @ b 1@  B,X @R1@hBJhBЄ @hBK(B#P.`jB hf`^0^Rʕ/*\7+@6\7R0\tR ..T ^J!@R ra@X@X!*VB`V/,Z*V 1XŠT !*\ Z Z @B!Šb! b.`!ЁŃЄ B,V*X @B,Xb+!Ō B!B`B c!@ !J/`\7@l:Txt:Tv*\6+Ѐt h/0 ++@RCa !@6Ѐrn  A0^ap!,bsXp<0Z,bŋ@xb B-00XB`h@ X ,`jzBB B r @=C 8v` Rʕt:/* J CaҰ/áҰ+/RCJ+Rʕh@q@7` !B v !! B0XЄ -  0X!x Bb @ Xp!(X*Xp= !P/P!B0!B@=!r@;@;BB!-ҥa*VʕPRRRʕ.2J.TPXB.T!th *^1J.3Bp !B!BЁh-B,`h,X @9b` `p bЁX0X`X!@bЄ ,Z*Z  ,`cr@c/ B,`hfPBn! B3 VK!`TxBJJ+K+RJ:T;.T:!CJ+ pxB!*\zh/ Xh0\ X ^1š ZTЄ ,X X `h @ B,`RЄ ,VB ZcZ Zb ,bЄ @chBcBK@!aXBK CaЄ +@J+J VC'TR+*TR+`Z+!BJ ZK!Є!B aЁh@ RЄ B X1b1 Bb B+Ō Xh@ @b XX@"興   DDDDl@"CC""b"b`: 4>Cb"`6"C`>""`6"bb6 :b`<  ؈D@"""D@t@"" :"DDDD" 88DD@tDD" :""   ؈ ؀ ؀@|hh|@lDD@plD@tDDDDD"b :b:""DDD@p""D@t@ 8:`: DD@t@t""""ᡡ  ؈؈ 興DDDD@tDD@"""@t@p" :@tDD" : :""" :   ؀؀   ؈DDDD@tDDDD:" D@ptDt@" : :"" @t"""   ؈؈興 興 DD@lDt@plDDD@tDDDDD :"" :DDD@tDD@" :" 6uY.$4I$ $ $I$II$Y$H@R,`` $I$4I$ I$II$ $c DDD@p" DDD@""""" :"""" I$`I$I$X $I $Y$Y ,y@|D|DD@""b""b""""" 6""" 6" @I$,I$I$HI$  $i$i$CD@t""8舀D@t@tD :""""a興D@t :""D@t :" 興DDDD6"""" 6"" 6b""""6"b 6 6"6"b6""b > 6 6""J@II,I$@I@@I$I$4I$ $HI @H@@I$I I B44I$I$HI$ $I$@dB  I $,I  $d@I$,B $I$I  ,HI$I$ I$I!4HI$ $`i$`I$i$I$I I$hI $@X4I$HI$I$Hd B``I$ $I,I$y$,I $HBd,<@H@H,@,I$YI$y$I$III$$4HI$iI H$I$$ $@I$i$@I$I$@ qDDD@tD@""" :  DDDDD :"@I$ I$I$I$I$ruW+ff:6=@D9Kw.6t=DU~tuc/E"2ɍ{!.26X/0DpG0"w򐨀 dמ,aNV&d0Q 0٩z![ImQD@7ô?=% (] OK`ǰAp"܆F0Oߖy@TQȕYRtAN v3=X̔/g^k֑[T4IN+RAwh`y-o=CTo?xhx8|QZv#y}ʍtP,F0 ˪mkdK"o/ ;4YkodxiJ4 De6a LaR/((.G"w!BW&~Uce, rR#LO զL"ɼ{H"A,9FH3 U20XI¡ެB `D$RnGmnW"AUD87@y(?qy4ѸNG:įd C;Y*וkkbG"y:W] &b7/R;8@)D6# zIY`R8j<{\hۿzs0X8 W\R }6-r`D*\Өr!&ٱGWY#+9Y9eï)R:,r(jGad&LVߺ5De:EQVw ,h~OmziԸ!p Q&鹽QQ^+-Y{\D`u,Ŗ$N3еf. rz$T4*G1U2 ߕT󥶊/s|*Igiׯl+yEI'Q0454c| #~k4mx-h*Q妺©fA ӵ#͂uly:M$M#A,+ͶIs2HQ?]\hPNJiE]4b~̓z#F9m Įu`4zّJQײ 5gfb/1FF:%#ի$}Kbor}b4'kmպ̢z?\tz%NaOSG{TUVo?;ԷzqDJAƜL䗎xV {)#3z=h |ANxMf(ܪhҫЫUh3DIr/\k6T!48h`0IJWDE@1aU\<4<LSu1-h'`խ5#ٹc֨0g^EyS S4x6K]wYǰbAxh"|>No8I2UIvlJ)K֔%Geq#n\We_Y_DԢ*>bU"p fƽw!/" nf ӘE<:5^kMKYЄGH*ogdDmIQD8л_83 #R+e 0>ҬŲ,qQ\>B%pG)\B.ypImLNG)O I&3HMgLeNCtUo0Y{6{'mqb X _NDzAV׏k5# CGF!1d\h)jeb87\ۄX7Q,6f]u4&a͞otu2G)C+$(^"GTҐaesT^L4|P ciŸ]-J@ΌY{i,:QxRKPfl[|d]Km@$ /iQCK2 ,h7,ԡ$ko[;ĩBCȐDqP1ablӖXyNܙ6zPS="1O"o F#}xJtr.]HNa')*vU0ti$夞gZ3Gn`Xa=XZk8hvm)=i_R}9#g0&1 *] #>%OM))4QƤdl~ ( ?հ&ތ!.?tFe(>Z>NܲꢄԋݍIH$A$ETB{QRV`s()$i}׽V帆*cJ/tDޯ$ITеm }*r*]{NvRt(ڲG(CѓFŪ (r\MDLХ d㴽FJ 3m4d!՘C$<"H?آ%;bx?i9]m"s&yk񞺳M>O?;Ywٌ*Y:/ʳClwXZ!fJrb/aGdq#TxPQsqE iDwjFeX`q 3?J&}s{֚TK3#:ރ^l.⟻B[f'PP}<-bդ,@QA!-`K*J5.>`5rH/9H2+ EA3GͪLJat].o[2IGu nEȶn#sg% O3UV2aaۜ;1t}4cW.?=~:$K^;58OB؝e%WϢAp["{G;|t+Q4s5Rd،b6TM5xVhLABk:.Qnץiܱm^] !2%yFKiמ;S 8E)w]9&i-r75J'in_?n"CV+ &)ǃ)ۭK1Ts@ڐ]juUon!萈l08HG^oL̮ np* /0}+Wys|?D< ]V k(K8@T ܆\^d5q1`K/ (Lb }*S!_}I!e:e]gz3BpYd? o?;yqCZ,N)n $la9lF8~Yűa+}dj~?JՂXV7$!gJ:q3)!Q¬|hH{dcXSGW S0{#ìu;|noPٟDD{N0(D"RO+>)˸o07 >/˫}H] tW3X]D+pkN ^6S-+AUJJzB/kh n.a?C\Ѳ ?шvBgm"ϳ4 U+7f1Ӎ|=uMx#2T78Tbr<=!$o ;%bZٰ.4!|)sPu&F?0<{oHMzO)%t},7῞*Jтܪ=bꇰJ?0%r(h14RD eԏl _#!O2roZm6}@SV֧BH$*MU/k7͑tzR:,ʼnRabhEFƠ^%]Ƕ?2CTiBٛpN"3цh%SK{I\$-ZTLOGè{)Vd0OVOʷ9вӤ!:jPG;r_^K{2o@ &^tvfon[崩ir~auݾE0 xuTȰnS>I~RhX_9ȡ9rďnkGTg E&O#xvL~/*rpN-iOđ^uD*H.5;&)˓>W<LO< ,QXZ!k$Q>GKX~R/M"!-٣N8  \d:XZ PҬ4 vcQPInMJ(29R=i&JT--ic7](,Y JTG'T(}!r m8⏧cUo1[7w rpF7ʭ`1 VY鮨3Y1l3I1-LYcxx1+1p a-|a MEz)iL2]Cr{GI#y 0 G4#.xee'1m͕ꑌJR/m_%%s0ܒWY˨Tos#%rhu#4 H]Y$0E5ELIzX㍈ᆶ&):KOXT{gF)M,@DѥU%T%aҸfY g,GF­MoU24^4F%xdր `^j@$z46X23eV~q`if]dI*zZ`Z|ځiԥrMaT!a&Oy$I:oh{K1-!!.oIFЉ1R LMBRN<X_DĊpȆٵX!5QZploBf7{ʼnk5yXi\=K$ҥ)"עb䋧BEVbd ZY `l_5"e\/ e(eI%\c4]A E74#T!c~4,X$|9a)#Yp0K #"{bͥ$d`K:"a`Ԑ TR|Y] 2Jm|BF޻x]wȍ|y VTsC} TD'!lj 3q&hʌ-Gb%lQc7# +2` ?r,@KB?cR+v- dQOFY+K9d`C(eq򵡊5xd? sEI%wXB%\!;q_ #5ΓzDb(*U*b@pTUJH3A'mF[w]_d=/É6-*cs1@zWvO.r\ ;"B<)rX:`}?kea crAXG>hJ#L1ni;>t, e1pPG(Y."}AigķI l3)F6@$~/ӝu1砙cY;NjfM=,8 z08>7y`]~gpaG`c2pC-ڨ 'M"+NVE HxJ~%m C|hZ`M ?%xWTYԼ"S"S@ M94wޭ6mƳj땻|792mIo7 .OrPB c ?P,0Dx.:D,vй%$"A(oJɧ5#`'1C9N:NPTK/$ע*!fI'ai :NS<']Dom2Fhz _\W2NڔT,?b6Q]HIӭ$GZ m:KdJ{80%3oS%!Ddarֽm͙_ /גGL*tOb) !h`ضHn#M'_ !=k=ziR 1 Yř3xsPKI>K?N,/waU.Ic,0R+9 FvGa> CDYEu']ުuAh3)گ]A219~:=3/kũ0g7LANvx!8Z[Rߺȫ k%/il{ma"kPi,kXύi|yS+X!ȄИO"` qEX4a%H,!a?eI!nkOlh'֤L%f>GIug/R1rn-%}h)Y y 0u|9jz[)bN$B(8ai`S9{Ob#ākI,lEǖ+.Rwx s'+d?!9oy^.AMx?n,ߠCJuk՗0V^G ;K[0n$v /Av^ iO9KF?;okdY+_:ځ/;Ə;f19 o ͑|hײ-:\_ʻE A1eA@,uQkw9,6 aV@qÙ&qxU񙕧C5d5%˯ݝ;J?kw/Bݰ~ꔉ%ï99 D 6|s,{6$2,SvsֺO1Rb]<B6}Ai9O 9S˪'SQ8mJ!ynȏ qfq}ksn݆fr\fn( {YVj*(o]A#\J,"ȔE,g1[QߔRfA̾y>gKhva/\[m'.MoSU u{38_1WѰ\j9~f906!.Y~!^GXSJ<zf`_DUl0SϾGpS넭u&Nhdd4ЖO_͵ZW:MDՌ:/W9%<K\m[YK] o)'_*4)*FG]qx9SC"?ϒx7mrK0 }QTC+k &*0*L 6$)Pf uCYt|E9ggI5:vi`oS]eY[X&9TBrz(Rb7u zw}.ʉ D0OAqmP-4F㞤8ŲjrHZxtH$xw.rIlP6/.^u)6r^~OGK8A'+*B=!1z*td`5¦E bS$mU,US;Ԙ.|h1]SI2?ԏ"?; xDڂ(nڡlQfD6Z8W9+N-;J&.4GGN6l ~mc9} rL$vgE}/.x L')U5-ܡa!&$C1;uNB25wh!E$SOI h1\G(D/(K0)ըC;}(O5]WIxh)a~1/Ge@"BVM˼b-l23oZ7@vp: \$qnv*|@ ik}>'p+Mc#i AfNDO96sD_N[Iz5*S$Qh־fCj4$#3fA rNu3ye ) g@>B),5wH6^Te2 aw8C)d Q*hΝlk\A@n5ۚ{#,Jmx6ΟTb ?њPaY^杣G!1u4].w R9~E{KNM1$ ^u@\/`Sw)"ȩصaВdkEŰ<39bI|A(ޠ;%V@;7qUGdNPsg2e 6 ZDVgcnT̃1^N8O uwsπXմom4YCC ݉b$FzSOٌz9:˫}@&7Ȕ- BDB|Cj>_qcbz =xnu,}%kmhTէguv[;=KhL 3kMޅ4QM.f=NP9-B !2/.VjSs/;h؃ A?ёcwЕB#C 1 [;AWP,PX;:k?09Dtdx* |+RW?bX 0Z٣/_B"u-;9W-n%ab66F#\SHϣQ7' =3 $M =<{|"Imx@u+˽s1߲W"v_N5.'Ō߸(BiHG(|컣J>RsG&?"14Dyuz&@E[ޮUKƇ֯Vk!\C["lR8\׀/#3:T e-=L"B7 PJTYv5Di*SPI-IT'Ak.X%zv8K ˄ RVɛ)$n2$׍j_?jSjAPv\$KWI.)V҈l kԏ%_oB抝T6݉ łk%G-R:FŤNDҵa*"ZX(ESYHz>g1FLԚ$U\To-ae zEAƲvBp4Ȣ~1{GYU/9iK.4t)8aTb.’-5RCck-]ZxytXS>mxHs},9SR.fO_+gȠ靠Bz-yIt/I> 63N92ۑK #FxvFlsmW贊XdxjɃa5?ě-l|C[f+U&JJ `HUFHՠH2K#=d ՟rdԡPVA0=ͫT%^2mYhP'Ӎ䬒IGxѪL`x>ƞzRp\~ ]%qgi&Mi_¨*5j}R!.'>̯ԝ}gY4JXǬ(ghTa`C}fv'd&:$-ԓ}͡d96!+S!.{1|, Ǣ8+lBL5ȖܠP/e(iw2n4s2c]Y !5&Df<첢fYx/'{6d7;|XPWs$}O|h89$+"3}JbY[K!Ɋ=TPI6 @)*߫S$+N\C3${5PH0;ȺpCk "|e: `J Q"' 4cE;&ʔC(XSеWdt,pTņ bGN1V&",({"*'}MqUHX6DHmRB{uX3V:$)@2OS9xot|Adjl#yg"P ]vƮ":j2햁=pʌ/zc& n/RZ fx,)I6i4qEcVLf#݌.\?j]H2 znTI!:D3kspqȥur#dN]_sw`_7cgk&! fdi:ch*s2jwt\,.Kuc cmdgQ) VAgbu͊q*̓Tgq~ם*AX;ɷn*I&t?FzͧԲ}Zσ0n<Je FMM(^s6Kޙ韶|f*WBR!c]d-%{~?la/Uig'LxEskAJ;5yy]1_5,K? 9:,i%)' 3ʁVXtL6RY#T(ۆCKUPG4~͚avU1h Mz ``S^#f*R)ՇfDHE&K9ƋU[+FK7˗lc!X^п\ޤ./$FscXyҙ~OE;SiSk%#2u2sy BP e$2(=qf#!|&> k$<%L Mj 9y<^ڗJ6(]劥yo͡A/IB};YQVkֲtl[ڞ3"BC<$|W@;ia`HҡĘHYKXfIEU֧]CсCI@q_LiNգʖQQld?wC)nGٴ~7;&Z:9Ң_P'/&uK+KrhoXJ˓L$W&DĿAW㡝t eyOT bȖG\.!0BgZA 1 cF%./#Io%1T00d(Md5TFT#94/////Ma-kjm,KQc `lvS-5B睺[ZaYITZ"m3& aw)zSW?u?EH\yz]m[4ktZ?r"wdHs1/:cN֌^),eF&]ٟngBY%{gHRZbw^Vnt@y)_)g?%&Wt;9wfE;3>VsѶ7u+Bf$q95Dc{3(Ʃ#L~{;OEۺNE/Rò]v˖5mݼ Yb#H没JԪ^$_S>WohV,yGT(PrZ B'v #?`jTx㝕,`D0U:q#mx.m$m4UHw5Mi=l]$0X(EEpgN#uJQ!wwJ*, :QٺK"*PtQ(3Z?H*^D=[gi K;h\x%hJ9*ľ%b ZԵjWҞ  mT8Tn+qxBF0͕N?R%#]YO}'V<ǶerBe!sK[Bdqu7\AA(UNm2w[52RP8(;bG<0& o\ 늈V!ޟ09b R T1V-<\eheW3UXcGBq.Y${JIy_ʳuy9z*Kس^~"^9\kLWYBECZ1ܝIH4]\giR|HjK*"F]:76$\zڳ dЮ|l{eG ?!9_?Vo/c@Эg ["˿n4Uٞs繷# \E/2j2muNJ̼w7Ui]Li鿓<$!$F%5L|tQhNn)66 :k3a-mMxhdCuTVp#.e17(#57닄#'IF~KI\+Hjh4&KEvQ Krd`UJLCQQQQQ0+ 4𑤠-}1<:&h,b+"pf Crp0be5-N ,ed72꾘 /WNg=%qCA+,vv}Rk LF!;_뻹x=6w$#;Q]䌥W]uɡ;۹7..JͫMTDgzoUr\y=5RyDZ +Svf 轾4쥦Nv|i<aҢ@j JY5Rttttt"{(߆@Vat["<,@r+hcA'\'U'2hbeGtcaȺ' \rD?GeVpN8t y;đ\\&L& E!4ghZ 17x,GrRf!;`%6WH?6ם4`$SPTq@Sn`R`%4=XW\j =` >8,"' {bX2tKJJYJpl(&ѣ+҂[ Hݻb ?> '%/  nm86vb!FsSLcR43 ;hM⧣ډEMGuzN }S\T~ܖ=|޼=s.?VHJ'65pI[{b"Ȯ o{LzQIF>䏍a}j)IBrJ Rzy;ē\@JZ5ʅ^:ӊ`ئx>_w߿~*Ŋ<Đ'52M*Ƃ-' csuZ>n=p`+ sАIJzjlo_|E+#*D;¦{Үn<)lIWg#&f GBJ;356V扤ɤ|sq]ko%RR-+44I{q)(ޠBޙmfe1K3KGǤ7 B\^ D"D~xl~ ֕"h*@D((h ՠˠ;e=W!V# mU9~iP-UPԄl k#uSb%]M]ѵGTB϶ 8I8Jn&i)ś;1n .^f@9|q]yWyPlzS_(DYM?$Jnj̊ޏyp)ўF3^- "yߙܐ>$4&2OQAv^Tͦ;kI5r#0|Q/ V>Tl<&ɊJuf%B1׌s4kC2GN&ZtEHTIa0GQl'd<@*&")R<(l!BQ4Kc8h)!;_u耈b*U EUl,[ &f$ip($ ;\#FA8~>|w:` hN9˘|ڪ(z茞֩Ӯ%mӲiUS!e/dq_OD~-;["Nj7Z2n}s!򫨪KÚIz eHpIMx J#`sp%Y T%]aD~6z1e\hBg\}Ӟca_\Am$Ü AU|IƵ,j))r;lE,IH "3 䊰x%H7P瘅cyI:'!i3#ssPrntrVyD  %iţAZ9v傡uoYPr%*ZZuJ~<f<5MjP lR5)Ӱ` $n {Fkdj%fw#.Uz~>`sӘ@E跸Bl{1a (Q\R֧^.\& Fy6BJ6^\k]Rt:,=R&GWN[V56=Di(f?bH3SHjzVͦҪZ$^:Χs͎(CFk)EO6j>_Ngo6'HQeL Q~DmfM*z\hBg\{RBg\CO ̣>e]ӧN!) ޞhc򚭜$aA-d((9 f?3`R_aM ED?#5+Lկe.P B #qdC.Xv`fz%B)I-GJB.QZ,}P 5˘^Zu)J5+QC D;F/RrtW+N7 hf"/^zׯ^HтO"F:v 0`A]82dsfG.E{OHڶ6CAثeO==kS/m"u!'ګ҄Ni%C>̔}<9,",yC[9%R^z~U+#Kޢb1UdLJnm>$\ lRtu&Er $khDʭRhӾPzS qۋZ:پJt5ƌs.΄i' VbIs'e&hȱmrJb)f t[Y`[CǖG(!}C]ڴh~KڡI%_QU$(&jLM]1ǤsOn(vU଩:K)"} HR=4nӇ~F)BdxZ^Bjlbp5 Q`oV tW8E{r:ЏlnUKLzHw2 ԁ}pG:dPJ@D#P`-0T9SAƉb 8d[v}TP 1dv#)fP $-evlEֽLV`nt۰?ȱ /U8fW'Nc-ajK'GV t]@J?R:1 |TMxwf!AoIb/`+fi!Pv;{, 1 U8Vhm,;A\rsp05#7jD'! 7ƑPy]S "(x' 8N@FE. 6&$xdKEI0pSgVM0L``Y,UOR"֖E9`8!$,;,txADYTP& l@k4GeV,V +$HEUIJ`t$v^D5N.|`[EFVZRocIţڤ`'^1:H*L%@=I񹚲FK^rbkJ.wDوZ3B.in%s*4"uR(V*(ľ:*`bND 5!.DmlVI<_T4oZO~!<['"p˺&R0A}Opb YBHQ{@ cCz@9`?6 1~b63!^ް1q縆Dq JG2{U{p(xp NL,) C\ H$*@Id$8@pڊ(ELF57FGCBCS>8Ra9E]pO@eQ,u 猪P@AU APq8lm`va2>QRrCVW0]Wyi̢˭W%/uX9 ߷-ZG/Nwwm}q54A~u bI[U$"fH ^#T?pAwMa+J@h!C! | E(utP#OHRv u}wb*O}߶'%QmqSJ(m^5w'(m [ `IChP@.a{Q0r>ư7ađ %e-utA*@}6  6ʌJ/L +<+j|P+$:/v,fZ`B 0*nDb_oi mbmiAd_yd; c3Rdƨe8"vUt HPnZq<_:|ӪQ: SUqAZ􊥃}E=B.rLEF]'%ǕsU TvY˴Sp2Evꄝ"XW)b?7DA*4"LbfOQ񜔏IPe&uvG72ݴ0089d,n9 y/0WLPO&W?o 3{A(@"N2sJ ! O?j=riӮ@lo< &ZdJěx|hfD`CB A>u4h)`U$isY YricYHyvaDRf"xTPbl^_0xdtpJRdv]&tVrn<3; %K$IJI.q\I")ѓ4&?w|2F ĦeYE+{Nj]FbO$wY dIJ9]gŋ+է_(5*zmK7/خeIۦKyujTM7P}\{i&M#^ti@5oo,(@wp]KXөFBߕYJRMKRE3TEq>|HK,s|pbU5=Y/7Ǐ6 0Ǯ뮡2Ttӥ >dN(#[68\NժR,zhYu0Ulxڞ%b!6aL [iA r'> @rZxrhnАN x#>+` aq!IIBYr%\JW6Dʼn::M, " "8A/F LUNF4%qEQAq$<#N ,"I,I@UF &9|Hӂ&WƁ3W(rBW |rl"bdٽͲGҷbYBb~YkI`^aR@ѕr(\.V g"^`\ERh SH 0kEĆx0..s @Y5%62;z28g'©b]DLJ Dc `ѻ F}@(5>x52sQ&` &ʩ\l4a_m4Ó*b fyE[5Gni!j3ӜYNpl$ǹyEVWʱpy~MX+GIFW5}Pk|N9GyViao*FW۵ڍˠ^.V\mt#L?qbS2zٸq;Siye'jI5\#$/g|5(=I[hiRGγ)@LbR  VP?yuyYd<)n>WA:ج͸KyAx"388 '2'L"' s5'0:^3ty NNO{Npwޱ,!~浌IlFqyDwZl&7XWeClKV*JE R4eݯyW.ItL8c*ʯM9}~l8AOj12E 1X-ݟ(Hn1&iN VʔqBFd6p?݅QwDZlqUM~k,KG$EtWlinGL4(ݭ%fUu ∴)Xe7S1;܄lzňo(77[pQʍ늊 #8@Xk$"IĢvt-NPY^% j@J_):BEF@* h=dyc嶺wI˞} IU5Tg.$ۼ*($}ک'r#yn+lkpéH2y`+,ZQKsj<BGYEV>}dF]TWB#K%?cM?ˌ( ^Ĥ}F5 sYNp8G`1X mBh¯:?z@g}$6@ܩL~**s}a&et{S,#T]uR]o6#Bt)( ()p&l wOI5Xti\H.Y'T555HHHHH\\oPh#B_tg_{Qڛ[}zR2c)JRdj3x%cG5(ԁxŠcP)K'`9tיN(,0s3HvqHR2&g3(hC-JF$Z9ΔĤV2 jBIB#7h5 !Ì$]LYDвJ4 s= ! F-~5k\)R#kZւ08#DPoA&IEV}4@B3ߡ^lk9ث Z7:uTty[&hUEmDPEQD ̜xg {Z9pK2J?BuΊ줦YsRԄ'9"ŜE˶UMUS6\)\2#*J2 sRR,jD r0%)?Q{ܹ!}Ciצ 5Zk3L?20bW1c)JR&\<8]>MMMm/8bR䔢bќWw%S=MwxzYx.kUlhP]Պ}}˅}GoEnRGe%^LT/Y qzҐo$AZF@p j`a(%ο(1,GdBEUEmu˭ݏ]5E4(}YV_[*eR?Zj{c;Z!vݴ[hԑOk,m/go{21hB0-)ְcR:" 7C@#2/C*!ʐku\*o`;!3T 쬉"C0 Ԅ^UVEh Z!Ȁ3~_BD;[ŭ?'m!C-l[c%C1a=R!+@86nYI \zW([Gȥh:yvjosk2T),G;dosmV6Վ"!Ю@g$7cA8Sw4ţBs!Hwevʬ}Q$]9It]"{%> .y;/3y]//$i} | IRYE|YE|h0_EnT\nBW(V3̬9,֛Ǽ $.ӋEx $g^^A8ܵ%%JoX3LX&B7jWnUWYFNu:q}~w Nr.W9g8(=Ns Rw jsէ |0CRA%xJ( $/A,#"Z]Lv.*w}~}V:QS}4R[&,unm}_U",ef:f$K Ns%pO!)R~ZֹG{ K}M5]9\ziLSURK*Iɯ_ɷA _(6Yֻ!V gWwod;"$8,tmLMUUUUQ339 EDPTxfT{1T:nòn!wvAA#@dnf)L`!H L5GP{ a% `R!EUU Ьʻ˽ F!º*] R%kX=Gɥzo"iojZ{ݽ]}\mgWjo飶6CvH_ dCC\N!)H [(ioe~zz=4\[u<93{ƝcV# AgW˳ﭵ_c;sXaB(F1h6iLcz`A0J<1 (_9R41}dEUD̅VVOdc5b,@9o9 X plzno1\PcY+JR J(pf4+R]Zvv+~-]YQ4I@aơyByByBj/ < 8^ PBc㑀l*U@ AH5Qy[ĭ{Zֽ25bIbryW߹m_;ۓzbgelԶP]U[E.u֮ؿZ!^~w*zvZSUs-]u[ػW12RV:S3TQ _1q=D158N1=L=Ns1pPS8^)B#cguNdXTHdZGZ|"tNtD܇te`\r|(_0%D q%5ưEÎ(l0q8h( =5ŐK hk%ƉSa-n,$<O}&?#[;Ho ۚCrA-hmp'+kXn!)JP{]VW>ڢ|1uVWK>$W+'< qAn(\YJJcD$ƒ!"3ֱw UUTDDff1 B9Ц0JЦ0J1r   V֑AZZ*+wd22fl3AHw1Ȉ s @ `Qn1ư*(l$ciG=-Ɖ`Y.R VJVK`Vʕx@XX/a*VT V`^`V.p$DD$I I$I$$H $4@4H HI"@ Z1 B!- @ b--,Z1-X @cXcX c,X -0Zbl BB!@j!B" >" 6 6"b 6 >"b 6 >"b 6"""b"b"" @:UTuUUTuUUUPII$I$ I$@I$@<d,lD|@llD|l|@lll@$ $I$I$I I$ $44HB- @!1h@ @ @ B@   @ B Z-hUT*UUU@)$HI$III I$H@I $I$@(@I$@,I$I$I$`,4Y$y$8؈  ؈  ؈؈؈ )IH,$Y$Y I I $Y$HI , $,II$Y$HI$HI$IH5UUUUUUT*UUPUPFDDDD@t@t :DD@UPUT*UUU@UU@UTuU@ juU@""""DDDDD@lDDD@lDl|@hl@|@llD@lDDD@lD@lD@|DD@lDAI $I$I$I$HI$ $HH@H$iI IHI I I$$4@@I$H$HII $i$HI$i$$HI$1I$HI$HI I$@I$I$I$``1,hI$$I$d@II $@I $UuUTu@)$ $ $$ @@<,,@@HI ]Rd.׼J+"i&JL"Ӎ'˫XX&xl2ә8iKKҷ.>&QTuQqzq|49s͓: [vڏ/ %n>0{IRyqㇹF&]bU'q0Q3Q#'XP:MŞ|k.Zh0䄒$՚2P*6,*3mPtH.e0OȔ2g:m${A[p&*항y~Oh)Es$7#!B4ej3o!|gnHhB;K.s.A]ތMHG>hɗAɖ=RyREm9pjR,r%#dTCC -qgzݑ4RE$Ң.j#7fme xq!`]N=.Ǿ2^|f![DdXzwc,WMuȢxZ~c?VIUeT3`E&{rxiq*7~yR"yFR- ˥K z:Ks!5NP؁Z'&N~?ATHi)D#Ds%Ԑ%]pm&Z |Dsq1oX"h?_c(WӋR/EZuH]*y-C%VdN^]+1~i,_ǢrLs-W'NE!=y r0f#G:O?PcsȨ) яйkœ|>SȤ|YC %/u.}BSGQU|4G~}X΃T)GCACxC:J7Tv@6-'TGYkdɉNd*d!,v c,nщJ1)q*U*loe2.sOd*ac! EѭN}j[C ]5Vֳ0$=̬M*fiX .UR|J-4"eiV9#|5bpy qNqxFC=ƃ7Z^a9gN7%咗]]//v>d" Uso(ɳkwC6~fnL:hq<" WFWy6Kq- ]A~/)ͼLifƽ _m[gExfbki? O-3 юڏڧبG$#VBS5 뵨LwNb:l~=k\TeO0 S*:kN:muFohԑб_1Uzhʜ/RUۍvEJWaE@nnB,dڮ-$]I`%HLaay(M2E.VOu!8'\C-ҕ- w.X/[Cԩ*򘴘cI\Mahc!ڽ {ހi@&X_:W.fCM>O6#q<;.N~>]CK%ڱ }*ڊcPL{VI-{2*x2J"_؝dXG.gVfp"2sƜ,QՁ4sN?ՔqXn-+7gI 53v1Fw%{ sF[UNt9QehAZӂi`Ee C[T6BIpf`!vvHL%:_Z_NV>ūӾ).48 }"^IE#R3x땦<X--/;EWdQx3ZHAOzŀ-8FLyv9I)Ĺ~66CHgh fq${Ogt[ai$"٥jJIkmfEZ $Vc5$OLJ[Ӷew^::G1>Yr,, J&uv ( :X1/-"(G]*W~f( 탢 FbxR(x8+T+bװdLH>M vkJ">)f\jYu.tLU_c- B/ʔ`YYrc,d1TrQMB|Qc=D7mYdғ4"C-Xn/%CrΪ;l^J$ I /";1 V,V a'] _Hreٶ۬97\wEQehSm9jԱ+ ZH{L5soQB]+!lEXPWlH$ cZ&&lJ#*4&JI O [\I,̦nx*I '@wCÌTEFDJ{Ci&O[g*GDH{h V KɹG:J8zpʛ+U1^+bJa!/"$ڸ|NC5?#XBnkA(CGe+/2~w6:DMd92nG2هXCdZe3JPmFI{`t폄.ipH \Z;Iȕz>qE#/_ͻKZQqCƲ;$rlȄ>rSB3wVd2?O+4H ӗ9"{65huU?S$26Xe*.數`6],R@a+%;Y6 =kaTl#%`ӌ *([ #gGyH.KBr&BHQm@YŸS/9+QCқFeE}&^klw'3Q BDsW)*H)Ѫ "0lyQ}꿓\DTu%0-(Ely$N.if EJˉae霉BXGO3G 2YpYD "Q J <&;Q@HB|@5O::I ) }ko7n g` /@G@#S* Ma"Ι1$=\]/A,č s¢Pv/0$986  e|829`#(SRLM4* ̐.ZL Ð?w@W:|K 4o h*K##44;#>+H©V×mr9"OG`l1338®7d]a!Y:J]H'A/Ȼ \yocMohpzu[(b= Pӗ8B HA {ƌWoקKӃ (@pimy^E%wbn{ohh뒡{gUL3$jB8#nPr; ڗjW!^|ƮLB[l0XF+@3j%|.)%O" 1d.'σN8!4tuY>;hД |?83K]uqSP̨XB _iU6OBXjMuZS&waUBS"I2lydCو"xh6qj4]Io$[(M)ح_Gp_&cPe: "iܚA1Gŀo0y$u#?{e&byVT&9O1|qj >H0'MڸN R4NVDw293; P9ܱ>eАI-"aȊ7dYM/ "t1@hG`7̒ Jq i}X鬏ߌ7<\\ci)fYBQBh_ '[O NUOOZ!;zSTR -ejo[]33gdbceDTL\Kh.Lkl~"*6¶\ N/O&Vj]WEvZ#4BzڠU a>kRf3M;O&\et' -]IV<@1-nϰd ijVl=Iy~K~?؎,|:qb 7jnoyh@ɗq SYdzYykUx2ھEQf ljow3e7ST0+зCeU|")CD6`JE@7 0sB7;G)XF/IţZ:y"CDzCϐ dlVy"UTpm|bCd_i+2RY;F'H8%:4V KQ[|!]Ss0Q?FLE/Pgk*P09'-9(v&MB: R+C@IOzP L%dxtc?EPbk i#w= z0YIL _ՖDAe Α4>ԎQǔϜUsWS-! C$uBʹ!9eCGtͷ_ 9M|YvBs9KxVRrUVxІ\ rE}1p+g˽XWP /{oЃ"Ssy(V*䞾;ң\'Mwr v5T<>*Jp8.zhE!Ѥ?F` аc~6Խp_/?"mل^D"dYHPOKnB[AaA L..(Hay#pu@!wIIalPG#}6DQj:+ J6 qvH+d'& ~Rȸhsd]w_H)@|Z )b ?qyE-%)_&zL/Q5eXR&?$p64 ͳ".uZK"9E›n!HB}EvJM !.I$Mvɚk&H$е&hCj-+D_ԗ}gAQLTORdpx>*+*z/x.S}Zq3JM!QX ،tEs;B*<|sUYS OF+'e'.!aLtT+:i+/MMUbQ éPO'Eu3W{vau5Z_$[˭KfNNlzuט ];i8=B 8Jb.]Kj1bfmR?qS&.(ZԺ41ZF?ƿ;@ ]P4Yiم/̠M]Y )F"Q歁L|I7icFTLmj -EJaZu­]Ϥ$cYJN>f|Ry]5|<bjl%A4 /e!݌kkW^}7+VYŦש6ގV iUGEDh&aZDQl7`{Q& `9y/5#񕑃(x+?pA=ESkCn+R %F Br |l~)\'8p3}G0¸MR!v~J|(by @{ZuJC_P6 t8Hcl%?Kn(`C ă+ҷw}E=NG2OUMܢY{i# HdՆmc&%UrP*7"g(- 'c0J|K7 'HVL1j CijE IW Z"uB`gpiLa R&!=h# FE^@R#[3b|aM )Ld:}e{kR%dG ^|/ɷJs .?̜f5vːRe&ME#^+d\~P,'ԓ|B?xW_uѴK-2(A'yEnWO<"ah*I2nXo1c&>If^R0k`Z:'2TRP5Ƈ|TpGP^V?2iNZ$ ͬr_zLH~@&2LwVq{obb_bM26ύj^R')Sy4:6 baZ;ۿ6&^K_]{kRdؠ`VCL*U P*Z$BU}Th%&<3?-[q~8Ⱦǂ~sߩ; F1J nL9T}KА .`]SҪKgBf@c-d$\Nj .5FVT[d31T>H[&|;5hqtegz)K Ǖ`a\áeE2lAw ZHQ镯Y^Lc(rj"FbѶ;~2jIvd_mv "$.I"\8Ih1Ž\GXAzޖNBbқ}Am" N@@ 1S 3@}2Ĕ0`?s;"u"AauyܿDnRZ2T3E=BS6,_ͯO1ߗDU)hUѐ]< ÉUbg [awmZCSE!. 5]vΌo.]w62 INXep8=O)}VazAFBH ml(hD 쬬b)wmp'J6*Jk:*/Uj}FNi]Lb]l5jmFmߚ2 *JvuTUA>s NʱꅈWdFA P;4Qb|H1A% R\"g D2ɜVzޙD2wqZt ua%a=X dMN@+l ; &3$EwiYGrS9,}4r|jkYդ-܌h;Y( -S< tk$i"92 |m}O)mf{E6bI㹂9ƴ8]܄.*$ G=9el<`˄B,7yN 27qBJMD\ 5FJvK#C.O/$ Q+%IYL-?Wc7c!얷.ZhSI=52L{C#y΍3ѤЯ2ndUN\)aڄ1t}F/n_+_ r_!j6RAp޶k6֌K+lw gEn/L܆5b}Lj(d7'U@rjHcM+&_+ZE7SEOcfw+Ɯ? YAu|p=~j=U[1aM[apgYD",˹E) OMk( Pt}mp`L[mf[M7siS6صI Xı'P2Z¸.@ILT&EJ g_NNLL!wա(a2*QCZ 6jW% MOtuڸIq1 \tV-aj4:Ilga@z2jiXk^YwVIبS9|(Q,VC1U&߯q2F*sD 5 3yg/rw|ID!Ə[!%,D飣$x8M$R /o[.;+D[@֛k a`ἁM/eJަ4%S\ AMݽ[So?,摄S Kdq&,r"Fj: EuJS;j6UyjCoܺzd[O7>98:ޫJk+ħ5.^bu*)%6L44"2q(Nȼzf-!S+D)2\ )Tldz l?Ĵ )j):C;T,IXj")nd\\rrgG$c`zI#WXi>[+:F&3mM^N;LLBn܃KK+V$eXF78MZF0y/z|Y{ 9~N*3ӻuXzkrDxNu/R.ZRZ"e,Sgg9|;^0 4j3ʋʜMNjrd*Yzq *|YuƕcF ~$n2I.k_Naȱ]ТTR70j3I& x?pX@ upe |VX䌵x"zC¤q'!u|;GÕ>;usZ-̩Y9)($$Q6?K/*''ESϾxQuEMW6&QaIv 컃ۉ V%9k3Q,;Pw(E3>WIۡr48H3=M`):{ H zwj76Ye0Yo`g40%[ѬY¬@%8A7 e<\aGu!h&OO&!"% Z:+=̕޴e$K\ˋ"rrܷ9qi6'~4.K،\f#;,juӧGyW2ye9&}hEv"H;|Y2R ff-oBz!g72CyBvR[aW{ɜRͤA!R'.'tk5M ZG3O.5j蝅-ʇ=y(tPx "u4 4KgFZ 㲘m',IX;v([D*4QO ֙O *8Gm-h&"XtVHN]b + y8X {#P}$5Lk\ݚP 1RSHtH LpV*z}O9}wq{̭h\2h21be*حWbQa\VեYcF t_9,kĂoxe CFow#yBXv= 'пEhP ޹ұk:tZLYv'FGTx׻.$]>r 4曗8.4ubqt&zBׇZ! зI*SV|pD74旷R 9ֱG$g疵ih` yYOm"&w-h$Br(rQuDf&J,b Ӓt-cHV!s\k% Lv% {^.(Z?WH l3u_ߢ4Pe[\6}[|D{.CQ"hWl6N)DO`^>Ξ*:h}z|oGmfD6mNGȵմ֋Mywr%:p.dͽ%Po!JtB.]Ð*6vdSܗ)\Y;D2 QRy6A^N ^~Ld~M>$?;R>Z}sþ w*Nq!nP4drs N!Ӛ4LjZ!PˈL|ԝEOB&]*v73٥ξ+}GŵQSbOCx7?#뵜R!iZp漮o f_ku$igI7:bbu)s䷀AtɂJ;'g:']6Z$>-ۼdodxfLt/wv> OujWL`!T+}^xZ"6[*~rN[~kX"n,%_KbYw8{SbIO" V''} Q% -6Cw5J/sW:(SQVepH "Z}N',ULaAMDu +R^SɤU=kAS"Z:ioFa )ѡH"v !SUNqTW!)" b0ůP+Dk dܹp,E gƱZɤzah[7Zˬ!-i rdyI&|ۻaNIkBidX+P ؞u, f{knT5 U2kOIbYiQ]}9V*3J@rوкzFʡ" x:.3{uV[U%†.^K. ܭ)US-Yoos:L'[/h}:yxsEgO=qUL\"X.k+|:T8vx8,‚Iy6n++\D,i8΃wK7JΎYv0Z GLU5D!Nڴtz`zrEWDUO&TeIRNU4t3EyPNUH"=\LFlM7F >),`'iB1/ӊ_=cf\NUiD%4(..3/(##\xe#aYd!Mj?Qj u(|U 0Y|e G o!-!ʺ N-AA,Ԅ$9 ՊD!< j[2ޚO;qQRdq0`*r)3dwz w d~-aR0Y}MҺC'R uffdc hYXTtVo=E1 \Nx&PҷpH8!`kVD3aސ5搘[Ò2'ohKD0@-T|1 )+G'WQ2߆VKׅ FHSV #C'(}HI5d\2˰ (LNd8CSNC,ne[\"#5{UU ;D ˜Q0M,~|i M}UsaAu5Rֆgׇa'o ڣagyTBWhGYNipkO->(rʁ,H]XOLP4JY7\V# //862.!p:pZRItIFІm~R](RO$urQ7e; H9USēuڲsb膒6^~m])!F:4LEy0e3_N%ބ+t呾3=Fi{k;hɨ,*"-!Υ&PsGg3 |qҒTu"ΑIh!nQ-Cgj=^9sdRH}Ͳ-$bȻTM!u8 ˚d( Mn2(';5[DʸE۝=|ϿjUaBgV'1B7\\m+,/xL]3REnA$L~duhQ8_Lrϕ±đƙQFh)_gtIn_viƺ(ȍbzhC`Q+~! Z #J% yFa~+A4iU5* a%6g}y- |iT{V%k܌ء W(DB!Tlvc9r4v!j1W"`aV-ʪ" \qZjcrٝY*y <"('PY:%b]4 JE"b&e0%Ȍ1Y$ HEn҉E0@4q@9Y6EFR,#,Xb %zm^'Ep0.Du0Y8 ҋ[d}RbjayK:}Դf䆚h-~x?,sbwwW=+Z8)~SHw ly)v33Wq-I+}?ց) DG/3 9ILfÚ 6Ic5q/lr[ky Y-{y H 0hL$rVDJWҮħ.v_D-Se*BZXZY'NyQH_VKs'b0UcvћΫVs w"U  F& 氢JvHX:#`IßP{ؘRvSN-Vt ы ȭg]9*òhD+ { ⰳp~m]sɃf^K~[`1s~]^3x7%Ywg \*lZ+QZ+lƲm* +O kHϖ,2z8!,(yuO8 iG>d1)O$e;pePLN ⿹IV8c6D3BГpׅ89gm”ds9 J 0q'QfY5Rt\jR(z?x'd ~3y,nL@≮T͗iAY3Rm>_z*EN WCa-ԑB2/m˦l'B /l䜈F(C% 홣(wGC:m=շُ䞓ƙV-;uŁD(8D5_O.KkU:&7wMO}\ :V;ļ30T-G K"`y|\GDMunfFZ!-u1nNم_Ah!ndev](h^G$)D$#5˼APQª ˴%Jb1n!oҲLdNg1rD9ciy.*ox!, yEJ_O{DB,+)mCD\LODjr^\~:5zqt;\$"PD 5WlWw}zvk4=? /[aǾ>epQ2iINQqur^yQhDx)ҙԥR,6|%bx2.4'tCCM<=L3` 80ɿjP4"c2dx` >F' uP1;Qڱ+3e~[H*hcё **&h(G2!6F;  2^ (BB2pB k&:D /ɠ( ,@7:"6*LvGȑ˲EBR_LL|ۺʩZ' <Ԟ>'Iq4??Pboٻ'd,G║ X*Y9$!=N }:sF<< g(GcfYmI9aSk#3u^@B#CQaJءRnrQuSy4PL|Ŀ'ctӐxrq04`Y1ؠZ*rR!2"/ #h5\R$YC6Ht`yrc_ٷ:dY?K7GIJVNkÆ9rXQڅSݯVÍMH6FF,D${fN,_fm-3O{ 忼8*so": b>l(~_J'Q:U*RB^KS2cFd鉍:e,l0kLzcm [涠A_}Y7@.jX2@T. 0Pjlr뉃sbHt"2{I ȼ_d/gjRH{M~~:JNQm=yG:4Uujm-ы-#7Ky$ y:pdq FB$ccߧ䴂!WUO$ ߄M 摣/.Crx NfčEGBC"BDEg)ť)RJfG:9 f䵔_>q޸Lj2ؘb!ҋ Ya1AzM,V%K~ C2jSD`K*'g61g7Yx2fze:ȽZɺq Q#Z2hcMI!n&-ϙ25;M@ג7Ayۓo<t2脄BB~K~@J`$1;8oL%OpPD$Ϻ 0&f2עF[6lHgLY$Ӌ>UV*qgr%>Fө%9>94z?-gszIk(|+=mt'B{)˻cc hM-;m/)B\!l`&h"Њ5ŽD*R*IB.WlYt*}QSRX Jam>T.% (L J&-#Z6F(#>VZ#2 #-&AY"Jɣ,2}ݹ ,Uڔi#"yaq嗝:Uezf<&Yk ||ym (ARvZB%A:\|bDWiq$3ZRߔp7G95 D )ȥrM3i_ ;q֙:xR7*oݒ:AȦLOrҲT\UJN{"*P|T F'meIY!$C-1dH}MvCeRUrf¨ l9#/2W{JyL*mt)wt=jj2KrQf' 8Þ 1EM z.E-o(mb4ThRz+rIOFZd '\BE޽{>}쭛 (/{h҅oz\p8y5n9si뛎*RdbNJ"]̝$XK 0H*un)S"@)́ k} Pr;A $/6cͤ۾è&}Vg닎h5v!,O=y R6cB<>jApʌ`"!e8J R#q.(7c3kI=ݼH-nDC/,MJu()y[!VB׏zA}`3'ii2\8 pIo zxRAu"RKm>'pDM9fFd s7=esQu4LW(K$"i HܥO~ a5gH sȸM0虶=ıj/F&X@X&bE }(xƍ1Aw 0@4L bu-ZQBW; 8B-A+X/`e浼 .к 4 X} c%c 8H鮪k-ٸ2 n8JdʇrX''? dDc _'e+ݴr0-"K(bqSQH+ 6$o3".>Ȯ´z.MװE䉲pB #kiuU 4K3C-s%\r aTXcg ÊuXa & 0.uEAW>XV2\lh TOT(Cq%2z8B!>kng"1lsOi01h>Ѣ< ۚ-9;c#rKRGq)$?6)p`ji"'4]N9 % EnRD"P}`s R&p D֍ۺ;a#jH2cT0r*Y>LkSVJ/XB`څ !șx@\"}EAΰ ?E D~\A/'p N } )Vo,Z_q (\$CUe=ހd: @-~ci`8.A+S ah]c4¥ "聳G 2l[,7$]`"XeeutQML^UaE_d}/֘@BD_^9`>|Z)+tkxWˆh"I1LIQe{ :k(ްs=Bx@B|6e.* BkckƄqP"pϰ\ĄIB0(vV! bF KؙBN!8%q92&B LJ4Fg*@]/Reu 6 =Z*UxPh53d|(VQkְe.LD>e!AuP27>cETBsM;8[)qvw!7!ކSINhE:} bbv |@DoۅOfuw>rL"A[ƁR5h%w:M(兀6.|f㫸5:4۫l(!$}ds]F?qO4#aOyQ{yžI7ܕ^&&K'h ;njmnX JFIVăSbS0INӗ%Bt0-+#PQItEXi^Ҫ&|Y' *^`Vʕ *\X+BK /XBR/r+X.TrK0p v!B!B!!Є ЀrЀrE,Xb`ŃŃŃ,`x8B  Ō,`8bb`X!B!BB!v!!@;B!Bl9 25B!B0 ^`VҥTX.T!@ x@X/a`XR`T R+*T!*\Xh@!BKBxRT V ^ B! ^`Z BR0Z@! @ B Zh,Z @ЁRJb/B ^X-Є 0^`V-x@!/B!+-ЁRbšB X ,-b 0b 0X -B!Šb! @ ^1@jB!!B!Br B*TX.TxX J*TRTrK TR \ +BX@ -xBB/B!B V-!+ V ` !@!@ @!Є @!@+0Z@ b/B hBa! BR1@ !-!Ŋ1,b-0X BZ @ `c@cb @c@ !  Є!@=@<!!BBvBnJ lRTr+ʕ./tPXReV*\P T \lhhxlD@l\DDD6"" pȈD2" ` DDDD@ @@t : :@pt:D@t8 DDDDDDD@lD@tDD@l"" 6b :CCb`:""`486" 64:@t@l@ptD@tDDD@ 8:C`> ᡱ ؈؈؈   >"؀@| 88@p" 8:D@t"""b""6""""" 6 86"b@|hphtD@lDDDD@lDplDDDDD"""D@l@tDDDDDD 6"" :""" 6bb`>Cb"6" 6`6bC6 6`46"`6 D@t@tD":`:   @t@" : 8@t@t@":"@tD@t@ >"DDD@ptDDD@lpl@t@|D@l@l@xl@lhh|Dh|@l@hl@|lDDD@|D@l@lD >"C"b"""""`> 6 6 6C"""""""""" DD""" @tD"DD :""C"  舀舀؀興 DlDDDD" > 6 6"" 6`>"b`>b`8646"C`>" 6b""`6 @pl@t :" 8DDDDD"" 8   ؈؈ ؀ ؈  ؈ DD@tDD@":"D@tD8:DD@tDD@ <؈  ؈ ؈ ؈ 興 DDDDD@ht@"""@l@plD@plD@|DDDDDDDDDDDD@t""DD@tD@t@pt : a興D@" :D@t@tDDD >""""""""""""""`:DDDD@l@plDDD@hx 86" >"  ؈D@"" >"" 興DDDDD@" :" :"؈興؈興 D@|DD@lD@lD@lDD@|DD@l@l@|" >b""b" 6 6 >"" 6" 66"""""" :""""DD@tDDD" DDDDDD <DDD@|DDDD <DDDDDD@tDDDDDDDD@l@tD@l@|D@h|Dl@|@lDD@|@l@lDDl@lDhl@l@lDlD@|DD@lD@hp :"""D@tDD@" : :"舀DD@tD@t@" :"" :"" DD@tDDDDDDDDDDD@|""""""" >"" 6""" 4>""" 6"" 6"""" 6"" 6"""""`6""Y.@I$I I $$y$II,I$I (I$ H I$I$I$I III!DDDDD@""DD@""""" :"6 @dII$Y $Y $xH@$y $I!DDD@lDDD@|DDDD@|DDD@| 6""" Y$I$ $PI$ $I$$II$HI$$I I$I$ $HI$$I$Y$Hq  興D@tD@tD : @t@" : 8興DD@tDDDDD@htDDDD@|DDDDD@|DD@l@lD|@ll@l@l|@hl@xl@lDlD@l@lDDDDDDD@lDDD@iD@tDDDDD@tDDD@"" : : D@pt@" :"" : $H4I  $I$I$@IdhI$hUTUUT*UUUU@UUU "" 4:b""" 484:"b" 6"" 6"b"b >"b 6 6" 6 >" 6"" 6 <qDD@"" : 8D@ptD"" :" :"" DD@|DDD@lDA@d,,di I$@HI$H$ I $I$I$HI$i$$4II$jUUU@uUTuUUUUUUE$I $,HI $ $I Y$I$)$4$pI ,i$i$ $I$ $I$I$AUUTUT*UUPT0 I$,I 4Y$II$,I$Y$HI$) 0$I$ $I$H@@I$H@I$`i!I$I$Y$I$Y$<@H @I$Y!@lDt@hpl@tDDDDDDDDDD@""" :"""" UUUUUU UT**E$i$$I I$I$@<$$ IH,y$X UUTuUUU@UUUUUUE$i$4HI$@HI $I$@HRI$i$HI$I$IIII$ $,$ $Y$$ $d$@,@II$ $ BII@HIHI HI $ $@IUT**uCUU(@UUUUUUUUUUUQI$<,I $I$ $I$i$@PI$H@@, $$Y HHI$<I$I$ $ $$@4@4HII!HI$ $I I$i $@0 I$I$HRI$ ,I$Y$II$ $Y$$dYI@)$$Y$Y II$@I$I$I$i!I$I $II$@I$4HI$I!IHHdHdI$I$I$4I$0UTjUUUUU@TuUUH$(,,I$y$ $II$I$B d0dHI4I$I$<$I$HRI$@I ,i$I $I$i$4I$I!I$I$@I$ $I$xI Qj=Uԩ olc6|V))57s ҟc8r5XhX,BY K+1!9i?%u@Ы;1Y0LsWdŠ-YHJNb|SȬ^݋k *zw\ \d,U>_?b3,2)2Z9T/-R(jGԨ3޲x "ĬGp[f ɣ},WkyK\\:{- t8G܁Yr/ s ۈ :V@FUXwU6y^wf.",)B9[VjiF%zeѭ,;ʱP2K%A&"M GTW:LYPn:֐tmP´{]ZylZ8 !"$(š.IJԧ+ r"F+bx.bZih iP_'aAyɊdiJ?c)O CDXfm?i\.:(=V @DYJB%yWB:`*|d X1S =^ ǀwI97"F3]>нHY#kL*8^9ynax;(MDE%`p*/N7,#D9g, s01(ؙEݖ7 (.| Y\ZN'Z 9b  :)%UئĦ |@T;R* }`um'/WG35_bBN|LJ9 h;ԣ8$#d4a խqu-IǾHG ^w(H:PPۧ|^ch@ȶCK"=-FJ(pȝ7,1Cx{U8C;BCtG-K]/pƄ lk yD9Ue׋# a&G P{257UI"뒤)czE$'{awJ+eZ{p|pFEaV(h*:)ʢ꺚Jv BH!V1ZGvM'(f:hFnɚ#8fj bXWY9E4|@{5ջT$.gi3V !(j(#^ȶ\dug4uiWUh ,84;Rյ_W5CL/ɱKTEH42NAR5EQDQ%Mż4b*EșR^) )b}[[șJޤ3KV 2Qdsn~88^|IXTdv1ѷⰐ02lEQ .ǘ*;ƚNL " QT &'kW1HSi`SqQE10FQ1VdgU[=%Yɡhj4bJȲR$PhX K2Zl S3L~1e>qMQQ4 X!EUL,a Gq$Ҁٗ0ZHB[GS5Ya]$t/ ymVV< tʠl ‰A!VY}耭̈́-f[#L`5iVYE{]њi )BFB2s;s0ı+B=֣7,M|wZ*?3G1{_} w(N1F>+`ho2^`iQiag ͂2*lU-"B4K"#`CVaO48A5:8χrg/B`eabkLCP;Cy!4>#l&rNk /y 0B$^lm _QXAM:PsAަOrl^ ,؊p& `#Љl XD4q],@D"Sju&l" 7^#C*ƀhqt]B2 Y3!tơ]c=A}ɻQoF3y]#%\05P^e p?<> @4*'3VK%X 10&X !0 ٰu>h3Aꁀ -]nLZ4t쀄qFR!~r[@LWXI{MFY1qM74) RbRR2V,az*忇>=ώٴa:&J+-pO^5`ZԬ{6@D]lcE$2*6S nb*ReŗN B$I~ze1&xx \Q[}_=AxpѪ*Rw/Byѳ>~V2ÁϘPZd C>.Qn)QYbUI]}gG>xl՛H(VQ3+R|eol* ;8o WLp %V[]@)h}"DpfS[gXg0xK tA4~Tag[OIq)fWxE@` 59L.q\GIAל/ͽ}<*=`|z"jb3tJ"ki>mvW >"PMP x@ p<\P((( Me=H_2& ."|ٳ%ɺ% )h fk<UxH CaC'{=Γ \dR,rYkޥ`kX R r;)IR! B) R!B/_ÉB9poFU5 Rt g+Bi9*諼YK,:DDIw`h:!LJ NjmR'9w.PqPQ%3: :Ym@˯ ➜ y x  (R p8((w  0'qNp@P@Lp i T8 @ `(({r( u9_@ ( @r@0$HDdHp !@0 P8^9E82DDb hg$ WW(SB̯F! BID{߫_htB#"@r1O1Q\$P@&S8P `b(PDBP(R A= 8C 1@,0 @p  P( 0@0 PTy@R@@90 :4! !0C`+a@ A@ p   @`H"&'€ Є@ (@~C)( tBm$Gc9.'LGwrnXI:&$$'I,Idy'I$đ$Ix{O=&$'.0|UE?[j;qe<`K.rB&U5?bۗ(k=8h@PTPPVOݐZYk &E5y>h1aqBğaUrŻ|/2 &0&&\',HYgM& 8Uc]o5œ $)qZTcgΊ8MSתVصWŲgM >MSUڷ[3ó6t(tWffcCVY"dTA!Etbl0PHXhCd舉28Pa!`@='L?*08('/drQ/G-UK2ds0@X@PГ%)&L&0p`XXD=˲u,XhXPdST^,$(楯G;~ʌq(ݲč17Q !9brX!o,97*!0>DA;8Bᝑ=jл,|9;?H)|cRr e%P'Q,FtYeaFQ8qPZBH¢U1̤V5R"'ALIvne "“=ΑVDSӥ +),&e2efQ+DݘP؝T@WL!oڡZʆ*s#b|ۢ ¢!L(â[  Rb"q k"#I*)x܋vV#Y&K+bLq\[Ei]e.sWst]ʕ5֥Z>!RKIԙ+]&LF 2Ne1LZpe212d2MUe'jCae2ˈdbё S#ɈTa;#FŦLa: ՄYrj eL.˘OR ꪬ .URj$]&AMUI˪j.5V]&5eUUUUV]UYuUYuU#UV]UV]UYuUeUU9yX_kꪮꪫꪮuUUuUWUUu]UuUWUU]UUWU]UU]rꪫꪮꪮꪫꪮꪪꪮꪫꪮꪫꪮꪮꪮꪮDhydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Cowbell.flac000066400000000000000000000275711211146647700250710ustar00rootroot00000000000000fLaC"_ @7B"4Jrw94dV( reference libFLAC 1.1.1 20041001Y'z@DdHI^"tTT:@'!%˅?ihr Ȏ Ilrb2_zF%9LHw#V:EXGߑ=$b9 ʈ 3o߶MHޓ=|B ޼rD.]pɢ*ӤP `0G_X Py1k&mWjB ܱ*aO%NB(*V̓G ;~hf!W"JQ9`dM[9hg HZ>p7N`25(e\@'g-7b&dNHI HZp[U prǯƌ8#V"J(fG.[>fT$7a92fϒSν\ve^WX6^ѫ,;hW ^jeiS(WH E. *C3Ҷ-ȉ:dC6M> !$"'zL&( :8lʅB H2ldvhuX@tZ Vk@Ahѫ֭X\Œ,^vm5bk% QF?Ir 6Q>U&O8|ENY2s5C($lh̼l 2:p˒=#?ieK6INE U҅|IEgYF ~ZoF @FE<\22xё#Nap]璬*>.|2&SjCD8Xw.@&4 &GI>IY\uP @ <6XɲNMK6O7c6qWxI]fVauȨU$ :mhDz >D`5Ziӯ$I[*&Zuh_ Q )R[/!:42 > 2X3Ih,2 ŌV,]VWMŕm_dh^ $`7aZ(Ȑm &'})< 2@#CL *H6`e.\u\RFbx#M̲m8|eB`nE.PZ\w\1͗x$em6Eqy2hQs) pbl0'2hf"*bS4]G]7UZu\AX P :XWq hުN|ymqx8IIY5T@w2ܟ` hRdil&hR"ͤ4/!9).ͬx'  LPᶪd.(SpO8"Auƚ]MR9DჅ"H07ʜ"pI]EHk*DivXD*h+̈́"X0s8Kp] ]}rxΒmQY6*MlBL:,ub]. ,-6Xb&Tζ,`fwDŜ4UWYWimʴY'.:0L.CP H 5[mԝeB D^l ˬ≲VbJl$Z]T]ם.PŊ Ie6ۤ]ya̬Il.<5D ѡ3-.덠Z eY"A&j6k:D"HbBOr0$iʒp$.>W2TB>(#\Y-Ҍ(˴%8EXPЋ% *OY_Uma$:í srd D"㯓 T2ň` .T5LQ=QUiB˾$Nz..H"0ҽL]IEXayl]YFQϐo}$["JEJ*D7Z}V]%(C4 U]emFTy$cɁs_,MJz_.I}]w]]Zy aaL-\Q>41 p){M,g(pq-s(.KAHaGq.%( +RTՒbR X<5%?K jkKZZJňQ$AdV\U$յ5% KK0KAC[R6Z2}HPǽm)Os<@pI,QBI-c0O CԽ.{ZRCi AKK330,8}-H,CiMIY(ϩVJk.cPDHF4QB5d6:cֲJ^Ky$CJ!k^0!-9F=iIe5H@`aoB9dNn.&${"2:К х&duGw7-ˎld$ )h[o> e8|*wgpM*Ȉ!M @P5JVbe5hWZx Q P,X _ɺm5c/@,DE>7I있GIK pp_ol DnZ'{H8FVEPtjnR)]* x6ݴȫ@8$4dNSz/7ѽfG|+,`^gǾ^Yβ!SH.21j~[ܙ&rc9hH4(0![@h1G-IRUy}9j@ 0n.\ %wVDwVMo$ *. T\$}eR u^DeufrBձۖK= rP9B.m( ((ԺUtM haY c8k9 ِÈ"}%Xe5q8.*&bݾBQ2L <p 0k]8T)R :>&ke-@\ QKKRTaKuN ]XMDN,4$qË@h0+)7uB)ŹŠBدCj>v1:/`pE"ʓogj*=qlNCĘ1hnŦ╤EyޅbT\ 'ͪ{i@'A%V"q\cы!8z7!aa1t@S$o.(FW\="V!Ty͈ɨ% !8`e[[Rz51;«`4`|YwT#U7SjG|EQ56CԀ~c!i'lݔ<&Xz=D\Ifi hM\ C=Qȩ&4Q E%M뛌h!E|1Vb\ij2-U!1WFbJԉrE=i2}WK٪J4H !jnoB+]wkbrsG !-B&uՒGzjxDC!S}_}D \HHL\bМM,[Z#h!Z:b gXδT7/*[(L_|Luţ>~ 3QRy_gշV]=Yb$HrqݺDZj3b*b.pC=kW&19j[9HG0d.BҳB! aLs)hQ˺v9/"E(a+NJ&uJa#9 T8H!FvS;tP؄Spв&G%dtHÅ ܭ+qVQCa)T 0%\\sG'̴EPN LdĠ80QlrnjE!u EKH+~'G@F `+`&4b'C.D4SytQN$l@$h8 ;BֈvT!LO 0m[=@b2YaɊaF92i.)byXP ǎy T$PÍ B\ 8 (ʓ$ Ŗȑ8KkUHVGȤ)<9"@1HK*TLjdp@ Ʉ*rL d55g'S < :G{9:L t:;XeJBԞ#;E2L9?*Za)@(=!1Tz=D*):0`1Lpϑ<^+}!D:r #q BTq/!rUtzaY \%ݼspp ZB$Q[g#|Ov))%q/G` |Ar:|GݼO$3 ŇMճs v3ĥ!S%09ZeF BwMEo!hga5Ub"xg'!H5nO$.b(p"!cmLM{yU 5nF:YӘthvQ:T#HTЂl:DJ׌|!Q(1XED S.XOM GI򢐤|:vs^ʖD`pz LVIn8K$йAi@߈8$B("÷Q"(1*crNaƽ,G'B rR0e7%R<ĝ9g ΑXZ)d$IrCH62|AB3:kDZG#G'G#srDޘVqGJ8":~j=קoc8$[o \O$QO"9ˮ<'# 5|8katV}b.8gY2 M2LTC3cExx((4j̛BK{fB_Z$eD AB6bFTNRSYe~TONeD,OLi/OO/r'O- O O?tOOK&ZOOO?O??O??OOXyA  jꪪꪪꪪhydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Cymbal.flac000066400000000000000000000777701211146647700247170ustar00rootroot00000000000000fLaC" @E]WNܓOl&( reference libFLAC 1.1.1 20041001YP(TJ5"LT*U*ZZW+ fZj^,6[%_sZ`+XGi+h5,rpm׃ X$Of ~J$QFO&f%7P Ex])E`}limj-*Nf=VD'H$iF+d)!8VudȪQ"8ď|*ηrDA "O54Ba \EeIG}ClH.F m1SS=E&$YV8}{1d6qSWnK(0,Mjx-FBlĨ $ W(Ɓ+{LP%S#V{S=QkQAq1E p@Uй#֏` Eqj5MY+JS,:* `ldg'ĐmuJlLYE\m0xCd_oQE%?_#eyBICdUcit٩&>ņs8# d(=;hA`~GgXE`X#)TdR1q|uDUSqmL:․z1~HQ1\pڂW}2pHak/;K \eG4%HtOII4Q}f+jgHBxIf3sDkpK J pIO}2)K)JJ~Bdžl3ZܖVrhtXJ$cb 89C@辈AŞJ[#JXWDd] MD%<}l 6iR M+i߅q/Yv,֛)h][sOM KTeiKJ⁡);~i95<^ LNtgO]h]C#qY.Y%Y"\ZX\4R\ݝJUh@m~),k9L` փ1y71|`*}[z4j#:Υ/)2[/_,}-vϱ-*vCPэ5 7D3sb9F ljfA_:G`l43VO6%` X|_q _ z(,ض3F"lG]vR n"CM }݅%^/ξz7骢+AXw[r5Difu Gc(`-dq 27os+74&NV!m+NlQB0(H /݅H\S*X-2-ѯK6{KZ ̦i ,9\ֵF#tH:#bb#O-.Z?BLR]dNI/(򬊷cW #Zfk("ڄr /j85TS^?WDfPdBjڮ%NѺ㋻EdVL ΩG. 6CR{$$_>W- AnۚU@#)Z9$ uA%dn9{7f.t< c[. :u&A | ӵ# ˒ϒxS5Y;w1) +ۉ9W),]+DDˆ1.P>K"41k:3cլBf]<,FuGK.X$@Lohełt d 3)KPeK%Au+)3$D"Ln&ѝZEgi\x zQ:T2ߌjuOT.)xűJhX$ NVk䦩r 4dK/sI z.H 4!It;QiCs=bAL3J7~dU 2A.ccXP3P4' C#LBtkIO%żѷj WeFiN ~RW *ʦT˝XT"vuY},5`CWSQS }ec+޳?nY"iL.42Tf֠mRT<ɧj걦"r(7LeL.H$N}aL^ ˫Ad0&RfdAv][<~ܖU fNYglrBWkw!mj2uLZB B$D<}?aT_$^։FMCǹE de{өSia.`'`\YDDShpoJmrdFjbյYhC~ЭmRAs&̓ub35NkX_HmeO $fxQ6:`#4Km8wNv&,BpVD3cvcD$@D0&%FNlpCK^xZ?؝4yHFF]_*q$m#&ră-٭RrVaLŷ-fؙUim<)Zy?5.hGWl¥4YlA@>.Kם6oŸYC;+I~h/^dUUcKㆄ@:+{K\dAJd~%OGt⒧?Sv8$Xk)`A钭Aߕ* QT=C#] `;GwN6 !,E!APR-pT*G1dPc<.A( dkw12`"h 8C;U"UjF4%?1(2 ;a1S%lJ'`*CXHq}qyp/ r=o=}aDZDWdR=EܖB`~AD<$C SuXN('jVUM%ǗP Fìȁ@ >"#:F `Q; SY,t<(P៣tPRR;%PW.#DWMG+aXTHI=0 :AC9Ád6!`eNb\E0ةhWsT oP|m)7 rZ#Fy(:9<`ɹg1<Y73?t«FhK'ڌo _1.|lSb `P3.$Q1?ժq|" Rh?I$rAhT(IMm}ŊUgv#ֆ`Z @s)4Vm!Q${AmũٲgR6#px&2BN?PG 3c}rRyg!n``k b0Hȭ6N0?un&-=΅N/r@Y;^8أdoWK s(Li$@9..L4b\hV!€bWm[F$ۥ %l-91CDCƼ` <$)mc:cW8jݒI,ќ+V$Q ^¥"a!>,E0E؈(-6CND[{Q\giNOi/ `q=L% BMh`} C:. %T!R/DV5Jܹ4%cr.^ N/E] @PM51 =. f3qY=iĿ8f T6PMU񙏏ЬlaVcvj4g$#x>.iaptj ᜋŹNTlkZMRT0Q$%Y+3, )a? ocBH5h35bA\d-堬!L`H$H#8V^GZMΧH%0^+7Q3ea|#L,E=+G&IKit Ahd e" B/n8T0z"!ɔjR^ k>GWȺپ I w |ʪ^Ps]J,=d S0!fTLRفnҾP6(qT6zU.J97*XA]%hN>m#g]%Yc~~kXwE%l}ֈȱ"pJq]8Q-#`G$QN5"8O-]xiyh!K'CHX5m6*jP*Y VQM,U;¥?kX U-dZJJfꡐ\$<$b28F _] 6 > [ !(F"~Zt. -:5IhTMb*VG_ }/ʬ=nB=$"v]Pl!>չ >}`0ƕ68FX{^ z!*MayJxXQUz] fD*\" T.&:j%Jҹ!8Fp7X~˻IhmƘS6 zqiq]q۞V J~6yȦ!efS":$Kt#s#H҂Lh3e5"ɰS . nݜGqUn}:*G&  ޿##칗 bE9NtaJD'fh]vҿOutaH{VD}HBjg-49\2{4LY^y8bAmW~+٣T҆!W5'Va Q08P' SF)30~9\iMF/&V._dcX012YB}nr LFttHW-|߽ m hy4LZx IRX, ؼnF c-Vq uYQo~XaGX'5R1툒Hk ·0NHԺV{W6{&. Ge;*!y[Av!MY EP̕P\Y9\:YfC_grRDSdY@^MkzpR~|nC]vNR[}U֌ҟi Yl13q-k߈ћapHDEJ-,Y*\i o_iH[a`=I[2 uL =z0e'N9ZF9+R!" &ZلC(R(a"mbG'.pVst^//0M(, -O)iu(H( qry퓂0 $x\0 p =0r1*YO52a2HX7ὢH'fHjwӴg6o@x5.كpy 2At!Sx\xe!,1DH"Ә`.@tx0NpѺGJΕ]x^cCf yz yk#8^.:-D x G&͡q/ VXS:墛航E?P(3QؐN=}22fK@9fC I%Pb_| )tާ@;"YYzJ6XLMb&aT(A:;͓[New!4hp2֚v a@(e"~@]EVDDl)mJg 13wXPF`SH:ēciVlwu;%_1d.BkX!K1@PvwAT:(4)i^nϷIbri$55N2ت}EX D bS"GaÀ(;LeTahmggR-DNjOZ$?ol=G8s&EYq,d; <AoY7 42]ᅙWͧ'^[U~^,a SxP quy%PMBp(0Ց`3\Rag4cv # 9߮Q `=An Z3ʠu(Ch8yBWD4BEbELHهjHLlQDHhk4q0&Tew1NS|#i#7-Xij:δu%v%~><" POs<.:"A9E GD (5aU$1f4${ qUS@f՚u& "X-(p5h)&T U!,j"?D#נ`SBRq}ܿ&ۮ#*vGaOLHaA$4p"WPZ襝O,mNWuBqFoZf1cQtbcQ9 -M" htFxpq+Sp@+0Tk-p؄j ΪڧT-F0I6<ɒ}`fʁx_z[A>Q,HaRQ}!U c.wde$,yl4?C}bDUH=m;v.QF$$D}ɈP2Jx,Q>gu90CȈ J&|4{QΰƈiW"hyKˇkc#Co1m2Ut>!MrZf '+"MFց8"!ݙY*D^ƒޞOEXxy@[(;b-QUVA &h\n鞍 qf-}h4>˃-P&6ef2B_^`72u6łh; H+GGKU1M@R:O=Q I :m*zIe):.C`jc@KR9Хe=Ld)$t̺zzV'f&4n8nB 3`/Q|d\HȨ=$ů|L Y ١PT4uw`D4G*yp) `yAϾc Ӭ%EcZ5Oή[l!QL X؛NK cr$uPIkAm#@UvF}&VMK( +o'< ;&FaT%#RLf`/ 7HxZ 1r2ĝ`{u|n3VRSpY /zxc=q8 `2ÄK9$${S)dnBh`<.L{3ˢ^^!!.lc"4zQ0/x[⭓J<aT)ӵYR|T4V ?\kKiδp^U({b=8qj+lG-bIT>7"k#ʋ+NB)FG8)@_R:ӠɎnv9Mx.{H4lIkxLOTf:$G~Y8JW:=QHI#ixۢ ,ȐķGpgDf`k@eBu`OPѢ'D2[iBq:P@G֣s-RD-0)R~=[H#4) /!'nq"ZwegbfOFv $QB#cdL䖇J:ݙI U|G;lĄz2L^U B(Du YN¨Z&K-hA"^j1ilzj9ٙґ\zx9@BfRbkXOObZift'0mgdލPbڂ19eH)_՟3-91uQ=YgtkD\I#țVdshq~ci(R6HQ'[sPȵ@/EތS7Bl48KU+& O$ 2$O3] ゥi\o.Iϔ̴}M Xe m]CfC*xsA 9+r"6vӫJs?.1eJE,Aə4 Xޚ1EkeDDW<; AqYG4pK~JK1S1s#f OZm)$2O:aIЕW\8dŻF>NJn2+07;XO&NJBһ[3S:S !}Y2Lp5ص&+vA o`^shyi]%X"(Vz!YG@vk (j+,k(D+h,!H,#6YWĥ bLB34u$/9m5uw-e*O&j?ĭ=Bu#-XKJ^J#lR$^UVelUVl}C4e"H_841F0R2_w/aUyzHR\[r{rݚ[iUYZghB BQŠ캿JLkXD[m TIm Y7+TDZlwu{4q𓊀w+?ala 6Ea]Yu$䫓֣α`pgRʱarRR(1uO&șVݽ[ѷ%NV.%5mD3Rv PXfb!a02b9ԁ8ǂn2S[粶- ژʎJPW!,yMgetj{&RzTWֵEtdnHGdL_}gOa :p^SLqrmaV⩯@(YU&_C.2*z.ZWF!QdգDDN`KQ$'r@bݶ wjLz4YPYD%shqPT}D- qI+@mNg /7 4l1"F -nw4 eB{sq/*7lY6kCl}脌( ?wIJQ x1Y3Ѝ,À;߷F7pb 6e$rd358eEw7 _@X{}4,لB}Y !i8/ !ߐ`9E+"w~Z#i\(l ϟ= [GqεA*0Ѫs};7,P1A ( Om j@RаQ{+F|##6,ӉQdD(륡<`,&Cu3 ÆrʥEh!?3Q>T4xf#ZrcLK8@m&Q F?Wnm L  .DAGTcc!WM;ǁ@;[lQ{ʙɗAT9q@f0OAT#/CJ f1PpkEG9Rn^if.M23R=f- H" ec* nBSHH1vȰҤ>84, eh0Af7 Ax &ypf*7 /֊61;}t֡g.*,k*E8X+u2WDPp9vZ.s('w[H/^ԿeY5,F L@N! D ջGKO]01Iro.m@ϯ6(8 ,T'l WR3׵ HR05O]^ԻiS(O،d?5GFĠP C)<~%KL'!o#h#11\҉[gRpKex<W0`β< !dWL~V8\.zU )_p C0$ W(72ۼ,^Lo>K+d2LB,\cn$xx XoJ}1Ze CGOFm[MXIwԣ4)^ @xG-V+q< a$'kq!5"&H RJ[ fl_!]"H .m(Q|*!Kxa玵*@{MH*"5܆#SX-|t;ȉ%ւ+9dg\RR@xT!=Y9BQnќ#CF, @07VcC-ưNġ#OD# 8ػ $@~u=(?b$ln>4dN -G<B!~. - ñepi*vWWP$ tkSlJA厸#oh +\*.eӰ' h~z3Od̉Ee@3+Jzڰ#>쩫غ5RO;$JiM@+`ZviotU1>gHjƋ, mFㅤh˅%l s*3 _Re歫,4DʞFv H ͗7-> Aj|d"FPFrJ>Z\! mpOӠFz?XYQP%X;o͗2.2 HӃ"w5X#E% "V9Ot8)v-+YN8e +ƐGmDj'*s6O|*$oTF+*•bAk Ǥ DѻNj筒TR,n& <r%ӚoFB6yg+Snn7Ԏԡ ;rv Q ΄+1jnJӼ˫Qd٪?Re+)Dށߔ凥3o^C(PIǬD3\NTlۊ~~2NyYCR!P@#2(5XĐB0KRZ&UKC׍dD\&0GUH9wZ 9A("}}x;ѓ3xQU>ZϾ]͂3ewkUKX'?ܩGF pQ}lrԡ CY'ã|zN4씡֐K,Gm@EWL1t5E*MlyE;cM&X,JѐLF\Ԧ}l)E!{*mu?-ɍ[ԹvVev$ZU+Ы3<mpD٩@e7D3$GFP,=v~H H3 ʝjT9)"0Jo B1ڈW\mᗘ(bEZyշ\ԨVc!J #d8wxQəN!8DمCgFō* 땥Xر{H~)E16Q}jzKpN~׿^$ u`=[hf~be|;\N|G Rѷu!x#@fNF ԭhBfI6\õgREO H "]H?NݻxVgbZt9Kvc6IHU$cQ`WJVD Y 11)%eΙBjځ{ UƸJHMag92 1.٠BM Ha~T<ٱdW5c}~t=Jq-ok"D !"GK)YҁއZ9s'Ή9pum $ jLUHUz UىMߦդƨ3(Ų u;+rݤjǯx0f 2gdժDL /b3+[9n#P֦G 1,^:uŠy2Ubؿa-'Il j/eTm9=Góމ0͝ck:Մɂ8(n.@%.b(ЋDb I0TqXn TeR"hBTd4 X>feB n#J љ+it`\Ǫ}f ,w깄!7>M8nO*=Hl~yS!yp0 $5za}XQ+ ζxVPTMqy}hOxRV([:uy#rC(J UVcz8ph!jkQ $lB߳+H؟%rp M@'^.#mK|Muqx'(fʂ7N@GeS?d)B P#.Q7d>qaOfLR lFY ܊-PK}pq0HKСBfGBԃ&  "3nB*ؕ_qKʝPr?>8Hd޵Qw}ҁhnc.T(r$`N;p~5^@}XɺY ^( Ť0~i6s ,YBbQP+XȌݙD'9! Q& RCcD8 ZG\&/>v{zI8Qpܩ($MOY[dQDYm'}E5F]E8PYJ]oGV Ht/"Y4r ҡ0eLDS @PZqOak_+NM.g{04sV*h9  j.lJl! .ǿdl\΅SF$`K>^]`tdžeaz[֍Wɵ đH)z"tl _;HU7?t*bFҿ N-hmʡi&l"5<.܋"ZfN R+}pS2WQ&=G]<np4|~vSCy-&~gxK"6%ɼ$"(F@zSb Ӣ,oe{ji=,r؂L&j EDi8#^&AI^骭m Q')p7Ia3%pΓ"?HC-$nyhEuWTYeE샲E7|c Iz9C@I<8EjK$IT!?AÒ SI1Щ2ZpI]W W/8SY%[7l3'CK_9\er\HƲu1pDDӔEPfqkY[#)hfn íЧS(6Ee<0[mGdVa4:m,FH2*q=ēeT_ P "z,4Y2tױ8Ikkjz9~MH~*[Rjʲ0gy-KjϱIYXתyҊ3@_Wni軾 `-B+r!PHFoYAtXI$c9RDE9 -{<%9~Ela~4ZWih 4˞P8>)}>r"`DR@(y,*(Kl]ߝ6̱h)[ p>le8E2mq޲Itek,nj88$/20`ey~yHvP 5 !`L.P@PtG[酁%mI*KBi~>C]pǙt| YΔ;VIvѥ[vz0 Ϧ)y|# XTNR.B+Zw`A}3m(&D2 ZWʬa!SS"{8ϪFb#d=Iߩ]#RSjQ'1H8Ў Vi _L%u#%QS~)U a6HJ9 !A7TM5mADe$X[Xa[ jb@ȀTAQ:P &K8EERX-FUK5^(7 |{̩ jC DG-o=Q!Ӆ!Qެd"EzŔ2`=c‘/ESDZkʗ^NdP#FK%$:﫤WB'N4 2>m SM V#4HϏ4?9߆3ķ [궲Km;r(r} 9TN~,aL;JsH8sXYJ*[m>D|Hqpfbw O3R6qD'&0Y43N؋Y%{F5joe=Ң`$Dt\2 KZV nΡ!Cjˢ ] wߐqjTVBzm8B!)jGdyMRRDL,2*L\L\cKX3^\B4#~hJ1E H%Vړ7Hsi[%T$A6ն$ȄZ&" '"V\J Z5e BA O{b8:6hiLWc'}#(b9D,t1 ]J*:>dgr4?A8ߧnS5ĭMG+jwv2 jageI:r:ZH7:Q DH{=59Rqkwm ';֑Yt)ֽmjg$-jqcnъ"X/l%8v{]kRpc*GǭjFLjAu3d! _SeAv/5Ye p7zhWC?1M GEXP$uĚ~-+KBWVqM\@ȚlcDd(00 z 4d*gb%U>w6hX4 usKꮭFKQ}KpV\& Mi MP-EDT!HA.A`icEbMvgUS֝D8Qn($JA,9GFo#ND6( k ,<8w$Mw*SYّ'0<30N7g#EJUMΰTp'40|@X J"bXfEA'"Ebz]~Ӕ psdЄ)ބףDwO8e~(Skq},FRעtGIJhœɖLW:`)zk Ug^z h  AhF |C)R "H-y,.dpj1{FNOfEWwt젤IqnX4Cg*Zȋ\UUѐˍ>`Y#Pƒ3Zntj5i)GCT@HcɕђtaMͥfa2^ 7A'FDmDlMH8D 3.a Mb1]6"Du ^02Cfh6#5ȅ!P0&;7֢iDL oF^dآDr&#>m$MZC4EU2 b (Ϥ J7MmͦBteQķ&ڦm6&fon| ')P#R!J%&M6Fe5Jvl!!:DВ2DmDlHN0Z!<umY"$Imh$inȒ!T茖D3T04n"Zy#4JY.6"VNzIXĊ8ƭzBfhMD̍E GkiTmJmOL\Q #6m#V6H#;T*#."X6D Ԗ /(x1635MMm5LMLO1-d6P&mb!="F?grUAf팸im"ThM9Eʉ 4m$Ԃ%mթT=fbJmRmN/"dDIPRY. jUZ#!D1GL `&r'Q=8FENG)"6Ob|@CNN'ʀc@)z( q2Xz'UUUUlJ(c A0c! TꨜOb*q1!2 4 (UUr*{8 Q@Qz@8ƨhEF@ uAvܪ]KtA (ib&rQ:Qz'%tNUSe=XplD|ܪ|S)蛂l F24)7)ꪪ'Kp qQM4S'UTTA ʨD 0DQ NF6!L)cQDp(uURf c`D:#'UuUUG)S!4a:*|\)bz3 + rWUudS!Bz'DyD1(=UUU\WitpS"ȠXETUUUUQG*Sb#`)BD:nB"3\ CQ@ CUU.  aCF6 ԉUUPTb/BcdDuQ:)AG2+uQ-Qei%򪪪YC1:UQO02!d CFN1J L& |!G@ c DaY5? `PB fp F4<" 4@> ^HDh!$a "! @!e D&3a )L? BH`"T Dg&HB"#1PO͆?Y+( DD!tYR%dx`0B gE PQD#jýBl." DHtB_Noi! ǧsYͨCM8Gc'REBR_$Q!&ن!b02$DRdDJSႄ )` ` /IL~#H,zfe1V@P $Di5?b 0pC"|f0dž0 # a!ɪ5!:,5>_#ሆ _8q11ì%#0c)*?#Y5e&G9ItPI_1sM2^ r3Rc%/C\hji(-2Rc<*&o|v?+B?"IRTR"Y)e # IZoMNyޟ+?H<ݟyN*o/*{dQ 6ϲVJ3^<<?/fj/V}7f_o\*rrw7ʓoʝN^^_TϿ/5%g/S/__l5%w7 7͗//o6_/lo//oy_sl7;7g//o/_=?7/7y D(jUUUUUUUUUUUUUUUUUWUUUUUUUUUUUUUUUUUUUURꪪuUUUUUUUUUUUUUUUUUUUUUU.]UUUUUUUUUUWUUUUUUUUUUUUUUUUUUUuUUUUUUUUUUUUUUUUUU]UUUUUTꪪꪪꪪꪪꪪꪪꪪꪪhydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Hat_Closed.flac000066400000000000000000000224011211146647700254720ustar00rootroot00000000000000fLaC" @j>mBeA( reference libFLAC 1.1.1 20041001yiN !-8CNE{举#(ځ)1$! (lJ +P##MTb ' &֫ 8G0h@j;n'@_+ DV@$p$P!@v`zӀ {. P\,ƪZBS-@H|&V H`_$+ BH>^c/hKxC!^4?r a H<)j2(2(W+O]}>m5lba")41WV4YP^$,I@|tLV# ؎:78Q~V1᧙߬)?nA:Xf1Kf^Xy 8+ a:/ y b4:dLv;EP)p:0mt4; Ib m9V h˚щ`;GZˀ+tX!âAj7)D': ZOI]9iK1䦝T[X> | f]iIڅ8~&@HHEj"> h=кBц6{-0xi7IX"lErKI>96{#$dtP|A 8kt𐏂 0A'IR%ȨQ0Β7)<å^a >fUޠB&66>.Y-w}Q,A?1}z]x;LzC|)X Eb".4WdY( 91QokIn!cY%EŬ!1Tq 314ۛ"]HP+1Y(Bcv`1,fhd*#=V@"df^z(}Ml~јh3o^|r@ ZŸggͼZFZF*Pᴮ7S%lv?rc G_i5+̖V1M =dQn~C<]vS &U ;=o3&NqiDgB#0Ș!m:fDzSI[堍eH<5*㾬i,ӗVsl5a[˒wIk5iȭ QIHA%='$NXRx~ݿD)VRWۙlokCLKr~)%.LLfzXLQrr \wfꖦ-T~inGNκf]E@řjEO.f Ͳe$i{ٕ]X4*)͝ [Y4OJ$ȊMn]#KeMmqI;c4:j qQf 2>+k_2uUD;S2:q:MV~R:cx`U1/ۿ%WEf*dT8=rh~dq f]QMU6 %)_UڔukM@H6,.}1ʫz3 /w'MNlV?A^b<{B)^;@jh/(b,+ 2hRU [ma@WdCquXSA8KuxNQ5YVGGSԵFU]DHVT$9IQ9`TW c$YV@USPe#bSnSdqKgTzUG-US͝nY]F$ZIm%AP!QVa%OSVmBLv]X]X$TXu_EэY^dG7GXy]WbFGIDFDot4DuA75d_TYG7:VW֑ U P$1p\$l fY3E%ZST) FI;W-XbV=0RV9SSD ZI,he^JT5WYU)WHխInDK+NVm^֔XN/Uu|KeWYUfKKѶ_SS`UZakSRձcQjYTW]X6U.PT$}`AVehV5ZLUUAZT/VE=RSqWYSM\L&9ML-CLVeybZ$Um^u#XVPquF^ZEM_DV>V[PuR\R}]\TYWutNEe7RZW4MNVV3^UIP%];[QinPW%P^mMV}$TW%OEGVWYTe8TD\SyXVt5XMM1BY[W5q.^2]ԤZ]YYօEXX%UhR֥:ZeUTAMXSGYJO^VuHMUIgV-XTZ%)WQ%WT^[V1aNTeqKP`LLRԕ%OYum6YmLReM[ZT5!JVQXd?YIRՄZ[=^OԵabQA^N%O5 ARe:PGP%AP$BQ :O DQ=OT$9OS?Q5ن#

    mp dKv3$z7e~H(iZ5Tǒ] =*GcjtΣe%ע QD1 o+dJ.dmSl ur%VֿrơZ|J!70ej hTܣe(KŨS- vVYFiw;꺦ys: }HhcF8TQo,m݊ dXL4:+lY\}*1diRnSSU49[$#zSgO {Sl'3ł2|ֈ=ÅgOX.>}O|~3tՀjܚW^QO֣qC6EUTW.q^Ɂi{Nc݀d*RbK9݊БdxM"2)Y8[;H~h.B[f<$gBOaC*"X_NS@tQd-ٜP(ТBtaʟ!Wu5)}˂$Zt2f-'3@U;b+b#雴dL(pvd=?niɝ9怢](ҝJ,᳢T/ $Oz֦,X WEL,R%^!`'dqc4/b#<p3^0 1qM: CVݥY樵 -r ( z1xHHAQr%Gn#PA?O*2X z0;&N 8B[qI DRy!NG2%ϖ'Ls*>0:^S-6by*> Zԑ$>XDc`v!ƭc(KVf?̏8m)^N9䤽Y<-$C/sWޠ jq-ÁFXB;aj!{^g,^m -iDƮ/3)%;r##YdffXC-Hr"ƾQ%zgP`c>̨ۘfW=a(_PjM=TGk!ژ}ᚃ3D= @"K'wRz5%},h@' 0u>?plQꗂ.`h:4& AE: N%K7Q!K 5W*k $"zU-Bp?u©:ZB:e(Ks%2]v%p1p \.@<>"a )[ZK+gU8Wt(@bMX<42`@x% "Z,=FƓ ǩZHqJ+AdVsЯG[t(R\QGZGAA61FfHQ,B8mX8R1Ttn7~i}we*E7v[^hke*X3WW)*UD8so Qm ƍUUJq*GKC!܋lQנ(V5J1+ xB??Bzti a >UV.ThQ"ɑSϹyN2󒥲a钢BO<(;eTE,@(d0f.%qs-KM-~iﻊRA+!%TnWϧjBvj_$Ymx6|jA#:潌1nt8\ ^ `ȴlCᐬT?*[%$|"Ma tJHXt(:WF!=gNcIB֓Ɔo4k15c#϶+[6FYĭbRúOnCY)^h,S'% ) l}K9'ȉEI @=#U}+$~)JzPY6BzJ9p!L;Q%=%;U+Ke6~Xe%.,u UEZ4A(NA΃@]߬ 冪(9FBǤ`rQSXt A Ez2ǠJ%5>H YWRnuKM 5A$x)3`+r/0⑑03ىKԿ^8VL-=he!_}ݜFB@(il3c fa:,3?BN0hyDA'%3@6f @--.GgרUL,h+R@I'Oxi䯒ܶF۞\j]zDIJ.tSm͓~!(,DyUg, (G`5A4Bv6}.89t"擽֗&Y,2XYm?%(L39PkD15tܛb-Va.ʦFL;\ivFw_a*lu$HHKEýF!x=XODm. 396TH ]t1TB%Re,TE57Ylf6:`*w͚fZ43JYYsB#|:h&Gf *B'`FuromGL.0Z !IZ8$;uLDKvD2$p.S;x6{QXyB[k(Y)Lԧ qڮ4rUHh`-Qx 3޲~ۄtzTjO@iTC%/<-@Z5 h:4fΛ@jZgSȁU!,Oŗaz;J0$A(h`DCT^/fL[{{S]`mm>Yd6Sj5"@:? J{P O)`ͻqMDZIR9+Gh*G=&9B!lDx?…{Q^jȀp S nTf*dfxt[ֳKe%g=$[N, `zl.^. Y ,DٝR6gh^ ?VuA4ie.Ņ0֢c>D %T*P7#bQ\*0GHZ}%CTEQ,Fkq3ljr58F\TU _ˮBj@yd6FV)$S W&N 'ȗ+Mf`:Gd44J8/ǔRjPC3IZO;}5 NFPwXҚɾa+\ܝq0d^- Q'*B!1>`fsjX EG0D\A. k?{Phlk0Ѐ#Y;NajRZTmxۡMк:x]UOu||2T`Hb2Kťac ^I ˆfwm Yb,\~!x,Qnƫr`+Vᯉn-J]L'"Vuq`DZN~^E8Bq.E3YI N.)ԪWaIn !&'3& *lvt4]u"&Vbg p^+̀Enr4{ dg;hw Zql,?eTqrl෱2SXg4N L3&0Rx H1.xMC t'#gm!(v`Y hBNu.$F "+I1]r)CvDoL~ ^9lIXUP_% +@ sJkDOT7H=)BJ2tR. eMUeac>q".';1_͕nwBiθ2Gn`e oiB0{r;otp n| +$t+n:Wv96Oq Yo\~Pj Zk$Qb #.$kBG=ҸO`Ƣ"Ц$@&r*NXh!cGystDaaZ,#NDy C)e9?N lM% I*v ?%#s&CNj v7b%" np"\& 4q“%_%T@_DܚS#% DN1spR) RVU:u:ح-r `_d%K Y݊?ț)tQ NH*d\Ga(>BZIT(D"Gx-~CLY0|blc!xwaU _$$!J 222Jx](6HDJY0%6Xd I Pz(Pà <b&[EQ9qJcsWYPpE~HCPMM.}DMG-x$^Lɼt?UA[2=`R/]H\O/u[CHR_.g$?^*,#ԗ9{xwMczcGorg)JVhXQ :7jW ՄJ ȒSa}oR{XI`ԹzEb Z*5qM,},\L#*`u-9|;"B0Pb ;b=̝]j"(ǁb)A5hʳ*ĝj` JE!1Qv%zӤGYXJ|+ͧb9^R커KIH|nq]jo'Wt#O,Ȕޤx ŜHhԼ,w߀r'ES޼Ze mwZ9KL<bEd2^.-@91I4q,?5du)=zJQXۘOWD ]ǹĮjxȊ^Nϓ5ֈʓ8>ش..I&_l!dصR|,Q&]RQ3}1$'܈ioRN*BOsR\:v)*VQU$/X2U9$EbOKUiC30^˫~qLm~Ǽ2`G2wbYr&եt.25 a$1cۘ7/QWxE_TpKoqH6yMSZU܌!i12$.(wfRVz܅c +!|t Ȓw 3K"=0K1N$oXc!רkqXi d&q Z2] x?RhYkR< =R:* ԅ)yi6$k _@VPN2/ h[؞kUka&5Ap0?g:'58N~5ɓ-.ƹv(̍֊gw1rx>e-h~צK7|m6p%RI;WnY6M>*r*];Tjz󟖉l;˗ c)=3Bc )J؈bP-)*.<[< gyEɍ.[RvZ03H y/J%Nbd>w91Te&,O$btrt^dcAbs.#;Ҥ72mĐ\pE{ɄlCD,,әRњ89@ B׊^V7 8\,Y>kBJ1m#7A IE>@[A>ۥe"vPn2NYA3D(PD>∿# #/Y OBaE8 T@at舌Ɩل" l7bK ֪ :kR3ͳ 7wk4pBc,$ulk7 $u9xI.\ c>Y=#PP3EdZi#L_\ƗBp?+I"]!YCrBTc <ЍAgE eC^!ɱ[}DR5~HF8)ǩ`,ڻeC7y? ld<B'?b֕cUL d*/+~2hޞРpJ+'-BXK$" MJ值7 ) A`J˜J9R#h7#) d҉4QZtY3! 8FhYqPF8W-LINUr\HqEQ°'Is+`,flj ݗ(<5m/xSd|wV,z5M6#ctz Ir$u ],-].G' J!j&)g> CdI&M1/yQ^h'W9ޙɢ wBCV$W6*ӮnD?5xCbBJЪ'FAI( njrk\PRE&Gԕap[ᓖaNf ZKuI@ů)U p۫A|5xA(d珚+о_+ gJo1&߫iff|h#<,uAt\&3pӐBŒ@٤1=n1_q rfbr4/XZ R]rKI"rR4d/4P\уQyGIPr9hwp3QVY0 H7*R=9]ؼE%:Y2Nc|V~EjE#/5bz tepJiɛQDVF]^ř̏E\>'_~S ω%ѩGec6e5@)]l-dS3o<+U(/k ZK-zЭ[s[E7ǥqNtdpE挖IRcEa,H#.b@vu PxӘ CӒ8$YD &'B"J6{P;Zbe̡34Do$`xdմ.gC`41CngZ8Nf$ }`:|e< tyI)-y+@0f1!c  1$ ^NSu]/ʎ K RIRE.GWdC-Tac詭-}ٕ* E2 nX8R|O2Z &e]%#-zrlZ Uި)cy1Ѡho{Q'ZܧgV NA:~/."]Z_RXCdۅӦ͕~~\HU AH1uJ~#LWf pMew)!/)u%J5VL"xͬ4_4mLPU?FyJ<ϟe\vb<(Bu(OLSI[j4.q#S׽9p׍Լa6Eo@!'\C/Mky; ,)L{'mh=—ѨؔȿA5cdaXyŒj+f8qGԙY/0)Z.IAdֆXFths]zas4 "P!ś)0F>]+׽O y(=T:SV~zLl^E.2$ru{bkcرtf=2vQolc$N1-+fJK_a"s}t^ MȒmcx8Is)&n]$b4OS V4i"hگO"G )+gojD5e/$yDHբ`WBzC|~214- e/`xz$4ΔL_V.P:͐ 4~! k:WĊޣy?慏8LAGB{R $Z'J*> +Dnj .TZbTaDx*$Wyh@#.Q`aS(0S'b|YPdMjI^ɯaH[xcɰ"loN/yNj(Ռ(5 6y2 %n@_#I㮡T[']_ diaV+=I^{m_Mu W neШ8\POIp,rev[S*=JU\{e&rQhK~(=k5tp7l&exժ"Q4`ò%cNaO$=ѿqEKܤ۹TN8tU'b;aL2YFr|"PuFgYq%HHlPÈD \ /ȪMTr!Dа9g޷uQpR&](BmYwRpH71MTn_t2|Re<1_NCT6{& ,$o,/ i0J) A x<*U[|kLE<0vQT';YR*)a8涩|T~z`o;zDj+)YvUY6,jI f)@W kCgE[=F eR$t.CCYZ) NmY`,YfQXFh A.'|)9 S45EeG/%%A*x sF G׵Ƅc4]O e3) 9&G`S\Tr0$6||)uYQ1{$B\ 'L>|NG"cRy#g$[3 'E8ex\fG?m<#BzY*CNLnrs@N[۴өBE`J/OFrL):uf0'F噆VerV8J)'lm ptaG(dgqKZRPi_tfFLje{)b]|ݯ `_D]]+_JxN{usS1i2ѧjIX×fs'Nr=RY'vČ8w-*Fc־b0"O&,}VnrsV/!r+ von? I7Su_K%_7J㰋c`t|) % D0E+~0jҡt=6l:t*],f\QC[Deh%;TBQ@4h(sT#؁"U:$L:[$ ,:lYL6vc6 M: HAɒFPZcLCsØ!Հ Rqb53P3!4sKF旋svY,S"W4O ['E׹P#V)9 O Qp+8GFyBzDcFF аF ݤб R 6^V pAiB1(X 7 GOӃ6oY)<+R4*V2=.#d Uju_2N>V"IFOKE8H}ܰ"cB>+.e_-5Tp_23Ui;Wșr ;`=acie5S6uZM WuQLL @z_Ysqy3>ULKUU ;i@9M&,tjNtq)B*xXm gk)G *~.ReN@=*$>9HԜJs-##3G&5ܯDh0(ѳ=Y5N=%X)y7)5w%pfrMŒ]#<` Vp-h]τ&{W6猆>]τ'JvHف$&Ԟ]pȐrc Fm gZ6vXHW J'a1#TjsK qj` ;='&DԱ/'eqvr\i"1u[UB!W::*%IS\Xܒ^9Dhq<,\P#~X`jJQ{{v8~(#ig"z-ߋBD0b.tQm@} MC"5"|)iAuRkep؇ aP4I!9#6R32L:% մҋ(4^ۑgTRHߏ?(/h2dBd-.{Iw*&{xY d }Lf%M %Ii"-X[M[X6#pFNMNT ]WA!<#( &YkgA " 4I=U #^r壗5uШ`6wM0h *>˅Z,6A7'Kv'2C\ 2P> 9j&,jlj`O\`bQ3-ҡ0M$p.")mEsdC^:a恐ӵ}2ZL>I+8wahdBD|rDJΥ"}%LxHM("v]3¾z6*[K// ;. A1QK=ce:({c6Bah|HHͨDx+o%VđF\=*Ld<QҋvX'e$z PY1I] .izXD.-H e/DJ 0P(5좺'XAxygDȦA% ؑ:-z$X܎ۉN7$0LPc8"8 |V8#6sޣcB5hQ FŢ>y⓪tقp ͗0'dbHydjAm yI_"fR nzTIc~a΂ AHℍ_a!   (emR F&~!r&+wjHp@0 9>8A p[ F9Pcp!Ppn Xі1您C4A1k"85 [!LXe jh$!Ć-R D8)JH_r݆/w&lG#II%!Ia y/k[dā+?ijr*"ȡ)TB;2=O$ =J$0[!YLg&:b:!jFN#ܛ3+(daEPCde MQqAc@PG /h1 5Ģ0<'_i4X1Cj! ~"\p djEPDz(G$h$F\Q%H8Z^ HFH@фI! HZ&E˂,V(JPe'0IM pȚ"]!l_LHEE r$VI~RB)y"蒉 VJ"$D-$ HLNHHJQpN?c!L 7LHI $BRH@ 990L5Q$%&BIIb鄅0'! KY I8 C"! ;rP'2JY3?$%fra"8C&Haa L9$OHHCm!$ +OI@$$M'$B^d!8I$I$y$IC5$I$I$I$rI$I$I$I$M$I$I$I$I$\I$I$I$I$rI$I$I$I$LE$I$I$I$I$I$I$I$I&"I$I$I$I$I$I$I$I$b.I$I$I$I$I$I$I$I$I&"I$I$I$I$\I$y`jꪪꪪꪪꪪꪪꪪꪪGhydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Hat_Pedal.flac000066400000000000000000000245621211146647700253200ustar00rootroot00000000000000fLaC"= @KsE >l[*r( reference libFLAC 1.1.1 20041001YCxp#_Kq?834u%+tJj4bzkEw$$gBfz)v8GBjdޯP٫V,XM3gl!ABGd @b𳪱Ɉj1|jEX_tI6ȌYHbB;EncV%B LE=JxhU'!<k:?vOue EOIHs51 OJwS 4q)~wJH^73*38UZWSG:`(1 +\"J֤LP8 c!ppUxPW0<)Ih!_E/qg;֑^+kԤ*nMEqi-c0Jk*v,NKxize^fCŠJr'xuh$/6 ˿E Y%:_2Hs!7ӝiL.?Kl^H`Ijn(\ nk '\4mURQtҖ]A_Nh|Dc%&Z5{N7рM)c{vy2ͨ`B5jlNKÔKqnȊtOwg;R\UJ&e^gB\sFFkXĂr&e+qrrg r˳Z7i*Ӌ%8T|wE \E ,Pyb1hm*pm_I@4.,BGgd]Z xLP.*S Xm*ǁL2P1Y$IGs&QS,Ug^(WXƋbu0H;c*)<. I7Ka8Ҳ4oCNߑ XmEX1%Bck`eNLg11w#4̡ kw:Bj\Lt]5\Ϻ9s B)My[>"I>ct:PQfT'"l<|ukv2ѡ-^n֑#t )l 0^_P#6&OL"4$Y%"p<9Ng-a2'ȦZZP+wM-}u]\hRc!u:EsF{z(l-]ni!$Q)6sLsеCfm)[xXKA:S ynꍘɲ_8F>J&ڿ"_D蛎GeI&QUԡ<^@MJ͜$qr2x/z9jh]u('O,!P$vsXGT 9bF(._iDCLZ=v@FV^4nF'qnzS_JI2;nmlm!dG - 4H_CfFכS+XTe4G6ȎK^evhYtBlѮ1l0˹:E׏9Ww٘bb=Qn/ D!afѻI$ cemޯ4"}Ȕ1=-"zKd5 //d 9TTcH@-j!WΑ@gdmU0dgBr, EĹAph!>JkSQ"[iDjENoHQX >б`NҡO&RQP`&SJ*B~%WLSzB $0tRFf@H_/ @`Y= HO łtdE@:?bzOނ`x_RW/)$ e33ayqh-UE;'AJ\SRF0ݬ"`Јt,*$*#F2/)6r/EaAqIHռĐf<4`<;U,zJ2d3bC2`l(3z"D'gSaHHz^B6F JDHmND*3!HuبXpN1K Jď.!bґ9c\|F<_F 6H"bP|VT!5;=59 TEdbqRsJSf$'b8-Ȍ͹qӓQ+ R"@LnDT*hvRXdP@nL%&^HrJ~t/MBn$$tL.*7,lpPh%PHFbbtC2'$%R"!"#! Aj"Z A i2R#b#՛ HE$ K- 7d#"0p0tHvdдXܬɠE腃qbBnΈ3,>;#\N&vpJJ^NNԬkr$b冤.97~VjNJ؄2b#G_##+,xFPQK3'MJ *&"6x\쬄Q! YI3RrrG$n)&+$,tDDHFtؠыdoߔ%,2"#%-pj+fψ>()|`Bh+fd%nIX?&&!ntbH %$oK>vPHJDdQY#r&OI H^.,'!,t9KRGI*4xXB/ ~FF#R"R#.߾")%$~I+"O;zNDF+F/$t@D?nX䀌"22$d`yDhib uFFgP! @` %>@BfP# 2 p(8 ]P08 c"; /""G YQ.@`†pe)7šC0jL0Kq >.cgCẒ""Z˙QF$!Ī"+$%G%RTre*%k2e$r9LvD4MtjMiT&h]&I6mlmYi"m&M4m&mDIiiitmIi4i$miMi&MfKk6MtID鴓m6&I2I&Mi&M4mIM$M4I6Im$mmIm$mmIm$mmIm$mmIm$mmIm$mmIm$mmIm$mmIm$mmIm$mmIm$mmIm$mmIm$mmIm$mI$4hydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Kick_Long.flac000066400000000000000000000566711211146647700253450ustar00rootroot00000000000000fLaC" @kJuyyCPmM( reference libFLAC 1.1.1 20041001Y< !B!B!B`bL3eߦ&Ȫ$~NޗGY&?eFP)#e#h~񵕿rt/4orTMʸ+7!ZnAsY vy,&h|BbӰg=?sB0*xTDBf#=Ʊ/*e f.rI LЙsLұwH?0sǻ6Fk#vCCbz7N)}JSĥoyB-cR'4)!iGJ1R*mkeMq65B ݱߤ'3NnѤm"L#m] \%glZŢɇM6$W,@#Åe<G#tD \ZMR$"5-9"Q.%-g(l LH2lDz ).劚\rsdRRIR]KX#X3h 0zB/h4ccaկNꍠ κ# 3;w\*y9\+'wrX L6JHnG^5978'Y?/?-?es54fs0nfʦ H3S@l|;cGb`JbyTY~ 3X/e ڮ/RF& N ~VF4K4/?FXHB+RphF%N#R1cFԮ*16mҾXZzz=bTM&>{ 2C eAR"{;!KN(%& Lf$[1BD9vIYLD2*bg !T TI*yP!Tyc/W䟹m;R?7H2,7iْ.A>"@"H͔l:$fXn +y( v :1Y"5q]rQt1Q:U$hk'oo6=V|/^Rʚ2𩩪DDtUFD_J̉Vg7."kީMe~|q.MFWSCQq:A,\syǩ{HoI,K%ak//.-55;UhgO-N<On$8aڣt+br@aDΎ8cQ vv)qB0s pv+)0C9~Bb(a(+)(EC8J+)BFBQCNs  ct8!YGg$+jS 4+++!X XP™b!ZʊKحtVSU![]ڦ$r}DG$.H%.KTEo:N!Fz2΄؅3쨎l.Ccc1E!T28G .ACL09X1 A#ej*qb  |b8 x2pFYi!x̦-j6("Z!L+Mi::9,"9.vTkDGm''I+NR$.efv''SK[sW&ӓͥ1Zעi]$J]PR.O0NNKREj"r[m "'YϮ)-5ӤLr+KYr.jZ U192j02dRPģؿXHMq6:(e2~WzzZڈk*C&Hu tᅙf#&Z3tF2b!ji~#0A '25bk2;L! #& 0FF/aEb2kN!(L a}21l1 akIļk/Ip#Y-2$Y2Z-RUJiZ,L-*&^.a JJZVJ'bV#--K#&,VyPC  (đ|,&D0,Z#2FHM*XC"1V^.ZS$e$0C LDrN-:OӅk؞!2r 8 `@Ųb b֌ l!2t$p#CkC4i~F':Zhk#eɓC1#\1idbu8-:G1vŘM'^F 5OS!2hmdiGzkd\1Q< 50@֜C*s"Zhbe2C&##?/bzHq^S Sa !dL⩗p hCY.ZMhFŮ\2$!^S N&RF)'14,NqjTLXm%^ "tV!$jKDbjJDXZiT0p!A#apI:6EUK)+CІa'A60 +M+V#K-k-Z\ aHɖ!Me *tLe)H䝈b1~1 FSdqh&a 0@ha '#)NkCOS)̪X 1A2FC b I'F ,G9dV9a LFbB8!ibxOזXF&CB$0a /'# !2Ț2i^ M&^VbѬY[YhGІeLuL&Ӊ8M!F#V56Sa2l0ZkxI!@ʦSeb#/^4.AZuU2qCd0<妱meFd#-pV#$ejRq|L*NtU %behM-F-J^,ĘT#uDTS2M$#zXAVl`CNeL'b2dCDҌ xAR01q -2U8]Deb[E،[׈b2LFZ0CJBz'Av<& t -W2Z-rѤHF1j5$./&ZeNUL&C !i)b'4Zi \,س-2 bbMˈaC&F'5ZZrԹkrבLe'N&LKZdu f0Gbdb _Mb81&l#D\\zbdAyzkyi4`5&F#ř%F!YK0FF#F#zH1䵣yh4xxdbA40\HlH1\rC GB#*1V0`LD1&tZEC ̪e'T™2W8UZ5hLNJ|Z0G5bz\#/-//b5/Z^#ZZik21/K#Xd/KІFMb51/ R4 ŦbkHb^#=#"<i2YFzz'bVD2b0Nkq )Na 'Ls&D2e4M29!!]RKɈɈɤ/q|#..]5Ѝ&QF&#F4i'Fb XZŚ/IA21, r iHڐ`RؓԌz/S$ZY. AsJ #&.TXNNș4¦LS*Q:kq6ɤaL*qZu'Kx,hCYF&Zi2-F+DVXZjjY}'1%#Ѝx^F$r###Zx_-pAxXԽqz&b LFLFO䜓21:KdTɮL02Ui BY /T̵2FM&ZeeNIL/Rrb، .щ-2lF#.HŵFHZwx#J#ؚBI;E$bk`CqC VAeʯ)R2ʑ :!M59)a2ӉbPªiT0D'2L2ʜZRDj&k&#ҌLGSIX ڵhGhB5،Zz#KIb=, ^#R_!/A#5.=.3ijhLGf" SI1ODQvl:bFS"&SkNS"tʈe2dC),tN-2u,I:t̖]L[-SL&#IMq &Tr1lIҵ#0ibx#/xb,#Y,Ř2Vb8_4[Ic$jFF'.ahd#e4a (єOaZ8yLUN ʨDDe &+ʜVN[ ˥8LLipS>g]9];u^U]:UuUSdUUJUu*)QKR(*"RJ%QDHBH*DDEE"(H$A"Q"PDH$"HH$D"H"A"DHH"J"DDRDR!""(I! C!&3 98g!0g?C qq!164b8,bƈ"4hEhZ1Dj#1hE5*"Db#b1E"E,DF(Tb?XccX;b8=q5[1lcF8hbZ4EXŋDh"DV(AQbDP*4EAhDA5EE1DTb4DX0[Xccbbⱼv8?p燘s<20pf2BaL 030 2!d2BB`Hd!a 2BC!02BHHH 00$$$Ba $C $LB@d `C!2C!9 9<9sa0~!cX Gň5TQhFE,b(V Q8+E(TQcAQAEA1ƌc;]x?v}aÜ3!C&apxd2 !!!a0̐CI 2 0BBBdHL$HI!I 2Hdd$$I!d$&HLfBa$Ø.a3|g?~>DZlv=XطcF6-F4jFXQQZ,ZjEbTj 8QTQ-EXUZEAbTVk c{3y|s8Y  &g3  g 090Ϙd&CfI&CI$8HC I&C! L$a&B@$2HHI$H$I!L!I dIa'9Üd9>|l?oǾ6}vm.cm5khV.*֋j"TQ6+EAZEjƭh֊jTjcPcWw}z<39s3xNLi$L339 ɐC$3$d2L$f$0!&dL$IBI! $ɓ 2dI!3$339a? yϘg?CXxOwwxۮt{mE[kkFUZծFmkUmj5[X4qۯnlmk[~~|Ny9 rs2ff39&Lpə3$ɇ&a32rg' 3$s&>yd9s9ϟ?|ҕ{[wvw[V۱vkmommm}wvH~iϟ??9Ϟg<3399<ᙞfg9̜0s333333>fLg y93'|ҟ< f{wno۶m}ۮ{owj۷w~_}Ory|ssd|)<3d?39gO>o{ow>{߿|=}_?gy>yy939<~;zY R 4߿}_?y?????7}:v{i>????:o/>???oe?w?<_? ^w/2y jꪗUJjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuUUUUUUUUUUUUUUUUUUUUUuRU]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWUUUUUUUUUUUUUUUUUUUUUUUUUUWUUUUUUUUUUUUUUUUUUUUUUUUUuUUUUUUUUUUUUUUUUUUUUUUUUWUUUUUUUUUUUUUUUUUUUUUUUUUuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@hydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Kick_Short.flac000066400000000000000000000246471211146647700255430ustar00rootroot00000000000000fLaC"  @9@'eE ,$|G( reference libFLAC 1.1.1 20041001Y< !B!444SH2L]mrkU7Wtj]>kbKƄPcB|Wyr)\LMHMܨ}Bn v@~$"R90+T\c~H!_6Zw?|j`lLF5suc2q#=0\>`I$DZdV")xF0kN7:%Z^8hSKysp)Ҍ)y KVXrֶ58LТaW:R$ dt°n;JrcCN `ŗ4\XN:(|` pT?h㱷-h}M .e# AѬ5sRl. 2BR|1BEؒlC D\ZMT%XjF  د}$R8vm8޲+Qa sZwm=:-_VemvV&6HV&4e$*|˽yB*k#I7AedfZPNr5<+:;GcqX?;Gfb`£;[/s@̢9+/? ?wB@vi4giZ,V"±a9%sT+b5BqeW5ZGզ#)JhVR/_R}bե-DHCKjrRȵNږz$,\%0ZdI6b䥥IYdş5 .RK(Z̒)ȺJbDIV|)&Xi%&>RHV͹MStb͹hc EآY#%ւhav+$Mh|>#ڷO_>ff'iۙN_qnzo<گ5%[L&!Ĭetr`(\6L'7L/tp?GĤ@l`}%" X`5 zF H(O  }%a)6E CPOKӆ 0be.Uͷnˆ.V¶GҶ*̞'*2+23/QIU{"󼆕rIGZ*tbUR\]SA!ecN,e)q,cpЫYhU($V!BJzF /,&L6$a(rQZ?G嗟JJ.K&zk-錈Gk*'uY5UQ=l"mRi*T#YRz-,A'R]C,Hoؑޒbʄ%40$pX13I*Ki*a^4T 34hy!4Gӄ,DGkD(cySy*Ċ$iIҍ:VzQަ.JJ]%Dzߛ}n]ѳ;U;<~'cTBcg.vsw"jkz(rq|5ϨM./ al\T*ZI5k=Q%Z7X14C5Kc}s[' (q8ǰ QtL-ĐbhZ>QkCԔ-ͤ%űŹ%5_ڤlJ^J?]S5ڭ鈩DEFLNVDGM'NDR/zhUFR&:U5طjЖNZMw,T,zIrU[1ӧOM)4҄JiJSJRM)JSe)M,4,K;.u igJSKiM*R)viJttN44=:~4/_e_)|.YK˖^P)r)#˗^YrYe_.\Y/п*~_OOO=?SO?O4OODO yjꥮUWUU*UZUUUUUUUUUUU*VUUUUUUUURtWUUUUUUU*UVUUUUUUUuUUUU]UUUUUUUUUUUWUUUUUZWUUUUUWUUUUUUUWUUUUUUUUW*ꪪꪪꪪꪪꪪꪪꪪTOhydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Shaker.flac000066400000000000000000000227001211146647700247040ustar00rootroot00000000000000fLaC" @8f$WEI( reference libFLAC 1.1.1 20041001Y<` (  ( (  ( (  (  ( ( ( ( x (& XF. hRฺa/`v(!) aBgifR5i2y$z~%,&8 "4Y"AyR Ē'[mkZ+n>(W ѣ2fb8k=䕵זt#Ⱥ/aȅO!M϶?BEc:pdsa[r{B2sEI严iN@QX F14G̉qpkt-iV(t2 H ̗*HVAArBXKd_qW TR4YD'!cUˬU^#*i`3wCO0 % =zA"yeI Q;T@bBcrh`@;{v] -"!7RA"s>Q&ՔZ`D E 7s׽0s y]FJXjKźc=.6^}X7 YQL,E%eK.Ed9bBeFlw`-7j)RA8xE.-FF[Aj}Dpm. ~m9ʏ!DtM%C߹r#^yWF!n @w>3F|d.0 H*?.1I,@MϬM\/!Me$"@bv;ԴWt3PEk=H pPx!+u:*5R3fvDATAO!E!TȠfWD*H >տڶ՟jDbJ;( pEo_ڏN} ͤb#5Vq0OEF_;a^+6@ C *'\hN%܋KyLnVDX.#)l[-#'K Ag KT@HaKyW̑vقUmAS:*F:g2 wݡg~*}?4qȾ2Ypp։{ֿ\wxlҕp6֦ɱ( )^oҔ!6|vb b>(9G-.`ɤT{W!1'6 5:vWk2"l =DAmJEA(zB褾/3r$b̶J'qalJvE=.ۤ29e?խ[: ccmn0>_D|ábOVI"muG-[/mpvɩtm( }v>ZhuN7lefĊ T*z P;C>Yu !Uϭig4fǸxSGsw[2V~ՐLf=&!`85e'9~z|KF{e S?Մ3^-gQ)!% /*Hm_"Qr%\5K#Ue`X5՜犭saVy ReQ\ XiHC괽)t=,˱_CH]3qH>r3CMSwbHpȰQf+ɽrLjUi耑X<]l$e~I4f=Q4V%(ԛs >=O'DWOȤy@rhȁ:j)H0{`ozWNvW56^1՗EmfEE/(u3VƠˉQr"ݸYWdƍ?154*Բ.*+ʴpQY}{q={ j[@LDNo0j dё|k轇b"#T("Juf:S{6oj#Nn;XXUxQ>1קޥJce^Mά+(G, S@b fs)cS3{4Fa"p x'xQz-‹܀R-{VFVBm,GG1V<1WV=I ,~/FApBȎV~T0) Lk-J AQZ/NU::9R5TE` `b )"Tɂfaud&v%0jw@BE8lP´ocg s:L*cbJi$ZdžUE {eW$D)=w{F_]V+ Qw:'X;:D !SS,C93=sForPSiIiJXU24Ky($' pl!D {DYСr4L1QWR-X\]=;T/h ;D$odΓavԚ+}CJ;z ¯ޏ+#B/R vPTF7 Z1ed  Ai6І 0L@،0& DύP0x$L.Cb00Xg+(hPc@NMPœdE ]{& | 7,8 6I2n-QĒW)!oR'KODA9>UM<{%jWS"%5jMW1wbUnKtKUUvM]Uq_}UUkWUUXyKJeuV]UWUWUUZ\uU]UUuUj꫕W.]UUU]UUuUUU]Ujꪮꪫꪮꪮꪫꪮꪫꪮꪫꪮꪫꪮꪫhydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Snare_1.flac000066400000000000000000000234501211146647700247620ustar00rootroot00000000000000fLaC" @HzHQ69q]L( reference libFLAC 1.1.1 20041001YŞ7iq]>P3G.})%$ uvsQu`+?<bi`=G>8^!.fsa7O3PXnYȭ%+̖(~!HWT2"pNǫX'vU8 s}he00DCP^ D㌰vZo%;YVb hHɂ!n#V付Hc!DGYI|c7ѳ]K2hRB%um?C)qu7oVG4b` ¥(+M><4lOyNSVMNqJi頳qeFLr=}: EiӄN+TBB/#{;5UMc բL @]n\W>.ްDd9XTaOH187mblz ry j߯_ aDm֖T,Ky}2Q O*Һx$;, ɋ>IM @qhf&΃LN欕eJ6ղ(]I+Gd%q,?xE95s&NOR!mROolfG`>H |z1 iy1ox5N3Nbu*?-Ѕm- E5mug zh'%)`Ȳz..+HRBⲷcF43u:X#-wQTѽZ)'lЬ5k*eu캌V&NBa+2gzm?-o7@Kv+I\hh*5<[NbGu_rSP P-IJȊ|g0 ԢH%mlDF>IOO9yhfgZ}~ۤM:TX= ѱZ㦣NN5&I'|I[T꽶'K"s~5gXW!=סcj3@)L5sr^xΤ+pHE Iӽ~hEe EU~\˒աSsnKCB tD0ґ )ѕRZ..:R89w3iedciprcƢQ&;VE)0uffxG Jo^XEh=&Z^ cN%Rx!){C6 ߷B"*rgmW$2a.;˝=W$5b7jNʈ Adz \Ō՗8cn[5]-,XKPhU:^6@רs}!ɐ}Myk†)] 7JMՔ$Z QKmuS+9l+M1p.R>9ZHTxŌ@eѡ-4Fk)@dEpRI iraw- ([pƞDj 5 D"C1JJ0bGQxaG"պWbJ*8jˤ kOm6ݹ dF;3gKY? 8sCxUĞCb4d#z(o`q )q[4l!gp/UÆLۧ+(JHeMg= 9\|&XYnm\]s/Lj V1xR߸.R|f3W㲘Of޹Ƚ"jyyӕQ8=J<< K<8I-;?[{9M:Ky=Lͻ6XzJOVizSߝ!p2=p2ӾJpnΤdĘe):b 6)[ӲTsi4*y,9YPv Y@lwQ,&Kl:R{}9xa3K!cnx"̲f&yfͰ#Ye9# 'ؑ.W7!&ٚt,ƧJM*LTP rKVb%kzά\ EUE=j j:uakD1T~81Ğ?.aKԅoJ x&D`]\JCfd XDl.dUIZRdW02 SԶDkN@,xfJ" o{EP,B5fYOwέ _Fܶh)ICp&8Ր{&|%FDwQ$ҋdG<ŋ1O&%-ҢX2>>T9V-gX9QQ'zTrFfWۡ?8̎sgޛQLs}[1wdtn T$~_Եwzhb3_Y()cwc^k =',g{&?{E쭳[Š7cLůX\Z,wOU +KxOI))GU4]ƶQ;9UaS+#cmΪ@>~Lv>[w22 Rr"}f]zG"w&)jjE^1!Ex]ΉM"C/ s'D8IHWGUnxl-I++fG-:W&(~^fza?nQѹ7/K軕Ld 7Q`w޸62YoU뷙x҉fEas($ѾNQ&QcmofZyƾy+Au~b-}qL;rʊ犸⍠8㪨m3DX=}e$_]VsvQUvT?O8 H` 1C0 g1T&G  pJ@ 3  8DU((x pjJ0-C0g P (S+#`Ȅ&1"2!'1cM24V"؆BMtKPPt$\ɛFb2").ɉq!#4Fb"#hLАFddfDB"1"23#&Ddd&&DDDH3lɑ3dL#"dFM&FDL"&FhyfjUʺ+uU.uWRJ.RUUuWU}UwJ˪UuU]UWUWUrꪺꪺuUuU]U]UWUUUUuU]U]UWUUUUuU]U]UWUUUUuU]U]UWUUUUuUuU]UWUWUUUuUuU]UWUWUUUuUuU]UWUWUUUuUuU]UWUWUUUUuU]U]UWUUUUuU]U]UWUUUUuU]U]UWUUUUuU]U]UWUPhydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Snare_2.flac000066400000000000000000000225661211146647700247720ustar00rootroot00000000000000fLaC"4 @cryPR&vDkML( reference libFLAC 1.1.1 20041001Y<e (s0'LdpžC_)i+ܫ#!$Ta}~nI^c]t)ؚckBhK$>]Є$DI[8tnV< &hr>~+T3/-TX7[e1fh}ꕞZ!kY@#/X\.HP’l.6FnCF(ON3q_쇪) ACEe-} n˗[2=CئNBT:$~W$#ĂB'(B]o"qھK. -D[fq⾍J<0£J[v­[{s=HYSԡf_] ]}] e*2Pӗf|dUIU/Ve˭UXXQvpV{[>e)$uC<֑PЦ $1?&ʜm~dM@e0iRC5 ¯+-F $\iٸJlf]Iފs|ǜ KyA޺ڲTpѾhօJUN30mbb| P70˖󽎶+sT;=R VLJsT| Pp̭$pb>Gqa94)JEM`/zDE'в&hDIksRּq*_GP‘~.`0 DbCocq峧4b-F{yى3S^E<ٌ%شbˠwS%9 uӏ~nfSd[&@#$&ԎKZJ|xȉѴz5=ܱ[ӳ2YJLT8^4Y$tpt}Qv3|.6Rz,EDQ1!:fzlUOq}^&ք?kN8ᆖА٧5Dm_:O! L~ X#X_@ZgTRȎvVdݛ*7ZH|x겛H4](Jjqw!Wdz4Ֆf̪sWy5$fq<$3o4͞uFV!;5Jjľ w^PMnvQYw#h&yL KDXJLS2]}m2*U!ꣾd3IsvCY27.r,vzQB2uTGwޢTI1DwDOiPn_$%t %l7dfM:F#rXOJKy|+V?]~έMYY>qɿFT Pv ȑ\ʱjJܙtg؀(Auf ^dퟪ Zlct૶9QpL4w~BJ]|z|QhO֔u|W7Dؑ Sg f`_Sƫ/hXя͢D *9'Rmy?\߻2syLw#'i+O Z.&ǖ4F@SXt/}iAR,#8*bLH@@ 3Jb s `QubA/ؿ$4*p55boaԻ1'j60 !ZbB 8Q^,2) P^ה e{ s@mjxӒ * 'Y=I|Us!cRa ļnf)ě[AKPW̓ SY0q /˨ɣCI1Y*Or +KO> qul$&#W8<UywŰ_]:eN6L32p6y[Y;s`ZD9LF%Q"X:8[b*o$o=0HWhk/Zޣr1c$Kaeũig@?J"-2& 1|I~<@-IB%5l*sɶv3#Oˡ-T5vv?,(g9 og%oŎD3 9x7uBOe-Xnr$QH$]|Uo3RĮͤGIwg1:oCeh㑌o< dG T}FaTSDҗ]IAOb:z%]R;涏qX7/4ƚOZL$hDӞu蠋+F=sC>72rbDeČ4NƢ pYȈ8 bd6&XB_ElظpD I|(Ƭ;HSQ|LFi8q6 ].y[ ӧ!AdKGLI)u(o]f <,LW$t&ʋ3JW5:֟ a b]G7Ϲjfj9qDs&NӖհV/Ta`mRfB#YL*S\ 3[,L,2&LJwG)[K'dl@R 픭6<9My"Vecqn6:[ų՚P!ѣZ3gk_Tϟ r,4)(0?7\qQApp6d, #im l sƯ=GHzm:D-gM0yQ+A|[xٲI2(4!q,)A#$T/ ]DsM CDšZY[ClV$tZ(ѹHDe B9K Na(]֣+L$D)Fjgq2n'_V!Kky }JiyVȱRt8vQ*Bn6*l͋U;x4!7fL],)CZ ZОCE*/N+!tm1fi bNtZ]G ҦDyIγb.K9-ҭ/l"w:y#NV6)8fV)@ AH$ @8 @ (  A!`@@PL0H" A KNZp2rAY WϔXB`EU /L:y~)LZRAIr!*q Oc7Osy#eΝ:_߿^[ybXijuRꪮ]ruUWUUU]UWUUuU]UUUuUWUUuU]UUUuUWUUU]UWUUuUWUUU]UWUUuU]UUUuUWUUuU]UUUuUWUUU]UWUUuUWUUU]UWUUuU]UUUuUWUUuU]UUUuUWUUU]UWUUuUWUUU]UWUUuU]UUUuUWUUuU]UUUuUWUUU]UWUUuUWUUU]UWUUuU]UUUuUWUT%Vhydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Tom_Hi.flac000066400000000000000000000172611211146647700246540ustar00rootroot00000000000000fLaC" @#ޒ;;<}[W( reference libFLAC 1.1.1 20041001Y< %B2#)2eM@X Q`6W.ES&.2c>mO]2fͻt͕2T~2_.q|NP y.EfB?tgWV(+#+Yx_q+G-sԜQN,5f!7:\e:m'mr}ٺt.KBK<=6~|پ/pklL %BE&%XL.%*Z[KUyrHF"gaEsAuTtZ3 (QBAXQZ!#:ID;x yҋ˩Mwo׫2mW6&_t.z>_mp\%]/^ZtԚܺlԣzѽNgC2dBs"sԮ"P*]ʇnKaV+Jr"t: #3J%SU5}՝RʫyJǞ;U] i^?^y徕t)]R=%"x#VHE5lLH#" %3dFP J!1 Bqۉ5RݟkREltڻ[|yV c{ǴTU_>v-!W?Vޏ\ttI[KsYI$ٻRrm#fDh [!8Ʀٚ"CfٚDJ̜NBJї&'KRIGI"mo1d7{mð;cCdg~ sc44L4vj #Mе¬E!`,!B "HXPPHD(1BD$(DQ BIT0Li8&kb 3G m | <chh#;q !URՉ2iRUh/AX `$"$HHHH BP1EbK D&$kF Nt4?|8vh1bo3G2gsb5i^.FZC FUEQRPq$XahPDBBȊ($X&HR) #d-M"p*1P̜C&d6 ךkfL{ d Aۇ4f hA4f#e6T̥ ɔN%XYQ!X,"PQBXN $q+DȨ&Oj#Nc4t50 M4}1z?h2u9˼G,F"2D0*Ie2& `$V ŅDVQ!" QDLJ$%iiRL'TȇɔLGyNr FH;N7F!̆OiuCu1t2eTL*Ж."F,Ib1(YQbIEDZ,F&E.)Z'i.^/.ը1L'Mm}[2 t-'^鵺F#2NdiLLC׫#^bb.Y#$U0# Ky bF L0'KHEHFJY.-D2,(k WS':ӈ~=2lspΣ^N5Z: )sd4e5QZk4pCV-+%#e2e,%b iN+ɓ*dp=Zb-w#e},֍bC/lF#Mtb2^!&YYi I_ Ų)PA/`d\S"dEhZRd!Ʉ1!ijI&(ů1jV'LFN&N kLA1Nb^y<8m5ikN2RWF'.Ua|LS L'FFęKL9)i4#-, 0SdN&N(Ğ2&UTNq=U2Qi0AlDɤz䌼e8M e9Q82FZbtYuES%JbFŭkx$iLF]K!YZb9eֳOt:^#iz\F^^Y dF&k/ K'^-zH0[jă ]&S*eL#TF)bzִ^#/+^F1z/A5b&dɓ2^-it1 &1&db1kYhŗFS.Բb *]DҜL'TLɄ0TF&_ui-4ifz׬//բ ha4dMʝ'/FLdHdzkW~H1+LFK2\^M)K/dUU.2Uj211F&ZdbjjH]b5jxAk4NL'42ɔq219ZY2AMt\i9&HֲLV!a22dC(TLMdʙ4L]V5DhFh)ָDʙT1jLDꑑ6eM&Z2t^L,jغ֪ԵԮ_R'di2UUUKu&Mdҭyi+W)ZM\L#J8kZe\NMtNUUTʙS*e2eZd&e^\LMj֙45&M&M/)jeiU0UURꨝ.\NY:/&ZN&i8M&k#uDˢxUQ'UTʵ]*erզU^S+ZeS&VS+S+S*yS*2UjUUU&֨ꖺˢ5-k\\].ԺUR0Y5UUjU2VeVeUV#*UUUUj]ZuUKTOU.uTiuTUTM.UUUUjUUZUZUUUW$˲jUUUUjUUUTKKUUUUZMRUUUUUUUUUUUUUUUUUUUUUUUUjUUUUjUUUUjUUUUjUUUUjUUUUjUUUUjUUUUjUUUUjUUUUjUUUUjUUUUZUUUUZUUUUZUUUUZUUUUZUUUUZUUUZUUUZUUUZUUUZUUUZUUUVUUUVUUUVUUUVUUUVUUUVUUUVUUUVUUUVUUUVUUUVUUUUUUUUUUUUUUUUUUUU#hydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Tom_Low.flac000066400000000000000000000176431211146647700250610ustar00rootroot00000000000000fLaC" @'߱8QZ{( reference libFLAC 1.1.1 20041001Y< 'HBH( cao}(M:uhhFV#S2j'"Q!} }1nguhv$&R;o9M ӽ=wɡB.*sp19uoֱ#s5,^e "FXH)JtYN$sv1k+ bI˟ ('/'+HssK–y}FaSJ؅k() Z!Zr)9]:\UFE$E^D,3B<妅#QI MKEMzjGEpؔ1:jΐPش6-$lJE)"d @ȵ[s6z/R:rSrV&KFMAtrQ]2c%& QEj:QB ңjJhB=J?MM=1I]&:e`LjGPM `Jl0o.HfCp]/D0o& p Clp0(^>6 G\ (((-mnnwXcL\WO/ySm+2&rg*2&{shjQUY*UJ2|Tk*چ-ݤ{EIjRJx1rΥI!%BʥTyT **8008Ғ*D{%d4$,_(%[iR҉*f6$J=觑 rY:^4{-\LPd9S,Ou'o"Sy1Yrs*}RE:y2T˥*UO$Zr-g avES+v^!txC)=nv\ek[d$f.]u7b;dEbTI2q'Q/JLS[8KHS1ZIbSU5iUvg1FG$q1HIҥr9jr"pivgr9.Ӥt-NG#I)ek+oKd"9QQ9)l9[N)B.+/b8rxB謬TeenaMaxckh;n ^t}htۧMbtG'=o칭mktlkYRNG#Iȭ5%Q;Tի9"rNE7բene2RJ#le1I5rr.&RG1I;*+4dől&,C)C2!#˄r9pKB8De(VH唡B%)B%(D"RG˖,Da|#/.#>ʅ_BDDCOӈ>4iM>!OC=?OOO__///OiB_OB'S.Oȟ?O?yjꪪꪪꪪꪪꪪꪪnhydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/808_Tom_Mid.flac000066400000000000000000000171421211146647700250230ustar00rootroot00000000000000fLaC"| @"WPBRtgOQS( reference libFLAC 1.1.1 20041001Y< ⦦*jjjjji ` "< ^_kַV),֛{B|ig/ClI,$MpZp., 嚒MZo@_>}O4P5|BSx NxN6>^^UUtUZ+ b)aN#Q%9%j-(ô« Pa 頫2fQ@NJXIACLx$I\bHe!!TYCB\gmv}L^)'*S55 ܶS N=h)}N=a>.|,y&%Mh4^4y>NihY=PVmim-Z/_oQ)KPJ^Kb-h$Te4'#V):FjњFHB2E H1 `fn2 0E @@2Q c)@ݰ3`BQ:tAQ8ޘ‰L\e#)Ef)2I\9;Ƕr̲T\Evd1Shl̬v'&Flj3RA%Ba!!7(JIhs)6 ar3a$# SB$j+&%Ħ,B@`DNJZ"4DL‘zI#;M+Md-18/ȴ˂1b0##@e%"!XR&,P! (!RB0*(/!1Q0Q+#  axNĦֵ!M!' N5}dYih2?C1 n y= 8hM6 ! e58xG1.9*bɓ ⴲ0pbX pLa-L$BL"`%-,jJ!M0V^"eD/"1iF/b&#a?vb1 d2|v' GM9W40i_i~# f(dC# F\`Y,^ȨaDrRX A!aRX$ĘM$.BpCZb/(Q1eh4&N ´F)#bF xN I20^Gѕ ̑4dֳ'M\zCHd0C5r8=#Zr2teF#^F;U2d0C"Dꢝ2# C Բ0F!زC2&ŋ*,D0Ղ0)V ZH$ę2C dEMeIj[-XB=KAS8!t#i4b5jz'@ Xb #S^f}Ktʛ"> zш0C\ks&Lʼ_P&K&0Kq4]*!ja#02AAXZbL(`M,#ZV+ 1КZb0XX$i!2)LL5SԺFXe.T0LH0@C)螙fZF'hnYphȆ2]k!4GQ1j/Ib5Xɢj&2&NILZֱj)a '%b4ZԸGʙ`C&U `A!Dh B$`CHz*Չf!†2iԌkMk3SɐhɈ2^K<#CJ a5Cc 2jdbqhahd124Lqb@>y1$dP@! !5)Nҵb152)2&C ʗՉeF-r- Ȟ C)2!e d0a:!0Ʉ8Xdզ#azKdl\d2KNHiZG,FF- %_YCBL[(`YLy2eʼCBb /&R1i4HFW8\LULdʆv&ZhZ1b5$i _IЇFVVej ^!#Zh@`F'L\:dɓ&MR2#KkkZYZ1k1/ Đţ1F؍HčKzZ=CdbFb[j\4LAi:!TʪK*eZtF&ZM+\B5F'Xbּ^i5&Idek#PRF/ȃdvveL&Y:ZdɓtL4f\V]Z[zR5x.1j1-rع,E2Hʼ'-8-2e0&ʨG/&Tɥ2DQ2NBi[#$ъ^DrԜAOJqC ֗jԚ#.e-d>ZN'DM&TɓVNq:֤eZ#ZG Yre .Wkrdb1r1f-/LMJ4KF,-2dZU'U.rk'ZLLLN $i/=r4XY4!OUd˫Il5ŗ24ֵ֖5DRURVdҚN+ɓ_ܵd'&\婥婥I8e%5bKM&F-ikUUS"UURuQ9rkZɭdɈjɓUtT.Mqr&Ո.\^\#TU]*SJS-2)KZeɪ.]ReԚZeLkkVjeS*ULeUTK\t˖&Zֵkk\U-rԹtJTե.˪UUUULZS+S*իVZUV\rZVUjVVZVZjUUUjUTRtR\\\]RiuKU.MRKUZUV˵jUjUUUUZUjUdUUUZUUUVMUUUUUUUUUUUUUUUUUUUYuUUUUUUUUUUVUUUjUUUUUUVUUUZUUUjUUVUUUZUUUjUUUUUUVUUUjUUUUUUVUUUZUUUjUUUUUUZUUUjUUUUUUVUUUZUUUUUUVUUUZUUUjUUUhydrogen-0.9.6-beta3/data/drumkits/TR808EmulationKit/drumkit.xml000066400000000000000000000332711211146647700244470ustar00rootroot00000000000000 TR808EmulationKit ArtemioLabs [http://artemiolabs.com] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This drum kit contains 16 original sounds that were synthesized from scratch (using only basic synth waves, like sine, noise etc.). It simulates the sounds of the legendary Roland TR-808 Rhythm Composer. More kits from ArtemioLabs: http://artemiolabs.com/downloads/audio/hydrogen/</p></body></html> GPL 0 Kick Long 1 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Kick_Long.flac 0 1 1 0 1 Kick Short 1 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Kick_Short.flac 0 1 1 0 2 Snare 1 1 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Snare_1.flac 0 1 1 0 3 Snare 2 1 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Snare_2.flac 0 1 1 0 4 Clap 1 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Clap.flac 0 1 1 0 5 Tom Low 0.77 false 1 0.52 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Tom_Low.flac 0 1 1 0 6 Tom Mid 0.79 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Tom_Mid.flac 0 1 1 0 7 Tom Hi 0.79 false 0.48 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Tom_Hi.flac 0 1 1 0 8 Closed Hat 1 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Hat_Closed.flac 0 1 1 0 9 Pedal Hat 1 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Hat_Pedal.flac 0 1 1 0 10 Open Hat 1 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Hat_Open.flac 0 1 1 0 11 Cymbal 0.82 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Cymbal.flac 0 1 1 0 12 Shaker 0.84 false 1 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Shaker.flac 0 1 1 0 13 Conga 0.88 false 0.9 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Conga.flac 0 1 1 0 14 Clave 0.84 false 0.96 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Clave.flac 0 1 1 0 15 Cowbell 0.85 false 0.96 1 0 1 false 1 0 0 0 1 1000 -1 -1 60 false 0 0 0 0 808_Cowbell.flac 0 1 1 0 hydrogen-0.9.6-beta3/data/emptySample.wav000066400000000000000000000173221211146647700203070ustar00rootroot00000000000000RIFFWAVEfmt Ddatahydrogen-0.9.6-beta3/data/hydrogen.default.conf000066400000000000000000000131201211146647700213710ustar00rootroot00000000000000 0.9.5 true true false false 400 false true true false true Path to Rubberband-CLI http://www.hydrogen-music.org/feeds/drumkit_list.php not_categorized - Auto false 0.5 256 1024 44100 /dev/dsp alsa_pcm:playback_1 alsa_pcm:playback_2 USE_JACK_TRANSPORT NO_JACK_TIME_MASTER true false hw:0 ALSA None -1 false false Plastique Lucida Grande 10 Lucida Grande 11 1.1 8 21 3 false true true BC_OFF SET_PLAY_OFF true true 0 0 1000 700 true 10 350 829 276 true 280 100 706 439 true 10 10 600 250 false 500 20 526 437 false 720 120 0 0 false 2 20 0 0 false 2 20 0 0 false 2 20 0 0 false 2 20 0 0 95,101,117 128,134,152 128,134,152 72,76,88 196,201,214 97,167,251 58,62,72 167,168,163 167,168,163 207,208,200 40,40,40 40,40,40 100,100,200 65,65,65 75,75,75 95,95,95 115,115,115 125,125,125 135,135,135 hydrogen-0.9.6-beta3/data/i18n/000077500000000000000000000000001211146647700160425ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/i18n/hydrogen.ca.qm000066400000000000000000001632001211146647700206040ustar00rootroot000000000000008j9s Wp5@ABC6DeEF;o[Q[%S%S%Sj+;(+;5(+;qM+;+[!+[g+[+^GH,,T6V~aV~fZl[*p+;:bpgFyHȤȤH5t5tDFO1PH5H5yH5GLakf{g8g/b`~n`s@*,n^*5+FE+fG&+G+H+`!/ZB/Q7t0v7M[708st;0<0GH6H62H6BH6nH6qH6^H6H6H6iH6nH6H6BHH6qH6H6H7J6J%5LT]JMiMiLMiBMirMiMiuM oPWT^*TzcT TFUjYpηYpZZ ZdZdZ|WZ%8ZG\Z# [ rmz}S}% 'rg}ќmCsnR,MAU{\O\ӵJ\ӵem"{?5NvwL6IL}4*rrKUX믎7ՄD. y' $1k}Z T!j"j'2#+AT?. c. O^bdM>xheȹr|[F|" .~UC+n6|F=x/f3H~KI>Hq^`[cq.zb|kq,% k;g)7+DOmDeu\_6^[v~~lRlf_7QqN9 p sXQ41(9e<d?AC*^IXbPz^]%bb9bbI`}U:|h"jIuIHIoIII/n1noe%A7ɷJ,,],Tc&ϕWWW+W͓WўWsvvvp֏1oM؃Npޱe:oFls1.vfW3('58[|Q@fSʢG #V|V|W^agkeN^h]wh~{k2{m3pr`0v bz2|Vd]<HD|bt)&Fȿ2g7ŞuȻp;Af[eo#5\yN{$)h "c!P >sv)n [B''y[DwU*N_pm^k}e~>#) 5E#-KD^ș֣֣ɺ=>[!⪁ _JÝ)2r%I- Ena bUk8#i!o#P _4P4=$V^h*`~ a.f gh3s/_Ec3+_U Gmls+>UM0moa¯V=o&c@?HݿJ8빆wh-B(3dv3d@{dG.l3$U,jԼ%tƒlcp>33l3~ ¸(3\tRQ> 'q S, ){V_ +s'. 3b(r @e Cn S%]\n aOH4 h> h>ӳ w-X w}  v r ~v V1 %q 40} $ ~ T> a ; #~? +Z$ǀ Ɗ @J  TY gn~ kJD x@#_ zt D ?+  /: C Dz ;$ s'E  'R =q = 5> g2 "U. 2p` 5yl 6 _ @-g B Cy C& FPJ> \p `np fs jQQ w$! wU |v ~= x ST _( z  aW tj 9  Ni $ e 4W = =/ SB yE~ { 4 4)EZ <&*  ͫ ͼ+G s ӽ^{3 mmt- 3NM"0$RL=GTG_^jTbjerYmezq+w>|d;&]Xd7EǗ.; ,P Ҋ9y"S.=Щ!HL"^T=aN!b |st`94Z9^+eYtkvNޔkFq$&dP8d!i 8<b>Llistes de correu</b><br>Mailing lists
     AboutDialog\<b>Programador principal y mantenidor:</b><br>$Main coder and mantainer:
     AboutDialog<<b>Pgina del Projecte</b><br>Project page
     AboutDialog*<b>Pgina web</b><br>Website
     AboutDialog&A sobreAbout AboutDialog:Traductor: %1 Carles PerarnauTranslator:%1Alessandro Cominu AboutDialog###AboutDialog_UI&Autors&AuthorsAboutDialog_UI&Licncia&LicenseAboutDialog_UI&O Acceptar&OKAboutDialog_UI So&breA&boutAboutDialog_UISobre hydrogenAbout HydrogenAboutDialog_UI Alt+OAlt+OAboutDialog_UI6Informaci de motor d'udioAudio Engine InfoAudioEngineInfoForm###AudioEngineInfoForm_UI*Estat del motor de sAudio engine stateAudioEngineInfoForm_UISortida d'udio Audio outputAudioEngineInfoForm_UIMida del buffer Buffer sizeAudioEngineInfoForm_UIConnectat a Connected toAudioEngineInfoForm_UI Forma1Form1AudioEngineInfoForm_UI MarcsFramesAudioEngineInfoForm_UIEntrada MIDI MIDI inputAudioEngineInfoForm_UI NombreNameAudioEngineInfoForm_UIPatronesPatternsAudioEngineInfoForm_UIPolifona Playing notesAudioEngineInfoForm_UI*Tiempo de elaboracin Process timeAudioEngineInfoForm_UI*Marcos en tiempo realRealtime framesAudioEngineInfoForm_UITasa de sampleo Sample rateAudioEngineInfoForm_UISamplerSamplerAudioEngineInfoForm_UI0Instrumento seleccionadoSelected instrumentAudioEngineInfoForm_UI&Patrn seleccionadoSelected patternAudioEngineInfoForm_UISecuenciador SequencerAudioEngineInfoForm_UI,Posicin de la cancin Song positionAudioEngineInfoForm_UI(Estado de la cancin Song stateAudioEngineInfoForm_UISintetizadorSynthAudioEngineInfoForm_UI PartesTicksAudioEngineInfoForm_UI s sAudioFileBrowser8Navegador de fitxers d'udioAudio File BrowserAudioFileBrowserNom:Name:AudioFileBrowserNo hi ha avan d'udio disponible per mostres ms llargues que 10 minuts!=No clicking audio preview for samples longer than 10 minutes!AudioFileBrowser*Longitud de mostreig: Samplelength:AudioFileBrowser*Longitud de mostreig:Samplelength: AudioFileBrowser,velocitat de mostreig: Samplerate:AudioFileBrowser2Velocitat de mostreig: %1Samplerate: %1AudioFileBrowser Mida:Size:AudioFileBrowserMida: %1 bytesSize: %1 bytesAudioFileBrowser4&Fitxer a nom d'instrument&Filename to instrument nameAudioFileBrowser_UI&H Inici&HomeAudioFileBrowser_UI$Re&produeix Mostra &Play SampleAudioFileBrowser_UI&S atura&StopAudioFileBrowser_UI Am&unt&UpAudioFileBrowser_UICompte! aix canviar tota la configuraci de velocitat de la capa4Be careful, this change all Layer velocity settings AudioFileBrowser_UICancel.larCancelAudioFileBrowser_UI Quadre de dilegDialogAudioFileBrowser_UILongitud:Length:AudioFileBrowser_UINom:Name:AudioFileBrowser_UI ObrirOpenAudioFileBrowser_UI<&Y Reprodur mostres al clicarPla&y samples by clickingAudioFileBrowser_UI,Velocitat de mostreig: Samplerate:AudioFileBrowser_UI>Configurar velocitat automticaSet automatic velocityAudioFileBrowser_UI Mida:Size:AudioFileBrowser_UI,Veure carpetes ocultesView hidden foldersAudioFileBrowser_UI*(%1/%2 KiB) - T.E. %3(%1/%2 KiB) - ETA %3DownloadWidget0Autor del kit de bateria### Drumkit authorDrumkitManager_UI8Informaci de kit de bateria### Drumkit infoDrumkitManager_UI*Nom de kit de bateria### Drumkit nameDrumkitManager_UI`El kit de bateria s'instalar zncxbmzbxcmznxbcmz4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b> Descarrega ms kits de bateria a <br> http://www.hydrogen-music.org </b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UI AutorAuthorDrumkitManager_UIExplorarBrowseDrumkitManager_UI.Eliminar kit de bateriaDelete drumkitDrumkitManager_UI8Directori de kits de bateriaDrumkit directoryDrumkitManager_UI@Nom de fitxer del kit de bateriaDrumkit filenameDrumkitManager_UI*Nom de kit de bateria Drumkit nameDrumkitManager_UIExportarExportDrumkitManager_UI Forma1Form1DrumkitManager_UIImportarImportDrumkitManager_UIInformaciInfoDrumkitManager_UICarregarLoadDrumkitManager_UI.carregar-kit de bateria Load drumkitDrumkitManager_UI DesarSaveDrumkitManager_UI0La exportaci ha fallat!Export failed!ExportSongDialogExportar can Export songExportSongDialog(Tasa de mostreig: %1Sample rate: %1ExportSongDialog&Arxiu de s (*.wav)Wave file (*.wav)ExportSongDialogE&xaminar... &Browse...ExportSongDialog_UITan&car &CloseExportSongDialog_UI&Exportar&ExportExportSongDialog_UI Alt+BAlt+BExportSongDialog_UI Alt+CAlt+CExportSongDialog_UI Alt+EAlt+EExportSongDialog_UI.Exportar la can a WAVExport Whole Song to WAVExportSongDialog_UI,Nom d'arxiu a exportarExport filenameExportSongDialog_UIetiquetaText1 textLabel1ExportSongDialog_UI*%1<br>%2 KHz<br>%3 %4%1
    %2 KHz
    %3 %4 FileBrowserEfectes si/no FX on/off FxMixerLine"Sortida principal Master output FxMixerLine&Cancelar&Cancel$H2Core::SoundLibraryPropertiesDialog&O Aceptar&Ok$H2Core::SoundLibraryPropertiesDialog@Propietats de la llibreria de sSoundLibrary Properties$H2Core::SoundLibraryPropertiesDialogAix no s possible, noms es poden desar canvis a instruments en la llibreria de s actualfThis is not possible, you can only save changes inside instruments to the current loaded sound library$H2Core::SoundLibraryPropertiesDialogAtenci! Si canvies el nom del kit de bateria en crears un de nom amb aquest nom N'ests segur?fWarning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure?$H2Core::SoundLibraryPropertiesDialog:Kit de bateria carregat: [%1]Drumkit loaded: [%1] HydrogenAppAtacAttackInstrumentEditorDecaimentDecayInstrumentEditor"Tall en el filtre Filter CutoffInstrumentEditor0Ressonncia en el filtreFilter resonanceInstrumentEditorGeneralGeneralInstrumentEditor*Guany de l'instrumentInstrument gainInstrumentEditorGuany de capa Layer gainInstrumentEditor.Ajust t de capa (Fort)Layer pitch (Coarse)InstrumentEditor.Ajust t de capa (Suau)Layer pitch (Fine)InstrumentEditor CapesLayersInstrumentEditor.Nom de l'instrument nouNew instrument nameInstrumentEditor2Factor aleatorio de tono Random pitch factorInstrumentEditorAlliberamentReleaseInstrumentEditorDMostrar propietats de l'instrumentShow instrument propertiesInstrumentEditor>Mostrar propietats de les capesShow layers propertiesInstrumentEditorSostenimentSustainInstrumentEditorEsborrar notes Clear notesInstrumentLine&Eliminar instrumentDelete instrumentInstrumentLineOmplir notes Fill notesInstrumentLine&Velocitat aleatriaRandomize velocityInstrumentLineInstrument InstrumentInstrumentRack4Mostar editor d'instrumentShow Instrument editorInstrumentRack*Veure llibreria de sShow sound libraryInstrumentRackLlibreria de s Sound libraryInstrumentRack2Editar parmetres efectesEdit FX parametersLadspaFXMixerLine Retorn d'efectes Effect returnLadspaFXMixerLineIgnorar efectes FX bypassLadspaFXMixerLine.Nom de l'efecte Ladspa Ladspa FX nameLadspaFXMixerLineActivarActivateLadspaFXPropertiesDesactivar DeactivateLadspaFXProperties6Propietats Efecte LADSPA %1LADSPA FX %1 PropertiesLadspaFXProperties Sense complement No pluginLadspaFXProperties$Seleccionar Efecte Select FXLadspaFXProperties:[%1] Propietats Efecte LADSPA[%1] LADSPA FX PropertiesLadspaFXProperties"Llista AlfabticaAlphabetic ListLadspaFXSelectorCategoritzat CategorizedLadspaFXSelector GrupsGroupsLadspaFXSelectorMonoMonoLadspaFXSelectorNo soportat Not supportedLadspaFXSelector(Utilizat Recientment Recently UsedLadspaFXSelector2Seleccionar Efecte LADSPASelect LADSPA FXLadspaFXSelector StereoStereoLadspaFXSelector2### Creador d'efectes 1 2### FX maker 1 2LadspaFXSelector_UI&### Copyright 1 2 3### copyright 1 2 3LadspaFXSelector_UI### ID Efecte ### fx IDLadspaFXSelector_UI&### Etiqueta Efecte ### fx labelLadspaFXSelector_UI*### nombre d'efecte 1 ### fx name 1LadspaFXSelector_UI$### Tipus d'efecte ### fx typeLadspaFXSelector_UI&Cancelar&CancelLadspaFXSelector_UI&O acceptar&OKLadspaFXSelector_UI11LadspaFXSelector_UI

    Copyright:

    LadspaFXSelector_UI

    ID:

    LadspaFXSelector_UI

    Label:

    LadspaFXSelector_UI

    Maker:

    LadspaFXSelector_UI

    Name:

    LadspaFXSelector_UI

    Type:

    LadspaFXSelector_UI Alt+CAlt+CLadspaFXSelector_UI Alt+OAlt+OLadspaFXSelector_UIFormulari1Form1LadspaFXSelector_UIInfo|Acerca deMainForm El document ha estat modificat i no s'ha desat Vols desar les modificacions? I The document contains unsaved changes. Do you want to save the changes? MainForm&A Sobre&AboutMainForm$&Afegir instrument&Add instrumentMainForm&Cancelar&CancelMainForm"&c Netejar-ho tot &Clear allMainForm8&Descartar les modificacions&DiscardMainForm&&Exportar llibreria&Export libraryMainForm&Exportar can &Export songMainForm&&Importar llibreria&Import libraryMainForm &Info&InfoMainForm(Taula d'&instruments&Instrument RackMainForm&Mesclador&MixerMainForm&Nou&NewMainForm &Obrir&OpenMainForm&Preferncies &PreferencesMainForm&Projecte&ProjectMainForm&Q Sortir&QuitMainForm&Guardar&SaveMainForm De&sar llibreria &Save libraryMainForm&T eines&ToolsMainForm Manual d'&usuari &User manualMainFormCancelarCancelMainForm8Borrar tots els instruments?Clear all instruments?MainFormNNo ha estat possible exportar el patr.Could not export pattern.MainForm>No s'ha pogut guardar la can.Could not save song.MainForm&b DepurarDe&bugMainFormFNo tornar a mostrar aquest missatgeDon't show this message anymoreMainForm6Error al carregar la can.Error loading song.MainFormTError inicialitzant el controlador d'udioError starting audio driverMainForm0Expor&tar patr com a...Expor&t pattern as...MainForm(Exportar arxiu &MIDIExport &MIDI fileMainForm&Exportar arxiu MIDIExport MIDI fileMainForm<Patr d'Hydrogen (*.h2pattern)Hydrogen Pattern (*.h2pattern)MainFormHydrogen apunt.Hydrogen Ready.MainForm2Can Hydrogen (*.h2song)Hydrogen Song (*.h2song)MainFormI&nstruments I&nstrumentsMainFormInstrument %1 Instrument %1MainFormZControlador Jack: no es pot activar el client#Jack driver: cannot activate clientMainFormlControlador Jack no es pot conectar al port de sortida'Jack driver: cannot connect output portMainFormXControlador Jack: error al registrar el port#Jack driver: error in port registerMainFormHControlador Jack: tancar el servidorJack driver: server shutdownMainForm$Arxiu MIDI (*.mid)Midi file (*.mid)MainFormAcceptarOkMainFormObrir &Demo Open &DemoMainFormObrir &Patr Open &PatternMainFormObrir &recent Open &recentMainFormObrir Patr Open PatternMainFormObrir can Open songMainFormPatrn desat.Pattern saved.MainForm:&Editor llista de reproducciPlaylist &editorMainFormNLista de Reproducci: Fixar n can %1Playlist: Set song No. %1MainFormFLlista de reproducci: Can No. %1Playlist: Song No. %1MainForm"Imprimir Objectes Print ObjectsMainForm"Gu&ardar com a... Save &as...MainForm(Desar Patr com a...Save Pattern as ...MainFormDesar can Save songMainFormJMostrar informaci del motor d'&audioShow &audio engine infoMainFormMostrar &info Show &infoMainForm&Can desada com a.Song saved as.MainFormCan desada. Song saved.MainForm<Controlador d'udio desconegutUnknown audio driverMainForm&Error desconegut %1Unknown error %1MainFormBEsts utilitzant una versi de desenvolupament d'Hydrogen, si us plau ajudan's reportant errors o suggerint a la llista de correu hydrogen-devel.<br><br>Grcies!You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!MainForm$Humanizar el temps Humanize timeMasterMixerLine(Humanitzar velocitatHumanize velocityMasterMixerLinehConfigura el parmetre d'humanitzaci del temps [%1] Set humanize time parameter [%1]MasterMixerLinenConfigura el parmetre d'humanitzaci de velocitat [%1]$Set humanize velocity parameter [%1]MasterMixerLine<Configura Volum principal [%1]Set master volume [%1]MasterMixerLineBConfigura el Factor de swing [%1]Set swing factor [%1]MasterMixerLine SwingSwingMasterMixerLine AcciAction MidiTable EventEvent MidiTable Parm.Param. MidiTableDPrem el bot per grabar event midi!press button to record midi event MidiTableMescladorMixerMixer4Configura nivell Efecte %1Set FX %1 level MixerHConfigura volum efecte LADSPA ( %1 )Set LADSPA FX ( %1 ) volumeMixer,Veure panell d'efectes Show FX panelMixer2Mostrar pics d'instrumentShow instrument peaksMixer<Mostrar pics d'instrument = NoShow instrument peaks = OffMixer<Mostrar pics d'instrument = SShow instrument peaks = OnMixer\Nom de l'instrument (doble click per a editar)&Instrument name (double click to edit) MixerLineSilenciarMute MixerLineBalanceigPan MixerLine Reprodur mostra Play sample MixerLine0Fixar balan instr. [%1]Set instr. pan [%1] MixerLineJConfigurar volum de l'instrument [%1]Set instrument volume [%1] MixerLineSolSolo MixerLineLmit de filtreCutoffPatternEditorPanel(Escoltar notes novesHear new notesPatternEditorPanel2Escoltar notes noves = NoHear new notes = OffPatternEditorPanel2Escoltar notes noves = SiHear new notes = OnPatternEditorPanel~No s possible canviar la mida del patr durant la reproducci.8Is not possible to change the pattern size when playing.PatternEditorPanel:Desfasament negatiu i positiu Lead and LagPatternEditorPanel0Carregat:Llibreria de sLoaded SoundlibraryPatternEditorPanel:No s'ha seleccionat cap patrNo pattern selectedPatternEditorPanel BalanPanPatternEditorPanel,Editor de patrons - %1Pattern editor - %1PatternEditorPanellQuantitzar events entrants de teclat/midi = Desactivat,Quantize incoming keyboard/midi events = OffPatternEditorPanelfQuantitzar events entrants de teclat/midi = Activat+Quantize incoming keyboard/midi events = OnPatternEditorPanelZquantitzar events de teclat/midi a la graella%Quantize keyboard/midi events to gridPatternEditorPanel8Grabar events de teclat/midiRecord keyboard/midi eventsPatternEditorPanelPGrabar events de teclat/midi =Desactivat!Record keyboard/midi events = OffPatternEditorPanelLGrabar events de teclat/midi = Activat Record keyboard/midi events = OnPatternEditorPanelResonncia ResonancePatternEditorPanelFSeleccionar resoluci de la graellaSelect grid resolutionPatternEditorPanelBSeleccionar propietats de la notaSelect note propertiesPatternEditorPanel4Seleccionar mida del patrSelect pattern sizePatternEditorPanelVelocitatVelocityPatternEditorPanelAproparZoom inPatternEditorPanelAllunyarZoom outPatternEditorPanel>Omplir amb el patr seleccionatFill with selected patternPatternFillDialog&c Netejar&ClearPatternFillDialog_UI&F Omplir&FillPatternFillDialog_UI Alt+CAlt+CPatternFillDialog_UI Alt+FAlt+FPatternFillDialog_UICancelarCancelPatternFillDialog_UIFormulari 1Form 1PatternFillDialog_UIDe: From:PatternFillDialog_UIAcceptarOKPatternFillDialog_UIA: To:PatternFillDialog_UI%1%1PatternPropertiesDialog%1#2%1#2PatternPropertiesDialog(Propietats del patrPattern propertiesPatternPropertiesDialog&Cancelar&CancelPatternPropertiesDialog_UI&O Acceptar&OKPatternPropertiesDialog_UI Alt+CAlt+CPatternPropertiesDialog_UI Alt+OAlt+OPatternPropertiesDialog_UIFormulari1Form1PatternPropertiesDialog_UI"Nom del nou patrNew Pattern NamePatternPropertiesDialog_UI&Categoria del patrPattern categoryPatternPropertiesDialog_UI(Panell CP Desactivat BC Panel off PlayerControl"Panell CP Activat BC Panel on PlayerControl,Contar PPM i REPRODUR Count BPM and start PLAY PlayerControl$Contar i fixar PPM Count and set BPM PlayerControlLMode mestre de temps JACK = Desactivat Jack-Time-Master mode = Off PlayerControlFMode mestre de temps JACK = Activat Jack-Time-Master mode = On PlayerControlJPanell contador de polsacions activatBeatCounter Panel on PlayerControlAvanar Fast Forward PlayerControl&Taula d'instrumentsInstrument rack PlayerControlrEl transport JACK noms funciona amb el controlador JACK./JACK-transport will work only with JACK driver. PlayerControlHMestre de s JACK Activat/DesactivatJack-Time-Master on/off PlayerControlDMode de transport jack = DesctivatJack-transport mode = Off PlayerControl@Mode de transport jack = ActivatJack-transport mode = On PlayerControlBTransport jack activat/desactivatJack-transport on/off PlayerControlRepetir can Loop song PlayerControl4Repetir can = DesactivatLoop song = Off PlayerControl.Repetir Can = ActivatLoop song = On PlayerControlMescladorMixer PlayerControl Nou valor de PPM New BPM value PlayerControlMode de patr Pattern Mode PlayerControl4Mode de patr seleccionat.Pattern mode selected. PlayerControl Pausa.Pause. PlayerControl"Reprodur / Pausa Play/ Pause PlayerControlReprodunt.Playing. PlayerControlRebobinarRewind PlayerControlBFixar PPM / Fixar PPM i reprodurSet BPM / Set BPM and play PlayerControl2Veure taula d'instrumentsShow Instrument Rack PlayerControlVeure mesclador Show mixer PlayerControlMode can Song Mode PlayerControl.Mode can seleccionat.Song mode selected. PlayerControl AturarStop PlayerControlAturat.Stopped. PlayerControl>Canviar a mode de Can / PatrSwitch Song/ Pattern Mode PlayerControlJAfegir script a la can seleccionadaAdd Script to selected SongPlaylistDialogNAfegir can a la llista de reproducciAdd Song to PlayListPlaylistDialog6Error al carregar la can.Error loading song.PlaylistDialogZLlista de reproducci Hydrogen (*.h2playlist) Hydrogen Playlist (*.h2playlist)PlaylistDialogJLlista de reproducci Hydrogen (*.sh)Hydrogen Playlist (*.sh)PlaylistDialog2Scripts d'Hydrogen (*.sh)Hydrogen Scripts (*.sh)PlaylistDialogDCarregar una llista de reproducci Load PlaylistPlaylistDialogNou script New ScriptPlaylistDialoghNo s'ha configurat cap editor per defecte. Si us plau selecciona el teu Editor per defecte No utilitzis un editor basat en consola Ho sentim, per no funcionar en aquests moments.No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment.PlaylistDialog@No s'est utilitzant cap Script!No Script in use!PlaylistDialog<No has seleccionat cap Script!No Script selected!PlaylistDialog(No hi ha cap Script! No Script!PlaylistDialogNo hi ha canons a la llista de reproducci o no s'ha seleccionat cap can!$No Song in List or no Song selected!PlaylistDialog@No hi ha cap can seleccionada!No Song selected!PlaylistDialogFNavegador de llistes de reproducciPlay List BrowserPlaylistDialogbLlista de reproducci: Configurar No. de can %1Playlist: Set song No. %1PlaylistDialog6Desar Llista de reproducci Save PlaylistPlaylistDialog ScriptScriptPlaylistDialogEl nom o ruta de l'Script cont espais en blanc IMPORTNT La ruta a l'Script i el nom del Script no poden tenir espais en blanc.Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces.PlaylistDialog>Configurar l'editor per defecteSet your Default EditorPlaylistDialog"Llista de canons Song listPlaylistDialogExecutar Script exec ScriptPlaylistDialog ordenasortPlaylistDialogNAfegir can a la llista de distribuciAdd song to playlistPlaylistDialog_UI:Netejar llista de reproducciClear playlistPlaylistDialog_UIEditar script Edit scriptPlaylistDialog_UICarregar llista Load listPlaylistDialog_UICarregar script Load scriptPlaylistDialog_UIScript Nou New ScriptPlaylistDialog_UI$Reprodur selecci Play selectedPlaylistDialog_UIFNavegador de llistes de reproducciPlayList BrowserPlaylistDialog_UIEsborrar Script Remove scriptPlaylistDialog_UITEliminar can de la llista de distribuciRemove song from playlistPlaylistDialog_UIDesar llista Save listPlaylistDialog_UI"Llista de canons Song listPlaylistDialog_UI AturarStopPlaylistDialog_UI6<b>Controlador ALSA</b><br>ALSA Driver
    PreferencesDialogR<b>Selecci automtica de controlador</b>!Automatic driver selectionPreferencesDialog@<b>Controlador CoreAudio</b><br>CoreAudio Driver
    PreferencesDialog<b>Controlador de conexi Audio Jack</b><br>Controlador d'audio de baixa latnciaCJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialog<b>Sistema Open Sound</b><br>Controlador d'udio simple [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog@<b>Controlador PortAudio</b><br>PortAudio Driver
    PreferencesDialog^<br><b><font color="red">No compilat</font></b>0
    Not compiledPreferencesDialog RpidFastPreferencesDialog NormalNormalPreferencesDialogSi us plau, reinicia hydrogen per activar/desactivar soport per LASH6Please restart hydrogen to enable/disable LASH supportPreferencesDialogPreferncies PreferencesPreferencesDialogLentSlowPreferencesDialog###PreferencesDialog_UI&Aparena &AppearancePreferencesDialog_UI&Cancelar&CancelPreferencesDialog_UI&General&GeneralPreferencesDialog_UISistema &Midi &Midi SystemPreferencesDialog_UI&O acceptar&OKPreferencesDialog_UINTornar a carrega&r l'ultima can usada&Reopen last used songPreferencesDialog_UI11PreferencesDialog_UI1010PreferencesDialog_UI1111PreferencesDialog_UI1212PreferencesDialog_UI1313PreferencesDialog_UI1414PreferencesDialog_UI1515PreferencesDialog_UI1616PreferencesDialog_UI22PreferencesDialog_UI33PreferencesDialog_UI44PreferencesDialog_UI 4410044100PreferencesDialog_UI 4800048000PreferencesDialog_UI55PreferencesDialog_UI66PreferencesDialog_UI77PreferencesDialog_UI8PreferencesDialog_UI 8820088200PreferencesDialog_UI89PreferencesDialog_UI 9600096000PreferencesDialog_UI<i>Per tal que la nova font sigui utilitzada cal reiniciar l'aplicaci.</i>=After a font change the application must be restarted.PreferencesDialog_UITotAllPreferencesDialog_UI Alt+CAlt+CPreferencesDialog_UI Alt+DAlt+DPreferencesDialog_UI Alt+OAlt+OPreferencesDialog_UI Alt+RAlt+RPreferencesDialog_UI,Font per a l'aplicaciApplication fontPreferencesDialog_UI &Sistema d'udio Audio &SystemPreferencesDialog_UI:Detells de la sortida d'udioAudio output detailsPreferencesDialog_UI|Compensaci de deriva del contador de polsacions en 1/10 ms -Beat counter drift compensation in 1/10 ms PreferencesDialog_UI^Compensaci del contador de polsacions en ms #Beat counter start offset in ms PreferencesDialog_UIMida del buffer Buffer sizePreferencesDialog_UI CanalChannelPreferencesDialog_UIPConnectar al parell sortida per &defecteConnect to &Default Output PairPreferencesDialog_UI Dispositiu de sDevicePreferencesDialog_UIActivar compensaci de temps (soluci temporal per a l'error amb Ardour)0Enable timing offset (workaround for Ardour bug)PreferencesDialog_UI RpidFastPreferencesDialog_UIFormulari1Form1PreferencesDialog_UI Ignorar note-offIgnore note-offPreferencesDialog_UIEntradaInputPreferencesDialog_UI6Celocitat de caiguda de picMeters falloff speedPreferencesDialog_UI$Volum del metrnomMetronome volumePreferencesDialog_UI Controlador Midi Midi driverPreferencesDialog_UI*Font per al mesclador Mixer fontPreferencesDialog_UI NormalNormalPreferencesDialog_UIPolifonia PolyphonyPreferencesDialog_UIPost-Atenuador Post-FaderPreferencesDialog_UIPre-Atenuador Pre-FaderPreferencesDialog_UI(Reiniciar la sortidaRestart outputPreferencesDialog_UI,Freqncia de mostreig Sample ratePreferencesDialog_UI Seleccionar font Select fontPreferencesDialog_UILentSlowPreferencesDialog_UI EstilStylePreferencesDialog_UI Sortida de pista Track outputPreferencesDialog_UIUtilitzar lashUse lashPreferencesDialog_UI:crear sortides per instrumentcreate per-instrument outputsPreferencesDialog_UIprimer pas, ajustar error de temps entre la latncia del controlador/teclat disparador i els ppm computats_first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpmPreferencesDialog_UIsegon pas, ajustar compensaci entre l'ultim controlador/teclat disparador i l'inici endarrerit del seqenciadorfsecond step, adjust offset between last controller/keybord trigger and the deferred sequencer startup PreferencesDialog_UI0Index de la documentaciDocumentation indexSimpleHTMLBrowserFNo tornar a mostrar aquest missatgeDon't show this message anymoreSimpleHTMLBrowser ManualManualSimpleHTMLBrowserAcceptarOkSimpleHTMLBrowser0Benvingut(da) a HydrogenWelcome to HydrogenSimpleHTMLBrowser&Cancelar&CancelSongEditorPanel&Acceptar&OkSongEditorPanel@Eliminar la seqncia de patronsClear pattern sequenceSongEditorPanel$Crear un nou patrCreate new patternSongEditorPanelMode dibuix Draw modeSongEditorPanel@Moure avall el patr seleccionatMove the selected pattern downSongEditorPanel@Moure amunt el patr seleccionatMove the selected pattern upSongEditorPanelPatr %1 Pattern %1SongEditorPanel Mode seleccionar Select modeSongEditorPanelEditor de can Song EditorSongEditorPanelAtenci! aix borrar la teva seqencia de patrons N'ests segur?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanel$sense_categoritzarnot_categorizedSongEditorPanel$mode de patr nicsingle pattern modeSongEditorPanelmode apilat stacked modeSongEditorPanel(mode patrons apilatsstacked pattern modeSongEditorPanel CopiarCopySongEditorPatternListEliminarDeleteSongEditorPatternList EditarEditSongEditorPatternList`Error desant patr! El fitxer patr ja existeix..Error saving pattern! The pattern-file exists.SongEditorPatternList"Omplir/Buidar ...Fill/Clear ...SongEditorPatternList8Patr Hydrogen (*.h2pattern)Hydrogen Pattern (*.h2pattern)SongEditorPatternListCarregar Patr Load PatternSongEditorPatternListObrir Patr Open PatternSongEditorPatternListPatr 1 Pattern 1SongEditorPatternListPropietats PropertiesSongEditorPatternListDesar Patr Save PatternSongEditorPatternListno_categoritzatnot_categorizedSongEditorPatternList$Propietatsde canSong propertiesSongPropertiesDialog &Acceptar &OKSongPropertiesDialog_UI&Cancelar&CancelSongPropertiesDialog_UI Alt+CAlt+CSongPropertiesDialog_UI Alt+OAlt+OSongPropertiesDialog_UI AutorAuthorSongPropertiesDialog_UIFormulari1Form1SongPropertiesDialog_UILlicnciaLicenseSongPropertiesDialog_UI NotesNotesSongPropertiesDialog_UI"Ttol de la can Song nameSongPropertiesDialog_UI4Exportar llibreria de sonsExport Sound LibrarySoundLibraryExportDialog.Exportar kit de bateriaExport drumkitSoundLibraryExportDialogNavegarBrowseSoundLibraryExportDialog_UI DilegDialogSoundLibraryExportDialog_UIExportarExportSoundLibraryExportDialog_UIjHi ha hagut un error a l'importar la llibreria de s.-An error occurred importing the SoundLibrary.SoundLibraryImportDialogAutor: %1 Author: %1SoundLibraryImportDialog>Descarregant llibreria de s...Downloading SoundLibrary...SoundLibraryImportDialogKits de bateriaDrumkitsSoundLibraryImportDialog.Importar kit de bateriaImport drumkitSoundLibraryImportDialog&Instalaci completa InstalledSoundLibraryImportDialogLicncia: %1 License: %1SoundLibraryImportDialogNouNewSoundLibraryImportDialogPatronsPatternsSoundLibraryImportDialogCanonsSongsSoundLibraryImportDialog:Importaci de llibreria de sSound Library importSoundLibraryImportDialogLlibreria de s Sound librarySoundLibraryImportDialog<Llibreria de s importada a %1SoundLibrary imported in %1SoundLibraryImportDialog EstatStatusSoundLibraryImportDialogTActualitzant llista de llibreries de s...Updating SoundLibrary list...SoundLibraryImportDialog11SoundLibraryImportDialog_UIAutor... Author...SoundLibraryImportDialog_UINavegar... Browse...SoundLibraryImportDialog_UI TancarCloseSoundLibraryImportDialog_UI DilegDialogSoundLibraryImportDialog_UI,Descarregar i instalarDownload and installSoundLibraryImportDialog_UI:Editar la llista de servidorsEdit server listSoundLibraryImportDialog_UIInstalarInstallSoundLibraryImportDialog_UIInternetInternetSoundLibraryImportDialog_UILlicncia... License...SoundLibraryImportDialog_UIFitxer local Local fileSoundLibraryImportDialog_UI2Nom de la llibreria de sSound Library NameSoundLibraryImportDialog_UI@Informaci de la llibreria de sSound library InfoSoundLibraryImportDialog_UI$Actualitzar llista Update listSoundLibraryImportDialog_UI&Cancelar&CancelSoundLibraryPanel&O Acceptar&OkSoundLibraryPanelEliminarDeleteSoundLibraryPanel6Error al carregar la can.Error loading song.SoundLibraryPanelExportarExportSoundLibraryPanelCarregarLoadSoundLibraryPanelPatronsPatternsSoundLibraryPanelPropietats PropertiesSoundLibraryPanelCanonsSongsSoundLibraryPanel6Kits de bateria del sistemaSystem drumkitsSoundLibraryPanel6Kits de bateria de l'usuari User drumkitsSoundLibraryPanelAtenci, el kit de bateria seleccionat ser esborrat del disk. N'ests segur?FWarning, the selected drumkit will be deleted from disk. Are you sure?SoundLibraryPanelAtenci, el patr seleccionat ser esborrat del disc. N'ests segur?FWarning, the selected pattern will be deleted from disk. Are you sure?SoundLibraryPanel AutorAuthorSoundLibraryPropertiesDialog_UICancelarCancelSoundLibraryPropertiesDialog_UI DilegDialogSoundLibraryPropertiesDialog_UIInformaci InformationSoundLibraryPropertiesDialog_UILlicnciaLicenseSoundLibraryPropertiesDialog_UINomNameSoundLibraryPropertiesDialog_UI DesarSave SoundLibraryPropertiesDialog_UItDesar els canvis fets als instruments a la llibreria de s3Save changes made to instruments into sound librarySoundLibraryPropertiesDialog_UIDEditar configuraci de repositorisEdit repository settingsSoundLibraryRepositoryDialog4Editar llista de servidorsEdit server listSoundLibraryRepositoryDialogURLURLSoundLibraryRepositoryDialog AfegirAddSoundLibraryRepositoryDialog_UIEliminarDeleteSoundLibraryRepositoryDialog_UI DilegDialogSoundLibraryRepositoryDialog_UIXSi us plau, proporciona almenys un nom vlid#Please supply at least a valid nameSoundLibrarySaveDialog*Desar llibreria de sSave Sound LibrarySoundLibrarySaveDialog AutorAuthorSoundLibrarySaveDialog_UICancelarCancelSoundLibrarySaveDialog_UI DilegDialogSoundLibrarySaveDialog_UIInformaci InformationSoundLibrarySaveDialog_UILlicnciaLicenseSoundLibrarySaveDialog_UINomNameSoundLibrarySaveDialog_UI DesarSave SoundLibrarySaveDialog_UILlibreria de s Sound librarySoundLibraryTreeA hydrogen-0.9.6-beta3/data/i18n/hydrogen.ca.ts000066400000000000000000004542521211146647700206270ustar00rootroot00000000000000 AboutDialog <b>Project page</b><br> <b>Pàgina del Projecte</b><br> About Sobre has no 'a'... &A sobre <b>Main coder and mantainer:</b><br> <b>Programador principal y mantenidor:</b><br> <b>Website</b><br> <b>Pàgina web</b><br> <b>Mailing lists</b><br> <b>Llistes de correu</b><br> Translator:%1Alessandro Cominu Traductor: %1 Carles Perarnau AboutDialog_UI ### About Hydrogen Sobre hydrogen A&bout So&bre &Authors &Autors &License &Licència &OK &O Acceptar Alt+O Alt+O <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Version 2, June 1991</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> of this license document, but changing it is not allowed.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Preamble</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> The licenses for most software are designed to take away your</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">License is intended to guarantee your freedom to share and change free</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">software--to make sure the software is free for all its users. This</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">General Public License applies to most of the Free Software</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Foundation's software and to any other program whose authors commit to</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">your programs, too.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">this service if you wish), that you receive source code or can get it</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">if you want it, that you can change the software or use pieces of it</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">in new free programs; and that you know you can do these things.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">distribute copies of the software, or if you modify it.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> For example, if you distribute copies of such a program, whether</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">source code. And you must show them these terms so they know their</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">rights.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">distribute and/or modify the software.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">that everyone understands that there is no warranty for this free</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">software. If the software is modified by someone else and passed on, we</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">want its recipients to know that what they have is not the original, so</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">that any problems introduced by others will not reflect on the original</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">authors' reputations.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Finally, any free program is threatened constantly by software</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">program will individually obtain patent licenses, in effect making the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> The precise terms and conditions for copying, distribution and</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">modification follow.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 0. This License applies to any program or other work which contains</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">under the terms of this General Public License. The "Program", below,</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">refers to any such program or work, and a "work based on the Program"</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">means either the Program or any derivative work under copyright law:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">either verbatim or with modifications and/or translated into another</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">the term "modification".) Each licensee is addressed as "you".</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Activities other than copying, distribution and modification are not</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">covered by this License; they are outside its scope. The act of</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">running the Program is not restricted, and the output from the Program</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">is covered only if its contents constitute a work based on the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Program (independent of having been made by running the Program).</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Whether that is true depends on what the Program does.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">source code as you receive it, in any medium, provided that you</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">and give any other recipients of the Program a copy of this License</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">along with the Program.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">distribute such modifications or work under the terms of Section 1</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">above, provided that you also meet all of these conditions:</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> stating that you changed the files and the date of any change.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> whole or in part contains or is derived from the Program or any</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> parties under the terms of this License.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> c) If the modified program normally reads commands interactively</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> when run, you must cause it, when started running for such</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> announcement including an appropriate copyright notice and a</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> a warranty) and that users may redistribute the program under</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> does not normally print such an announcement, your work based on</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> the Program is not required to print an announcement.)</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">These requirements apply to the modified work as a whole. If</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">identifiable sections of that work are not derived from the Program,</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">and can be reasonably considered independent and separate works in</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">sections when you distribute them as separate works. But when you</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">distribute the same sections as part of a whole which is a work based</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">this License, whose permissions for other licensees extend to the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">exercise the right to control the distribution of derivative or</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">collective works based on the Program.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">a storage or distribution medium does not bring the other work under</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">the scope of this License.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">under Section 2) in object code or executable form under the terms of</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> source code, which must be distributed under the terms of Sections</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> years, to give any third party, for a charge no more than your</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> cost of physically performing source distribution, a complete</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> customarily used for software interchange; or,</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> c) Accompany it with the information you received as to the offer</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> to distribute corresponding source code. (This alternative is</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> allowed only for noncommercial distribution and only if you</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> received the program in object code or executable form with such</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> an offer, in accord with Subsection b above.)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">The source code for a work means the preferred form of the work for</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">making modifications to it. For an executable work, complete source</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">code means all the source code for all modules it contains, plus any</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">associated interface definition files, plus the scripts used to</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">control compilation and installation of the executable. However, as a</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">special exception, the source code distributed need not include</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">anything that is normally distributed (in either source or binary</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">operating system on which the executable runs, unless that component</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">itself accompanies the executable.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">If distribution of executable or object code is made by offering</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">access to copy from a designated place, then offering equivalent</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">access to copy the source code from the same place counts as</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">distribution of the source code, even though third parties are not</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">compelled to copy the source along with the object code.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">except as expressly provided under this License. Any attempt</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">void, and will automatically terminate your rights under this License.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">However, parties who have received copies, or rights, from you under</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">this License will not have their licenses terminated so long as such</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">parties remain in full compliance.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 5. You are not required to accept this License, since you have not</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">distribute the Program or its derivative works. These actions are</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">modifying or distributing the Program (or any work based on the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">the Program or works based on it.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Program), the recipient automatically receives a license from the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">these terms and conditions. You may not impose any further</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">this License.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">excuse you from the conditions of this License. If you cannot</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">may not distribute the Program at all. For example, if a patent</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">all those who receive copies directly or indirectly through you, then</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">the only way you could satisfy both it and this License would be to</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">refrain entirely from distribution of the Program.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">any particular circumstance, the balance of the section is intended to</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">apply and the section as a whole is intended to apply in other</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">circumstances.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">patents or other property right claims or to contest validity of any</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">such claims; this section has the sole purpose of protecting the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">integrity of the free software distribution system, which is</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">implemented by public license practices. Many people have made</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">generous contributions to the wide range of software distributed</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">through that system in reliance on consistent application of that</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">to distribute software through any other system and a licensee cannot</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">impose that choice.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">be a consequence of the rest of this License.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">original copyright holder who places the Program under this License</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">may add an explicit geographical distribution limitation excluding</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">those countries, so that distribution is permitted only in or among</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">the limitation as if written in the body of this License.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">of the General Public License from time to time. Such new versions will</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">address new problems or concerns.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Each version is given a distinguishing version number. If the Program</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">specifies a version number of this License which applies to it and "any</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">later version", you have the option of following the terms and conditions</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">either of that version or of any later version published by the Free</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">this License, you may choose any version ever published by the Free Software</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Foundation.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">programs whose distribution conditions are different, write to the author</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">of preserving the free status of all derivatives of our free software and</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">of promoting the sharing and reuse of software generally.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> NO WARRANTY</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">REPAIR OR CORRECTION.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> END OF TERMS AND CONDITIONS</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> How to Apply These Terms to Your New Programs</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">free software which everyone can redistribute and change under these terms.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">to attach them to the start of each source file to most effectively</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">the "copyright" line and a pointer to where the full notice is found.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> it under the terms of the GNU General Public License as published by</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> (at your option) any later version.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> This program is distributed in the hope that it will be useful,</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> GNU General Public License for more details.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> You should have received a copy of the GNU General Public License</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> along with this program; if not, write to the Free Software</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">If the program is interactive, make it output a short notice like this</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">when it starts in an interactive mode:</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> This is free software, and you are welcome to redistribute it</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> under certain conditions; type `show c' for details.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">school, if any, to sign a "copyright disclaimer" for the program, if</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">necessary. Here is a sample; alter the names:</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"> Ty Coon, President of Vice</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">This General Public License does not permit incorporating your program into</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#ffffff;">Public License instead of this License.</p></body></html> AudioEngineInfoForm Audio Engine Info Informació de motor d'àudio AudioEngineInfoForm_UI Playing notes Polifonía Process time Tiempo de elaboración Audio engine state Estat del motor de sò Song state Estado de la canción Buffer size Mida del buffer Sample rate Tasa de sampleo Form1 Forma1 ### Frames Marcs Ticks Partes Song position Posición de la canción Patterns Patrones Selected pattern Patrón seleccionado Selected instrument Instrumento seleccionado Connected to Connectat a Synth Sintetizador Sampler Sampler Sequencer Secuenciador MIDI input Entrada MIDI Name Nombre Audio output Sortida d'àudio Realtime frames Marcos en tiempo real AudioFileBrowser Audio File Browser Navegador de fitxers d'àudio Size: %1 bytes Mida: %1 bytes Samplerate: %1 Velocitat de mostreig: %1 Samplelength: Longitud de mostreig: s s No clicking audio preview for samples longer than 10 minutes! No hi ha avanç d'àudio disponible per mostres més llargues que 10 minuts! Name: Nom: Size: Mida: Samplerate: velocitat de mostreig: Samplelength: Longitud de mostreig: AudioFileBrowser_UI Dialog Quadre de diàleg Open Obrir Name: Nom: Samplerate: Velocitat de mostreig: Size: Mida: Length: Longitud: Cancel Cancel.lar Pla&y samples by clicking &Y Reproduïr mostres al clicar &Up Am&unt &Home &H Inici &Play Sample Re&produeix Mostra &Filename to instrument name &Fitxer a nom d'instrument &Stop &S atura View hidden folders Veure carpetes ocultes Be careful, this change all Layer velocity settings Compte! això canviarà tota la configuració de velocitat de la capa Set automatic velocity Configurar velocitat automàtica DownloadWidget (%1/%2 KiB) - ETA %3 (%1/%2 KiB) - T.E. %3 DrumkitManager_UI Drumkit name Nom de kit de bateria Delete drumkit Eliminar kit de bateria Load drumkit carregar-kit de bateria Load Carregar Author Autor Info Informació Save Desar Browse Explorar Import Importar Drumkit filename Nom de fitxer del kit de bateria Export Exportar Drumkit directory Directori de kits de bateria Form1 Forma1 ### Drumkit author Autor del kit de bateria ### Drumkit info Informació de kit de bateria ### The drumkit will be installed zncxbmzbxcmznxbcmz El kit de bateria s'instalarà zncxbmzbxcmznxbcmz ### Drumkit name Nom de kit de bateria <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b> Descarrega més kits de bateria a <br> http://www.hydrogen-music.org </b> ExportSongDialog Wave file (*.wav) Arxiu de sò (*.wav) Export song Exportar cançó Sample rate: %1 Tasa de mostreig: %1 Export failed! La exportació ha fallat! ExportSongDialog_UI Export filename Nom d'arxiu a exportar Export Whole Song to WAV Exportar la cançó a WAV Alt+C Alt+C &Export &Exportar Alt+E Alt+E &Browse... E&xaminar... Alt+B Alt+B textLabel1 etiquetaText1 &Close Tan&car FileBrowser %1<br>%2 KHz<br>%3 %4 %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off Efectes si/no Master output Sortida principal H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties Propietats de la llibreria de sò &Ok &O Aceptar &Cancel &Cancelar This is not possible, you can only save changes inside instruments to the current loaded sound library Això no és possible, només es poden desar canvis a instruments en la llibreria de sò actual Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Atenció! Si canvies el nom del kit de bateria en crearàs un de nom amb aquest nom N'estàs segur? HydrogenApp Drumkit loaded: [%1] Kit de bateria carregat: [%1] InstrumentEditor Show instrument properties Mostrar propietats de l'instrument Show layers properties Mostrar propietats de les capes Random pitch factor Factor aleatorio de tono Filter Cutoff Tall en el filtre Filter resonance Ressonància en el filtre Attack Atac Decay Decaiment Sustain Sosteniment Release Alliberament Layer gain Guany de capa New instrument name Nom de l'instrument nou Instrument gain Guany de l'instrument General General Layers Capes Layer pitch (Coarse) Ajust tò de capa (Fort) Layer pitch (Fine) Ajust tò de capa (Suau) InstrumentLine Clear notes Esborrar notes Fill notes Omplir notes Randomize velocity Velocitat aleatòria Delete instrument Eliminar instrument InstrumentRack Show Instrument editor Mostar editor d'instrument Instrument Instrument Show sound library Veure llibreria de sò Sound library Llibreria de sò LadspaFXMixerLine Edit FX parameters Editar paràmetres efectes FX bypass Ignorar efectes Ladspa FX name Nom de l'efecte Ladspa Effect return Retorn d'efectes LadspaFXProperties Select FX Seleccionar Efecte [%1] LADSPA FX Properties [%1] Propietats Efecte LADSPA LADSPA FX %1 Properties Propietats Efecte LADSPA %1 No plugin Sense complement Activate Activar Deactivate Desactivar LadspaFXSelector Groups Grups Stereo Stereo Mono Mono Not supported No soportat Select LADSPA FX Seleccionar Efecte LADSPA Recently Used Utilizat Recientment Alphabetic List Llista Alfabètica Categorized Categoritzat LadspaFXSelector_UI Form1 Formulari1 ### fx label ### Etiqueta Efecte ### fx type ### Tipus d'efecte ### fx ID ### ID Efecte &Cancel &Cancelar Alt+C Alt+C &OK &O acceptar Alt+O Alt+O 1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> ### fx name 1 ### nombre d'efecte 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> ### FX maker 1 2 ### Creador d'efectes 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 ### Copyright 1 2 3 MainForm &Save &Guardar &Discard &Descartar les modificacions Cancel Cancelar Error loading song. Error al carregar la cançó. Hydrogen Ready. Hydrogen apunt. Hydrogen Song (*.h2song) Cançó Hydrogen (*.h2song) Save song Desar cançó Open song Obrir cançó Print Objects Imprimir Objectes Export MIDI file Exportar arxiu MIDI Midi file (*.mid) Arxiu MIDI (*.mid) &New &Nou &Open &Obrir Open &Demo Obrir &Demo Open &recent Obrir &recent Export &MIDI file Exportar arxiu &MIDI &Preferences &Preferències &Quit &Q Sortir Show &audio engine info Mostrar informació del motor d'&audio &User manual Manual d'&usuari &About &A Sobre &Cancel &Cancelar Unknown audio driver Controlador d'àudio desconegut Error starting audio driver Error inicialitzant el controlador d'àudio Jack driver: server shutdown Controlador Jack: tancar el servidor Jack driver: cannot activate client Controlador Jack: no es pot activar el client Jack driver: cannot connect output port Controlador Jack no es pot conectar al port de sortida Jack driver: error in port register Controlador Jack: error al registrar el port &Export song &Exportar cançó De&bug &b Depurar &Project &Projecte Save &as... Gu&ardar com a... &Tools &T eines &Mixer &Mesclador &Instrument Rack Taula d'&instruments &Info &Info Song saved. Cançó desada. Clear all instruments? Borrar tots els instruments? Ok Acceptar Instrument %1 Instrument %1 Unknown error %1 Error desconegut %1 You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Estàs utilitzant una versió de desenvolupament d'Hydrogen, si us plau ajudan's reportant errors o suggerint a la llista de correu hydrogen-devel.<br><br>Gràcies! Could not save song. No s'ha pogut guardar la cançó. Open &Pattern Obrir &Patró Hydrogen Pattern (*.h2pattern) Patró d'Hydrogen (*.h2pattern) Save Pattern as ... Desar Patró com a... Pattern saved. Patrón desat. Open Pattern Obrir Patró Don't show this message anymore No tornar a mostrar aquest missatge Playlist: Set song No. %1 Lista de Reproducció: Fixar nº cançó %1 Show &info Mostrar &info Expor&t pattern as... Expor&tar patró com a... I&nstruments I&nstruments &Add instrument &Afegir instrument &Clear all &c Netejar-ho tot &Save library De&sar llibreria &Export library &Exportar llibreria Playlist &editor &Editor llista de reproducció &Import library &Importar llibreria Info|About Informació|Sobre Info|Acerca de Song saved as. Cançó desada com a. Playlist: Song No. %1 Llista de reproducció: Cançó No. %1 Could not export pattern. No ha estat possible exportar el patró. The document contains unsaved changes. Do you want to save the changes? El document ha estat modificat i no s'ha desat Vols desar les modificacions? MasterMixerLine Set master volume [%1] Configura Volum principal [%1] Swing Swing Humanize time Humanizar el temps Humanize velocity Humanitzar velocitat Set humanize time parameter [%1] Configura el paràmetre d'humanització del temps [%1] Set humanize velocity parameter [%1] Configura el paràmetre d'humanització de velocitat [%1] Set swing factor [%1] Configura el Factor de swing [%1] MidiTable Event Event Param. Paràm. Action Acció press button to record midi event Prem el botó per grabar event midi Mixer Show FX panel Veure panell d'efectes Show instrument peaks Mostrar pics d'instrument Show instrument peaks = On Mostrar pics d'instrument = Sí Show instrument peaks = Off Mostrar pics d'instrument = No Mixer Mesclador Set FX %1 level Configura nivell Efecte %1 Set LADSPA FX ( %1 ) volume Configura volum efecte LADSPA ( %1 ) MixerLine Play sample Reproduïr mostra Mute Silenciar Solo Sol Pan Balanceig Instrument name (double click to edit) Nom de l'instrument (doble click per a editar) Set instrument volume [%1] Configurar volum de l'instrument [%1] Set instr. pan [%1] Fixar balanç instr. [%1] PatternEditorPanel Hear new notes Escoltar notes noves Hear new notes = On Escoltar notes noves = Si Hear new notes = Off Escoltar notes noves = No Pattern editor - %1 Editor de patrons - %1 Record keyboard/midi events Grabar events de teclat/midi Quantize keyboard/midi events to grid quantitzar events de teclat/midi a la graella Record keyboard/midi events = On Grabar events de teclat/midi = Activat Record keyboard/midi events = Off Grabar events de teclat/midi =Desactivat Quantize incoming keyboard/midi events = On Quantitzar events entrants de teclat/midi = Activat Quantize incoming keyboard/midi events = Off Quantitzar events entrants de teclat/midi = Desactivat Zoom in Apropar Zoom out Allunyar Is not possible to change the pattern size when playing. No és possible canviar la mida del patró durant la reproducció. Select pattern size Seleccionar mida del patró Select grid resolution Seleccionar resolució de la graella Select note properties Seleccionar propietats de la nota Velocity Velocitat Pan Balanç No pattern selected No s'ha seleccionat cap patró Cutoff Límit de filtre Resonance Resonància Lead and Lag Desfasament negatiu i positiu Loaded Soundlibrary Carregat:Llibreria de sò PatternFillDialog Fill with selected pattern Omplir amb el patró seleccionat PatternFillDialog_UI Form 1 Formulari 1 &Fill &F Omplir Alt+F Alt+F &Clear &c Netejar Alt+C Alt+C To: A: From: De: Cancel Cancelar OK Acceptar PatternPropertiesDialog Pattern properties Propietats del patró %1#2 %1#2 %1 %1 PatternPropertiesDialog_UI Form1 Formulari1 &Cancel &Cancelar Alt+C Alt+C &OK &O Acceptar Alt+O Alt+O New Pattern Name Nom del nou patró Pattern category Categoria del patró PlayerControl Song Mode Mode cançó Playing. Reproduïnt. Stopped. Aturat. Song mode selected. Mode cançó seleccionat. Stop Aturar Pattern Mode Mode de patró Pattern mode selected. Mode de patró seleccionat. Jack-transport on/off Transport jack activat/desactivat Jack-transport mode = On Mode de transport jack = Activat Jack-transport mode = Off Mode de transport jack = Desctivat New BPM value Nou valor de PPM Rewind Rebobinar Play/ Pause Reproduïr / Pausa Fast Forward Avançar Switch Song/ Pattern Mode Canviar a mode de Cançó / Patró Pause. Pausa. JACK-transport will work only with JACK driver. El transport JACK només funciona amb el controlador JACK. Loop song Repetir cançó Loop song = On Repetir Cançó = Activat Loop song = Off Repetir cançó = Desactivat Show mixer Veure mesclador Mixer Mesclador Show Instrument Rack Veure taula d'instruments Instrument rack Taula d'instruments BeatCounter Panel on Panell contador de polsacions activat Set BPM / Set BPM and play Fixar PPM / Fixar PPM i reproduïr Jack-Time-Master on/off Mestre de sò JACK Activat/Desactivat BC Panel on Panell CP Activat BC Panel off Panell CP Desactivat Count BPM and start PLAY Contar PPM i REPRODUÏR Count and set BPM Contar i fixar PPM Jack-Time-Master mode = On Mode mestre de temps JACK = Activat Jack-Time-Master mode = Off Mode mestre de temps JACK = Desactivat PlaylistDialog Play List Browser Navegador de llistes de reproducció Song list Llista de cançons Script Script exec Script Executar Script Add Song to PlayList Afegir cançó a la llista de reproducció No Song selected! No hi ha cap cançó seleccionada! Load Playlist Carregar una llista de reproducció Hydrogen Playlist (*.h2playlist) Llista de reproducció Hydrogen (*.h2playlist) Save Playlist Desar Llista de reproducció No Song in List or no Song selected! No hi ha cançons a la llista de reproducció o no s'ha seleccionat cap cançó! Hydrogen Playlist (*.sh) Llista de reproducció Hydrogen (*.sh) Add Script to selected Song Afegir script a la cançó seleccionada No Script in use! No s'està utilitzant cap Script! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. No s'ha configurat cap editor per defecte. Si us plau selecciona el teu Editor per defecte No utilitzis un editor basat en consola Ho sentim, però no funcionarà en aquests moments. Set your Default Editor Configurar l'editor per defecte No Script selected! No has seleccionat cap Script! Error loading song. Error al carregar la cançó. sort ordena Hydrogen Scripts (*.sh) Scripts d'Hydrogen (*.sh) New Script Nou script Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. El nom o ruta de l'Script conté espais en blanc IMPORTNT La ruta a l'Script i el nom del Script no poden tenir espais en blanc. No Script! No hi ha cap Script! Playlist: Set song No. %1 Llista de reproducció: Configurar No. de cançó %1 PlaylistDialog_UI PlayList Browser Navegador de llistes de reproducció Add song to playlist Afegir cançó a la llista de distribució Remove song from playlist Eliminar cançó de la llista de distribució Load script Carregar script Remove script Esborrar Script Song list Llista de cançons Load list Carregar llista Save list Desar llista Edit script Editar script Play selected Reproduïr selecció Stop Aturar Clear playlist Netejar llista de reproducció New Script Script Nou PreferencesDialog Slow Lent Normal Normal Fast Ràpid <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Sistema Open Sound</b><br>Controlador d'àudio simple [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">No compilat</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Controlador de conexió Audio Jack</b><br>Controlador d'audio de baixa latència Preferences Preferències <b>ALSA Driver</b><br> <b>Controlador ALSA</b><br> <b>Automatic driver selection</b> <b>Selecció automàtica de controlador</b> <b>PortAudio Driver</b><br> <b>Controlador PortAudio</b><br> <b>CoreAudio Driver</b><br> <b>Controlador CoreAudio</b><br> Please restart hydrogen to enable/disable LASH support Si us plau, reinicia hydrogen per activar/desactivar soport per LASH PreferencesDialog_UI Buffer size Mida del buffer Device Dispositiu de sò Input Entrada Channel Canal All Tot Meters falloff speed Celocitat de caiguda de pic Slow Lent Normal Normal Fast Ràpid Application font Font per a l'aplicació Mixer font Font per al mesclador Select font Seleccionar font <i>After a font change the application must be restarted.</i> <i>Per tal que la nova font sigui utilitzada cal reiniciar l'aplicació.</i> Sample rate Freqüència de mostreig 44100 44100 48000 48000 ### 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 9 8 10 10 11 11 12 12 13 13 14 14 15 15 16 16 Form1 Formulari1 Polyphony Polifonia Style Estil &Cancel &Cancelar Alt+C Alt+C &OK &O acceptar Alt+O Alt+O &General &General Alt+R Alt+R Audio &System &Sistema d'Àudio Metronome volume Volum del metrònom Connect to &Default Output Pair Connectar al parell sortida per &defecte Alt+D Alt+D 88200 88200 96000 96000 &Midi System Sistema &Midi Midi driver Controlador Midi Ignore note-off Ignorar note-off &Appearance &Aparença &Reopen last used song Tornar a carrega&r l'ultima cançó usada Restart output Reiniciar la sortida Audio output details Detells de la sortida d'àudio Post-Fader Post-Atenuador Pre-Fader Pre-Atenuador Track output Sortida de pista Use lash Utilitzar lash first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm primer pas, ajustar error de temps entre la latència del controlador/teclat disparador i els ppm computats Beat counter drift compensation in 1/10 ms Compensació de deriva del contador de polsacions en 1/10 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup segon pas, ajustar compensació entre l'ultim controlador/teclat disparador i l'inici endarrerit del seqüenciador Beat counter start offset in ms Compensació del contador de polsacions en ms Enable timing offset (workaround for Ardour bug) Activar compensació de temps (solució temporal per a l'error amb Ardour) create per-instrument outputs crear sortides per instrument SimpleHTMLBrowser Manual Manual Welcome to Hydrogen Benvingut(da) a Hydrogen Don't show this message anymore No tornar a mostrar aquest missatge Ok Acceptar Documentation index Index de la documentació SongEditorPanel Create new pattern Crear un nou patró Move the selected pattern down Moure avall el patró seleccionat Move the selected pattern up Moure amunt el patró seleccionat Clear pattern sequence Eliminar la seqüència de patrons Song Editor Editor de cançó Select mode Mode seleccionar Draw mode Mode dibuix Warning, this will erase your pattern sequence. Are you sure? Atenció! això borrarà la teva seqüencia de patrons N'estàs segur? &Ok &Acceptar &Cancel &Cancelar stacked mode mode apilat stacked pattern mode mode patrons apilats single pattern mode mode de patró únic not_categorized sense_categoritzar Pattern %1 Patró %1 SongEditorPatternList Edit Editar Copy Copiar Delete Eliminar Properties Propietats Fill/Clear ... Omplir/Buidar ... Save Pattern Desar Patró Load Pattern Carregar Patró Open Pattern Obrir Patró Hydrogen Pattern (*.h2pattern) Patró Hydrogen (*.h2pattern) Error saving pattern! The pattern-file exists. Error desant patró! El fitxer patró ja existeix. Pattern 1 Patró 1 not_categorized no_categoritzat SongPropertiesDialog Song properties Propietatsde cançó SongPropertiesDialog_UI Notes Notes Author Autor Song name Títol de la cançó Form1 Formulari1 &Cancel &Cancelar Alt+C Alt+C &OK &Acceptar Alt+O Alt+O License Llicència SoundLibraryExportDialog Export Sound Library Exportar llibreria de sons Export drumkit Exportar kit de bateria SoundLibraryExportDialog_UI Dialog Diàleg Browse Navegar Export Exportar SoundLibraryImportDialog Sound Library import Importació de llibreria de sò Sound library Llibreria de sò Status Estat Updating SoundLibrary list... Actualitzant llista de llibreries de sò... Installed Instalació completa New Nou Author: %1 Autor: %1 Downloading SoundLibrary... Descarregant llibreria de sò... SoundLibrary imported in %1 Llibreria de sò importada a %1 An error occurred importing the SoundLibrary. Hi ha hagut un error a l'importar la llibreria de sò. Import drumkit Importar kit de bateria Drumkits Kits de bateria Songs Cançons Patterns Patrons License: %1 Licència: %1 SoundLibraryImportDialog_UI Dialog Diàleg Internet Internet Update list Actualitzar llista Sound Library Name Nom de la llibreria de sò Sound library Info Informació de la llibreria de sò Author... Autor... Download and install Descarregar i instalar Local file Fitxer local Browse... Navegar... Install Instalar 1 1 License... Llicència... Edit server list Editar la llista de servidors Close Tancar SoundLibraryPanel Load Carregar Export Exportar Delete Eliminar System drumkits Kits de bateria del sistema User drumkits Kits de bateria de l'usuari Warning, the selected drumkit will be deleted from disk. Are you sure? Atenció, el kit de bateria seleccionat serà esborrat del disk. N'estàs segur? &Ok &O Acceptar &Cancel &Cancelar Songs Cançons Patterns Patrons Error loading song. Error al carregar la cançó. Properties Propietats Warning, the selected pattern will be deleted from disk. Are you sure? Atenció, el patró seleccionat serà esborrat del disc. N'estàs segur? SoundLibraryPropertiesDialog_UI Dialog Diàleg Name Nom Author Autor Information Informació License Llicència Save Desar Cancel Cancelar Save changes made to instruments into sound library Desar els canvis fets als instruments a la llibreria de sò SoundLibraryRepositoryDialog Edit repository settings Editar configuració de repositoris Edit server list Editar llista de servidors URL URL SoundLibraryRepositoryDialog_UI Dialog Diàleg Add Afegir Delete Eliminar SoundLibrarySaveDialog Save Sound Library Desar llibreria de sò Please supply at least a valid name Si us plau, proporciona almenys un nom vàlid SoundLibrarySaveDialog_UI Dialog Diàleg Name Nom Author Autor Information Informació Cancel Cancelar License Llicència Save Desar SoundLibraryTree Sound library Llibreria de sò hydrogen-0.9.6-beta3/data/i18n/hydrogen.cs.qm000066400000000000000000001541071211146647700206340ustar00rootroot00000000000000J!LTTMijMiFMi=MMieMiMiM cPWT hTn.T TUjYpYpěZ ZZdZdZ|Z%ZGTvZ# -[ rm}K#]pќCgnJ0 EUo\H\ӵC\ӵea{?5NjwDEN}4&srrDnUu믎2{Մ= y"$,k}Rg L'-)+ALT. . ^b &dM>lMeȹfz|[F6o /~L=+b6M6@6=x*f3Af>q^WHZB.mYe`%_klt)S+RDO LS0mD\+mDfu|\V/|U<v1zlJl_7r9uXQ/!(9\r<?AC%IybPz^T b7b`bbIWqUY}1~"iI IBdIcpII6I=IQI(nmne!AyɷCU,`,,ZϕW,W'W W[WWWfWÑWfvvv,֏1c؃ޱeL:do ols,.vO2(#q58[|<@fSV|V|6W^a]eN{)hU h~oVh~z4k2m.|p~r`+v Xz-<BDp#Dzutzuȿ-g7iȻ ;AP\eo\yG{$})_3 "c >g R''mDkU*F_pak}e:~>#$5?e#(Ds֣$֣=>[!⪁wJ%rB En b`!o 0#P N4I4= V^^`~va.fvh3's*{Ec._M @b`'>M<oX¯N=~'o&ZHx`ݿB빆ko-B(B3d3d@{[xG.l.$'%3lcd{>Y3k33 ¸$f3&\tJx S(1 ){NP +s' 3b$ @eO Cn S%]T aOA h> h> w-X wqA  r ~j? ~s V1x !E 4+ $Z ~ T a 6 #~: +Z$ , Id I~ I I% I I I I   u ) c) ʧ% v  a ~N ez $> , # ̎0b $l %+^ > TYt+ gnr[ kJD x@#Vn zi >^ ?& ?Gd  / C Dn_ ;$Z s'? 'K = =S 5Z "U)1 2p` 5yaS 5ygV @( B C C"h FPJ \p2 `n^ jIx wM |v ~8  K _  aO 9 H G) $ 4O =Y =/@ S yEq { /z u 4)> <!  ͫ ͼ&V h; ӽ^n mmhi 3NFl"+$RE=@GV^jjefmenw>|[ &VXd-E@Ǘ.S ' ¬4mi"KJ.=Щ8HL"|aN!b pSst`4RU+eQYtkjwޔk?$"Hdi&<b>Kontakty</b><br>Mailing lists
     AboutDialogJ<b>Hlavn vvojY a zstupce:</b><br>$Main coder and mantainer:
     AboutDialog6<b>Strnka projektu</b><br>Project page
     AboutDialog6<b>Domovsk strnka</b><br>Website
     AboutDialogO aplikaciAbout AboutDialog######AboutDialog_UI&AutoYi&AuthorsAboutDialog_UI&Licence&LicenseAboutDialog_UI&OK&OKAboutDialog_UIO &programuA&boutAboutDialog_UIO HydrogenuAbout HydrogenAboutDialog_UI Alt+OAlt+OAboutDialog_UI0Informace o audio enginuAudio Engine InfoAudioEngineInfoForm######AudioEngineInfoForm_UI"Stav audio enginuAudio engine stateAudioEngineInfoForm_UIAudio vstup Audio outputAudioEngineInfoForm_UI Velikost bufferu Buffer sizeAudioEngineInfoForm_UIPYipojen k Connected toAudioEngineInfoForm_UIFormulY1Form1AudioEngineInfoForm_UI SnmkyFramesAudioEngineInfoForm_UIMIDI vstup MIDI inputAudioEngineInfoForm_UI NzevNameAudioEngineInfoForm_UIPaternyPatternsAudioEngineInfoForm_UIHran noty Playing notesAudioEngineInfoForm_UI$Vyt~en procesoru Process timeAudioEngineInfoForm_UI$Realtimeov snmkyRealtime framesAudioEngineInfoForm_UI(Vzorkovac frekvence Sample rateAudioEngineInfoForm_UISamplerSamplerAudioEngineInfoForm_UIVybran nstrojSelected instrumentAudioEngineInfoForm_UIVybran paternSelected patternAudioEngineInfoForm_UISekvencer SequencerAudioEngineInfoForm_UIPozice skladby Song positionAudioEngineInfoForm_UIStav skladby Song stateAudioEngineInfoForm_UISynteztorSynthAudioEngineInfoForm_UI TempoTicksAudioEngineInfoForm_UIs sAudioFileBrowser2Vyhledvn audio souboroAudio File BrowserAudioFileBrowser Nzev:Name:AudioFileBrowser*Vzorkovac frekvence: Samplerate:AudioFileBrowser.Vzorkovac frekvence %1Samplerate: %1AudioFileBrowserVelikost:Size:AudioFileBrowserVelikost: %1 BSize: %1 bytesAudioFileBrowser@&Nzev souboru do nzvu nstroje&Filename to instrument nameAudioFileBrowser_UI &Domo&HomeAudioFileBrowser_UI&PYehrt vzorek &Play SampleAudioFileBrowser_UI &Stop&StopAudioFileBrowser_UI&Nahoru&UpAudioFileBrowser_UI StornoCancelAudioFileBrowser_UI DialogDialogAudioFileBrowser_UI Dlka:Length:AudioFileBrowser_UI Nzev:Name:AudioFileBrowser_UIOtevYtOpenAudioFileBrowser_UI6PYehrt vzork&y po kliknutPla&y samples by clickingAudioFileBrowser_UI*Vzorkovac frekvence: Samplerate:AudioFileBrowser_UIVelikost:Size:AudioFileBrowser_UI DialogDialog Director_UI(%1/%2 KiB) - ETA %3DownloadWidget&### Autor bic sady### Drumkit authorDrumkitManager_UI(### info o bic sad### Drumkit infoDrumkitManager_UI&### Nzev bic sady### Drumkit nameDrumkitManager_UI@### Bic sada bude nainstalovna4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b> Bicch sady ke sta~en na <br> http://www.hydrogen-music.org </b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UI AutorAuthorDrumkitManager_UI NajtBrowseDrumkitManager_UI"Vymazat bic saduDelete drumkitDrumkitManager_UI*AdresY pro bic sadyDrumkit directoryDrumkitManager_UI.Nzev souboru bic sadyDrumkit filenameDrumkitManager_UINzev bic sady Drumkit nameDrumkitManager_UI ExportExportDrumkitManager_UIFormulY1Form1DrumkitManager_UI ImportImportDrumkitManager_UIInformaceInfoDrumkitManager_UI NahrtLoadDrumkitManager_UI Nahrt bic sadu Load drumkitDrumkitManager_UI Ulo~itSaveDrumkitManager_UIExport skladby Export songExportSongDialog&Prochzet... &Browse...ExportSongDialog_UI&ZavYt&CloseExportSongDialog_UI&Export&ExportExportSongDialog_UI1616ExportSongDialog_UI 192000192000ExportSongDialog_UI 2205022050ExportSongDialog_UI2424ExportSongDialog_UI3232ExportSongDialog_UI 4410044100ExportSongDialog_UI 4800048000ExportSongDialog_UI88ExportSongDialog_UI 9600096000ExportSongDialog_UI Alt+BAlt+BExportSongDialog_UI Alt+CAlt+CExportSongDialog_UI Alt+EAlt+EExportSongDialog_UI4Export cel skladby do WAVExport Whole Song to WAVExportSongDialog_UI6Nazev exportovanho souboruExport filenameExportSongDialog_UI*%1<br>%2 KHz<br>%3 %4%1
    %2 KHz
    %3 %4 FileBrowser*Zapnout/vypnout efekt FX on/off FxMixerLine,Hlavn vstup (master) Master output FxMixerLine&Storno&Cancel$H2Core::SoundLibraryPropertiesDialog&OK&Ok$H2Core::SoundLibraryPropertiesDialog6Vlastnosti zvukov knihovnySoundLibrary Properties$H2Core::SoundLibraryPropertiesDialogToto nen dostupn, mo~ete pouze ulo~it zmny nstroje do aktuln nahran zvukov knihovnyfThis is not possible, you can only save changes inside instruments to the current loaded sound library$H2Core::SoundLibraryPropertiesDialogPozor! Zmna nzvu bic sady bude mt za nsledek vytvoYen nov bic sady s tmto jmnem. Ur it to chcete?fWarning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure?$H2Core::SoundLibraryPropertiesDialog.Nahran bic sada: [%1]Drumkit loaded: [%1] HydrogenApp MixrMixer HydrogenAppEditor skladby Song Editor HydrogenAppSlaAttackInstrumentEditor tlumDecayInstrumentEditorOYez filtru Filter CutoffInstrumentEditor Rezonance filtruFilter resonanceInstrumentEditor HlavnGeneralInstrumentEditorZisk nstrojeInstrument gainInstrumentEditorZisk vrstvy Layer gainInstrumentEditor*Ladn vrstvy (hrub)Layer pitch (Coarse)InstrumentEditor*Ladn vrstvy (jemn)Layer pitch (Fine)InstrumentEditor VrstvyLayersInstrumentEditor&Nov nzev nstrojeNew instrument nameInstrumentEditor(Nhodn faktor vakyRandom pitch factorInstrumentEditorUvolnnReleaseInstrumentEditor8Zobrazit vlastnosti nstrojeShow instrument propertiesInstrumentEditor4Zobrazit vlastnosti vrstvyShow layers propertiesInstrumentEditor Vdr~SustainInstrumentEditorVymazat noty Clear notesInstrumentLineVymazat nstrojDelete instrumentInstrumentLine$Nhodn sla deruRandomize velocityInstrumentLineSloSoloInstrumentLineNstroj InstrumentInstrumentRack0Zobrazit editor nstrojoShow Instrument editorInstrumentRack.Zobrazit knihovnu zvukoShow sound libraryInstrumentRackKnihovna zvuko Sound libraryInstrumentRack2Editovat parametry efektuEdit FX parametersLadspaFXMixerLineNvrat efektu Effect returnLadspaFXMixerLineVyYadit efekt FX bypassLadspaFXMixerLine&Nzev LADSPA efektuLadspa FX nameLadspaFXMixerLineZapnoutActivateLadspaFXPropertiesVypnout DeactivateLadspaFXProperties6Vlastnosti LADSPA efektu %1LADSPA FX %1 PropertiesLadspaFXPropertiesBez efektu No pluginLadspaFXPropertiesVybrat efekt Select FXLadspaFXProperties:[%1] Vlastnosti LADSPA efektu[%1] LADSPA FX PropertiesLadspaFXPropertiesAbecedn seznamAlphabetic ListLadspaFXSelectorKategorizovno CategorizedLadspaFXSelectorSkupinyGroupsLadspaFXSelectorMonoMonoLadspaFXSelectorNepodporovno Not supportedLadspaFXSelector"Naposledy pou~it Recently UsedLadspaFXSelector&Vybrat LADSPA efektSelect LADSPA FXLadspaFXSelector StereoStereoLadspaFXSelector(### Autor efektu 1 2### FX maker 1 2LadspaFXSelector_UI&### copyright 1 2 3### copyright 1 2 3LadspaFXSelector_UI### ID efektu ### fx IDLadspaFXSelector_UI&### Jmenovka efektu ### fx labelLadspaFXSelector_UI$### Jmno efektu 1 ### fx name 1LadspaFXSelector_UI### Typ efektu ### fx typeLadspaFXSelector_UI&Storno&CancelLadspaFXSelector_UI&OK&OKLadspaFXSelector_UI11LadspaFXSelector_UI

    Copyright:

    LadspaFXSelector_UI

    ID:

    LadspaFXSelector_UI

    Label:

    LadspaFXSelector_UI

    Maker:

    LadspaFXSelector_UI

    Name:

    LadspaFXSelector_UI

    Type:

    LadspaFXSelector_UI Alt+CAlt+CLadspaFXSelector_UI Alt+OAlt+OLadspaFXSelector_UIFormulY1Form1LadspaFXSelector_UIMainFormO &aplikaci&AboutMainForm&PYidat nstroj&Add instrumentMainForm&Storno&CancelMainForm&Vymazat vae &Clear allMainForm&Zahodit&DiscardMainForm &Export knihovny&Export libraryMainForm&Export skladby &Export songMainForm &Import knihovny&Import libraryMainForm&Informace&InfoMainForm"&Nstrojov panel&Instrument RackMainForm &Mixr&MixerMainForm &Nov&NewMainForm&OtevYt&OpenMainForm&PYedvolby &PreferencesMainForm&Projekt&ProjectMainForm &Konec&QuitMainForm&Ulo~it&SaveMainForm &Ulo~it knihovnu &Save libraryMainForm&Zobrazit&ToolsMainForm*&U~ivatelsk pYru ka &User manualMainForm StornoCancelMainForm2Vymazat vaechny nstroje?Clear all instruments?MainForm,Nemohu ulo~it skladbu.Could not save song.MainForm &LaditDe&bugMainFormFPYat tuto zprvu ji~ nezobrazovatDon't show this message anymoreMainForm8Chyba pYi otevrn skladby.Error loading song.MainFormBChyba pYi zavdn audio ovlada eError starting audio driverMainForm4Expor&tovat patern jako...Expor&t pattern as...MainForm(Export &MIDI souboruExport &MIDI fileMainForm&Export MIDI souboruExport MIDI fileMainForm:Hydrogen patern (*.h2pattern)Hydrogen Pattern (*.h2pattern)MainForm&Hydrogen pripraven.Hydrogen Ready.MainForm6Skladba Hydrogen (*.h2song)Hydrogen Song (*.h2song)MainForm&Nstroje I&nstrumentsMainFormNstroj InstrumentMainForm<Jack: nemohu aktivovat klienta#Jack driver: cannot activate clientMainFormHJack: nemohu pYipojit vstupn porty'Jack driver: cannot connect output portMainForm8Jack: chyba registrace porto#Jack driver: error in port registerMainForm&Jack: server neb~Jack driver: server shutdownMainForm&MIDI soubor (*.mid)Midi file (*.mid)MainFormOKOkMainFormOtevYt &demo Open &DemoMainFormOtevYt &patern Open &PatternMainForm OtevYt &nedvn Open &recentMainFormOtevYt patern Open PatternMainFormOtevYt skladbu Open songMainFormPatern ulo~en.Pattern saved.MainForm Playlist &editorPlaylist &editorMainForm@Playlist: Nastavit skladbu  . %1Playlist: Set song No. %1MainForm.Playlist: Skladba  . %1Playlist: Song No. %1MainFormTisk objekto Print ObjectsMainFormUlo~it &jako... Save &as...MainForm*Ulo~it patern jako...Save Pattern as ...MainFormUlo~it skladbu Save songMainFormDZobrazit informace o &audio enginuShow &audio engine infoMainForm(&Informace o skladb Show &infoMainForm Skladba ulo~ena.Song saved as.MainForm Skladba ulo~ena. Song saved.MainForm*Neznm audio ovlada Unknown audio driverMainForm Neznm chyba %1Unknown error %1MainFormPou~vte vvojovou verzi Hydrogenu. Prosme, pomozte nm hlaenm chyb nebo npady na kontaktn adrese hydrogen-devel tmu.<br><br>Dkujeme!You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!MainForm.Lidsk faktor pYesnosti Humanize timeMasterMixerLine0Lidsk faktor sly deruHumanize velocityMasterMixerLineJNastavit lidsk faktor pYesnosti [%1] Set humanize time parameter [%1]MasterMixerLineLNastavit lidsk faktor sly deru [%1]$Set humanize velocity parameter [%1]MasterMixerLine@Nastavit celkovou hlasitost [%1]Set master volume [%1]MasterMixerLine:Nastavit faktor kolsn [%1]Set swing factor [%1]MasterMixerLineKolsnSwingMasterMixerLineAkceAction MidiTableUdlostEvent MidiTable Param.Param. MidiTable4Nastavit roveH efektu %1 Set FX %1 level MixerNNastavit hlasitost LADSPA efektu ( %1 )Set LADSPA FX ( %1 ) volumeMixer*Zobrazit panel efekto Show FX panelMixer0Zobrazit api ky nstrojoShow instrument peaksMixerFZobrazovn spicek nastroju vypnutoShow instrument peaks = OffMixerFZobrazovn spicek nastroju zapnutoShow instrument peaks = OnMixerJNzev nstroje (dvojklik pro editaci)&Instrument name (double click to edit) MixerLineZtlumitMute MixerLinePanoramaPan MixerLinePYehrt vzorek Play sample MixerLine>Nastavit panoramu nstroje [%1]Set instr. pan [%1] MixerLine@Nastavit hlasitost nstroje [%1]Set instrument volume [%1] MixerLineSloSolo MixerLineHraniceCutoffPatternEditorPanel$Poslech novch notHear new notesPatternEditorPanel4Vypnout poslech novch notHear new notes = OffPatternEditorPanel4Zapnout poslech novch notHear new notes = OnPatternEditorPanelTNen mo~n zmnit patern bhem pYehrvn.8Is not possible to change the pattern size when playing.PatternEditorPanelPreciznost Lead and LagPatternEditorPanel0Nahran zvukov knihovnaLoaded SoundlibraryPatternEditorPanel0Nen vybrn ~dn paternNo pattern selectedPatternEditorPanelPanoramaPanPatternEditorPanel$Patern editor - %1Pattern editor - %1PatternEditorPanelXVypnout pYichytvn not z klvesnice / MIDI,Quantize incoming keyboard/midi events = OffPatternEditorPanelXZapnout pYichytvn not z klvesnice / MIDI+Quantize incoming keyboard/midi events = OnPatternEditorPanelXPYichytit noty z klvesnice / MIDI ke mY~ce%Quantize keyboard/midi events to gridPatternEditorPanelRezonance ResonancePatternEditorPanel.Vybrat rozliaen mY~kySelect grid resolutionPatternEditorPanel*Vybrat vlatnosti notySelect note propertiesPatternEditorPanel.Vybrat velikost paternuSelect pattern sizePatternEditorPanelSila uderuVelocityPatternEditorPanelZvtaitZoom inPatternEditorPanelZmenaitZoom outPatternEditorPanel2Vyplnit vybranm paternemFill with selected patternPatternFillDialog&Vy istit&ClearPatternFillDialog_UIVy&plnit&FillPatternFillDialog_UI Alt+CAlt+CPatternFillDialog_UI Alt+FAlt+FPatternFillDialog_UI StornoCancelPatternFillDialog_UI Form 1Form 1PatternFillDialog_UIOd:From:PatternFillDialog_UIOKOKPatternFillDialog_UIDo:To:PatternFillDialog_UI$Vlastnosti paternuPattern propertiesPatternPropertiesDialog&Storno&CancelPatternPropertiesDialog_UI&OK&OKPatternPropertiesDialog_UI Alt+CAlt+CPatternPropertiesDialog_UI Alt+OAlt+OPatternPropertiesDialog_UI Form1Form1PatternPropertiesDialog_UI(Nzev novho paternuNew Pattern NamePatternPropertiesDialog_UI"Kategorie paternuPattern categoryPatternPropertiesDialog_UIPreciznost Lead and LagPianoRollEditorPanoramaPanPianoRollEditorSila uderuVelocityPianoRollEditor$Panel rytmu vypnut BC Panel off PlayerControl$Panel rytmu zapnut BC Panel on PlayerControl0Zaznamenat BPM a prehrat Count BPM and start PLAY PlayerControl2Zaznamenat a nastavit BPM Count and set BPM PlayerControl6Jack-Time-Master mod vypnut Jack-Time-Master mode = Off PlayerControl6Jack-Time-Master mod zapnut Jack-Time-Master mode = On PlayerControlPanel rytmuBeatCounter Panel on PlayerControl VpYed Fast Forward PlayerControl Nstrojov panelInstrument rack PlayerControlVJack pYenos pracuje pouze s Jack ovlada em./JACK-transport will work only with JACK driver. PlayerControlDZapnout / Vypnout Jack-Time-MasterJack-Time-Master on/off PlayerControl&Vypnout Jack pYenosJack-transport mode = Off PlayerControl&Zapnout Jack pYenosJack-transport mode = On PlayerControl:Zapnout / Vypnout Jack pYenosJack-transport on/off PlayerControl Opakovat skladbu Loop song PlayerControl2Opakovani skladby vypnutoLoop song = Off PlayerControl2Opakovani skladby zapnutoLoop song = On PlayerControl MixrMixer PlayerControl Nov hodnota BPM New BPM value PlayerControlRe~im patern Pattern Mode PlayerControl*Rezim paternu vybran.Pattern mode selected. PlayerControlPozastaveno.Pause. PlayerControlPYehrt / Pauza Play/ Pause PlayerControlPrehrava se.Playing. PlayerControlZptRewind PlayerControlJNastavit BPM / Nastavit BPM a pYehrtSet BPM / Set BPM and play PlayerControl2Zobrazit nstrojov panelShow Instrument Rack PlayerControlZobrazit mixr Show mixer PlayerControlRe~im skladba Song Mode PlayerControl*Rezim skladby vybran.Song mode selected. PlayerControlStopStop PlayerControlZastaveno.Stopped. PlayerControl@PYidat skript do zvolen skladbyAdd Script to selected SongPlaylistDialog6PYidat skladbu do playlistuAdd Song to PlayListPlaylistDialog8Chyba pYi otevrn skladby.Error loading song.PlaylistDialog VpYed Fast ForwardPlaylistDialog@Hydrogen playlist (*.h2playlist) Hydrogen Playlist (*.h2playlist)PlaylistDialog0Hydrogen playlist (*.sh)Hydrogen Playlist (*.sh)PlaylistDialog,Hydrogen skript (*.sh)Hydrogen Scripts (*.sh)PlaylistDialogNahrt playlist Load PlaylistPlaylistDialogNov skript New ScriptPlaylistDialog@Nen nastaven vchoz editor. Prosm, nastavte si va vchoz editor! Nepou~vejte konzolov editor! Omlouvme se, momentln tato funkce nen implementovna.No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment.PlaylistDialog4Nepou~v se ~dn skript!No Script in use!PlaylistDialog2Nen vybrn ~dn skript!No Script selected!PlaylistDialog}dn skript! No Script!PlaylistDialogtSeznam neobsahuje skladby nebo nen ~dn skladba vybrna!$No Song in List or no Song selected!PlaylistDialog6Nen vybrna ~dn skladba!No Song selected!PlaylistDialogPozastaveno.Pause.PlaylistDialogZptRewindPlaylistDialogUlo~it playlist Save PlaylistPlaylistDialog SkriptScriptPlaylistDialogNzev skriptu nebo cesta k nmu obsahuje mezery. DnLE}IT Cesta ke skriptu a jeho nzev nesm obsahovat mezery.Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces.PlaylistDialogDNastavte si vlastn vchoz editorSet your Default EditorPlaylistDialogSeznam skladeb Song listPlaylistDialogStopStopPlaylistDialogSpustit skript exec ScriptPlaylistDialogSeYaditsortPlaylistDialog"Sprvce playlistoPlayList BrowserPlaylistDialog_UISeznam skladeb Song listPlaylistDialog_UI&Storno&CancelPreferencesDialog&OK&OkPreferencesDialog.<b>Ovlada ALSA</b><br>ALSA Driver
    PreferencesDialogB<b>Automatick vbr ovlada e</b>!Automatic driver selectionPreferencesDialog8<b>Ovlada CoreAudio</b><br>CoreAudio Driver
    PreferencesDialog<b>Jack Audio Connection Kit</b><br>Nzkolaten n zvukov ovlada CJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialog~<b>Open Sound System</b><br>Jednoduch audio ovlada [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog8<b>Ovlada PortAudio</b><br>PortAudio Driver
    PreferencesDialogb<br><b><font color="red">Nekompilovno</font></b>0
    Not compiledPreferencesDialog RychleFastPreferencesDialogNormlnNormalPreferencesDialog|Prosm restartujte Hydrogen pro zapnut / vypnut LASH podpory6Please restart hydrogen to enable/disable LASH supportPreferencesDialogPYedvolby PreferencesPreferencesDialog PomaluSlowPreferencesDialog######PreferencesDialog_UI&Vzhled &AppearancePreferencesDialog_UI&Storno&CancelPreferencesDialog_UI&Obecn&GeneralPreferencesDialog_UI&MIDI systm &Midi SystemPreferencesDialog_UI&OK&OKPreferencesDialog_UIP&Znovu na st naposledy pou~itou skladbu&Reopen last used songPreferencesDialog_UI11PreferencesDialog_UI1010PreferencesDialog_UI1111PreferencesDialog_UI1212PreferencesDialog_UI1313PreferencesDialog_UI1414PreferencesDialog_UI1515PreferencesDialog_UI1616PreferencesDialog_UI22PreferencesDialog_UI33PreferencesDialog_UI44PreferencesDialog_UI 4410044100PreferencesDialog_UI 4800048000PreferencesDialog_UI55PreferencesDialog_UI66PreferencesDialog_UI77PreferencesDialog_UI88PreferencesDialog_UI 8820088200PreferencesDialog_UI99PreferencesDialog_UI 9600096000PreferencesDialog_UIl<i>Zmna psma se projev a~ po restartu aplikace.</i>=After a font change the application must be restarted.PreferencesDialog_UIVaechnoAllPreferencesDialog_UI Alt+CAlt+CPreferencesDialog_UI Alt+DAlt+DPreferencesDialog_UI Alt+OAlt+OPreferencesDialog_UI Alt+RAlt+RPreferencesDialog_UIPsmo aplikaceApplication fontPreferencesDialog_UIAudio &systm Audio &SystemPreferencesDialog_UI*Detaily audio vstupuAudio output detailsPreferencesDialog_UIZPo tadlo dero kompenzuje odchylku po 0,1 ms-Beat counter drift compensation in 1/10 ms PreferencesDialog_UINPo ta dero startuje s odchylkou v ms#Beat counter start offset in ms PreferencesDialog_UI6Velikost vyrovnvac pamti Buffer sizePreferencesDialog_UI KanlChannelPreferencesDialog_UIBNapojit na &vchoz stereo vstupConnect to &Default Output PairPreferencesDialog_UIZaYzenDevicePreferencesDialog_UI RychleFastPreferencesDialog_UI Form1Form1PreferencesDialog_UI,Ignorovat vypnut notyIgnore note-offPreferencesDialog_UI VstupInputPreferencesDialog_UI6Rychlost poklesu indiktoroMeters falloff speedPreferencesDialog_UI&Hlasitost metronomuMetronome volumePreferencesDialog_UIMIDI ovlada  Midi driverPreferencesDialog_UIPsmo mixru Mixer fontPreferencesDialog_UINormlnNormalPreferencesDialog_UI(Vcehlas (polyfonie) PolyphonyPreferencesDialog_UIPost fder Post-FaderPreferencesDialog_UIPre fder Pre-FaderPreferencesDialog_UI$Restartovat vstupRestart outputPreferencesDialog_UI(Vzorkovac frekvence Sample ratePreferencesDialog_UIVybrat psmo Select fontPreferencesDialog_UI PomaluSlowPreferencesDialog_UIStylStylePreferencesDialog_UIVstup stopy Track outputPreferencesDialog_UIPou~vat LASHUse lashPreferencesDialog_UIPrvn krok: upravte nesoulad  asovn mezi latenc tla tka kontrolru (klvesnice) a napo tanm BPM_first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpmPreferencesDialog_UIDruh krok: upravte odstup mezi poslednm stiskem tla tka kontrolru (klvesnice) a zpo~dnm startu sekvencerufsecond step, adjust offset between last controller/keybord trigger and the deferred sequencer startup PreferencesDialog_UI&Storno&Cancel SampleEditor&OK&Ok SampleEditor&ZavYt&CloseSampleEditor_UI00SampleEditor_UI11SampleEditor_UI1/161/16SampleEditor_UI1/21/2SampleEditor_UI1/321/32SampleEditor_UI1/41/4SampleEditor_UI1/641/64SampleEditor_UI1/81/8SampleEditor_UI1010SampleEditor_UI1111SampleEditor_UI1212SampleEditor_UI1313SampleEditor_UI1414SampleEditor_UI1515SampleEditor_UI1616SampleEditor_UI1717SampleEditor_UI1818SampleEditor_UI1919SampleEditor_UI22SampleEditor_UI2020SampleEditor_UI2121SampleEditor_UI2222SampleEditor_UI2323SampleEditor_UI2424SampleEditor_UI2525SampleEditor_UI2626SampleEditor_UI2727SampleEditor_UI2828SampleEditor_UI2929SampleEditor_UI33SampleEditor_UI3030SampleEditor_UI3131SampleEditor_UI3232SampleEditor_UI44SampleEditor_UI55SampleEditor_UI66SampleEditor_UI77SampleEditor_UI88SampleEditor_UI99SampleEditor_UI DialogDialogSampleEditor_UI"Obsah dokumentaceDocumentation indexSimpleHTMLBrowserFTuto zprvu pYat ji~ nezobrazovatDon't show this message anymoreSimpleHTMLBrowserPYru kaManualSimpleHTMLBrowserOKOkSimpleHTMLBrowser&Vtejte v HydrogenuWelcome to HydrogenSimpleHTMLBrowser&Storno&CancelSongEditorPanel&OK&OkSongEditorPanel2Vy istit sekvenci paternuClear pattern sequenceSongEditorPanel(VytvoYit nov paternCreate new patternSongEditorPanelRe~im zadvn Draw modeSongEditorPanel:PYesunout vybran patern doloMove the selected pattern downSongEditorPanel>PYesunout vybran patern nahoruMove the selected pattern upSongEditorPanelRe~im vbru Select modeSongEditorPanelEditor skladby Song EditorSongEditorPanel~Varovn: toto vyma~e vaai sekvenci paternu. Ur it to chcete?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanel Nekategorizovnonot_categorizedSongEditorPanel*Re~im jednoho paternusingle pattern modeSongEditorPanelHromadn re~im stacked modeSongEditorPanel$Re~im vce paternostacked pattern modeSongEditorPanel500500SongEditorPanelBpmWidget_UI 500,55500,55SongEditorPanelBpmWidget_UI StornoCancelSongEditorPanelBpmWidget_UIOKOkSongEditorPanelBpmWidget_UI StornoCancelSongEditorPanelTagWidget_UIOKOkSongEditorPanelTagWidget_UI&Storno&CancelSongEditorPatternList&OK&OkSongEditorPatternListKoprovatCopySongEditorPatternListVymazatDeleteSongEditorPatternList*Vyplnit / Vy istit...Fill/Clear ...SongEditorPatternList:Hydrogen patern (*.h2pattern)Hydrogen Pattern (*.h2pattern)SongEditorPatternListNahrt patern Load PatternSongEditorPatternListOtevYt patern Open PatternSongEditorPatternListVlastnosti PropertiesSongEditorPatternListUlo~it patern Save PatternSongEditorPatternList Nekategorizovnonot_categorizedSongEditorPatternList$Vlastnosti skladbySong propertiesSongPropertiesDialog &OK &OKSongPropertiesDialog_UI&Storno&CancelSongPropertiesDialog_UI Alt+CAlt+CSongPropertiesDialog_UI Alt+OAlt+OSongPropertiesDialog_UI AutorAuthorSongPropertiesDialog_UI Form1Form1SongPropertiesDialog_UILicenceLicenseSongPropertiesDialog_UIPoznmkyNotesSongPropertiesDialog_UINzev skladby Song nameSongPropertiesDialog_UI*Export knihovny zvukoExport Sound LibrarySoundLibraryExportDialogProchzetBrowseSoundLibraryExportDialog_UI DialogDialogSoundLibraryExportDialog_UI ExportExportSoundLibraryExportDialog_UIZVyskytla se chyba pYi importu knihovny zvuko.-An error occurred importing the SoundLibrary.SoundLibraryImportDialogAutor: %1 Author: %1SoundLibraryImportDialog6Stahovn knihovny zvuko...Downloading SoundLibrary...SoundLibraryImportDialogBic sadyDrumkitsSoundLibraryImportDialog(Importovat bic saduImport drumkitSoundLibraryImportDialogInstalovno InstalledSoundLibraryImportDialogLicence: %1 License: %1SoundLibraryImportDialogNovNewSoundLibraryImportDialogPaternyPatternsSoundLibraryImportDialogSkladbySongsSoundLibraryImportDialog*Import knihovny zvukoSound Library importSoundLibraryImportDialogKnihovna zvuko Sound librarySoundLibraryImportDialog@Knihovna zvuko importovna do %1SoundLibrary imported in %1SoundLibraryImportDialogStavStatusSoundLibraryImportDialogJAktualizace seznamu knihoven zvuko...Updating SoundLibrary list...SoundLibraryImportDialog11SoundLibraryImportDialog_UIAutor... Author...SoundLibraryImportDialog_UIProchzet... Browse...SoundLibraryImportDialog_UI ZavYtCloseSoundLibraryImportDialog_UI DialogDialogSoundLibraryImportDialog_UI.Sthnout a nainstalovatDownload and installSoundLibraryImportDialog_UI,Upravit seznam serveroEdit server listSoundLibraryImportDialog_UIInstalovatInstallSoundLibraryImportDialog_UIInternetInternetSoundLibraryImportDialog_UILicence... License...SoundLibraryImportDialog_UILokln soubor Local fileSoundLibraryImportDialog_UI(Nzev knihovny zvukoSound Library NameSoundLibraryImportDialog_UI4Informace o knihovn zvukoSound library InfoSoundLibraryImportDialog_UI&Aktualizovat seznam Update listSoundLibraryImportDialog_UI&Storno&CancelSoundLibraryPanel&OK&OkSoundLibraryPanelVymazatDeleteSoundLibraryPanel8Chyba pYi otevrn skladby.Error loading song.SoundLibraryPanel ExportExportSoundLibraryPanel NahrtLoadSoundLibraryPanelPaternyPatternsSoundLibraryPanelVlastnosti PropertiesSoundLibraryPanelSkladbySongsSoundLibraryPanel&Systmov bic sadySystem drumkitsSoundLibraryPanel*U~ivatelsk bic sady User drumkitsSoundLibraryPanelVarovn: vybran patern bude vymazn z disku. Ur it to chcete?FWarning, the selected pattern will be deleted from disk. Are you sure?SoundLibraryPanel AutorAuthorSoundLibraryPropertiesDialog_UI StornoCancelSoundLibraryPropertiesDialog_UI DialogDialogSoundLibraryPropertiesDialog_UIInformace InformationSoundLibraryPropertiesDialog_UILicenceLicenseSoundLibraryPropertiesDialog_UI NzevNameSoundLibraryPropertiesDialog_UI Ulo~itSave SoundLibraryPropertiesDialog_UIbUlo~it proveden zmny nstrojo do knihovny zvuko3Save changes made to instruments into sound librarySoundLibraryPropertiesDialog_UI8Upravit nastaven repozitYeEdit repository settingsSoundLibraryRepositoryDialog,Upravit seznam serveroEdit server listSoundLibraryRepositoryDialogURLURLSoundLibraryRepositoryDialog PYidatAddSoundLibraryRepositoryDialog_UIVymazatDeleteSoundLibraryRepositoryDialog_UI DialogDialogSoundLibraryRepositoryDialog_UI*Ulo~it knihovnu zvukoSave Sound LibrarySoundLibrarySaveDialog AutorAuthorSoundLibrarySaveDialog_UI StornoCancelSoundLibrarySaveDialog_UI DialogDialogSoundLibrarySaveDialog_UIInformace InformationSoundLibrarySaveDialog_UILicenceLicenseSoundLibrarySaveDialog_UI NzevNameSoundLibrarySaveDialog_UI Ulo~itSave SoundLibrarySaveDialog_UIKnihovna zvuko Sound librarySoundLibraryTree StornoCancelVirtualPatternDialog_UI DialogDialogVirtualPatternDialog_UIOKOKVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.cs.ts000066400000000000000000006364471211146647700206610ustar00rootroot00000000000000 AboutDialog About O aplikaci <b>Website</b><br> <b>Domovská stránka</b><br> <b>Project page</b><br> <b>Stránka projektu</b><br> <b>Mailing lists</b><br> <b>Kontakty</b><br> <b>Main coder and mantainer:</b><br> <b>Hlavní vývojář a zástupce:</b><br> AboutDialog_UI About Hydrogen O Hydrogenu &OK &OK Alt+O Alt+O A&bout O &programu ### ### &Authors &Autoři &License &Licence <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info Informace o audio enginu AudioEngineInfoForm_UI Form1 Formulář1 ### ### Buffer size Velikost bufferu Sample rate Vzorkovací frekvence Connected to Připojen k Frames Snímky Process time Vytížení procesoru Ticks Tempo Song state Stav skladby Selected instrument Vybraný nástroj Audio engine state Stav audio enginu Selected pattern Vybraný patern Playing notes Hrané noty Patterns Paterny Song position Pozice skladby Sampler Sampler Synth Syntezátor Sequencer Sekvencer MIDI input MIDI vstup Name Název Audio output Audio výstup Realtime frames Realtimeové snímky AudioFileBrowser Audio File Browser Vyhledávání audio souborů Size: %1 bytes Velikost: %1 B Samplerate: %1 Vzorkovací frekvence %1 s s Name: Název: Size: Velikost: Samplerate: Vzorkovací frekvence: Sample length: Please do not preview samples which are longer than 10 minutes! Sample length: AudioFileBrowser_UI Dialog Dialog Open Otevřít Name: Název: Samplerate: Vzorkovací frekvence: Size: Velikost: Length: Délka: Cancel Storno Pla&y samples by clicking Přehrát vzork&y po kliknutí &Up &Nahoru &Home &Domů &Play Sample &Přehrát vzorek &Filename to instrument name &Název souboru do názvu nástroje &Stop &Stop View hidden folders Be careful, this change all Layer velocity settings Set automatic velocity Director Director Director_UI Dialog Dialog DownloadWidget (%1/%2 KiB) - ETA %3 DrumkitManager_UI Form1 Formulář1 Load Nahrát ### Drumkit author ### Autor bicí sady Delete drumkit Vymazat bicí sadu ### Drumkit name ### Název bicí sady ### Drumkit info ### info o bicí sadě Load drumkit Nahrát bicí sadu Save Uložit Author Autor Info Informace Drumkit name Název bicí sady Import Import Drumkit filename Název souboru bicí sady Browse Najít <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b> Bicích sady ke stažení na <br> http://www.hydrogen-music.org </b> ### The drumkit will be installed zncxbmzbxcmznxbcmz ### Bicí sada bude nainstalována Export Export Drumkit directory Adresář pro bicí sady ExportSongDialog Export song Export skladby The file %1 exists. Overwrite the existing file? Export to a single track Export to seperate tracks Both ExportSongDialog_UI Export Whole Song to WAV Export celé skladby do WAV &Close &Zavřít Alt+C Alt+C &Export &Export Alt+E Alt+E Export filename Nazev exportovaného souboru &Browse... &Procházet... Alt+B Alt+B Samplerate in Hz: 22050 22050 44100 44100 48000 48000 96000 96000 192000 192000 SampleDepth in Bit: 8 8 16 16 24 24 32 32 Templates: WAV in CD quality "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off Zapnout/vypnout efekt Master output Hlavní výstup (master) H2Core::SongEditorPanelBpmWidget BPM H2Core::SongEditorPanelTagWidget Tag H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties Vlastnosti zvukové knihovny &Ok &OK &Cancel &Storno This is not possible, you can only save changes inside instruments to the current loaded sound library Toto není dostupné, můžete pouze uložit změny nástroje do aktuálně nahrané zvukové knihovny Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Pozor! Změna názvu bicí sady bude mít za následek vytvoření nové bicí sady s tímto jménem. Určitě to chcete? Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] Nahraná bicí sada: [%1] Song Editor Editor skladby Instrument + Pattern Mixer Mixér InstrumentEditor Random pitch factor Náhodný faktor výšky Filter Cutoff Ořez filtru Filter resonance Rezonance filtru Attack Síla Decay Útlum Sustain Výdrž Release Uvolnění Instrument gain Zisk nástroje Layer gain Zisk vrstvy Layer pitch (Coarse) Ladění vrstvy (hrubé) Layer pitch (Fine) Ladění vrstvy (jemné) Show instrument properties Zobrazit vlastnosti nástroje Show layers properties Zobrazit vlastnosti vrstvy New instrument name Nový název nástroje General Hlavní Layers Vrstvy Stop the current playing instrument-note before trigger the next note sample. Auto-Stop-Note InstrumentLine Clear notes Vymazat noty Randomize velocity Náhodná síla úderu Delete instrument Vymazat nástroj Fill notes ... Fill all notes Fill 1/2 notes Fill 1/3 notes Fill 1/4 notes Fill 1/6 notes Fill 1/8 notes Mute instrument Solo Sólo InstrumentRack Show Instrument editor Zobrazit editor nástrojů Instrument Nástroj Show sound library Zobrazit knihovnu zvuků Sound library Knihovna zvuků LadspaFXMixerLine FX bypass Vyřadit efekt Edit FX parameters Editovat parametry efektu Ladspa FX name Název LADSPA efektu Effect return Návrat efektu LadspaFXProperties Select FX Vybrat efekt Activate Zapnout [%1] LADSPA FX Properties [%1] Vlastnosti LADSPA efektu Deactivate Vypnout LADSPA FX %1 Properties Vlastnosti LADSPA efektu %1 No plugin Bez efektu Remove FX LadspaFXSelector Select LADSPA FX Vybrat LADSPA efekt Groups Skupiny Stereo Stereo Mono Mono Not supported Nepodporováno Recently Used Naposledy použité Alphabetic List Abecední seznam Categorized Kategorizováno LadspaFXSelector_UI Form1 Formulář1 &Cancel &Storno Alt+C Alt+C &OK &OK Alt+O Alt+O ### fx label ### Jmenovka efektu ### fx type ### Typ efektu ### fx ID ### ID efektu 1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> ### fx name 1 ### Jméno efektu 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> ### FX maker 1 2 ### Autor efektu 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 ### copyright 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm Hydrogen Ready. Hydrogen pripraven. &Project &Projekt &New &Nový &Open &Otevřít Open &Demo Otevřít &demo Open &recent Otevřít &nedávný &Save &Uložit Save &as... Uložit &jako... Export &MIDI file Export &MIDI souboru &Export song &Export skladby &Quit &Konec &Tools &Zobrazit &Mixer &Mixér &Instrument Rack &Nástrojový panel &Preferences &Předvolby De&bug &Ladit Show &audio engine info Zobrazit informace o &audio enginu Print Objects Tisk objektů &Info &Informace &User manual &Uživatelská příručka &About O &aplikaci &Discard &Zahodit &Cancel &Storno Hydrogen Song (*.h2song) Skladba Hydrogen (*.h2song) Save song Uložit skladbu Song saved. Skladba uložena. Open song Otevřít skladbu Error loading song. Chyba při otevírání skladby. Midi file (*.mid) MIDI soubor (*.mid) Export MIDI file Export MIDI souboru Unknown audio driver Neznámý audio ovladač Error starting audio driver Chyba při zavádění audio ovladače Jack driver: server shutdown Jack: server neběží Jack driver: cannot activate client Jack: nemohu aktivovat klienta Jack driver: cannot connect output port Jack: nemohu připojit výstupní porty Jack driver: error in port register Jack: chyba registrace portů Unknown error %1 Neznámá chyba %1 Clear all instruments? Vymazat všechny nástroje? Ok OK Cancel Storno You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Používáte vývojovou verzi Hydrogenu. Prosíme, pomozte nám hlášením chyb nebo nápady na kontaktní adrese hydrogen-devel týmu.<br><br>Děkujeme! Could not save song. Nemohu uložit skladbu. Open &Pattern Otevřít &patern Hydrogen Pattern (*.h2pattern) Hydrogen patern (*.h2pattern) Save Pattern as ... Uložit patern jako... Pattern saved. Patern uložen. Open Pattern Otevřít patern Don't show this message anymore Příště tuto zprávu již nezobrazovat Playlist: Set song No. %1 Playlist: Nastavit skladbu č. %1 Show &info &Informace o skladbě Expor&t pattern as... Expor&tovat patern jako... I&nstruments &Nástroje &Add instrument &Přidat nástroj &Clear all &Vymazat vše &Save library &Uložit knihovnu &Export library &Export knihovny Playlist &editor Playlist &editor &Import library &Import knihovny Info|About Song saved as. Skladba uložena. Playlist: Song No. %1 Playlist: Skladba č. %1 Director Could not export pattern. The document contains unsaved changes. Do you want to save the changes? Undo history &Undo menu Undo Redo Input mode Instrument Nástroj Drumkit Report bug MasterMixerLine Humanize velocity Lidský faktor síly úderu Humanize time Lidský faktor přesnosti Swing Kolísání Set master volume [%1] Nastavit celkovou hlasitost [%1] Set humanize time parameter [%1] Nastavit lidský faktor přesnosti [%1] Set humanize velocity parameter [%1] Nastavit lidský faktor síly úderu [%1] Set swing factor [%1] Nastavit faktor kolísání [%1] MidiTable Event Událost Param. Param. Action Akce press button to record midi event Mixer Show FX panel Zobrazit panel efektů Show instrument peaks Zobrazit špičky nástrojů Set FX %1 level Nastavit úroveň efektu %1 Show instrument peaks = On Zobrazování spicek nastroju zapnuto Show instrument peaks = Off Zobrazování spicek nastroju vypnuto Set LADSPA FX ( %1 ) volume Nastavit hlasitost LADSPA efektu ( %1 ) MixerLine Play sample Přehrát vzorek Mute Ztlumit Solo Sólo Pan Panorama Instrument name (double click to edit) Název nástroje (dvojklik pro editaci) Set instrument volume [%1] Nastavit hlasitost nástroje [%1] Set instr. pan [%1] Nastavit panoramu nástroje [%1] PatternEditorPanel Select pattern size Vybrat velikost paternu Select grid resolution Vybrat rozlišení mřížky Hear new notes Poslech nových not Quantize keyboard/midi events to grid Přichytit noty z klávesnice / MIDI ke mřížce Zoom in Zvětšit Zoom out Zmenšit Pattern editor - %1 Patern editor - %1 No pattern selected Není vybrán žádný patern Hear new notes = On Zapnout poslech nových not Hear new notes = Off Vypnout poslech nových not Quantize incoming keyboard/midi events = On Zapnout přichytávání not z klávesnice / MIDI Quantize incoming keyboard/midi events = Off Vypnout přichytávání not z klávesnice / MIDI Is not possible to change the pattern size when playing. Není možné změnit patern během přehrávání. Select note properties Vybrat vlatnosti noty Velocity Sila uderu Pan Panorama Cutoff Hranice Resonance Rezonance Lead and Lag Preciznost Loaded Soundlibrary Nahraná zvuková knihovna destructive mode pre delete settings destructive mode post delete settings Show piano roll editor NoteKey Show drum editor PatternFillDialog Fill with selected pattern Vyplnit vybraným paternem PatternFillDialog_UI Form 1 Form 1 &Fill Vy&plnit Alt+F Alt+F &Clear &Vyčistit Alt+C Alt+C From: Od: To: Do: Cancel Storno OK OK PatternPropertiesDialog Pattern properties Vlastnosti paternu %1#2 %1 PatternPropertiesDialog_UI Form1 Form1 &Cancel &Storno Alt+C Alt+C &OK &OK Alt+O Alt+O New Pattern Name Název nového paternu Pattern category Kategorie paternu Pattern description PianoRollEditor Velocity Sila uderu Pan Panorama Lead and Lag Preciznost PlayerControl Rewind Zpět Play/ Pause Přehrát / Pauza Stop Stop Fast Forward Vpřed Loop song Opakovat skladbu Pattern Mode Režim patern Song Mode Režim skladba Jack-transport on/off Zapnout / Vypnout Jack přenos Show mixer Zobrazit mixér Mixer Mixér Show Instrument Rack Zobrazit nástrojový panel Instrument rack Nástrojový panel Playing. Prehrava se. Pause. Pozastaveno. Stopped. Zastaveno. Song mode selected. Rezim skladby vybran. Pattern mode selected. Rezim paternu vybran. Jack-transport mode = On Zapnout Jack přenos Jack-transport mode = Off Vypnout Jack přenos JACK-transport will work only with JACK driver. Jack přenos pracuje pouze s Jack ovladačem. New BPM value Nová hodnota BPM Loop song = On Opakovani skladby zapnuto Loop song = Off Opakovani skladby vypnuto BeatCounter Panel on Panel rytmu Set BPM / Set BPM and play Nastavit BPM / Nastavit BPM a přehrát Jack-Time-Master on/off Zapnout / Vypnout Jack-Time-Master BC Panel on Panel rytmu zapnut BC Panel off Panel rytmu vypnut Count BPM and start PLAY Zaznamenat BPM a prehrat Count and set BPM Zaznamenat a nastavit BPM Jack-Time-Master mode = On Jack-Time-Master mod zapnut Jack-Time-Master mode = Off Jack-Time-Master mod vypnut Record Destructive Record Recalculate Rubberband modified samples if bpm will change Record midi events = On Record midi events = Off Destructive mode = Off Destructive mode = On Recalculate all samples using Rubberband ON Recalculate all samples using Rubberband OFF Switch metronome on/off PlaylistDialog Song list Seznam skladeb Script Skript exec Script Spustit skript Add Song to PlayList Přidat skladbu do playlistu No Song selected! Není vybrána žádná skladba! Load Playlist Nahrát playlist Hydrogen Playlist (*.h2playlist) Hydrogen playlist (*.h2playlist) Save Playlist Uložit playlist No Song in List or no Song selected! Seznam neobsahuje skladby nebo není žádná skladba vybrána! Hydrogen Playlist (*.sh) Hydrogen playlist (*.sh) Add Script to selected Song Přidat skript do zvolené skladby No Script in use! Nepoužívá se žádný skript! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Není nastaven výchozí editor. Prosím, nastavte si váš výchozí editor! Nepoužívejte konzolový editor! Omlouváme se, momentálně tato funkce není implementována. Set your Default Editor Nastavte si vlastní výchozí editor No Script selected! Není vybrán žádný skript! Error loading song. Chyba při otevírání skladby. sort Seřadit Hydrogen Scripts (*.sh) Hydrogen skript (*.sh) New Script Nový skript Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. Název skriptu nebo cesta k němu obsahuje mezery. DŮLEŽITÉ Cesta ke skriptu a jeho název nesmí obsahovat mezery. No Script! Žádný skript! &Playlist Add song to Play&list Add &current song to Playlist &Remove selected song from Playlist &Open Playlist &Save Playlist Save Playlist &as &Scripts &Add Script to selected song &Edit selected Script &Remove selected Script &Create a new Script Rewind Zpět Play/ Pause/ Load selected song Stop Stop Fast Forward Vpřed Please save your song first WARNING, the new file is executable by the owner of the file! Pause. Pozastaveno. Playlist Browser No song selected! Playlist: set song no. %1 no Script &New Playlist PlaylistDialog_UI PlayList Browser Správce playlistů Song list Seznam skladeb PreferencesDialog Preferences Předvolby Slow Pomalu Normal Normálně Fast Rychle <b>Automatic driver selection</b> <b>Automatický výběr ovladače</b> <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Open Sound System</b><br>Jednoduchý audio ovladač [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">Nekompilováno</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Jack Audio Connection Kit</b><br>Nízkolatenční zvukový ovladač <b>ALSA Driver</b><br> <b>Ovladač ALSA</b><br> <b>PortAudio Driver</b><br> <b>Ovladač PortAudio</b><br> <b>CoreAudio Driver</b><br> <b>Ovladač CoreAudio</b><br> Please restart hydrogen to enable/disable LASH support Prosím restartujte Hydrogen pro zapnutí / vypnutí LASH podpory Driver restart required. Restart driver? &Ok &OK &Cancel &Storno PreferencesDialog_UI Form1 Form1 &Cancel &Storno Alt+C Alt+C &OK &OK Alt+O Alt+O &General &Obecné &Reopen last used song &Znovu načíst naposledy použitou skladbu Alt+R Alt+R Audio &System Audio &systém ### ### Device Zařízení Buffer size Velikost vyrovnávací paměti Sample rate Vzorkovací frekvence 44100 44100 48000 48000 88200 88200 96000 96000 Connect to &Default Output Pair Napojit na &výchozí stereo výstup Alt+D Alt+D Polyphony Vícehlas (polyfonie) Metronome volume Hlasitost metronomu &Midi System &MIDI systém Ignore note-off Ignorovat vypnuté noty Channel Kanál All Všechno 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 Midi driver MIDI ovladač Input Vstup &Appearance &Vzhled Application font Písmo aplikace Select font Vybrat písmo Style Styl Slow Pomalu Normal Normálně Fast Rychle Meters falloff speed Rychlost poklesu indikátorů Mixer font Písmo mixéru <i>After a font change the application must be restarted.</i> <i>Změna písma se projeví až po restartu aplikace.</i> Restart output Restartovat výstup Audio output details Detaily audio výstupu Post-Fader Post fáder Pre-Fader Pre fáder Track output Výstup stopy Use lash Používat LASH first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm První krok: upravte nesoulad časování mezi latencí tlačítka kontroléru (klávesnice) a napočítaným BPM Beat counter drift compensation in 1/10 ms Počítadlo úderů kompenzuje odchylku po 0,1 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup Druhý krok: upravte odstup mezi posledním stiskem tlačítka kontroléru (klávesnice) a zpožděním startu sekvenceru Beat counter start offset in ms Počítač úderů startuje s odchylkou v ms Path to the Rubberband command-line utility Maximum number of bars create per-instrument outputs &Reopen last used playlist Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? &Ok &OK &Cancel &Storno Close dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditor_UI Dialog Dialog &Close &Zavřít Adjust sample start frame Adjust sample loop begin frame set processing forward reverse pingpong loops Adjust sample end & loop end frame Sample length to beat: off 1/64 1/64 1/32 1/32 1/16 1/16 1/8 1/8 1/4 1/4 1/2 1/2 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 Pitch the sample in semitones, cents Crispness: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 0 &Apply Changes &Play P&lay original sample new sample length: fade-out type volume panorama Start Loop <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. Pitch (Semitone,Cent) SimpleHTMLBrowser Manual Příručka Welcome to Hydrogen Vítejte v Hydrogenu Don't show this message anymore Tuto zprávu příště již nezobrazovat Ok OK Documentation index Obsah dokumentace SongEditorPanel Song Editor Editor skladby Clear pattern sequence Vyčistit sekvenci paternu Create new pattern Vytvořit nový patern Move the selected pattern down Přesunout vybraný patern dolů Move the selected pattern up Přesunout vybraný patern nahoru Select mode Režim výběru Draw mode Režim zadávání Warning, this will erase your pattern sequence. Are you sure? Varování: toto vymaže vaši sekvenci paternu. Určitě to chcete? &Ok &OK &Cancel &Storno stacked mode Hromadný režim stacked pattern mode Režim více paternů single pattern mode Režim jednoho paternu not_categorized Nekategorizováno Enable time line edit Pattern %1 SongEditorPanelBpmWidget_UI Form Edit the bpm value for current beat 500,55 500,55 Edit beat in timeline 500 500 Bar BPM Delete this BPM Marker Delete BPM Marker Cancel Storno Ok OK SongEditorPanelTagWidget_UI Form Tag Cancel Storno Ok OK SongEditorPatternList Copy Kopírovat Delete Vymazat Fill/Clear ... Vyplnit / Vyčistit... Properties Vlastnosti Save Pattern Uložit patern Load Pattern Nahrát patern Open Pattern Otevřít patern Hydrogen Pattern (*.h2pattern) Hydrogen patern (*.h2pattern) Virtual Pattern The pattern-file exists. Overwrite the existing pattern? &Ok &OK &Cancel &Storno Pattern 1 not_categorized Nekategorizováno Export Pattern SongPropertiesDialog Song properties Vlastnosti skladby SongPropertiesDialog_UI Form1 Form1 Author Autor Notes Poznámky Song name Název skladby &OK &OK Alt+O Alt+O &Cancel &Storno Alt+C Alt+C License Licence SoundLibraryExportDialog Export Sound Library Export knihovny zvuků Directory SoundLibraryExportDialog_UI Dialog Dialog Browse Procházet Export Export SoundLibraryImportDialog Sound Library import Import knihovny zvuků Sound library Knihovna zvuků Status Stav Updating SoundLibrary list... Aktualizace seznamu knihoven zvuků... Installed Instalováno New Nový Author: %1 Autor: %1 Downloading SoundLibrary... Stahování knihovny zvuků... Import drumkit Importovat bicí sadu SoundLibrary imported in %1 Knihovna zvuků importována do %1 An error occurred importing the SoundLibrary. Vyskytla se chyba při importu knihovny zvuků. Drumkits Bicí sady Songs Skladby Patterns Paterny License: %1 Licence: %1 SoundLibraryImportDialog_UI Dialog Dialog Internet Internet Update list Aktualizovat seznam Sound Library Name Název knihovny zvuků Sound library Info Informace o knihovně zvuků Author... Autor... Download and install Stáhnout a nainstalovat Local file Lokální soubor Browse... Procházet... Install Instalovat 1 1 License... Licence... Edit server list Upravit seznam serverů Close Zavřít SoundLibraryPanel Load Nahrát Export Export Delete Vymazat System drumkits Systémové bicí sady User drumkits Uživatelské bicí sady &Ok &OK &Cancel &Storno Songs Skladby Patterns Paterny Error loading song. Chyba při otevírání skladby. Properties Vlastnosti Warning, the selected pattern will be deleted from disk. Are you sure? Varování: vybraný patern bude vymazán z disku. Určitě to chcete? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Dialog Name Název Author Autor Information Informace License Licence Save Uložit Cancel Storno Save changes made to instruments into sound library Uložit provedené změny nástrojů do knihovny zvuků SoundLibraryRepositoryDialog Edit repository settings Upravit nastavení repozitáře Edit server list Upravit seznam serverů URL URL SoundLibraryRepositoryDialog_UI Dialog Dialog Add Přidat Delete Vymazat SoundLibrarySaveDialog Save Sound Library Uložit knihovnu zvuků Please supply at least a valid name Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Dialog Name Název Author Autor Information Informace Cancel Storno License Licence Save Uložit SoundLibraryTree Sound library Knihovna zvuků VirtualPatternDialog Select virtual pattern VirtualPatternDialog_UI Dialog Dialog OK OK Cancel Storno hydrogen-0.9.6-beta3/data/i18n/hydrogen.de.qm000066400000000000000000001661031211146647700206160ustar00rootroot00000000000000FUr0\H\ӵD\ӵecn{?5Nm wEt#E}40wrrEUz4Մ=%$7k}S{ M'8~+AM2. c. Qp^b dM>neȹhpUeo|[FOrG L~N<+dm6c6?=x6f3A!" B>q^XIZ.p>Z`a3ТN%7kLyS)ͭ+=DOULS0mD]+mDhu-\WB/V$;`[v$ZlKl_7w29(9]v<?AC0I}bP%qA!z^U_+bebPbwb;IXt)UO"nIIBIeXIIIϻIyI^nne,A~A~=ɷC,,,ӬϕdWWpWVWQWWWWտWעٯAv8vv|֏1e؃ޱeR:o+o7DvSls7p.vfbP(.658[|@fSV|V|W^+a_ d$eNjhUh~qh~~j^Hk2m9pLr`6Rv Yz9|VdU<ADrD0t5dzȿ8g7F kȻ;An]eo)\yHY({$}ڦu+)`] "c'~ >i S''o~Dn,U*Gx_pc~>#/u5>M#4"Dx R $֣֣.=>[!>⪁|&#J+0rB6 En ba!o #P p4I4=+V^_`~za.f%h3Bs5Ec9j_O  @cb 26>NgoY¯O=Fo&[K<5jH|ݿC빆m-B (n3d3d@{\DG.l:VQC$33 %{lcfs>M3M33?w¸/73\tKN S3X $T4u ){Ou +s' 3b. @e Cn S%]T aOA9 h>M h> w-X ws  F r \ ~lw ~x v V1}K , 46 $| ~ T C a >,  +Z$ I& I: I=} If I I I Ig I8 I Ia x, "   4 c4 F ʧ0} j1 v  a/ ɺ ] eq gDv $> 8. .k $o %+^ >, TYx gnt kJD x@#W zk$ = BDD ?1 ?H  / C- Dp ;$P s'> 'K = =J 5 "U4\ &u 2p`T 5yc/ 5yiV @3 B t CK C- FPJ \pɎ `nh jJV wN |v  Lk /C (u _  aP{ 9 G $S 4P =/ʖ S ik yEtf { :Z y 4)>S R# <-/ - ͫ ͼ1U jU ӽ^qp $ q mmj 3NG$"7&$RFV=@WGW^jb:jehmz meq*w>|[&XdcBbEǗ.) 2 o"L.=Щ(HL"aN!b rst`"R4S$V+eRobmtklޔk?~$-mIudi0<b>Mailinglisten</b><br>Mailing lists
     AboutDialog<<b>Hauptprogrammierer:</b><br>$Main coder and mantainer:
     AboutDialog.<b>Projektseite</b><br>Project page
     AboutDialog$<b>Website</b><br>Website
     AboutDialogberAbout AboutDialog######AboutDialog_UI&Autoren&AuthorsAboutDialog_UI&Lizenz&LicenseAboutDialog_UI&OK&OKAboutDialog_UI &berA&boutAboutDialog_UIber HydrogenAbout HydrogenAboutDialog_UI Alt+OAlt+OAboutDialog_UI6Infos ber die Audio-EngineAudio Engine InfoAudioEngineInfoForm######AudioEngineInfoForm_UI.Status der Audio-EngineAudio engine stateAudioEngineInfoForm_UIAudio-Ausgang Audio outputAudioEngineInfoForm_UIPuffergre Buffer sizeAudioEngineInfoForm_UIVerbunden mit Connected toAudioEngineInfoForm_UIFormular 1Form1AudioEngineInfoForm_UI RahmenFramesAudioEngineInfoForm_UIMidi Eingang MIDI inputAudioEngineInfoForm_UINameNameAudioEngineInfoForm_UIPatternsPatternsAudioEngineInfoForm_UIPolyphonie Playing notesAudioEngineInfoForm_UIProzesszeit Process timeAudioEngineInfoForm_UIRealtime framesAudioEngineInfoForm_UISamplerate Sample rateAudioEngineInfoForm_UISamplerSamplerAudioEngineInfoForm_UI(Gewhltes InstrumentSelected instrumentAudioEngineInfoForm_UI"Gewhltes PatternSelected patternAudioEngineInfoForm_UISequenzer SequencerAudioEngineInfoForm_UISongposition Song positionAudioEngineInfoForm_UISongstatus Song stateAudioEngineInfoForm_UI TicksTicksAudioEngineInfoForm_UI s sAudioFileBrowser$Audiodatei BrowserAudio File BrowserAudioFileBrowser Name:Name:AudioFileBrowservBitte keinen Samples ffnen die lnger als 10 Minuten sind!?Please do not preview samples which are longer than 10 minutes!AudioFileBrowserSample Lnge:Sample length:AudioFileBrowserSample Lnge:Sample length: AudioFileBrowserSamplerate: Samplerate:AudioFileBrowserSamplerate: %1Samplerate: %1AudioFileBrowser Gre:Size:AudioFileBrowserGre: %1 bytesSize: %1 bytesAudioFileBrowser>&Dateiname wird Instrument Name&Filename to instrument nameAudioFileBrowser_UI(Pers&nlicher Ordner&HomeAudioFileBrowser_UI&Spiele Datei &Play SampleAudioFileBrowser_UI S&topp&StopAudioFileBrowser_UI Ho&ch&UpAudioFileBrowser_UIAbbrechenCancelAudioFileBrowser_UI DialogDialogAudioFileBrowser_UI Lnge:Length:AudioFileBrowser_UI Name:Name:AudioFileBrowser_UI ffnenOpenAudioFileBrowser_UI@Spiele Dateien durch &anklicken Pla&y samples by clickingAudioFileBrowser_UISamplerate: Samplerate:AudioFileBrowser_UI Gre:Size:AudioFileBrowser_UI2Verstecke Ordner anzeigenView hidden foldersAudioFileBrowser_UIDirigentDirectorDirector DialogDialog Director_UI"### Drumkit Autor### Drumkit authorDrumkitManager_UI ### Drumkit Info### Drumkit infoDrumkitManager_UI(### Name des Drumkit### Drumkit nameDrumkitManager_UId###Das Drumkit wird installiert zncxbmzbxcmznxbcmz4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b> Mehr Drumkits gibt es unter<br> http://www.hydrogen-music.org </b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UI AutorAuthorDrumkitManager_UIDurchsuchenBrowseDrumkitManager_UIDrumkit lschenDelete drumkitDrumkitManager_UI&Drumkit-VerzeichnisDrumkit directoryDrumkitManager_UI,Dateiname des DrumkitsDrumkit filenameDrumkitManager_UIDrumkit-Name Drumkit nameDrumkitManager_UIExportierenExportDrumkitManager_UIFormular 1Form1DrumkitManager_UIImportierenImportDrumkitManager_UI InfosInfoDrumkitManager_UI LadenLoadDrumkitManager_UIDrumkit laden Load drumkitDrumkitManager_UISpeichernSaveDrumkitManager_UI BeidesBothExportSongDialog Song exportieren Export songExportSongDialog:Als einzelne Spur exportierenExport to a single trackExportSongDialogMehrspur ExportExport to seperate tracksExportSongDialogzDie Datei %1 existiert bereits. Wollen sie sie berschreiben?1The file %1 exists. Overwrite the existing file?ExportSongDialog&Durchsuchen... &Browse...ExportSongDialog_UI&Schlieen&CloseExportSongDialog_UI&Exportieren&ExportExportSongDialog_UI1616ExportSongDialog_UI 192000192000ExportSongDialog_UI 2205022050ExportSongDialog_UI2424ExportSongDialog_UI3232ExportSongDialog_UI 4410044100ExportSongDialog_UI 4800048000ExportSongDialog_UI88ExportSongDialog_UI 9600096000ExportSongDialog_UITAIFF in ADAT Qualitt "48 kHz, 16 bit PCM")AIFF in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UIPAIFF in CD Qualitt "41 kHz, 16 bit PCM"'AIFF in CD quality "41 kHz, 16 bit PCM"ExportSongDialog_UI\AIFF in besserer Qualitt "48 kHz, 24 bit PCM"+AIFF in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI Alt+BAlt+BExportSongDialog_UI Alt+CAlt+CExportSongDialog_UI Alt+EAlt+EExportSongDialog_UI>Song als Wave-Datei exportierenExport Whole Song to WAVExportSongDialog_UI Export-DateinameExport filenameExportSongDialog_UIpFLAC verlustfreie Kompression in guter Qualitt "48 kHz"1FLAC lossless compressor in good quality "48 kHz"ExportSongDialog_UIjOGG Vorbis gering komprimiert in guter Qualitt "VBR"3OGG Vorbis loosely compressed in good quality "VBR"ExportSongDialog_UI"Samplerate in Hz:Samplerate in Hz:ExportSongDialog_UIVorlagen: Templates: ExportSongDialog_UI^WAV in geringster Qualitt "22.05kHz, 8 bit PCMWAV LOFI "22.05kHz, 8 bit PCM ExportSongDialog_UINWAV beste Qualitt "96 kHz, 32 bit PCM"-WAV best Mixdown quality "96 kHz, 32 bit PCM"ExportSongDialog_UIRWAV in ADAT Qualitt "48 kHz, 16 bit PCM"(WAV in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UIRWAV in CD Qualitt "44,1kHz, 16 bit PCM"(WAV in CD quality "44,1kHz, 16 bit PCM"ExportSongDialog_UIZWAV in besserer Qualitt "48 kHz, 24 bit PCM"*WAV in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI*%1<br>%2 KHz<br>%3 %4%1
    %2 KHz
    %3 %4 FileBrowserFX an/aus FX on/off FxMixerLineMaster-Ausgang Master output FxMixerLineBPMBPM H2Core::SongEditorPanelBpmWidgetTagTag H2Core::SongEditorPanelTagWidget&Abbrechen&Cancel$H2Core::SoundLibraryPropertiesDialog&OK&Ok$H2Core::SoundLibraryPropertiesDialog4Soundlibrary EigenschaftenSoundLibrary Properties$H2Core::SoundLibraryPropertiesDialogNicht mglich, es lassen sich nur nderungen an Instrumenten innerhalb der aktuell verwendeten Soundlibrary speichern.fThis is not possible, you can only save changes inside instruments to the current loaded sound library$H2Core::SoundLibraryPropertiesDialogAchtung! Bei nderungen des Drumkit-Namens wird ein neues Drumkit dieses Namens erstellt. Sind sie sicher? fWarning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure?$H2Core::SoundLibraryPropertiesDialog*Drumkit geladen: [%1]Drumkit loaded: [%1] HydrogenApp MixerMixer HydrogenAppSongeditor Song Editor HydrogenAppAttackeAttackInstrumentEditorAuto-Stop-NoteAuto-Stop-NoteInstrumentEditorDmpfungDecayInstrumentEditorFilter-Cutoff Filter CutoffInstrumentEditorFilter-ResonanzFilter resonanceInstrumentEditorbersichtGeneralInstrumentEditor8Aussteuerung des InstrumentsInstrument gainInstrumentEditor.Aussteuerung des Layers Layer gainInstrumentEditor LayerLayersInstrumentEditor:Neuer Name fr das InstrumentNew instrument nameInstrumentEditor"Zufllige TonhheRandom pitch factorInstrumentEditorfreigebenReleaseInstrumentEditorLEigenschaften des Instruments anzeigenShow instrument propertiesInstrumentEditorBEigenschaften des Layers anzeigenShow layers propertiesInstrumentEditor haltenSustainInstrumentEditorNoten lschen Clear notesInstrumentLine$Instrument lschenDelete instrumentInstrumentLine<zuflliger Anschlag (Velocity)Randomize velocityInstrumentLineSoloSoloInstrumentLineInstrument InstrumentInstrumentRack6Instrumenteneditor anzeigenShow Instrument editorInstrumentRack0Klangbibliothek anzeigenShow sound libraryInstrumentRackKlangbibliothek Sound libraryInstrumentRack4Effektparameter bearbeitenEdit FX parametersLadspaFXMixerLineEffekt-Return Effect returnLadspaFXMixerLineEffekt umgehen FX bypassLadspaFXMixerLine"LADSPA-EffektnameLadspa FX nameLadspaFXMixerLineAktivierenActivateLadspaFXPropertiesDeaktivieren DeactivateLadspaFXPropertiesFEigenschaften des LADSPA-Effekts %1LADSPA FX %1 PropertiesLadspaFXPropertiesKein Plugin No pluginLadspaFXPropertiesEffekt whlen Select FXLadspaFXPropertiesLEigenschaften des LADSPA-Effekts [%1] [%1] LADSPA FX PropertiesLadspaFXPropertiesAlphatischAlphabetic ListLadspaFXSelectorKategorisiert CategorizedLadspaFXSelectorGruppenGroupsLadspaFXSelectorMonoMonoLadspaFXSelector"Nicht untersttzt Not supportedLadspaFXSelectorZuletzt benutzt Recently UsedLadspaFXSelector(LADSPA-Effekt whlenSelect LADSPA FXLadspaFXSelector StereoStereoLadspaFXSelector ### FX maker 1 2### FX maker 1 2LadspaFXSelector_UI&### copyright 1 2 3### copyright 1 2 3LadspaFXSelector_UI### fx ID ### fx IDLadspaFXSelector_UI### fx Label ### fx labelLadspaFXSelector_UI### fx Typ ### fx typeLadspaFXSelector_UI&Abbrechen&CancelLadspaFXSelector_UI&OK&OKLadspaFXSelector_UI11LadspaFXSelector_UI Alt+CAlt+CLadspaFXSelector_UI###Alt+OLadspaFXSelector_UIFormular 1Form1LadspaFXSelector_UIMainFormDas Dokument hat ungespeicherte nderungen. Wollen sie nun speichern?I The document contains unsaved changes. Do you want to save the changes? MainForm &ber&AboutMainForm,Instrument &hinzufgen&Add instrumentMainForm&Abbrechen&CancelMainForm(&Alle Instr. lschen &Clear allMainForm*nderungen &verwerfen&DiscardMainForm.Bibliothek &exportieren&Export libraryMainForm"Song &exportieren &Export songMainForm.Bibliothek &importieren&Import libraryMainForm &Info&InfoMainForm$&Instrumenten Rack&Instrument RackMainForm &Mixer&MixerMainForm&Neu&NewMainForm&ffnen&OpenMainForm&Einstellungen &PreferencesMainForm&Projekt&ProjectMainForm&Beenden&QuitMainForm&Speichern&SaveMainForm,Bibliothek &speichern &Save libraryMainForm&Werkzeuge&ToolsMainForm&Handbuch &User manualMainFormAbbrechenCancelMainForm2Alle Instrumente lschen?Clear all instruments?MainFormNPattern konnte nicht exportiert werden.Could not export pattern.MainFormRDer Song konnte nicht gespeichert werden.Could not save song.MainForm De&bugDe&bugMainFormDirigentDirectorMainFormFDiese Nachricht nicht mehr anzeigenDon't show this message anymoreMainFormDrumkitMainForm8Fehler beim Laden des Songs.Error loading song.MainFormJFehler beim Starten des AudiotreibersError starting audio driverMainForm4Expor&tiere Pattern als...Expor&t pattern as...MainForm,&Mididatei exportierenExport &MIDI fileMainForm*Mididatei exportierenExport MIDI fileMainForm<Hydrogen Pattern (*.h2pattern)Hydrogen Pattern (*.h2pattern)MainForm(Hydrogen ist bereit.Hydrogen Ready.MainForm0Hydrogen-Song (*.h2song)Hydrogen Song (*.h2song)MainFormI&nstrumente I&nstrumentsMainFormInstrument InstrumentMainFormHJACK: Konnte Client nicht aktivieren#Jack driver: cannot activate clientMainFormPJACK: Konnte nicht zum Ausgang verbinden'Jack driver: cannot connect output portMainForm8JACK: Fehler im Portregister#Jack driver: error in port registerMainForm0JACK: Server geschlossenJack driver: server shutdownMainForm"Mididatei (*.mid)Midi file (*.mid)MainFormOKOkMainForm&Demo ffnen Open &DemoMainFormffne &Pattern Open &PatternMainForm"Zuletzt &geffnet Open &recentMainFormffne Pattern Open PatternMainFormSong ffnen Open songMainForm(Pattern gespeichert.Pattern saved.MainForm4Wiedergabe&liste editierenPlaylist &editorMainForm0Wiedergabeliste: Song %1Playlist: Set song No. %1MainForm*Playlist: Song Nr. %1Playlist: Song No. %1MainForm Objekte ausgeben Print ObjectsMainFormFehler melden Report bugMainForm&Speichern &unter... Save &as...MainForm0Speichere Pattern als...Save Pattern as ...MainFormSong speichern Save songMainForm8&Audioinformationen anzeigenShow &audio engine infoMainForm&Zeige &Information Show &infoMainForm0Komposition gespeichert. Song saved.MainForm0Unbekannter AudiotreiberUnknown audio driverMainForm*Unbekannter Fehler %1Unknown error %1MainFormXSie benutzern eine Entwicklerversion von Hydrogen. Bitte helfen sie uns in dem sie Fehler oder Verbesserungsvorschlge der hydrogen-devel Mailingliste melden.<br><br>Danke!You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!MainFormHumanize-Time Humanize timeMasterMixerLine"Humanize-VelocityHumanize velocityMasterMixerLine8Humanize-Time Parameter [%1] Set humanize time parameter [%1]MasterMixerLine,Humanize-Velocity [%1]$Set humanize velocity parameter [%1]MasterMixerLine.Master-Lautstaerke [%1]Set master volume [%1]MasterMixerLine Swingfaktor [%1]Set swing factor [%1]MasterMixerLine SwingSwingMasterMixerLine AktionAction MidiTableEreignisEvent MidiTable Param.Param. MidiTableNKnopf drcken um Midi-Event aufzunehmen!press button to record midi event MidiTable*Effekt-Intensitaet %1Set FX %1 level Mixer:LADSPA-Effektlautstaerke (%1)Set LADSPA FX ( %1 ) volumeMixer Effekte anzeigen Show FX panelMixerPeaks anzeigenShow instrument peaksMixer@'Peaks anzeigen' ist deaktiviertShow instrument peaks = OffMixer<'Peaks anzeigen' ist aktiviertShow instrument peaks = OnMixerNInstrumentname (Doppelklick zum ndern)&Instrument name (double click to edit) MixerLine StummMute MixerLinePanPan MixerLine Sample abspielen Play sample MixerLineHPanaroma fuer Instrument [%1] setzenSet instr. pan [%1] MixerLine4Instrumentlautstaerke [%1]Set instrument volume [%1] MixerLineSoloSolo MixerLine Neue Noten hrenHear new notesPatternEditorPanelD'Neue Noten hren' ist deaktiviertHear new notes = OffPatternEditorPanel@'Neue Noten hren' ist aktiviertHear new notes = OnPatternEditorPanelWhrend des Abspielens kann die Patternlnge nicht verndert werden.8Is not possible to change the pattern size when playing.PatternEditorPanelLead and Lag Lead and LagPatternEditorPanel0Geladene KlangbibliothekLoaded SoundlibraryPatternEditorPanel.Kein Pattern ausgewhltNo pattern selectedPatternEditorPanelNoteNoteKeyPatternEditorPanelPanPanPatternEditorPanel$Patterneditor - %1Pattern editor - %1PatternEditorPanelX'Tastatur/Midi quantisieren' ist deaktiviert,Quantize incoming keyboard/midi events = OffPatternEditorPanelT'Tastatur/Midi quantisieren' ist aktiviert+Quantize incoming keyboard/midi events = OnPatternEditorPanelJTastatur/Midi ins Raster quantisieren%Quantize keyboard/midi events to gridPatternEditorPanelResonanz ResonancePatternEditorPanel&Gitterdichte whlenSelect grid resolutionPatternEditorPanel:Eigenschaften der Note whlenSelect note propertiesPatternEditorPanel&Patternlnge whlenSelect pattern sizePatternEditorPanel(Drum-Editor anzeigenShow drum editorPatternEditorPanel&Piano-Roll anzeigenShow piano roll editorPatternEditorPanelVelocityVelocityPatternEditorPanelEinzoomenZoom inPatternEditorPanelAuszoomenZoom outPatternEditorPanel>Mit ausgewhltem Pattern fllenFill with selected patternPatternFillDialog&Lschen&ClearPatternFillDialog_UI&Fllen&FillPatternFillDialog_UI Alt+CAlt+CPatternFillDialog_UI Alt+FAlt+FPatternFillDialog_UIAbbrechenCancelPatternFillDialog_UIFormular 1Form 1PatternFillDialog_UIVon:From:PatternFillDialog_UIOKOKPatternFillDialog_UIAn:To:PatternFillDialog_UI(PatterneigenschaftenPattern propertiesPatternPropertiesDialog&Abbrechen&CancelPatternPropertiesDialog_UI&OK&OKPatternPropertiesDialog_UI Alt+CAlt+CPatternPropertiesDialog_UI Alt+OAlt+OPatternPropertiesDialog_UIFormular 1Form1PatternPropertiesDialog_UI"Neuer PatternnameNew Pattern NamePatternPropertiesDialog_UI"Pattern KategoriePattern categoryPatternPropertiesDialog_UILead and Lag Lead and LagPianoRollEditorPanPanPianoRollEditorVelocityVelocityPianoRollEditor.Takt Zhler Anzeige aus BC Panel off PlayerControl8Takt Zhler Anzeige sichtbar BC Panel on PlayerControl4Zaehle Takte und spiele ab Count BPM and start PLAY PlayerControl,Zaehle Takte setze BPM Count and set BPM PlayerControl<Jack Time Master Betrieb = aus Jack-Time-Master mode = Off PlayerControl<Jack Time Master Betrieb = ein Jack-Time-Master mode = On PlayerControl*Beatcounter sichtbarBeatCounter Panel on PlayerControlVorspulen Fast Forward PlayerControl"Instrumenten RackInstrument rack PlayerControljJACK-Transport funktioniert nur mit dem JACK-Treiber./JACK-transport will work only with JACK driver. PlayerControl.Jack Time Master an/ausJack-Time-Master on/off PlayerControl@'JACK-Transport' ist deaktiviertJack-transport mode = Off PlayerControl<'JACK-Transport' ist aktiviertJack-transport mode = On PlayerControl*JACK-Transport an/ausJack-transport on/off PlayerControl Song wiederholen Loop song PlayerControlD'Song wiederholen' ist deaktiviertLoop song = Off PlayerControl@'Song wiederholen' ist aktiviertLoop song = On PlayerControl MixerMixer PlayerControlNeuer BPM-Wert New BPM value PlayerControlPatternmodus Pattern Mode PlayerControl*Patternmodus gewhlt.Pattern mode selected. PlayerControl Pause.Pause. PlayerControlPlay/Pause Play/ Pause PlayerControlSpielt ab.Playing. PlayerControlZurckspulenRewind PlayerControlvsetze Geschwindigkeit / setze Geschwindigkeit und spiele abSet BPM / Set BPM and play PlayerControl4Instrumenten Rack anzeigenShow Instrument Rack PlayerControlMixer anzeigen Show mixer PlayerControlSongmodus Song Mode PlayerControl$Songmodus gewhlt.Song mode selected. PlayerControl StoppStop PlayerControlGestoppt.Stopped. PlayerControlMetronom An/AusSwitch metronome on/off PlayerControl(Neues Skript anlegen&Create a new ScriptPlaylistDialog:&Editiere ausgewhltes Skript&Edit selected ScriptPlaylistDialogffne Playlist&Open PlaylistPlaylistDialog&&Speichere Playlist&Save PlaylistPlaylistDialog&Skripte&ScriptsPlaylistDialogLSkript zu auswgehltem Song hinzufgenAdd Script to selected SongPlaylistDialog Titel hinzufgenAdd Song to PlayListPlaylistDialog8Fehler beim Laden des Songs.Error loading song.PlaylistDialogVorspulen Fast ForwardPlaylistDialogNHydrogen Wiedergabeliste (*.h2playlist) Hydrogen Playlist (*.h2playlist)PlaylistDialog>Hydrogen Wiedergabeliste (*.sh)Hydrogen Playlist (*.sh)PlaylistDialog.Hydrogen Skripte (*.sh)Hydrogen Scripts (*.sh)PlaylistDialog(Lade Wiedergabeliste Load PlaylistPlaylistDialogNeues Skript New ScriptPlaylistDialogKein standard Editor eingestellt. Bitte whle deinen standard Editor aus. Konsolen-basierte Editoren werden noch nicht untersttzt.No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment.PlaylistDialog4Kein Skript in Verwendung!No Script in use!PlaylistDialog.Kein Skript ausgewhlt!No Script selected!PlaylistDialogKein Skript! No Script!PlaylistDialogfKein Titel in der Liste oder kein Titel ausgewhlt!$No Song in List or no Song selected!PlaylistDialog,Kein Titel ausgewhlt!No Song selected!PlaylistDialog*Kein Song ausgewhlt!No song selected!PlaylistDialog Pause.Pause.PlaylistDialogZurckspulenRewindPlaylistDialog2Speichere Wiedergabeliste Save PlaylistPlaylistDialog.Speichere Playlist &alsSave Playlist &asPlaylistDialog SkriptScriptPlaylistDialogDer Pfad zum Skript oder der Skriptname darf keine Leerzeichen enthalten.Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces.PlaylistDialog8Whle deinen standard EditorSet your Default EditorPlaylistDialog Titel Song listPlaylistDialog StoppStopPlaylistDialog Skript ausfhren exec ScriptPlaylistDialogkein Skript no ScriptPlaylistDialogsortierensortPlaylistDialog Wiedergabeliste PlayList BrowserPlaylistDialog_UISong Liste Song listPlaylistDialog_UI&Abbrechen&CancelPreferencesDialog&OK&OkPreferencesDialog.<b>ALSA-Treiber</b><br>ALSA Driver
    PreferencesDialogB<b>Treiber automatisch whlen</b>!Automatic driver selectionPreferencesDialog8<b>CoreAudio Treiber</b><br>CoreAudio Driver
    PreferencesDialogp<b>Jack Audio Connection Kit</b><br>NiedriglatenztreiberCJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialogz<b>Open Sound System</b><br>einfacher Audiotreiber [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog8<b>PortAudio-Treiber</b><br>PortAudio Driver
    PreferencesDialogh<br><b><font color="red">Nicht kompiliert</font></b>0
    Not compiledPreferencesDialogTreiber-Neustart notwendig. Soll der Treiber nun neu gestartet werden?)Driver restart required. Restart driver?PreferencesDialogSchnellFastPreferencesDialog NormalNormalPreferencesDialogBitte starten sie hydrogen neu um LASH support zu aktivieren/deaktivieren6Please restart hydrogen to enable/disable LASH supportPreferencesDialogEinstellungen PreferencesPreferencesDialogLangsamSlowPreferencesDialog######PreferencesDialog_UI"&Erscheinungsbild &AppearancePreferencesDialog_UI&Abbrechen&CancelPreferencesDialog_UI&Generell&GeneralPreferencesDialog_UI&Midisystem &Midi SystemPreferencesDialog_UI&OK&OKPreferencesDialog_UIV&Zuletzt benutzte Playlist wiederherstellen&Reopen last used playlistPreferencesDialog_UI>&Zuletzt geffneten Song ffnen&Reopen last used songPreferencesDialog_UI11PreferencesDialog_UI1010PreferencesDialog_UI1111PreferencesDialog_UI1212PreferencesDialog_UI1313PreferencesDialog_UI1414PreferencesDialog_UI1515PreferencesDialog_UI1616PreferencesDialog_UI22PreferencesDialog_UI33PreferencesDialog_UI44PreferencesDialog_UI 4410044100PreferencesDialog_UI 4800048000PreferencesDialog_UI55PreferencesDialog_UI66PreferencesDialog_UI77PreferencesDialog_UI88PreferencesDialog_UI 8820088200PreferencesDialog_UI99PreferencesDialog_UI 9600096000PreferencesDialog_UI<i>Nach einer nderungen der Schriftart muss die Anwendung neu gestartet werden.</i>=After a font change the application must be restarted.PreferencesDialog_UIAlleAllPreferencesDialog_UI Alt+CAlt+CPreferencesDialog_UI Alt+DAlt+DPreferencesDialog_UI Alt+OAlt+OPreferencesDialog_UI Alt+RAlt+RPreferencesDialog_UI*Anwendungs-SchriftartApplication fontPreferencesDialog_UIAudio&system Audio &SystemPreferencesDialog_UI4Details des Audio AusgangsAudio output detailsPreferencesDialog_UIRTakt-Zhler-Kompensation in 1/10 ms -Beat counter drift compensation in 1/10 ms PreferencesDialog_UIZTakt-Zhler-Startverzgerung in ms #Beat counter start offset in ms PreferencesDialog_UIPuffergre Buffer sizePreferencesDialog_UI KanalChannelPreferencesDialog_UINMit &voreingestelltem Ausgang verbindenConnect to &Default Output PairPreferencesDialog_UIAudiogertDevicePreferencesDialog_UISchnellFastPreferencesDialog_UIFormular 1Form1PreferencesDialog_UI*'Note-off' ignorierenIgnore note-offPreferencesDialog_UIEingangInputPreferencesDialog_UI2Maximale Anzahl an TaktenMaximum number of barsPreferencesDialog_UI4Peak-AbfallgeschwindigkeitMeters falloff speedPreferencesDialog_UI$MetronomlautstrkeMetronome volumePreferencesDialog_UIMiditreiber Midi driverPreferencesDialog_UI Mixer-Schriftart Mixer fontPreferencesDialog_UI NormalNormalPreferencesDialog_UIRPfad zum Rubberband Kommondozeilenprogram+Path to the Rubberband command-line utilityPreferencesDialog_UIPolyphonie PolyphonyPreferencesDialog_UIPost-Fader Post-FaderPreferencesDialog_UIPre-Fader Pre-FaderPreferencesDialog_UI4Output-Treiber neu startenRestart outputPreferencesDialog_UISamplerate Sample ratePreferencesDialog_UI"Schriftart whlen Select fontPreferencesDialog_UILangsamSlowPreferencesDialog_UIStilStylePreferencesDialog_UISpur Ausgang Track outputPreferencesDialog_UILash benutzenUse lashPreferencesDialog_UI6Ausgnge pro Spur erstellencreate per-instrument outputsPreferencesDialog_UIZuerst, justiere die Zeitdifferenz zwischen Tastatur-/Controller-Anschlgen und den von Hydrogen errechneten BPM-Werten_first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpmPreferencesDialog_UIZweitens, justiere die Zeitdifferenz zwischen letzten Tastatur/Controller Anschlag und dem zeitverzgerten Sequenzer Start. fsecond step, adjust offset between last controller/keybord trigger and the deferred sequencer startup PreferencesDialog_UI&Abbrechen&Cancel SampleEditor&OK&Ok SampleEditorSchliee Fenster. Mglicherweise sind noch ungespeicherte nderungen an diesen Sampel. Sind sie sicher?GClose dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditorEs sind noch nicht gespeicherte nderungen vorhanden. Diese nderungen werden verloren gehen. Sind sie sicher? ?Unsaved changes left. This changes will be lost. Are you sure? SampleEditor&Anwenden&Apply ChangesSampleEditor_UI&Schlieen&CloseSampleEditor_UI&Abspielen&PlaySampleEditor_UI00SampleEditor_UI11SampleEditor_UI1/161/16SampleEditor_UI1/21/2SampleEditor_UI1/321/32SampleEditor_UI1/41/4SampleEditor_UI1/641/64SampleEditor_UI1/81/8SampleEditor_UI1010SampleEditor_UI1111SampleEditor_UI1212SampleEditor_UI1313SampleEditor_UI1414SampleEditor_UI1515SampleEditor_UI1616SampleEditor_UI1717SampleEditor_UI1818SampleEditor_UI1919SampleEditor_UI22SampleEditor_UI2020SampleEditor_UI2121SampleEditor_UI2222SampleEditor_UI2323SampleEditor_UI2424SampleEditor_UI2525SampleEditor_UI2626SampleEditor_UI2727SampleEditor_UI2828SampleEditor_UI2929SampleEditor_UI33SampleEditor_UI3030SampleEditor_UI3131SampleEditor_UI3232SampleEditor_UI44SampleEditor_UI55SampleEditor_UI66SampleEditor_UI77SampleEditor_UI88SampleEditor_UI99SampleEditor_UIRJustiere Sample ende & Wiederholungs-Ende"Adjust sample end & loop end frameSampleEditor_UI>Justiere den Sample Loop-AnfangAdjust sample loop begin frameSampleEditor_UI*Justiere Sample-StartAdjust sample start frameSampleEditor_UI DialogDialogSampleEditor_UIEndeEndSampleEditor_UI Spie&le OriginalP&lay original sampleSampleEditor_UI&Art der Ausblendung fade-out typeSampleEditor_UIvorwrtsforwardSampleEditor_UIWiederholungenloopsSampleEditor_UI"Neue Samplelnge:new sample length:SampleEditor_UIPanoramapanoramaSampleEditor_UIhin und herpingpongSampleEditor_UIrckwrtsreverseSampleEditor_UI:Sampleverarbeitung einstellenset processingSampleEditor_UILautstrkevolumeSampleEditor_UI.Index der DokumentationDocumentation indexSimpleHTMLBrowserFDiese Nachricht nicht mehr anzeigenDon't show this message anymoreSimpleHTMLBrowserHandbuchManualSimpleHTMLBrowserOKOkSimpleHTMLBrowser,Willkommen in HydrogenWelcome to HydrogenSimpleHTMLBrowser&Abbrechen&CancelSongEditorPanel&OK&OkSongEditorPanelPattern lschenClear pattern sequenceSongEditorPanelNeues PatternCreate new patternSongEditorPanelZeichenmodus Draw modeSongEditorPanel4Timeline Editor aktivierenEnable time line editSongEditorPanel8Gewhltes Pattern nach untenMove the selected pattern downSongEditorPanel6Gewhltes Pattern nach obenMove the selected pattern upSongEditorPanelPattern %1 Pattern %1SongEditorPanelAuswahlmodus Select modeSongEditorPanelSongeditor Song EditorSongEditorPanelzAchtung, dieser Vorgang wird das Pattern lschen. Fortsetzen?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanel&nicht_kategorisiertnot_categorizedSongEditorPanel  stacked modeSongEditorPanel500500SongEditorPanelBpmWidget_UI 500,55500,55SongEditorPanelBpmWidget_UIBPMBPMSongEditorPanelBpmWidget_UIAbbrechenCancelSongEditorPanelBpmWidget_UIOKOkSongEditorPanelBpmWidget_UIAbbrechenCancelSongEditorPanelTagWidget_UIOKOkSongEditorPanelTagWidget_UITagTagSongEditorPanelTagWidget_UI&Abbrechen&CancelSongEditorPatternList&OK&OkSongEditorPatternListKopierenCopySongEditorPatternListLschenDeleteSongEditorPatternList$Exportiere PatternExport PatternSongEditorPatternListFllen/LschenFill/Clear ...SongEditorPatternList<Hydrogen Pattern (*.h2pattern)Hydrogen Pattern (*.h2pattern)SongEditorPatternListLade Pattern Load PatternSongEditorPatternListffne Pattern Open PatternSongEditorPatternListEigenschaften PropertiesSongEditorPatternList"Speichere Pattern Save PatternSongEditorPatternList&nicht_kategorisiertnot_categorizedSongEditorPatternList"SongeigenschaftenSong propertiesSongPropertiesDialog&OK &OKSongPropertiesDialog_UI&Abbrechen&CancelSongPropertiesDialog_UI Alt+CAlt+CSongPropertiesDialog_UI Alt+OAlt+OSongPropertiesDialog_UI AutorAuthorSongPropertiesDialog_UIFormular 1Form1SongPropertiesDialog_UI LizenzLicenseSongPropertiesDialog_UINotizenNotesSongPropertiesDialog_UISongname Song nameSongPropertiesDialog_UI0Soundlibrary exportierenExport Sound LibrarySoundLibraryExportDialogDurchsuchenBrowseSoundLibraryExportDialog_UI DialogDialogSoundLibraryExportDialog_UIExportierenExportSoundLibraryExportDialog_UIrEin Fehler trat auf beim Importieren der Soundbibliothek.-An error occurred importing the SoundLibrary.SoundLibraryImportDialogAutor: %1 Author: %1SoundLibraryImportDialog@Lade Klangbibliothek herunter...Downloading SoundLibrary...SoundLibraryImportDialogDrumkitsDrumkitsSoundLibraryImportDialog&Drumkit importierenImport drumkitSoundLibraryImportDialogInstalliert InstalledSoundLibraryImportDialogLizenz: %1 License: %1SoundLibraryImportDialogNeuNewSoundLibraryImportDialogPatternPatternsSoundLibraryImportDialog SongsSongsSoundLibraryImportDialog6Soundbibliothek importierenSound Library importSoundLibraryImportDialogSoundbibliothek Sound librarySoundLibraryImportDialog@Soundbibliothek importiert in %1SoundLibrary imported in %1SoundLibraryImportDialog StatusStatusSoundLibraryImportDialog`Liste der Soundbibliotheken wird aktualisiert...Updating SoundLibrary list...SoundLibraryImportDialog11SoundLibraryImportDialog_UIAutor... Author...SoundLibraryImportDialog_UIDurchsuchen... Browse...SoundLibraryImportDialog_UISchliessenCloseSoundLibraryImportDialog_UI DialogDialogSoundLibraryImportDialog_UI<Herunterladen und InstallierenDownload and installSoundLibraryImportDialog_UI,Bearbeite Server-ListeEdit server listSoundLibraryImportDialog_UIInstallierenInstallSoundLibraryImportDialog_UIInternetInternetSoundLibraryImportDialog_UILizenz... License...SoundLibraryImportDialog_UILokale Datei Local fileSoundLibraryImportDialog_UI(Soundbibliothek NameSound Library NameSoundLibraryImportDialog_UI(Soundbibliothek InfoSound library InfoSoundLibraryImportDialog_UI&Liste aktualisieren Update listSoundLibraryImportDialog_UI&Abbrechen&CancelSoundLibraryPanel&OK&OkSoundLibraryPanelLschenDeleteSoundLibraryPanel8Fehler beim Laden des Songs.Error loading song.SoundLibraryPanelExportierenExportSoundLibraryPanel LadenLoadSoundLibraryPanelPatternPatternsSoundLibraryPanelEigenschaften PropertiesSoundLibraryPanel SongsSongsSoundLibraryPanelSystem DrumkitsSystem drumkitsSoundLibraryPanel"Benutzer Drumkits User drumkitsSoundLibraryPanelAchtung! Das ausgewhlte Pattern wird von der Festplatte gelscht werden. Sind sie sicher? FWarning, the selected pattern will be deleted from disk. Are you sure?SoundLibraryPanel AutorAuthorSoundLibraryPropertiesDialog_UIAbbrechenCancelSoundLibraryPropertiesDialog_UI DialogDialogSoundLibraryPropertiesDialog_UIInformation InformationSoundLibraryPropertiesDialog_UI LizenzLicenseSoundLibraryPropertiesDialog_UINameNameSoundLibraryPropertiesDialog_UISpeichernSave SoundLibraryPropertiesDialog_UIRnderungen an den Instrumenten bernehmen3Save changes made to instruments into sound librarySoundLibraryPropertiesDialog_UIDbearbeite Repository-EinstellungenEdit repository settingsSoundLibraryRepositoryDialog,bearbeite Server-ListeEdit server listSoundLibraryRepositoryDialogURLURLSoundLibraryRepositoryDialogHinzufgenAddSoundLibraryRepositoryDialog_UILschenDeleteSoundLibraryRepositoryDialog_UI DialogDialogSoundLibraryRepositoryDialog_UIDBitte gltigen Dateinamen angeben!#Please supply at least a valid nameSoundLibrarySaveDialog2Soundbibliothek speichernSave Sound LibrarySoundLibrarySaveDialog AutorAuthorSoundLibrarySaveDialog_UIAbbrechenCancelSoundLibrarySaveDialog_UI DialogDialogSoundLibrarySaveDialog_UIInformation InformationSoundLibrarySaveDialog_UI LizenzLicenseSoundLibrarySaveDialog_UINameNameSoundLibrarySaveDialog_UISpeichernSave SoundLibrarySaveDialog_UISoundbibliothek Sound librarySoundLibraryTreeAbbrechenCancelVirtualPatternDialog_UI DialogDialogVirtualPatternDialog_UIOKOKVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.de.ts000066400000000000000000006361771211146647700206440ustar00rootroot00000000000000 AboutDialog <b>Project page</b><br> <b>Projektseite</b><br> About Über <b>Main coder and mantainer:</b><br> <b>Hauptprogrammierer:</b><br> <b>Website</b><br> <b>Website</b><br> <b>Mailing lists</b><br> <b>Mailinglisten</b><br> AboutDialog_UI ### ### About Hydrogen Über Hydrogen A&bout &Über &Authors &Autoren &License &Lizenz &OK &OK Alt+O Alt+O <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info Infos über die Audio-Engine AudioEngineInfoForm_UI Form1 Formular 1 Playing notes Polyphonie Process time Prozesszeit Audio engine state Status der Audio-Engine Song state Songstatus Frames Rahmen Ticks Ticks Buffer size Puffergröße Sample rate Samplerate ### ### Song position Songposition Patterns Patterns Selected pattern Gewähltes Pattern Selected instrument Gewähltes Instrument Connected to Verbunden mit Synth Sampler Sampler Sequencer Sequenzer MIDI input Midi Eingang Name Name Audio output Audio-Ausgang Realtime frames AudioFileBrowser Audio File Browser Audiodatei Browser Size: %1 bytes Größe: %1 bytes Samplerate: %1 Samplerate: %1 s s Name: Name: Size: Größe: Samplerate: Samplerate: Sample length: Sample Länge: Please do not preview samples which are longer than 10 minutes! Bitte keinen Samples öffnen die länger als 10 Minuten sind! Sample length: Sample Länge: AudioFileBrowser_UI Dialog Dialog Open Öffnen Name: Name: Samplerate: Samplerate: Size: Größe: Length: Länge: Cancel Abbrechen Pla&y samples by clicking Spiele Dateien durch &anklicken &Up Ho&ch &Home Persö&nlicher Ordner &Play Sample &Spiele Datei &Filename to instrument name &Dateiname wird Instrument Name &Stop S&topp View hidden folders Verstecke Ordner anzeigen Be careful, this change all Layer velocity settings Set automatic velocity Director Director Dirigent Director_UI Dialog Dialog DownloadWidget (%1/%2 KiB) - ETA %3 DrumkitManager_UI Form1 Formular 1 Drumkit name Drumkit-Name Delete drumkit Drumkit löschen Load drumkit Drumkit laden Load Laden Author Autor Info Infos Save Speichern Browse Durchsuchen Import Importieren Drumkit filename Dateiname des Drumkits Export Exportieren Drumkit directory Drumkit-Verzeichnis ### Drumkit author ### Drumkit Autor ### Drumkit info ### Drumkit Info ### The drumkit will be installed zncxbmzbxcmznxbcmz ###Das Drumkit wird installiert zncxbmzbxcmznxbcmz ### Drumkit name ### Name des Drumkit <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b> Mehr Drumkits gibt es unter<br> http://www.hydrogen-music.org </b> ExportSongDialog Export song Song exportieren The file %1 exists. Overwrite the existing file? Die Datei %1 existiert bereits. Wollen sie sie überschreiben? Export to a single track Als einzelne Spur exportieren Export to seperate tracks Mehrspur Export Both Beides ExportSongDialog_UI Export filename Export-Dateiname Export Whole Song to WAV Song als Wave-Datei exportieren Alt+C Alt+C &Export &Exportieren Alt+E Alt+E &Browse... &Durchsuchen... Alt+B Alt+B &Close &Schließen Samplerate in Hz: Samplerate in Hz: 22050 22050 44100 44100 48000 48000 96000 96000 192000 192000 SampleDepth in Bit: 8 8 16 16 24 24 32 32 Templates: Vorlagen: WAV in CD quality "44,1kHz, 16 bit PCM" WAV in CD Qualität "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV in ADAT Qualität "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV in besserer Qualität "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV in geringster Qualität "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" WAV beste Qualität "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF in CD Qualität "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF in ADAT Qualität "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" AIFF in besserer Qualität "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" FLAC verlustfreie Kompression in guter Qualität "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" OGG Vorbis gering komprimiert in guter Qualität "VBR" Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off FX an/aus Master output Master-Ausgang H2Core::SongEditorPanelBpmWidget BPM BPM H2Core::SongEditorPanelTagWidget Tag Tag H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties Soundlibrary Eigenschaften &Ok &OK &Cancel &Abbrechen This is not possible, you can only save changes inside instruments to the current loaded sound library Nicht möglich, es lassen sich nur Änderungen an Instrumenten innerhalb der aktuell verwendeten Soundlibrary speichern. Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Achtung! Bei Änderungen des Drumkit-Namens wird ein neues Drumkit dieses Namens erstellt. Sind sie sicher? Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] Drumkit geladen: [%1] Song Editor Songeditor Instrument + Pattern Mixer Mixer InstrumentEditor Show instrument properties Eigenschaften des Instruments anzeigen Show layers properties Eigenschaften des Layers anzeigen Random pitch factor Zufällige Tonhöhe Filter Cutoff Filter-Cutoff Filter resonance Filter-Resonanz Attack Attacke Decay Dämpfung Sustain halten Release freigeben Layer gain Aussteuerung des Layers New instrument name Neuer Name für das Instrument Instrument gain Aussteuerung des Instruments Layer pitch (Coarse) Layer pitch (Fine) General Übersicht Layers Layer Stop the current playing instrument-note before trigger the next note sample. Auto-Stop-Note Auto-Stop-Note InstrumentLine Clear notes Noten löschen Randomize velocity zufälliger Anschlag (Velocity) Delete instrument Instrument löschen Fill notes ... Fill all notes Fill 1/2 notes Fill 1/3 notes Fill 1/4 notes Fill 1/6 notes Fill 1/8 notes Mute instrument Solo Solo InstrumentRack Show Instrument editor Instrumenteneditor anzeigen Instrument Instrument Show sound library Klangbibliothek anzeigen Sound library Klangbibliothek LadspaFXMixerLine Edit FX parameters Effektparameter bearbeiten FX bypass Effekt umgehen Ladspa FX name LADSPA-Effektname Effect return Effekt-Return LadspaFXProperties Select FX Effekt wählen [%1] LADSPA FX Properties Eigenschaften des LADSPA-Effekts [%1] LADSPA FX %1 Properties Eigenschaften des LADSPA-Effekts %1 No plugin Kein Plugin Activate Aktivieren Deactivate Deaktivieren Remove FX LadspaFXSelector Groups Gruppen Stereo Stereo Mono Mono Not supported Nicht unterstützt Select LADSPA FX LADSPA-Effekt wählen Recently Used Zuletzt benutzt Alphabetic List Alphatisch Categorized Kategorisiert LadspaFXSelector_UI Form1 Formular 1 ### fx label ### fx Label ### fx type ### fx Typ ### fx ID ### fx ID &Cancel &Abbrechen Alt+C Alt+C &OK &OK Alt+O ### 1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> ### fx name 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> ### FX maker 1 2 ### FX maker 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 ### copyright 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm &Save &Speichern &Discard Änderungen &verwerfen Cancel Abbrechen Error loading song. Fehler beim Laden des Songs. Hydrogen Ready. Hydrogen ist bereit. Hydrogen Song (*.h2song) Hydrogen-Song (*.h2song) Save song Song speichern Open song Song öffnen Export MIDI file Mididatei exportieren Midi file (*.mid) Mididatei (*.mid) &New &Neu &Open &Öffnen Open &Demo &Demo öffnen Open &recent Zuletzt &geöffnet Export &MIDI file &Mididatei exportieren &Preferences &Einstellungen &Quit &Beenden Show &audio engine info &Audioinformationen anzeigen &User manual &Handbuch &About &Über &Cancel &Abbrechen Unknown audio driver Unbekannter Audiotreiber Error starting audio driver Fehler beim Starten des Audiotreibers Jack driver: server shutdown JACK: Server geschlossen Jack driver: cannot activate client JACK: Konnte Client nicht aktivieren Jack driver: cannot connect output port JACK: Konnte nicht zum Ausgang verbinden Jack driver: error in port register JACK: Fehler im Portregister &Export song Song &exportieren De&bug De&bug &Project &Projekt Save &as... Speichern &unter... &Tools &Werkzeuge &Mixer &Mixer &Instrument Rack &Instrumenten Rack Print Objects Objekte ausgeben &Info &Info Song saved. Komposition gespeichert. Unknown error %1 Unbekannter Fehler %1 Clear all instruments? Alle Instrumente löschen? Ok OK You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Sie benutzern eine Entwicklerversion von Hydrogen. Bitte helfen sie uns in dem sie Fehler oder Verbesserungsvorschläge der hydrogen-devel Mailingliste melden.<br><br>Danke! Could not save song. Der Song konnte nicht gespeichert werden. Open &Pattern Öffne &Pattern Hydrogen Pattern (*.h2pattern) Hydrogen Pattern (*.h2pattern) Save Pattern as ... Speichere Pattern als... Pattern saved. Pattern gespeichert. Open Pattern Öffne Pattern Don't show this message anymore Diese Nachricht nicht mehr anzeigen Playlist: Set song No. %1 Wiedergabeliste: Song %1 Show &info Zeige &Information Expor&t pattern as... Expor&tiere Pattern als... I&nstruments I&nstrumente &Add instrument Instrument &hinzufügen &Clear all &Alle Instr. löschen &Save library Bibliothek &speichern &Export library Bibliothek &exportieren Playlist &editor Wiedergabe&liste editieren &Import library Bibliothek &importieren Info|About Song saved as. Playlist: Song No. %1 Playlist: Song Nr. %1 Could not export pattern. Pattern konnte nicht exportiert werden. The document contains unsaved changes. Do you want to save the changes? Das Dokument hat ungespeicherte Änderungen. Wollen sie nun speichern? Director Dirigent Undo history &Undo menu Undo Redo Input mode Instrument Instrument Drumkit Report bug Fehler melden MasterMixerLine Set master volume [%1] LCD Panel, do not use any umlaut! Master-Lautstaerke [%1] Swing Swing Humanize time Humanize-Time Humanize velocity Humanize-Velocity Set humanize time parameter [%1] Humanize-Time Parameter [%1] Set humanize velocity parameter [%1] Humanize-Velocity [%1] Set swing factor [%1] Swingfaktor [%1] MidiTable Event Ereignis Param. Param. Action Aktion press button to record midi event Knopf drücken um Midi-Event aufzunehmen Mixer Show FX panel Effekte anzeigen Show instrument peaks Peaks anzeigen Show instrument peaks = On 'Peaks anzeigen' ist aktiviert Show instrument peaks = Off 'Peaks anzeigen' ist deaktiviert Set FX %1 level Effekt-Intensitaet %1 Set LADSPA FX ( %1 ) volume LADSPA-Effektlautstaerke (%1) MixerLine Play sample Sample abspielen Mute Stumm Solo Solo Pan Pan Instrument name (double click to edit) Instrumentname (Doppelklick zum Ändern) Set instrument volume [%1] Instrumentlautstaerke [%1] Set instr. pan [%1] Panaroma fuer Instrument [%1] setzen PatternEditorPanel Hear new notes Neue Noten hören Hear new notes = On 'Neue Noten hören' ist aktiviert Hear new notes = Off 'Neue Noten hören' ist deaktiviert Pattern editor - %1 Patterneditor - %1 Quantize keyboard/midi events to grid Tastatur/Midi ins Raster quantisieren Quantize incoming keyboard/midi events = On 'Tastatur/Midi quantisieren' ist aktiviert Quantize incoming keyboard/midi events = Off 'Tastatur/Midi quantisieren' ist deaktiviert Zoom in Einzoomen Zoom out Auszoomen Is not possible to change the pattern size when playing. Während des Abspielens kann die Patternlänge nicht verändert werden. Select pattern size Patternlänge wählen Select grid resolution Gitterdichte wählen No pattern selected Kein Pattern ausgewählt Select note properties Eigenschaften der Note wählen Velocity Velocity Pan Pan Cutoff Resonance Resonanz Lead and Lag Lead and Lag Loaded Soundlibrary Geladene Klangbibliothek NoteKey Note destructive mode pre delete settings destructive mode post delete settings Show piano roll editor Piano-Roll anzeigen Show drum editor Drum-Editor anzeigen PatternFillDialog Fill with selected pattern Mit ausgewähltem Pattern füllen PatternFillDialog_UI Form 1 Formular 1 &Fill &Füllen Alt+F Alt+F &Clear &Löschen Alt+C Alt+C To: An: From: Von: Cancel Abbrechen OK OK PatternPropertiesDialog Pattern properties Patterneigenschaften %1#2 %1 PatternPropertiesDialog_UI Form1 Formular 1 &Cancel &Abbrechen Alt+C Alt+C &OK &OK Alt+O Alt+O New Pattern Name Neuer Patternname Pattern category Pattern Kategorie Pattern description PianoRollEditor Velocity Velocity Pan Pan Lead and Lag Lead and Lag PlayerControl Stop Stopp Song Mode Songmodus Playing. Spielt ab. Stopped. Gestoppt. Song mode selected. Songmodus gewählt. Pattern Mode Patternmodus Pattern mode selected. Patternmodus gewählt. Jack-transport on/off JACK-Transport an/aus Jack-transport mode = On 'JACK-Transport' ist aktiviert Jack-transport mode = Off 'JACK-Transport' ist deaktiviert New BPM value Neuer BPM-Wert Rewind Zurückspulen Play/ Pause Play/Pause Fast Forward Vorspulen Pause. Pause. JACK-transport will work only with JACK driver. JACK-Transport funktioniert nur mit dem JACK-Treiber. Loop song Song wiederholen Loop song = On 'Song wiederholen' ist aktiviert Loop song = Off 'Song wiederholen' ist deaktiviert Show mixer Mixer anzeigen Mixer Mixer Show Instrument Rack Instrumenten Rack anzeigen Instrument rack Instrumenten Rack BeatCounter Panel on Beatcounter sichtbar Set BPM / Set BPM and play setze Geschwindigkeit / setze Geschwindigkeit und spiele ab Jack-Time-Master on/off Jack Time Master an/aus BC Panel on Takt Zähler Anzeige sichtbar BC Panel off Takt Zähler Anzeige aus Count BPM and start PLAY Zaehle Takte und spiele ab Count and set BPM Zaehle Takte setze BPM Jack-Time-Master mode = On Jack Time Master Betrieb = ein Jack-Time-Master mode = Off Jack Time Master Betrieb = aus Record Destructive Record Record midi events = On Record midi events = Off Destructive mode = Off Destructive mode = On Recalculate Rubberband modified samples if bpm will change Recalculate all samples using Rubberband ON Recalculate all samples using Rubberband OFF Switch metronome on/off Metronom An/Aus PlaylistDialog Song list Titel Script Skript exec Script Skript ausführen Add Song to PlayList Titel hinzufügen No Song selected! Kein Titel ausgewählt! Load Playlist Lade Wiedergabeliste Hydrogen Playlist (*.h2playlist) Hydrogen Wiedergabeliste (*.h2playlist) Save Playlist Speichere Wiedergabeliste No Song in List or no Song selected! Kein Titel in der Liste oder kein Titel ausgewählt! Hydrogen Playlist (*.sh) Hydrogen Wiedergabeliste (*.sh) Add Script to selected Song Skript zu auswgeähltem Song hinzufügen No Script in use! Kein Skript in Verwendung! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Kein standard Editor eingestellt. Bitte wähle deinen standard Editor aus. Konsolen-basierte Editoren werden noch nicht unterstützt. Set your Default Editor Wähle deinen standard Editor No Script selected! Kein Skript ausgewählt! Error loading song. Fehler beim Laden des Songs. sort sortieren Hydrogen Scripts (*.sh) Hydrogen Skripte (*.sh) New Script Neues Skript Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. Der Pfad zum Skript oder der Skriptname darf keine Leerzeichen enthalten. No Script! Kein Skript! &Playlist Add song to Play&list Add &current song to Playlist &Remove selected song from Playlist &Open Playlist Öffne Playlist &Save Playlist &Speichere Playlist Save Playlist &as Speichere Playlist &als &Scripts &Skripte &Add Script to selected song &Edit selected Script &Editiere ausgewähltes Skript &Remove selected Script &Create a new Script Neues Skript anlegen Rewind Zurückspulen Play/ Pause/ Load selected song Stop Stopp Fast Forward Vorspulen Please save your song first WARNING, the new file is executable by the owner of the file! Pause. Pause. Playlist Browser No song selected! Kein Song ausgewählt! Playlist: set song no. %1 no Script kein Skript &New Playlist PlaylistDialog_UI PlayList Browser Wiedergabeliste Song list Song Liste PreferencesDialog Slow Langsam Normal Normal Fast Schnell <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Open Sound System</b><br>einfacher Audiotreiber [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">Nicht kompiliert</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Jack Audio Connection Kit</b><br>Niedriglatenztreiber Preferences Einstellungen <b>ALSA Driver</b><br> <b>ALSA-Treiber</b><br> <b>Automatic driver selection</b> <b>Treiber automatisch wählen</b> <b>PortAudio Driver</b><br> <b>PortAudio-Treiber</b><br> <b>CoreAudio Driver</b><br> <b>CoreAudio Treiber</b><br> Please restart hydrogen to enable/disable LASH support Bitte starten sie hydrogen neu um LASH support zu aktivieren/deaktivieren Driver restart required. Restart driver? Treiber-Neustart notwendig. Soll der Treiber nun neu gestartet werden? &Ok &OK &Cancel &Abbrechen PreferencesDialog_UI Sample rate Samplerate 44100 44100 48000 48000 Buffer size Puffergröße Device Audiogerät Input Eingang Channel Kanal All Alle 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 Meters falloff speed Peak-Abfallgeschwindigkeit Slow Langsam Normal Normal Fast Schnell Application font Anwendungs-Schriftart Mixer font Mixer-Schriftart Select font Schriftart wählen <i>After a font change the application must be restarted.</i> <i>Nach einer Änderungen der Schriftart muss die Anwendung neu gestartet werden.</i> ### ### Form1 Formular 1 Polyphony Polyphonie Style Stil &Cancel &Abbrechen Alt+C Alt+C &OK &OK Alt+O Alt+O &General &Generell Alt+R Alt+R Audio &System Audio&system Metronome volume Metronomlautstärke Connect to &Default Output Pair Mit &voreingestelltem Ausgang verbinden Alt+D Alt+D 88200 88200 96000 96000 &Midi System &Midisystem Midi driver Miditreiber Ignore note-off 'Note-off' ignorieren &Appearance &Erscheinungsbild &Reopen last used song &Zuletzt geöffneten Song öffnen Restart output Output-Treiber neu starten Audio output details Details des Audio Ausgangs Post-Fader Post-Fader Pre-Fader Pre-Fader Track output Spur Ausgang Use lash Lash benutzen first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm Zuerst, justiere die Zeitdifferenz zwischen Tastatur-/Controller-Anschlägen und den von Hydrogen errechneten BPM-Werten Beat counter drift compensation in 1/10 ms Takt-Zähler-Kompensation in 1/10 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup Zweitens, justiere die Zeitdifferenz zwischen letzten Tastatur/Controller Anschlag und dem zeitverzögerten Sequenzer Start. Beat counter start offset in ms Takt-Zähler-Startverzögerung in ms create per-instrument outputs Ausgänge pro Spur erstellen Path to the Rubberband command-line utility Pfad zum Rubberband Kommondozeilenprogram Maximum number of bars Maximale Anzahl an Takten &Reopen last used playlist &Zuletzt benutzte Playlist wiederherstellen Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? Es sind noch nicht gespeicherte änderungen vorhanden. Diese Änderungen werden verloren gehen. Sind sie sicher? &Ok &OK &Cancel &Abbrechen Close dialog! maybe there is some unsaved work on sample. Are you sure? Schließe Fenster. Möglicherweise sind noch ungespeicherte änderungen an diesen Sampel. Sind sie sicher? SampleEditor_UI Dialog Dialog P&lay original sample Spie&le Original &Apply Changes &Anwenden &Close &Schließen Adjust sample start frame Justiere Sample-Start Adjust sample loop begin frame Justiere den Sample Loop-Anfang set processing Sampleverarbeitung einstellen forward vorwärts reverse rückwärts pingpong hin und her loops Wiederholungen Adjust sample end & loop end frame Justiere Sample ende & Wiederholungs-Ende &Play &Abspielen new sample length: Neue Samplelänge: fade-out type Art der Ausblendung volume Lautstärke panorama Panorama Sample length to beat: off 1/64 1/64 1/32 1/32 1/16 1/16 1/8 1/8 1/4 1/4 1/2 1/2 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 Pitch the sample in semitones, cents Crispness: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 0 Start Loop <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End Ende "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. Pitch (Semitone,Cent) SimpleHTMLBrowser Manual Handbuch Welcome to Hydrogen Willkommen in Hydrogen Don't show this message anymore Diese Nachricht nicht mehr anzeigen Ok OK Documentation index Index der Dokumentation SongEditorPanel Create new pattern Neues Pattern Move the selected pattern down Gewähltes Pattern nach unten Move the selected pattern up Gewähltes Pattern nach oben Clear pattern sequence Pattern löschen Song Editor Songeditor Select mode Auswahlmodus Draw mode Zeichenmodus Warning, this will erase your pattern sequence. Are you sure? Achtung, dieser Vorgang wird das Pattern löschen. Fortsetzen? &Ok &OK &Cancel &Abbrechen stacked mode stacked pattern mode single pattern mode not_categorized nicht_kategorisiert Enable time line edit Timeline Editor aktivieren Pattern %1 Pattern %1 SongEditorPanelBpmWidget_UI Form Edit the bpm value for current beat 500,55 500,55 Edit beat in timeline 500 500 Bar BPM BPM Delete this BPM Marker Delete BPM Marker Cancel Abbrechen Ok OK SongEditorPanelTagWidget_UI Form Tag Tag Cancel Abbrechen Ok OK SongEditorPatternList Copy Kopieren Delete Löschen Properties Eigenschaften Fill/Clear ... Füllen/Löschen Save Pattern Speichere Pattern Load Pattern Lade Pattern Open Pattern Öffne Pattern Hydrogen Pattern (*.h2pattern) Hydrogen Pattern (*.h2pattern) Virtual Pattern Pattern 1 not_categorized nicht_kategorisiert The pattern-file exists. Overwrite the existing pattern? &Ok &OK &Cancel &Abbrechen Export Pattern Exportiere Pattern SongPropertiesDialog Song properties Songeigenschaften SongPropertiesDialog_UI Form1 Formular 1 Notes Notizen Author Autor Song name Songname &Cancel &Abbrechen Alt+C Alt+C &OK &OK Alt+O Alt+O License Lizenz SoundLibraryExportDialog Export Sound Library Soundlibrary exportieren Directory SoundLibraryExportDialog_UI Dialog Dialog Browse Durchsuchen Export Exportieren SoundLibraryImportDialog Sound Library import Soundbibliothek importieren Sound library Soundbibliothek Status Status Updating SoundLibrary list... Liste der Soundbibliotheken wird aktualisiert... Installed Installiert New Neu Author: %1 Autor: %1 Downloading SoundLibrary... Lade Klangbibliothek herunter... SoundLibrary imported in %1 Soundbibliothek importiert in %1 An error occurred importing the SoundLibrary. Ein Fehler trat auf beim Importieren der Soundbibliothek. Import drumkit Drumkit importieren Drumkits Drumkits Songs Songs Patterns Pattern License: %1 Lizenz: %1 SoundLibraryImportDialog_UI Dialog Dialog Internet Internet Update list Liste aktualisieren Sound Library Name Soundbibliothek Name Sound library Info Soundbibliothek Info Author... Autor... Download and install Herunterladen und Installieren Local file Lokale Datei Browse... Durchsuchen... Install Installieren 1 1 License... Lizenz... Edit server list Bearbeite Server-Liste Close Schliessen SoundLibraryPanel Load Laden Export Exportieren Delete Löschen System drumkits System Drumkits User drumkits Benutzer Drumkits &Ok &OK &Cancel &Abbrechen Songs Songs Patterns Pattern Error loading song. Fehler beim Laden des Songs. Properties Eigenschaften Warning, the selected pattern will be deleted from disk. Are you sure? Achtung! Das ausgewählte Pattern wird von der Festplatte gelöscht werden. Sind sie sicher? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Dialog Name Name Author Autor Information Information License Lizenz Save Speichern Cancel Abbrechen Save changes made to instruments into sound library Änderungen an den Instrumenten übernehmen SoundLibraryRepositoryDialog Edit repository settings bearbeite Repository-Einstellungen Edit server list bearbeite Server-Liste URL URL SoundLibraryRepositoryDialog_UI Dialog Dialog Add Hinzufügen Delete Löschen SoundLibrarySaveDialog Save Sound Library Soundbibliothek speichern Please supply at least a valid name Bitte gültigen Dateinamen angeben! Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Dialog Name Name Author Autor Information Information Cancel Abbrechen License Lizenz Save Speichern SoundLibraryTree Sound library Soundbibliothek VirtualPatternDialog Select virtual pattern VirtualPatternDialog_UI Dialog Dialog OK OK Cancel Abbrechen hydrogen-0.9.6-beta3/data/i18n/hydrogen.el.qm000066400000000000000000001217201211146647700206220ustar00rootroot00000000000000f_v5V|JV|[bdmzWg7M ȻU,)'R=>JdrZ b\!o M#P L4EcQ=I<5b-B\G.loVQQ$Y3l33M3,S @e Cn h> h>h w-X_)  rD  3 TW4 CYv a 7 1 #~= +Z$ 2_  kJD ~c Ko ;$]& = =V 2p`a B ? C[ \pJ ~7 Wp (u{ 9 $ =/^ Gh SU i"  R K ͫT 3^jjeHl^EZT|GL+.Fi7######AboutDialog_UI&&AuthorsAboutDialog_UI &&LicenseAboutDialog_UI&&OKAboutDialog_UI &...A&boutAboutDialog_UI,   HydrogenAbout HydrogenAboutDialog_UI Alt+OAlt+OAboutDialog_UI######AudioEngineInfoForm_UI4   Audio engine stateAudioEngineInfoForm_UI  Audio outputAudioEngineInfoForm_UI:   Buffer sizeAudioEngineInfoForm_UI  Connected toAudioEngineInfoForm_UI1Form1AudioEngineInfoForm_UIFramesAudioEngineInfoForm_UI MIDI MIDI inputAudioEngineInfoForm_UI NameAudioEngineInfoForm_UI PatternsAudioEngineInfoForm_UI<   Playing notesAudioEngineInfoForm_UI&  Process timeAudioEngineInfoForm_UI.  Realtime framesAudioEngineInfoForm_UI*  Sample rateAudioEngineInfoForm_UISamplerAudioEngineInfoForm_UI" Selected instrumentAudioEngineInfoForm_UI$ Selected patternAudioEngineInfoForm_UI SequencerAudioEngineInfoForm_UI&   Song positionAudioEngineInfoForm_UI0   Song stateAudioEngineInfoForm_UISynthAudioEngineInfoForm_UI TicksAudioEngineInfoForm_UI :Name:AudioFileBrowser, : Samplerate:AudioFileBrowser:Size:AudioFileBrowser.&  &Filename to instrument nameAudioFileBrowser_UI&&HomeAudioFileBrowser_UI, & &Play SampleAudioFileBrowser_UI&&StopAudioFileBrowser_UI &&UpAudioFileBrowser_UI:           4Be careful, this change all Layer velocity settings AudioFileBrowser_UICancelAudioFileBrowser_UIDialogAudioFileBrowser_UI:Length:AudioFileBrowser_UI :Name:AudioFileBrowser_UIOpenAudioFileBrowser_UIP    &Pla&y samples by clickingAudioFileBrowser_UI, : Samplerate:AudioFileBrowser_UI" Set automatic velocityAudioFileBrowser_UI:Size:AudioFileBrowser_UI6   View hidden foldersAudioFileBrowser_UIDialog Director_UIAuthorDrumkitManager_UIBrowseDrumkitManager_UIExportDrumkitManager_UI1Form1DrumkitManager_UI&... &Browse...ExportSongDialog_UI&&CloseExportSongDialog_UI&&ExportExportSongDialog_UI1616ExportSongDialog_UI 192000192000ExportSongDialog_UI 2205022050ExportSongDialog_UI2424ExportSongDialog_UI3232ExportSongDialog_UI 4410044100ExportSongDialog_UI 4800048000ExportSongDialog_UI88ExportSongDialog_UI 9600096000ExportSongDialog_UITAIFF   ADAT "48 kHz, 16 bit PCM")AIFF in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UIPAIFF   CD "41 kHz, 16 bit PCM"'AIFF in CD quality "41 kHz, 16 bit PCM"ExportSongDialog_UI\AIFF    "48 kHz, 24 bit PCM"+AIFF in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI Alt+BAlt+BExportSongDialog_UI Alt+CAlt+CExportSongDialog_UI Alt+EAlt+EExportSongDialog_UIN     WAVExport Whole Song to WAVExportSongDialog_UI4   Export filenameExportSongDialog_UInFLAC   ,    "48 kHz"1FLAC lossless compressor in good quality "48 kHz"ExportSongDialog_UInOGG Vorbis   ,    "VBR"3OGG Vorbis loosely compressed in good quality "VBR"ExportSongDialog_UI8   Bit:SampleDepth in Bit:ExportSongDialog_UI8   Hz:Samplerate in Hz:ExportSongDialog_UI: Templates: ExportSongDialog_UI<WAV LOFI "22.05kHz, 8 bit PCM WAV LOFI "22.05kHz, 8 bit PCM ExportSongDialog_UIjWAV     "96 kHz, 32 bit PCM"-WAV best Mixdown quality "96 kHz, 32 bit PCM"ExportSongDialog_UIRWAV   ADAT "48 kHz, 16 bit PCM"(WAV in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UIPWAV   CD "44,1kHz, 16 bit PCM"(WAV in CD quality "44,1kHz, 16 bit PCM"ExportSongDialog_UIZWAV    "48 kHz, 24 bit PCM"*WAV in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI..BPM H2Core::SongEditorPanelBpmWidgetTag H2Core::SongEditorPanelTagWidget&&Cancel$H2Core::SoundLibraryPropertiesDialog,###   1 2### FX maker 1 2LadspaFXSelector_UI&### copyright 1 2 3### copyright 1 2 3LadspaFXSelector_UI"###   ### fx IDLadspaFXSelector_UI###   ### fx labelLadspaFXSelector_UI###   1 ### fx name 1LadspaFXSelector_UI###   ### fx typeLadspaFXSelector_UI&&CancelLadspaFXSelector_UI&&OKLadspaFXSelector_UI11LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html>

    Copyright:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">:</span></p></body></html>

    ID:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">:</span></p></body></html>

    Label:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">:</span></p></body></html>

    Maker:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">:</span></p></body></html>

    Name:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">:</span></p></body></html>

    Type:

    LadspaFXSelector_UI Alt+CAlt+CLadspaFXSelector_UI Alt+OAlt+OLadspaFXSelector_UI1Form1LadspaFXSelector_UIMainForm&&CancelMainFormCancelMainFormOkMainForm&&ClearPatternFillDialog_UI&&FillPatternFillDialog_UI Alt+CAlt+CPatternFillDialog_UI Alt+FAlt+FPatternFillDialog_UICancelPatternFillDialog_UI1Form 1PatternFillDialog_UI:From:PatternFillDialog_UIOKPatternFillDialog_UI:To:PatternFillDialog_UI&&CancelPatternPropertiesDialog_UI&&OKPatternPropertiesDialog_UI Alt+CAlt+CPatternPropertiesDialog_UI Alt+OAlt+OPatternPropertiesDialog_UI1Form1PatternPropertiesDialog_UI*   New Pattern NamePatternPropertiesDialog_UI(  Pattern categoryPatternPropertiesDialog_UI   Song listPlaylistDialog6  PlayList BrowserPlaylistDialog_UI   Song listPlaylistDialog_UI&&CancelPreferencesDialogFastPreferencesDialogNormalPreferencesDialogSlowPreferencesDialog######PreferencesDialog_UI& &AppearancePreferencesDialog_UI&&CancelPreferencesDialog_UI&&GeneralPreferencesDialog_UI& Midi &Midi SystemPreferencesDialog_UI&&OKPreferencesDialog_UI&     &Reopen last used playlistPreferencesDialog_UIr&     &Reopen last used songPreferencesDialog_UI11PreferencesDialog_UI1010PreferencesDialog_UI1111PreferencesDialog_UI1212PreferencesDialog_UI1313PreferencesDialog_UI1414PreferencesDialog_UI1515PreferencesDialog_UI1616PreferencesDialog_UI22PreferencesDialog_UI33PreferencesDialog_UI44PreferencesDialog_UI 4410044100PreferencesDialog_UI48000PreferencesDialog_UI55PreferencesDialog_UI66PreferencesDialog_UI77PreferencesDialog_UI88PreferencesDialog_UI 8820088200PreferencesDialog_UI99PreferencesDialog_UI96000PreferencesDialog_UI<i>    ,</i><br> <i>     .</i>=After a font change the application must be restarted.PreferencesDialog_UIAllPreferencesDialog_UIAlt+CPreferencesDialog_UI Alt+DAlt+DPreferencesDialog_UIAlt+OPreferencesDialog_UI Alt+RAlt+RPreferencesDialog_UI6  Application fontPreferencesDialog_UI&  Audio &SystemPreferencesDialog_UI@   Audio output detailsPreferencesDialog_UI|     ,  1/10. -Beat counter drift compensation in 1/10 ms PreferencesDialog_UI|     ,  . #Beat counter start offset in ms PreferencesDialog_UI:   Buffer sizePreferencesDialog_UI ChannelPreferencesDialog_UIT  &  Connect to &Default Output PairPreferencesDialog_UIDevicePreferencesDialog_UIFastPreferencesDialog_UI1Form1PreferencesDialog_UI4  Ignore note-offPreferencesDialog_UIInputPreferencesDialog_UI*  Maximum number of barsPreferencesDialog_UI8   Meters falloff speedPreferencesDialog_UI*  Metronome volumePreferencesDialog_UI Midi Midi driverPreferencesDialog_UI.   Mixer fontPreferencesDialog_UINormalPreferencesDialog_UIb     Rubberband+Path to the Rubberband command-line utilityPreferencesDialog_UI PolyphonyPreferencesDialog_UI- Post-FaderPreferencesDialog_UI- Pre-FaderPreferencesDialog_UI6  Restart outputPreferencesDialog_UI*  Sample ratePreferencesDialog_UI,  Select fontPreferencesDialog_UISlowPreferencesDialog_UIStylePreferencesDialog_UI,   Track outputPreferencesDialog_UI  lashUse lashPreferencesDialog_UIx   ,   create per-instrument outputsPreferencesDialog_UI" :   ,        (),    _first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpmPreferencesDialog_UIT :   ,       (),       (sequencer) fsecond step, adjust offset between last controller/keybord trigger and the deferred sequencer startup PreferencesDialog_UI&&Cancel SampleEditor"Rubberband  " :    ( )     .S"Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio.SampleEditor_UI*&  &Apply ChangesSampleEditor_UI&&CloseSampleEditor_UI&&PlaySampleEditor_UI00SampleEditor_UI11SampleEditor_UI1/161/16SampleEditor_UI1/21/2SampleEditor_UI1/321/32SampleEditor_UI1/41/4SampleEditor_UI1/641/64SampleEditor_UI1/81/8SampleEditor_UI1010SampleEditor_UI1111SampleEditor_UI1212SampleEditor_UI1313SampleEditor_UI1414SampleEditor_UI1515SampleEditor_UI1616SampleEditor_UI1717SampleEditor_UI1818SampleEditor_UI1919SampleEditor_UI22SampleEditor_UI2020SampleEditor_UI2121SampleEditor_UI2222SampleEditor_UI2323SampleEditor_UI2424SampleEditor_UI2525SampleEditor_UI2626SampleEditor_UI2727SampleEditor_UI2828SampleEditor_UI2929SampleEditor_UI33SampleEditor_UI3030SampleEditor_UI3131SampleEditor_UI3232SampleEditor_UI44SampleEditor_UI55SampleEditor_UI66SampleEditor_UI77SampleEditor_UI88SampleEditor_UI99SampleEditor_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;"></span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;"></span></p></body></html>

    Loop

    Count

    SampleEditor_UI$<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;"></span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;"></span></p></body></html>

    Loop

    mode

    SampleEditor_UIz        "Adjust sample end & loop end frameSampleEditor_UIr      Adjust sample loop begin frameSampleEditor_UIV     Adjust sample start frameSampleEditor_UIDialogSampleEditor_UI EndSampleEditor_UILoopSampleEditor_UID&   P&lay original sampleSampleEditor_UI8   :Sample length to beat:SampleEditor_UIStartSampleEditor_UI&   fade-out typeSampleEditor_UIforwardSampleEditor_UIloopsSampleEditor_UI8    :new sample length:SampleEditor_UI offSampleEditor_UIpanoramaSampleEditor_UI pingpongSampleEditor_UIreverseSampleEditor_UI*  set processingSampleEditor_UI volumeSampleEditor_UIOkSimpleHTMLBrowser&&CancelSongEditorPanel500500SongEditorPanelBpmWidget_UI 500,55500,55SongEditorPanelBpmWidget_UI..BPMSongEditorPanelBpmWidget_UI BarSongEditorPanelBpmWidget_UICancelSongEditorPanelBpmWidget_UI@   ..Delete BPM MarkerSongEditorPanelBpmWidget_UIL    ..Delete this BPM MarkerSongEditorPanelBpmWidget_UIP     Edit beat in timelineSongEditorPanelBpmWidget_UI        #Edit the bpm value for current beatSongEditorPanelBpmWidget_UIFormSongEditorPanelBpmWidget_UIOkSongEditorPanelBpmWidget_UICancelSongEditorPanelTagWidget_UI1FormSongEditorPanelTagWidget_UIOkSongEditorPanelTagWidget_UITagSongEditorPanelTagWidget_UI&&CancelSongEditorPatternListDeleteSongEditorPatternList& &OKSongPropertiesDialog_UI&&CancelSongPropertiesDialog_UI Alt+CAlt+CSongPropertiesDialog_UI Alt+OAlt+OSongPropertiesDialog_UIAuthorSongPropertiesDialog_UI1Form1SongPropertiesDialog_UI LicenseSongPropertiesDialog_UINotesSongPropertiesDialog_UI(   Song nameSongPropertiesDialog_UIBrowseSoundLibraryExportDialog_UIDialogSoundLibraryExportDialog_UIExportSoundLibraryExportDialog_UI PatternsSoundLibraryImportDialog11SoundLibraryImportDialog_UI... Author...SoundLibraryImportDialog_UI... Browse...SoundLibraryImportDialog_UICloseSoundLibraryImportDialog_UIDialogSoundLibraryImportDialog_UI(  Download and installSoundLibraryImportDialog_UIN    Edit server listSoundLibraryImportDialog_UIInstallSoundLibraryImportDialog_UIInternetSoundLibraryImportDialog_UI... License...SoundLibraryImportDialog_UI  Local fileSoundLibraryImportDialog_UI4   Sound Library NameSoundLibraryImportDialog_UI@   Sound library InfoSoundLibraryImportDialog_UI.   Update listSoundLibraryImportDialog_UI&&CancelSoundLibraryPanelDeleteSoundLibraryPanelExportSoundLibraryPanel PatternsSoundLibraryPanelAuthorSoundLibraryPropertiesDialog_UICancelSoundLibraryPropertiesDialog_UIDialogSoundLibraryPropertiesDialog_UI InformationSoundLibraryPropertiesDialog_UI LicenseSoundLibraryPropertiesDialog_UI NameSoundLibraryPropertiesDialog_UISave SoundLibraryPropertiesDialog_UI     ,     3Save changes made to instruments into sound librarySoundLibraryPropertiesDialog_UIN    Edit server listSoundLibraryRepositoryDialogAddSoundLibraryRepositoryDialog_UIDeleteSoundLibraryRepositoryDialog_UIDialogSoundLibraryRepositoryDialog_UIAuthorSoundLibrarySaveDialog_UICancelSoundLibrarySaveDialog_UIDialogSoundLibrarySaveDialog_UI InformationSoundLibrarySaveDialog_UI LicenseSoundLibrarySaveDialog_UI NameSoundLibrarySaveDialog_UISave SoundLibrarySaveDialog_UICancelVirtualPatternDialog_UIDialogVirtualPatternDialog_UIOKVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.el.ts000066400000000000000000006565041211146647700206500ustar00rootroot00000000000000 AboutDialog About <b>Website</b><br> <b>Project page</b><br> <b>Mailing lists</b><br> <b>Main coder and mantainer:</b><br> AboutDialog_UI About Hydrogen Σχετικά με το Hydrogen A&bout Σχετικά &με... &Authors &Δημιουργοί &License &Άδεια &OK &Εντάξει Alt+O Alt+O ### ### <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info AudioEngineInfoForm_UI Playing notes Αναπαραγωγή μουσικών στιγμάτων Process time Χρόνος επεξεργασίας Audio engine state Κατάσταση της μηχανής ήχου Song state Κατάσταση του τραγουδιού Buffer size Μέγεθος της μικροαποθήκευσης Sample rate Ρυθμός δειγματοληψίας Song position Θέση του τραγουδιού Patterns Μήτρες Selected pattern Επιλεγμένες μήτρες Selected instrument Επιλεγμένο όργανο Connected to Συνδεδεμένο σε Form1 Προμόρφωμα1 ### ### Frames Καρέ Ticks Τίκια Sampler Δειγματιστής Synth Συνθέτης Sequencer Συχνοτιστής MIDI input Εισαγωγή MIDI Name Όνομα Audio output Εξαγωγή ήχου Realtime frames Καρέ πραγματικού χρόνου AudioFileBrowser Audio File Browser Size: %1 bytes Samplerate: %1 Sample length: s Please do not preview samples which are longer than 10 minutes! Name: Όνομα: Size: Μέγεθος: Samplerate: Ρυθμός δειγματοληψίας: Sample length: AudioFileBrowser_UI Dialog Διάλογος Open Άνοιγμα Name: Όνομα: Samplerate: Ρυθμός δειγματοληψίας: Size: Μέγεθος: Length: Διάρκεια: Cancel Ακύρωση Pla&y samples by clicking Αναπαραγωγή των δειγμάτων με &κλικάρισμα &Up &Επάνω &Home &Αρχική &Play Sample Αναπαραγωγή &Δείγματος &Filename to instrument name &Διατήρηση του ονόματος &Stop &Σταμάτημα View hidden folders Εμφάνιση των κρυφών αρχείων Be careful, this change all Layer velocity settings Προσοχή: αυτό αλλάζει τις ρυθμίσεις της ταχύτητας σε όλα τα Επίπεδα Set automatic velocity Αυτόματη ταχύτητα Director Director Director_UI Dialog Διάλογος DownloadWidget (%1/%2 KiB) - ETA %3 DrumkitManager_UI Form1 Προμόρφωμα1 Load ### Drumkit author Delete drumkit ### Drumkit name ### Drumkit info Load drumkit Save Author Δημιουργός Info Drumkit name Import Drumkit filename Browse Αναζήτηση <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> ### The drumkit will be installed zncxbmzbxcmznxbcmz Export Εξαγωγή Drumkit directory ExportSongDialog Export song Export to a single track Export to seperate tracks Both The file %1 exists. Overwrite the existing file? ExportSongDialog_UI Export filename Όνομα του αρχείου εξαγωγής Export Whole Song to WAV Εξαγωγή Ολόκληρου του Τραγουδιού σε WAV &Export &Εξαγωγή &Browse... Ανα&ζήτηση... &Close &Κλείσιμο Alt+C Alt+C Alt+E Alt+E Alt+B Alt+B Samplerate in Hz: Ρυθμός δειγματοληψίας σε Hz: 22050 22050 44100 44100 48000 48000 96000 96000 192000 192000 SampleDepth in Bit: Βάθος δειγματοληψίας σε Bit: 8 8 16 16 24 24 32 32 Templates: Προσχέδια: WAV in CD quality "44,1kHz, 16 bit PCM" WAV σε ποιότητα CD "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV σε ποιότητα ADAT "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV σε καλύτερη ποιότητα "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV LOFI "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" WAV στην καλύτερη ποιότητα μίξης "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF σε ποιότητα CD "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF σε ποιότητα ADAT "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" AIFF σε καλύτερη ποιότητα "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" FLAC συμπίεση χωρίς απώλειες, σε καλή ποιότητα "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" OGG Vorbis συμπίεση με απώλειες, σε καλή ποιότητα "VBR" Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off Master output H2Core::SongEditorPanelBpmWidget BPM Χτ.ΑνάΛεπ. H2Core::SongEditorPanelTagWidget Tag Ετικέτα H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties This is not possible, you can only save changes inside instruments to the current loaded sound library Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? &Ok &Cancel Α&κύρωση Saving of this drumkit failed. HydrogenApp Song Editor Instrument + Pattern Mixer Drumkit loaded: [%1] InstrumentEditor General Show instrument properties Layers Show layers properties Random pitch factor Filter Cutoff Filter resonance Attack Decay Sustain Release Instrument gain Auto-Stop-Note Stop the current playing instrument-note before trigger the next note sample. Layer gain Layer pitch (Coarse) Layer pitch (Fine) New instrument name InstrumentLine Mute instrument Solo Clear notes Fill notes ... Fill all notes Fill 1/2 notes Fill 1/3 notes Fill 1/4 notes Fill 1/6 notes Fill 1/8 notes Randomize velocity Delete instrument InstrumentRack Show Instrument editor Instrument Show sound library Sound library LadspaFXMixerLine FX bypass Edit FX parameters Ladspa FX name Effect return LadspaFXProperties Select FX Remove FX Activate [%1] LADSPA FX Properties Deactivate LADSPA FX %1 Properties No plugin LadspaFXSelector Select LADSPA FX Groups Alphabetic List Categorized Recently Used Stereo Mono Not supported LadspaFXSelector_UI &Cancel Α&κύρωση &OK &Εντάξει Form1 Προμόρφωμα1 Alt+C Alt+C Alt+O Alt+O ### fx label ### ετικέτα εφέ ### fx type ### τύπος εφέ ### fx ID ### εφέ ταυτότητα 1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Όνομα:</span></p></body></html> ### fx name 1 ### όνομα εφέ 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Ετικέτα:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Τύπος:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Ταυτότητα:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Δημιουργός:</span></p></body></html> ### FX maker 1 2 ### δημιουργός εφέ 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 ### copyright 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm Info|About Πληροφορίες|Σχετικά με... Hydrogen Ready. Undo history &Project &New Show &info &Open Open &Demo Open &recent &Save Save &as... Open &Pattern Expor&t pattern as... Export &MIDI file &Export song &Quit &Undo menu Undo Redo I&nstruments &Add instrument &Clear all &Save library &Export library &Import library &Tools Playlist &editor Director &Mixer &Instrument Rack Input mode Instrument Drumkit &Preferences De&bug Show &audio engine info Print Objects &Info &User manual &About Report bug Hydrogen Song (*.h2song) Save song Song saved as. Could not save song. Song saved. Hydrogen Pattern (*.h2pattern) Save Pattern as ... Could not export pattern. Pattern saved. Open song Open Pattern Clear all instruments? Ok Εντάξει Cancel Ακύρωση Error loading song. Midi file (*.mid) Export MIDI file Unknown audio driver Error starting audio driver Jack driver: server shutdown Jack driver: cannot activate client Jack driver: cannot connect output port Jack driver: error in port register Unknown error %1 Playlist: Set song No. %1 You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Don't show this message anymore Playlist: Song No. %1 The document contains unsaved changes. Do you want to save the changes? &Discard &Cancel Α&κύρωση MasterMixerLine Humanize velocity Humanize time Swing Set master volume [%1] Set humanize time parameter [%1] Set humanize velocity parameter [%1] Set swing factor [%1] MidiTable press button to record midi event Event Param. Action Mixer Show FX panel Show instrument peaks Set FX %1 level Show instrument peaks = On Show instrument peaks = Off Set LADSPA FX ( %1 ) volume MixerLine Play sample Mute Solo Pan Instrument name (double click to edit) Set instrument volume [%1] Set instr. pan [%1] PatternEditorPanel Loaded Soundlibrary Select pattern size Select grid resolution Hear new notes Quantize keyboard/midi events to grid Show piano roll editor destructive mode pre delete settings destructive mode post delete settings Zoom in Zoom out Select note properties Velocity Pan Lead and Lag NoteKey Pattern editor - %1 No pattern selected Hear new notes = On Hear new notes = Off Quantize incoming keyboard/midi events = On Quantize incoming keyboard/midi events = Off Show drum editor Is not possible to change the pattern size when playing. Cutoff Resonance PatternFillDialog Fill with selected pattern PatternFillDialog_UI &Fill &Γέμισμα &Clear &Εκκαθάριση To: Στο: From: Από: Cancel Ακύρωση OK Εντάξει Form 1 Προμόρφωμα1 Alt+F Alt+F Alt+C Alt+C PatternPropertiesDialog Pattern properties %1#2 %1 PatternPropertiesDialog_UI &Cancel Α&κύρωση &OK &Εντάξει New Pattern Name Όνομα της Νέας Μήτρας Form1 Προμόρφωμα1 Alt+C Alt+C Alt+O Alt+O Pattern category Κατηγορία της μήτρας Pattern description PianoRollEditor Velocity Pan Lead and Lag PlayerControl Rewind Record Destructive Record Play/ Pause Stop Fast Forward Loop song Pattern Mode Song Mode BeatCounter Panel on Set BPM / Set BPM and play Recalculate Rubberband modified samples if bpm will change Switch metronome on/off Jack-transport on/off Jack-Time-Master on/off Show mixer Mixer Show Instrument Rack Instrument rack Record midi events = On Record midi events = Off Destructive mode = Off Destructive mode = On Playing. Pause. Stopped. Song mode selected. Pattern mode selected. BC Panel on BC Panel off Count BPM and start PLAY Count and set BPM Recalculate all samples using Rubberband ON Recalculate all samples using Rubberband OFF Jack-transport mode = On Jack-transport mode = Off JACK-transport will work only with JACK driver. Jack-Time-Master mode = On Jack-Time-Master mode = Off New BPM value Loop song = On Loop song = Off PlaylistDialog Playlist Browser &Playlist Add song to Play&list Add &current song to Playlist &Remove selected song from Playlist &New Playlist &Open Playlist &Save Playlist Save Playlist &as &Scripts &Add Script to selected song &Edit selected Script &Remove selected Script &Create a new Script Rewind Play/ Pause/ Load selected song Stop Fast Forward Song list Λίστα τραγουδιών Script exec Script sort Add Song to PlayList Please save your song first No Song selected! no Script Load Playlist Hydrogen Scripts (*.sh) New Script Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. WARNING, the new file is executable by the owner of the file! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Set your Default Editor Hydrogen Playlist (*.h2playlist) Save Playlist No Song in List or no Song selected! Hydrogen Playlist (*.sh) Add Script to selected Song No Script in use! No Script selected! No Script! No song selected! Error loading song. Pause. Playlist: set song no. %1 PlaylistDialog_UI PlayList Browser Πλοηγός Λιστών Αναπαραγωγής Song list Λίστα τραγουδιών PreferencesDialog Preferences Slow Αργά Normal Κανονικά Fast Γρήγορα Driver restart required. Restart driver? &Ok &Cancel Α&κύρωση <b>Automatic driver selection</b> <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>ALSA Driver</b><br> <b>PortAudio Driver</b><br> <b>CoreAudio Driver</b><br> Please restart hydrogen to enable/disable LASH support PreferencesDialog_UI Buffer size Μέγεθος της μικροαποθήκευσης Device Συσκευή Input Εισαγώμενο Channel Κανάλι All Όλα Meters falloff speed Ταχύτητα πτώσης των μετρητών Slow Αργά Normal Κανονικά Fast Γρήγορα Application font Γραμματοσειρά της εφαρμογής Mixer font Γραμματοσειρά του μίκτη Select font Επιλογή γραμματοσειράς <i>After a font change the application must be restarted.</i> <i>Μετά την αλλαγή της γραμματοσειράς,</i><br> <i>θα πρέπει να επανεκκινηθεί η εφαρμογή.</i> Polyphony Πολυφωνία Style Διακόσμιση &Cancel Α&κύρωση &OK &Εντάξει &General &Γενικά Audio &System &Σύστημα Ήχου Metronome volume Ένταση του μετρονόμου Connect to &Default Output Pair Σύνδεση στο &Προεπιλεγμένο Ζευγάρι Εξόδου &Midi System Σύστη&μα Midi Midi driver Οδηγός Midi Ignore note-off Αγνόηση της αποστιγμάτωσης &Appearance Εμ&φάνιση Form1 Προμόρφωμα1 Alt+C Alt+O &Reopen last used song &Ξανά άνοιγμα του τελευταίου χρησιμοποιημένου τραγουδιού Alt+R Alt+R ### ### Sample rate Ρυθμός δειγματοληψίας 44100 44100 48000 88200 88200 96000 Alt+D Alt+D 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 Restart output Επανεκκίνηση του εξαγόμενου Audio output details Λεπτομέρειες του εξαγόμενου ήχου Post-Fader Μέτα-Φθορά Pre-Fader Προ-Φθορά Track output Εξαγόμενο του καναλιού Use lash Χρήση του lash first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm πρώτο βήμα: προσάρμοσε την ασυνέπεια, μεταξύ της καθυστέρησης της ενεργοποίησης του ελεγκτή (πληκτρολογίου), και των υπολογισμένων ΧτύπωνΑνάΛεπτό Beat counter drift compensation in 1/10 ms Αποζημίωση της απώλειας του μετρητή χτύπων, σε 1/10χιλδευτ. second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup δεύτερο βήμα: προσάρμωσε τη διαφοροποίηση, μεταξύ της τελευταίας ενεργοποίησης του ελεγκτή (πληκτρολογίου), και της διαφοροποιημένης εκκίνησης του συχνοτιστή (sequencer) Beat counter start offset in ms Διαφοροποίηση της εκκίνησης του μετρητή χτύπων, σε χιλδευτ. create per-instrument outputs Δημιουργία ξεχωριστού αποτελέσματος εξόδου, για κάθε όργανο Path to the Rubberband command-line utility Διαδρομή του εργαλείου γραμμής εντολών Rubberband Maximum number of bars Μέγιστο πλήθος στηλών &Reopen last used playlist &Ξανάνοιγμα της τελευταίας χρησιμοποιημένης λίστας αναπαραγωγής Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? &Ok &Cancel Α&κύρωση Close dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditor_UI Dialog Διάλογος P&lay original sample Αναπα&ραγωγή του αρχικού δείγματος &Apply Changes Ε&φαρμογή των Αλλαγών &Close &Κλείσιμο Adjust sample start frame Προσαρμογή του καρέ εκκίνησης του δείγματος Adjust sample loop begin frame Προσαρμογή του καρέ εκκίνησης του ανακυκλώμενου δείγματος set processing όρισε την επεξεργασία forward μπροστά reverse πίσω pingpong πινγκ πονγκ loops ανακυκλώσεις Adjust sample end & loop end frame Προσάρμωσε το τελικό καρέ του δείγματος και του ανακυκλώμενου &Play Ανα&παραγωγή new sample length: το μήκος του νέου δείγματος: fade-out type τύπου ομαλής εξόδου volume ένταση panorama πανοραμικό Sample length to beat: Μήκος δείγματος στο χτύπημα: off απενεργοποιημένο 1/64 1/64 1/32 1/32 1/16 1/16 1/8 1/8 1/4 1/4 1/2 1/2 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 Pitch the sample in semitones, cents Crispness: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 0 Start Εκκίνηση Loop Ανακύκλωση <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Ανακύκλωση</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">λειτουργία</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Ανακύκλωση</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Μέτρηση</span></p></body></html> End Τέλος "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. "Rubberband Επεξεργαστής Ήχου" : Άλλαξε το ρυθμό (μήκος δείγματος) και τον τόνο του ήχου. Pitch (Semitone,Cent) SimpleHTMLBrowser Manual Welcome to Hydrogen Don't show this message anymore Ok Εντάξει Documentation index SongEditorPanel Song Editor Enable time line edit Clear pattern sequence Create new pattern Move the selected pattern down Move the selected pattern up Select mode Draw mode stacked mode Pattern %1 not_categorized Warning, this will erase your pattern sequence. Are you sure? &Ok &Cancel Α&κύρωση stacked pattern mode single pattern mode SongEditorPanelBpmWidget_UI Form Προμόρφωμα Edit the bpm value for current beat Επεξεργασία της τιμής των ΧτύπωνΑνάΛεπτό για το συγκεκριμένο χτύπο 500,55 500,55 Edit beat in timeline Επεξεργασία του χτύπου στη γραμμή χρόνου 500 500 Bar Στήλη BPM Χτ.ΑνάΛεπ. Delete this BPM Marker Διαγραφή αυτού του Σημαδιού Χτ.ΑνάΛεπ. Delete BPM Marker Διαγραφή του Σημαδιού Χτ.ΑνάΛεπ. Cancel Ακύρωση Ok Εντάξει SongEditorPanelTagWidget_UI Form Προμόρφωμα1 Tag Ετικέτα Cancel Ακύρωση Ok Εντάξει SongEditorPatternList Copy Delete Διαγραφή Fill/Clear ... Properties Load Pattern Save Pattern Virtual Pattern Hydrogen Pattern (*.h2pattern) Open Pattern The pattern-file exists. Overwrite the existing pattern? &Ok &Cancel Α&κύρωση Pattern 1 not_categorized Export Pattern SongPropertiesDialog Song properties SongPropertiesDialog_UI Notes Στίγματα Author Δημιουργός Song name Όνομα του τραγουδιού &Cancel Α&κύρωση &OK &Εντάξει Form1 Προμόρφωμα1 Alt+O Alt+O Alt+C Alt+C License Άδεια SoundLibraryExportDialog Export Sound Library Directory SoundLibraryExportDialog_UI Dialog Διάλογος Browse Αναζήτηση Export Εξαγωγή SoundLibraryImportDialog Sound Library import Sound library Status Updating SoundLibrary list... Drumkits Songs Patterns Μήτρες Installed New Author: %1 License: %1 Downloading SoundLibrary... SoundLibrary imported in %1 An error occurred importing the SoundLibrary. Import drumkit SoundLibraryImportDialog_UI Dialog Διάλογος Internet Διαδίκτυο Update list Ενημέρωση του καταλόγου Sound Library Name Όνομα της Βιβλιοθήκης Ήχων Sound library Info Πληροφορίες της Βιβλιοθήκης Ήχων Author... Δημιουργός... Download and install Λήψη και εγκατάσταση Local file Τοπικό αρχείο Browse... Αναζήτηση... Install Εγκατάσταση 1 1 License... Άδεια... Edit server list Επεξεργασία της λίστας των εξυπηρετητών Close Κλείσιμο SoundLibraryPanel Load Export Εξαγωγή Properties Delete Διαγραφή System drumkits User drumkits Songs Patterns Μήτρες &Ok &Cancel Α&κύρωση Error loading song. Warning, the selected pattern will be deleted from disk. Are you sure? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Διάλογος Name Όνομα Author Δημιουργός Information Πληροφορίες License Άδεια Save Αποθήκευση Cancel Ακύρωση Save changes made to instruments into sound library Τις αλλαγές που έγιναν στα όργανα, αποθήκευσέ τες στη βιβλιοθήκη ήχων SoundLibraryRepositoryDialog Edit repository settings Edit server list Επεξεργασία της λίστας των εξυπηρετητών URL SoundLibraryRepositoryDialog_UI Dialog Διάλογος Add Προσθήκη Delete Διαγραφή SoundLibrarySaveDialog Save Sound Library Please supply at least a valid name Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Διάλογος Name Όνομα Author Δημιουργός Information Πληροφορίες Cancel Ακύρωση License Άδεια Save Αποθήκευση SoundLibraryTree Sound library VirtualPatternDialog Select virtual pattern VirtualPatternDialog_UI Dialog Διάλογος OK Εντάξει Cancel Ακύρωση hydrogen-0.9.6-beta3/data/i18n/hydrogen.es.qm000066400000000000000000002164111211146647700206330ustar00rootroot00000000000000g+A`.  . ^5b;dM>aeȹ+pUey4|[F!  V~aS֧P+z6U6ijR=x;f3T$\U>@q^lo4.nAu %ukLA)M+DOLS0mDqUmDuS\j/j6&<![vl^lq_7b79XQ@q%(9q<?AC4mITh[R35bP'qA#z^i.bibbbIl3Uz"I IUI{IuIBI9I9Innce.AɷV,,o,HnϕHWKW-WrWWMWWW}Wٯk"Nv@vv֏1{؃ޱeL:o-o7DMls=U.vftc(05I8[|t@fSJf~3V|/V|W^3[R35^asd&eNhi{h~th~3jrk2m?pr`<=v mz?|Vdiz<TDDt^ȿ>g74 Cy'Ȼ~;Ar0eo+\y[ (/{$)t "c) >)0 g''4DU*Z[R35_pxg4k}e~>#2%5Q#9$WgR!֣֣=>[!⪁("J2 rUC6`1 En bv\!oa#P 4]4=-V^tE`~a.f'h3Rs;Ec?k_b; Sz"v8>abom¯c==o&o<5PH?ݿV*P빆p-B(R3d>3d@{ppG.l@VQg[R35$8l%܍lc}>33\3 n?w¸13:ؿۨ=\t^N S9; $T4 ){b +s' 3b1 @e Cn! S%]h Xfq aOT6 h> h> w-X) w   r_  ~7 ~c  V1 ' .n 4< $ 3( ~ * T| C a9 H #~L/ +Z$ 2  1 ̎A $ %+^ > TY gn kJD+ x@#k: z P ?7 ?Z  /C C Dg ;$b s'Q '_ = =& 5 "U:I & 2p`r 5yx 5y+ @9 B CG C/ FPJ \p `nn j] wa |vg ~J  _ /; (uz _ 3 ~ v cx ac 9 Z $ 4dM =a =/" Gh# S\ if yE( { @ 4)QT R% </ h ͫ ͼ7D 9n ӽ^ $ mm]۹ 3eNY"= $RY =S\Gk[36^jbje~mz mew>C|p&وXdeBwEǗ.3G 8~ E}"_Q.@0=Щ*+HL"aN!b st`$4fj~+efBwKtkwޔkRs$/W\`diO6<b>Listas de correo</b><br>Mailing lists
     AboutDialog\<b>Programador principal y mantenedor:</b><br>$Main coder and mantainer:
     AboutDialog<<b>Pgina del proyecto</b><br>Project page
     AboutDialog*<b>Pgina web</b><br>Website
     AboutDialogAcerca deAbout AboutDialog###AboutDialog_UI&Autores&AuthorsAboutDialog_UI&Licencia&LicenseAboutDialog_UI&Aceptar&OKAboutDialog_UIAce&rcaA&boutAboutDialog_UI$Acerca de HydrogenAbout HydrogenAboutDialog_UI Alt+OAlt+OAboutDialog_UI<Informacin del motor de audioAudio Engine InfoAudioEngineInfoForm###AudioEngineInfoForm_UI2Estado del motor de audioAudio engine stateAudioEngineInfoForm_UISalida de Audio Audio outputAudioEngineInfoForm_UI"Tamao del buffer Buffer sizeAudioEngineInfoForm_UIConectado a Connected toAudioEngineInfoForm_UI Forma1Form1AudioEngineInfoForm_UI MarcosFramesAudioEngineInfoForm_UIEntrada MIDI MIDI inputAudioEngineInfoForm_UI NombreNameAudioEngineInfoForm_UIPatronesPatternsAudioEngineInfoForm_UIPolifona Playing notesAudioEngineInfoForm_UI.Tiempo de procesamiento Process timeAudioEngineInfoForm_UI*Marcos en tiempo realRealtime framesAudioEngineInfoForm_UI Tasa de muestreo Sample rateAudioEngineInfoForm_UISamplerSamplerAudioEngineInfoForm_UI0Instrumento seleccionadoSelected instrumentAudioEngineInfoForm_UI&Patrn seleccionadoSelected patternAudioEngineInfoForm_UISecuenciador SequencerAudioEngineInfoForm_UI,Posicin de la cancin Song positionAudioEngineInfoForm_UI(Estado de la cancin Song stateAudioEngineInfoForm_UISintetizadorSynthAudioEngineInfoForm_UI PartesTicksAudioEngineInfoForm_UI s sAudioFileBrowser0Navegador Archivos AudioAudio File BrowserAudioFileBrowserNombre:Name:AudioFileBrowserpPor favor no previsualice samples de ms de 10 minutos!?Please do not preview samples which are longer than 10 minutes!AudioFileBrowser(Longitud del Sample:Sample length:AudioFileBrowser*Longitud del Sample: Sample length: AudioFileBrowser"Tasa de muestreo: Samplerate:AudioFileBrowser(Tasa de muestreo: %1Samplerate: %1AudioFileBrowserTamao:Size:AudioFileBrowser Tamao: %1 bytesSize: %1 bytesAudioFileBrowserT&Nombre de archivo a nombre de instrumento&Filename to instrument nameAudioFileBrowser_UI&Inicio&HomeAudioFileBrowser_UI"&Reproduce Sample &Play SampleAudioFileBrowser_UI&Detener&StopAudioFileBrowser_UI&Arriba&UpAudioFileBrowser_UIAtencin, esto modificar todos los ajustes de Velocidad de Capas 4Be careful, this change all Layer velocity settings AudioFileBrowser_UICancelarCancelAudioFileBrowser_UIDilogoDialogAudioFileBrowser_UILongitud:Length:AudioFileBrowser_UINombre:Name:AudioFileBrowser_UI AbrirOpenAudioFileBrowser_UIBReprodu&ce samples haciendo clickPla&y samples by clickingAudioFileBrowser_UI"Tasa de Muestreo: Samplerate:AudioFileBrowser_UI@Seleccionar velocidad automticaSet automatic velocityAudioFileBrowser_UITamao:Size:AudioFileBrowser_UI(Ver carpetas ocultasView hidden foldersAudioFileBrowser_UIDilogoDialog Director_UI(%1/%2 KiB) - ETA %3DownloadWidgetAutor drumkit### Drumkit authorDrumkitManager_UI,Informacin de drumkit### Drumkit infoDrumkitManager_UI"Nombre de drumkit### Drumkit nameDrumkitManager_UITEl drumkit se instalar zncxbmzbxcmznxbcmz4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b> Descargue ms kits de batera en <br> http://www.hydrogen-music.org(new line) </b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UI AutorAuthorDrumkitManager_UIExaminarBrowseDrumkitManager_UI Eliminar drumkitDelete drumkitDrumkitManager_UI,Directorio de drumkitsDrumkit directoryDrumkitManager_UI"Nombre de drumkitDrumkit filenameDrumkitManager_UI$Nombre del drumkit Drumkit nameDrumkitManager_UIExportarExportDrumkitManager_UI Forma1Form1DrumkitManager_UIImportarImportDrumkitManager_UIInformacinInfoDrumkitManager_UI CargarLoadDrumkitManager_UICargar drumkit Load drumkitDrumkitManager_UIGuardarSaveDrumkitManager_UI Exportar cancin Export songExportSongDialogzEl archivo %1 ya existe. Sobreescribir el archivo existente?1The file %1 exists. Overwrite the existing file?ExportSongDialog&Examinar... &Browse...ExportSongDialog_UI&Cerrar&CloseExportSongDialog_UI&Exportar&ExportExportSongDialog_UI1616ExportSongDialog_UI192000ExportSongDialog_UI22050ExportSongDialog_UI24ExportSongDialog_UI32ExportSongDialog_UI 4410044100ExportSongDialog_UI 4800048000ExportSongDialog_UI8ExportSongDialog_UI 9600096000ExportSongDialog_UIRAIFF en calidad ADAT "48 kHz, 16 bit PCM")AIFF in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UINAIFF en calidad CD "41 kHz, 16 bit PCM"'AIFF in CD quality "41 kHz, 16 bit PCM"ExportSongDialog_UITAIFF en mejor calidad "48 kHz, 24 bit PCM"+AIFF in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI Alt+BAlt+BExportSongDialog_UI Alt+CAlt+CExportSongDialog_UI Alt+EAlt+EExportSongDialog_UI:Exportar Cancin Entera a WAVExport Whole Song to WAVExportSongDialog_UI8Nombre de archivo a exportarExport filenameExportSongDialog_UIhFLAC compresor sin prdida en buena calidad "48 kHz"1FLAC lossless compressor in good quality "48 kHz"ExportSongDialog_UIrOGG Vorbis comprimido holgadamente en buena calidad "VBR"3OGG Vorbis loosely compressed in good quality "VBR"ExportSongDialog_UI:Profundidad de Sample en Bit:SampleDepth in Bit:ExportSongDialog_UI.Tasa de Muestreo en Hz:Samplerate in Hz:ExportSongDialog_UIPlantillas:  Templates: ExportSongDialog_UIWAV LOFI "22.05kHz, 8 bit PCM ExportSongDialog_UIZWAV mejor calidad Mezcla "96 kHz, 32 bit PCM"-WAV best Mixdown quality "96 kHz, 32 bit PCM"ExportSongDialog_UIPWAV en calidad ADAT "48 kHz, 16 bit PCM"(WAV in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UIPWAV en calidad CD "44,1kHz, 16 bit PCM"(WAV in CD quality "44,1kHz, 16 bit PCM"ExportSongDialog_UIRWAV en mejor calidad "48 kHz, 24 bit PCM"*WAV in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI*%1<br>%2 KHz<br>%3 %4%1
    %2 KHz
    %3 %4 FileBrowserEfectos si/no FX on/off FxMixerLineSalida Master Master output FxMixerLinePPMBPM H2Core::SongEditorPanelBpmWidgetEtiquetaTag H2Core::SongEditorPanelTagWidget&Cancelar&Cancel$H2Core::SoundLibraryPropertiesDialog&Aceptar&Ok$H2Core::SoundLibraryPropertiesDialogNPropiedades de la Biblioteca de SonidosSoundLibrary Properties$H2Core::SoundLibraryPropertiesDialogEsto no es posible, slo puede guardar las modificaciones de los instrumentos en la biblioteca de sonidos cargada actualmentefThis is not possible, you can only save changes inside instruments to the current loaded sound library$H2Core::SoundLibraryPropertiesDialogAdvertencia! Si modifica el nombre del drumkit se crear otro con este nombre Est segur@?fWarning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure?$H2Core::SoundLibraryPropertiesDialog*Drumkit cargado: [%1]Drumkit loaded: [%1] HydrogenAppMezcladorMixer HydrogenApp&Editor de canciones Song Editor HydrogenAppAtaque AttackInstrumentEditor DecayDecayInstrumentEditor Filtro de Corte  Filter CutoffInstrumentEditor(Filtro de resonanciaFilter resonanceInstrumentEditorGeneralGeneralInstrumentEditor0Ganancia del instrumentoInstrument gainInstrumentEditor Ganancia de capa Layer gainInstrumentEditor4Afinacin de capa (gruesa)Layer pitch (Coarse)InstrumentEditor0Afinacin de capa (fina)Layer pitch (Fine)InstrumentEditor CapasLayersInstrumentEditor6Nombre de instrumento nuevoNew instrument nameInstrumentEditor2Factor aleatorio de tono Random pitch factorInstrumentEditorReleaseReleaseInstrumentEditorDMostrar propiedades de instrumentoShow instrument propertiesInstrumentEditor8Mostrar propiedades de capasShow layers propertiesInstrumentEditorDetn la nota del instrumento actual antes de disparar la siguiente nota de sample.MStop the current playing instrument-note before trigger the next note sample.InstrumentEditorSustainSustainInstrumentEditorBorrar notas Clear notesInstrumentLine(Eliminar instrumentoDelete instrumentInstrumentLineLlena notas 1/2Fill 1/2 notesInstrumentLineLlena notas 1/3Fill 1/3 notesInstrumentLineLlena notas 1/4Fill 1/4 notesInstrumentLineLlena notas 1/6Fill 1/6 notesInstrumentLineLlena notas 1/8Fill 1/8 notesInstrumentLine*Llena todas las notasFill all notesInstrumentLineLlena notas ...Fill notes ...InstrumentLine(Intensidad aleatoriaRandomize velocityInstrumentLineSoloSoloInstrumentLineInstrumento InstrumentInstrumentRack2Ver editor de instrumentoShow Instrument editorInstrumentRack0Ver biblioteca de sonidoShow sound libraryInstrumentRack(Biblioteca de sonido Sound libraryInstrumentRack2Editar parmetros efectosEdit FX parametersLadspaFXMixerLine&Retorno de efectos  Effect returnLadspaFXMixerLineBypass Efectos FX bypassLadspaFXMixerLine0Nombre de efecto Ladspa Ladspa FX nameLadspaFXMixerLineActivarActivateLadspaFXPropertiesDesactivar DeactivateLadspaFXProperties8Propiedades Efecto LADSPA %1LADSPA FX %1 PropertiesLadspaFXPropertiesSin plugin No pluginLadspaFXProperties$Seleccionar Efecto Select FXLadspaFXProperties<[%1] Propiedades Efecto LADSPA[%1] LADSPA FX PropertiesLadspaFXProperties Lista AlfabticaAlphabetic ListLadspaFXSelectorCategorizado CategorizedLadspaFXSelector GruposGroupsLadspaFXSelectorMonoMonoLadspaFXSelectorNo soportado Not supportedLadspaFXSelector.Utilizado Recientemente Recently UsedLadspaFXSelector2Seleccionar Efecto LADSPASelect LADSPA FXLadspaFXSelectorEstreoStereoLadspaFXSelector,### Creador Efecto 1 2### FX maker 1 2LadspaFXSelector_UI&### Copyright 1 2 3### copyright 1 2 3LadspaFXSelector_UI### ID Efecto ### fx IDLadspaFXSelector_UI&### Etiqueta Efecto ### fx labelLadspaFXSelector_UI(### nombre efectos 1 ### fx name 1LadspaFXSelector_UI### Tipo Efecto ### fx typeLadspaFXSelector_UI&Cancelar&CancelLadspaFXSelector_UI&Aceptar&OKLadspaFXSelector_UI11LadspaFXSelector_UI

    Copyright:

    LadspaFXSelector_UI

    ID:

    LadspaFXSelector_UI

    Label:

    LadspaFXSelector_UI

    Maker:

    LadspaFXSelector_UI

    Name:

    LadspaFXSelector_UI

    Type:

    LadspaFXSelector_UI Alt+CAlt+CLadspaFXSelector_UI Alt+OAlt+OLadspaFXSelector_UI Forma1Form1LadspaFXSelector_UIInfo|Acerca deMainForm El documento contiene cambios sin guardar. Quiere guardar los cambios? I The document contains unsaved changes. Do you want to save the changes? MainForm&Acerca de&AboutMainForm&&Aadir Instrumento&Add instrumentMainForm&Cancelar&CancelMainForm&Limpiar todo &Clear allMainForm&Descartar&DiscardMainForm(&Exportar biblioteca&Export libraryMainForm"&Exportar cancin &Export songMainForm(&Importar biblioteca&Import libraryMainForm &Info&InfoMainForm*Rack de &instrumentos&Instrument RackMainForm&Mezclador&MixerMainForm &Nuevo&NewMainForm &Abrir&OpenMainForm&Preferencias &PreferencesMainForm&Proyecto&ProjectMainForm &Salir&QuitMainForm&Guardar&SaveMainForm&&Guardar biblioteca &Save libraryMainFormHerramien&tas&ToolsMainForm$Manual de &usuario &User manualMainFormCancelarCancelMainFormBEliminar todos los instrumentos?Clear all instruments?MainForm<No se pudo exportar el patrn.Could not export pattern.MainForm<No se pudo guardar la cancin.Could not save song.MainForm De&bugDe&bugMainFormDirectorMainForm@No mostrar este mensaje de nuevoDon't show this message anymoreMainForm6Error al cargar la cancin.Error loading song.MainFormHError iniciando controlador de audioError starting audio driverMainForm0Expor&tar patrn como...Expor&t pattern as...MainForm,Exportar archivo &MIDIExport &MIDI fileMainForm*Exportar archivo MIDIExport MIDI fileMainForm:Patrn Hydrogen (*.h2pattern)Hydrogen Pattern (*.h2pattern)MainFormHydrogen Listo.Hydrogen Ready.MainForm6Cancin Hydrogen (*.h2song)Hydrogen Song (*.h2song)MainFormI&nstrumentos I&nstrumentsMainFormInstrumento InstrumentMainForm`Controlador Jack: no se puede activar el cliente#Jack driver: cannot activate clientMainFormrControlador Jack no se puede conectar al puerto de salida'Jack driver: cannot connect output portMainFormbControlador Jack: error en el registro del puerto#Jack driver: error in port registerMainFormJControlador Jack: cierre del servidorJack driver: server shutdownMainForm(Archivo Midi (*.mid)Midi file (*.mid)MainFormAceptarOkMainFormAbrir &Demo Open &DemoMainFormAbrir &Patrn Open &PatternMainFormAbrir &reciente Open &recentMainFormAbrir Patrn Open PatternMainFormAbrir cancin Open songMainForm Patrn guardado.Pattern saved.MainForm:&Editor lista de reproduccinPlaylist &editorMainFormTLista de Reproduccin: Fijar n cancin %1Playlist: Set song No. %1MainFormJLista de Reproduccin: Cancin N. %1Playlist: Song No. %1MainForm Imprimir objetos Print ObjectsMainForm Gu&ardar como... Save &as...MainForm,Guardar Patrn como...Save Pattern as ...MainFormGuardar cancin Save songMainForm6Ver info de motor de &audioShow &audio engine infoMainFormMostrar &info Show &infoMainForm,Cancin guardada.como.Song saved as.MainForm"Cancin guardada. Song saved.MainForm@Controlador de audio desconocidoUnknown audio driverMainForm(Error desconocido %1Unknown error %1MainFormFEst usando una versin de desarrollo de Hydrogen, por favor aydenos a informar sobre errores o sugerencias en la lista de correo hydrogen-devel.<br><br>Gracias!You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!MainForm Humanizar tiempo Humanize timeMasterMixerLine&Humanizar velocidadHumanize velocityMasterMixerLinePParametro de humanizacin de tiempo [%1] Set humanize time parameter [%1]MasterMixerLineXParmetro de humanizacin de intensidad [%1]$Set humanize velocity parameter [%1]MasterMixerLine,Volumen principal [%1]Set master volume [%1]MasterMixerLine(Factor de swing [%1]Set swing factor [%1]MasterMixerLine SwingSwingMasterMixerLine AccinAction MidiTable EventoEvent MidiTable Parm.Param. MidiTableLPulse el botn para grabar evento midi!press button to record midi event MidiTableNivel Efecto %1Set FX %1 level Mixer8Volumen Efecto LADSPA ( %1 )Set LADSPA FX ( %1 ) volumeMixer(Ver panel de efectos Show FX panelMixer8Mostrar picos de instrumentoShow instrument peaksMixerBMostrar picos de instrumento = NoShow instrument peaks = OffMixerBMostrar picos de instrumento = SShow instrument peaks = OnMixer`Nombre del instrumento (doble click para editar)&Instrument name (double click to edit) MixerLineSilencioMute MixerLineBalancePan MixerLine"Reproducir sample Play sample MixerLine2Fijar balance instr. [%1]Set instr. pan [%1] MixerLineDFijar volumen del instrumento [%1]Set instrument volume [%1] MixerLineSoloSolo MixerLine Filtro de limiteCutoffPatternEditorPanel*Escuchar notas nuevasHear new notesPatternEditorPanel4Escuchar notas nuevas = NoHear new notes = OffPatternEditorPanel4Escuchar notas nuevas = SiHear new notes = OnPatternEditorPanelNo es posible cambiar el tamao del patrn durante la reproduccin.8Is not possible to change the pattern size when playing.PatternEditorPanel6Desfase Negativo y Positivo Lead and LagPatternEditorPanel8Biblioteca de sonido cargadoLoaded SoundlibraryPatternEditorPanel>No se ha seleccionado un patrnNo pattern selectedPatternEditorPanelClave de NotaNoteKeyPatternEditorPanelBalancePanPatternEditorPanel.Editor de patrones - %1Pattern editor - %1PatternEditorPanelbCuantizar eventos de teclado/midi entrantes = Off,Quantize incoming keyboard/midi events = OffPatternEditorPanelZCuantizar eventos teclado/midi entrantes = On+Quantize incoming keyboard/midi events = OnPatternEditorPanel\Cuantizar eventos de teclado/midi a la rejilla%Quantize keyboard/midi events to gridPatternEditorPanelResonancia ResonancePatternEditorPanelBSeleccionar resolucin de rejillaSelect grid resolutionPatternEditorPanel>Seleccionar propiedades de notaSelect note propertiesPatternEditorPanel:Seleccionar tamao del patrnSelect pattern sizePatternEditorPanel&Mostrar drum editorShow drum editorPatternEditorPanel:Mostrar editor del piano rollShow piano roll editorPatternEditorPanelIntensidadVelocityPatternEditorPanelAcercarZoom inPatternEditorPanel AlejarZoom outPatternEditorPanel\Modo destructivo borrar posteriormente ajustes%destructive mode post delete settingsPatternEditorPanelVModo destructivo borrar previamente ajustes$destructive mode pre delete settingsPatternEditorPanelFRellenar con el patrn seleccionadoFill with selected patternPatternFillDialog&Limpiar&ClearPatternFillDialog_UI&Llenar&FillPatternFillDialog_UI Alt+CAlt+CPatternFillDialog_UI Alt+FAlt+FPatternFillDialog_UICancelarCancelPatternFillDialog_UIForma 1Form 1PatternFillDialog_UIDe: From:PatternFillDialog_UIAceptarOKPatternFillDialog_UIA: To:PatternFillDialog_UI%1PatternPropertiesDialog%1#2PatternPropertiesDialog,Propiedades del patrnPattern propertiesPatternPropertiesDialog&Cancelar&CancelPatternPropertiesDialog_UI&Aceptar&OKPatternPropertiesDialog_UI Alt+CAlt+CPatternPropertiesDialog_UI Alt+OAlt+OPatternPropertiesDialog_UI Forma1Form1PatternPropertiesDialog_UI.Nombre del patrn nuevoNew Pattern NamePatternPropertiesDialog_UI&Categora de patrnPattern categoryPatternPropertiesDialog_UI6Desfase Negativo y Positivo Lead and LagPianoRollEditorBalancePanPianoRollEditorIntensidadVelocityPianoRollEditorPanel CP no BC Panel off PlayerControlPanel CP s BC Panel on PlayerControl.Contar PPM y REPRODUCIR Count BPM and start PLAY PlayerControl$Contar y fijar PPM Count and set BPM PlayerControl4Modo Jack-Time-Master = no Jack-Time-Master mode = Off PlayerControl4Modo Jack-Time-Master = S Jack-Time-Master mode = On PlayerControlHPanel del Contador de Pulsaciones sBeatCounter Panel on PlayerControl*Grabacin destructivaDestructive Record PlayerControl*Modo destructivo = NoDestructive mode = Off PlayerControl*Modo destructivo = SDestructive mode = On PlayerControlAdelantar Fast Forward PlayerControl(Rack de instrumentosInstrument rack PlayerControlhJACK-transport operar slo con el controlador JACK./JACK-transport will work only with JACK driver. PlayerControl,Jack-Time-Master s/noJack-Time-Master on/off PlayerControl8Modo de transporte Jack = NoJack-transport mode = Off PlayerControl8Modo de transporte Jack = SiJack-transport mode = On PlayerControl*Transporte Jack si/noJack-transport on/off PlayerControlRepetir cancin Loop song PlayerControl(Repetir cancin = NoLoop song = Off PlayerControl(Repetir cancin = SiLoop song = On PlayerControlMezcladorMixer PlayerControl$Nuevo valor de PPM New BPM value PlayerControlModo de patrn Pattern Mode PlayerControl8Modo de patrn seleccionado.Pattern mode selected. PlayerControl Pausa.Pause. PlayerControl"Reproducir/ Pausa Play/ Pause PlayerControlReproduciendo.Playing. PlayerControlRecalcular samples modificados con Rubberband si cambian las PPM:Recalculate Rubberband modified samples if bpm will change PlayerControldRecalcular todos los samples usando Rubberband OFF,Recalculate all samples using Rubberband OFF PlayerControlbRecalcular todos los samples usando Rubberband ON+Recalculate all samples using Rubberband ON PlayerControl GrabarRecord PlayerControl0Grabar eventos midi = NoRecord midi events = Off PlayerControl0Grabar eventos midi = SRecord midi events = On PlayerControlRegresarRewind PlayerControlDFijar PPM / Fijar PPM y reproducirSet BPM / Set BPM and play PlayerControl0Ver rack de instrumentosShow Instrument Rack PlayerControlVer mezclador Show mixer PlayerControlModo cancin Song Mode PlayerControl4Modo cancin seleccionado.Song mode selected. PlayerControl PararStop PlayerControlParado.Stopped. PlayerControlJ&Aadir script a cancin seleccionada&Add Script to selected songPlaylistDialog&&Crear nuevo Script&Create a new ScriptPlaylistDialog6&Editar Script seleccionado&Edit selected ScriptPlaylistDialog8&Abrir Lista de Reproduccin&Open PlaylistPlaylistDialog,&Lista de Reproduccin &PlaylistPlaylistDialog6&Quitar Script seleccionado&Remove selected ScriptPlaylistDialogj&Quitar cancin seleccionada de Lista de Reproduccin#&Remove selected song from PlaylistPlaylistDialog<&Guardar Lista de Reproduccin&Save PlaylistPlaylistDialog&ScriptsPlaylistDialog\Aadir cancin &actual a Lista de ReproduccinAdd ¤t song to PlaylistPlaylistDialogNAadir Script a la Cancin seleccionadaAdd Script to selected SongPlaylistDialogLAadir cancin a Lista de ReproduccinAdd Song to PlayListPlaylistDialogNAadir cancin a Lista de Repro&duccinAdd song to Play&listPlaylistDialog6Error al cargar la cancin.Error loading song.PlaylistDialogAdelantar Fast ForwardPlaylistDialogZLista de Reproduccin Hydrogen (*.h2playlist) Hydrogen Playlist (*.h2playlist)PlaylistDialogJLista de Reproduccin Hydrogen (*.sh)Hydrogen Playlist (*.sh)PlaylistDialog.Scripts Hydrogen (*.sh)Hydrogen Scripts (*.sh)PlaylistDialog8Cargar Lista de Reproduccin Load PlaylistPlaylistDialogScript Nuevo  New ScriptPlaylistDialogZNo se ha fijado ningn Editor por Defecto. Por favor fije su Editor por Defecto No utilice un Editor basado en una consola Lamentablemente esto no funcionar por el momento.No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment.PlaylistDialog,No hay Script en uso!No Script in use!PlaylistDialog@No se seleccion ningn Script!No Script selected!PlaylistDialogNo hay Script! No Script!PlaylistDialog|No hay Canciones en lista o no se seleccion ninguna Cancin!$No Song in List or no Song selected!PlaylistDialog<Ninguna cancin seleccionada!No Song selected!PlaylistDialog Pausa.Pause.PlaylistDialog^Reproducir/ Pausar/ Cargar cancin seleccionadaPlay/ Pause/ Load selected songPlaylistDialogFPor favor guarde primero la cancinPlease save your song firstPlaylistDialogRegresarRewindPlaylistDialog:Guardar Lista de Reproduccin Save PlaylistPlaylistDialogFGuardar Lista de Reproduccin &comoSave Playlist &asPlaylistDialog ScriptScriptPlaylistDialog&El nombre o la ruta del Script contiene espacios en blanco IMPORTANTE La ruta al script y el nombre del mismo no deben contener espacios en blanco.Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces.PlaylistDialog4Fije el Editor por DefectoSet your Default EditorPlaylistDialog$Lista de canciones Song listPlaylistDialog PararStopPlaylistDialogATENCIN, el nuevo archivo es ejecutable por el dueo de la cancin!=WARNING, the new file is executable by the owner of the file!PlaylistDialogEjecutar Script exec ScriptPlaylistDialog ordenasortPlaylistDialog@Navegador Listas de ReproduccinPlayList BrowserPlaylistDialog_UI$Lista de canciones Song listPlaylistDialog_UI&Cancelar&CancelPreferencesDialog&Aceptar&OkPreferencesDialog6<b>Controlador ALSA</b><br>ALSA Driver
    PreferencesDialogT<b>Seleccin automtica de controlador</b>!Automatic driver selectionPreferencesDialog@<b>Controlador CoreAudio</b><br>CoreAudio Driver
    PreferencesDialog<b>Jack Audio Connection Kit Driver</b><br>Controlador de audio de baja latenciaCJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialog<b>Sistema Open Sound</b><br>Controlador de audio simple [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog@<b>Controlador PortAudio</b><br>PortAudio Driver
    PreferencesDialog`<br><b><font color="red">No compilado</font></b>0
    Not compiledPreferencesDialog RpidoFastPreferencesDialog NormalNormalPreferencesDialogpPor favor reinicie hydrogen para activar/desactivar LASH6Please restart hydrogen to enable/disable LASH supportPreferencesDialogPreferencias PreferencesPreferencesDialog LentoSlowPreferencesDialog###PreferencesDialog_UI&Apariencia &AppearancePreferencesDialog_UI&Cancelar&CancelPreferencesDialog_UI&General&GeneralPreferencesDialog_UISistema &Midi &Midi SystemPreferencesDialog_UI&Aceptar&OKPreferencesDialog_UI<&Recargar cancin ms reciente&Reopen last used songPreferencesDialog_UI11PreferencesDialog_UI1010PreferencesDialog_UI1111PreferencesDialog_UI1212PreferencesDialog_UI1313PreferencesDialog_UI1414PreferencesDialog_UI1515PreferencesDialog_UI1616PreferencesDialog_UI22PreferencesDialog_UI33PreferencesDialog_UI44PreferencesDialog_UI 4410044100PreferencesDialog_UI 4800048000PreferencesDialog_UI55PreferencesDialog_UI66PreferencesDialog_UI77PreferencesDialog_UI8PreferencesDialog_UI 8820088200PreferencesDialog_UI89PreferencesDialog_UI 9600096000PreferencesDialog_UIr<i>Reiniciar la aplicacin para usar la nueva fuente.</i>=After a font change the application must be restarted.PreferencesDialog_UITodoAllPreferencesDialog_UI Alt+CAlt+CPreferencesDialog_UI Alt+DAlt+DPreferencesDialog_UI Alt+OAlt+OPreferencesDialog_UI Alt+RAlt+RPreferencesDialog_UI2Fuente para la aplicacinApplication fontPreferencesDialog_UI"&Sistema de Audio Audio &SystemPreferencesDialog_UI0Detalles salida de audioAudio output detailsPreferencesDialog_UICompensacin del desajuste del contador de pulsaciones en 1/10 ms -Beat counter drift compensation in 1/10 ms PreferencesDialog_UI~Compensacin del arranque del contador de pulsaciones en ms #Beat counter start offset in ms PreferencesDialog_UI"Tamao del buffer Buffer sizePreferencesDialog_UI CanalChannelPreferencesDialog_UIJConectar a par de salida por &defectoConnect to &Default Output PairPreferencesDialog_UI*Dispositivo de sonidoDevicePreferencesDialog_UI RpidoFastPreferencesDialog_UI Forma1Form1PreferencesDialog_UI Ignorar note-offIgnore note-offPreferencesDialog_UIEntradaInputPreferencesDialog_UI2Nmero mximo de compasesMaximum number of barsPreferencesDialog_UI<Velocidad de cada de vmetrosMeters falloff speedPreferencesDialog_UI(Volumen de metrnomoMetronome volumePreferencesDialog_UI Controlador Midi Midi driverPreferencesDialog_UI(Fuente para el mixer Mixer fontPreferencesDialog_UI NormalNormalPreferencesDialog_UIbRuta a la utlidad de lnea de comandos Rubberband+Path to the Rubberband command-line utilityPreferencesDialog_UIPolifona PolyphonyPreferencesDialog_UIPost-Fader Post-FaderPreferencesDialog_UIPre-Fader Pre-FaderPreferencesDialog_UI Reiniciar salidaRestart outputPreferencesDialog_UI Tasa de muestreo Sample ratePreferencesDialog_UI$Seleccionar fuente Select fontPreferencesDialog_UI LentoSlowPreferencesDialog_UI EstiloStylePreferencesDialog_UISalida de pista Track outputPreferencesDialog_UIUtilizar lashUse lashPreferencesDialog_UIFCrear salidas para cada instrumentocreate per-instrument outputsPreferencesDialog_UIprimer paso, ajustar el desajuste de tiempo entre la latencia de disparo del controlador/teclado y las ppm computadas_first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpmPreferencesDialog_UIsegundo paso, ajustar la compensacin entre el ltimo disparo del controlador/teclado y el arranque diferido del secuenciador fsecond step, adjust offset between last controller/keybord trigger and the deferred sequencer startup PreferencesDialog_UI&Cancelar&Cancel SampleEditor&Aceptar&Ok SampleEditorCierre el dilogo! Quiz quede trabajo sobre el sample sin guardar. Est segur@?GClose dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditorQuedan cambios sin guardar. Estos cambios se perdern. Est segur@??Unsaved changes left. This changes will be lost. Are you sure? SampleEditor &Aplicar Cambios&Apply ChangesSampleEditor_UI&Cerrar&CloseSampleEditor_UI&Reproducir&PlaySampleEditor_UI0SampleEditor_UI11SampleEditor_UI1/16SampleEditor_UI1/2SampleEditor_UI1/32SampleEditor_UI1/4SampleEditor_UI1/64SampleEditor_UI1/8SampleEditor_UI1010SampleEditor_UI1111SampleEditor_UI1212SampleEditor_UI1313SampleEditor_UI1414SampleEditor_UI1515SampleEditor_UI1616SampleEditor_UI17SampleEditor_UI18SampleEditor_UI19SampleEditor_UI22SampleEditor_UI20SampleEditor_UI21SampleEditor_UI22SampleEditor_UI23SampleEditor_UI24SampleEditor_UI25SampleEditor_UI26SampleEditor_UI27SampleEditor_UI28SampleEditor_UI29SampleEditor_UI33SampleEditor_UI30SampleEditor_UI31SampleEditor_UI32SampleEditor_UI44SampleEditor_UI55SampleEditor_UI66SampleEditor_UI77SampleEditor_UI8SampleEditor_UI89SampleEditor_UI7

    "Crispness" levels:

    0 equivalent to --no-transients --no-lamination --window-long

    1 equivalent to --no-transients --no-lamination

    2 equivalent to --no-transients

    3 equivalent to --bl-transients

    4 default processing options

    5 equivalent to --no-lamination --window-short (may be good for drums)

    more informations about you can find here:

    http://www.breakfastquay.com/rubberband/

    SampleEditor_UIXAjustar marco de fin de sample & fin de loop"Adjust sample end & loop end frameSampleEditor_UIRAjustar marco de comienzo del sample loopAdjust sample loop begin frameSampleEditor_UIHAjustar marco de comienzo del sampleAdjust sample start frameSampleEditor_UINitidez:  Crispness: SampleEditor_UIDilogoDialogSampleEditor_UI6R&eproducir sample originalP&lay original sampleSampleEditor_UIFAfina el sample en semitonos, cents$Pitch the sample in semitones, centsSampleEditor_UI6Longitud de sample a pulso:Sample length to beat:SampleEditor_UItipo de fundido fade-out typeSampleEditor_UIadelanteforwardSampleEditor_UIloopsSampleEditor_UI2nueva longitud de sample:new sample length:SampleEditor_UIapagadooffSampleEditor_UIpanoramaSampleEditor_UIpingpongSampleEditor_UI atrsreverseSampleEditor_UI*ajustar procesamientoset processingSampleEditor_UIvolumenvolumeSampleEditor_UI.Indice de documentacinDocumentation indexSimpleHTMLBrowser@No mostrar este mensaje de nuevoDon't show this message anymoreSimpleHTMLBrowser ManualManualSimpleHTMLBrowserAceptarOkSimpleHTMLBrowser*Bienvenid@ a HydrogenWelcome to HydrogenSimpleHTMLBrowser&Cancelar&CancelSongEditorPanel&Aceptar&OkSongEditorPanel@Eliminar la secuencia del patrnClear pattern sequenceSongEditorPanel$Crear nuevo patrnCreate new patternSongEditorPanelModo de dibujo Draw modeSongEditorPanelDActivar edicin de lnea de tiempoEnable time line editSongEditorPanelPMover el patrn seleccionado hacia abajoMove the selected pattern downSongEditorPanelRMover el patrn seleccionado hacia arribaMove the selected pattern upSongEditorPanelPatrn %1 Pattern %1SongEditorPanel Seleccionar modo Select modeSongEditorPanel&Editor de canciones Song EditorSongEditorPanelAdvertencia, esto borrar su secuencia de patrones. Est segur@?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanelsin_categorizarnot_categorizedSongEditorPanel"modo patrn nicosingle pattern modeSongEditorPanelmodo apilado stacked modeSongEditorPanel,modo patrones apiladosstacked pattern modeSongEditorPanel500SongEditorPanelBpmWidget_UI500,55SongEditorPanelBpmWidget_UIPPMBPMSongEditorPanelBpmWidget_UI CompsBarSongEditorPanelBpmWidget_UICancelarCancelSongEditorPanelBpmWidget_UI,Borrar marcador de PPMDelete BPM MarkerSongEditorPanelBpmWidget_UI6Borrar este marcador de PPMDelete this BPM MarkerSongEditorPanelBpmWidget_UI>Editar ritmo en lnea de tiempoEdit beat in timelineSongEditorPanelBpmWidget_UIJEditar valor de ppm para ritmo actual#Edit the bpm value for current beatSongEditorPanelBpmWidget_UI FormaFormSongEditorPanelBpmWidget_UIAceptarOkSongEditorPanelBpmWidget_UICancelarCancelSongEditorPanelTagWidget_UI FormaFormSongEditorPanelTagWidget_UIAceptarOkSongEditorPanelTagWidget_UIEtiquetaTagSongEditorPanelTagWidget_UI&Cancelar&CancelSongEditorPatternList&Aceptar&OkSongEditorPatternList CopiarCopySongEditorPatternListEliminarDeleteSongEditorPatternList$Llenar/Limpiar ...Fill/Clear ...SongEditorPatternList:Patrn Hydrogen (*.h2pattern)Hydrogen Pattern (*.h2pattern)SongEditorPatternListCargar Patrn Load PatternSongEditorPatternListAbrir Patrn Open PatternSongEditorPatternListPatrn 1 Pattern 1SongEditorPatternListPropiedades PropertiesSongEditorPatternListGuardar Patrn Save PatternSongEditorPatternListEl archivo de patrn ya existe. Sobreescribir el patrn existente?9The pattern-file exists. Overwrite the existing pattern?SongEditorPatternListPatrn VirtualVirtual PatternSongEditorPatternListsin_categorizarnot_categorizedSongEditorPatternList2Propiedades de la cancinSong propertiesSongPropertiesDialog &Aceptar &OKSongPropertiesDialog_UI&Cancelar&CancelSongPropertiesDialog_UI Alt+CAlt+CSongPropertiesDialog_UIAlt+OSongPropertiesDialog_UI AutorAuthorSongPropertiesDialog_UI Forma1Form1SongPropertiesDialog_UILicenciaLicenseSongPropertiesDialog_UI NotasNotesSongPropertiesDialog_UI(Ttulo de la cancin Song nameSongPropertiesDialog_UI<Exportar Biblioteca de SonidosExport Sound LibrarySoundLibraryExportDialogExaminarBrowseSoundLibraryExportDialog_UIDilogoDialogSoundLibraryExportDialog_UIExportarExportSoundLibraryExportDialog_UIjOcurri un error al importar la Biblioteca de sonido.-An error occurred importing the SoundLibrary.SoundLibraryImportDialogAutor: %1 Author: %1SoundLibraryImportDialogFDescargando Biblioteca de Sonido...Downloading SoundLibrary...SoundLibraryImportDialogDrumkitsDrumkitsSoundLibraryImportDialog Importar drumkitImport drumkitSoundLibraryImportDialog,Instalacin completada InstalledSoundLibraryImportDialogLicencia: %1 License: %1SoundLibraryImportDialog Nueva NewSoundLibraryImportDialogPatronesPatternsSoundLibraryImportDialogCancionesSongsSoundLibraryImportDialogFImportacin de biblioteca de sonidoSound Library importSoundLibraryImportDialog(Biblioteca de sonido Sound librarySoundLibraryImportDialogHBiblioteca de sonido importada en %1SoundLibrary imported in %1SoundLibraryImportDialog EstadoStatusSoundLibraryImportDialogZActualizando lista de biblioteca de sonido...Updating SoundLibrary list...SoundLibraryImportDialog11SoundLibraryImportDialog_UIAutor... Author...SoundLibraryImportDialog_UIExaminar... Browse...SoundLibraryImportDialog_UI CerrarCloseSoundLibraryImportDialog_UIDilogoDialogSoundLibraryImportDialog_UI(Descargar e instalarDownload and installSoundLibraryImportDialog_UI4Editar lista de servidoresEdit server listSoundLibraryImportDialog_UIInstalarInstallSoundLibraryImportDialog_UIInternetInternetSoundLibraryImportDialog_UILicencia... License...SoundLibraryImportDialog_UIArchivo local Local fileSoundLibraryImportDialog_UI<Nombre de biblioteca de sonidoSound Library NameSoundLibraryImportDialog_UI8Info de biblioteca de sonidoSound library InfoSoundLibraryImportDialog_UI Actualizar lista Update listSoundLibraryImportDialog_UI&Cancelar&CancelSoundLibraryPanel&Aceptar&OkSoundLibraryPanelEliminarDeleteSoundLibraryPanel6Error al cargar la cancin.Error loading song.SoundLibraryPanelExportarExportSoundLibraryPanel CargarLoadSoundLibraryPanelPatronesPatternsSoundLibraryPanelPropiedades PropertiesSoundLibraryPanelCancionesSongsSoundLibraryPanel&Drumkits de sistemaSystem drumkitsSoundLibraryPanel&Drumkits de usuario User drumkitsSoundLibraryPanelAtencin, el patrn seleccionado se borrar del disco. Est segur@?FWarning, the selected pattern will be deleted from disk. Are you sure?SoundLibraryPanel AutorAuthorSoundLibraryPropertiesDialog_UICancelarCancelSoundLibraryPropertiesDialog_UIDilogoDialogSoundLibraryPropertiesDialog_UIInfo InformationSoundLibraryPropertiesDialog_UILicenciaLicenseSoundLibraryPropertiesDialog_UI NombreNameSoundLibraryPropertiesDialog_UIGuardarSave SoundLibraryPropertiesDialog_UI|Guardar cambios a los instrumentos en la biblioteca de sonidos3Save changes made to instruments into sound librarySoundLibraryPropertiesDialog_UIBEditar configuracin repositoriosEdit repository settingsSoundLibraryRepositoryDialog4Editar lista de servidoresEdit server listSoundLibraryRepositoryDialogURLURLSoundLibraryRepositoryDialog AadirAddSoundLibraryRepositoryDialog_UIEliminarDeleteSoundLibraryRepositoryDialog_UIDilogoDialogSoundLibraryRepositoryDialog_UI^Por favor proporcione al menos un nombre vlido#Please supply at least a valid nameSoundLibrarySaveDialog8Guardar Biblioteca de sonidoSave Sound LibrarySoundLibrarySaveDialog AutorAuthorSoundLibrarySaveDialog_UICancelarCancelSoundLibrarySaveDialog_UIDilogoDialogSoundLibrarySaveDialog_UIInfo InformationSoundLibrarySaveDialog_UILicenciaLicenseSoundLibrarySaveDialog_UI NombreNameSoundLibrarySaveDialog_UIGuardarSave SoundLibrarySaveDialog_UI(Biblioteca de sonido Sound librarySoundLibraryTree4Seleccionar patrn virtualSelect virtual patternVirtualPatternDialogCancelarCancelVirtualPatternDialog_UIDilogoDialogVirtualPatternDialog_UIAceptarOKVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.es.ts000066400000000000000000006376241211146647700206610ustar00rootroot00000000000000 AboutDialog <b>Project page</b><br> <b>Página del proyecto</b><br> About Acerca de <b>Main coder and mantainer:</b><br> <b>Programador principal y mantenedor:</b><br> <b>Website</b><br> <b>Página web</b><br> <b>Mailing lists</b><br> <b>Listas de correo</b><br> AboutDialog_UI ### About Hydrogen Acerca de Hydrogen A&bout Ace&rca &Authors &Autores &License &Licencia &OK &Aceptar Alt+O Alt+O <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info Información del motor de audio AudioEngineInfoForm_UI Playing notes Polifonía Process time Tiempo de procesamiento Audio engine state Estado del motor de audio Song state Estado de la canción Buffer size Tamaño del buffer Sample rate Tasa de muestreo Form1 Forma1 ### Frames Marcos Ticks Partes Song position Posición de la canción Patterns Patrones Selected pattern Patrón seleccionado Selected instrument Instrumento seleccionado Connected to Conectado a Synth Sintetizador Sampler Sampler Sequencer Secuenciador MIDI input Entrada MIDI Name Nombre Audio output Salida de Audio Realtime frames Marcos en tiempo real AudioFileBrowser Audio File Browser Navegador Archivos Audio Size: %1 bytes Tamaño: %1 bytes Samplerate: %1 Tasa de muestreo: %1 s s Name: Nombre: Size: Tamaño: Samplerate: Tasa de muestreo: Sample length: Longitud del Sample: Please do not preview samples which are longer than 10 minutes! ¡Por favor no previsualice samples de más de 10 minutos! Sample length: Longitud del Sample: AudioFileBrowser_UI Dialog Diálogo Open Abrir Name: Nombre: Samplerate: Tasa de Muestreo: Size: Tamaño: Length: Longitud: Cancel Cancelar Pla&y samples by clicking Reprodu&ce samples haciendo click &Up &Arriba &Home &Inicio &Play Sample &Reproduce Sample &Filename to instrument name &Nombre de archivo a nombre de instrumento &Stop &Detener View hidden folders Ver carpetas ocultas Be careful, this change all Layer velocity settings Atención, esto modificará todos los ajustes de Velocidad de Capas Set automatic velocity Seleccionar velocidad automática Director Director Director_UI Dialog Diálogo DownloadWidget (%1/%2 KiB) - ETA %3 DrumkitManager_UI Drumkit name Nombre del drumkit Delete drumkit Eliminar drumkit Load drumkit Cargar drumkit Load Cargar Author Autor Info Información Save Guardar Browse Examinar Import Importar Drumkit filename Nombre de drumkit Export Exportar Drumkit directory Directorio de drumkits Form1 Forma1 ### Drumkit author Autor drumkit ### Drumkit info Información de drumkit ### The drumkit will be installed zncxbmzbxcmznxbcmz El drumkit se instalará zncxbmzbxcmznxbcmz ### Drumkit name Nombre de drumkit <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b> Descargue más kits de batería en <br> http://www.hydrogen-music.org(new line) </b> ExportSongDialog Export song Exportar canción The file %1 exists. Overwrite the existing file? El archivo %1 ya existe. Sobreescribir el archivo existente? Export to a single track Export to seperate tracks Both ExportSongDialog_UI Export filename Nombre de archivo a exportar Export Whole Song to WAV Exportar Canción Entera a WAV Alt+C Alt+C &Export &Exportar Alt+E Alt+E &Browse... &Examinar... Alt+B Alt+B &Close &Cerrar Samplerate in Hz: Tasa de Muestreo en Hz: 22050 44100 44100 48000 48000 96000 96000 192000 SampleDepth in Bit: Profundidad de Sample en Bit: 8 16 16 24 32 Templates: Plantillas: WAV in CD quality "44,1kHz, 16 bit PCM" WAV en calidad CD "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV en calidad ADAT "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV en mejor calidad "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" WAV mejor calidad Mezcla "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF en calidad CD "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF en calidad ADAT "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" AIFF en mejor calidad "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" FLAC compresor sin pérdida en buena calidad "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" OGG Vorbis comprimido holgadamente en buena calidad "VBR" Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off Efectos si/no Master output Salida Master H2Core::SongEditorPanelBpmWidget BPM PPM H2Core::SongEditorPanelTagWidget Tag Etiqueta H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties Propiedades de la Biblioteca de Sonidos &Ok &Aceptar &Cancel &Cancelar This is not possible, you can only save changes inside instruments to the current loaded sound library Esto no es posible, sólo puede guardar las modificaciones de los instrumentos en la biblioteca de sonidos cargada actualmente Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? ¡Advertencia! Si modifica el nombre del drumkit se creará otro con este nombre ¿Está segur@? Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] Drumkit cargado: [%1] Song Editor Editor de canciones Instrument + Pattern Mixer Mezclador InstrumentEditor Show instrument properties Mostrar propiedades de instrumento Show layers properties Mostrar propiedades de capas Random pitch factor Factor aleatorio de tono Filter Cutoff Filtro de Corte Filter resonance Filtro de resonancia Attack Ataque Decay Decay Sustain Sustain Release Release Layer gain Ganancia de capa New instrument name Nombre de instrumento nuevo Instrument gain Ganancia del instrumento General General Layers Capas Layer pitch (Coarse) Afinación de capa (gruesa) Layer pitch (Fine) Afinación de capa (fina) Stop the current playing instrument-note before trigger the next note sample. Detén la nota del instrumento actual antes de disparar la siguiente nota de sample. Auto-Stop-Note InstrumentLine Clear notes Borrar notas Randomize velocity Intensidad aleatoria Delete instrument Eliminar instrumento Fill notes ... Llena notas ... Fill all notes Llena todas las notas Fill 1/2 notes Llena notas 1/2 Fill 1/3 notes Llena notas 1/3 Fill 1/4 notes Llena notas 1/4 Fill 1/6 notes Llena notas 1/6 Fill 1/8 notes Llena notas 1/8 Mute instrument Solo Solo InstrumentRack Show Instrument editor Ver editor de instrumento Instrument Instrumento Show sound library Ver biblioteca de sonido Sound library Biblioteca de sonido LadspaFXMixerLine Edit FX parameters Editar parámetros efectos FX bypass Bypass Efectos Ladspa FX name Nombre de efecto Ladspa Effect return Retorno de efectos LadspaFXProperties Select FX Seleccionar Efecto [%1] LADSPA FX Properties [%1] Propiedades Efecto LADSPA LADSPA FX %1 Properties Propiedades Efecto LADSPA %1 No plugin Sin plugin Activate Activar Deactivate Desactivar Remove FX LadspaFXSelector Groups Grupos Stereo Estéreo Mono Mono Not supported No soportado Select LADSPA FX Seleccionar Efecto LADSPA Recently Used Utilizado Recientemente Alphabetic List Lista Alfabética Categorized Categorizado LadspaFXSelector_UI Form1 Forma1 ### fx label ### Etiqueta Efecto ### fx type ### Tipo Efecto ### fx ID ### ID Efecto &Cancel &Cancelar Alt+C Alt+C &OK &Aceptar Alt+O Alt+O 1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> ### fx name 1 ### nombre efectos 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> ### FX maker 1 2 ### Creador Efecto 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 ### Copyright 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm &Save &Guardar &Discard &Descartar Cancel Cancelar Error loading song. Error al cargar la canción. Hydrogen Ready. Hydrogen Listo. Hydrogen Song (*.h2song) Canción Hydrogen (*.h2song) Save song Guardar canción Open song Abrir canción Print Objects Imprimir objetos Export MIDI file Exportar archivo MIDI Midi file (*.mid) Archivo Midi (*.mid) &New &Nuevo &Open &Abrir Open &Demo Abrir &Demo Open &recent Abrir &reciente Export &MIDI file Exportar archivo &MIDI &Preferences &Preferencias &Quit &Salir Show &audio engine info Ver info de motor de &audio &User manual Manual de &usuario &About &Acerca de &Cancel &Cancelar Unknown audio driver Controlador de audio desconocido Error starting audio driver Error iniciando controlador de audio Jack driver: server shutdown Controlador Jack: cierre del servidor Jack driver: cannot activate client Controlador Jack: no se puede activar el cliente Jack driver: cannot connect output port Controlador Jack no se puede conectar al puerto de salida Jack driver: error in port register Controlador Jack: error en el registro del puerto &Export song &Exportar canción De&bug De&bug &Project &Proyecto Save &as... Gu&ardar como... &Tools Herramien&tas &Mixer &Mezclador &Instrument Rack Rack de &instrumentos &Info &Info Song saved. Canción guardada. Clear all instruments? ¿Eliminar todos los instrumentos? Ok Aceptar Unknown error %1 Error desconocido %1 You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Está usando una versión de desarrollo de Hydrogen, por favor ayúdenos a informar sobre errores o sugerencias en la lista de correo hydrogen-devel.<br><br>¡Gracias! Could not save song. No se pudo guardar la canción. Open &Pattern Abrir &Patrón Hydrogen Pattern (*.h2pattern) Patrón Hydrogen (*.h2pattern) Save Pattern as ... Guardar Patrón como... Pattern saved. Patrón guardado. Open Pattern Abrir Patrón Don't show this message anymore No mostrar este mensaje de nuevo Playlist: Set song No. %1 Lista de Reproducción: Fijar nº canción %1 Show &info Mostrar &info Expor&t pattern as... Expor&tar patrón como... I&nstruments I&nstrumentos &Add instrument &Añadir Instrumento &Clear all &Limpiar todo &Save library &Guardar biblioteca &Export library &Exportar biblioteca Playlist &editor &Editor lista de reproducción &Import library &Importar biblioteca Info|About Info|Acerca de Song saved as. Canción guardada.como. Playlist: Song No. %1 Lista de Reproducción: Canción Nº. %1 Could not export pattern. No se pudo exportar el patrón. The document contains unsaved changes. Do you want to save the changes? El documento contiene cambios sin guardar. ¿Quiere guardar los cambios? Director Undo history &Undo menu Undo Redo Input mode Instrument Instrumento Drumkit Report bug MasterMixerLine Set master volume [%1] Volumen principal [%1] Swing Swing Humanize time Humanizar tiempo Humanize velocity Humanizar velocidad Set humanize time parameter [%1] Parametro de humanización de tiempo [%1] Set humanize velocity parameter [%1] Parámetro de humanización de intensidad [%1] Set swing factor [%1] Factor de swing [%1] MidiTable Event Evento Param. Parám. Action Acción press button to record midi event Pulse el botón para grabar evento midi Mixer Show FX panel Ver panel de efectos Show instrument peaks Mostrar picos de instrumento Show instrument peaks = On Mostrar picos de instrumento = Sí Show instrument peaks = Off Mostrar picos de instrumento = No Set FX %1 level Nivel Efecto %1 Set LADSPA FX ( %1 ) volume Volumen Efecto LADSPA ( %1 ) MixerLine Play sample Reproducir sample Mute Silencio Solo Solo Pan Balance Instrument name (double click to edit) Nombre del instrumento (doble click para editar) Set instrument volume [%1] Fijar volumen del instrumento [%1] Set instr. pan [%1] Fijar balance instr. [%1] PatternEditorPanel Hear new notes Escuchar notas nuevas Hear new notes = On Escuchar notas nuevas = Si Hear new notes = Off Escuchar notas nuevas = No Pattern editor - %1 Editor de patrones - %1 Quantize keyboard/midi events to grid Cuantizar eventos de teclado/midi a la rejilla Quantize incoming keyboard/midi events = On Cuantizar eventos teclado/midi entrantes = On Quantize incoming keyboard/midi events = Off Cuantizar eventos de teclado/midi entrantes = Off Zoom in Acercar Zoom out Alejar Is not possible to change the pattern size when playing. No es posible cambiar el tamaño del patrón durante la reproducción. Select pattern size Seleccionar tamaño del patrón Select grid resolution Seleccionar resolución de rejilla Select note properties Seleccionar propiedades de nota Velocity Intensidad Pan Balance No pattern selected No se ha seleccionado un patrón Cutoff Filtro de limite Resonance Resonancia Lead and Lag Desfase Negativo y Positivo Loaded Soundlibrary Biblioteca de sonido cargado NoteKey Clave de Nota destructive mode pre delete settings Modo destructivo borrar previamente ajustes destructive mode post delete settings Modo destructivo borrar posteriormente ajustes Show piano roll editor Mostrar editor del piano roll Show drum editor Mostrar drum editor PatternFillDialog Fill with selected pattern Rellenar con el patrón seleccionado PatternFillDialog_UI Form 1 Forma 1 &Fill &Llenar Alt+F Alt+F &Clear &Limpiar Alt+C Alt+C To: A: From: De: Cancel Cancelar OK Aceptar PatternPropertiesDialog Pattern properties Propiedades del patrón %1#2 %1 PatternPropertiesDialog_UI Form1 Forma1 &Cancel &Cancelar Alt+C Alt+C &OK &Aceptar Alt+O Alt+O New Pattern Name Nombre del patrón nuevo Pattern category Categoría de patrón Pattern description PianoRollEditor Velocity Intensidad Pan Balance Lead and Lag Desfase Negativo y Positivo PlayerControl Song Mode Modo canción Playing. Reproduciendo. Stopped. Parado. Song mode selected. Modo canción seleccionado. Stop Parar Pattern Mode Modo de patrón Pattern mode selected. Modo de patrón seleccionado. Jack-transport on/off Transporte Jack si/no Jack-transport mode = On Modo de transporte Jack = Si Jack-transport mode = Off Modo de transporte Jack = No New BPM value Nuevo valor de PPM Rewind Regresar Play/ Pause Reproducir/ Pausa Fast Forward Adelantar Pause. Pausa. JACK-transport will work only with JACK driver. JACK-transport operará sólo con el controlador JACK. Loop song Repetir canción Loop song = On Repetir canción = Si Loop song = Off Repetir canción = No Show mixer Ver mezclador Mixer Mezclador Show Instrument Rack Ver rack de instrumentos Instrument rack Rack de instrumentos BeatCounter Panel on Panel del Contador de Pulsaciones sí Set BPM / Set BPM and play Fijar PPM / Fijar PPM y reproducir Jack-Time-Master on/off Jack-Time-Master sí/no BC Panel on Panel CP sí BC Panel off Panel CP no Count BPM and start PLAY Contar PPM y REPRODUCIR Count and set BPM Contar y fijar PPM Jack-Time-Master mode = On Modo Jack-Time-Master = Sí Jack-Time-Master mode = Off Modo Jack-Time-Master = no Record Grabar Destructive Record Grabación destructiva Record midi events = On Grabar eventos midi = Sí Record midi events = Off Grabar eventos midi = No Destructive mode = Off Modo destructivo = No Destructive mode = On Modo destructivo = Sí Recalculate Rubberband modified samples if bpm will change Recalcular samples modificados con Rubberband si cambian las PPM Recalculate all samples using Rubberband ON Recalcular todos los samples usando Rubberband ON Recalculate all samples using Rubberband OFF Recalcular todos los samples usando Rubberband OFF Switch metronome on/off PlaylistDialog Song list Lista de canciones Script Script exec Script Ejecutar Script Add Song to PlayList Añadir canción a Lista de Reproducción No Song selected! ¡Ninguna canción seleccionada! Load Playlist Cargar Lista de Reproducción Hydrogen Playlist (*.h2playlist) Lista de Reproducción Hydrogen (*.h2playlist) Save Playlist Guardar Lista de Reproducción No Song in List or no Song selected! ¡No hay Canciones en lista o no se seleccionó ninguna Canción! Hydrogen Playlist (*.sh) Lista de Reproducción Hydrogen (*.sh) Add Script to selected Song Añadir Script a la Canción seleccionada No Script in use! ¡No hay Script en uso! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. No se ha fijado ningún Editor por Defecto. Por favor fije su Editor por Defecto No utilice un Editor basado en una consola Lamentablemente esto no funcionará por el momento. Set your Default Editor Fije el Editor por Defecto No Script selected! ¡No se seleccionó ningún Script! Error loading song. Error al cargar la canción. sort ordena Hydrogen Scripts (*.sh) Scripts Hydrogen (*.sh) New Script Script Nuevo Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. El nombre o la ruta del Script contiene espacios en blanco IMPORTANTE La ruta al script y el nombre del mismo no deben contener espacios en blanco. No Script! ¡No hay Script! &Playlist &Lista de Reproducción Add song to Play&list Añadir canción a Lista de Repro&ducción Add &current song to Playlist Añadir canción &actual a Lista de Reproducción &Remove selected song from Playlist &Quitar canción seleccionada de Lista de Reproducción &Open Playlist &Abrir Lista de Reproducción &Save Playlist &Guardar Lista de Reproducción Save Playlist &as Guardar Lista de Reproducción &como &Scripts &Add Script to selected song &Añadir script a canción seleccionada &Edit selected Script &Editar Script seleccionado &Remove selected Script &Quitar Script seleccionado &Create a new Script &Crear nuevo Script Rewind Regresar Play/ Pause/ Load selected song Reproducir/ Pausar/ Cargar canción seleccionada Stop Parar Fast Forward Adelantar Please save your song first Por favor guarde primero la canción WARNING, the new file is executable by the owner of the file! ¡ATENCIÓN, el nuevo archivo es ejecutable por el dueño de la canción! Pause. Pausa. Playlist Browser No song selected! Playlist: set song no. %1 no Script &New Playlist PlaylistDialog_UI PlayList Browser Navegador Listas de Reproducción Song list Lista de canciones PreferencesDialog Slow Lento Normal Normal Fast Rápido <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Sistema Open Sound</b><br>Controlador de audio simple [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">No compilado</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Jack Audio Connection Kit Driver</b><br>Controlador de audio de baja latencia Preferences Preferencias <b>ALSA Driver</b><br> <b>Controlador ALSA</b><br> <b>Automatic driver selection</b> <b>Selección automática de controlador</b> <b>PortAudio Driver</b><br> <b>Controlador PortAudio</b><br> <b>CoreAudio Driver</b><br> <b>Controlador CoreAudio</b><br> Please restart hydrogen to enable/disable LASH support Por favor reinicie hydrogen para activar/desactivar LASH Driver restart required. Restart driver? &Ok &Aceptar &Cancel &Cancelar PreferencesDialog_UI Buffer size Tamaño del buffer Device Dispositivo de sonido Input Entrada Channel Canal All Todo Meters falloff speed Velocidad de caída de vúmetros Slow Lento Normal Normal Fast Rápido Application font Fuente para la aplicación Mixer font Fuente para el mixer Select font Seleccionar fuente <i>After a font change the application must be restarted.</i> <i>Reiniciar la aplicación para usar la nueva fuente.</i> Sample rate Tasa de muestreo 44100 44100 48000 48000 ### 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 9 8 10 10 11 11 12 12 13 13 14 14 15 15 16 16 Form1 Forma1 Polyphony Polifonía Style Estilo &Cancel &Cancelar Alt+C Alt+C &OK &Aceptar Alt+O Alt+O &General &General Alt+R Alt+R Audio &System &Sistema de Audio Metronome volume Volumen de metrónomo Connect to &Default Output Pair Conectar a par de salida por &defecto Alt+D Alt+D 88200 88200 96000 96000 &Midi System Sistema &Midi Midi driver Controlador Midi Ignore note-off Ignorar note-off &Appearance &Apariencia &Reopen last used song &Recargar canción más reciente Restart output Reiniciar salida Audio output details Detalles salida de audio Post-Fader Post-Fader Pre-Fader Pre-Fader Track output Salida de pista Use lash Utilizar lash first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm primer paso, ajustar el desajuste de tiempo entre la latencia de disparo del controlador/teclado y las ppm computadas Beat counter drift compensation in 1/10 ms Compensación del desajuste del contador de pulsaciones en 1/10 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup segundo paso, ajustar la compensación entre el último disparo del controlador/teclado y el arranque diferido del secuenciador Beat counter start offset in ms Compensación del arranque del contador de pulsaciones en ms create per-instrument outputs Crear salidas para cada instrumento Path to the Rubberband command-line utility Ruta a la utlidad de línea de comandos Rubberband Maximum number of bars Número máximo de compases &Reopen last used playlist Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? Quedan cambios sin guardar. Estos cambios se perderán. ¿Está segur@? &Ok &Aceptar &Cancel &Cancelar Close dialog! maybe there is some unsaved work on sample. Are you sure? ¡Cierre el diálogo! Quizá quede trabajo sobre el sample sin guardar. ¿Está segur@? SampleEditor_UI Dialog Diálogo P&lay original sample R&eproducir sample original &Apply Changes &Aplicar Cambios &Close &Cerrar Adjust sample start frame Ajustar marco de comienzo del sample Adjust sample loop begin frame Ajustar marco de comienzo del sample loop set processing ajustar procesamiento forward adelante reverse atrás pingpong loops Adjust sample end & loop end frame Ajustar marco de fin de sample & fin de loop &Play &Reproducir new sample length: nueva longitud de sample: fade-out type tipo de fundido volume volumen panorama Sample length to beat: Longitud de sample a pulso: off apagado 1/64 1/32 1/16 1/8 1/4 1/2 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 9 8 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Pitch the sample in semitones, cents Afina el sample en semitonos, cents Crispness: Nitidez: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 Start Loop <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. Pitch (Semitone,Cent) SimpleHTMLBrowser Manual Manual Welcome to Hydrogen Bienvenid@ a Hydrogen Don't show this message anymore No mostrar este mensaje de nuevo Ok Aceptar Documentation index Indice de documentación SongEditorPanel Create new pattern Crear nuevo patrón Move the selected pattern down Mover el patrón seleccionado hacia abajo Move the selected pattern up Mover el patrón seleccionado hacia arriba Clear pattern sequence Eliminar la secuencia del patrón Song Editor Editor de canciones Select mode Seleccionar modo Draw mode Modo de dibujo Warning, this will erase your pattern sequence. Are you sure? Advertencia, esto borrará su secuencia de patrones. ¿Está segur@? &Ok &Aceptar &Cancel &Cancelar stacked mode modo apilado stacked pattern mode modo patrones apilados single pattern mode modo patrón único not_categorized sin_categorizar Enable time line edit Activar edición de línea de tiempo Pattern %1 Patrón %1 SongEditorPanelBpmWidget_UI Form Forma Edit the bpm value for current beat Editar valor de ppm para ritmo actual 500,55 Edit beat in timeline Editar ritmo en línea de tiempo 500 Bar Compás BPM PPM Delete this BPM Marker Borrar este marcador de PPM Delete BPM Marker Borrar marcador de PPM Cancel Cancelar Ok Aceptar SongEditorPanelTagWidget_UI Form Forma Tag Etiqueta Cancel Cancelar Ok Aceptar SongEditorPatternList Copy Copiar Delete Eliminar Properties Propiedades Fill/Clear ... Llenar/Limpiar ... Save Pattern Guardar Patrón Load Pattern Cargar Patrón Open Pattern Abrir Patrón Hydrogen Pattern (*.h2pattern) Patrón Hydrogen (*.h2pattern) Virtual Pattern Patrón Virtual Pattern 1 Patrón 1 not_categorized sin_categorizar The pattern-file exists. Overwrite the existing pattern? El archivo de patrón ya existe. ¿Sobreescribir el patrón existente? &Ok &Aceptar &Cancel &Cancelar Export Pattern SongPropertiesDialog Song properties Propiedades de la canción SongPropertiesDialog_UI Notes Notas Author Autor Song name Título de la canción Form1 Forma1 &Cancel &Cancelar Alt+C Alt+C &OK &Aceptar Alt+O License Licencia SoundLibraryExportDialog Export Sound Library Exportar Biblioteca de Sonidos Directory SoundLibraryExportDialog_UI Dialog Diálogo Browse Examinar Export Exportar SoundLibraryImportDialog Sound Library import Importación de biblioteca de sonido Sound library Biblioteca de sonido Status Estado Updating SoundLibrary list... Actualizando lista de biblioteca de sonido... Installed Instalación completada New Nueva Author: %1 Autor: %1 Downloading SoundLibrary... Descargando Biblioteca de Sonido... SoundLibrary imported in %1 Biblioteca de sonido importada en %1 An error occurred importing the SoundLibrary. Ocurrió un error al importar la Biblioteca de sonido. Import drumkit Importar drumkit Drumkits Drumkits Songs Canciones Patterns Patrones License: %1 Licencia: %1 SoundLibraryImportDialog_UI Dialog Diálogo Internet Internet Update list Actualizar lista Sound Library Name Nombre de biblioteca de sonido Sound library Info Info de biblioteca de sonido Author... Autor... Download and install Descargar e instalar Local file Archivo local Browse... Examinar... Install Instalar 1 1 License... Licencia... Edit server list Editar lista de servidores Close Cerrar SoundLibraryPanel Load Cargar Export Exportar Delete Eliminar System drumkits Drumkits de sistema User drumkits Drumkits de usuario &Ok &Aceptar &Cancel &Cancelar Songs Canciones Patterns Patrones Error loading song. Error al cargar la canción. Properties Propiedades Warning, the selected pattern will be deleted from disk. Are you sure? Atención, el patrón seleccionado se borrará del disco. ¿Está segur@? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Diálogo Name Nombre Author Autor Information Info License Licencia Save Guardar Cancel Cancelar Save changes made to instruments into sound library Guardar cambios a los instrumentos en la biblioteca de sonidos SoundLibraryRepositoryDialog Edit repository settings Editar configuración repositorios Edit server list Editar lista de servidores URL URL SoundLibraryRepositoryDialog_UI Dialog Diálogo Add Añadir Delete Eliminar SoundLibrarySaveDialog Save Sound Library Guardar Biblioteca de sonido Please supply at least a valid name Por favor proporcione al menos un nombre válido Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Diálogo Name Nombre Author Autor Information Info Cancel Cancelar License Licencia Save Guardar SoundLibraryTree Sound library Biblioteca de sonido VirtualPatternDialog Select virtual pattern Seleccionar patrón virtual VirtualPatternDialog_UI Dialog Diálogo OK Aceptar Cancel Cancelar hydrogen-0.9.6-beta3/data/i18n/hydrogen.fr.qm000066400000000000000000002452371211146647700206430ustar00rootroot00000000000000BbB yȤȤ֍?֍5t45t(6`FO?H5bH5,^H52Lfgg/9|/``# F\ Q~\svDe*,=*5+l+fm+r+nM+n+`{/Zi/x5SW7t07t07M 70!70W;0?<0<0ϣwrt#sb}46<rrr~U믎J*Մj_ y1$@&k} {'@+A{. . JQ^xbdM>eȹspUe(y4|[F"Nq ~|Jj*+6r6{m#=x>8f3o!O%_p?>q^o.`HD,2K%wk))+JDO)LS0mDmDu \^/$u'yn[vilyl_779>XQB(9#<?AC5ITX[R36bP(l,x=qA%z^+/bbb*b16I33YU"ŕIIoIIII+.I1vI3nne0WAAEɷq*,R,'",/wHϕեWWWYWW"W+vW/W1W4ٯ"NSvUvv'k֏10؃ ޱea:o/9o K7Dels?.mv fW~(2o5I8[| @fS)kJf~4V|ǵV|W^[R36ad(eNhh~h~#jk2mB-pr`>v zA^|Vd<oRDaDut`d ȿA'g7k$YȻ ;AIeo-\yu({$P)R "c* >)  a''DzU*t[R37R_p?g4k}e ~>#35l>#;U&"r'\R#=֣Y֣(=>[! G⪁s)eJ"N49(rNo En¶ bH!o#P I4w4=.V^`~Ma.f)$h3Us=EcA_}V n|\X9>|o¯~=o&<5Hݿp$빆p-Bڛ(o3d 3d#@{G.lBVQ,[R37$z:3% ! lch>333(I N?j¸3j3<ۨ\ty\ S;" $T4 ){} +s'M 3b3 @e Cn" S%] Xf aOn h>+ h>1 w-Xܾ w  rA ] ~ ~ _ V1?  0 4? = $= 3 ~ T C a V  #~a +Z$&O 2 %C TY> gn kJD x@# z+ j ~ ?9 ?u x /  C- D ;$ s'k 'z = ={ 5 "U 3UNt"?r$Rs=mG[38i^jb0 je mz mePw> |s}<k&#XdlBKEǗ.bG  :e 0P"zL."0=Щ+jHL"_aN!Rb st` L%4l+eXtkޔkl$0w/di4><b>Listes de discussion</b><br>Mailing lists
     AboutDialog`<b>Programmeur et responsable principal:</b><br>$Main coder and mantainer:
     AboutDialog2<b>Page du projet</b><br>Project page
     AboutDialog&<b>Site Web</b><br>Website
     AboutDialog proposAbout AboutDialog######AboutDialog_UI&Auteurs&AuthorsAboutDialog_UI&Licence&LicenseAboutDialog_UI&OK&OKAboutDialog_UI &proposA&boutAboutDialog_UI& propos d'HydrogenAbout HydrogenAboutDialog_UI Alt+OAlt+OAboutDialog_UI:Informations du systme audioAudio Engine InfoAudioEngineInfoForm######AudioEngineInfoForm_UI*tat du systme audioAudio engine stateAudioEngineInfoForm_UISortie audio Audio outputAudioEngineInfoForm_UI Taille du tampon Buffer sizeAudioEngineInfoForm_UIConnect  Connected toAudioEngineInfoForm_UI Form1Form1AudioEngineInfoForm_UI TramesFramesAudioEngineInfoForm_UIEntre MIDI MIDI inputAudioEngineInfoForm_UINomNameAudioEngineInfoForm_UI MotifsPatternsAudioEngineInfoForm_UIEn lecture Playing notesAudioEngineInfoForm_UI&Temps de traitement Process timeAudioEngineInfoForm_UI(Trames en temps relRealtime framesAudioEngineInfoForm_UI*Taux d'chantillonage Sample rateAudioEngineInfoForm_UIchantillonneurSamplerAudioEngineInfoForm_UI,Instrument slectionnSelected instrumentAudioEngineInfoForm_UIMotif choisiSelected patternAudioEngineInfoForm_UISquenceur SequencerAudioEngineInfoForm_UI0Position dans le morceau Song positionAudioEngineInfoForm_UItat du morceau Song stateAudioEngineInfoForm_UISynthtiseurSynthAudioEngineInfoForm_UI ClicsTicksAudioEngineInfoForm_UI s sAudioFileBrowser8Navigateur de fichiers audioAudio File BrowserAudioFileBrowserNom:Name:AudioFileBrowserMerci de ne pas faire des previews sur des chantillons de plus de 10 minutes!?Please do not preview samples which are longer than 10 minutes!AudioFileBrowser Dure:Sample length:AudioFileBrowser Dure:Sample length: AudioFileBrowser,Taux d'chantillonage: Samplerate:AudioFileBrowser Frquence: %1 HzSamplerate: %1AudioFileBrowserTaille:Size:AudioFileBrowser Taille: %1 bytesSize: %1 bytesAudioFileBrowserL&Nom de fichier comme nom d'instrument&Filename to instrument nameAudioFileBrowser_UI &Home&HomeAudioFileBrowser_UI(&Jouer l'chantillon &Play SampleAudioFileBrowser_UI&Arrter&StopAudioFileBrowser_UI Ha&ut&UpAudioFileBrowser_UISoyez prudent, ceci change tous les paramtres de vlocit des couches4Be careful, this change all Layer velocity settings AudioFileBrowser_UIAnnulerCancelAudioFileBrowser_UIDialogueDialogAudioFileBrowser_UI Dure:Length:AudioFileBrowser_UINom:Name:AudioFileBrowser_UI OuvrirOpenAudioFileBrowser_UINJouer les chantillons en cliquant (&Y)Pla&y samples by clickingAudioFileBrowser_UIFrquence: Samplerate:AudioFileBrowser_UI0Rglage de vlocit autoSet automatic velocityAudioFileBrowser_UITaille:Size:AudioFileBrowser_UI6Voir les rpertoires cachsView hidden foldersAudioFileBrowser_UIDirecteurDirectorDirectorDialogueDialog Director_UI((%1/%2 Kio) - EHA %3(%1/%2 KiB) - ETA %3DownloadWidget"### Auteur du kit### Drumkit authorDrumkitManager_UI### Info du kit### Drumkit infoDrumkitManager_UI### Nom du kit### Drumkit nameDrumkitManager_UIb### Le kit sera install comme zncxbmzbxcmznxbcmz4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b>Tlcharger plus de kits de batterie sur le site <br>http://www.hydrogen-music.org</b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UI AuteurAuthorDrumkitManager_UIExplorer...BrowseDrumkitManager_UIEffacer le kitDelete drumkitDrumkitManager_UI"Rpertoire du kitDrumkit directoryDrumkitManager_UI*Nom de fichier du kitDrumkit filenameDrumkitManager_UINom du kit Drumkit nameDrumkitManager_UIExporterExportDrumkitManager_UI Form1Form1DrumkitManager_UIImporterImportDrumkitManager_UIInfoInfoDrumkitManager_UIChargerLoadDrumkitManager_UI.Charger kit de batterie Load drumkitDrumkitManager_UIEnregistrerSaveDrumkitManager_UIMode combinBothExportSongDialog&Exporter le morceau Export songExportSongDialog"Mode piste uniqueExport to a single trackExportSongDialog Mode multipistesExport to seperate tracksExportSongDialogrLe fichier %1 existe dj. craser le fichier existant ?1The file %1 exists. Overwrite the existing file?ExportSongDialogE&xplorer... &Browse...ExportSongDialog_UI&Fermer&CloseExportSongDialog_UI&Exporter&ExportExportSongDialog_UI1616ExportSongDialog_UI 192000192000ExportSongDialog_UI 2205022050ExportSongDialog_UI2424ExportSongDialog_UI3232ExportSongDialog_UI 4410044100ExportSongDialog_UI 4800048000ExportSongDialog_UI88ExportSongDialog_UI 9600096000ExportSongDialog_UIRAIFF en qualit ADAT "48 kHz, 16 bit PCM")AIFF in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UINAIFF en qualit CD "41 kHz, 16 bit PCM"'AIFF in CD quality "41 kHz, 16 bit PCM"ExportSongDialog_UI\AIFF en meilleure qualit "48 kHz, 24 bit PCM"+AIFF in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI Alt+BAlt+BExportSongDialog_UI Alt+CAlt+CExportSongDialog_UI Alt+EAlt+EExportSongDialog_UIPExporter tout le morceau en fichier .wavExport Whole Song to WAVExportSongDialog_UI(Exporter avec le nomExport filenameExportSongDialog_UIdFLAC sans perte compress en bonne qualit "48kHz"1FLAC lossless compressor in good quality "48 kHz"ExportSongDialog_UIlOGG Vorbis avec perte compress en bonne qualit "VBR"3OGG Vorbis loosely compressed in good quality "VBR"ExportSongDialog_UIRsolution:SampleDepth in Bit:ExportSongDialog_UIFrquence:Samplerate in Hz:ExportSongDialog_UIFormat: Templates: ExportSongDialog_UI<WAV LOFI "22.05kHz, 8 bit PCM WAV LOFI "22.05kHz, 8 bit PCM ExportSongDialog_UIbWAV meilleure qualit MixDown "96kHz, 32 bit PCM"-WAV best Mixdown quality "96 kHz, 32 bit PCM"ExportSongDialog_UIPWAV en qualit ADAT "48 kHz, 16 bit PCM"(WAV in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UIPWAV en qualit CD "44,1kHz, 16 bit PCM"(WAV in CD quality "44,1kHz, 16 bit PCM"ExportSongDialog_UIZWAV en meilleure qualit "48 kHz, 24 bit PCM"*WAV in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI*%1<br>%2 KHz<br>%3 %4%1
    %2 KHz
    %3 %4 FileBrowserEffet on/off FX on/off FxMixerLine0Niveau gnral de sortie Master output FxMixerLineBPMBPM H2Core::SongEditorPanelBpmWidgetTagTag H2Core::SongEditorPanelTagWidget&Annuler&Cancel$H2Core::SoundLibraryPropertiesDialog&OK&Ok$H2Core::SoundLibraryPropertiesDialogJProprits de la bibliothque de sonsSoundLibrary Properties$H2Core::SoundLibraryPropertiesDialog Cette action est impossible, vous pouvez enregistrer les changements des instruments seulement dans la bibliothque de sons en cours.fThis is not possible, you can only save changes inside instruments to the current loaded sound library$H2Core::SoundLibraryPropertiesDialogAttention! Le changement du nom d'un kit de batterie crera un nouveau kit de batterie avec ce nom. Voulez-vous confirmer?fWarning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure?$H2Core::SoundLibraryPropertiesDialog.Chargement du kit: [%1]Drumkit loaded: [%1] HydrogenApp MixageMixer HydrogenApp$diteur de morceau Song Editor HydrogenAppAttaqueAttackInstrumentEditorDcroissanceDecayInstrumentEditor"Filtre de coupure Filter CutoffInstrumentEditor&Filtre de rsonanceFilter resonanceInstrumentEditorGnralGeneralInstrumentEditor(Gain de l'instrumentInstrument gainInstrumentEditor"Gain de la couche Layer gainInstrumentEditor6Hauteur de la couche (brut)Layer pitch (Coarse)InstrumentEditor0Haute de la couche (fin)Layer pitch (Fine)InstrumentEditorCouchesLayersInstrumentEditor0Nom du nouvel instrumentNew instrument nameInstrumentEditor"Hauteur alatoireRandom pitch factorInstrumentEditorRelchementReleaseInstrumentEditorNAfficher les proprits des instrumentsShow instrument propertiesInstrumentEditorFAfficher les proprits des couchesShow layers propertiesInstrumentEditorArrter la note actuelle avant de dclencher l'chantillon suivant.MStop the current playing instrument-note before trigger the next note sample.InstrumentEditorSoutienSustainInstrumentEditor"Effacer les notes Clear notesInstrumentLine(Effacer l'instrumentDelete instrumentInstrumentLine,Remplir une note sur 2Fill 1/2 notesInstrumentLine,Remplir une note sur 3Fill 1/3 notesInstrumentLine,Remplir une note sur 4Fill 1/4 notesInstrumentLine,Remplir une note sur 6Fill 1/6 notesInstrumentLine,Remplir une note sur 8Fill 1/8 notesInstrumentLine0Remplir toutes les notesFill all notesInstrumentLine(Remplir de notes ...Fill notes ...InstrumentLine$Vlocit alatoireRandomize velocityInstrumentLineSoloSoloInstrumentLineInstrument InstrumentInstrumentRack@Afficher l'diteur d'instrumentsShow Instrument editorInstrumentRack@Afficher la bibliothque de sonsShow sound libraryInstrumentRackBibliothque Sound libraryInstrumentRack:diter les paramtres d'effetEdit FX parametersLadspaFXMixerLine"Retour de l'effet Effect returnLadspaFXMixerLine*Drivation de l'effet FX bypassLadspaFXMixerLine*Nom de l'effet LADSPALadspa FX nameLadspaFXMixerLineActiverActivateLadspaFXPropertiesDsactiver DeactivateLadspaFXProperties>Proprits de l'effet LADSPA %1LADSPA FX %1 PropertiesLadspaFXPropertiesPas de greffon No pluginLadspaFXPropertiesRetirer l'effet Remove FXLadspaFXPropertiesChoisir l'effet Select FXLadspaFXPropertiesB[%1] Proprits de l'effet LADSPA[%1] LADSPA FX PropertiesLadspaFXProperties6Liste en ordre alphabtiqueAlphabetic ListLadspaFXSelectorPar catgorie CategorizedLadspaFXSelectorGroupesGroupsLadspaFXSelectorMonoMonoLadspaFXSelectorNon support Not supportedLadspaFXSelector"Utilis rcemment Recently UsedLadspaFXSelector.Choisir un effet LADSPASelect LADSPA FXLadspaFXSelector StroStereoLadspaFXSelector6### Crateur de l'effet 1 2### FX maker 1 2LadspaFXSelector_UI&### copyright 1 2 3### copyright 1 2 3LadspaFXSelector_UI"### ID de l'effet ### fx IDLadspaFXSelector_UI0### tiquette de l'effet ### fx labelLadspaFXSelector_UI(### nom de l'effet 1 ### fx name 1LadspaFXSelector_UI ### type d'effet ### fx typeLadspaFXSelector_UI&Annuler&CancelLadspaFXSelector_UI&OK&OKLadspaFXSelector_UI11LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html>

    Copyright:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html>

    ID:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">tiquette:</span></p></body></html>

    Label:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Auteur:</span></p></body></html>

    Maker:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Nom:</span></p></body></html>

    Name:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html>

    Type:

    LadspaFXSelector_UI Alt+CAlt+CLadspaFXSelector_UI Alt+OAlt+OLadspaFXSelector_UI Form1Form1LadspaFXSelector_UI&Dc. = %1 MIDI = %2Dec. = %1 MIDI = %2 LayerPreviewInfo| proposMainForm Le document contient des changements non sauvegards. Voulez-vous sauvegarder les changements? I The document contains unsaved changes. Do you want to save the changes? MainForm &propos&AboutMainForm,&Ajouter un instrument&Add instrumentMainForm&Annuler&CancelMainFormEffacer &tout &Clear allMainForm&Dtruire&DiscardMainForm:&Exporter une bibliothque...&Export libraryMainFormL&Exporter le morceau en fichier WAV... &Export songMainForm:&Importer une bibliothque...&Import libraryMainForm&Information&InfoMainForm&Instruments&Instrument RackMainForm&&Table de mixage...&MixerMainForm&Nouveau&NewMainForm&Ouvrir...&OpenMainForm&Prfrences... &PreferencesMainForm&Projet&ProjectMainForm&Quitter&QuitMainFormEnregi&strer&SaveMainForm>Enregi&strer la bibliothque... &Save libraryMainForm&Outils&ToolsMainForm&Manuel &Utilisateur &User manualMainFormAnnulerCancelMainForm:Effacer tous les instruments?Clear all instruments?MainForm<Ne peut pas exporter le motif.Could not export pattern.MainFormHImpossible d'enregistrer le morceau.Could not save song.MainFormMode de&bugDe&bugMainForm&DirecteurDirectorMainForm6Ne plus afficher ce messageDon't show this message anymoreMainForm@Erreur au chargement du morceau.Error loading song.MainFormFErreur au lancement du pilote audioError starting audio driverMainForm4Expor&ter le motif sous...Expor&t pattern as...MainFormNExporter le morceau en fichier M&IDI...Export &MIDI fileMainForm0Exporter le fichier MIDIExport MIDI fileMainForm8Motif Hydrogen (*.h2pattern)Hydrogen Pattern (*.h2pattern)MainForm$Hydrogen est pret.Hydrogen Ready.MainForm6Morceau Hydrogen (*.h2song)Hydrogen Song (*.h2song)MainFormI&nstruments I&nstrumentsMainFormInstrument InstrumentMainFormXPilote jack : impossible d'activer le client#Jack driver: cannot activate clientMainFormnPilote jack : impossible de connecter le port de sortie'Jack driver: cannot connect output portMainFormbPilote jack : impossible d'authentifier le client#Jack driver: error in port registerMainFormDPilote Jack : fermeture du serveurJack driver: server shutdownMainForm(Fichier MIDI (*.mid)Midi file (*.mid)MainFormOKOkMainFormOuvrir un &demo Open &DemoMainForm&Ouvrir un &motif... Open &PatternMainForm8Ouvrir un fichier r&cent... Open &recentMainFormOuvrir un motif Open PatternMainForm"Ouvrir un morceau Open songMainForm"Motif enregistr.Pattern saved.MainFormD&Navigateur de liste de lecture...Playlist &editorMainFormPListe de lecture: utiliser le morceau %1Playlist: Set song No. %1MainForm8Liste de lecture: morceau %1Playlist: Song No. %1MainForm&Imprimer les objets Print ObjectsMainForm(En&registrer sous... Save &as...MainForm:Enre&gistrer le motif sous...Save Pattern as ...MainForm,Enregistrer le morceau Save songMainFormTMontrer les informations du systme &audioShow &audio engine infoMainForm&Proprits... Show &infoMainForm6Enregistr le morceau sous.Song saved as.MainForm&Morceau enregistr. Song saved.MainForm(Pilote audio inconnuUnknown audio driverMainForm$Erreur inconnue %1Unknown error %1MainFormVous utiliser une version d'Hydrogen en dveloppement.<br> Merci de nous aider en envoyant des suggestions ou des problmes sur la <a href="http://lists.sourceforge.net/mailman/listinfo/hydrogen-devel">liste de discussion d'Hydrogen</a>.<br><br>Merci!You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!MainFormTemps humanis Humanize timeMasterMixerLine$Vlocit humaniseHumanize velocityMasterMixerLineXRgler les paramtres de temps humanis [%1] Set humanize time parameter [%1]MasterMixerLine`Rgler les paramtres de vlocit humanise [%1]$Set humanize velocity parameter [%1]MasterMixerLine>Rgler le volume principal [%1]Set master volume [%1]MasterMixerLine>Rgler le facteur de swing [%1]Set swing factor [%1]MasterMixerLine SwingSwingMasterMixerLine ActionAction MidiTablevnementsEvent MidiTable Param.Param. MidiTabletAppuyer sur le bouton pour enregistrer les vnements midi!press button to record midi event MidiTable<Rgler le niveau de l'effet %1Set FX %1 level MixerNRgler le volume de l'effet LADSPA (%1)Set LADSPA FX ( %1 ) volumeMixer$Montrer les effets Show FX panelMixer&Montrer les niveauxShow instrument peaksMixer<Afficher les niveaux = InactifShow instrument peaks = OffMixer8Afficher les niveaux = ActifShow instrument peaks = OnMixer`Nom de l'instrument (double cliquer pour diter)&Instrument name (double click to edit) MixerLineMuetMute MixerLinePanPan MixerLine"Jouer chantillon Play sample MixerLinePRgler l'effet pan. de l'instrument [%1]Set instr. pan [%1] MixerLineJRgler le volume de l'instrument [%1]Set instrument volume [%1] MixerLineSoloSolo MixerLineCoupureCutoffPatternEditorPanel6Entendre les notes ajoutesHear new notesPatternEditorPanelJEntendre les notes ajoutes = InactifHear new notes = OffPatternEditorPanelFEntendre les notes ajoutes = ActifHear new notes = OnPatternEditorPanelIl n'est pas possible de changer la taille d'un motif durant sa lecture.8Is not possible to change the pattern size when playing.PatternEditorPanelTrainee Lead and LagPatternEditorPanel(Bibliothque chargeLoaded SoundlibraryPatternEditorPanel.Aucun motif slectionnNo pattern selectedPatternEditorPanelNumro de noteNoteKeyPatternEditorPanelPanPanPatternEditorPanel*diteur de motif - %1Pattern editor - %1PatternEditorPanelvQuantifier les vnements entrant du clavier/midi = Inactif,Quantize incoming keyboard/midi events = OffPatternEditorPanellQuantifier les venements clavier/MIDI entrant = Actif+Quantize incoming keyboard/midi events = OnPatternEditorPanelhQuantifier les venements clavier/MIDI sur la grille%Quantize keyboard/midi events to gridPatternEditorPanelRsonance ResonancePatternEditorPanelNSlectionner la rsolution de la grilleSelect grid resolutionPatternEditorPanelLSlectionner les proprits de la noteSelect note propertiesPatternEditorPanelBSlectionner la grandeur du motifSelect pattern sizePatternEditorPanel<Afficher l'diteur de batterieShow drum editorPatternEditorPanel:Afficher l'diteur piano-rollShow piano roll editorPatternEditorPanelVelociteVelocityPatternEditorPanelAgrandirZoom inPatternEditorPanelRduireZoom outPatternEditorPanelBRemplir avec le motif slectionnFill with selected patternPatternFillDialogEffa&cer&ClearPatternFillDialog_UIRemplir (&F)&FillPatternFillDialog_UI Alt+CAlt+CPatternFillDialog_UI Alt+FAlt+FPatternFillDialog_UIAnnulerCancelPatternFillDialog_UI Form 1Form 1PatternFillDialog_UIDe:From:PatternFillDialog_UIOKOKPatternFillDialog_UI:To:PatternFillDialog_UI%1%1PatternPropertiesDialog%1#2%1#2PatternPropertiesDialog&Proprits du motifPattern propertiesPatternPropertiesDialogAnnuler (&C)&CancelPatternPropertiesDialog_UI&OK&OKPatternPropertiesDialog_UI Alt+CAlt+CPatternPropertiesDialog_UI Alt+OAlt+OPatternPropertiesDialog_UI Form1Form1PatternPropertiesDialog_UI(Nom du nouveau motifNew Pattern NamePatternPropertiesDialog_UI$Catgorie du motifPattern categoryPatternPropertiesDialog_UITrainee Lead and LagPianoRollEditorPanPanPianoRollEditorVelociteVelocityPianoRollEditor@ Panneau du compteur BPM inactif BC Panel off PlayerControl< Panneau du compteur BPM actif BC Panel on PlayerControl2 Compter les BPM et jouer Count BPM and start PLAY PlayerControl4 Compter et rgler les BPM Count and set BPM PlayerControl@ Mode Jack-Time-Master = Inactif Jack-Time-Master mode = Off PlayerControl< Mode Jack-Time-Master = Actif Jack-Time-Master mode = On PlayerControl<Panneau du compteur BPM activBeatCounter Panel on PlayerControl2Enregistrement destructifDestructive Record PlayerControl*Mode destructif = OffDestructive mode = Off PlayerControl(Mode destructif = OnDestructive mode = On PlayerControlAvancer Fast Forward PlayerControlInstrumentsInstrument rack PlayerControlvLe transport JACK fonctionne seulement avec le pilote JACK./JACK-transport will work only with JACK driver. PlayerControl<Jack-Time-Master actif/inactifJack-Time-Master on/off PlayerControl0Transport Jack = InactifJack-transport mode = Off PlayerControl,Transport Jack = ActifJack-transport mode = On PlayerControl*Transport Jack on/offJack-transport on/off PlayerControl"Morceau en boucle Loop song PlayerControl6Morceau en boucle = InactifLoop song = Off PlayerControl2Morceau en boucle = ActifLoop song = On PlayerControl MixageMixer PlayerControl,Nouvelle valeur du BPM New BPM value PlayerControlMode motif Pattern Mode PlayerControl.Mode motif slectionn.Pattern mode selected. PlayerControl Pause.Pause. PlayerControlJouer/ Pause Play/ Pause PlayerControl"Lecture en cours.Playing. PlayerControl~Recalcule l'chantillon modifi par Rubberband si le bpm change:Recalculate Rubberband modified samples if bpm will change PlayerControl|Recalcule tous les chantillons qui n'utilisent pas Rubberband,Recalculate all samples using Rubberband OFF PlayerControlpRecalcule tous les chantillons qui utilisent Rubberband+Recalculate all samples using Rubberband ON PlayerControlEnregistrerRecord PlayerControlJEnregistrer les vnements midi = OffRecord midi events = Off PlayerControlHEnregistrer les vnements midi = OnRecord midi events = On PlayerControlReculerRewind PlayerControlLRgler le BPM / Rgler le BPM et jouerSet BPM / Set BPM and play PlayerControl0Afficher les instrumentsShow Instrument Rack PlayerControl4Montrer la table de mixage Show mixer PlayerControlMode morceau Song Mode PlayerControl2Mode morceau slectionn.Song mode selected. PlayerControlArrterStop PlayerControlArrt.Stopped. PlayerControlR&Ajouter un script au morceau slectionn&Add Script to selected songPlaylistDialog0&Crer un nouveau script&Create a new ScriptPlaylistDialog:dit&er le script slectionn&Edit selected ScriptPlaylistDialog8&Ouvrir une liste de lecture&Open PlaylistPlaylistDialog"&Liste de lecture &PlaylistPlaylistDialog<&Retirer le script slectionn&Remove selected ScriptPlaylistDialog>&Retirer le morceau slectionn#&Remove selected song from PlaylistPlaylistDialogEnregi&strer&Save PlaylistPlaylistDialog&Scripts&ScriptsPlaylistDialog<Ajouter &ce morceau la listeAdd ¤t song to PlaylistPlaylistDialogPAjouter un script au morceau slectionnAdd Script to selected SongPlaylistDialog:Ajouter un morceau la listeAdd Song to PlayListPlaylistDialog>&Ajouter un morceau la &listeAdd song to Play&listPlaylistDialog@Erreur au chargement du morceau.Error loading song.PlaylistDialogAvancer Fast ForwardPlaylistDialogPListe de lecture Hydrogen (*.h2playlist) Hydrogen Playlist (*.h2playlist)PlaylistDialog@Liste de lecture Hydrogen (*.sh)Hydrogen Playlist (*.sh)PlaylistDialog.Scripts Hydrogen (*.sh)Hydrogen Scripts (*.sh)PlaylistDialog Charger la liste Load PlaylistPlaylistDialogNouveau script New ScriptPlaylistDialog~Aucun diteur par dfaut de rgler. Veuillez rgler l'diteur par dfaut. N'utiliser pas un diteur en mode console. Dsol, mais un diteur en mode console ne fonctionnera pas prsentement.No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment.PlaylistDialog*Aucun script utilis!No Script in use!PlaylistDialog8Aucun script de slectionn!No Script selected!PlaylistDialogAucun script! No Script!PlaylistDialogxAucun morceau dans la liste ou aucun morceau de slectionn!$No Song in List or no Song selected!PlaylistDialog@Aucun morceau n'est slectionn!No Song selected!PlaylistDialog6Auncun morceau slectionn!No song selected!PlaylistDialog Pause.Pause.PlaylistDialogbLecture/ Pause/ Chargement du morceau slectionnPlay/ Pause/ Load selected songPlaylistDialog<Navigateur de liste de lecturePlaylist BrowserPlaylistDialog<Liste: choisir le morceau #%1 Playlist: set song no. %1PlaylistDialogTMerci de sauvegarder votre morceau d'abordPlease save your song firstPlaylistDialogReculerRewindPlaylistDialog(Enregistrer la liste Save PlaylistPlaylistDialog(Enregistrer so&us...Save Playlist &asPlaylistDialog ScriptScriptPlaylistDialog"Le nom ou le chemin du script contient des espaces. IMPORTANT Le chemin d'accs au script et le nom du script ne doivent pas contenir d'espaces.Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces.PlaylistDialog>Rgler votre diteur par dfautSet your Default EditorPlaylistDialog Liste de morceau Song listPlaylistDialogArrterStopPlaylistDialogATTENTION, le nouveau fichier est excutable par le propritaire du fichier!=WARNING, the new file is executable by the owner of the file!PlaylistDialog$Excuter le script exec ScriptPlaylistDialogAucun script no ScriptPlaylistDialog TriersortPlaylistDialog<Navigateur de liste de lecturePlayList BrowserPlaylistDialog_UI"Liste de morceaux Song listPlaylistDialog_UIAnnuler (&C)&CancelPreferencesDialog&OK&OkPreferencesDialog,<b>Pilote ALSA</b><br>ALSA Driver
    PreferencesDialogX<b>Slection automatique du pilote audio</b>!Automatic driver selectionPreferencesDialog6<b>Pilote CoreAudio</b><br>CoreAudio Driver
    PreferencesDialog<b>Pilote Jack Audio Connection Kit</b><br>Pilote audio faible latenceCJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialogt<b>Open Sound System</b><br>Pilote audio simple [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog6<b>Pilote PortAudio</b><br>PortAudio Driver
    PreferencesDialog^<br><b><font color="red">Non compil</font></b>0
    Not compiledPreferencesDialogpRedmarrage de pilote ncessaire. Redmarrer le pilote?)Driver restart required. Restart driver?PreferencesDialog RapideFastPreferencesDialog NormalNormalPreferencesDialogVeuillez relancer Hydrogen pour activer/dsactiver le support LASH6Please restart hydrogen to enable/disable LASH supportPreferencesDialogPrfrences PreferencesPreferencesDialogLentSlowPreferencesDialog######PreferencesDialog_UI&Apparence &AppearancePreferencesDialog_UIAnnuler (&C)&CancelPreferencesDialog_UI&Gnral&GeneralPreferencesDialog_UISystme MIDI &Midi SystemPreferencesDialog_UI&OK&OKPreferencesDialog_UI`&R-ouvrir la dernire Liste de Lecture utilise&Reopen last used playlistPreferencesDialog_UI|Ouvrir le dernier mo&rceau chaque dmarrage de l'application&Reopen last used songPreferencesDialog_UI11PreferencesDialog_UI1010PreferencesDialog_UI1111PreferencesDialog_UI1212PreferencesDialog_UI1313PreferencesDialog_UI1414PreferencesDialog_UI1515PreferencesDialog_UI1616PreferencesDialog_UI22PreferencesDialog_UI33PreferencesDialog_UI44PreferencesDialog_UI 4410044100PreferencesDialog_UI 4800048000PreferencesDialog_UI55PreferencesDialog_UI66PreferencesDialog_UI77PreferencesDialog_UI88PreferencesDialog_UI 8820088200PreferencesDialog_UI99PreferencesDialog_UI 9600096000PreferencesDialog_UI<i>Aprs un changement de police, l'application doit tre relance.</i>=After a font change the application must be restarted.PreferencesDialog_UITousAllPreferencesDialog_UI Alt+CAlt+CPreferencesDialog_UI Alt+DAlt+DPreferencesDialog_UI Alt+OAlt+OPreferencesDialog_UI Alt+RAlt+RPreferencesDialog_UI.Police de l'applicationApplication fontPreferencesDialog_UI&Systme Audio Audio &SystemPreferencesDialog_UI4Dtails de la sortie audioAudio output detailsPreferencesDialog_UI~Compensation en 1/10ms de la drive du compteur de battement -Beat counter drift compensation in 1/10 ms PreferencesDialog_UINDbut en ms du compteur de battement #Beat counter start offset in ms PreferencesDialog_UI Taille du tampon Buffer sizePreferencesDialog_UI CanalChannelPreferencesDialog_UITConnecter la paire de sortie par &dfautConnect to &Default Output PairPreferencesDialog_UI$Priphrique audioDevicePreferencesDialog_UI RapideFastPreferencesDialog_UI Form1Form1PreferencesDialog_UI0Ignorer les fins de noteIgnore note-offPreferencesDialog_UI EntreInputPreferencesDialog_UI0Nombre de barres maximumMaximum number of barsPreferencesDialog_UI8Vitesse de chute des niveauxMeters falloff speedPreferencesDialog_UI&Volume du mtronomeMetronome volumePreferencesDialog_UIPilote MIDI Midi driverPreferencesDialog_UI8Police de la table de mixage Mixer fontPreferencesDialog_UI NormalNormalPreferencesDialog_UIpChemin vers l'utilitaire en ligne de commande Rubberband+Path to the Rubberband command-line utilityPreferencesDialog_UIPolyphonie PolyphonyPreferencesDialog_UI Post-quilibreur Post-FaderPreferencesDialog_UIPr-quilibreur Pre-FaderPreferencesDialog_UI(Redmarrer la sortieRestart outputPreferencesDialog_UI*Taux d'chantillonage Sample ratePreferencesDialog_UI"Choisir la police Select fontPreferencesDialog_UILentSlowPreferencesDialog_UI StyleStylePreferencesDialog_UIPiste de sortie Track outputPreferencesDialog_UIhUtiliser LASH (systme de gestion session Jack/ALSA)Use lashPreferencesDialog_UI^Crer des sorties (jack) pour chaque instrumentcreate per-instrument outputsPreferencesDialog_UIpremire tape: synchroniser la latence du dclencheur du contrleur/clavier et le BPM calcul._first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpmPreferencesDialog_UIdeuxime tape: ajuster les diffrences entre le dclencheur du contrleur/clavier et la dpart diffr du squenceur fsecond step, adjust offset between last controller/keybord trigger and the deferred sequencer startup PreferencesDialog_UI&Annuler&Cancel SampleEditor&OK&Ok SampleEditorFermeture de la boite de dialogue! Peut tre y a-t'il du travail non sauvegard sur l'chantillon. tes-vous sr ?GClose dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditorIl reste des modifications non sauvegardes. Ces modifications seront perdues. tes-vous sr ??Unsaved changes left. This changes will be lost. Are you sure? SampleEditor8Hauteur (Demi-ton, Pourcent) Pitch (Semitone,Cent)SampleEditor_UI"Processeur audio Rubberband" : Modifie le tempo et la hauteur de l'chantillon.S"Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio.SampleEditor_UI8&Appliquer les modifications&Apply ChangesSampleEditor_UI&Fermer&CloseSampleEditor_UIJouer (&P)&PlaySampleEditor_UI00SampleEditor_UI11SampleEditor_UI1/161/16SampleEditor_UI1/21/2SampleEditor_UI1/321/32SampleEditor_UI1/41/4SampleEditor_UI1/641/64SampleEditor_UI1/81/8SampleEditor_UI1010SampleEditor_UI1111SampleEditor_UI1212SampleEditor_UI1313SampleEditor_UI1414SampleEditor_UI1515SampleEditor_UI1616SampleEditor_UI1717SampleEditor_UI1818SampleEditor_UI1919SampleEditor_UI22SampleEditor_UI2020SampleEditor_UI2121SampleEditor_UI2222SampleEditor_UI2323SampleEditor_UI2424SampleEditor_UI2525SampleEditor_UI2626SampleEditor_UI2727SampleEditor_UI2828SampleEditor_UI2929SampleEditor_UI33SampleEditor_UI3030SampleEditor_UI3131SampleEditor_UI3232SampleEditor_UI44SampleEditor_UI55SampleEditor_UI66SampleEditor_UI77SampleEditor_UI88SampleEditor_UI99SampleEditor_UI <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;">Niveaux de "croustillance" : </p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 0 quivaut --no-transients --no-lamination --window-long</p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 1 quivalent --no-transients --no-lamination</p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 2 quivalent --no-transients</p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 3, quivalent --bl-transients</p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 4 options de traitement par dfaut </p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 5 quivalent --no-lamination --window-short (peut-tre bon pour la batterie) </p> <p style="-qt-paragraph-type:empty;margin: 0px;-qt-block-indent:0;text-indent:0px;"></p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;">Vous pouvez trouver plus d'informations ici (en anglais seulement): </p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/"><span style="text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/</span></a></p></body></html>7

    "Crispness" levels:

    0 equivalent to --no-transients --no-lamination --window-long

    1 equivalent to --no-transients --no-lamination

    2 equivalent to --no-transients

    3 equivalent to --bl-transients

    4 default processing options

    5 equivalent to --no-lamination --window-short (may be good for drums)

    more informations about you can find here:

    http://www.breakfastquay.com/rubberband/

    SampleEditor_UITAjuster le point d'arriv de l'chantillon"Adjust sample end & loop end frameSampleEditor_UI\Ajuster le dbut de la boucle de l'chantillonAdjust sample loop begin frameSampleEditor_UIVAjuster le point de dpart de l'chantillonAdjust sample start frameSampleEditor_UIDialogueDialogSampleEditor_UIFinEndSampleEditor_UI BoucleLoopSampleEditor_UID&Lecture de l'chantillon originalP&lay original sampleSampleEditor_UI DpartStartSampleEditor_UI2type fondu la fermeture fade-out typeSampleEditor_UIfaire suivreforwardSampleEditor_UIbouclesloopsSampleEditor_UIFnouvelle longueur de l'chantillon:new sample length:SampleEditor_UIoffoffSampleEditor_UIpanoramiquepanoramaSampleEditor_UIpingpongpingpongSampleEditor_UIrenversementreverseSampleEditor_UI volumevolumeSampleEditor_UI2Index de la documentationDocumentation indexSimpleHTMLBrowser6Ne plus afficher ce messageDon't show this message anymoreSimpleHTMLBrowser ManuelManualSimpleHTMLBrowserOKOkSimpleHTMLBrowser(Bienvenue HydrogenWelcome to HydrogenSimpleHTMLBrowserAnnuler (&C)&CancelSongEditorPanel&OK&OkSongEditorPanel:Effacer la squence de motifsClear pattern sequenceSongEditorPanel,Crer un nouveau motifCreate new patternSongEditorPanelMode dessin Draw modeSongEditorPanel>Active l'dition de la TimeLineEnable time line editSongEditorPanel<Descendre le motif slectionnMove the selected pattern downSongEditorPanel6Monter le motif slectionnMove the selected pattern upSongEditorPanelMotif %1 Pattern %1SongEditorPanelMode slection Select modeSongEditorPanel$diteur de morceau Song EditorSongEditorPanelAttention, cette action effacera la squence de motifs. Voulez-vous continuer?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanelSans catgorienot_categorizedSongEditorPanelMode un motifsingle pattern modeSongEditorPanelMode en pile stacked modeSongEditorPanel*Mode en pile de motifstacked pattern modeSongEditorPanel500500SongEditorPanelBpmWidget_UI 500,55500,55SongEditorPanelBpmWidget_UIBPMBPMSongEditorPanelBpmWidget_UI BarreBarSongEditorPanelBpmWidget_UIAnnulerCancelSongEditorPanelBpmWidget_UI2Effacer les marqueurs BPMDelete BPM MarkerSongEditorPanelBpmWidget_UI.Effacer ce marqueur BPMDelete this BPM MarkerSongEditorPanelBpmWidget_UIBditer la mesure dans la TimeLineEdit beat in timelineSongEditorPanelBpmWidget_UI^diter la valeur du bpm pour la mesure actuelle#Edit the bpm value for current beatSongEditorPanelBpmWidget_UI FormeFormSongEditorPanelBpmWidget_UIOKOkSongEditorPanelBpmWidget_UIAnnulerCancelSongEditorPanelTagWidget_UI FormeFormSongEditorPanelTagWidget_UIOKOkSongEditorPanelTagWidget_UITagTagSongEditorPanelTagWidget_UI&Annuler&CancelSongEditorPatternList&OK&OkSongEditorPatternList CopierCopySongEditorPatternListEffacerDeleteSongEditorPatternList&Remplir/Effacer ...Fill/Clear ...SongEditorPatternList8Motif Hydrogen (*.h2pattern)Hydrogen Pattern (*.h2pattern)SongEditorPatternList Charger un motif Load PatternSongEditorPatternListOuvrir un motif Open PatternSongEditorPatternListMotif 1 Pattern 1SongEditorPatternListProprits PropertiesSongEditorPatternList(Enregistrer un motif Save PatternSongEditorPatternListnLe fichier de motif existe. craser le motif existant ?9The pattern-file exists. Overwrite the existing pattern?SongEditorPatternListMotif virtuelVirtual PatternSongEditorPatternListSans catgorienot_categorizedSongEditorPatternList*Proprits du morceauSong propertiesSongPropertiesDialog &OK &OKSongPropertiesDialog_UI&Annuler&CancelSongPropertiesDialog_UI Alt+CAlt+CSongPropertiesDialog_UI Alt+OAlt+OSongPropertiesDialog_UI AuteurAuthorSongPropertiesDialog_UI Form1Form1SongPropertiesDialog_UILicenceLicenseSongPropertiesDialog_UI NotesNotesSongPropertiesDialog_UINom du morceau Song nameSongPropertiesDialog_UI>Exporter la bibliothque de sonExport Sound LibrarySoundLibraryExportDialogExplorerBrowseSoundLibraryExportDialog_UIDialogueDialogSoundLibraryExportDialog_UIExporterExportSoundLibraryExportDialog_UIUne erreur s'est produite lors de l'importation de la bibliothque de sons.-An error occurred importing the SoundLibrary.SoundLibraryImportDialogAuteur: %1 Author: %1SoundLibraryImportDialogXTlchargement de la bibliothque de sons...Downloading SoundLibrary...SoundLibraryImportDialog Kits de batterieDrumkitsSoundLibraryImportDialog6Importer un kit de batterieImport drumkitSoundLibraryImportDialogInstall InstalledSoundLibraryImportDialogLicence: %1 License: %1SoundLibraryImportDialogNouveauNewSoundLibraryImportDialog MotifsPatternsSoundLibraryImportDialogMorceauxSongsSoundLibraryImportDialogLImportation de la bibliothque de sonsSound Library importSoundLibraryImportDialog(Bibliothque de sons Sound librarySoundLibraryImportDialogRLa bibliothque de sons est imports %1SoundLibrary imported in %1SoundLibraryImportDialog StatutStatusSoundLibraryImportDialogfMise jour de la liste de la bibliothque de sons.Updating SoundLibrary list...SoundLibraryImportDialog11SoundLibraryImportDialog_UIAuteur... Author...SoundLibraryImportDialog_UIExplorer... Browse...SoundLibraryImportDialog_UI FermerCloseSoundLibraryImportDialog_UIDialogueDialogSoundLibraryImportDialog_UI0Tlcharger et installerDownload and installSoundLibraryImportDialog_UI8diter la liste des serveursEdit server listSoundLibraryImportDialog_UIInstallerInstallSoundLibraryImportDialog_UIInternetInternetSoundLibraryImportDialog_UILicence... License...SoundLibraryImportDialog_UIFichier local Local fileSoundLibraryImportDialog_UI<Nom de la bibliothque de sonsSound Library NameSoundLibraryImportDialog_UILInformation de la bibliothque de sonsSound library InfoSoundLibraryImportDialog_UI,Mettre jour la liste Update listSoundLibraryImportDialog_UI&Annuler&CancelSoundLibraryPanel&OK&OkSoundLibraryPanelEffacerDeleteSoundLibraryPanel@Erreur au chargement du morceau.Error loading song.SoundLibraryPanelExporterExportSoundLibraryPanelChargerLoadSoundLibraryPanel MotifsPatternsSoundLibraryPanelProprit PropertiesSoundLibraryPanelMorceauxSongsSoundLibraryPanel6Kits de batterie du systmeSystem drumkitsSoundLibraryPanelBKits de batterie de l'utilisateur User drumkitsSoundLibraryPanelAttention, le motif slectionn sera effac du disque. Voulez-vous continuer?FWarning, the selected pattern will be deleted from disk. Are you sure?SoundLibraryPanel AuteurAuthorSoundLibraryPropertiesDialog_UIAnnulerCancelSoundLibraryPropertiesDialog_UIDialogueDialogSoundLibraryPropertiesDialog_UIInformation InformationSoundLibraryPropertiesDialog_UILicenceLicenseSoundLibraryPropertiesDialog_UINomNameSoundLibraryPropertiesDialog_UIEnregistrer Save SoundLibraryPropertiesDialog_UIEnregistrer les changements appliqus aux instruments dans la bibliothque de sons3Save changes made to instruments into sound librarySoundLibraryPropertiesDialog_UI>diter les prfrences du dptEdit repository settingsSoundLibraryRepositoryDialog8diter la liste des serveursEdit server listSoundLibraryRepositoryDialogURLURLSoundLibraryRepositoryDialogAjouterAddSoundLibraryRepositoryDialog_UIEffacerDeleteSoundLibraryRepositoryDialog_UIDialogueDialogSoundLibraryRepositoryDialog_UI\S'il vous plat, mettez au moins un nom valide#Please supply at least a valid nameSoundLibrarySaveDialogFEnregistrer la bibliothque de sonsSave Sound LibrarySoundLibrarySaveDialog AuteurAuthorSoundLibrarySaveDialog_UIAnnulerCancelSoundLibrarySaveDialog_UIDialogueDialogSoundLibrarySaveDialog_UIInformation InformationSoundLibrarySaveDialog_UILicenceLicenseSoundLibrarySaveDialog_UINomNameSoundLibrarySaveDialog_UIEnregistrerSave SoundLibrarySaveDialog_UIBibliothque Sound librarySoundLibraryTree:Slectionner un motif virtuelSelect virtual patternVirtualPatternDialogAnnulerCancelVirtualPatternDialog_UIDialogueDialogVirtualPatternDialog_UIOKOKVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.fr.ts000066400000000000000000006562571211146647700206640ustar00rootroot00000000000000 AboutDialog <b>Project page</b><br> <b>Page du projet</b><br> About À propos <b>Website</b><br> <b>Site Web</b><br> <b>Mailing lists</b><br> <b>Listes de discussion</b><br> <b>Main coder and mantainer:</b><br> <b>Programmeur et responsable principal:</b><br> AboutDialog_UI About Hydrogen À propos d'Hydrogen &OK &OK Alt+O Alt+O A&bout À &propos ### ### &Authors &Auteurs &License &Licence <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info Informations du système audio AudioEngineInfoForm_UI Playing notes En lecture Process time Temps de traitement Audio engine state État du système audio Song state État du morceau Ticks Clics Buffer size Taille du tampon Sample rate Taux d'échantillonage Song position Position dans le morceau Patterns Motifs Selected pattern Motif choisi Selected instrument Instrument sélectionné Form1 Form1 ### ### Connected to Connecté à Frames Trames Sampler Échantillonneur Synth Synthétiseur Sequencer Séquenceur MIDI input Entrée MIDI Name Nom Audio output Sortie audio Realtime frames Trames en temps réel AudioFileBrowser Audio File Browser Navigateur de fichiers audio Size: %1 bytes Taille: %1 bytes Samplerate: %1 Fréquence: %1 Hz s s Name: Nom: Size: Taille: Samplerate: Taux d'échantillonage: Sample length: Durée: Please do not preview samples which are longer than 10 minutes! Merci de ne pas faire des previews sur des échantillons de plus de 10 minutes! Sample length: Durée: AudioFileBrowser_UI Dialog Dialogue Name: Nom: Samplerate: Fréquence: Size: Taille: Length: Durée: Pla&y samples by clicking Jouer les échantillons en cliquant (&Y) &Up Ha&ut &Home &Home &Play Sample &Jouer l'échantillon &Filename to instrument name &Nom de fichier comme nom d'instrument Open Ouvrir Cancel Annuler &Stop &Arrêter View hidden folders Voir les répertoires cachés Be careful, this change all Layer velocity settings Soyez prudent, ceci change tous les paramètres de vélocité des couches Set automatic velocity Réglage de vélocité auto Director Director Directeur Director_UI Dialog Dialogue DownloadWidget (%1/%2 KiB) - ETA %3 (%1/%2 Kio) - EHA %3 DrumkitManager_UI Load Charger Load drumkit Charger kit de batterie ### Drumkit author ### Auteur du kit ### Drumkit name ### Nom du kit ### Drumkit info ### Info du kit Delete drumkit Effacer le kit Save Enregistrer Author Auteur Info Info Drumkit name Nom du kit Import Importer Drumkit filename Nom de fichier du kit Browse Explorer... ### The drumkit will be installed zncxbmzbxcmznxbcmz ### Le kit sera installé comme zncxbmzbxcmznxbcmz Export Exporter Drumkit directory Répertoire du kit Form1 Form1 <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b>Télécharger plus de kits de batterie sur le site <br>http://www.hydrogen-music.org</b> ExportSongDialog Export song Exporter le morceau The file %1 exists. Overwrite the existing file? Le fichier %1 existe déjà. Écraser le fichier existant ? Export to a single track Mode piste unique Export to seperate tracks Mode multipistes Both Mode combiné ExportSongDialog_UI Export filename Exporter avec le nom &Export &Exporter Export Whole Song to WAV Exporter tout le morceau en fichier .wav &Close &Fermer Alt+C Alt+C Alt+E Alt+E &Browse... E&xplorer... Alt+B Alt+B Samplerate in Hz: L'ancienne étiquette "Taux d'échantillonnage en Hz:" était beaucoup trop longue Fréquence: 22050 22050 44100 44100 48000 48000 96000 96000 192000 192000 SampleDepth in Bit: L'ancienne étiquette "Profondeur d'échantillonnage en Bit:" était beaucoup trop longue Résolution: 8 8 16 16 24 24 32 32 Templates: Format: WAV in CD quality "44,1kHz, 16 bit PCM" WAV en qualité CD "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV en qualité ADAT "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV en meilleure qualité "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV LOFI "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" WAV meilleure qualité MixDown "96kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF en qualité CD "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF en qualité ADAT "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" AIFF en meilleure qualité "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" FLAC sans perte compressé en bonne qualité "48kHz" OGG Vorbis loosely compressed in good quality "VBR" OGG Vorbis avec perte compressé en bonne qualité "VBR" Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off Effet on/off Master output Niveau général de sortie H2Core::SongEditorPanelBpmWidget BPM BPM H2Core::SongEditorPanelTagWidget Tag Tag H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties Propriétés de la bibliothèque de sons &Ok &OK &Cancel &Annuler This is not possible, you can only save changes inside instruments to the current loaded sound library Cette action est impossible, vous pouvez enregistrer les changements des instruments seulement dans la bibliothèque de sons en cours. Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Attention! Le changement du nom d'un kit de batterie créera un nouveau kit de batterie avec ce nom. Voulez-vous confirmer? Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] Chargement du kit: [%1] Song Editor Éditeur de morceau Instrument + Pattern Mixer Mixage InstrumentEditor Random pitch factor Hauteur aléatoire Filter Cutoff Filtre de coupure Filter resonance Filtre de résonance Attack Attaque Decay Décroissance Sustain Soutien Release Relâchement Instrument gain Gain de l'instrument Layer gain Gain de la couche Layer pitch (Coarse) Hauteur de la couche (brut) Layer pitch (Fine) Haute de la couche (fin) Show instrument properties Afficher les propriétés des instruments Show layers properties Afficher les propriétés des couches New instrument name Nom du nouvel instrument General Général Layers Couches Stop the current playing instrument-note before trigger the next note sample. Arrêter la note actuelle avant de déclencher l'échantillon suivant. Auto-Stop-Note InstrumentLine Clear notes Effacer les notes Randomize velocity Vélocité aléatoire Delete instrument Effacer l'instrument Fill notes ... Remplir de notes ... Fill all notes Remplir toutes les notes Fill 1/2 notes Remplir une note sur 2 Fill 1/3 notes Remplir une note sur 3 Fill 1/4 notes Remplir une note sur 4 Fill 1/6 notes Remplir une note sur 6 Fill 1/8 notes Remplir une note sur 8 Mute instrument Solo Solo InstrumentRack Show Instrument editor Afficher l'éditeur d'instruments Instrument Instrument Show sound library Afficher la bibliothèque de sons Sound library Bibliothèque LadspaFXMixerLine Edit FX parameters Éditer les paramètres d'effet FX bypass Dérivation de l'effet Ladspa FX name Nom de l'effet LADSPA Effect return Retour de l'effet LadspaFXProperties Select FX Choisir l'effet [%1] LADSPA FX Properties [%1] Propriétés de l'effet LADSPA LADSPA FX %1 Properties Propriétés de l'effet LADSPA %1 No plugin Pas de greffon Activate Activer Deactivate Désactiver Remove FX Retirer l'effet LadspaFXSelector Groups Groupes Stereo Stéréo Mono Mono Not supported Non supporté Select LADSPA FX Choisir un effet LADSPA Recently Used Utilisé récemment Alphabetic List Liste en ordre alphabétique Categorized Par catégorie LadspaFXSelector_UI Form1 Form1 ### fx label ### étiquette de l'effet ### fx type ### type d'effet ### fx ID ### ID de l'effet &Cancel &Annuler Alt+C Alt+C &OK &OK Alt+O Alt+O 1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Nom:</span></p></body></html> ### fx name 1 ### nom de l'effet 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Étiquette:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Auteur:</span></p></body></html> ### FX maker 1 2 ### Créateur de l'effet 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 ### copyright 1 2 3 LayerPreview Dec. = %1 MIDI = %2 Déc. = %1 MIDI = %2 MainForm Error loading song. Erreur au chargement du morceau. Hydrogen Ready. Hydrogen est pret. &Save Enregi&strer &Discard &Détruire Cancel Annuler Hydrogen Song (*.h2song) Morceau Hydrogen (*.h2song) Save song Enregistrer le morceau Open song Ouvrir un morceau Export MIDI file Exporter le fichier MIDI Midi file (*.mid) Fichier MIDI (*.mid) &New &Nouveau &Open &Ouvrir... Open &Demo Ouvrir un &demo Open &recent Ouvrir un fichier ré&cent... Save &as... En&registrer sous... Export &MIDI file Exporter le morceau en fichier M&IDI... &Preferences &Préférences... &Quit &Quitter Show &audio engine info Montrer les informations du système &audio &User manual Manuel &Utilisateur &About À &propos &Cancel &Annuler Unknown audio driver Pilote audio inconnu Error starting audio driver Erreur au lancement du pilote audio Jack driver: server shutdown Pilote Jack : fermeture du serveur Jack driver: cannot activate client Pilote jack : impossible d'activer le client Jack driver: cannot connect output port Pilote jack : impossible de connecter le port de sortie Jack driver: error in port register Pilote jack : impossible d'authentifier le client &Project &Projet &Export song &Exporter le morceau en fichier WAV... &Tools &Outils &Mixer &Table de mixage... &Instrument Rack &Instruments De&bug Mode de&bug Print Objects Imprimer les objets &Info &Information Song saved. Morceau enregistré. Unknown error %1 Erreur inconnue %1 Clear all instruments? Effacer tous les instruments? Ok OK You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Vous utiliser une version d'Hydrogen en développement.<br> Merci de nous aider en envoyant des suggestions ou des problèmes sur la <a href="http://lists.sourceforge.net/mailman/listinfo/hydrogen-devel">liste de discussion d'Hydrogen</a>.<br><br>Merci! Could not save song. Impossible d'enregistrer le morceau. Open &Pattern Ouvrir un &motif... Hydrogen Pattern (*.h2pattern) Motif Hydrogen (*.h2pattern) Save Pattern as ... Enre&gistrer le motif sous... Pattern saved. Motif enregistré. Open Pattern Ouvrir un motif Don't show this message anymore Ne plus afficher ce message Playlist: Set song No. %1 Liste de lecture: utiliser le morceau %1 Show &info &Propriétés... Expor&t pattern as... Expor&ter le motif sous... I&nstruments I&nstruments &Add instrument &Ajouter un instrument &Clear all Effacer &tout &Save library Enregi&strer la bibliothèque... &Export library &Exporter une bibliothèque... Playlist &editor &Navigateur de liste de lecture... &Import library &Importer une bibliothèque... Info|About Info|À propos Song saved as. Enregistré le morceau sous. Playlist: Song No. %1 Liste de lecture: morceau %1 Could not export pattern. Ne peut pas exporter le motif. The document contains unsaved changes. Do you want to save the changes? Le document contient des changements non sauvegardés. Voulez-vous sauvegarder les changements? Director &Directeur Undo history &Undo menu Undo Redo Input mode Instrument Instrument Drumkit Report bug MasterMixerLine Set master volume [%1] Régler le volume principal [%1] Set humanize time parameter [%1] Régler les paramètres de temps humanisé [%1] Set humanize velocity parameter [%1] Régler les paramètres de vélocité humanisée [%1] Set swing factor [%1] Régler le facteur de swing [%1] Humanize velocity Vélocité humanisée Humanize time Temps humanisé Swing Swing MidiTable Event Évènements Param. Param. Action Action press button to record midi event Appuyer sur le bouton pour enregistrer les événements midi Mixer Show FX panel Montrer les effets Show instrument peaks Montrer les niveaux Show instrument peaks = On Afficher les niveaux = Actif Show instrument peaks = Off Afficher les niveaux = Inactif Set FX %1 level Régler le niveau de l'effet %1 Set LADSPA FX ( %1 ) volume Régler le volume de l'effet LADSPA (%1) MixerLine Play sample Jouer échantillon Mute Muet Solo Solo Pan Pan Instrument name (double click to edit) Nom de l'instrument (double cliquer pour éditer) Set instrument volume [%1] Régler le volume de l'instrument [%1] Set instr. pan [%1] Régler l'effet pan. de l'instrument [%1] PatternEditorPanel Hear new notes Entendre les notes ajoutées Hear new notes = On Entendre les notes ajoutées = Actif Hear new notes = Off Entendre les notes ajoutées = Inactif Pattern editor - %1 Éditeur de motif - %1 Quantize keyboard/midi events to grid Quantifier les évenements clavier/MIDI sur la grille Quantize incoming keyboard/midi events = On Quantifier les évenements clavier/MIDI entrant = Actif Select pattern size Sélectionner la grandeur du motif Select grid resolution Sélectionner la résolution de la grille Zoom in Agrandir Zoom out Réduire No pattern selected Aucun motif sélectionné Is not possible to change the pattern size when playing. Il n'est pas possible de changer la taille d'un motif durant sa lecture. Select note properties Sélectionner les propriétés de la note Velocity Velocite Pan Pan Cutoff Coupure Resonance Résonance Lead and Lag Trainee Loaded Soundlibrary Bibliothèque chargée Quantize incoming keyboard/midi events = Off Quantifier les évènements entrant du clavier/midi = Inactif NoteKey Numéro de note destructive mode pre delete settings destructive mode post delete settings Show piano roll editor Afficher l'éditeur piano-roll Show drum editor Afficher l'éditeur de batterie PatternFillDialog Fill with selected pattern Remplir avec le motif sélectionné PatternFillDialog_UI Cancel Annuler Form 1 Form 1 &Fill Remplir (&F) Alt+F Alt+F &Clear Effa&cer Alt+C Alt+C From: De: To: À: OK OK PatternPropertiesDialog Pattern properties Propriétés du motif %1#2 %1#2 %1 %1 PatternPropertiesDialog_UI &Cancel Annuler (&C) Form1 Form1 Alt+C Alt+C &OK &OK Alt+O Alt+O New Pattern Name Nom du nouveau motif Pattern category Catégorie du motif Pattern description PianoRollEditor Velocity Velocite Pan Pan Lead and Lag Trainee PlayerControl Stop Arrêter Song Mode Mode morceau Pattern Mode Mode motif Playing. Lecture en cours. Stopped. Arrêté. Song mode selected. Mode morceau sélectionné. Pattern mode selected. Mode motif sélectionné. Jack-transport on/off Transport Jack on/off Jack-transport mode = On Transport Jack = Actif Jack-transport mode = Off Transport Jack = Inactif Show mixer Montrer la table de mixage Rewind Reculer Play/ Pause Jouer/ Pause Fast Forward Avancer Loop song Morceau en boucle Mixer Mixage Show Instrument Rack Afficher les instruments Instrument rack Instruments Pause. Pause. JACK-transport will work only with JACK driver. Le transport JACK fonctionne seulement avec le pilote JACK. New BPM value Nouvelle valeur du BPM Loop song = On Morceau en boucle = Actif Loop song = Off Morceau en boucle = Inactif BeatCounter Panel on Panneau du compteur BPM activé Set BPM / Set BPM and play Régler le BPM / Régler le BPM et jouer Jack-Time-Master on/off Jack-Time-Master actif/inactif BC Panel on Panneau du compteur BPM actif BC Panel off Panneau du compteur BPM inactif Count BPM and start PLAY Compter les BPM et jouer Count and set BPM Compter et régler les BPM Jack-Time-Master mode = On Mode Jack-Time-Master = Actif Jack-Time-Master mode = Off Mode Jack-Time-Master = Inactif Record Enregistrer Destructive Record Enregistrement destructif Record midi events = On Enregistrer les événements midi = On Record midi events = Off Enregistrer les événements midi = Off Destructive mode = Off Mode destructif = Off Destructive mode = On Mode destructif = On Recalculate Rubberband modified samples if bpm will change Recalcule l'échantillon modifié par Rubberband si le bpm change Recalculate all samples using Rubberband ON Recalcule tous les échantillons qui utilisent Rubberband Recalculate all samples using Rubberband OFF Recalcule tous les échantillons qui n'utilisent pas Rubberband Switch metronome on/off PlaylistDialog Song list Liste de morceau Script Script exec Script Exécuter le script Add Song to PlayList Ajouter un morceau à la liste No Song selected! Aucun morceau n'est sélectionné! Load Playlist Charger la liste Hydrogen Playlist (*.h2playlist) Liste de lecture Hydrogen (*.h2playlist) Save Playlist Enregistrer la liste No Song in List or no Song selected! Aucun morceau dans la liste ou aucun morceau de sélectionné! Hydrogen Playlist (*.sh) Liste de lecture Hydrogen (*.sh) Add Script to selected Song Ajouter un script au morceau sélectionné No Script in use! Aucun script utilisé! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Aucun éditeur par défaut de régler. Veuillez régler l'éditeur par défaut. N'utiliser pas un éditeur en mode console. Désolé, mais un éditeur en mode console ne fonctionnera pas présentement. Set your Default Editor Régler votre éditeur par défaut No Script selected! Aucun script de sélectionné! Error loading song. Erreur au chargement du morceau. sort Trier Hydrogen Scripts (*.sh) Scripts Hydrogen (*.sh) New Script Nouveau script Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. Le nom ou le chemin du script contient des espaces. IMPORTANT Le chemin d'accès au script et le nom du script ne doivent pas contenir d'espaces. No Script! Aucun script! &Playlist &Liste de lecture Add song to Play&list &Ajouter un morceau à la &liste Add &current song to Playlist Ajouter &ce morceau à la liste &Remove selected song from Playlist &Retirer le morceau sélectionné &Open Playlist &Ouvrir une liste de lecture &Save Playlist Enregi&strer Save Playlist &as Enregistrer so&us... &Scripts &Scripts &Add Script to selected song &Ajouter un script au morceau sélectionné &Edit selected Script Édit&er le script sélectionné &Remove selected Script &Retirer le script sélectionné &Create a new Script &Créer un nouveau script Rewind Reculer Play/ Pause/ Load selected song Lecture/ Pause/ Chargement du morceau sélectionné Stop Arrêter Fast Forward Avancer Please save your song first Merci de sauvegarder votre morceau d'abord WARNING, the new file is executable by the owner of the file! ATTENTION, le nouveau fichier est exécutable par le propriétaire du fichier! Pause. Pause. Playlist Browser Navigateur de liste de lecture No song selected! Auncun morceau sélectionné! Playlist: set song no. %1 Liste: choisir le morceau #%1 no Script Aucun script &New Playlist PlaylistDialog_UI PlayList Browser Navigateur de liste de lecture Song list Liste de morceaux PreferencesDialog Slow Lent Normal Normal Fast Rapide <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Open Sound System</b><br>Pilote audio simple [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">Non compilé</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Pilote Jack Audio Connection Kit</b><br>Pilote audio faible latence Preferences Préférences <b>Automatic driver selection</b> <b>Sélection automatique du pilote audio</b> <b>ALSA Driver</b><br> <b>Pilote ALSA</b><br> <b>PortAudio Driver</b><br> <b>Pilote PortAudio</b><br> <b>CoreAudio Driver</b><br> <b>Pilote CoreAudio</b><br> Please restart hydrogen to enable/disable LASH support Veuillez relancer Hydrogen pour activer/désactiver le support LASH Driver restart required. Restart driver? Redémarrage de pilote nécessaire. Redémarrer le pilote? &Ok &OK &Cancel Annuler (&C) PreferencesDialog_UI Sample rate Taux d'échantillonage Device Périphérique audio Buffer size Taille du tampon Polyphony Polyphonie Input Entrée Channel Canal All Tous Slow Lent Normal Normal Fast Rapide Meters falloff speed Vitesse de chute des niveaux Application font Police de l'application Select font Choisir la police Mixer font Police de la table de mixage <i>After a font change the application must be restarted.</i> <i>Après un changement de police, l'application doit être relancée.</i> Style Style &Cancel Annuler (&C) 88200 88200 96000 96000 Midi driver Pilote MIDI Form1 Form1 Alt+C Alt+C &OK &OK Alt+O Alt+O &General &Général &Reopen last used song Ouvrir le dernier mo&rceau à chaque démarrage de l'application Alt+R Alt+R Audio &System &Système Audio ### ### 44100 44100 48000 48000 Connect to &Default Output Pair Connecter à la paire de sortie par &défaut Alt+D Alt+D Metronome volume Volume du métronome &Midi System Système MIDI Ignore note-off Ignorer les fins de note 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 &Appearance &Apparence Restart output Redémarrer la sortie Audio output details Détails de la sortie audio Post-Fader Post-équilibreur Pre-Fader Pré-équilibreur Track output Piste de sortie Use lash Utiliser LASH (système de gestion session Jack/ALSA) first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm première étape: synchroniser la latence du déclencheur du contrôleur/clavier et le BPM calculé. Beat counter drift compensation in 1/10 ms Compensation en 1/10ms de la dérive du compteur de battement second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup deuxième étape: ajuster les différences entre le déclencheur du contrôleur/clavier et la départ différé du séquenceur Beat counter start offset in ms Début en ms du compteur de battement create per-instrument outputs Créer des sorties (jack) pour chaque instrument Path to the Rubberband command-line utility Chemin vers l'utilitaire en ligne de commande Rubberband Maximum number of bars Nombre de barres maximum &Reopen last used playlist &Ré-ouvrir la dernière Liste de Lecture utilisée Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? Il reste des modifications non sauvegardées. Ces modifications seront perdues. Êtes-vous sûr ? &Ok &OK &Cancel &Annuler Close dialog! maybe there is some unsaved work on sample. Are you sure? Fermeture de la boite de dialogue! Peut être y a-t'il du travail non sauvegardé sur l'échantillon. Êtes-vous sûr ? SampleEditor_UI Dialog Dialogue P&lay original sample &Lecture de l'échantillon original &Apply Changes &Appliquer les modifications &Close &Fermer Adjust sample start frame Ajuster le point de départ de l'échantillon Adjust sample loop begin frame Ajuster le début de la boucle de l'échantillon set processing forward faire suivre reverse renversement pingpong pingpong loops boucles Adjust sample end & loop end frame Ajuster le point d'arrivé de l'échantillon &Play Jouer (&P) new sample length: nouvelle longueur de l'échantillon: fade-out type type fondu à la fermeture volume volume panorama panoramique <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;">Niveaux de "croustillance" : </p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 0 équivaut à --no-transients --no-lamination --window-long</p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 1 équivalent à --no-transients --no-lamination</p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 2 équivalent à --no-transients</p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 3, équivalent à --bl-transients</p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 4 options de traitement par défaut </p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"> 5 équivalent à --no-lamination --window-short (peut-être bon pour la batterie) </p> <p style="-qt-paragraph-type:empty;margin: 0px;-qt-block-indent:0;text-indent:0px;"></p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;">Vous pouvez trouver plus d'informations ici (en anglais seulement): </p> <p style="margin:0px;-qt-block-indent:0;text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/"><span style="text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/</span></a></p></body></html> 0 0 1 1 2 2 3 3 4 4 5 5 off off 1/64 1/64 1/32 1/32 1/16 1/16 1/8 1/8 1/4 1/4 1/2 1/2 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 Sample length to beat: Pitch the sample in semitones, cents Crispness: Start Départ Loop Boucle <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End Fin "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. "Processeur audio Rubberband" : Modifie le tempo et la hauteur de l'échantillon. Pitch (Semitone,Cent) Hauteur (Demi-ton, Pourcent) SimpleHTMLBrowser Manual Manuel Ok OK Welcome to Hydrogen Bienvenue à Hydrogen Don't show this message anymore Ne plus afficher ce message Documentation index Index de la documentation SongEditorPanel Create new pattern Créer un nouveau motif Move the selected pattern down Descendre le motif sélectionné Move the selected pattern up Monter le motif sélectionné Song Editor Éditeur de morceau &Cancel Annuler (&C) Clear pattern sequence Effacer la séquence de motifs Select mode Mode sélection Draw mode Mode dessin Warning, this will erase your pattern sequence. Are you sure? Attention, cette action effacera la séquence de motifs. Voulez-vous continuer? &Ok &OK stacked mode Mode en pile stacked pattern mode Mode en pile de motif single pattern mode Mode à un motif not_categorized Sans catégorie Enable time line edit Active l'édition de la TimeLine Pattern %1 Motif %1 SongEditorPanelBpmWidget_UI Form Forme Edit the bpm value for current beat Éditer la valeur du bpm pour la mesure actuelle 500,55 500,55 Edit beat in timeline Éditer la mesure dans la TimeLine 500 500 Bar Barre BPM BPM Delete this BPM Marker Effacer ce marqueur BPM Delete BPM Marker Effacer les marqueurs BPM Cancel Annuler Ok OK SongEditorPanelTagWidget_UI Form Forme Tag Tag Cancel Annuler Ok OK SongEditorPatternList Copy Copier Delete Effacer Properties Propriétés Fill/Clear ... Remplir/Effacer ... Save Pattern Enregistrer un motif Load Pattern Charger un motif Open Pattern Ouvrir un motif Hydrogen Pattern (*.h2pattern) Motif Hydrogen (*.h2pattern) Virtual Pattern Motif virtuel Pattern 1 Motif 1 not_categorized Sans catégorie The pattern-file exists. Overwrite the existing pattern? Le fichier de motif existe. Écraser le motif existant ? &Ok &OK &Cancel &Annuler Export Pattern SongPropertiesDialog Song properties Propriétés du morceau SongPropertiesDialog_UI Song name Nom du morceau Author Auteur Notes Notes &Cancel &Annuler Form1 Form1 &OK &OK Alt+O Alt+O Alt+C Alt+C License Licence SoundLibraryExportDialog Export Sound Library Exporter la bibliothèque de son Directory SoundLibraryExportDialog_UI Dialog Dialogue Browse Explorer Export Exporter SoundLibraryImportDialog Sound Library import Importation de la bibliothèque de sons Sound library Bibliothèque de sons Status Statut Updating SoundLibrary list... Mise à jour de la liste de la bibliothèque de sons. Installed Installé New Nouveau Author: %1 Auteur: %1 Downloading SoundLibrary... Téléchargement de la bibliothèque de sons... Import drumkit Importer un kit de batterie SoundLibrary imported in %1 La bibliothèque de sons est importés à %1 An error occurred importing the SoundLibrary. Une erreur s'est produite lors de l'importation de la bibliothèque de sons. Drumkits Kits de batterie Songs Morceaux Patterns Motifs License: %1 Licence: %1 SoundLibraryImportDialog_UI Dialog Dialogue Internet Internet Update list Mettre à jour la liste Sound Library Name Nom de la bibliothèque de sons Sound library Info Information de la bibliothèque de sons Author... Auteur... Download and install Télécharger et installer Local file Fichier local Browse... Explorer... Install Installer 1 1 License... Licence... Edit server list Éditer la liste des serveurs Close Fermer SoundLibraryPanel Load Charger Export Exporter Delete Effacer System drumkits Kits de batterie du système User drumkits Kits de batterie de l'utilisateur &Ok &OK &Cancel &Annuler Songs Morceaux Patterns Motifs Error loading song. Erreur au chargement du morceau. Properties Propriété Warning, the selected pattern will be deleted from disk. Are you sure? Attention, le motif sélectionné sera effacé du disque. Voulez-vous continuer? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Dialogue Name Nom Author Auteur Information Information License Licence Save Enregistrer Cancel Annuler Save changes made to instruments into sound library Enregistrer les changements appliqués aux instruments dans la bibliothèque de sons SoundLibraryRepositoryDialog Edit repository settings Éditer les préférences du dépôt Edit server list Éditer la liste des serveurs URL URL SoundLibraryRepositoryDialog_UI Dialog Dialogue Add Ajouter Delete Effacer SoundLibrarySaveDialog Save Sound Library Enregistrer la bibliothèque de sons Please supply at least a valid name S'il vous plaît, mettez au moins un nom valide Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Dialogue Name Nom Author Auteur Information Information Cancel Annuler License Licence Save Enregistrer SoundLibraryTree Sound library Bibliothèque VirtualPatternDialog Select virtual pattern Sélectionner un motif virtuel VirtualPatternDialog_UI Dialog Dialogue OK OK Cancel Annuler hydrogen-0.9.6-beta3/data/i18n/hydrogen.hr.qm000066400000000000000000001662441211146647700206450ustar00rootroot00000000000000Ueȹ~|[FFE ,~dvT+{6y6UWV=x+f3Yk>Ÿq^or.qKx¹%gk` )+DOLS0"mDtEmD?un\m/jm pvlbIl_79XQ/W(9t<?AC%IAbP%z^lo!bSbLbbIoU3/" I IYI{II?nne!AɷZ,T,C,qϕW/W0WW3WaWWWNW؃W vBviv֏1|+؃ޱe>:ro ols,a.vf(#5I8[|4@fSцV|tV|W^aueN7hlh~h~4k2>m.pr`+Ov pz-<Y1D{Dit3Ɉȿ-g7u̮(Ȼ9;A8ueos\y|^{$)w "cr >g j''BDU*]_pzbk}e.~>#$5V#) [8{֣֣К=>%[!⪁4J%7/rY En8 bx!o 7#P 4`4= ,V^v`~xa.fZh3s*Ec.W_eT X'zyk'U>daop¯fp='o&riHݿZD빆_-BF(>3d3d@{sRG.l/$E(/Ȫ%+lc}>o33Ǿ3` .¸$3.\ta) S( ){e +s' 3b$( @eq Cn S%]k aOX h>ӟ h> w-X) w  r1 ~ ~J V1 !g 4+ $8 ~ TK a BV #~N# +Z$΀ ͖ TY gn kJD x@#n" z Uf ?' ?^ 3 / Cէ D ;$x s'V< 'b = = 5 "U)o 2p` 5yy 5y @( B CE C" FPJ \p `nh j` we |v ~H?  c _  ag 9 t ^[ $ 4gp =/ S yE {d / 4)U <" ͫ ͼ&t ӽ^Z mmLg 3[N]",$R\=WGn^jje~mew>|r&*XdUEǗ.ī{ ' זMailing lista</b><br>Mailing lists
     AboutDialogT<b>Glavni programer i odr~avatelj:</b><br>$Main coder and mantainer:
     AboutDialog8<b>Stranica projekta</b><br>Project page
     AboutDialog.<b>Web stranica</b><br>Website
     AboutDialogO ProgramuAbout AboutDialog###AboutDialog_UI&Autori&AuthorsAboutDialog_UI&Licenca&LicenseAboutDialog_UI&OK&OKAboutDialog_UI.&Informacije o programuA&boutAboutDialog_UI,Informacije o programuAbout HydrogenAboutDialog_UIAlt+OAboutDialog_UI8Informacije o audio engine-uAudio Engine InfoAudioEngineInfoForm###AudioEngineInfoForm_UI*Stanje audio engine-aAudio engine stateAudioEngineInfoForm_UIIzlazni signal Audio outputAudioEngineInfoForm_UI"Veli ina buffer-a Buffer sizeAudioEngineInfoForm_UIKonektiran na Connected toAudioEngineInfoForm_UIForm1AudioEngineInfoForm_UIFrejmoviFramesAudioEngineInfoForm_UIMIDI ulaz MIDI inputAudioEngineInfoForm_UIImeNameAudioEngineInfoForm_UI UzorciPatternsAudioEngineInfoForm_UIPolifonia Playing notesAudioEngineInfoForm_UI"Vrijeme izvoenja Process timeAudioEngineInfoForm_UI"Stvarni framerateRealtime framesAudioEngineInfoForm_UI$Frekvencija uzorka Sample rateAudioEngineInfoForm_UISamplerSamplerAudioEngineInfoForm_UI&Odabrani instrumentSelected instrumentAudioEngineInfoForm_UIOdabrani uzorakSelected patternAudioEngineInfoForm_UISequencer SequencerAudioEngineInfoForm_UIPozicija pjesme Song positionAudioEngineInfoForm_UIStanje pjesme Song stateAudioEngineInfoForm_UI SynthSynthAudioEngineInfoForm_UI UdarciTicksAudioEngineInfoForm_UI4Pretra~iva audio podatakaAudio File BrowserAudioFileBrowserIme:Name:AudioFileBrowser&Frekvencija uzorka: Samplerate:AudioFileBrowserSamplerate: %1Samplerate: %1AudioFileBrowserVeli ina:Size:AudioFileBrowser"Veli ina: %1 byteSize: %1 bytesAudioFileBrowserT&Ime fajla koje odgovara imenu instrumenta&Filename to instrument nameAudioFileBrowser_UI&Po etak&HomeAudioFileBrowser_UI&Sviraj Uzorak &Play SampleAudioFileBrowser_UI S&tani&StopAudioFileBrowser_UI &Gore&UpAudioFileBrowser_UI Otka~iCancelAudioFileBrowser_UIDijalogDialogAudioFileBrowser_UIDuljina:Length:AudioFileBrowser_UIIme:Name:AudioFileBrowser_UI OtvoriOpenAudioFileBrowser_UI@S&viraj uzorke klikajui na njihPla&y samples by clickingAudioFileBrowser_UI&Frekvencija uzorka: Samplerate:AudioFileBrowser_UIVeli ina:Size:AudioFileBrowser_UIDijalogDialog Director_UI.### Autor seta bubnjeva### Drumkit authorDrumkitManager_UI>### Informacije o setu bubnjeva### Drumkit infoDrumkitManager_UI*### Ime seta bubnjeva### Drumkit nameDrumkitManager_UIF### Set bubnjeva e biti instaliran4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b> Skini druge raspolo~ive setove bubnjeva na<br> http://www.hydrogen-music.org </b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UI AutorAuthorDrumkitManager_UIPretra~iBrowseDrumkitManager_UI(Izbriai set bubnjevaDelete drumkitDrumkitManager_UI>Mjesto (na disku) seta bubnjevaDrumkit directoryDrumkitManager_UI"Ime seta bubnjevaDrumkit filenameDrumkitManager_UI"Ime seta bubnjeva Drumkit nameDrumkitManager_UI IzbaciExportDrumkitManager_UIForm1DrumkitManager_UI UmetniImportDrumkitManager_UIInformacijeInfoDrumkitManager_UIPodigniLoadDrumkitManager_UI(Podigni set bubnjeva Load drumkitDrumkitManager_UI SpremiSaveDrumkitManager_UIIzbaci pjesmu Export songExportSongDialog&Pretra~i... &Browse...ExportSongDialog_UI&Zatvori&CloseExportSongDialog_UI&Izbaci&ExportExportSongDialog_UI1616ExportSongDialog_UI 192000192000ExportSongDialog_UI 2205022050ExportSongDialog_UI2424ExportSongDialog_UI3232ExportSongDialog_UI 4410044100ExportSongDialog_UI 4800048000ExportSongDialog_UI88ExportSongDialog_UI 9600096000ExportSongDialog_UIAlt+BExportSongDialog_UIAlt+CExportSongDialog_UIAlt+EExportSongDialog_UIBIzbaci cijelu pjesmu u WAV oblikuExport Whole Song to WAVExportSongDialog_UI&Ime fajla za exportExport filenameExportSongDialog_UI%1
    %2 KHz
    %3 %4 FileBrowserEfekti on/off FX on/off FxMixerLineGlavni izlaz Master output FxMixerLine&Otka~i&Cancel$H2Core::SoundLibraryPropertiesDialog&OK&Ok$H2Core::SoundLibraryPropertiesDialogBKarakteristike 'Zvu ne knji~nice'SoundLibrary Properties$H2Core::SoundLibraryPropertiesDialogTo nije mogue, mo~ea spremiti promjene unutar instrumenta u samo trenutno otvorenoj 'zvu noj knji~nici'fThis is not possible, you can only save changes inside instruments to the current loaded sound library$H2Core::SoundLibraryPropertiesDialogUpozorenje! Mijenjanje imena seta bubnjeva e rezultirati stvaranjem novog seta bubnjeva s tim imenom. Jesi li siguran da to ~elia napraviti?fWarning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure?$H2Core::SoundLibraryPropertiesDialog2Set bubnjeva u itan: [%1]Drumkit loaded: [%1] HydrogenApp MixerMixer HydrogenAppEditor pjesme Song Editor HydrogenApp AttackAttackInstrumentEditorDecayInstrumentEditorFilter Cutoff Filter CutoffInstrumentEditor$Filter rezonancijaFilter resonanceInstrumentEditorGeneraleGeneralInstrumentEditor Gain instrumentaInstrument gainInstrumentEditorGain razine Layer gainInstrumentEditor(Layer pitch (grezzo)Layer pitch (Coarse)InstrumentEditor$Layer pitch (Fine)Layer pitch (Fine)InstrumentEditorLayersInstrumentEditor(Novo ime instrumentaNew instrument nameInstrumentEditor(Faktor izmjene nivoaRandom pitch factorInstrumentEditorReleaseInstrumentEditorDPrika~i karakteristike instrumentaShow instrument propertiesInstrumentEditor:Prika~i karakteristike razineShow layers propertiesInstrumentEditorSustainInstrumentEditorObriai note Clear notesInstrumentLine$Izbriai instrumentDelete instrumentInstrumentLine<Automatski mijenjaj iznos noteRandomize velocityInstrumentLineSoloSoloInstrumentLineInstrument InstrumentInstrumentRack8Prika~i ureiva instrumentaShow Instrument editorInstrumentRack4Prika~i 'zvu nu knji~nicu'Show sound libraryInstrumentRack Zvu na knji~nica Sound libraryInstrumentRack$Uredi FX parametreEdit FX parametersLadspaFXMixerLineFX Return Effect returnLadspaFXMixerLine Zaobii efekt(e) FX bypassLadspaFXMixerLineIme LADSPA FX-aLadspa FX nameLadspaFXMixerLineAktivirajActivateLadspaFXPropertiesDeaktiviraj DeactivateLadspaFXProperties6LADSPA FX karakteristike %1LADSPA FX %1 PropertiesLadspaFXPropertiesNema dodatka No pluginLadspaFXPropertiesOdaberi efekt Select FXLadspaFXProperties:[%1] LADSPA FX karakteristike[%1] LADSPA FX PropertiesLadspaFXProperties Lista po abecediAlphabetic ListLadspaFXSelectorRazvrstano CategorizedLadspaFXSelector GrupeGroupsLadspaFXSelectorMonoMonoLadspaFXSelectorNije podr~ano Not supportedLadspaFXSelectorZadnje koriaten Recently UsedLadspaFXSelector(Izaberi LADSPA efektSelect LADSPA FXLadspaFXSelector StereoStereoLadspaFXSelector(### Autor efekta 1 2### FX maker 1 2LadspaFXSelector_UI&### copyright 1 2 3### copyright 1 2 3LadspaFXSelector_UI### ID efekta ### fx IDLadspaFXSelector_UI ### naziv efekta ### fx labelLadspaFXSelector_UI ### ime efekta 1 ### fx name 1LadspaFXSelector_UI ### vrsta efekta ### fx typeLadspaFXSelector_UI&Otka~i&CancelLadspaFXSelector_UI&OK&OKLadspaFXSelector_UI1LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html>

    Copyright:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html>

    ID:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Etichetta:</span></p></body></html>

    Label:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Autore:</span></p></body></html>

    Maker:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Nome:</span></p></body></html>

    Name:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Tipo:</span></p></body></html>

    Type:

    LadspaFXSelector_UIAlt+CLadspaFXSelector_UIAlt+OLadspaFXSelector_UIForm1LadspaFXSelector_UIMainForm&Informacije&AboutMainForm"&Dodaj instrument&Add instrumentMainForm&Otka~i&CancelMainForm&Elimina tutti &Clear allMainForm Odbaci promje&ne&DiscardMainForm"&Esporta libreria&Export libraryMainForm&Izbaci pjesmu &Export songMainForm"&Importa libreria&Import libraryMainForm&Informacije&InfoMainForm &Instrument Rack&Instrument RackMainForm &Mixer&MixerMainForm &Novo&NewMainForm&Otvori&OpenMainForm&Karakteristike &PreferencesMainForm&Projekt&ProjectMainForm &Izlaz&QuitMainForm&Spremi&SaveMainForm&Salva libreria &Save libraryMainForm &Alati&ToolsMainForm*&Korisni ki priru nik &User manualMainForm Otka~iCancelMainForm4Izbrisati sve instrumente?Clear all instruments?MainForm8Neuspjeano spremanje pjesme.Could not save song.MainForm&DebugirajDe&bugMainFormBNemoj viae prikazivati ovu porukuDon't show this message anymoreMainForm8Neuspjeano otvaranje pjesme.Error loading song.MainFormHProblem pri pokretanju drivera zvukaError starting audio driverMainForm,Iz&baci pattern kao...Expor&t pattern as...MainForm"Izbaci &MIDI fileExport &MIDI fileMainForm Izbaci MIDI fileExport MIDI fileMainForm:Hydrogen uzorak (*.h2pattern)Hydrogen Pattern (*.h2pattern)MainForm6Hydrogen je spreman za rad.Hydrogen Ready.MainForm4Hydrogen pjesma (*.h2song)Hydrogen Song (*.h2song)MainFormInstru&menti I&nstrumentsMainFormInstrument InstrumentMainFormPJack driver: ne mogu aktivirati klijenta#Jack driver: cannot activate clientMainFormFJack driver: ne mogu povezati izlaz'Jack driver: cannot connect output portMainFormPJack driver: greaka u registraciji porta#Jack driver: error in port registerMainForm8Jack driver: server shutdownJack driver: server shutdownMainForm"MIDI file (*.mid)Midi file (*.mid)MainFormOkOkMainForm*Otvori &demonstraciju Open &DemoMainFormOtvori &uzorak Open &PatternMainForm$Otvori &posljednje Open &recentMainFormOtvori uzorak Open PatternMainFormOtvori pjesmu Open songMainForm"Uzorak spremljen.Pattern saved.MainForm Playlist &editorPlaylist &editorMainForm.Playlist: Pjesma br. %1Playlist: Set song No. %1MainForm.Playlist: Pjesma br. %1Playlist: Song No. %1MainForm"Isprintaj objekte Print ObjectsMainFormSpremi &kao... Save &as...MainForm*Spremi uzorak kao ...Save Pattern as ...MainFormSpremi pjesmu Save songMainFormBPrika~i informacije &audio engineShow &audio engine infoMainForm(Prika~i &informacije Show &infoMainForm,Pjesma spremljena kao.Song saved as.MainForm$Pjesma spremljena. Song saved.MainForm,Nepoznati audio driverUnknown audio driverMainForm*nepoznata pogreaka %1Unknown error %1MainForm^Koristia verziju Hydrogena koja je joa u razvoju, molimo te da nam pomognea tako da nas izvjestia o greakama ili daa svoj savjet na hydrogen-devel mailing listu.<br><br>Hvala!You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!MainForm"Humaniziraj tempo Humanize timeMasterMixerLine,Humaniziraj intenzitetHumanize velocityMasterMixerLineXPodesi parametar za humaniziranje tempa [%1] Set humanize time parameter [%1]MasterMixerLine\Podesi parametar za humaniziranje raspona [%1]$Set humanize velocity parameter [%1]MasterMixerLine6Podesi glavnu glasnou [%1]Set master volume [%1]MasterMixerLine"Swing faktor [%1]Set swing factor [%1]MasterMixerLine SwingSwingMasterMixerLinePoduzimanjeAction MidiTableDogaajEvent MidiTable Param.Param. MidiTable,Postavi razinu FX-a %1Set FX %1 level MixerFPostavi glasnou LADSPA FX-a ( %1 )Set LADSPA FX ( %1 ) volumeMixer Prika~i FX plo u Show FX panelMixer@Prika~i visinu to ke instrumentaShow instrument peaksMixerXPrika~i visinu to ke instrumenta = NeaktivnoShow instrument peaks = OffMixerTPrika~i visinu to ke instrumenta = AktivnoShow instrument peaks = OnMixertNome strumento (doppio click per modificarne le propriet)&Instrument name (double click to edit) MixerLineEscludiMute MixerLinePanPan MixerLineSuona sample Play sample MixerLine$Pan strumento [%1]Set instr. pan [%1] MixerLine*Volume strumento [%1]Set instrument volume [%1] MixerLineSoloSolo MixerLine CutoffCutoffPatternEditorPanel$Posluaaj nove noteHear new notesPatternEditorPanel<Posluaaj nove note = NeaktivnoHear new notes = OffPatternEditorPanel8Posluaaj nove note = AktivnoHear new notes = OnPatternEditorPanelNije mogue promijeniti veli inu uzorka za vrijeme trajanja presluaavanja.8Is not possible to change the pattern size when playing.PatternEditorPanel'Lead and Lag' Lead and LagPatternEditorPanel2Otvorena zvu na knji~nicaLoaded SoundlibraryPatternEditorPanel,Nema izabranih uzorakaNo pattern selectedPatternEditorPanelPanPanPatternEditorPanel(Ureiva uzorka - %1Pattern editor - %1PatternEditorPanel~Kvantiziranje nadolazeih klavijaturnih/midi sesija = Neaktivno,Quantize incoming keyboard/midi events = OffPatternEditorPanelzKvantiziranje nadolazeih klavijaturnih/midi sesija = Aktivno+Quantize incoming keyboard/midi events = OnPatternEditorPanelbKvantiziranje klavijatura/midi pokuaaja u reaetku%Quantize keyboard/midi events to gridPatternEditorPanelRezonancija ResonancePatternEditorPanel0Odaberi veli inu reaetkeSelect grid resolutionPatternEditorPanel8Odaberni karakteristike noteSelect note propertiesPatternEditorPanel.Izaberi veli inu uzorkaSelect pattern sizePatternEditorPanelFrekvencijaVelocityPatternEditorPanelPoveaj pogledZoom inPatternEditorPanelSmanji pogledZoom outPatternEditorPanel0Popuni odabranim uzorkomFill with selected patternPatternFillDialog&Obriai&ClearPatternFillDialog_UI&Popuni&FillPatternFillDialog_UIAlt+CPatternFillDialog_UIAlt+FPatternFillDialog_UI Otka~iCancelPatternFillDialog_UIPrva formaForm 1PatternFillDialog_UIOd:From:PatternFillDialog_UIOkOKPatternFillDialog_UIK:To:PatternFillDialog_UI*Karakteristike uzorkaPattern propertiesPatternPropertiesDialog&Otka~i&CancelPatternPropertiesDialog_UI&OK&OKPatternPropertiesDialog_UIAlt+CPatternPropertiesDialog_UIAlt+OPatternPropertiesDialog_UIForm1PatternPropertiesDialog_UINovo ime uzorkaNew Pattern NamePatternPropertiesDialog_UI"Kategorija uzorkaPattern categoryPatternPropertiesDialog_UI'Lead and Lag' Lead and LagPianoRollEditorPanPanPianoRollEditorFrekvencijaVelocityPianoRollEditor>Plo a broja a udaraca neaktivan BC Panel off PlayerControl:Plo a broja a udaraca aktivan BC Panel on PlayerControlBPrebroji BPM i po ni reprodukciju Count BPM and start PLAY PlayerControl*Izbroji i postavi BPM Count and set BPM PlayerControl@Mod Jack-Time-Master = Isklju en Jack-Time-Master mode = Off PlayerControl>Mod Jack-Time-Master = Uklju en Jack-Time-Master mode = On PlayerControl>Plo a broja a udaraca uklju enaBeatCounter Panel on PlayerControl$Premotaj unaprijed Fast Forward PlayerControlRackInstrument rack PlayerControllJACK-transport e funkcionirati samo sa JACK driverom./JACK-transport will work only with JACK driver. PlayerControlFJack-Time-Master uklju en/isklju enJack-Time-Master on/off PlayerControl<Jack-transport Mod = Isklju enJack-transport mode = Off PlayerControl:Jack-transport Mod = Uklju enJack-transport mode = On PlayerControlBJack-transport uklju en/isklju enJack-transport on/off PlayerControl Ponavljaj pjesmu Loop song PlayerControl:Ponavljaj pjesmu = Isklju enoLoop song = Off PlayerControl8Ponavljaj pjesmu = Uklju enoLoop song = On PlayerControl MixerMixer PlayerControlXNova vrijednost broja udaraca u minuti (BPM) New BPM value PlayerControlUzorak Mod Pattern Mode PlayerControl&Uzorak Mod odabran.Pattern mode selected. PlayerControl Pauza.Pause. PlayerControl,Reproduciraj/ Pauziraj Play/ Pause PlayerControl Svira.Playing. PlayerControlPremotaj unazadRewind PlayerControlPPostavi BPM / Postavi BPM i reproducirajSet BPM / Set BPM and play PlayerControlPrika~i RackShow Instrument Rack PlayerControlPrika~i mixer Show mixer PlayerControlMod pjesme Song Mode PlayerControl&Mod pjesme odabran.Song mode selected. PlayerControl StaniStop PlayerControlZaustavljeno.Stopped. PlayerControl@Dodaj skriptu na izabranu pjesmuAdd Script to selected SongPlaylistDialog2Dodaj pjesmu na plejlistuAdd Song to PlayListPlaylistDialog>Pogreaka kod u itavanja pjesme.Error loading song.PlaylistDialog$Premotaj unaprijed Fast ForwardPlaylistDialog@Hydrogen Playlist (*.h2playlist) Hydrogen Playlist (*.h2playlist)PlaylistDialog&Shell script (*.sh)Hydrogen Playlist (*.sh)PlaylistDialog(Shell Scripts (*.sh)Hydrogen Scripts (*.sh)PlaylistDialog U itaj plejlistu Load PlaylistPlaylistDialogNova skripta New ScriptPlaylistDialogNije postavljen osnovni ureiva . Molim da ga odredia Nemoj koristiti editor baziran na konzoli Na~alost, ovo trenutno nee funkcionirati.No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment.PlaylistDialog0Nema skripte u upotrebi!No Script in use!PlaylistDialog,Skripta nije odabrana!No Script selected!PlaylistDialogNema skripte! No Script!PlaylistDialogNNema pjesme na popisu ili na plejlisti!$No Song in List or no Song selected!PlaylistDialog*Nema izabrane pjesme!No Song selected!PlaylistDialog Pauza.Pause.PlaylistDialogPremotaj unazadRewindPlaylistDialog Spremi plejlistu Save PlaylistPlaylistDialogSkriptaScriptPlaylistDialogIme skripte ili njezina adresa sadr~e razmake. VA}NO Adresa skripte i njezino ime ne smiju sadr~avati razmake.Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces.PlaylistDialog:Postavi svoj osnovni ureiva Set your Default EditorPlaylistDialogPopis pjesama Song listPlaylistDialog StaniStopPlaylistDialogIzvrai skriptu exec ScriptPlaylistDialogsortirajsortPlaylistDialog*Pretra~iva plejlistePlayList BrowserPlaylistDialog_UIPopis pjesama Song listPlaylistDialog_UI,<b>ALSA driver</b><br>ALSA Driver
    PreferencesDialogH<b>Automatsko odabiranje drivera</b>!Automatic driver selectionPreferencesDialog6<b>CoreAudio driver</b><br>CoreAudio Driver
    PreferencesDialog<b>Jack Audio Connection Kit Driver</b><br>Low latency audio driverCJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialog~<b>Open Sound System</b><br>jednostavni audio driver [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog6<b>PortAudio driver</b><br>PortAudio Driver
    PreferencesDialogj<br><b><font color="red">Nije kompajlirano</font></b>0
    Not compiledPreferencesDialogBrzoFastPreferencesDialogUmjerenoNormalPreferencesDialog~Restartaj hydrogen kako bi se uklju ila/isklju ila LASH podraka6Please restart hydrogen to enable/disable LASH supportPreferencesDialogPostavke PreferencesPreferencesDialog PolakoSlowPreferencesDialog######PreferencesDialog_UI&Izgled &AppearancePreferencesDialog_UI&Otka~i&CancelPreferencesDialog_UIO&p enito&GeneralPreferencesDialog_UI&Midi sustav &Midi SystemPreferencesDialog_UI&OK&OKPreferencesDialog_UIN&Ponovno otvori zadnje koriatenu pjesmu&Reopen last used songPreferencesDialog_UI1PreferencesDialog_UI10PreferencesDialog_UI11PreferencesDialog_UI12PreferencesDialog_UI13PreferencesDialog_UI14PreferencesDialog_UI15PreferencesDialog_UI16PreferencesDialog_UI2PreferencesDialog_UI3PreferencesDialog_UI4PreferencesDialog_UI44100PreferencesDialog_UI48000PreferencesDialog_UI5PreferencesDialog_UI6PreferencesDialog_UI7PreferencesDialog_UI8PreferencesDialog_UI88200PreferencesDialog_UI9PreferencesDialog_UI96000PreferencesDialog_UIx<i>Nakon promjene fonta aplikacija mora biti restartana.</i>=After a font change the application must be restarted.PreferencesDialog_UISveAllPreferencesDialog_UIAlt+CPreferencesDialog_UIAlt+DPreferencesDialog_UIAlt+OPreferencesDialog_UIAlt+RPreferencesDialog_UIFont aplikacijeApplication fontPreferencesDialog_UI&Audio Sustav Audio &SystemPreferencesDialog_UI,Detalji zvu nog izlazaAudio output detailsPreferencesDialog_UI-Beat counter drift compensation in 1/10 ms PreferencesDialog_UI#Beat counter start offset in ms PreferencesDialog_UI<Veli ina privremenog spremnika Buffer sizePreferencesDialog_UI KanalChannelPreferencesDialog_UIHPove~i se na osnovnu &izlaznu paricuConnect to &Default Output PairPreferencesDialog_UI UreajDevicePreferencesDialog_UIBrzoFastPreferencesDialog_UIForm1PreferencesDialog_UI$Ignoriraj note-offIgnore note-offPreferencesDialog_UIUlazInputPreferencesDialog_UIFalloff brzinaMeters falloff speedPreferencesDialog_UI$Glasnoa metronomaMetronome volumePreferencesDialog_UIMidi driver Midi driverPreferencesDialog_UIFont Mixera Mixer fontPreferencesDialog_UIUmjerenoNormalPreferencesDialog_UIPolifonija PolyphonyPreferencesDialog_UI Post-FaderPreferencesDialog_UI Pre-FaderPreferencesDialog_UIRestartaj izlazRestart outputPreferencesDialog_UI$Frekvencija uzorka Sample ratePreferencesDialog_UIOdaberi font Select fontPreferencesDialog_UI SporoSlowPreferencesDialog_UIStilStylePreferencesDialog_UIIzlaz trake Track outputPreferencesDialog_UIKoristi LASHUse lashPreferencesDialog_UIPrvo, namjesti vrijeme nepodudaranja signala latencije izmeu kontrolera/klavijature i izra unatog BPM_first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpmPreferencesDialog_UIfsecond step, adjust offset between last controller/keybord trigger and the deferred sequencer startup PreferencesDialog_UI&Zatvori&CloseSampleEditor_UI00SampleEditor_UI11SampleEditor_UI1/161/16SampleEditor_UI1/21/2SampleEditor_UI1/321/32SampleEditor_UI1/41/4SampleEditor_UI1/641/64SampleEditor_UI1/81/8SampleEditor_UI1010SampleEditor_UI1111SampleEditor_UI1212SampleEditor_UI1313SampleEditor_UI1414SampleEditor_UI1515SampleEditor_UI1616SampleEditor_UI1717SampleEditor_UI1818SampleEditor_UI1919SampleEditor_UI22SampleEditor_UI2020SampleEditor_UI2121SampleEditor_UI2222SampleEditor_UI2323SampleEditor_UI2424SampleEditor_UI2525SampleEditor_UI2626SampleEditor_UI2727SampleEditor_UI2828SampleEditor_UI2929SampleEditor_UI33SampleEditor_UI3030SampleEditor_UI3131SampleEditor_UI3232SampleEditor_UI44SampleEditor_UI55SampleEditor_UI66SampleEditor_UI77SampleEditor_UI88SampleEditor_UI99SampleEditor_UIDijalogDialogSampleEditor_UI8Dokumentacija kazala pojmovaDocumentation indexSimpleHTMLBrowserTNemoj viae nikad prikazivati ovu obavijestDon't show this message anymoreSimpleHTMLBrowserPriru nikManualSimpleHTMLBrowserOkOkSimpleHTMLBrowser*Dobrodoali u HydrogenWelcome to HydrogenSimpleHTMLBrowser&Otka~i&CancelSongEditorPanel&Ok&OkSongEditorPanel.Obriai sekvencu uzorakaClear pattern sequenceSongEditorPanel&Kreiraj novi uzorakCreate new patternSongEditorPanelCrta ki Mod Draw modeSongEditorPanel:Pomakni dolje odabrani uzorakMove the selected pattern downSongEditorPanel8Pomakni gore odabrani uzorakMove the selected pattern upSongEditorPanelOdaberi Mod Select modeSongEditorPanelEditor pjesme Song EditorSongEditorPanelPozor, ovo e obrisati sekvencu uzoraka. Da li to ~elia napraviti?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanel&Nije kategoriziranonot_categorizedSongEditorPanel.Pojedina ni Mod uzorakasingle pattern modeSongEditorPanelSkupni Mod stacked modeSongEditorPanel"Skupni Mod uzorkastacked pattern modeSongEditorPanel500500SongEditorPanelBpmWidget_UI 500,55500,55SongEditorPanelBpmWidget_UIOkOkSongEditorPanelBpmWidget_UIOkOkSongEditorPanelTagWidget_UIKopirajCopySongEditorPatternListIzbriaiDeleteSongEditorPatternList"Popuni/Obriai ...Fill/Clear ...SongEditorPatternList<Hydrogen Pattern (*.h2pattern)Hydrogen Pattern (*.h2pattern)SongEditorPatternListU itaj uzorak Load PatternSongEditorPatternListOtvori uzorak Open PatternSongEditorPatternListKarakteristike PropertiesSongEditorPatternListSpremi uzorak Save PatternSongEditorPatternList&Nije kategoriziranonot_categorizedSongEditorPatternList*Karakteristike pjesmeSong propertiesSongPropertiesDialog &Ok &OKSongPropertiesDialog_UI&Otka~i&CancelSongPropertiesDialog_UIAlt+CSongPropertiesDialog_UIAlt+OSongPropertiesDialog_UI AutorAuthorSongPropertiesDialog_UIForm1SongPropertiesDialog_UILicencaLicenseSongPropertiesDialog_UINoteNotesSongPropertiesDialog_UIIme pjesme Song nameSongPropertiesDialog_UI.Izbaci zvu nu knji~nicuExport Sound LibrarySoundLibraryExportDialogPretra~ujBrowseSoundLibraryExportDialog_UIDialogSoundLibraryExportDialog_UI IzbaciExportSoundLibraryExportDialog_UIjDoalo je do pogreake pri ubacivanju zvu ne knji~nice.-An error occurred importing the SoundLibrary.SoundLibraryImportDialogAutor: %1 Author: %1SoundLibraryImportDialog8Skidanje zvu ne knji~nice...Downloading SoundLibrary...SoundLibraryImportDialogSetovi bubnjevaDrumkitsSoundLibraryImportDialog&Umetni set bubnjevaImport drumkitSoundLibraryImportDialogInstalirano InstalledSoundLibraryImportDialogLicenca: %1 License: %1SoundLibraryImportDialogNovoNewSoundLibraryImportDialog UzorciPatternsSoundLibraryImportDialog PjesmeSongsSoundLibraryImportDialog,Ubaci zvu nu knji~nicuSound Library importSoundLibraryImportDialog Zvu na knji~nica Sound librarySoundLibraryImportDialog<Zvu na knji~nica umetnuta u %1SoundLibrary imported in %1SoundLibraryImportDialog StatusStatusSoundLibraryImportDialog@Osvje~avanje zvu ne knji~nice...Updating SoundLibrary list...SoundLibraryImportDialog11SoundLibraryImportDialog_UIAutor... Author...SoundLibraryImportDialog_UIPretra~uj... Browse...SoundLibraryImportDialog_UIZatvoriCloseSoundLibraryImportDialog_UIDialogSoundLibraryImportDialog_UI$Skini i instalirajDownload and installSoundLibraryImportDialog_UI$Uredi server listuEdit server listSoundLibraryImportDialog_UIInstalirajInstallSoundLibraryImportDialog_UIInternetInternetSoundLibraryImportDialog_UILicenca... License...SoundLibraryImportDialog_UILokalni fajl Local fileSoundLibraryImportDialog_UI(Ime zvu ne knji~niceSound Library NameSoundLibraryImportDialog_UI>Informacije o zvu noj knji~niciSound library InfoSoundLibraryImportDialog_UIOsvje~i popis Update listSoundLibraryImportDialog_UI&Odustani&CancelSoundLibraryPanel&OK&OkSoundLibraryPanel ObriaiDeleteSoundLibraryPanel>Pogreaka pri u itavanju pjesme.Error loading song.SoundLibraryPanel IzbaciExportSoundLibraryPanel U itajLoadSoundLibraryPanel UzorciPatternsSoundLibraryPanelKarakteristike PropertiesSoundLibraryPanel PjesmeSongsSoundLibraryPanel4Setovi bubnjeva iz sustavaSystem drumkitsSoundLibraryPanel4Korisni ki setovi bubnjeva User drumkitsSoundLibraryPaneltPozor, odabrani uzorak e biti izbrisan. Potvrdi brisanje!FWarning, the selected pattern will be deleted from disk. Are you sure?SoundLibraryPanel AutorAuthorSoundLibraryPropertiesDialog_UI Otka~iCancelSoundLibraryPropertiesDialog_UIDijalogDialogSoundLibraryPropertiesDialog_UIInformacije InformationSoundLibraryPropertiesDialog_UILicencaLicenseSoundLibraryPropertiesDialog_UIImeNameSoundLibraryPropertiesDialog_UI SpremiSave SoundLibraryPropertiesDialog_UISpremi promjene napravljene na instrumentima u zvu noj knji~nici3Save changes made to instruments into sound librarySoundLibraryPropertiesDialog_UI6Uredi postavke repositorijaEdit repository settingsSoundLibraryRepositoryDialog&Uredi popis serveraEdit server listSoundLibraryRepositoryDialogURLURLSoundLibraryRepositoryDialog DodajAddSoundLibraryRepositoryDialog_UI ObriaiDeleteSoundLibraryRepositoryDialog_UIDijalogDialogSoundLibraryRepositoryDialog_UI.Spremi zvu nu knji~nicuSave Sound LibrarySoundLibrarySaveDialog AutorAuthorSoundLibrarySaveDialog_UIOdustaniCancelSoundLibrarySaveDialog_UIDijalogDialogSoundLibrarySaveDialog_UIInformacije InformationSoundLibrarySaveDialog_UILicencaLicenseSoundLibrarySaveDialog_UIImeNameSoundLibrarySaveDialog_UI SpremiSave SoundLibrarySaveDialog_UI Zvu na knji~nica Sound librarySoundLibraryTreeDijalogDialogVirtualPatternDialog_UIOkOKVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.hr.ts000066400000000000000000006454001211146647700206520ustar00rootroot00000000000000 AboutDialog <b>Project page</b><br> <b>Stranica projekta</b><br> About O Programu <b>Main coder and mantainer:</b><br> <b>Glavni programer i održavatelj:</b><br> <b>Website</b><br> <b>Web stranica</b><br> <b>Mailing lists</b><br> <b>Mailing lista</b><br> AboutDialog_UI About Hydrogen Informacije o programu A&bout &Informacije o programu &Authors &Autori &License &Licenca &OK &OK Alt+O ### <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info Informacije o audio engine-u AudioEngineInfoForm_UI Playing notes Polifonia Process time Vrijeme izvođenja Audio engine state Stanje audio engine-a Song state Stanje pjesme Buffer size Veličina buffer-a Sample rate Frekvencija uzorka Song position Pozicija pjesme Patterns Uzorci Selected pattern Odabrani uzorak Selected instrument Odabrani instrument Connected to Konektiran na Form1 ### Frames Frejmovi Ticks Udarci Sampler Sampler Synth Synth Sequencer Sequencer MIDI input MIDI ulaz Name Ime Audio output Izlazni signal Realtime frames Stvarni framerate AudioFileBrowser Audio File Browser Pretraživač audio podataka Size: %1 bytes Veličina: %1 byte Samplerate: %1 Samplerate: %1 Sample length: Please do not preview samples which are longer than 10 minutes! Sample length: s Name: Ime: Size: Veličina: Samplerate: Frekvencija uzorka: AudioFileBrowser_UI Dialog Dijalog Open Otvori Name: Ime: Samplerate: Frekvencija uzorka: Size: Veličina: Length: Duljina: Cancel Otkaži Pla&y samples by clicking S&viraj uzorke klikajući na njih View hidden folders &Up &Gore &Home &Početak &Play Sample &Sviraj Uzorak &Filename to instrument name &Ime fajla koje odgovara imenu instrumenta &Stop S&tani Be careful, this change all Layer velocity settings Set automatic velocity Director Director Director_UI Dialog Dijalog DownloadWidget (%1/%2 KiB) - ETA %3 DrumkitManager_UI Form1 Load Podigni ### Drumkit author ### Autor seta bubnjeva Delete drumkit Izbriši set bubnjeva ### Drumkit name ### Ime seta bubnjeva ### Drumkit info ### Informacije o setu bubnjeva Load drumkit Podigni set bubnjeva Save Spremi Author Autor Info Informacije Drumkit name Ime seta bubnjeva Import Umetni Drumkit filename Ime seta bubnjeva Browse Pretraži <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b> Skini druge raspoložive setove bubnjeva na<br> http://www.hydrogen-music.org </b> ### The drumkit will be installed zncxbmzbxcmznxbcmz ### Set bubnjeva će biti instaliran Export Izbaci Drumkit directory Mjesto (na disku) seta bubnjeva ExportSongDialog Export song Izbaci pjesmu The file %1 exists. Overwrite the existing file? Export to a single track Export to seperate tracks Both ExportSongDialog_UI Export filename Ime fajla za export Export Whole Song to WAV Izbaci cijelu pjesmu u WAV obliku &Export &Izbaci &Browse... &Pretraži... Samplerate in Hz: 22050 22050 44100 44100 48000 48000 96000 96000 192000 192000 SampleDepth in Bit: 8 8 16 16 24 24 32 32 Templates: WAV in CD quality "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" &Close &Zatvori Alt+C Alt+E Alt+B Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off Efekti on/off Master output Glavni izlaz H2Core::SongEditorPanelBpmWidget BPM H2Core::SongEditorPanelTagWidget Tag H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties Karakteristike 'Zvučne knjižnice' &Ok &OK &Cancel &Otkaži This is not possible, you can only save changes inside instruments to the current loaded sound library To nije moguće, možeš spremiti promjene unutar instrumenta u samo trenutno otvorenoj 'zvučnoj knjižnici' Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Upozorenje! Mijenjanje imena seta bubnjeva će rezultirati stvaranjem novog seta bubnjeva s tim imenom. Jesi li siguran da to želiš napraviti? Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] Set bubnjeva učitan: [%1] Song Editor Editor pjesme Instrument + Pattern Mixer Mixer InstrumentEditor Show instrument properties Prikaži karakteristike instrumenta Show layers properties Prikaži karakteristike razine Stop the current playing instrument-note before trigger the next note sample. Layer gain Gain razine New instrument name Novo ime instrumenta Instrument gain Gain instrumenta Random pitch factor Faktor izmjene nivoa Filter Cutoff Filter Cutoff Filter resonance Filter rezonancija Attack Attack Decay Sustain Release Layer pitch (Coarse) Layer pitch (grezzo) Layer pitch (Fine) Layer pitch (Fine) General Generale Layers Auto-Stop-Note InstrumentLine Clear notes Obriši note Fill notes ... Fill all notes Fill 1/2 notes Fill 1/3 notes Fill 1/4 notes Fill 1/6 notes Fill 1/8 notes Randomize velocity Automatski mijenjaj iznos note Delete instrument Izbriši instrument Mute instrument Solo Solo InstrumentRack Show Instrument editor Prikaži uređivač instrumenta Instrument Instrument Show sound library Prikaži 'zvučnu knjižnicu' Sound library Zvučna knjižnica LadspaFXMixerLine Edit FX parameters Uredi FX parametre Ladspa FX name Ime LADSPA FX-a FX bypass Zaobiđi efekt(e) Effect return FX Return LadspaFXProperties Select FX Odaberi efekt [%1] LADSPA FX Properties [%1] LADSPA FX karakteristike LADSPA FX %1 Properties LADSPA FX karakteristike %1 No plugin Nema dodatka Activate Aktiviraj Deactivate Deaktiviraj Remove FX LadspaFXSelector Groups Grupe Stereo Stereo Mono Mono Not supported Nije podržano Select LADSPA FX Izaberi LADSPA efekt Recently Used Zadnje korišten Alphabetic List Lista po abecedi Categorized Razvrstano LadspaFXSelector_UI &Cancel &Otkaži &OK &OK Form1 Alt+C Alt+O ### fx label ### naziv efekta ### fx type ### vrsta efekta ### fx ID ### ID efekta 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Nome:</span></p></body></html> ### fx name 1 ### ime efekta 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Etichetta:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Tipo:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Autore:</span></p></body></html> ### FX maker 1 2 ### Autor efekta 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 ### copyright 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm &Save &Spremi &Discard Odbaci promje&ne Cancel Otkaži Error loading song. Neuspješno otvaranje pjesme. Hydrogen Ready. Hydrogen je spreman za rad. Hydrogen Song (*.h2song) Hydrogen pjesma (*.h2song) Save song Spremi pjesmu Open song Otvori pjesmu Export MIDI file Izbaci MIDI file Midi file (*.mid) MIDI file (*.mid) &New &Novo &Open &Otvori Open &Demo Otvori &demonstraciju Open &recent Otvori &posljednje Save &as... Spremi &kao... Export &MIDI file Izbaci &MIDI file &Preferences &Karakteristike &Quit &Izlaz Show &audio engine info Prikaži informacije &audio engine &User manual &Korisnički priručnik &About &Informacije The document contains unsaved changes. Do you want to save the changes? &Cancel &Otkaži Unknown audio driver Nepoznati audio driver Error starting audio driver Problem pri pokretanju drivera zvuka Jack driver: server shutdown Jack driver: server shutdown Jack driver: cannot activate client Jack driver: ne mogu aktivirati klijenta Jack driver: cannot connect output port Jack driver: ne mogu povezati izlaz Jack driver: error in port register Jack driver: greška u registraciji porta &Export song &Izbaci pjesmu De&bug &Debugiraj &Project &Projekt &Tools &Alati Director &Mixer &Mixer &Instrument Rack &Instrument Rack Print Objects Isprintaj objekte &Info &Informacije Song saved. Pjesma spremljena. Could not export pattern. Unknown error %1 nepoznata pogreška %1 Clear all instruments? Izbrisati sve instrumente? Ok Ok You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Koristiš verziju Hydrogena koja je još u razvoju, molimo te da nam pomogneš tako da nas izvjestiš o greškama ili daš svoj savjet na hydrogen-devel mailing listu.<br><br>Hvala! Could not save song. Neuspješno spremanje pjesme. Open &Pattern Otvori &uzorak Hydrogen Pattern (*.h2pattern) Hydrogen uzorak (*.h2pattern) Save Pattern as ... Spremi uzorak kao ... Pattern saved. Uzorak spremljen. Open Pattern Otvori uzorak Don't show this message anymore Nemoj više prikazivati ovu poruku Playlist: Set song No. %1 Playlist: Pjesma br. %1 Show &info Prikaži &informacije Expor&t pattern as... Iz&baci pattern kao... I&nstruments Instru&menti &Add instrument &Dodaj instrument &Clear all &Elimina tutti &Save library &Salva libreria &Export library &Esporta libreria Playlist &editor Playlist &editor &Import library &Importa libreria Info|About Song saved as. Pjesma spremljena kao. Playlist: Song No. %1 Playlist: Pjesma br. %1 Undo history &Undo menu Undo Redo Input mode Instrument Instrument Drumkit Report bug MasterMixerLine Set master volume [%1] Podesi glavnu glasnoću [%1] Swing Swing Humanize time Humaniziraj tempo Humanize velocity Humaniziraj intenzitet Set humanize time parameter [%1] Podesi parametar za humaniziranje tempa [%1] Set humanize velocity parameter [%1] Podesi parametar za humaniziranje raspona [%1] Set swing factor [%1] Swing faktor [%1] MidiTable press button to record midi event Event Događaj Param. Param. Action Poduzimanje Mixer Show FX panel Prikaži FX ploču Show instrument peaks Prikaži visinu točke instrumenta Show instrument peaks = On Prikaži visinu točke instrumenta = Aktivno Show instrument peaks = Off Prikaži visinu točke instrumenta = Neaktivno Set FX %1 level Postavi razinu FX-a %1 Set LADSPA FX ( %1 ) volume Postavi glasnoću LADSPA FX-a ( %1 ) MixerLine Play sample Suona sample Mute Escludi Solo Solo Pan Pan Instrument name (double click to edit) Nome strumento (doppio click per modificarne le proprietà) Set instrument volume [%1] Volume strumento [%1] Set instr. pan [%1] Pan strumento [%1] PatternEditorPanel Hear new notes Poslušaj nove note Hear new notes = On Poslušaj nove note = Aktivno Hear new notes = Off Poslušaj nove note = Neaktivno Pattern editor - %1 Uređivač uzorka - %1 Quantize keyboard/midi events to grid Kvantiziranje klavijatura/midi pokušaja u rešetku Quantize incoming keyboard/midi events = On Kvantiziranje nadolazećih klavijaturnih/midi sesija = Aktivno Quantize incoming keyboard/midi events = Off Kvantiziranje nadolazećih klavijaturnih/midi sesija = Neaktivno Is not possible to change the pattern size when playing. Nije moguće promijeniti veličinu uzorka za vrijeme trajanja preslušavanja. Select pattern size Izaberi veličinu uzorka Select grid resolution Odaberi veličinu rešetke destructive mode pre delete settings destructive mode post delete settings Show piano roll editor Zoom in Povećaj pogled Zoom out Smanji pogled NoteKey No pattern selected Nema izabranih uzoraka Select note properties Odaberni karakteristike note Velocity Frekvencija Pan Pan Show drum editor Cutoff Cutoff Resonance Rezonancija Lead and Lag 'Lead and Lag' Loaded Soundlibrary Otvorena zvučna knjižnica PatternFillDialog Fill with selected pattern Popuni odabranim uzorkom PatternFillDialog_UI &Fill &Popuni &Clear &Obriši To: K: From: Od: Cancel Otkaži OK Ok Form 1 Prva forma Alt+F Alt+C PatternPropertiesDialog Pattern properties Karakteristike uzorka %1#2 %1 PatternPropertiesDialog_UI &Cancel &Otkaži &OK &OK New Pattern Name Novo ime uzorka Form1 Alt+C Alt+O Pattern category Kategorija uzorka Pattern description PianoRollEditor Velocity Frekvencija Pan Pan Lead and Lag 'Lead and Lag' PlayerControl Song Mode Mod pjesme Playing. Svira. Stopped. Zaustavljeno. Song mode selected. Mod pjesme odabran. Pattern Mode Uzorak Mod Pattern mode selected. Uzorak Mod odabran. Jack-transport on/off Jack-transport uključen/isključen Jack-transport mode = On Jack-transport Mod = Uključen Jack-transport mode = Off Jack-transport Mod = Isključen New BPM value Nova vrijednost broja udaraca u minuti (BPM) Rewind Premotaj unazad Play/ Pause Reproduciraj/ Pauziraj Fast Forward Premotaj unaprijed Pause. Pauza. JACK-transport will work only with JACK driver. JACK-transport će funkcionirati samo sa JACK driverom. Loop song Ponavljaj pjesmu Loop song = On Ponavljaj pjesmu = Uključeno Loop song = Off Ponavljaj pjesmu = Isključeno Show mixer Prikaži mixer Stop Stani Mixer Mixer Show Instrument Rack Prikaži Rack Instrument rack Rack BeatCounter Panel on Ploča brojača udaraca uključena Record Destructive Record Set BPM / Set BPM and play Postavi BPM / Postavi BPM i reproduciraj Recalculate Rubberband modified samples if bpm will change Jack-Time-Master on/off Jack-Time-Master uključen/isključen Record midi events = On Record midi events = Off Destructive mode = Off Destructive mode = On BC Panel on Ploča brojača udaraca aktivan BC Panel off Ploča brojača udaraca neaktivan Count BPM and start PLAY Prebroji BPM i počni reprodukciju Count and set BPM Izbroji i postavi BPM Recalculate all samples using Rubberband ON Recalculate all samples using Rubberband OFF Jack-Time-Master mode = On Mod Jack-Time-Master = Uključen Jack-Time-Master mode = Off Mod Jack-Time-Master = Isključen Switch metronome on/off PlaylistDialog Song list Popis pjesama Script Skripta exec Script Izvrši skriptu Add Song to PlayList Dodaj pjesmu na plejlistu No Song selected! Nema izabrane pjesme! Load Playlist Učitaj plejlistu Hydrogen Playlist (*.h2playlist) Hydrogen Playlist (*.h2playlist) Save Playlist Spremi plejlistu No Song in List or no Song selected! Nema pjesme na popisu ili na plejlisti! Hydrogen Playlist (*.sh) Shell script (*.sh) Add Script to selected Song Dodaj skriptu na izabranu pjesmu No Script in use! Nema skripte u upotrebi! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Nije postavljen osnovni uređivač. Molim da ga odrediš Nemoj koristiti editor baziran na konzoli Nažalost, ovo trenutno neće funkcionirati. Set your Default Editor Postavi svoj osnovni uređivač No Script selected! Skripta nije odabrana! Error loading song. Pogreška kod učitavanja pjesme. sort sortiraj &Playlist Add song to Play&list Add &current song to Playlist &Remove selected song from Playlist &Open Playlist &Save Playlist Save Playlist &as &Scripts &Add Script to selected song &Edit selected Script &Remove selected Script &Create a new Script Rewind Premotaj unazad Play/ Pause/ Load selected song Stop Stani Fast Forward Premotaj unaprijed Please save your song first Hydrogen Scripts (*.sh) Shell Scripts (*.sh) New Script Nova skripta Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. Ime skripte ili njezina adresa sadrže razmake. VAŽNO Adresa skripte i njezino ime ne smiju sadržavati razmake. WARNING, the new file is executable by the owner of the file! No Script! Nema skripte! Pause. Pauza. Playlist Browser No song selected! Playlist: set song no. %1 no Script &New Playlist PlaylistDialog_UI PlayList Browser Pretraživač plejliste Song list Popis pjesama PreferencesDialog Slow Polako Normal Umjereno Fast Brzo Driver restart required. Restart driver? &Ok &Cancel <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Open Sound System</b><br>jednostavni audio driver [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">Nije kompajlirano</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver Preferences Postavke <b>ALSA Driver</b><br> <b>ALSA driver</b><br> <b>Automatic driver selection</b> <b>Automatsko odabiranje drivera</b> <b>PortAudio Driver</b><br> <b>PortAudio driver</b><br> <b>CoreAudio Driver</b><br> <b>CoreAudio driver</b><br> Please restart hydrogen to enable/disable LASH support Restartaj hydrogen kako bi se uključila/isključila LASH podrška PreferencesDialog_UI Buffer size Veličina privremenog spremnika Device Uređaj Input Ulaz Channel Kanal All Sve Meters falloff speed Falloff brzina Slow Sporo Normal Umjereno Fast Brzo Application font Font aplikacije Mixer font Font Mixera Select font Odaberi font <i>After a font change the application must be restarted.</i> <i>Nakon promjene fonta aplikacija mora biti restartana.</i> Polyphony Polifonija Style Stil &Cancel &Otkaži &OK &OK &General O&pčenito Audio &System &Audio Sustav Metronome volume Glasnoća metronoma Connect to &Default Output Pair Poveži se na osnovnu &izlaznu paricu &Midi System &Midi sustav Midi driver Midi driver Ignore note-off Ignoriraj note-off &Appearance &Izgled Form1 Alt+C Alt+O &Reopen last used song &Ponovno otvori zadnje korištenu pjesmu Alt+R Path to the Rubberband command-line utility Maximum number of bars &Reopen last used playlist ### ### Sample rate Frekvencija uzorka 44100 48000 88200 96000 Alt+D create per-instrument outputs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Restart output Restartaj izlaz Audio output details Detalji zvučnog izlaza Post-Fader Pre-Fader Track output Izlaz trake Use lash Koristi LASH first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm Prvo, namjesti vrijeme nepodudaranja signala latencije između kontrolera/klavijature i izračunatog BPM Beat counter drift compensation in 1/10 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup Beat counter start offset in ms Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? &Ok &Cancel Close dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditor_UI Dialog Dijalog P&lay original sample &Apply Changes &Close &Zatvori Adjust sample start frame Adjust sample loop begin frame set processing forward reverse pingpong loops Adjust sample end & loop end frame Sample length to beat: off 1/64 1/64 1/32 1/32 1/16 1/16 1/8 1/8 1/4 1/4 1/2 1/2 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 Pitch the sample in semitones, cents Crispness: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 0 &Play new sample length: fade-out type volume panorama Start Loop <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. Pitch (Semitone,Cent) SimpleHTMLBrowser Manual Priručnik Welcome to Hydrogen Dobrodošli u Hydrogen Don't show this message anymore Nemoj više nikad prikazivati ovu obavijest Ok Ok Documentation index Dokumentacija kazala pojmova SongEditorPanel Create new pattern Kreiraj novi uzorak Move the selected pattern down Pomakni dolje odabrani uzorak Move the selected pattern up Pomakni gore odabrani uzorak Clear pattern sequence Obriši sekvencu uzoraka Song Editor Editor pjesme Enable time line edit Select mode Odaberi Mod Draw mode Crtački Mod Pattern %1 Warning, this will erase your pattern sequence. Are you sure? Pozor, ovo će obrisati sekvencu uzoraka. Da li to želiš napraviti? &Ok &Ok &Cancel &Otkaži stacked mode Skupni Mod stacked pattern mode Skupni Mod uzorka single pattern mode Pojedinačni Mod uzoraka not_categorized Nije kategorizirano SongEditorPanelBpmWidget_UI Form Edit the bpm value for current beat 500,55 500,55 Edit beat in timeline 500 500 Bar BPM Delete this BPM Marker Delete BPM Marker Cancel Ok Ok SongEditorPanelTagWidget_UI Form Tag Cancel Ok Ok SongEditorPatternList Copy Kopiraj Delete Izbriši Properties Karakteristike The pattern-file exists. Overwrite the existing pattern? &Ok &Cancel Pattern 1 not_categorized Nije kategorizirano Fill/Clear ... Popuni/Obriši ... Save Pattern Spremi uzorak Load Pattern Učitaj uzorak Virtual Pattern Open Pattern Otvori uzorak Hydrogen Pattern (*.h2pattern) Hydrogen Pattern (*.h2pattern) Export Pattern SongPropertiesDialog Song properties Karakteristike pjesme SongPropertiesDialog_UI Notes Note Author Autor Song name Ime pjesme &Cancel &Otkaži &OK &Ok Form1 Alt+O Alt+C License Licenca SoundLibraryExportDialog Export Sound Library Izbaci zvučnu knjižnicu Directory SoundLibraryExportDialog_UI Dialog Browse Pretražuj Export Izbaci SoundLibraryImportDialog Sound Library import Ubaci zvučnu knjižnicu Sound library Zvučna knjižnica Status Status Updating SoundLibrary list... Osvježavanje zvučne knjižnice... Installed Instalirano New Novo Author: %1 Autor: %1 Downloading SoundLibrary... Skidanje zvučne knjižnice... Import drumkit Umetni set bubnjeva SoundLibrary imported in %1 Zvučna knjižnica umetnuta u %1 An error occurred importing the SoundLibrary. Došlo je do pogreške pri ubacivanju zvučne knjižnice. Drumkits Setovi bubnjeva Songs Pjesme Patterns Uzorci License: %1 Licenca: %1 SoundLibraryImportDialog_UI Dialog Internet Internet Update list Osvježi popis Sound Library Name Ime zvučne knjižnice Sound library Info Informacije o zvučnoj knjižnici Author... Autor... Download and install Skini i instaliraj Local file Lokalni fajl Browse... Pretražuj... Install Instaliraj 1 1 License... Licenca... Edit server list Uredi server listu Close Zatvori SoundLibraryPanel Load Učitaj Export Izbaci Delete Obriši System drumkits Setovi bubnjeva iz sustava User drumkits Korisnički setovi bubnjeva &Ok &OK &Cancel &Odustani Songs Pjesme Patterns Uzorci Error loading song. Pogreška pri učitavanju pjesme. Properties Karakteristike Warning, the selected pattern will be deleted from disk. Are you sure? Pozor, odabrani uzorak će biti izbrisan. Potvrdi brisanje! It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Dijalog Name Ime Author Autor Information Informacije License Licenca Save Spremi Cancel Otkaži Save changes made to instruments into sound library Spremi promjene napravljene na instrumentima u zvučnoj knjižnici SoundLibraryRepositoryDialog Edit repository settings Uredi postavke repositorija Edit server list Uredi popis servera URL URL SoundLibraryRepositoryDialog_UI Dialog Dijalog Add Dodaj Delete Obriši SoundLibrarySaveDialog Save Sound Library Spremi zvučnu knjižnicu Please supply at least a valid name Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Dijalog Name Ime Author Autor Information Informacije Cancel Odustani License Licenca Save Spremi SoundLibraryTree Sound library Zvučna knjižnica VirtualPatternDialog Select virtual pattern VirtualPatternDialog_UI Dialog Dijalog OK Ok Cancel hydrogen-0.9.6-beta3/data/i18n/hydrogen.hu_HU.qm000066400000000000000000000344571211146647700212440ustar00rootroot00000000000000t=x  -23u*h9(-bb-Ab1b3IU.II>II+I+I2?I3PI3nKn.H,,[,0J,2ϕ&(vv.v0؃o "o+Pls ^vV58[|)V|#\V|'W^*ak2 pr` ȿE)D[U*m0֣,֣1 DJ/r'O44= V^_a.f s P$oo&1$&lc33/31o%; S +s'h @e/ Cn w N T% ?( 3 J c a $ $0 %+^ gn ' =\ =% 54 C' w # 9 $ yE% < i ӽ^)N$RG^j,mew>"j|Xd.aN!.st`*ayd/i4 "<b>Honlap</b><br>Project page
     AboutDialogNvjegyAbout AboutDialog,Hangeszkz informcikAudio Engine InfoAudioEngineInfoForm.Hang meghajtk llapotaAudio engine stateAudioEngineInfoForm_UIBuffermret Buffer sizeAudioEngineInfoForm_UIKeretekFramesAudioEngineInfoForm_UIMotvumokPatternsAudioEngineInfoForm_UI*Hangjegyek lejtszsa Playing notesAudioEngineInfoForm_UI Feldolgozsi idQ Process timeAudioEngineInfoForm_UIMintavtel Sample rateAudioEngineInfoForm_UI*Kivlasztott hangszerSelected instrumentAudioEngineInfoForm_UI(Kivlasztott motvumSelected patternAudioEngineInfoForm_UISzm pozcija Song positionAudioEngineInfoForm_UISzm llapota Song stateAudioEngineInfoForm_UI LetsTicksAudioEngineInfoForm_UI MgsemCancelAudioFileBrowser_UI SzerzQAuthorDrumkitManager_UI TallzBrowseDrumkitManager_UI"Dobszerk trlseDelete drumkitDrumkitManager_UI$Dobszerk knyvtrDrumkit directoryDrumkitManager_UI&Dobszerk fjl neveDrumkit filenameDrumkitManager_UIDobszerk neve Drumkit nameDrumkitManager_UIExportlsExportDrumkitManager_UIImportlsImportDrumkitManager_UIRvid lersInfoDrumkitManager_UIBetltsLoadDrumkitManager_UI&Dobszerk betltse Load drumkitDrumkitManager_UI MentsSaveDrumkitManager_UI Szm exportlsa Export songExportSongDialogExport fjlnvExport filenameExportSongDialog_UIFX be/ki FX on/off FxMixerLineMaster kimenet Master output FxMixerLine0Dobszerk betltve: [%1]Drumkit loaded: [%1] HydrogenApp KeverQMixer HydrogenAppSzmszerkesztQ Song Editor HydrogenAppltalnosGeneralInstrumentEditor SzlSoloInstrumentLine:Effekt paramterek mdostsaEdit FX parametersLadspaFXMixerLineBekapcsolsActivateLadspaFXPropertiesKikapcsols DeactivateLadspaFXProperties<LADSPA %1 effekt tulajdonsgaiLADSPA FX %1 PropertiesLadspaFXPropertiesNincs plugin No pluginLadspaFXPropertiesKivlaszts Select FXLadspaFXProperties@[%1] LADSPA Effekt tulajdonsgai[%1] LADSPA FX PropertiesLadspaFXPropertiesCsoportokGroupsLadspaFXSelectorMonMonoLadspaFXSelectorNem tmogatott Not supportedLadspaFXSelector4LADSPA effekt kivlasztsaSelect LADSPA FXLadspaFXSelectorSztereStereoLadspaFXSelectorMainForm&Eldobs&DiscardMainForm&Ments&SaveMainForm MgsemCancelMainForm:A szmot nem lehet betlteni.Error loading song.MainForm8Audi meghajt indtsi hibaError starting audio driverMainForm$Exportls MIDI-beExport MIDI fileMainFormHydrogen ksz.Hydrogen Ready.MainForm0Hydrogen szm (*.h2song)Hydrogen Song (*.h2song)MainFormJJack meghajt: kliens nem aktivlhat#Jack driver: cannot activate clientMainFormfJack meghajt: nem sikerl csatlakozni a kimenethez'Jack driver: cannot connect output portMainFormNJack meghajt: hiba a port regiszterben#Jack driver: error in port registerMainForm@Jack meghajt: kiszolgl lelltJack driver: server shutdownMainFormSzm megnyitsa Open songMainForm*Objektumok nyomtatsa Print ObjectsMainFormSzm mentse Save songMainForm2Ismeretlen audi meghajtUnknown audio driverMainForm&Master hangerQ [%1]Set master volume [%1]MasterMixerLineEffekt %1 szintSet FX %1 level Mixer<LADSPA ( %1 ) effekt hangerejeSet LADSPA FX ( %1 ) volumeMixerfHangszer neve (dupla kattintssal megvltoztathat)&Instrument name (double click to edit) MixerLine NmtMute MixerLineBalanszPan MixerLine Minta lejtszsa Play sample MixerLineJ[%1] hangszer hangerejnek belltsaSet instrument volume [%1] MixerLine SzlSolo MixerLine.Lejtsza az j hangokatHear new notesPatternEditorPanel:Lejtsza az j hangokat = NemHear new notes = OffPatternEditorPanel<Lejtsza az j hangokat = IgenHear new notes = OnPatternEditorPanelBalanszPanPatternEditorPanel6Motvumok szerkesztse - %1Pattern editor - %1PatternEditorPanelHEsemnyek illesztse a hlhoz = Nem,Quantize incoming keyboard/midi events = OffPatternEditorPanelJEsemnyek illesztse a hlhoz = Igen+Quantize incoming keyboard/midi events = OnPatternEditorPanel<Esemnyek illesztse a hlhoz%Quantize keyboard/midi events to gridPatternEditorPanel MgsemCancelPatternFillDialog_UI*Motvum tulajdonsgaiPattern propertiesPatternPropertiesDialogBalanszPanPianoRollEditor0Jack-transport mode = KiJack-transport mode = Off PlayerControl0Jack-transport mode = BeJack-transport mode = On PlayerControl(Jack-transport Be/KiJack-transport on/off PlayerControl KeverQMixer PlayerControlMotvum md Pattern Mode PlayerControl6Motvum mdot vlasztottad.Pattern mode selected. PlayerControlLejtszs.Playing. PlayerControl KeverQ Show mixer PlayerControlSzm md Song Mode PlayerControl0Szm mdot vlasztottad.Song mode selected. PlayerControllljStop PlayerControlMegllt.Stopped. PlayerControl:A szmot nem lehet betlteni.Error loading song.PlaylistDialoglljStopPlaylistDialog<b>Jack Audio Connection Kit Driver</b><br>Kis ksleltetsq audio meghajtCJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialog|<b>Open Sound System</b><br>Egyszerq audio meghajt [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialogh<br><b><font color="red">Nincs lefordtva</font></b>0
    Not compiledPreferencesDialog GyorsFastPreferencesDialog NormlNormalPreferencesDialogBelltsok PreferencesPreferencesDialog LassSlowPreferencesDialog<i>Az j bettpusok a program jraindtst kvetQen lpnek letbe</i>=After a font change the application must be restarted.PreferencesDialog_UI sszesAllPreferencesDialog_UI*Alkalmazs bettpusaApplication fontPreferencesDialog_UIBuffermret Buffer sizePreferencesDialog_UICsatornaChannelPreferencesDialog_UI EszkzDevicePreferencesDialog_UI GyorsFastPreferencesDialog_UIBemenetInputPreferencesDialog_UI<Cscsindiktor essi sebessgeMeters falloff speedPreferencesDialog_UIMidi meghajt Midi driverPreferencesDialog_UI"KeverQ bettpusa Mixer fontPreferencesDialog_UI NormlNormalPreferencesDialog_UIPolifnia PolyphonyPreferencesDialog_UIMitavtel Sample ratePreferencesDialog_UI,Bettpus kivlasztsa Select fontPreferencesDialog_UI LassSlowPreferencesDialog_UI StlusStylePreferencesDialog_UIKziknyvManualSimpleHTMLBrowserMotvum trlseClear pattern sequenceSongEditorPanelj motvumCreate new patternSongEditorPanel2Kijellt lefel mozgatsaMove the selected pattern downSongEditorPanel4Kijellt felfel mozgatsaMove the selected pattern upSongEditorPanelSzmszerkesztQ Song EditorSongEditorPanel MgsemCancelSongEditorPanelBpmWidget_UI MgsemCancelSongEditorPanelTagWidget_UIMsolsCopySongEditorPatternList TrlsDeleteSongEditorPatternListTulajdonsgok PropertiesSongEditorPatternList$Szm tulajdonsgaiSong propertiesSongPropertiesDialog SzerzQAuthorSongPropertiesDialog_UI JogokLicenseSongPropertiesDialog_UIHangjegyekNotesSongPropertiesDialog_UISzm cme Song nameSongPropertiesDialog_UI TallzBrowseSoundLibraryExportDialog_UIExportlsExportSoundLibraryExportDialog_UISzerzQ: %1 Author: %1SoundLibraryImportDialog*Dobszerk importlsaImport drumkitSoundLibraryImportDialogjNewSoundLibraryImportDialogMotvumokPatternsSoundLibraryImportDialogTallz... Browse...SoundLibraryImportDialog_UI TrlsDeleteSoundLibraryPanel:A szmot nem lehet betlteni.Error loading song.SoundLibraryPanelExportlsExportSoundLibraryPanelBetltsLoadSoundLibraryPanelMotvumokPatternsSoundLibraryPanelTulajdonsgok PropertiesSoundLibraryPanel SzerzQAuthorSoundLibraryPropertiesDialog_UI MgsemCancelSoundLibraryPropertiesDialog_UI JogokLicenseSoundLibraryPropertiesDialog_UI TrlsDeleteSoundLibraryRepositoryDialog_UI SzerzQAuthorSoundLibrarySaveDialog_UI MgsemCancelSoundLibrarySaveDialog_UI JogokLicenseSoundLibrarySaveDialog_UI MgsemCancelVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.hu_HU.ts000066400000000000000000006424641211146647700212600ustar00rootroot00000000000000 AboutDialog About Névjegy <b>Project page</b><br> <b>Honlap</b><br> <b>Website</b><br> <b>Mailing lists</b><br> <b>Main coder and mantainer:</b><br> AboutDialog_UI About Hydrogen &OK Alt+O A&bout ### &Authors &License <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info Hangeszköz információk AudioEngineInfoForm_UI Sample rate Mintavétel Buffer size Bufferméret Audio engine state Hang meghajtók állapota Playing notes Hangjegyek lejátszása Process time Feldolgozási idő Song position Szám pozíciója Patterns Motívumok Song state Szám állapota Frames Keretek Ticks Leütés Selected pattern Kiválasztott motívum Selected instrument Kiválasztott hangszer Form1 ### Connected to Sampler Synth Sequencer MIDI input Name Audio output Realtime frames AudioFileBrowser Audio File Browser Size: %1 bytes Samplerate: %1 s Name: Size: Samplerate: Sample length: Please do not preview samples which are longer than 10 minutes! Sample length: AudioFileBrowser_UI Dialog Open Name: Samplerate: Size: Length: Cancel Mégsem Pla&y samples by clicking &Up &Home &Play Sample &Filename to instrument name &Stop View hidden folders Be careful, this change all Layer velocity settings Set automatic velocity Director Director Director_UI Dialog DownloadWidget (%1/%2 KiB) - ETA %3 DrumkitManager_UI Load Betöltés Load drumkit Dobszerkó betöltése Delete drumkit Dobszerkó törlése Save Mentés Author Szerző Info Rövid leírás Drumkit name Dobszerkó neve Import Importálás Browse Tallóz Drumkit filename Dobszerkó fájl neve Export Exportálás Drumkit directory Dobszerkó könyvtár Form1 ### Drumkit author ### Drumkit name ### Drumkit info <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> ### The drumkit will be installed zncxbmzbxcmznxbcmz ExportSongDialog Export song Szám exportálása The file %1 exists. Overwrite the existing file? Export to a single track Export to seperate tracks Both ExportSongDialog_UI Export filename Export fájlnév Export Whole Song to WAV &Close Alt+C &Export Alt+E &Browse... Alt+B Samplerate in Hz: 22050 44100 48000 96000 192000 SampleDepth in Bit: 8 16 24 32 Templates: WAV in CD quality "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off FX be/ki Master output Master kimenet H2Core::SongEditorPanelBpmWidget BPM H2Core::SongEditorPanelTagWidget Tag H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties &Ok &Cancel This is not possible, you can only save changes inside instruments to the current loaded sound library Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] Dobszerkó betöltve: [%1] Song Editor Számszerkesztő Instrument + Pattern Mixer Keverő InstrumentEditor Random pitch factor Filter Cutoff Filter resonance Attack Decay Sustain Release Instrument gain Layer gain Layer pitch (Coarse) Layer pitch (Fine) Show instrument properties Show layers properties New instrument name General Általános Layers Stop the current playing instrument-note before trigger the next note sample. Auto-Stop-Note InstrumentLine Clear notes Randomize velocity Delete instrument Fill notes ... Fill all notes Fill 1/2 notes Fill 1/3 notes Fill 1/4 notes Fill 1/6 notes Fill 1/8 notes Mute instrument Solo Szóló InstrumentRack Show Instrument editor Instrument Show sound library Sound library LadspaFXMixerLine Edit FX parameters Effekt paraméterek módosítása FX bypass Ladspa FX name Effect return LadspaFXProperties Select FX Kiválasztás Activate Bekapcsolás [%1] LADSPA FX Properties [%1] LADSPA Effekt tulajdonságai Deactivate Kikapcsolás LADSPA FX %1 Properties LADSPA %1 effekt tulajdonságai No plugin Nincs plugin Remove FX LadspaFXSelector Select LADSPA FX LADSPA effekt kiválasztása Groups Csoportok Stereo Sztereó Mono Monó Not supported Nem támogatott Recently Used Alphabetic List Categorized LadspaFXSelector_UI Form1 &Cancel Alt+C &OK Alt+O ### fx label ### fx type ### fx ID 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> ### fx name 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> ### FX maker 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm Error loading song. A számot nem lehet betölteni. Hydrogen Ready. Hydrogen kész. Export MIDI file Exportálás MIDI-be Print Objects Objektumok nyomtatása &Save &Mentés &Discard &Eldobás Cancel Mégsem Hydrogen Song (*.h2song) Hydrogen szám (*.h2song) Save song Szám mentése Open song Szám megnyitása Unknown audio driver Ismeretlen audió meghajtó Error starting audio driver Audió meghajtó indítási hiba Jack driver: server shutdown Jack meghajtó: kiszolgáló leállt Jack driver: cannot activate client Jack meghajtó: kliens nem aktiválható Jack driver: cannot connect output port Jack meghajtó: nem sikerül csatlakozni a kimenethez Jack driver: error in port register Jack meghajtó: hiba a port regiszterben &Project &New &Open Open &Demo Open &recent Save &as... Export &MIDI file &Export song &Quit &Tools &Mixer &Instrument Rack &Preferences De&bug Show &audio engine info &Info &User manual &About &Cancel Song saved. Midi file (*.mid) Unknown error %1 Clear all instruments? Ok You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Could not save song. Open &Pattern Hydrogen Pattern (*.h2pattern) Save Pattern as ... Pattern saved. Open Pattern Don't show this message anymore Playlist: Set song No. %1 Show &info Expor&t pattern as... I&nstruments &Add instrument &Clear all &Save library &Export library Playlist &editor &Import library Info|About Song saved as. Playlist: Song No. %1 Could not export pattern. The document contains unsaved changes. Do you want to save the changes? Director Undo history &Undo menu Undo Redo Input mode Instrument Drumkit Report bug MasterMixerLine Set master volume [%1] Master hangerő [%1] Humanize velocity Humanize time Swing Set humanize time parameter [%1] Set humanize velocity parameter [%1] Set swing factor [%1] MidiTable Event Param. Action press button to record midi event Mixer Set FX %1 level Effekt %1 szint Set LADSPA FX ( %1 ) volume LADSPA ( %1 ) effekt hangereje Show FX panel Show instrument peaks Show instrument peaks = On Show instrument peaks = Off MixerLine Play sample Minta lejátszása Mute Némít Solo Szóló Pan Balansz Instrument name (double click to edit) Hangszer neve (dupla kattintással megváltoztatható) Set instrument volume [%1] [%1] hangszer hangerejének beállítása Set instr. pan [%1] PatternEditorPanel Hear new notes Lejátsza az új hangokat Quantize keyboard/midi events to grid Események illesztése a hálóhoz Pattern editor - %1 Motívumok szerkesztése - %1 Hear new notes = On Lejátsza az új hangokat = Igen Hear new notes = Off Lejátsza az új hangokat = Nem Quantize incoming keyboard/midi events = On Események illesztése a hálóhoz = Igen Quantize incoming keyboard/midi events = Off Események illesztése a hálóhoz = Nem Select pattern size Select grid resolution Zoom in Zoom out No pattern selected Is not possible to change the pattern size when playing. Select note properties Velocity Pan Balansz Cutoff Resonance Lead and Lag Loaded Soundlibrary NoteKey destructive mode pre delete settings destructive mode post delete settings Show piano roll editor Show drum editor PatternFillDialog Fill with selected pattern PatternFillDialog_UI Cancel Mégsem Form 1 &Fill Alt+F &Clear Alt+C From: To: OK PatternPropertiesDialog Pattern properties Motívum tulajdonságai %1#2 %1 PatternPropertiesDialog_UI Form1 &Cancel Alt+C &OK Alt+O New Pattern Name Pattern category Pattern description PianoRollEditor Velocity Pan Balansz Lead and Lag PlayerControl Stop Állj Song Mode Szám mód Pattern Mode Motívum mód Jack-transport on/off Jack-transport Be/Ki Playing. Lejátszás. Stopped. Megállt. Song mode selected. Szám módot választottad. Pattern mode selected. Motívum módot választottad. Jack-transport mode = On Jack-transport mode = Be Jack-transport mode = Off Jack-transport mode = Ki Show mixer Keverő Rewind Play/ Pause Fast Forward Loop song Mixer Keverő Show Instrument Rack Instrument rack Pause. JACK-transport will work only with JACK driver. New BPM value Loop song = On Loop song = Off BeatCounter Panel on Set BPM / Set BPM and play Jack-Time-Master on/off BC Panel on BC Panel off Count BPM and start PLAY Count and set BPM Jack-Time-Master mode = On Jack-Time-Master mode = Off Record Destructive Record Record midi events = On Record midi events = Off Destructive mode = Off Destructive mode = On Recalculate Rubberband modified samples if bpm will change Recalculate all samples using Rubberband ON Recalculate all samples using Rubberband OFF Switch metronome on/off PlaylistDialog Song list Script exec Script Add Song to PlayList No Song selected! Load Playlist Hydrogen Playlist (*.h2playlist) Save Playlist No Song in List or no Song selected! Hydrogen Playlist (*.sh) Add Script to selected Song No Script in use! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Set your Default Editor No Script selected! Error loading song. A számot nem lehet betölteni. sort Hydrogen Scripts (*.sh) New Script Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. No Script! &Playlist Add song to Play&list Add &current song to Playlist &Remove selected song from Playlist &Open Playlist &Save Playlist Save Playlist &as &Scripts &Add Script to selected song &Edit selected Script &Remove selected Script &Create a new Script Rewind Play/ Pause/ Load selected song Stop Állj Fast Forward Please save your song first WARNING, the new file is executable by the owner of the file! Pause. Playlist Browser No song selected! Playlist: set song no. %1 no Script &New Playlist PlaylistDialog_UI PlayList Browser Song list PreferencesDialog Preferences Beállítások Slow Lassú Normal Normál Fast Gyors <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Open Sound System</b><br>Egyszerű audio meghajtó [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">Nincs lefordítva</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Jack Audio Connection Kit Driver</b><br>Kis késleltetésű audio meghajtó <b>Automatic driver selection</b> <b>ALSA Driver</b><br> <b>PortAudio Driver</b><br> <b>CoreAudio Driver</b><br> Please restart hydrogen to enable/disable LASH support Driver restart required. Restart driver? &Ok &Cancel PreferencesDialog_UI Polyphony Polifónia Device Eszköz Buffer size Bufferméret Sample rate Mitavétel Input Bemenet Channel Csatorna All Összes Application font Alkalmazás betütípusa Style Stílus Select font Betütípus kiválasztása Slow Lassú Normal Normál Fast Gyors Mixer font Keverő betütípusa Meters falloff speed Csúcsindikátor esési sebessége <i>After a font change the application must be restarted.</i> <i>Az új betütípusok a program újraindítását követően lépnek életbe</i> Midi driver Midi meghajtó Form1 &Cancel Alt+C &OK Alt+O &General &Reopen last used song Alt+R Audio &System ### 44100 48000 88200 96000 Connect to &Default Output Pair Alt+D Metronome volume &Midi System Ignore note-off 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 &Appearance Restart output Audio output details Post-Fader Pre-Fader Track output Use lash first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm Beat counter drift compensation in 1/10 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup Beat counter start offset in ms create per-instrument outputs Path to the Rubberband command-line utility Maximum number of bars &Reopen last used playlist Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? &Ok &Cancel Close dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditor_UI Dialog P&lay original sample &Apply Changes &Close Adjust sample start frame Adjust sample loop begin frame set processing forward reverse pingpong loops Adjust sample end & loop end frame &Play new sample length: fade-out type volume panorama Sample length to beat: off 1/64 1/32 1/16 1/8 1/4 1/2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Pitch the sample in semitones, cents Crispness: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 Start Loop <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. Pitch (Semitone,Cent) SimpleHTMLBrowser Manual Kézikönyv Welcome to Hydrogen Don't show this message anymore Ok Documentation index SongEditorPanel Song Editor Számszerkesztő Create new pattern Új motívum Move the selected pattern down Kijelölt lefelé mozgatása Move the selected pattern up Kijelölt felfelé mozgatása Clear pattern sequence Motívum törlése Select mode Draw mode Warning, this will erase your pattern sequence. Are you sure? &Ok &Cancel stacked mode stacked pattern mode single pattern mode not_categorized Enable time line edit Pattern %1 SongEditorPanelBpmWidget_UI Form Edit the bpm value for current beat 500,55 Edit beat in timeline 500 Bar BPM Delete this BPM Marker Delete BPM Marker Cancel Mégsem Ok SongEditorPanelTagWidget_UI Form Tag Cancel Mégsem Ok SongEditorPatternList Copy Másolás Delete Törlés Properties Tulajdonságok Fill/Clear ... Save Pattern Load Pattern Open Pattern Hydrogen Pattern (*.h2pattern) Virtual Pattern Pattern 1 not_categorized The pattern-file exists. Overwrite the existing pattern? &Ok &Cancel Export Pattern SongPropertiesDialog Song properties Szám tulajdonságai SongPropertiesDialog_UI Song name Szám címe Author Szerző Notes Hangjegyek Form1 &OK Alt+O &Cancel Alt+C License Jogok SoundLibraryExportDialog Export Sound Library Directory SoundLibraryExportDialog_UI Dialog Browse Tallóz Export Exportálás SoundLibraryImportDialog Sound Library import Sound library Status Updating SoundLibrary list... Installed New Új Author: %1 Szerző: %1 Downloading SoundLibrary... Import drumkit Dobszerkó importálása SoundLibrary imported in %1 An error occurred importing the SoundLibrary. Drumkits Songs Patterns Motívumok License: %1 SoundLibraryImportDialog_UI Dialog Internet Update list Sound Library Name Sound library Info Author... Download and install Local file Browse... Tallóz... Install 1 License... Edit server list Close SoundLibraryPanel Load Betöltés Export Exportálás Delete Törlés System drumkits User drumkits &Ok &Cancel Songs Patterns Motívumok Error loading song. A számot nem lehet betölteni. Properties Tulajdonságok Warning, the selected pattern will be deleted from disk. Are you sure? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Name Author Szerző Information License Jogok Save Cancel Mégsem Save changes made to instruments into sound library SoundLibraryRepositoryDialog Edit repository settings Edit server list URL SoundLibraryRepositoryDialog_UI Dialog Add Delete Törlés SoundLibrarySaveDialog Save Sound Library Please supply at least a valid name Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Name Author Szerző Information Cancel Mégsem License Jogok Save SoundLibraryTree Sound library VirtualPatternDialog Select virtual pattern VirtualPatternDialog_UI Dialog OK Cancel Mégsem hydrogen-0.9.6-beta3/data/i18n/hydrogen.it.qm000066400000000000000000002361361211146647700206460ustar00rootroot00000000000000ueȹg'%pUey4|[F#  >~~el4+66o=xAbf3p(&r>q^<@.f{ "%}k+)$+cDOLS0mDmDXuj\/*7"[v<l{tlR_7O7&9#ڍXQE%(9<?AC9B2zIgT/[R3:bP,l,xAqA'z^3b,b Gbb!I3#U 0D¨"ƞIIqcIIIIII"I$Sndn (e4'E"fEbAA"ɷr,,6, ϕFWWWW hWrWXW MW"_W$ٯ*vv v#֏1؃ޱe?:7o2o7DlsB.v` f޵(6!0K&0KW5C8[|@fS}Jf~8NV|ȲV|PW^<[R3:mad+]eN hh~*h~jk2mE3pr`Av &zDn|VdE<qD7DtdݶȿD7g7< C Ȼ;AMHeo0^\y w(q{$ڦ)  "c.y >p)c @''zDU*v[R3:_pg4k}e~>#7D5n,}#?;U)hspR$֣֣=>-[!⪁P,J7rٵq En! bg!o#P F4y4=1V^O`~da.f,<h3Xs@EcD_~ oR=b>~W2o¯=Ro&<5gHݿr}W빆op{-Bۚ(13dW3d @{G.lEVQX[R3; $>#%lc>333m  P?$¸73Dۨ\t{1 S>h $T4 ){q +s' 3b6 @e Cn$l S%] XfP aOpi h> h>" v21 w-Xt wU  r=  ~7 ~T  V1 f 3 4B. = $e p 3i ~ TԒ Cؔ a X  #~d +Z$u 2   ? c@ FD ʧ9V j1 v: b<  a ~ ɺ / e% gD1 $m@ C 6L ̎G# $ %+^ > TY gn kJD x@# z l ~ BDs ?=# ?w o /"  C D ;$ s'm }m( '{ = =< 5O "U? & 2p` 5y? 5y 6- 6!\ @> B  C C5 FPJ \p `nf d@wf jz? w~ |v ~^  |> Ab#F / (u$ _ '|  v c a 9 w) $ 4m = =/ Gh'v SӲ iS yE {} F7 s 4)m R* <4  ͫҵ ͼ< 9nk ӽ^ $ q mm' 3KNv"B$Ru=oG[3;^jb ijemz qmejw>|}<&XdBE\[X'!Ǘ. @%@wG = !R"{.0 \=Щ.HL"aN!b ost`(4y>+e,Xqtkqޔkn$4yFdi%.<b>Mailing list</b><br>Mailing lists
     AboutDialogf<b>Sviluppatore principale e collaboratori:</b><br>$Main coder and mantainer:
     AboutDialog<<b>Pagina del progetto</b><br>Project page
     AboutDialog&<b>Sito web</b><br>Website
     AboutDialogInformazioni suAbout AboutDialog###AboutDialog_UI&Autori&AuthorsAboutDialog_UI&Licenza&LicenseAboutDialog_UI&OK&OKAboutDialog_UI &Informazioni suA&boutAboutDialog_UIInformazioni suAbout HydrogenAboutDialog_UIAlt+OAboutDialog_UI2Informazioni audio engineAudio Engine InfoAudioEngineInfoForm######AudioEngineInfoForm_UI$Stato engine audioAudio engine stateAudioEngineInfoForm_UIUscita audio Audio outputAudioEngineInfoForm_UI"Dimensione buffer Buffer sizeAudioEngineInfoForm_UIConnesso a Connected toAudioEngineInfoForm_UI Form1Form1AudioEngineInfoForm_UI FrameFramesAudioEngineInfoForm_UIIngresso MIDI MIDI inputAudioEngineInfoForm_UINomeNameAudioEngineInfoForm_UIPatternPatternsAudioEngineInfoForm_UIPolifonia Playing notesAudioEngineInfoForm_UI$Tempo elaborazione Process timeAudioEngineInfoForm_UI(Frame in tempo realeRealtime framesAudioEngineInfoForm_UI.Frequenza campionamento Sample rateAudioEngineInfoForm_UICampionatoreSamplerAudioEngineInfoForm_UI*Strumento selezionatoSelected instrumentAudioEngineInfoForm_UI&Pattern selezionatoSelected patternAudioEngineInfoForm_UISequencer SequencerAudioEngineInfoForm_UI"Posizione canzone Song positionAudioEngineInfoForm_UIStato canzone Song stateAudioEngineInfoForm_UISintetizzatoreSynthAudioEngineInfoForm_UITicTicksAudioEngineInfoForm_UI s sAudioFileBrowserBrowser AudioAudio File BrowserAudioFileBrowser Nome:Name:AudioFileBrowserZNon suonare campioni pi lunghi di 10 minuti!?Please do not preview samples which are longer than 10 minutes!AudioFileBrowser.Lunghezza del campione:Sample length:AudioFileBrowser.Lunghezza del campione:Sample length: AudioFileBrowserFrequenza: Samplerate:AudioFileBrowserFrequenza: %1Samplerate: %1AudioFileBrowserDimensione:Size:AudioFileBrowser&Dimensione: %1 byteSize: %1 bytesAudioFileBrowserZ&Rinomina il file con il nome dello strumento&Filename to instrument nameAudioFileBrowser_UI &Home&HomeAudioFileBrowser_UI&Suona Campione &Play SampleAudioFileBrowser_UI &Stop&StopAudioFileBrowser_UI&Su&UpAudioFileBrowser_UIAttenzione, stai per cambiare le impostazioni di velocit di tutti i Livelli4Be careful, this change all Layer velocity settings AudioFileBrowser_UIAnnullaCancelAudioFileBrowser_UIDialogoDialogAudioFileBrowser_UILunghezza:Length:AudioFileBrowser_UI Nome:Name:AudioFileBrowser_UIApriOpenAudioFileBrowser_UI8&Riproduci campioni al clickPla&y samples by clickingAudioFileBrowser_UIFrequenza: Samplerate:AudioFileBrowser_UIBImposta la velocit in automaticoSet automatic velocityAudioFileBrowser_UIDimensione:Size:AudioFileBrowser_UI0Mostra cartelle nascosteView hidden foldersAudioFileBrowser_UIDirettoreDirectorDirectorDialogoDialog Director_UI((%1/%2 Kib) - ETA %3(%1/%2 KiB) - ETA %3DownloadWidget$### Autore drumkit### Drumkit authorDrumkitManager_UI0### Informazioni drumkit### Drumkit infoDrumkitManager_UI ### Nome drumkit### Drumkit nameDrumkitManager_UIB### Il drumkit sar installato in4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b> Scarica drumkit aggiuntivi da<br> http://www.hydrogen-music.org </b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UI AutoreAuthorDrumkitManager_UI CercaBrowseDrumkitManager_UIElimina drumkitDelete drumkitDrumkitManager_UI,Directory destinazioneDrumkit directoryDrumkitManager_UI"Nome file drumkitDrumkit filenameDrumkitManager_UINome drumkit Drumkit nameDrumkitManager_UIEsportaExportDrumkitManager_UI Form1Form1DrumkitManager_UIImportaImportDrumkitManager_UIInformazioniInfoDrumkitManager_UIApriLoadDrumkitManager_UIApri drumkit Load drumkitDrumkitManager_UI SalvaSaveDrumkitManager_UIEntrambiBothExportSongDialogEsporta canzone Export songExportSongDialog<Esporta su una traccia singolaExport to a single trackExportSongDialog4Esporta in tracce separateExport to seperate tracksExportSongDialogfIl file %1 esiste. Sovrascrivere il file esistente?1The file %1 exists. Overwrite the existing file?ExportSongDialog&Cerca... &Browse...ExportSongDialog_UI&Chiudi&CloseExportSongDialog_UI&Esporta&ExportExportSongDialog_UI1616ExportSongDialog_UI 192000192000ExportSongDialog_UI 2205022050ExportSongDialog_UI2424ExportSongDialog_UI3232ExportSongDialog_UI 4410044100ExportSongDialog_UI 4800048000ExportSongDialog_UI88ExportSongDialog_UI 9600096000ExportSongDialog_UIRAIFF in qualit ADAT "48 kHz, 16 bit PCM")AIFF in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UINAIFF in qualit CD "41 kHz, 16 bit PCM"'AIFF in CD quality "41 kHz, 16 bit PCM"ExportSongDialog_UIZAIFF in qualit migliore "48 kHz, 24 bit PCM"+AIFF in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI Alt+BAlt+BExportSongDialog_UI Alt+CAlt+CExportSongDialog_UI Alt+EAlt+EExportSongDialog_UIDScegli il metodo di interpolazione$Choose type of interpolation methodeExportSongDialog_UI CosineCosineExportSongDialog_UI CubicoCubicExportSongDialog_UI0Abilita i cambi di tempoEnable tempo changingExportSongDialog_UIJAbilita il rubberband batch processor(Enable use of rubberband batch processorExportSongDialog_UILEsporta l'intera canzone come file WAVExport Whole Song to WAVExportSongDialog_UI2Filename per esportazioneExport filenameExportSongDialog_UIXFLAC non compresso di buona qualit "48 kHz"1FLAC lossless compressor in good quality "48 kHz"ExportSongDialog_UIHermiteHermiteExportSongDialog_UIInterpolazione:Interpolation: ExportSongDialog_UILineareLinearExportSongDialog_UIrOGG Vorbis senza perdita compresso in buona qualit "VBR"3OGG Vorbis loosely compressed in good quality "VBR"ExportSongDialog_UIRubberbad BatchRubberbad BatchExportSongDialog_UI&Definizione in Bit:SampleDepth in Bit:ExportSongDialog_UIRate in Hz:Samplerate in Hz:ExportSongDialog_UIModelli: Templates: ExportSongDialog_UI ThirdThirdExportSongDialog_UILinea BPM TimeLine BPMExportSongDialog_UI<WAV LOFI "22,05kHz, 8 bit PCM"WAV LOFI "22.05kHz, 8 bit PCM ExportSongDialog_UI`WAV in qualit best Mixdown "96 kHz, 32 bit PCM"-WAV best Mixdown quality "96 kHz, 32 bit PCM"ExportSongDialog_UIPWAV in qualit ADAT "48 kHz, 16 bit PCM"(WAV in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UIPWAV in qualit CD "44,1kHz, 16 bit PCM"(WAV in CD quality "44,1kHz, 16 bit PCM"ExportSongDialog_UIXWAV in qualit migliore "48 kHz, 24 bit PCM"*WAV in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI%1
    %2 KHz
    %3 %4 FileBrowser FX acceso/spento FX on/off FxMixerLine"Uscita principale Master output FxMixerLineBPMBPM H2Core::SongEditorPanelBpmWidgetTagTag H2Core::SongEditorPanelTagWidget&Annulla&Cancel$H2Core::SoundLibraryPropertiesDialog&OK&Ok$H2Core::SoundLibraryPropertiesDialog@Salvataggio del drumkit fallito.Saving of this drumkit failed.$H2Core::SoundLibraryPropertiesDialog$Propriet LibreriaSoundLibrary Properties$H2Core::SoundLibraryPropertiesDialogNon possibile, puoi salvare cambiamente solo per gli strumenti attualmente aggiunti alla libreria suonifThis is not possible, you can only save changes inside instruments to the current loaded sound library$H2Core::SoundLibraryPropertiesDialogAttenzione! Cambiare il nome del drumkit sar come creare un nuovo drumkit con lo stesso nome. Sei sicuro?fWarning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure?$H2Core::SoundLibraryPropertiesDialog,Drumkit caricato: [%1]Drumkit loaded: [%1] HydrogenApp&Strumento + PatternInstrument + Pattern HydrogenApp MixerMixer HydrogenApp"Editor di canzone Song Editor HydrogenApp AttackAttackInstrumentEditor:Ferma automaticamente la notaAuto-Stop-NoteInstrumentEditorDecayInstrumentEditor Filtro di taglio Filter CutoffInstrumentEditor&Filtro di risonanzaFilter resonanceInstrumentEditorGeneraleGeneralInstrumentEditor(Gain dello strumentoInstrument gainInstrumentEditorGain del layer Layer gainInstrumentEditor(Layer pitch (grezzo)Layer pitch (Coarse)InstrumentEditor$Layer pitch (Fine)Layer pitch (Fine)InstrumentEditorLayersInstrumentEditor4Nuovo nome dello strumentoNew instrument nameInstrumentEditor(Fattore random pitchRandom pitch factorInstrumentEditorReleaseInstrumentEditorNVisualizza le propriet dello strumentoShow instrument propertiesInstrumentEditorBVisualizza le propriet dei layerShow layers propertiesInstrumentEditorFerma la riproduzione della nota-strumento prima di riprodurre la prossima.MStop the current playing instrument-note before trigger the next note sample.InstrumentEditorSustainInstrumentEditorElimina note Clear notesInstrumentLine"Elimina strumentoDelete instrumentInstrumentLineRiempi 1/2 noteFill 1/2 notesInstrumentLineRiempi 1/3 noteFill 1/3 notesInstrumentLineRiempi 1/4 noteFill 1/4 notesInstrumentLineriempi 1/6 noteFill 1/6 notesInstrumentLineRiempi 1/8 noteFill 1/8 notesInstrumentLine(Riempi tutte le noteFill all notesInstrumentLineRiempi note ...Fill notes ...InstrumentLineMuto strumentoMute instrumentInstrumentLine Velocity casualeRandomize velocityInstrumentLineSoloSoloInstrumentLineStrumento InstrumentInstrumentRack.Mostra editor strumentoShow Instrument editorInstrumentRackMostra libreriaShow sound libraryInstrumentRackLIbreria Suoni Sound libraryInstrumentRack@Modifica parametri degli effettiEdit FX parametersLadspaFXMixerLine(Ritorno dell'effetto Effect returnLadspaFXMixerLineEscludi effetto FX bypassLadspaFXMixerLine&Nome effetto LADSPALadspa FX nameLadspaFXMixerLine AttivaActivateLadspaFXPropertiesDisattiva DeactivateLadspaFXProperties6Propriet effetto LADSPA %1LADSPA FX %1 PropertiesLadspaFXPropertiesNessun plugin No pluginLadspaFXPropertiesRimuove FX Remove FXLadspaFXProperties"Seleziona effetto Select FXLadspaFXProperties:[%1] Propriet effetto LADSPA[%1] LADSPA FX PropertiesLadspaFXProperties"Ordine alfabeticoAlphabetic ListLadspaFXSelector(Ordine per categoria CategorizedLadspaFXSelector GruppiGroupsLadspaFXSelectorMonoMonoLadspaFXSelectorNon supportato Not supportedLadspaFXSelectorRecenti Recently UsedLadspaFXSelector0Seleziona effetto LADSPASelect LADSPA FXLadspaFXSelector StereoStereoLadspaFXSelector,### Autore effetto 1 2### FX maker 1 2LadspaFXSelector_UI&### copyright 1 2 3### copyright 1 2 3LadspaFXSelector_UI### ID effetto ### fx IDLadspaFXSelector_UI*### etichetta effetto ### fx labelLadspaFXSelector_UI$### nome effetto 1 ### fx name 1LadspaFXSelector_UI ### tipo effetto ### fx typeLadspaFXSelector_UI&Annulla&CancelLadspaFXSelector_UI&OK&OKLadspaFXSelector_UI1LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html>

    Copyright:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html>

    ID:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Etichetta:</span></p></body></html>

    Label:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Autore:</span></p></body></html>

    Maker:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Nome:</span></p></body></html>

    Name:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Tipo:</span></p></body></html>

    Type:

    LadspaFXSelector_UIAlt+CLadspaFXSelector_UIAlt+OLadspaFXSelector_UIForm1LadspaFXSelector_UIMainForm Il documento contiene cambiamenti non salvati. Vuoi salvare i cambiamenti?I The document contains unsaved changes. Do you want to save the changes? MainForm &Informazioni su&AboutMainForm&&Aggiungi strumento&Add instrumentMainForm&Annulla&CancelMainForm&Elimina tutti &Clear allMainForm*Annulla le &modifiche&DiscardMainForm"&Esporta libreria&Export libraryMainForm&&Esporta la canzone &Export songMainForm"&Importa libreria&Import libraryMainForm&Informazioni&InfoMainForm&Rack Strumenti&Instrument RackMainForm &Mixer&MixerMainForm&Nuova canzone&NewMainForm &Apri&OpenMainForm&Preferenze &PreferencesMainForm&Progetto&ProjectMainForm &Esci&QuitMainForm &Salva&SaveMainForm&Salva libreria &Save libraryMainForm&Strumenti&ToolsMainForm&Indietro&UndoMainForm&Manuale utente &User manualMainFormAnnullaCancelMainForm<Eliminare tutti gli strumenti?Clear all instruments?MainFormDNon riesco a esportare il modello.Could not export pattern.MainForm8Salvataggio canzone fallito.Could not save song.MainForm &DebugDe&bugMainFormDirettoreDirectorMainFormBNon mostrare pi questo messaggioDon't show this message anymoreMainFormDrumkitDrumkitMainFormXErrore durante il caricamento della canzone.Error loading song.MainFormNErrore durante l'avvio del driver audioError starting audio driverMainForm0Espor&ta pattern come...Expor&t pattern as...MainForm$Esporta file &MIDIExport &MIDI fileMainForm"Esporta MIDI fileExport MIDI fileMainForm<Pattern Hydrogen (*.h2pattern)Hydrogen Pattern (*.h2pattern)MainFormPronto.Hydrogen Ready.MainForm6Canzone Hydrogen (*.h2song)Hydrogen Song (*.h2song)MainFormStrume&nti I&nstrumentsMainFormModo input Input modeMainFormStrumento InstrumentMainFormhJack driver: errore durante l'attivazione del client#Jack driver: cannot activate clientMainFormJack driver: errore durante la connessione della porta di output'Jack driver: cannot connect output portMainFormHJack driver: errore in port register#Jack driver: error in port registerMainForm8Jack driver: server shutdownJack driver: server shutdownMainForm"File MIDI (*.mid)Midi file (*.mid)MainFormOkOkMainFormApri &demo Open &DemoMainFormApri &Pattern Open &PatternMainFormApri &recenti Open &recentMainFormApri Pattern Open PatternMainFormApri canzone Open songMainForm Pattern salvato.Pattern saved.MainForm Playlist &editorPlaylist &editorMainForm@Playlist: Imposta canzone No. %1Playlist: Set song No. %1MainForm0Playlist: Canzone n. %1 Playlist: Song No. %1MainFormStampa Oggetti Print ObjectsMainForm AvantiRedoMainFormSegnala bug Report bugMainFormSalva &come... Save &as...MainForm,Salva Pattern come ...Save Pattern as ...MainFormSalva canzone Save songMainFormJVisualizza informazioni &audio engineShow &audio engine infoMainFormMostra &Info Show &infoMainForm*Canzone salvata come.Song saved as.MainFormCanzone salvata Song saved.MainFormIndietroUndoMainFormIndietro Undo historyMainForm0Audio driver sconosciutoUnknown audio driverMainForm*Errore sconosciuto %1Unknown error %1MainFormStai usando una versione di sviluppo di Hydrogen, aiutaci riportando bug o suggerimenti nella mailing list hydrogen-devel<br><br>Grazie!You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!MainFormUmanizza tempo Humanize timeMasterMixerLine$Umanizza intensitHumanize velocityMasterMixerLine*Umanizza (tempo) [%1] Set humanize time parameter [%1]MasterMixerLine2Umanizza (intensit) [%1]$Set humanize velocity parameter [%1]MasterMixerLine,Volume principale [%1]Set master volume [%1]MasterMixerLine*Fattore di swing [%1]Set swing factor [%1]MasterMixerLine SwingSwingMasterMixerLine AzioneAction MidiTable EventoEvent MidiTable Param.Param. MidiTable\premi il bottone per registrare un evento MIDI!press button to record midi event MidiTable4Imposta livello effetto %1Set FX %1 level MixerHImposta volume effetto LADSPA ( %1 )Set LADSPA FX ( %1 ) volumeMixer.Mostra pannello effetti Show FX panelMixerZVisualizza il valore di picco degli strumentiShow instrument peaksMixernVisualizza valore di picco degli strumenti = Non attivoShow instrument peaks = OffMixerfVisualizza valore di picco degli strumenti = AttivoShow instrument peaks = OnMixertNome strumento (doppio click per modificarne le propriet)&Instrument name (double click to edit) MixerLineEscludiMute MixerLinePanPan MixerLineSuona sample Play sample MixerLine$Pan strumento [%1]Set instr. pan [%1] MixerLine*Volume strumento [%1]Set instrument volume [%1] MixerLineSoloSolo MixerLine TaglioCutoffPatternEditorPanel*Ascolta le nuove noteHear new notesPatternEditorPanelDAscolta le nuove note = Non attivoHear new notes = OffPatternEditorPanel<Ascolta le nuove note = AttivoHear new notes = OnPatternEditorPanelNon possibile cambiare la dimensione del pattern durante la riproduzione.8Is not possible to change the pattern size when playing.PatternEditorPanel$Anticipo e Ritardo Lead and LagPatternEditorPanel.Libreria suoni caricataLoaded SoundlibraryPatternEditorPanel4Nessun pattern selezionatoNo pattern selectedPatternEditorPanelTastoNotaNoteKeyPatternEditorPanelPanPanPatternEditorPanel,Editor di pattern - %1Pattern editor - %1PatternEditorPanelpQuantizza eventi in arrivo da tastiera/midi = Non attivo,Quantize incoming keyboard/midi events = OffPatternEditorPanelhQuantizza eventi in arrivo da tastiera/midi = Attivo+Quantize incoming keyboard/midi events = OnPatternEditorPaneldQuantizza alla griglia gli eventi da tastiera/midi%Quantize keyboard/midi events to gridPatternEditorPanelRisonanza ResonancePatternEditorPanelLSeleziona la risoluzione della grigliaSelect grid resolutionPatternEditorPanel0Seleziona propriet notaSelect note propertiesPatternEditorPanelFSeleziona la dimensione del patternSelect pattern sizePatternEditorPanel,Mostra editor batteriaShow drum editorPatternEditorPanel.Mostra editor del pianoShow piano roll editorPatternEditorPanelVelocitVelocityPatternEditorPanelAumenta ZoomZoom inPatternEditorPanelDiminuisci ZoomZoom outPatternEditorPanelTmodo distruttivo elimina impostazioni dopo%destructive mode post delete settingsPatternEditorPanelVmodo distruttivo elimina impostazioni prima$destructive mode pre delete settingsPatternEditorPanelBRiempi con il pattern selezionatoFill with selected patternPatternFillDialog&Svuota&ClearPatternFillDialog_UI&Riempi&FillPatternFillDialog_UIAlt+CPatternFillDialog_UIAlt+FPatternFillDialog_UIAnnullaCancelPatternFillDialog_UIForm 1PatternFillDialog_UIDa:From:PatternFillDialog_UIOkOKPatternFillDialog_UIA:To:PatternFillDialog_UI%1%1PatternPropertiesDialog%1#2%1#2PatternPropertiesDialog*Propriet del patternPattern propertiesPatternPropertiesDialog&Annulla&CancelPatternPropertiesDialog_UI&OK&OKPatternPropertiesDialog_UIAlt+CPatternPropertiesDialog_UIAlt+OPatternPropertiesDialog_UIForm1PatternPropertiesDialog_UI$Nuovo Nome PatternNew Pattern NamePatternPropertiesDialog_UI"Categoria patternPattern categoryPatternPropertiesDialog_UI$Anticipo e Ritardo Lead and LagPianoRollEditorPanPanPianoRollEditorVelocitVelocityPianoRollEditor,Pannello BC non attivo BC Panel off PlayerControl$Pannello BC attivo BC Panel on PlayerControl*Conta BPM e riproduci Count BPM and start PLAY PlayerControl&Conta e imposta BPM Count and set BPM PlayerControlLModalit Jack-Time-Master = Non attiva Jack-Time-Master mode = Off PlayerControlDModalit Jack-Time-Master = Attiva Jack-Time-Master mode = On PlayerControl:Pannello contatore BPM attivoBeatCounter Panel on PlayerControl2Registrazione distruttivaDestructive Record PlayerControl4Modalit distruttivo = OffDestructive mode = Off PlayerControl2Modalit distruttiva = OnDestructive mode = On PlayerControl Avanti Fast Forward PlayerControlRack strumentiInstrument rack PlayerControl`JACK-transport attivato solo con il driver JACK./JACK-transport will work only with JACK driver. PlayerControlHJack-Time-Master attivo / non attivoJack-Time-Master on/off PlayerControlJModalit Jack-transport = DisattivataJack-transport mode = Off PlayerControlDModalit Jack-transport = AttivataJack-transport mode = On PlayerControlPAttiva/Disattiva modalit Jack-transportJack-transport on/off PlayerControl:Riproduzione continua canzone Loop song PlayerControlVRiproduzione continua canzone = DisattivatoLoop song = Off PlayerControlLRiproduzione continua canzone = AttivoLoop song = On PlayerControl MixerMixer PlayerControl(Nuovo valore per BPM New BPM value PlayerControl Modalit Pattern Pattern Mode PlayerControl:Modalit pattern selezionata.Pattern mode selected. PlayerControl Pausa.Pause. PlayerControl"Riproduci / Pausa Play/ Pause PlayerControlIn esecuzione.Playing. PlayerControlrRicalcola i sample Rubberband modificati se cambia il BPM:Recalculate Rubberband modified samples if bpm will change PlayerControl\Ricalcola tutti i sample usando Rubberband OFF,Recalculate all samples using Rubberband OFF PlayerControlZRicalcola tutti i sample usando Rubberband ON+Recalculate all samples using Rubberband ON PlayerControlRegistraRecord PlayerControl>Registrazione eventi MIDI = OffRecord midi events = Off PlayerControl<Registrazione eventi MIDI = OnRecord midi events = On PlayerControlIndietroRewind PlayerControlJImposta BPM / Imposta BPM e riproduciSet BPM / Set BPM and play PlayerControl*Mostra Rack strumentiShow Instrument Rack PlayerControlMostra mixer Show mixer PlayerControl Modalit canzone Song Mode PlayerControl:Modalit canzone selezionata.Song mode selected. PlayerControl FermaStop PlayerControlFermato.Stopped. PlayerControl0Passa a metronomo on/offSwitch metronome on/off PlayerControlRA&ggiungi Script alla canzone selezionata&Add Script to selected songPlaylistDialog$&Crea nuovo Script&Create a new ScriptPlaylistDialog&&Modifica lo script&Edit selected ScriptPlaylistDialog&Nuova Playlist &New PlaylistPlaylistDialog&Apri Playlist&Open PlaylistPlaylistDialog&Playlist &PlaylistPlaylistDialog$&Rimuovi lo script&Remove selected ScriptPlaylistDialogD&Rimuovi la canzone dalla Playlist#&Remove selected song from PlaylistPlaylistDialog&Salva Playlist&Save PlaylistPlaylistDialog&Script&ScriptsPlaylistDialogVAggiungi la canzone &corrente alla PlaylistAdd ¤t song to PlaylistPlaylistDialogPAggiungi script alla canzone selezionataAdd Script to selected SongPlaylistDialog<Aggiungi canzone alla PlaylistAdd Song to PlayListPlaylistDialog>Aggiungi canzone alla Play&listAdd song to Play&listPlaylistDialogXErrore durante il caricamento della canzone.Error loading song.PlaylistDialog Avanti Fast ForwardPlaylistDialog@Hydrogen Playlist (*.h2playlist) Hydrogen Playlist (*.h2playlist)PlaylistDialog&Shell script (*.sh)Hydrogen Playlist (*.sh)PlaylistDialog(Shell Scripts (*.sh)Hydrogen Scripts (*.sh)PlaylistDialogApri Playlist Load PlaylistPlaylistDialogNuovo script New ScriptPlaylistDialogDNon impostato alcun editor di testo predefinito. Per favore selezionarne uno Non utilizzare editor di testo da console Purtroppo al momento non sono supportati.No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment.PlaylistDialog,Nessuno script in uso!No Script in use!PlaylistDialog6Nessuno script selezionato!No Script selected!PlaylistDialogNessuno script! No Script!PlaylistDialogtNessuna canzone nella lista o nessuna canzone selezionata!$No Song in List or no Song selected!PlaylistDialog8Nessuna canzone selezionata!No Song selected!PlaylistDialog8Nessuna canzone selezionata!No song selected!PlaylistDialog Pausa.Pause.PlaylistDialog8Play/ Pausa / Carica canzonePlay/ Pause/ Load selected songPlaylistDialog,Browser della PlaylistPlaylist BrowserPlaylistDialog>Playlist: imposta canzone n. %1Playlist: set song no. %1PlaylistDialog,Prima salva la canzonePlease save your song firstPlaylistDialogIndietroRewindPlaylistDialogSalva Playlist Save PlaylistPlaylistDialog0Salva Playlist &con nomeSave Playlist &asPlaylistDialog ScriptScriptPlaylistDialogIl nome dello script o il suo percorso contiene spazi. IMPORTANTE Il percorso dello script o il suo nome non devono contenere spazi.Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces.PlaylistDialogPSeleziona un editor di testo predefinitoSet your Default EditorPlaylistDialogLista canzoni Song listPlaylistDialog FermaStopPlaylistDialog~ATTENZIONE, il nuovo file eseguibile dal possessore del file!=WARNING, the new file is executable by the owner of the file!PlaylistDialogEsegui script exec ScriptPlaylistDialogno Script no ScriptPlaylistDialog ordinasortPlaylistDialog Browser PlaylistPlayList BrowserPlaylistDialog_UILista canzoni Song listPlaylistDialog_UI&Annulla&CancelPreferencesDialog&Ok&OkPreferencesDialog,<b>Driver ALSA</b><br>ALSA Driver
    PreferencesDialogL<b>Selezione automatica del driver</b>!Automatic driver selectionPreferencesDialog6<b>Driver CoreAudio</b><br>CoreAudio Driver
    PreferencesDialog<b>Jack Audio Connection Kit Driver</b><br>Audio driver a bassa latenzaCJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialogx<b>Open Sound System</b><br>Driver audio semplice [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog6<b>Driver PortAudio</b><br>PortAudio Driver
    PreferencesDialogb<br><b><font color="red">Non compilato</font></b>0
    Not compiledPreferencesDialog`Riavvio del driver richiesto Riavvio il driver?)Driver restart required. Restart driver?PreferencesDialog VeloceFastPreferencesDialogNormaleNormalPreferencesDialog|Riavviare Hydrogen per attivare / disattivare il supporto LASH6Please restart hydrogen to enable/disable LASH supportPreferencesDialogPreferenze PreferencesPreferencesDialog LentaSlowPreferencesDialog######PreferencesDialog_UI &Aspetto grafico &AppearancePreferencesDialog_UI&Annulla&CancelPreferencesDialog_UI&Generale&GeneralPreferencesDialog_UISistema &midi &Midi SystemPreferencesDialog_UI&OK&OKPreferencesDialog_UI2&Riapri l'ultima playlist&Reopen last used playlistPreferencesDialog_UIX&Ripristina all'avvio l'ultima canzone usata&Reopen last used songPreferencesDialog_UI1PreferencesDialog_UI10PreferencesDialog_UI11PreferencesDialog_UI12PreferencesDialog_UI13PreferencesDialog_UI14PreferencesDialog_UI15PreferencesDialog_UI16PreferencesDialog_UI2PreferencesDialog_UI3PreferencesDialog_UI4PreferencesDialog_UI44100PreferencesDialog_UI48000PreferencesDialog_UI5PreferencesDialog_UI6PreferencesDialog_UI7PreferencesDialog_UI8PreferencesDialog_UI88200PreferencesDialog_UI9PreferencesDialog_UI96000PreferencesDialog_UIx<i>Riavviare l'applicazione per usare i nuovi caratteri.</i>=After a font change the application must be restarted.PreferencesDialog_UI TuttiAllPreferencesDialog_UIAlt+CPreferencesDialog_UIAlt+DPreferencesDialog_UIAlt+OPreferencesDialog_UIAlt+RPreferencesDialog_UI,Caratteri ApplicazioneApplication fontPreferencesDialog_UI&Sistema audio Audio &SystemPreferencesDialog_UI*Dettagli uscita audioAudio output detailsPreferencesDialog_UI@Compensazione del beat in 1/10ms-Beat counter drift compensation in 1/10 ms PreferencesDialog_UI>Il conta battiti in izza in ms #Beat counter start offset in ms PreferencesDialog_UI"Dimensione buffer Buffer sizePreferencesDialog_UI CanaleChannelPreferencesDialog_UILConnetti alle uscite audio &principaliConnect to &Default Output PairPreferencesDialog_UI CosineCosinePreferencesDialog_UI CubicaCubicPreferencesDialog_UI.Interfaccia predefinitaDefault interface layoutPreferencesDialog_UI"Dispositivo audioDevicePreferencesDialog_UI VeloceFastPreferencesDialog_UIForm1PreferencesDialog_UIHermiteHermitePreferencesDialog_UI$Ignora il note-offIgnore note-offPreferencesDialog_UIIngressoInputPreferencesDialog_UIBInterpolazione del ricampionmentoInterpolate resamplingPreferencesDialog_UILineareLinearPreferencesDialog_UI.Numero massimo di barreMaximum number of barsPreferencesDialog_UIVelocit picchiMeters falloff speedPreferencesDialog_UI Volume metronomoMetronome volumePreferencesDialog_UIDriver Midi Midi driverPreferencesDialog_UICaratteri mixer Mixer fontPreferencesDialog_UINormaleNormalPreferencesDialog_UIBPercorso per l'utility Rubberband+Path to the Rubberband command-line utilityPreferencesDialog_UIPolifonia PolyphonyPreferencesDialog_UI Post-FaderPreferencesDialog_UI Pre-FaderPreferencesDialog_UIRiavvia outputRestart outputPreferencesDialog_UI.Frequenza campionamento Sample ratePreferencesDialog_UI&Seleziona caratteri Select fontPreferencesDialog_UI Pannello singolo Single panePreferencesDialog_UI LentaSlowPreferencesDialog_UI"Stile interfacciaStylePreferencesDialog_UITabTabbedPreferencesDialog_UI TerzoThirdPreferencesDialog_UIUscita traccia Track outputPreferencesDialog_UIUsa LASHUse lashPreferencesDialog_UI<crea output per ogni strumentocreate per-instrument outputsPreferencesDialog_UIprimo passo, regolare il disallineamento temporale tra la latenza di controller/tastiera e i BPM_first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpmPreferencesDialog_UIsecondo passo, tarare la relazione tra controller / keybord e l'avvio differito del sequencerfsecond step, adjust offset between last controller/keybord trigger and the deferred sequencer startup PreferencesDialog_UI&Annulla&Cancel SampleEditor&Ok&Ok SampleEditorFinestra di chiusura! possono esserci dei lavori non salvati. Sei sicuro?GClose dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditorFile modificato. I cambiamenti non salvati verranno persi. Sei sicuro??Unsaved changes left. This changes will be lost. Are you sure? SampleEditor8 Intonazione (Semitoni,Cent) Pitch (Semitone,Cent)SampleEditor_UI"Processore Audio Rubberband" : Cambia il tempo (lunghezza del campione) e il pitch.S"Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio.SampleEditor_UI$&Applica modifiche&Apply ChangesSampleEditor_UI&Chiudi&CloseSampleEditor_UIRi&produci&PlaySampleEditor_UI00SampleEditor_UI11SampleEditor_UI1/161/16SampleEditor_UI1/21/2SampleEditor_UI1/321/32SampleEditor_UI1/41/4SampleEditor_UI1/641/64SampleEditor_UI1/81/8SampleEditor_UI1010SampleEditor_UI1111SampleEditor_UI1212SampleEditor_UI1313SampleEditor_UI1414SampleEditor_UI1515SampleEditor_UI1616SampleEditor_UI1717SampleEditor_UI1818SampleEditor_UI1919SampleEditor_UI22SampleEditor_UI2020SampleEditor_UI2121SampleEditor_UI2222SampleEditor_UI2323SampleEditor_UI2424SampleEditor_UI2525SampleEditor_UI2626SampleEditor_UI2727SampleEditor_UI2828SampleEditor_UI2929SampleEditor_UI33SampleEditor_UI3030SampleEditor_UI3131SampleEditor_UI3232SampleEditor_UI44SampleEditor_UI55SampleEditor_UI66SampleEditor_UI77SampleEditor_UI88SampleEditor_UI99SampleEditor_UI

    Loop

    Count

    SampleEditor_UI

    Loop

    mode

    SampleEditor_UIRRegola la fine e il loop finale del frame"Adjust sample end & loop end frameSampleEditor_UIBRegola il frame iniziale del loopAdjust sample loop begin frameSampleEditor_UI0Regola il frame inizialeAdjust sample start frameSampleEditor_UIDialogoDialogSampleEditor_UIFineEndSampleEditor_UILoopLoopSampleEditor_UI@Riproduci i&l campione originaleP&lay original sampleSampleEditor_UI`Cambia intonazione al campione in semitoni, cent$Pitch the sample in semitones, centsSampleEditor_UI.Lunghezza del campione:Sample length to beat:SampleEditor_UI InizioStartSampleEditor_UI tipo di fade out fade-out typeSampleEditor_UI avantiforwardSampleEditor_UIlooploopsSampleEditor_UI:nuova lunghezza del campione:new sample length:SampleEditor_UIoffoffSampleEditor_UIpanoramapanoramaSampleEditor_UIpingpongpingpongSampleEditor_UIriavvolgireverseSampleEditor_UI(imposta elaborazioneset processingSampleEditor_UI volumevolumeSampleEditor_UI*Indice documentazioneDocumentation indexSimpleHTMLBrowserBNon mostrare pi questo messaggioDon't show this message anymoreSimpleHTMLBrowserManuale utenteManualSimpleHTMLBrowserOkOkSimpleHTMLBrowser*Benvenuto in HydrogenWelcome to HydrogenSimpleHTMLBrowser&Annulla&CancelSongEditorPanel&Ok&OkSongEditorPanel<Elimina la sequenza di patternClear pattern sequenceSongEditorPanel*Crea un nuovo patternCreate new patternSongEditorPanel(Modalit di modifica Draw modeSongEditorPanel@Abilita la modifica del timelineEnable time line editSongEditorPanelLSposta il pattern selezionato in bassoMove the selected pattern downSongEditorPanelJSposta il pattern selezionato in altoMove the selected pattern upSongEditorPanelModello %1 Pattern %1SongEditorPanel*Modalit di selezione Select modeSongEditorPanel"Editor di canzone Song EditorSongEditorPanelAttenzione, l'intera sequenza di pattern verr cancellata. Confermi?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanel"Nessuna categorianot_categorizedSongEditorPanel0Modalit pattern singolosingle pattern modeSongEditorPanel Pattern multipli stacked modeSongEditorPanel2Modalit pattern multiplistacked pattern modeSongEditorPanel500500SongEditorPanelBpmWidget_UI 500,55500,55SongEditorPanelBpmWidget_UIBPMBPMSongEditorPanelBpmWidget_UI BarraBarSongEditorPanelBpmWidget_UIAnnullaCancelSongEditorPanelBpmWidget_UI&Cancella marker BPMDelete BPM MarkerSongEditorPanelBpmWidget_UI4Cancella questo marker BPMDelete this BPM MarkerSongEditorPanelBpmWidget_UI>Modifica il beat sulla timelineEdit beat in timelineSongEditorPanelBpmWidget_UIModifica il BPM#Edit the bpm value for current beatSongEditorPanelBpmWidget_UIFormFormSongEditorPanelBpmWidget_UIOkOkSongEditorPanelBpmWidget_UIAnnullaCancelSongEditorPanelTagWidget_UIFormFormSongEditorPanelTagWidget_UIOkOkSongEditorPanelTagWidget_UITagTagSongEditorPanelTagWidget_UI&Annulla&CancelSongEditorPatternList&Ok&OkSongEditorPatternList CopiaCopySongEditorPatternListEliminaDeleteSongEditorPatternList"Riempi/Svuota ...Fill/Clear ...SongEditorPatternList<Hydrogen Pattern (*.h2pattern)Hydrogen Pattern (*.h2pattern)SongEditorPatternListCarica Pattern Load PatternSongEditorPatternListApri Pattern Open PatternSongEditorPatternListModello 1 Pattern 1SongEditorPatternListPropriet PropertiesSongEditorPatternListSalva Pattern Save PatternSongEditorPatternList~Il file del modello esiste. Sovrascrivere il modello esistente?9The pattern-file exists. Overwrite the existing pattern?SongEditorPatternList Modello VirtualeVirtual PatternSongEditorPatternList"Nessuna categorianot_categorizedSongEditorPatternList"Propriet canzoneSong propertiesSongPropertiesDialog &Ok &OKSongPropertiesDialog_UI&Annulla&CancelSongPropertiesDialog_UIAlt+CSongPropertiesDialog_UIAlt+OSongPropertiesDialog_UI AutoreAuthorSongPropertiesDialog_UIForm1SongPropertiesDialog_UILicenzaLicenseSongPropertiesDialog_UINoteNotesSongPropertiesDialog_UITitolo canzone Song nameSongPropertiesDialog_UICartella DirectorySoundLibraryExportDialog Esporta libreriaExport Sound LibrarySoundLibraryExportDialog CercaBrowseSoundLibraryExportDialog_UIDialogSoundLibraryExportDialog_UIEsportaExportSoundLibraryExportDialog_UI`C' stato un errore importando la Sound Library.-An error occurred importing the SoundLibrary.SoundLibraryImportDialogAutore: %1 Author: %1SoundLibraryImportDialog6Scarico la Sound Library...Downloading SoundLibrary...SoundLibraryImportDialogDrumkitsDrumkitsSoundLibraryImportDialogImporta drumkitImport drumkitSoundLibraryImportDialogInstallato InstalledSoundLibraryImportDialogLicenza: %1 License: %1SoundLibraryImportDialog NuovoNewSoundLibraryImportDialogPatternPatternsSoundLibraryImportDialogCanzoniSongsSoundLibraryImportDialog*Importa Sound LibrarySound Library importSoundLibraryImportDialogSound Library Sound librarySoundLibraryImportDialog:Sound Library importata in %1SoundLibrary imported in %1SoundLibraryImportDialog StatoStatusSoundLibraryImportDialogJAggiorno la lista di Sound Library...Updating SoundLibrary list...SoundLibraryImportDialog11SoundLibraryImportDialog_UIAutore... Author...SoundLibraryImportDialog_UICerca... Browse...SoundLibraryImportDialog_UI ChiudiCloseSoundLibraryImportDialog_UIDialogSoundLibraryImportDialog_UI$Scarica e installaDownload and installSoundLibraryImportDialog_UI*Modifica lista serverEdit server listSoundLibraryImportDialog_UIInstallaInstallSoundLibraryImportDialog_UIInternetInternetSoundLibraryImportDialog_UILicenza... License...SoundLibraryImportDialog_UIFile locale Local fileSoundLibraryImportDialog_UINome libreriaSound Library NameSoundLibraryImportDialog_UI0Informazioni su libreriaSound library InfoSoundLibraryImportDialog_UIAggiorna list Update listSoundLibraryImportDialog_UI&Annulla&CancelSoundLibraryPanel&OK&OkSoundLibraryPanelEliminaDeleteSoundLibraryPanelXErrore durante il caricamento della canzone.Error loading song.SoundLibraryPanelEsportaExportSoundLibraryPanelApriLoadSoundLibraryPanelPatternPatternsSoundLibraryPanelPropriet PropertiesSoundLibraryPanelCanzoniSongsSoundLibraryPanel$Drumkit di sistemaSystem drumkitsSoundLibraryPanelDrumkit utente User drumkitsSoundLibraryPanelAttenzione, il modello selezionato sar cancellato dal disco. Sei sicuro?FWarning, the selected pattern will be deleted from disk. Are you sure?SoundLibraryPanel AutoreAuthorSoundLibraryPropertiesDialog_UIAnnullaCancelSoundLibraryPropertiesDialog_UIDialogSoundLibraryPropertiesDialog_UIInformazioni InformationSoundLibraryPropertiesDialog_UILicenzaLicenseSoundLibraryPropertiesDialog_UINomeNameSoundLibraryPropertiesDialog_UI SalvaSave SoundLibraryPropertiesDialog_UIxSalva le modifiche fatte agli strumenti nella libreria suoni3Save changes made to instruments into sound librarySoundLibraryPropertiesDialog_UI<Modifica preferenze repositoryEdit repository settingsSoundLibraryRepositoryDialog*Modifica lista serverEdit server listSoundLibraryRepositoryDialogURLURLSoundLibraryRepositoryDialogAggiungiAddSoundLibraryRepositoryDialog_UIEliminaDeleteSoundLibraryRepositoryDialog_UIDialogSoundLibraryRepositoryDialog_UI.Fornisci un nome valido#Please supply at least a valid nameSoundLibrarySaveDialogSalva libreriaSave Sound LibrarySoundLibrarySaveDialog8Salvataggio drumkit fallito.Saving of this drumkit failed.SoundLibrarySaveDialog AutoreAuthorSoundLibrarySaveDialog_UIAnnullaCancelSoundLibrarySaveDialog_UIDialogSoundLibrarySaveDialog_UIInformazioni InformationSoundLibrarySaveDialog_UILicenzaLicenseSoundLibrarySaveDialog_UINomeNameSoundLibrarySaveDialog_UI SalvaSave SoundLibrarySaveDialog_UILibreria Sound librarySoundLibraryTree4Seleziona modello virtualeSelect virtual patternVirtualPatternDialogAnnullaCancelVirtualPatternDialog_UIDialogoDialogVirtualPatternDialog_UIOkOKVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.it.ts000066400000000000000000006451121211146647700206550ustar00rootroot00000000000000 AboutDialog <b>Project page</b><br> <b>Pagina del progetto</b><br> About Informazioni su <b>Main coder and mantainer:</b><br> <b>Sviluppatore principale e collaboratori:</b><br> <b>Website</b><br> <b>Sito web</b><br> <b>Mailing lists</b><br> <b>Mailing list</b><br> AboutDialog_UI About Hydrogen Informazioni su A&bout &Informazioni su &Authors &Autori &License &Licenza &OK &OK Alt+O ### <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info Informazioni audio engine AudioEngineInfoForm_UI Playing notes Polifonia Process time Tempo elaborazione Audio engine state Stato engine audio Song state Stato canzone Buffer size Dimensione buffer Sample rate Frequenza campionamento Song position Posizione canzone Patterns Pattern Selected pattern Pattern selezionato Selected instrument Strumento selezionato Connected to Connesso a Form1 Form1 ### ### Frames Frame Ticks Tic Sampler Campionatore Synth Sintetizzatore Sequencer Sequencer MIDI input Ingresso MIDI Name Nome Audio output Uscita audio Realtime frames Frame in tempo reale AudioFileBrowser Audio File Browser Browser Audio Size: %1 bytes Dimensione: %1 byte Samplerate: %1 Frequenza: %1 s s Name: Nome: Size: Dimensione: Samplerate: Frequenza: Sample length: Lunghezza del campione: Please do not preview samples which are longer than 10 minutes! Non suonare campioni più lunghi di 10 minuti! Sample length: Lunghezza del campione: AudioFileBrowser_UI Dialog Dialogo Open Apri Name: Nome: Samplerate: Frequenza: Size: Dimensione: Length: Lunghezza: Cancel Annulla Pla&y samples by clicking &Riproduci campioni al click &Up &Su &Home &Home &Play Sample &Suona Campione &Filename to instrument name &Rinomina il file con il nome dello strumento &Stop &Stop View hidden folders Mostra cartelle nascoste Be careful, this change all Layer velocity settings Attenzione, stai per cambiare le impostazioni di velocità di tutti i Livelli Set automatic velocity Imposta la velocità in automatico Director Director Direttore Director_UI Dialog Dialogo DownloadWidget (%1/%2 KiB) - ETA %3 (%1/%2 Kib) - ETA %3 DrumkitManager_UI Form1 Form1 Load Apri ### Drumkit author ### Autore drumkit Delete drumkit Elimina drumkit ### Drumkit name ### Nome drumkit ### Drumkit info ### Informazioni drumkit Load drumkit Apri drumkit Save Salva Author Autore Info Informazioni Drumkit name Nome drumkit Import Importa Drumkit filename Nome file drumkit Browse Cerca <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b> Scarica drumkit aggiuntivi da<br> http://www.hydrogen-music.org </b> ### The drumkit will be installed zncxbmzbxcmznxbcmz ### Il drumkit sarà installato in Export Esporta Drumkit directory Directory destinazione ExportSongDialog Export song Esporta canzone The file %1 exists. Overwrite the existing file? Il file %1 esiste. Sovrascrivere il file esistente? Export to a single track Esporta su una traccia singola Export to seperate tracks Esporta in tracce separate Both Entrambi ExportSongDialog_UI Export filename Filename per esportazione Export Whole Song to WAV Esporta l'intera canzone come file WAV &Export &Esporta &Browse... &Cerca... &Close &Chiudi Alt+C Alt+C Alt+E Alt+E Alt+B Alt+B Samplerate in Hz: Rate in Hz: 22050 22050 44100 44100 48000 48000 96000 96000 192000 192000 SampleDepth in Bit: Definizione in Bit: 8 8 16 16 24 24 32 32 Templates: Modelli: WAV in CD quality "44,1kHz, 16 bit PCM" WAV in qualità CD "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV in qualità ADAT "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV in qualità migliore "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV LOFI "22,05kHz, 8 bit PCM" WAV best Mixdown quality "96 kHz, 32 bit PCM" WAV in qualitù best Mixdown "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF in qualità CD "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF in qualitù ADAT "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" AIFF in qualità migliore "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" FLAC non compresso di buona qualità "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" OGG Vorbis senza perdita compresso in buona qualità "VBR" Interpolation: Interpolazione: Choose type of interpolation methode Scegli il metodo di interpolazione Linear Lineare Cosine Cosine Third Third Cubic Cubico Hermite Hermite Enable tempo changing Abilita i cambi di tempo TimeLine BPM Linea BPM Enable use of rubberband batch processor Abilita il rubberband batch processor Rubberbad Batch Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off FX acceso/spento Master output Uscita principale H2Core::SongEditorPanelBpmWidget BPM BPM H2Core::SongEditorPanelTagWidget Tag Tag H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties Proprietà Libreria &Ok &OK &Cancel &Annulla This is not possible, you can only save changes inside instruments to the current loaded sound library Non è possibile, puoi salvare cambiamente solo per gli strumenti attualmente aggiunti alla libreria suoni Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Attenzione! Cambiare il nome del drumkit sarà come creare un nuovo drumkit con lo stesso nome. Sei sicuro? Saving of this drumkit failed. Salvataggio del drumkit fallito. HydrogenApp Drumkit loaded: [%1] Drumkit caricato: [%1] Song Editor Editor di canzone Instrument + Pattern Strumento + Pattern Mixer Mixer InstrumentEditor Show instrument properties Visualizza le proprietà dello strumento Show layers properties Visualizza le proprietà dei layer Layer gain Gain del layer New instrument name Nuovo nome dello strumento Instrument gain Gain dello strumento Random pitch factor Fattore random pitch Filter Cutoff Filtro di taglio Filter resonance Filtro di risonanza Attack Attack Decay Sustain Release Layer pitch (Coarse) Layer pitch (grezzo) Layer pitch (Fine) Layer pitch (Fine) General Generale Layers Stop the current playing instrument-note before trigger the next note sample. Ferma la riproduzione della nota-strumento prima di riprodurre la prossima. Auto-Stop-Note Ferma automaticamente la nota InstrumentLine Clear notes Elimina note Randomize velocity Velocity casuale Delete instrument Elimina strumento Fill notes ... Riempi note ... Fill all notes Riempi tutte le note Fill 1/2 notes Riempi 1/2 note Fill 1/3 notes Riempi 1/3 note Fill 1/4 notes Riempi 1/4 note Fill 1/6 notes riempi 1/6 note Fill 1/8 notes Riempi 1/8 note Mute instrument Muto strumento Solo Solo InstrumentRack Show Instrument editor Mostra editor strumento Instrument Strumento Show sound library Mostra libreria Sound library LIbreria Suoni LadspaFXMixerLine Edit FX parameters Modifica parametri degli effetti Ladspa FX name Nome effetto LADSPA FX bypass Escludi effetto Effect return Ritorno dell'effetto LadspaFXProperties Select FX Seleziona effetto [%1] LADSPA FX Properties [%1] Proprietà effetto LADSPA LADSPA FX %1 Properties Proprietà effetto LADSPA %1 No plugin Nessun plugin Activate Attiva Deactivate Disattiva Remove FX Rimuove FX LadspaFXSelector Groups Gruppi Stereo Stereo Mono Mono Not supported Non supportato Select LADSPA FX Seleziona effetto LADSPA Recently Used Recenti Alphabetic List Ordine alfabetico Categorized Ordine per categoria LadspaFXSelector_UI &Cancel &Annulla &OK &OK Form1 Alt+C Alt+O ### fx label ### etichetta effetto ### fx type ### tipo effetto ### fx ID ### ID effetto 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Nome:</span></p></body></html> ### fx name 1 ### nome effetto 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Etichetta:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Tipo:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Autore:</span></p></body></html> ### FX maker 1 2 ### Autore effetto 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 ### copyright 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm &Save &Salva &Discard Annulla le &modifiche Cancel Annulla Error loading song. Errore durante il caricamento della canzone. Hydrogen Ready. Pronto. Hydrogen Song (*.h2song) Canzone Hydrogen (*.h2song) Save song Salva canzone Open song Apri canzone Export MIDI file Esporta MIDI file Midi file (*.mid) File MIDI (*.mid) &New &Nuova canzone &Open &Apri Open &Demo Apri &demo Open &recent Apri &recenti Save &as... Salva &come... Export &MIDI file Esporta file &MIDI &Preferences &Preferenze &Quit &Esci Show &audio engine info Visualizza informazioni &audio engine &User manual &Manuale utente &About &Informazioni su &Cancel &Annulla Unknown audio driver Audio driver sconosciuto Error starting audio driver Errore durante l'avvio del driver audio Jack driver: server shutdown Jack driver: server shutdown Jack driver: cannot activate client Jack driver: errore durante l'attivazione del client Jack driver: cannot connect output port Jack driver: errore durante la connessione della porta di output Jack driver: error in port register Jack driver: errore in port register &Export song &Esporta la canzone De&bug &Debug &Project &Progetto &Tools &Strumenti &Mixer &Mixer &Instrument Rack &Rack Strumenti Print Objects Stampa Oggetti &Info &Informazioni Song saved. Canzone salvata Unknown error %1 Errore sconosciuto %1 Clear all instruments? Eliminare tutti gli strumenti? Ok Ok You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Stai usando una versione di sviluppo di Hydrogen, aiutaci riportando bug o suggerimenti nella mailing list hydrogen-devel<br><br>Grazie! Could not save song. Salvataggio canzone fallito. Open &Pattern Apri &Pattern Hydrogen Pattern (*.h2pattern) Pattern Hydrogen (*.h2pattern) Save Pattern as ... Salva Pattern come ... Pattern saved. Pattern salvato. Open Pattern Apri Pattern Don't show this message anymore Non mostrare più questo messaggio Playlist: Set song No. %1 Playlist: Imposta canzone No. %1 Show &info Mostra &Info Expor&t pattern as... Espor&ta pattern come... I&nstruments Strume&nti &Add instrument &Aggiungi strumento &Clear all &Elimina tutti &Save library &Salva libreria &Export library &Esporta libreria Playlist &editor Playlist &editor &Import library &Importa libreria Info|About Song saved as. Canzone salvata come. Playlist: Song No. %1 Playlist: Canzone n. %1 Could not export pattern. Non riesco a esportare il modello. The document contains unsaved changes. Do you want to save the changes? Il documento contiene cambiamenti non salvati. Vuoi salvare i cambiamenti? Director Direttore Undo history Indietro &Undo &Indietro menu Undo Indietro Redo Avanti Input mode Modo input Instrument Strumento Drumkit Drumkit Report bug Segnala bug MasterMixerLine Set master volume [%1] Volume principale [%1] Swing Swing Humanize time Umanizza tempo Humanize velocity Umanizza intensità Set humanize time parameter [%1] Umanizza (tempo) [%1] Set humanize velocity parameter [%1] Umanizza (intensità) [%1] Set swing factor [%1] Fattore di swing [%1] MidiTable Event Evento Param. Param. Action Azione press button to record midi event premi il bottone per registrare un evento MIDI Mixer Show FX panel Mostra pannello effetti Show instrument peaks Visualizza il valore di picco degli strumenti Show instrument peaks = On Visualizza valore di picco degli strumenti = Attivo Show instrument peaks = Off Visualizza valore di picco degli strumenti = Non attivo Set FX %1 level Imposta livello effetto %1 Set LADSPA FX ( %1 ) volume Imposta volume effetto LADSPA ( %1 ) MixerLine Play sample Suona sample Mute Escludi Solo Solo Pan Pan Instrument name (double click to edit) Nome strumento (doppio click per modificarne le proprietà) Set instrument volume [%1] Volume strumento [%1] Set instr. pan [%1] Pan strumento [%1] PatternEditorPanel Hear new notes Ascolta le nuove note Hear new notes = On Ascolta le nuove note = Attivo Hear new notes = Off Ascolta le nuove note = Non attivo Pattern editor - %1 Editor di pattern - %1 Quantize keyboard/midi events to grid Quantizza alla griglia gli eventi da tastiera/midi Quantize incoming keyboard/midi events = On Quantizza eventi in arrivo da tastiera/midi = Attivo Quantize incoming keyboard/midi events = Off Quantizza eventi in arrivo da tastiera/midi = Non attivo Is not possible to change the pattern size when playing. Non è possibile cambiare la dimensione del pattern durante la riproduzione. Select pattern size Seleziona la dimensione del pattern Select grid resolution Seleziona la risoluzione della griglia Zoom in Aumenta Zoom Zoom out Diminuisci Zoom No pattern selected Nessun pattern selezionato Select note properties Seleziona proprietà nota Velocity Velocità Pan Pan Cutoff Taglio Resonance Risonanza Lead and Lag Anticipo e Ritardo Loaded Soundlibrary Libreria suoni caricata NoteKey TastoNota destructive mode pre delete settings modo distruttivo elimina impostazioni prima destructive mode post delete settings modo distruttivo elimina impostazioni dopo Show piano roll editor Mostra editor del piano Show drum editor Mostra editor batteria PatternFillDialog Fill with selected pattern Riempi con il pattern selezionato PatternFillDialog_UI &Fill &Riempi &Clear &Svuota To: A: From: Da: Cancel Annulla OK Ok Form 1 Alt+F Alt+C PatternPropertiesDialog Pattern properties Proprietà del pattern %1#2 %1#2 %1 %1 PatternPropertiesDialog_UI &Cancel &Annulla &OK &OK New Pattern Name Nuovo Nome Pattern Form1 Alt+C Alt+O Pattern category Categoria pattern Pattern description PianoRollEditor Velocity Velocità Pan Pan Lead and Lag Anticipo e Ritardo PlayerControl Song Mode Modalità canzone Playing. In esecuzione. Stopped. Fermato. Song mode selected. Modalità canzone selezionata. Pattern Mode Modalità Pattern Pattern mode selected. Modalità pattern selezionata. Jack-transport on/off Attiva/Disattiva modalità Jack-transport Jack-transport mode = On Modalità Jack-transport = Attivata Jack-transport mode = Off Modalità Jack-transport = Disattivata New BPM value Nuovo valore per BPM Rewind Indietro Play/ Pause Riproduci / Pausa Fast Forward Avanti Pause. Pausa. JACK-transport will work only with JACK driver. JACK-transport attivato solo con il driver JACK. Loop song Riproduzione continua canzone Loop song = On Riproduzione continua canzone = Attivo Loop song = Off Riproduzione continua canzone = Disattivato Show mixer Mostra mixer Stop Ferma Mixer Mixer Show Instrument Rack Mostra Rack strumenti Instrument rack Rack strumenti BeatCounter Panel on Pannello contatore BPM attivo Set BPM / Set BPM and play Imposta BPM / Imposta BPM e riproduci Jack-Time-Master on/off Jack-Time-Master attivo / non attivo BC Panel on Pannello BC attivo BC Panel off Pannello BC non attivo Count BPM and start PLAY Conta BPM e riproduci Count and set BPM Conta e imposta BPM Jack-Time-Master mode = On Modalità Jack-Time-Master = Attiva Jack-Time-Master mode = Off Modalità Jack-Time-Master = Non attiva Record Registra Destructive Record Registrazione distruttiva Record midi events = On Registrazione eventi MIDI = On Record midi events = Off Registrazione eventi MIDI = Off Destructive mode = Off Modalità distruttivo = Off Destructive mode = On Modalità distruttiva = On Recalculate Rubberband modified samples if bpm will change Ricalcola i sample Rubberband modificati se cambia il BPM Recalculate all samples using Rubberband ON Ricalcola tutti i sample usando Rubberband ON Recalculate all samples using Rubberband OFF Ricalcola tutti i sample usando Rubberband OFF Switch metronome on/off Passa a metronomo on/off PlaylistDialog Song list Lista canzoni Script Script exec Script Esegui script Add Song to PlayList Aggiungi canzone alla Playlist No Song selected! Nessuna canzone selezionata! Load Playlist Apri Playlist Hydrogen Playlist (*.h2playlist) Hydrogen Playlist (*.h2playlist) Save Playlist Salva Playlist No Song in List or no Song selected! Nessuna canzone nella lista o nessuna canzone selezionata! Hydrogen Playlist (*.sh) Shell script (*.sh) Add Script to selected Song Aggiungi script alla canzone selezionata No Script in use! Nessuno script in uso! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Non è impostato alcun editor di testo predefinito. Per favore selezionarne uno Non utilizzare editor di testo da console Purtroppo al momento non sono supportati. Set your Default Editor Seleziona un editor di testo predefinito No Script selected! Nessuno script selezionato! Error loading song. Errore durante il caricamento della canzone. sort ordina Hydrogen Scripts (*.sh) Shell Scripts (*.sh) New Script Nuovo script Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. Il nome dello script o il suo percorso contiene spazi. IMPORTANTE Il percorso dello script o il suo nome non devono contenere spazi. No Script! Nessuno script! &Playlist &Playlist Add song to Play&list Aggiungi canzone alla Play&list Add &current song to Playlist Aggiungi la canzone &corrente alla Playlist &Remove selected song from Playlist &Rimuovi la canzone dalla Playlist &Open Playlist &Apri Playlist &Save Playlist &Salva Playlist Save Playlist &as Salva Playlist &con nome &Scripts &Script &Add Script to selected song A&ggiungi Script alla canzone selezionata &Edit selected Script &Modifica lo script &Remove selected Script &Rimuovi lo script &Create a new Script &Crea nuovo Script Rewind Indietro Play/ Pause/ Load selected song Play/ Pausa / Carica canzone Stop Ferma Fast Forward Avanti Please save your song first Prima salva la canzone WARNING, the new file is executable by the owner of the file! ATTENZIONE, il nuovo file è eseguibile dal possessore del file! Pause. Pausa. Playlist Browser Browser della Playlist No song selected! Nessuna canzone selezionata! Playlist: set song no. %1 Playlist: imposta canzone n. %1 no Script no Script &New Playlist &Nuova Playlist PlaylistDialog_UI PlayList Browser Browser Playlist Song list Lista canzoni PreferencesDialog Slow Lenta Normal Normale Fast Veloce <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Open Sound System</b><br>Driver audio semplice [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">Non compilato</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Jack Audio Connection Kit Driver</b><br>Audio driver a bassa latenza Preferences Preferenze <b>ALSA Driver</b><br> <b>Driver ALSA</b><br> <b>Automatic driver selection</b> <b>Selezione automatica del driver</b> <b>PortAudio Driver</b><br> <b>Driver PortAudio</b><br> <b>CoreAudio Driver</b><br> <b>Driver CoreAudio</b><br> Please restart hydrogen to enable/disable LASH support Riavviare Hydrogen per attivare / disattivare il supporto LASH Driver restart required. Restart driver? Riavvio del driver richiesto Riavvio il driver? &Ok &Ok &Cancel &Annulla PreferencesDialog_UI Buffer size Dimensione buffer Device Dispositivo audio Input Ingresso Channel Canale All Tutti Meters falloff speed Velocità picchi Slow Lenta Normal Normale Fast Veloce Application font Caratteri Applicazione Mixer font Caratteri mixer Select font Seleziona caratteri <i>After a font change the application must be restarted.</i> <i>Riavviare l'applicazione per usare i nuovi caratteri.</i> Polyphony Polifonia Style Stile interfaccia &Cancel &Annulla &OK &OK &General &Generale Audio &System &Sistema audio Metronome volume Volume metronomo Connect to &Default Output Pair Connetti alle uscite audio &principali &Midi System Sistema &midi Midi driver Driver Midi Ignore note-off Ignora il note-off &Appearance &Aspetto grafico Form1 Alt+C Alt+O &Reopen last used song &Ripristina all'avvio l'ultima canzone usata Alt+R ### ### Sample rate Frequenza campionamento 44100 48000 88200 96000 Alt+D 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Restart output Riavvia output Audio output details Dettagli uscita audio Post-Fader Pre-Fader Track output Uscita traccia Use lash Usa LASH first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm primo passo, regolare il disallineamento temporale tra la latenza di controller/tastiera e i BPM Beat counter drift compensation in 1/10 ms Compensazione del beat in 1/10ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup secondo passo, tarare la relazione tra controller / keybord e l'avvio differito del sequencer Beat counter start offset in ms Il conta battiti in izza in ms create per-instrument outputs crea output per ogni strumento Path to the Rubberband command-line utility Percorso per l'utility Rubberband Maximum number of bars Numero massimo di barre &Reopen last used playlist &Riapri l'ultima playlist Interpolate resampling Interpolazione del ricampionmento Linear Lineare Cosine Cosine Third Terzo Cubic Cubica Hermite Hermite Default interface layout Interfaccia predefinita Single pane Pannello singolo Tabbed Tab SampleEditor Unsaved changes left. This changes will be lost. Are you sure? File modificato. I cambiamenti non salvati verranno persi. Sei sicuro? &Ok &Ok &Cancel &Annulla Close dialog! maybe there is some unsaved work on sample. Are you sure? Finestra di chiusura! possono esserci dei lavori non salvati. Sei sicuro? SampleEditor_UI Dialog Dialogo P&lay original sample Riproduci i&l campione originale &Apply Changes &Applica modifiche &Close &Chiudi Adjust sample start frame Regola il frame iniziale Adjust sample loop begin frame Regola il frame iniziale del loop set processing imposta elaborazione forward avanti reverse riavvolgi pingpong pingpong loops loop Adjust sample end & loop end frame Regola la fine e il loop finale del frame &Play Ri&produci new sample length: nuova lunghezza del campione: fade-out type tipo di fade out volume volume panorama panorama Sample length to beat: Lunghezza del campione: off off 1/64 1/64 1/32 1/32 1/16 1/16 1/8 1/8 1/4 1/4 1/2 1/2 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 Pitch the sample in semitones, cents Cambia intonazione al campione in semitoni, cent Crispness: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 0 Start Inizio Loop Loop <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End Fine "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. "Processore Audio Rubberband" : Cambia il tempo (lunghezza del campione) e il pitch. Pitch (Semitone,Cent) Intonazione (Semitoni,Cent) SimpleHTMLBrowser Manual Manuale utente Welcome to Hydrogen Benvenuto in Hydrogen Don't show this message anymore Non mostrare più questo messaggio Ok Ok Documentation index Indice documentazione SongEditorPanel Create new pattern Crea un nuovo pattern Move the selected pattern down Sposta il pattern selezionato in basso Move the selected pattern up Sposta il pattern selezionato in alto Clear pattern sequence Elimina la sequenza di pattern Song Editor Editor di canzone Select mode Modalità di selezione Draw mode Modalità di modifica Warning, this will erase your pattern sequence. Are you sure? Attenzione, l'intera sequenza di pattern verrà cancellata. Confermi? &Ok &Ok &Cancel &Annulla stacked mode Pattern multipli stacked pattern mode Modalità pattern multipli single pattern mode Modalità pattern singolo not_categorized Nessuna categoria Enable time line edit Abilita la modifica del timeline Pattern %1 Modello %1 SongEditorPanelBpmWidget_UI Form Form Edit the bpm value for current beat Modifica il BPM 500,55 500,55 Edit beat in timeline Modifica il beat sulla timeline 500 500 Bar Barra BPM BPM Delete this BPM Marker Cancella questo marker BPM Delete BPM Marker Cancella marker BPM Cancel Annulla Ok Ok SongEditorPanelTagWidget_UI Form Form Tag Tag Cancel Annulla Ok Ok SongEditorPatternList Copy Copia Delete Elimina Properties Proprietà Fill/Clear ... Riempi/Svuota ... Save Pattern Salva Pattern Load Pattern Carica Pattern Open Pattern Apri Pattern Hydrogen Pattern (*.h2pattern) Hydrogen Pattern (*.h2pattern) Virtual Pattern Modello Virtuale Pattern 1 Modello 1 not_categorized Nessuna categoria The pattern-file exists. Overwrite the existing pattern? Il file del modello esiste. Sovrascrivere il modello esistente? &Ok &Ok &Cancel &Annulla Export Pattern SongPropertiesDialog Song properties Proprietà canzone SongPropertiesDialog_UI Notes Note Author Autore Song name Titolo canzone &Cancel &Annulla &OK &Ok Form1 Alt+O Alt+C License Licenza SoundLibraryExportDialog Export Sound Library Esporta libreria Directory Cartella SoundLibraryExportDialog_UI Dialog Browse Cerca Export Esporta SoundLibraryImportDialog Sound Library import Importa Sound Library Sound library Sound Library Status Stato Updating SoundLibrary list... Aggiorno la lista di Sound Library... Installed Installato New Nuovo Author: %1 Autore: %1 Downloading SoundLibrary... Scarico la Sound Library... Import drumkit Importa drumkit SoundLibrary imported in %1 Sound Library importata in %1 An error occurred importing the SoundLibrary. C'é stato un errore importando la Sound Library. Drumkits Drumkits Songs Canzoni Patterns Pattern License: %1 Licenza: %1 SoundLibraryImportDialog_UI Dialog Internet Internet Update list Aggiorna list Sound Library Name Nome libreria Sound library Info Informazioni su libreria Author... Autore... Download and install Scarica e installa Local file File locale Browse... Cerca... Install Installa 1 1 License... Licenza... Edit server list Modifica lista server Close Chiudi SoundLibraryPanel Load Apri Export Esporta Delete Elimina System drumkits Drumkit di sistema User drumkits Drumkit utente &Ok &OK &Cancel &Annulla Songs Canzoni Patterns Pattern Error loading song. Errore durante il caricamento della canzone. Properties Proprietà Warning, the selected pattern will be deleted from disk. Are you sure? Attenzione, il modello selezionato sarà cancellato dal disco. Sei sicuro? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Name Nome Author Autore Information Informazioni License Licenza Save Salva Cancel Annulla Save changes made to instruments into sound library Salva le modifiche fatte agli strumenti nella libreria suoni SoundLibraryRepositoryDialog Edit repository settings Modifica preferenze repository Edit server list Modifica lista server URL URL SoundLibraryRepositoryDialog_UI Dialog Add Aggiungi Delete Elimina SoundLibrarySaveDialog Save Sound Library Salva libreria Please supply at least a valid name Fornisci un nome valido Saving of this drumkit failed. Salvataggio drumkit fallito. SoundLibrarySaveDialog_UI Dialog Name Nome Author Autore Information Informazioni Cancel Annulla License Licenza Save Salva SoundLibraryTree Sound library Libreria VirtualPatternDialog Select virtual pattern Seleziona modello virtuale VirtualPatternDialog_UI Dialog Dialogo OK Ok Cancel Annulla hydrogen-0.9.6-beta3/data/i18n/hydrogen.ja.qm000066400000000000000000002043711211146647700206200ustar00rootroot00000000000000XdY`abb!;{;[e%[7[[׎%S%S%S+;Z+;7+;}+;@+[#+[+[+[+[:+[x+ 4"4$4(l80WGM#"GMGH,3LDTV~qxV~uGV~~vZlZw#ZZw[*{u+;Qb|8\BFBbBDxygȤȤ0֍ִ֍Z5t5tb6`FO4H5vH5H5cLqNfJggs//U/r`` F Q~sDe&*,zy*5 L+[g+f\@+r'+\+] +` /ZX/eD5S=7t07t0 7Mm70709;0<0A<0gClՄY y)B$4k}l( g'5U+AgY. . Q^b dM>eȹ~#pUey4L|[F 6~g˥Y]+z>6f6[=x3)f3]~=A^x>6q^pr.r+wݏ$%kڦ)5+pDOLS0uD\o/Ԋn!Gٛ[v lfl_77Y9_XQ7!(9t_<?AC,B2I>T[R3-bP"sl,x2qAz^m'Lbb(b{b3Ip3U" I I]I{IIIIkIinnޥe(>A Aɷ_%,؛,, rϕWWWʽWW1WWJWWٯv vv*֏1{J؃;ޱeo'og7Dmls4c._vlfZi()58[|@fSJf~+V|V|,W^l[R3-daud!eNhnIh~Fh~Yjuk2jm6p:r`3iv qz5|Vdn{<]DgDtdȿ5g7f i;A~teo%\yBc(z{$)v "c$$ >)y  l''DfU*b7[R3-_pyg4k}e~~>#*5[#1FUv _Ro֣f֣=>[! ⪁Y"J+J"r^ En b+w!o #P 4dx4=&V^v\`~a.f"h3s2Ec63_h \yxR/>h1oq¯i=;o&s+<5Hݿ^빆 p-Bn(3dE3d@{sG.l6VQ>[R3-$ 0e%жlc|h>/333?¸*3ͦۨ\te S0 $T4 ){i +s' 3b*k @e5 Cn" S%]mf Xfc aO]: h>A h> w-X wE b r  ~ ~  V1 M ' 43 = $ 3Ո ~ B TU a F@ > #~R! +Z$ 2 @ TYH gn) kJD5 x@#o z Z ~ ?/ ?b 2 / ' C D ;$ s'Z 'f7 =K = 5{ "U1 & 5yyF 5y~ @0 B D C C) FPJ \p `n^ jd wh |v ~L+  f / (uɌ _  R v aj 9 b $ 4j[ = =/ Gh ik yE { 7n . 4)Z R <( ͫ ͼ/ 9n ` ӽ^ $ q mm 3Nb "4!$RaK=\nGp#[3.^jbje}mz mew>||s}<G%&GXdBxETǗ.agG3 0 @U"fi.(0ہ=Щ$HL"9aN!b st`ќ4ko.+ekqxtk/ޔk[$(ddi&<b>00000000</b><br>Mailing lists
     AboutDialog.<b>N-_Õvz000000:</b><br>$Main coder and mantainer:
     AboutDialog(<b>000000000</b><br>Project page
     AboutDialog"<b>000000</b><br>Website
     AboutDialog0S0n000000k0d0D0fAbout AboutDialog ###AboutDialog_UI O\(&A)&AuthorsAboutDialog_UI00000(&L)&LicenseAboutDialog_UI&OKAboutDialog_UI Hydrogen0k0d0D0f(&A)A&boutAboutDialog_UIHydrogen0k0d0D0fAbout HydrogenAboutDialog_UIAlt+OAboutDialog_UI000000000`X1Audio Engine InfoAudioEngineInfoForm###AudioEngineInfoForm_UI0000000000nraKAudio engine stateAudioEngineInfoForm_UIXQR Audio outputAudioEngineInfoForm_UI00000000 Buffer sizeAudioEngineInfoForm_UIc} Connected toAudioEngineInfoForm_UIForm1AudioEngineInfoForm_UI0000FramesAudioEngineInfoForm_UI MIDIQeR MIDI inputAudioEngineInfoForm_UIT RMNameAudioEngineInfoForm_UI0000PatternsAudioEngineInfoForm_UI 0000nQu Playing notesAudioEngineInfoForm_UI}LNfB Process timeAudioEngineInfoForm_UI0000000000Realtime framesAudioEngineInfoForm_UI0000000 Sample rateAudioEngineInfoForm_UI 00000SamplerAudioEngineInfoForm_UIxb0U00_00000000Selected instrumentAudioEngineInfoForm_UIxb0U00_0000Selected patternAudioEngineInfoForm_UI 000000 SequencerAudioEngineInfoForm_UI00000000 Song positionAudioEngineInfoForm_UI 0000nraK Song stateAudioEngineInfoForm_UI0000000SynthAudioEngineInfoForm_UI000TicksAudioEngineInfoForm_UI y sAudioFileBrowser00000000000000Audio File BrowserAudioFileBrowserT RM:Name:AudioFileBrowser010RNN 0n00000o000000W0j0D0gN 0U0D!?Please do not preview samples which are longer than 10 minutes!AudioFileBrowser 0000w:Sample length:AudioFileBrowser 0000w:Sample length: AudioFileBrowser0000000: Samplerate:AudioFileBrowser0000000: %1Samplerate: %1AudioFileBrowser000:Size:AudioFileBrowser000: %1 000Size: %1 bytesAudioFileBrowser,0000T 000000000T 0k0Y0(&F)&Filename to instrument nameAudioFileBrowser_UI000(&H)&HomeAudioFileBrowser_UI00000nQu(&P) &Play SampleAudioFileBrowser_UI P\kb(&S)&StopAudioFileBrowser_UI N 0x(&U)&UpAudioFileBrowser_UI00S0nY f0o0Y0y0f0n00000n-[0kSf 0U00~0Y 4Be careful, this change all Layer velocity settings AudioFileBrowser_UI 00000CancelAudioFileBrowser_UI 00000DialogAudioFileBrowser_UIw0U:Length:AudioFileBrowser_UIT RM:Name:AudioFileBrowser_UI0OOpenAudioFileBrowser_UI 00000g00000Qu(&Y)Pla&y samples by clickingAudioFileBrowser_UI0000000: Samplerate:AudioFileBrowser_UI0000000nRՊSet automatic velocityAudioFileBrowser_UI000:Size:AudioFileBrowser_UI0W000000nhy:View hidden foldersAudioFileBrowser_UI 000000DirectorDirector 00000Dialog Director_UI(%1/%2 KiB) - ETA %3DownloadWidget### 0000000nO\### Drumkit authorDrumkitManager_UI### 0000000n`X1### Drumkit infoDrumkitManager_UI### 0000000nT RM### Drumkit nameDrumkitManager_UIP### 0000000L0000000U00~0Y zncxbmzbxcmznxbcmz4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b> NN 0nURL0K0000Y0O0n00000000000000g0M0~0Y<br> http://www.hydrogen-music.org </b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UIO\AuthorDrumkitManager_UISqgBrowseDrumkitManager_UI0000000nRJdDelete drumkitDrumkitManager_UI0000000n000000Drumkit directoryDrumkitManager_UI0000000n0000T Drumkit filenameDrumkitManager_UI000000T  Drumkit nameDrumkitManager_UI 000000ExportDrumkitManager_UIForm1DrumkitManager_UI 00000ImportDrumkitManager_UI`X1InfoDrumkitManager_UI00LoadDrumkitManager_UI0000000n00 Load drumkitDrumkitManager_UIO[XSaveDrumkitManager_UIN!eBothExportSongDialog0000n000000 Export songExportSongDialog100000k000000Export to a single trackExportSongDialogep0n00000k000000Export to seperate tracksExportSongDialog40000 %1 0o[XW(0W0f0D0~0Y0 N f0M0W0~0Y0K?1The file %1 exists. Overwrite the existing file?ExportSongDialogSqg(&B)... &Browse...ExportSongDialog_UI0X0(&C)&CloseExportSongDialog_UI000000(&E)&ExportExportSongDialog_UI16ExportSongDialog_UI192000ExportSongDialog_UI22050ExportSongDialog_UI24ExportSongDialog_UI32ExportSongDialog_UI44100ExportSongDialog_UI48000ExportSongDialog_UI8ExportSongDialog_UI96000ExportSongDialog_UIHAIFF - ADAT000000 "48kHz, 16000 PCM")AIFF in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UIHAIFF - CD000000 "44.1kHz, 16000 PCM"'AIFF in CD quality "41 kHz, 16 bit PCM"ExportSongDialog_UIFAIFF - z 00D000000 "48kHz, 24000 PCM"+AIFF in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UIAlt+BExportSongDialog_UIAlt+CExportSongDialog_UIAlt+EExportSongDialog_UI$000QhOS0 WAV 0x000000Export Whole Song to WAVExportSongDialog_UI0000000000T Export filenameExportSongDialog_UI:FLAC - 00D000000n0000W'~. "48kHz"1FLAC lossless compressor in good quality "48 kHz"ExportSongDialog_UIBOGG Vorbis - 00D000000n0000W'~. "VBR"3OGG Vorbis loosely compressed in good quality "VBR"ExportSongDialog_UI00000n000ep:SampleDepth in Bit:ExportSongDialog_UI0000000 (Hz):Samplerate in Hz:ExportSongDialog_UI000000:  Templates: ExportSongDialog_UIBWAV- ON000000 "22.05kHz, 8000 PCM"WAV LOFI "22.05kHz, 8 bit PCM ExportSongDialog_UIPWAV - 0000000T0M000000 "96kHz, 32000 PCM"-WAV best Mixdown quality "96 kHz, 32 bit PCM"ExportSongDialog_UIFWAV - ADAT000000 "48kHz, 16000 PCM"(WAV in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UIFWAV - CD000000 "44.1kHz, 16000 PCM"(WAV in CD quality "44,1kHz, 16 bit PCM"ExportSongDialog_UIDWAV - z o0D000000 "48kHz, 24000 PCM"*WAV in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI%1
    %2 KHz
    %3 %4 FileBrowser00000 on/off FX on/off FxMixerLine 0000QR Master output FxMixerLineBPM H2Core::SongEditorPanelBpmWidget00Tag H2Core::SongEditorPanelTagWidget00000(&C)&Cancel$H2Core::SoundLibraryPropertiesDialog&Ok$H2Core::SoundLibraryPropertiesDialog"00000000000n000000SoundLibrary Properties$H2Core::SoundLibraryPropertiesDialog^sW(0000U00f0D000000000000k\^0Y0000000000g0j0Q00pY f0O[X0g0M0~0[0fThis is not possible, you can only save changes inside instruments to the current loaded sound library$H2Core::SoundLibraryPropertiesDialog\fTJ! 000000T 0Y f0Y00he0k0000000O\00S0h0k0j00~0Y0 000W0D0g0Y0KfWarning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure?$H2Core::SoundLibraryPropertiesDialog$00~00_000000: [%1]Drumkit loaded: [%1] HydrogenApp0000Mixer HydrogenApp0000000 Song Editor HydrogenApp0000AttackInstrumentEditor000Qu0nRP\kbAuto-Stop-NoteInstrumentEditor0000DecayInstrumentEditor0000000000 Filter CutoffInstrumentEditor0000000000Filter resonanceInstrumentEditorN,GeneralInstrumentEditor000000000n000Instrument gainInstrumentEditor00000n000 Layer gainInstrumentEditor00000n000 (|0)Layer pitch (Coarse)InstrumentEditor00000n000 (}000K)Layer pitch (Fine)InstrumentEditor0000LayersInstrumentEditore0W0D00000000T New instrument nameInstrumentEditor0000000} Random pitch factorInstrumentEditor0000ReleaseInstrumentEditor"000000000n000000hy:Show instrument propertiesInstrumentEditor00000n000000hy:Show layers propertiesInstrumentEditorPk!0n00000000L0000U00_0sW(0n000000000000nQu0P\kb0Y00MStop the current playing instrument-note before trigger the next note sample.InstrumentEditor 00000SustainInstrumentEditor0000n000 Clear notesInstrumentLine000000000nRJdDelete instrumentInstrumentLine000020d0J0M0kc?QeFill 1/2 notesInstrumentLine000030d0J0M0kc?QeFill 1/3 notesInstrumentLine000040d0J0M0kc?QeFill 1/4 notesInstrumentLine000060d0J0M0kc?QeFill 1/6 notesInstrumentLine000080d0J0M0kc?QeFill 1/8 notesInstrumentLine0000Qh0fc?QeFill all notesInstrumentLine0000nRc?Qe...Fill notes ...InstrumentLine000000000000kRandomize velocityInstrumentLine00SoloInstrumentLine00000000 InstrumentInstrumentRack 00000000000000nhy:Show Instrument editorInstrumentRack00000000000nhy:Show sound libraryInstrumentRack0000000000 Sound libraryInstrumentRack000000n0000000Y fEdit FX parametersLadspaFXMixerLine000000n0000 Effect returnLadspaFXMixerLine000000n0000 FX bypassLadspaFXMixerLineLADSPA00000T Ladspa FX nameLadspaFXMixerLineg RSActivateLadspaFXPropertiesq!RS DeactivateLadspaFXProperties,LADSPA00000 %1 0n000000LADSPA FX %1 PropertiesLadspaFXProperties000000j0W No pluginLadspaFXProperties000000nRJd Remove FXLadspaFXProperties000000nxb Select FXLadspaFXProperties.[%1] LADSPA000000n000000[%1] LADSPA FX PropertiesLadspaFXProperties0000000Ș000Alphabetic ListLadspaFXSelector00000R%000 CategorizedLadspaFXSelector0000GroupsLadspaFXSelector0000MonoLadspaFXSelector00000U00f0D0~0[0 Not supportedLadspaFXSelectorgO0c0_00000 Recently UsedLadspaFXSelectorLADSPA000000nxbSelect LADSPA FXLadspaFXSelector0000StereoLadspaFXSelector"### 000000000 1 2### FX maker 1 2LadspaFXSelector_UI ### 000000 1 2 3### copyright 1 2 3LadspaFXSelector_UI### 00000ID ### fx IDLadspaFXSelector_UI### 00000000 ### fx labelLadspaFXSelector_UI### 00000T 1 ### fx name 1LadspaFXSelector_UI### 00000000 ### fx typeLadspaFXSelector_UI00000(&C)&CancelLadspaFXSelector_UI&OKLadspaFXSelector_UI1LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">000000:</span></p></body></html>

    Copyright:

    LadspaFXSelector_UI

    ID:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">000:</span></p></body></html>

    Label:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">vz:</span></p></body></html>

    Maker:

    LadspaFXSelector_UI <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">00000T :</span></p></body></html>

    Name:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">000:</span></p></body></html>

    Type:

    LadspaFXSelector_UIAlt+CLadspaFXSelector_UIAlt+OLadspaFXSelector_UIForm1LadspaFXSelector_UIMainFormH0000000oO[X0U00f0D0j0DY f0T+00g0D0~0Y0 Y f0O[X0W0~0Y0KI The document contains unsaved changes. Do you want to save the changes? MainForm0S0n000000k0d0D0f(&A)&AboutMainForm000000000nR(&A)&Add instrumentMainForm00000(&C)&CancelMainFormQh0f0dS(&C) &Clear allMainForm x4h(&D)&DiscardMainForm"0000000n000000(&E)&Export libraryMainForm0000n000000(&E) &Export songMainForm 0000000n00000(&I)&Import libraryMainForm `X1(&I)&InfoMainForm00000000000(&I)&Instrument RackMainForm0000(&M)&MixerMainForm e(&N)&NewMainForm 0O(&O)&OpenMainForm -[(&P) &PreferencesMainForm000000(&P)&ProjectMainForm0X0(&Q)&QuitMainForm O[X(&S)&SaveMainForm0000000nO[X(&S) &Save libraryMainForm000(&T)&ToolsMainForm00000000(&U) &User manualMainForm 00000CancelMainForm(0Y0y0f0n000000000dS0W0~0Y0KClear all instruments?MainForm(000000000000g0M0~0[00g0W0_0Could not export pattern.MainForm0000O[X0g0M0~0[00g0W0_0Could not save song.MainForm0000(&B)De&bugMainForm 000000DirectorMainForm$0S0n0000000S0NN 0ohy:0W0j0DDon't show this message anymoreMainForm 0000n000kY1eW0W0~0W0_0Error loading song.MainForm"00000000000k0000LvzuError starting audio driverMainForm0T RM0N0Q0f00000000000(&T)...Expor&t pattern as...MainForm(MIDI 00000x000000(&M)Export &MIDI fileMainForm"MIDI 00000x0n000000Export MIDI fileMainForm6Hydrogen 0000 (*.h2pattern)Hydrogen Pattern (*.h2pattern)MainFormHydrogen Ready.MainForm8Hydrogen 0n0000000 (*.h2song)Hydrogen Song (*.h2song)MainForm00000000(&N) I&nstrumentsMainForm00000000 InstrumentMainForm:JACK00000: 0000000g RS0g0M0~0[00g0W0_#Jack driver: cannot activate clientMainForm6JACK00000: QR0000xc}0g0M0~0[00g0W0_'Jack driver: cannot connect output portMainForm(JACK00000: 000v{20n000#Jack driver: error in port registerMainForm$JACK00000: 00000n}BNJack driver: server shutdownMainForm"MIDI 0000 (*.mid)Midi file (*.mid)MainFormOkMainForm0000O(&D) Open &DemoMainForm000000O(&P) Open &PatternMainFormgѕ0D0_0000(&R) Open &recentMainForm000000O Open PatternMainForm 00000O Open songMainForm00000O[X0W0~0W0_0Pattern saved.MainForm00000000000(&E)Playlist &editorMainForm,000000: 000No. %1 0k000Playlist: Set song No. %1MainForm$000000: 000 No. %1Playlist: Song No. %1MainForm0000000nSpR7 Print ObjectsMainFormT RM0N0Q0fO[X(&A)... Save &as...MainForm T RM0N0Q0f00000O[X...Save Pattern as ...MainForm 0000nO[X Save songMainForm$0000000000n`X1hy:(&A)Show &audio engine infoMainForm`X10nhy:(&I) Show &infoMainForm T RM0N0Q0f0000O[X0W0~0Y0Song saved as.MainForm0000O[X0W0~0W0_0 Song saved.MainFormN f0j0000000000Unknown audio driverMainFormN f0j0000g0Y %1Unknown error %1MainForm0S00oHydrogen0nvz000000g0Y0000chH0000000000gX1TJ0W0f0O00_0[ 0W0D0g0Y0<br><br>0i0F00B00L0h0F!You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!MainFormfB0n0000000 Humanize timeMasterMixerLine0000000n0000000Humanize velocityMasterMixerLine*fB00000000000000 [%1] Set humanize time parameter [%1]MasterMixerLine200000000000000000000 [%1]$Set humanize velocity parameter [%1]MasterMixerLine00000n-[ [%1]Set master volume [%1]MasterMixerLine00000} 0n-[ [%1]Set swing factor [%1]MasterMixerLine 00000SwingMasterMixerLine 00000Action MidiTable0000Event MidiTable0000000Param. MidiTable*0000b0W0fMIDI0000020W0~0Y!press button to record midi event MidiTable 000000k %1 0000-[Set FX %1 level Mixer6LADSPA000000k000000-[ ( %1 )Set LADSPA FX ( %1 ) volumeMixer000000000nhy: Show FX panelMixer000000000n0000nhy:Show instrument peaksMixer*000000000n0000nhy: = OffShow instrument peaks = OffMixer(000000000n0000nhy: = OnShow instrument peaks = OnMixer,00000000T (00000000g})&Instrument name (double click to edit) MixerLine0000Mute MixerLine00Pan MixerLine00000nQu Play sample MixerLine&000000000n000-[ [%1]Set instr. pan [%1] MixerLine$000000000nϊ-[ [%1]Set instrument volume [%1] MixerLine00Solo MixerLine 00000CutoffPatternEditorPanele0W0D0000^0OHear new notesPatternEditorPanele0W0D0000n = OffHear new notes = OffPatternEditorPanele0W0D0000n = OnHear new notes = OnPatternEditorPanel*QuN-0o00000n0000Y f0g0M0~0[008Is not possible to change the pattern size when playing.PatternEditorPanel 0000U00_0000000000Loaded SoundlibraryPatternEditorPanel00000Lxb0U00f0D0~0[0No pattern selectedPatternEditorPanel 00000NoteKeyPatternEditorPanel00PanPatternEditorPanel00000000 - %1Pattern editor - %1PatternEditorPanel@QeR0U00_00000/MIDI00000n000000 = Off,Quantize incoming keyboard/midi events = OffPatternEditorPanel>QeR0U00_00000/MIDI00000n000000 = On+Quantize incoming keyboard/midi events = OnPatternEditorPanel800000/MIDI0000000000k0000000Y0%Quantize keyboard/midi events to gridPatternEditorPanel 00000 ResonancePatternEditorPanel0000ɉP^0nxbSelect grid resolutionPatternEditorPanel0000n0000000xbSelect note propertiesPatternEditorPanel00000000nxbSelect pattern sizePatternEditorPanel000000000nhy:Show drum editorPatternEditorPanel000000000000nhy:Show piano roll editorPatternEditorPanel 000000VelocityPatternEditorPanelbY'Zoom inPatternEditorPanel~.\Zoom outPatternEditorPanelxb0W0_00000N&0y0Fill with selected patternPatternFillDialog dS(&C)&ClearPatternFillDialog_UIN&0y0(&F)&FillPatternFillDialog_UIAlt+CPatternFillDialog_UIAlt+FPatternFillDialog_UI 00000CancelPatternFillDialog_UIForm 1PatternFillDialog_UIY:From:PatternFillDialog_UIOKPatternFillDialog_UI}BN:To:PatternFillDialog_UI%1PatternPropertiesDialog%1#2PatternPropertiesDialog00000n00000Pattern propertiesPatternPropertiesDialog00000(&C)&CancelPatternPropertiesDialog_UI&OKPatternPropertiesDialog_UIAlt+CPatternPropertiesDialog_UIAlt+OPatternPropertiesDialog_UIForm1PatternPropertiesDialog_UIe0W0D00000nT RMNew Pattern NamePatternPropertiesDialog_UI00000n00000Pattern categoryPatternPropertiesDialog_UI00PanPianoRollEditor 000000VelocityPianoRollEditor BC 000 off BC Panel off PlayerControl BC 000 on BC Panel on PlayerControlBPM0n00000hQuY Count BPM and start PLAY PlayerControl BPM0n00000h-[ Count and set BPM PlayerControl* JACK0000000000 = Off Jack-Time-Master mode = Off PlayerControl( JACK0000000000 = On Jack-Time-Master mode = On PlayerControl000000000000nonBeatCounter Panel on PlayerControl N f0M2Destructive Record PlayerControlN f0M000 = OffDestructive mode = Off PlayerControlN f0M000 = OnDestructive mode = On PlayerControle0 Fast Forward PlayerControl00000000000Instrument rack PlayerControlBJACK00000000oJACK000000Ou(fB0n0RO\0W0~0Y0/JACK-transport will work only with JACK driver. PlayerControl$JACK00000000non/offJack-Time-Master on/off PlayerControl(JACK0000000000 = OffJack-transport mode = Off PlayerControl&JACK0000000000 = OnJack-transport mode = On PlayerControl&JACK00000000n on/offJack-transport on/off PlayerControl0000n000 Loop song PlayerControl0000n000 = 00Loop song = Off PlayerControl0000n000 = 00Loop song = On PlayerControl0000Mixer PlayerControle0W0DBPMP$ New BPM value PlayerControl0000000 Pattern Mode PlayerControl00000000nxb0Pattern mode selected. PlayerControl NfBP\kb0Pause. PlayerControlQu/NfBP\kb Play/ Pause PlayerControlQu0Playing. PlayerControlFBPM0LY f0W0_fB0kRubberband0k00Okc00000Q{0Y0:Recalculate Rubberband modified samples if bpm will change PlayerControl4Rubberband0k00Qh00000nQ{ OFF,Recalculate all samples using Rubberband OFF PlayerControl2Rubberband0k00Qh00000nQ{ On+Recalculate all samples using Rubberband ON PlayerControl2Record PlayerControl"MIDI00000n2 = OffRecord midi events = Off PlayerControl MIDI00000n2 = OnRecord midi events = On PlayerControl]0Mb;0WRewind PlayerControl BPM0n-[/BPM0n-[0hQuSet BPM / Set BPM and play PlayerControl000000000000nhy:Show Instrument Rack PlayerControl00000hy: Show mixer PlayerControl 000000 Song Mode PlayerControl0000000nxb0Song mode selected. PlayerControlP\kbStop PlayerControlP\kb0Stopped. PlayerControl(xb0W0_0000k000000R(&A)&Add Script to selected songPlaylistDialoge0W0D000000nO\b(&C)&Create a new ScriptPlaylistDialog xb0W0_000000n}(&E)&Edit selected ScriptPlaylistDialog00000000O(&O)&Open PlaylistPlaylistDialog000000(&P) &PlaylistPlaylistDialog xb0W0_000000nRJd(&R)&Remove selected ScriptPlaylistDialog,xb0W0_00000000000K0dY(&R)#&Remove selected song from PlaylistPlaylistDialog0000000O[X(&S)&Save PlaylistPlaylistDialog00000(&S)&ScriptsPlaylistDialog(sW(0n00000000000kR(&C)Add ¤t song to PlaylistPlaylistDialog xb0W0_0000k000000RAdd Script to selected SongPlaylistDialog00000000000kRAdd Song to PlayListPlaylistDialog"00000000000kR(&L)Add song to Play&listPlaylistDialog 0000n000kY1eW0W0~0W0_0Error loading song.PlaylistDialoge0 Fast ForwardPlaylistDialog<Hydrogen 000000 (*.h2playlist) Hydrogen Playlist (*.h2playlist)PlaylistDialog,Hydrogen 000000 (*.sh)Hydrogen Playlist (*.sh)PlaylistDialog*Hydrogen 00000 (*.sh)Hydrogen Scripts (*.sh)PlaylistDialog0000000n00 Load PlaylistPlaylistDialoge00000 New ScriptPlaylistDialog000000n000000-[0W0f0O0`0U0D0 0_0`0W0000000000n000000oO00j0D0g0O0`0U0D0 0T000j0U0D00Q0isfBp0g0oO0F0S0h0L0g0M0j0D0n0g0Y0No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment.PlaylistDialog000000LO000f0D0~0[0!No Script in use!PlaylistDialog 000000Lxb0U00f0D0~0[0!No Script selected!PlaylistDialog000000j0W! No Script!PlaylistDialog40000k0000L0j0D0K00000Lxb0U00f0D0~0[0!$No Song in List or no Song selected!PlaylistDialog0000Lxb0U00f0D0~0[0!No Song selected!PlaylistDialog0000Lxb0U00f0D0~0[0!No song selected!PlaylistDialog NfBP\kb0Pause.PlaylistDialog0Qu / NfBP\kb / xb0W0_0000n00Play/ Pause/ Load selected songPlaylistDialog00000000000Playlist BrowserPlaylistDialog,000000: 000 No. %1 0k-[Playlist: set song no. %1PlaylistDialog0~0Z0000O[X0W0fN 0U0DPlease save your song firstPlaylistDialog]0Mb;0WRewindPlaylistDialog0000000nO[X Save PlaylistPlaylistDialog&T RM0N0Q0f0000000O[X(&A)Save Playlist &asPlaylistDialog 00000ScriptPlaylistDialog00000T 0B00D0o000000n000Lzzv}e[W0T+00g0D0~0Y0 ͉ 00000T 0B00D0o000000n000Lzzv}e[W0T+00g0o0D0Q0~0[00Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces.PlaylistDialog000000n000000-[Set your Default EditorPlaylistDialog 000000 Song listPlaylistDialogP\kbStopPlaylistDialogBfTJ, e0W0D00000ob@g 0L[L010U00f0D0_ʼn0L0B00~0Y!=WARNING, the new file is executable by the owner of the file!PlaylistDialog000000n[L exec ScriptPlaylistDialog000000j0W no ScriptPlaylistDialogN&0yf0HsortPlaylistDialog00000000000PlayList BrowserPlaylistDialog_UI 000000 Song listPlaylistDialog_UI00000(&C)&CancelPreferencesDialog&OkPreferencesDialog(<b>ALSA 0000</b><br>ALSA Driver
    PreferencesDialog <b>00000nRՐxb</b>!Automatic driver selectionPreferencesDialog4<b>CoreAudio 00000</b><br>CoreAudio Driver
    PreferencesDialogp<b>JACK Audio Connection Kit 00000</b><br>ONE^0j0000000000CJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialogf<b>Open Sound System</b><br>|!f0j000000000 [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog2<b>PortAudio 0000</b><br>PortAudio Driver
    PreferencesDialogN<br><b><font color="red">N [Qh</font></b>0
    Not compiledPreferencesDialog0000000nQwR0L_ʼn0g0Y0 QwR0W0~0Y0K)Driver restart required. Restart driver?PreferencesDialoge0DFastPreferencesDialogfnNormalPreferencesDialogJLASH00000g R/q!R0k0Y00_0hydrogen0QwR0W0f0O0`0U0D6Please restart hydrogen to enable/disable LASH supportPreferencesDialog-[ PreferencesPreferencesDialogE0DSlowPreferencesDialog###PreferencesDialog_UI Y(&A) &AppearancePreferencesDialog_UI00000(&C)&CancelPreferencesDialog_UI N,(&G)&GeneralPreferencesDialog_UIMIDI 0000(&M) &Midi SystemPreferencesDialog_UI&OKPreferencesDialog_UI&g_0kO0c0_00000000O(&R)&Reopen last used playlistPreferencesDialog_UI"g_0kOu(0W0_00000O(&R)&Reopen last used songPreferencesDialog_UI1PreferencesDialog_UI10PreferencesDialog_UI11PreferencesDialog_UI12PreferencesDialog_UI13PreferencesDialog_UI14PreferencesDialog_UI15PreferencesDialog_UI16PreferencesDialog_UI2PreferencesDialog_UI3PreferencesDialog_UI4PreferencesDialog_UI44100PreferencesDialog_UI48000PreferencesDialog_UI5PreferencesDialog_UI6PreferencesDialog_UI7PreferencesDialog_UI8PreferencesDialog_UI88200PreferencesDialog_UI9PreferencesDialog_UI96000PreferencesDialog_UI8<i>00000nY f0oQwR_0kg R0h0j00~0Y0</i>=After a font change the application must be restarted.PreferencesDialog_UI0Y0y0fAllPreferencesDialog_UIAlt+CPreferencesDialog_UIAlt+DPreferencesDialog_UIAlt+OPreferencesDialog_UIAlt+RPreferencesDialog_UI000000000n0000Application fontPreferencesDialog_UI000000000(&S) Audio &SystemPreferencesDialog_UI00000QR0ns}0Audio output detailsPreferencesDialog_UI00000000 Buffer sizePreferencesDialog_UI 00000ChannelPreferencesDialog_UI"000000nQR000xc}(&D)Connect to &Default Output PairPreferencesDialog_UI0000DevicePreferencesDialog_UIe0DFastPreferencesDialog_UIForm1PreferencesDialog_UI000000q!Ignore note-offPreferencesDialog_UIQeRInputPreferencesDialog_UI000np^Meters falloff speedPreferencesDialog_UI0000000nMetronome volumePreferencesDialog_UIMIDI 00000 Midi driverPreferencesDialog_UI00000n0000 Mixer fontPreferencesDialog_UIfnNormalPreferencesDialog_UI:Rubberband0000000000000000x0n00+Path to the Rubberband command-line utilityPreferencesDialog_UI 000000 PolyphonyPreferencesDialog_UI00000000 Post-FaderPreferencesDialog_UI0000000 Pre-FaderPreferencesDialog_UI QR0nQRestart outputPreferencesDialog_UI0000000 Sample ratePreferencesDialog_UI00000nxb Select fontPreferencesDialog_UIE0DSlowPreferencesDialog_UI0000StylePreferencesDialog_UI 0000QR Track outputPreferencesDialog_UIlash0O0FUse lashPreferencesDialog_UI00000000R%QR0O\bcreate per-instrument outputsPreferencesDialog_UI00000(&C)&Cancel SampleEditor&Ok SampleEditorT0000000X0~0Y0L0O[X0U00f0D0j0DY f0L0B00K00W00~0[00 000W0D0g0Y0KGClose dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditor@0S0n0~0~0`0hO[X0U00f0D0j0DY f0LY1000~0Y0 000W0D0g0Y0K?Unsaved changes left. This changes will be lost. Are you sure? SampleEditor 000 (SJ0000) Pitch (Semitone,Cent)SampleEditor_UIj"Rubberband 00000000000" : 000 (0000w) 0h000000n0000Y f0S"Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio.SampleEditor_UIY f0niu((&A)&Apply ChangesSampleEditor_UI0X0(&C)&CloseSampleEditor_UI Qu(&P)&PlaySampleEditor_UI0SampleEditor_UI1SampleEditor_UI1/16SampleEditor_UI1/2SampleEditor_UI1/32SampleEditor_UI1/4SampleEditor_UI1/64SampleEditor_UI1/8SampleEditor_UI10SampleEditor_UI11SampleEditor_UI12SampleEditor_UI13SampleEditor_UI14SampleEditor_UI15SampleEditor_UI16SampleEditor_UI17SampleEditor_UI18SampleEditor_UI19SampleEditor_UI2SampleEditor_UI20SampleEditor_UI21SampleEditor_UI22SampleEditor_UI23SampleEditor_UI24SampleEditor_UI25SampleEditor_UI26SampleEditor_UI27SampleEditor_UI28SampleEditor_UI29SampleEditor_UI3SampleEditor_UI30SampleEditor_UI31SampleEditor_UI32SampleEditor_UI4SampleEditor_UI5SampleEditor_UI6SampleEditor_UI7SampleEditor_UI8SampleEditor_UI9SampleEditor_UI <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">000</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">0000</span></p></body></html>

    Loop

    Count

    SampleEditor_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">000</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">000</span></p></body></html>

    Loop

    mode

    SampleEditor_UI.00000n}B000h0000n}B0000000net"Adjust sample end & loop end frameSampleEditor_UI"00000n000וY00000netAdjust sample loop begin frameSampleEditor_UI00000nY00000netAdjust sample start frameSampleEditor_UI 00000DialogSampleEditor_UI}B00EndSampleEditor_UI000LoopSampleEditor_UI 0000000000nQu(&L)P&lay original sampleSampleEditor_UI0000B0_00n0000w:Sample length to beat:SampleEditor_UIYStartSampleEditor_UI00000000nz.^ fade-out typeSampleEditor_UIeTforwardSampleEditor_UI000loopsSampleEditor_UIe0W0D0000w:new sample length:SampleEditor_UI00offSampleEditor_UI0000panoramaSampleEditor_UI0000pingpongSampleEditor_UIeTreverseSampleEditor_UI000eT0n-[set processingSampleEditor_UIvolumeSampleEditor_UI0000000n000000Documentation indexSimpleHTMLBrowser"0S0n0000000S0NN hy:0W0j0DDon't show this message anymoreSimpleHTMLBrowser 00000ManualSimpleHTMLBrowserOkSimpleHTMLBrowserHydrogen 0x00F0S0]Welcome to HydrogenSimpleHTMLBrowser00000(&C)&CancelSongEditorPanel&OkSongEditorPanel0000000000n000Clear pattern sequenceSongEditorPanele0W0D00000nO\bCreate new patternSongEditorPanel 000000 Draw modeSongEditorPanel000000}0g R0k0Y0Enable time line editSongEditorPanelxb0W0_00000N 0kMove the selected pattern downSongEditorPanelxb0W0_00000N 0kMove the selected pattern upSongEditorPanel0000 %1 Pattern %1SongEditorPanel xb000 Select modeSongEditorPanel0000000 Song EditorSongEditorPanel@fTJ00B0j0_0n0000000000mS0W0~0Y0 000W0D0g0Y0K?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanelg*R^not_categorizedSongEditorPanel00000000000single pattern modeSongEditorPanel0000000 stacked modeSongEditorPanel00000000000stacked pattern modeSongEditorPanel500SongEditorPanelBpmWidget_UI500,55SongEditorPanelBpmWidget_UIBPMSongEditorPanelBpmWidget_UI 00000CancelSongEditorPanelBpmWidget_UIBPM00000nRJdDelete BPM MarkerSongEditorPanelBpmWidget_UI0S0nBPM00000RJd0W0~0YDelete this BPM MarkerSongEditorPanelBpmWidget_UI000000N 0n0000}Edit beat in timelineSongEditorPanelBpmWidget_UIsW(0nBPMP$0}#Edit the bpm value for current beatSongEditorPanelBpmWidget_UIFormSongEditorPanelBpmWidget_UIOkSongEditorPanelBpmWidget_UI 00000CancelSongEditorPanelTagWidget_UIFormSongEditorPanelTagWidget_UIOkSongEditorPanelTagWidget_UI00TagSongEditorPanelTagWidget_UI00000(&C)&CancelSongEditorPatternList&OkSongEditorPatternList000CopySongEditorPatternListRJdDeleteSongEditorPatternListN&0y0/0000...Fill/Clear ...SongEditorPatternList6Hydrogen 0000 (*.h2pattern)Hydrogen Pattern (*.h2pattern)SongEditorPatternList00000n00 Load PatternSongEditorPatternList000000O Open PatternSongEditorPatternList 0000 1 Pattern 1SongEditorPatternList 000000 PropertiesSongEditorPatternList00000nO[X Save PatternSongEditorPatternList4000000000L[XW(0W0f0D0~0Y0 N f0M0W0~0Y0K9The pattern-file exists. Overwrite the existing pattern?SongEditorPatternList N`0000Virtual PatternSongEditorPatternListg*R^not_categorizedSongEditorPatternList0000n000000Song propertiesSongPropertiesDialog &OKSongPropertiesDialog_UI00000(&C)&CancelSongPropertiesDialog_UIAlt+CSongPropertiesDialog_UIAlt+OSongPropertiesDialog_UIO\AuthorSongPropertiesDialog_UIForm1SongPropertiesDialog_UI 00000LicenseSongPropertiesDialog_UIPNotesSongPropertiesDialog_UI 0000nT RM Song nameSongPropertiesDialog_UI"00000000000n000000Export Sound LibrarySoundLibraryExportDialogSqgBrowseSoundLibraryExportDialog_UI 00000DialogSoundLibraryExportDialog_UI 000000ExportSoundLibraryExportDialog_UI800000000000n000000g0000Lvzu0W0~0W0_0-An error occurred importing the SoundLibrary.SoundLibraryImportDialog O\: %1 Author: %1SoundLibraryImportDialog(00000000000n000000...Downloading SoundLibrary...SoundLibraryImportDialog 000000DrumkitsSoundLibraryImportDialog0000000n00000Import drumkitSoundLibraryImportDialog000000n InstalledSoundLibraryImportDialog00000: %1 License: %1SoundLibraryImportDialogeNewSoundLibraryImportDialog0000PatternsSoundLibraryImportDialog000SongsSoundLibraryImportDialog 00000000000n00000Sound Library importSoundLibraryImportDialog0000000000 Sound librarySoundLibraryImportDialog0%1 0k00000000000000000W0~0W0_SoundLibrary imported in %1SoundLibraryImportDialograKStatusSoundLibraryImportDialog&00000000000000nfe...Updating SoundLibrary list...SoundLibraryImportDialog1SoundLibraryImportDialog_UI O\... Author...SoundLibraryImportDialog_UI Sqg... Browse...SoundLibraryImportDialog_UI0X0CloseSoundLibraryImportDialog_UI 00000DialogSoundLibraryImportDialog_UI0000000h000000Download and installSoundLibraryImportDialog_UI00000000n}Edit server listSoundLibraryImportDialog_UI 000000InstallSoundLibraryImportDialog_UI0000000InternetSoundLibraryImportDialog_UI00000... License...SoundLibraryImportDialog_UI00000000 Local fileSoundLibraryImportDialog_UI0000000000T Sound Library NameSoundLibraryImportDialog_UI0000000000`X1Sound library InfoSoundLibraryImportDialog_UI 0000nfe Update listSoundLibraryImportDialog_UI00000(&C)&CancelSoundLibraryPanel&OkSoundLibraryPanelRJdDeleteSoundLibraryPanel 0000n000kY1eW0W0~0W0_0Error loading song.SoundLibraryPanel 000000ExportSoundLibraryPanel00LoadSoundLibraryPanel0000PatternsSoundLibraryPanel 00000 PropertiesSoundLibraryPanel000SongsSoundLibraryPanel00000n000000System drumkitsSoundLibraryPanel00000n000000 User drumkitsSoundLibraryPanelFfTJ0xb0U00_00000o00000K0RJd0U00~0Y0 000W0D0g0Y0KFWarning, the selected pattern will be deleted from disk. Are you sure?SoundLibraryPanelO\AuthorSoundLibraryPropertiesDialog_UI 00000CancelSoundLibraryPropertiesDialog_UI 00000DialogSoundLibraryPropertiesDialog_UI`X1 InformationSoundLibraryPropertiesDialog_UI 00000LicenseSoundLibraryPropertiesDialog_UIT RMNameSoundLibraryPropertiesDialog_UIO[X Save SoundLibraryPropertiesDialog_UI8000000000nY f000000000000kO[X0W0~0Y3Save changes made to instruments into sound librarySoundLibraryPropertiesDialog_UI000000n-[0}Edit repository settingsSoundLibraryRepositoryDialog00000000}Edit server listSoundLibraryRepositoryDialogURLURLSoundLibraryRepositoryDialogRAddSoundLibraryRepositoryDialog_UIRJdDeleteSoundLibraryRepositoryDialog_UI 00000DialogSoundLibraryRepositoryDialog_UI#Please supply at least a valid nameSoundLibrarySaveDialog00000000000nO[XSave Sound LibrarySoundLibrarySaveDialogO\AuthorSoundLibrarySaveDialog_UI 00000CancelSoundLibrarySaveDialog_UI 00000DialogSoundLibrarySaveDialog_UI`X1 InformationSoundLibrarySaveDialog_UI 00000LicenseSoundLibrarySaveDialog_UIT RMNameSoundLibrarySaveDialog_UIO[X Save SoundLibrarySaveDialog_UI0000000000 Sound librarySoundLibraryTreeN`00000xbSelect virtual patternVirtualPatternDialog 00000CancelVirtualPatternDialog_UI 00000DialogVirtualPatternDialog_UIOKVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.ja.ts000066400000000000000000006613001211146647700206300ustar00rootroot00000000000000 AboutDialog <b>Project page</b><br> <b>プロジェクトページ</b><br> About このプログラムについて <b>Website</b><br> <b>ウェブサイト</b><br> <b>Mailing lists</b><br> <b>メーリングリスト</b><br> <b>Main coder and mantainer:</b><br> <b>中心開発者やメンテナー:</b><br> AboutDialog_UI ### About Hydrogen Hydrogenについて A&bout Hydrogenについて(&A) &Authors 作者(&A) &License ライセンス(&L) &OK Alt+O <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info オーディオエンジン情報 AudioEngineInfoForm_UI Playing notes ノートの再生 Process time 経過時間 Audio engine state オーディオエンジンの状態 Song state ソングの状態 Buffer size バッファーサイズ Sample rate サンプルレート Form1 ### Frames フレーム Ticks チック Song position ソングポジション Patterns パターン Selected pattern 選択されたパターン Selected instrument 選択されたインストルメント Connected to 接続 Sampler サンプラー Synth シンセサイザー Sequencer シーケンサー MIDI input MIDI入力 Name 名前 Audio output 音声出力 Realtime frames リアルタイムフレーム AudioFileBrowser Audio File Browser オーディオファイルブラウザー Size: %1 bytes サイズ: %1 バイト Samplerate: %1 サンプルレート: %1 s Name: 名前: Size: サイズ: Samplerate: サンプルレート: Sample length: サンプル長: Please do not preview samples which are longer than 10 minutes! 10分以上のサンプルはプレビューしないで下さい! Sample length: サンプル長: AudioFileBrowser_UI Dialog ダイアログ Open 開く Name: 名前: Samplerate: サンプルレート: Size: サイズ: Length: 長さ: Cancel キャンセル Pla&y samples by clicking クリックでサンプルを再生(&Y) &Up 上へ(&U) &Home ホーム(&H) &Play Sample サンプルの再生(&P) &Filename to instrument name ファイル名をインストルメント名にする(&F) &Stop 停止(&S) View hidden folders 隠しフォルダーの表示 Be careful, this change all Layer velocity settings この変更はすべてのレイヤーの設定に反映されます Set automatic velocity ベロシティーの自動調製 Director Director ディレクター Director_UI Dialog ダイアログ DownloadWidget (%1/%2 KiB) - ETA %3 DrumkitManager_UI Drumkit name ドラムキット名 Delete drumkit ドラムキットの削除 Load drumkit ドラムキットの読み込み Load 読み込み Author 作者 Info 情報 Save 保存 Browse 参照 Import インポート Drumkit filename ドラムキットのファイル名 Export エクスポート Drumkit directory ドラムキットのディレクトリ Form1 ### Drumkit author ### ドラムキットの作者 ### Drumkit info ### ドラムキットの情報 ### The drumkit will be installed zncxbmzbxcmznxbcmz ### ドラムキットがインストールされます zncxbmzbxcmznxbcmz ### Drumkit name ### ドラムキットの名前 <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b> 以下のURLから、より多くのドラムキットをダウンロードできます<br> http://www.hydrogen-music.org </b> ExportSongDialog Export song ソングのエクスポート The file %1 exists. Overwrite the existing file? ファイル %1 は存在しています。 上書きしますか? Export to a single track 1トラックにエキスポート Export to seperate tracks 複数のトラックにエキスポート Both 両方 ExportSongDialog_UI Export filename エクスポートファイル名 Export Whole Song to WAV ソング全体を WAV へエクスポート Alt+C &Export エクスポート(&E) Alt+E &Browse... 参照(&B)... Alt+B &Close 閉じる(&C) Samplerate in Hz: サンプルレート (Hz): 22050 44100 48000 96000 192000 SampleDepth in Bit: サンプルのビット数: 8 16 24 32 Templates: テンプレート: WAV in CD quality "44,1kHz, 16 bit PCM" WAV - CDクオリティー "44.1kHz, 16ビット PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV - ADATクオリティー "48kHz, 16ビット PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV - 程良いクオリティー "48kHz, 24ビット PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV- 低クオリティー "22.05kHz, 8ビット PCM" WAV best Mixdown quality "96 kHz, 32 bit PCM" WAV - ミックスダウン向きクオリティー "96kHz, 32ビット PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF - CDクオリティー "44.1kHz, 16ビット PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF - ADATクオリティー "48kHz, 16ビット PCM" AIFF in better quality "48 kHz, 24 bit PCM" AIFF - 程よいクオリティー "48kHz, 24ビット PCM" FLAC lossless compressor in good quality "48 kHz" FLAC - よいクオリティのロスレス圧縮 "48kHz" OGG Vorbis loosely compressed in good quality "VBR" OGG Vorbis - よいクオリティのロスレス圧縮 "VBR" Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off プラグイン on/off Master output マスター出力 H2Core::SongEditorPanelBpmWidget BPM H2Core::SongEditorPanelTagWidget Tag タグ H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties サウンドライブラリーのプロパティー &Ok &Cancel キャンセル(&C) This is not possible, you can only save changes inside instruments to the current loaded sound library 現在ロードされているサウンドライブラリーに属するインストルメントでなければ変更を保存できません Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? 警告! ドラムキット名を変更すると新規にドラムキットを作ることになります。 よろしいですか? Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] 読み込まれたドラムキット: [%1] Song Editor ソングエディタ Instrument + Pattern Mixer ミキサー InstrumentEditor Show instrument properties インストルメントのプロパティー表示 Show layers properties レイヤーのプロパティー表示 Random pitch factor ランダムピッチ要素 Filter Cutoff カットオフフィルター Filter resonance レゾナンスフィルター Attack アタック Decay ディケイ Sustain サステイン Release リリース Layer gain レイヤーのゲイン New instrument name 新しいインストルメント名 Instrument gain インストルメントのゲイン Layer pitch (Coarse) レイヤーのピッチ (粗め) Layer pitch (Fine) レイヤーのピッチ (細やか) General 一般 Layers レイヤー Stop the current playing instrument-note before trigger the next note sample. 次のノートサンプルがセットされたら現在のインストルメントノートの再生を停止する。 Auto-Stop-Note ノート再生の自動停止 InstrumentLine Clear notes ノートのクリア Randomize velocity ベロシティーをランダムに Delete instrument インストルメントの削除 Fill notes ... ノートの自動挿入... Fill all notes ノートを全て挿入 Fill 1/2 notes ノートを2つおきに挿入 Fill 1/3 notes ノートを3つおきに挿入 Fill 1/4 notes ノートを4つおきに挿入 Fill 1/6 notes ノートを6つおきに挿入 Fill 1/8 notes ノートを8つおきに挿入 Mute instrument Solo ソロ InstrumentRack Show Instrument editor インストルメントエディターの表示 Instrument インストルメント Show sound library サウンドライブラリーの表示 Sound library サウンドライブラリー LadspaFXMixerLine Edit FX parameters プラグインのパラメーターを変更 FX bypass プラグインのバイパス Ladspa FX name LADSPAプラグイン名 Effect return エフェクトのリターン LadspaFXProperties Select FX プラグインの選択 [%1] LADSPA FX Properties [%1] LADSPAプラグインのプロパティー LADSPA FX %1 Properties LADSPAプラグイン %1 のプロパティー No plugin プラグインなし Activate 有効化 Deactivate 無効化 Remove FX プラグインの削除 LadspaFXSelector Groups グループ Stereo ステレオ Mono モノラル Not supported サポートされていません Select LADSPA FX LADSPAプラグインの選択 Recently Used 最近使ったプラグイン Alphabetic List アルファベット順リスト Categorized カテゴリー別リスト LadspaFXSelector_UI Form1 ### fx label ### プラグインラベル ### fx type ### プラグインタイプ ### fx ID ### プラグインID &Cancel キャンセル(&C) Alt+C &OK Alt+O 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">プラグイン名:</span></p></body></html> ### fx name 1 ### プラグイン名 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ラベル:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">タイプ:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">開発者:</span></p></body></html> ### FX maker 1 2 ### プラグインマーカー 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">コピーライト:</span></p></body></html> ### copyright 1 2 3 ### コピーライト 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm &Save 保存(&S) &Discard 破棄(&D) Cancel キャンセル Error loading song. ソングの読み込みに失敗しました。 Hydrogen Ready. Hydrogen Song (*.h2song) Hydrogen のソングファイル (*.h2song) Save song ソングの保存 Open song ソングを開く Print Objects オブジェクトの印刷 Export MIDI file MIDI ファイルへのエクスポート Midi file (*.mid) MIDI ファイル (*.mid) &New 新規(&N) &Open 開く(&O) Open &Demo デモを開く(&D) Open &recent 最近開いたファイル(&R) Export &MIDI file MIDI ファイルへエクスポート(&M) &Preferences 設定(&P) &Quit 閉じる(&Q) Show &audio engine info オーディオエンジンの情報表示(&A) &User manual ユーザマニュアル(&U) &About このプログラムについて(&A) &Cancel キャンセル(&C) Unknown audio driver 不明なオーディオドライバー Error starting audio driver オーディオドライバーにエラーが発生 Jack driver: server shutdown JACKドライバー: サーバーの終了 Jack driver: cannot activate client JACKドライバー: クライアントを有効化できませんでした Jack driver: cannot connect output port JACKドライバー: 出力ポートへ接続できませんでした Jack driver: error in port register JACKドライバー: ポート登録のエラー &Export song ソングのエクスポート(&E) De&bug デバッグ(&B) &Project プロジェクト(&P) Save &as... 名前を付けて保存(&A)... &Tools ツール(&T) &Mixer ミキサー(&M) &Instrument Rack インストルメントラック(&I) &Info 情報(&I) Song saved. ソングを保存しました。 Unknown error %1 不明なエラーです %1 Clear all instruments? すべてのインストルメントを除去しますか? Ok You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! これはHydrogenの開発バージョンです。バグや提案をメーリングリストで報告してくれたら嬉しいです。<br><br>どうもありがとう! Could not save song. ソングを保存できませんでした。 Open &Pattern パターンを開く(&P) Hydrogen Pattern (*.h2pattern) Hydrogen パターン (*.h2pattern) Save Pattern as ... 名前を付けてパターンを保存... Pattern saved. パターンを保存しました。 Open Pattern パターンを開く Don't show this message anymore このメッセージをこれ以上は表示しない Playlist: Set song No. %1 プレイリスト: ソングNo. %1 にセット Show &info 情報の表示(&I) Expor&t pattern as... 名前を付けてパターンをエクスポート(&T)... I&nstruments インストルメント(&N) &Add instrument インストルメントの追加(&A) &Clear all 全てを除去(&C) &Save library ライブラリーの保存(&S) &Export library ライブラリーのエクスポート(&E) Playlist &editor プレイリストエディター(&E) &Import library ライブラリーのインポート(&I) Info|About Song saved as. 名前を付けてソングを保存します。 Playlist: Song No. %1 プレイリスト: ソング No. %1 Could not export pattern. パターンをエクスポートできませんでした。 The document contains unsaved changes. Do you want to save the changes? ドキュメントは保存されていない変更を含んでいます。 変更を保存しますか? Director ディレクター Undo history &Undo menu Undo Redo Input mode Instrument インストルメント Drumkit Report bug MasterMixerLine Set master volume [%1] マスター音量の設定 [%1] Swing スウィング Humanize time 時間のヒューマナイズ Humanize velocity ベロシティーのヒューマナイズ Set humanize time parameter [%1] 時間パラメーターをヒューマナイズ [%1] Set humanize velocity parameter [%1] ベロシティーパラメーターをヒューマナイズ [%1] Set swing factor [%1] スウィング要素の設定 [%1] MidiTable Event イベント Param. パラメーター。 Action アクション press button to record midi event ボタンを押してMIDIイベントを記録します Mixer Show instrument peaks インストルメントのピークの表示 Show instrument peaks = On インストルメントのピークの表示 = On Show instrument peaks = Off インストルメントのピークの表示 = Off Set FX %1 level プラグインに %1 レベルを設定 Set LADSPA FX ( %1 ) volume LADSPAプラグインにボリュームを設定 ( %1 ) Show FX panel プラグインパネルの表示 MixerLine Play sample サンプルの再生 Mute ミュート Solo ソロ Pan パン Instrument name (double click to edit) インストルメント名 (ダブルクリックで編集) Set instrument volume [%1] インストルメントの音量設定 [%1] Set instr. pan [%1] インストルメントのパンを設定 [%1] PatternEditorPanel Hear new notes 新しいノートを聞く Hear new notes = On 新しいノートの音 = On Hear new notes = Off 新しいノートの音 = Off Pattern editor - %1 パターンエディタ - %1 Quantize keyboard/midi events to grid キーボード/MIDIイベントをグリッドにクオンタイズする Quantize incoming keyboard/midi events = On 入力されたキーボード/MIDIイベントのクオンタイズ = On Quantize incoming keyboard/midi events = Off 入力されたキーボード/MIDIイベントのクオンタイズ = Off Zoom in 拡大 Zoom out 縮小 Is not possible to change the pattern size when playing. 再生中はパターンのサイズを変更できません。 Select pattern size パターンサイズの選択 Select grid resolution グリッド解像度の選択 No pattern selected パターンが選択されていません Select note properties ノートのプロパティーを選択 Velocity ベロシティー Pan パン Cutoff カットオフ Resonance レゾナンス Lead and Lag Loaded Soundlibrary ロードされたサウンドライブラリー NoteKey ノートキー destructive mode pre delete settings destructive mode post delete settings Show piano roll editor ピアノロールエディターの表示 Show drum editor ドラムエディターの表示 PatternFillDialog Fill with selected pattern 選択したパターンを並べる PatternFillDialog_UI Alt+C Form 1 &Fill 並べる(&F) Alt+F &Clear 除去(&C) From: 開始: To: 終了: Cancel キャンセル OK PatternPropertiesDialog Pattern properties パターンのプロパティ %1#2 %1 PatternPropertiesDialog_UI &Cancel キャンセル(&C) Alt+C &OK Alt+O New Pattern Name 新しいパターンの名前 Form1 Pattern category パターンのカテゴリー Pattern description PianoRollEditor Velocity ベロシティー Pan パン Lead and Lag PlayerControl Song Mode ソングモード Playing. 再生。 Stopped. 停止。 Song mode selected. ソングモードの選択。 Stop 停止 Pattern Mode パターンモード Pattern mode selected. パターンモードの選択。 Jack-transport on/off JACKトランスポートの on/off Jack-transport mode = On JACKトランスポートモード = On Jack-transport mode = Off JACKトランスポートモード = Off New BPM value 新しいBPM値 Rewind 巻き戻し Play/ Pause 再生/一時停止 Fast Forward 早送り Pause. 一時停止。 JACK-transport will work only with JACK driver. JACKトランスポートはJACKドライバーを使用時のみ動作します。 Loop song ソングのループ Loop song = On ソングのループ = オン Loop song = Off ソングのループ = オフ Show mixer ミキサーを表示 Mixer ミキサー Show Instrument Rack インストルメントラックの表示 Instrument rack インストルメントラック BeatCounter Panel on ビートカウンターパネルのon Set BPM / Set BPM and play BPMの設定/BPMの設定と再生 Jack-Time-Master on/off JACKタイムマスターのon/off BC Panel on BC パネル on BC Panel off BC パネル off Count BPM and start PLAY BPMのカウントと再生開始 Count and set BPM BPMのカウントと設定 Jack-Time-Master mode = On JACKタイムマスターモード = On Jack-Time-Master mode = Off JACKタイムマスターモード = Off Record 記録 Destructive Record 上書き録音 Record midi events = On MIDIイベントの記録 = On Record midi events = Off MIDIイベントの記録 = Off Destructive mode = Off 上書きモード = Off Destructive mode = On 上書きモード = On Recalculate Rubberband modified samples if bpm will change BPMが変更した時にRubberbandによる修正サンプルを再計算する Recalculate all samples using Rubberband ON Rubberbandによる全サンプルの再計算 On Recalculate all samples using Rubberband OFF Rubberbandによる全サンプルの再計算 OFF Switch metronome on/off PlaylistDialog Song list ソングリスト Script スクリプト exec Script スクリプトの実行 Add Song to PlayList ソングをプレイリストに追加 No Song selected! ソングが選択されていません! Load Playlist プレイリストの読み込み Hydrogen Playlist (*.h2playlist) Hydrogen プレイリスト (*.h2playlist) Save Playlist プレイリストの保存 No Song in List or no Song selected! リストにソングがないか、ソングが選択されていません! Hydrogen Playlist (*.sh) Hydrogen プレイリスト (*.sh) Add Script to selected Song 選択したソングにスクリプトを追加 No Script in use! スクリプトが使われていません! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. デフォルトのエディターを設定してください。 ただし、コンソールベースのエディターは使わないでください。 ごめんなさい、けど現時点では使うことができないのです。 Set your Default Editor デフォルトのエディターを設定 No Script selected! スクリプトが選択されていません! Error loading song. ソングの読み込みに失敗しました。 sort 並べ替え Hydrogen Scripts (*.sh) Hydrogen スクリプト (*.sh) New Script 新規スクリプト Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. スクリプト名あるいはスクリプトのパスが空白文字を含んでいます。 重要 スクリプト名あるいはスクリプトのパスが空白文字を含んではいけません。 No Script! スクリプトなし! &Playlist プレイリスト(&P) Add song to Play&list ソングをプレイリストに追加(&L) Add &current song to Playlist 現在のソングをプレイリストに追加(&C) &Remove selected song from Playlist 選択したソングをプレイリストから除外(&R) &Open Playlist プレイリストを開く(&O) &Save Playlist プレイリストを保存(&S) Save Playlist &as 名前を付けてプレイリストを保存(&A) &Scripts スクリプト(&S) &Add Script to selected song 選択したソングにスクリプトを追加(&A) &Edit selected Script 選択したスクリプトの編集(&E) &Remove selected Script 選択したスクリプトの削除(&R) &Create a new Script 新しいスクリプトの作成(&C) Rewind 巻き戻し Play/ Pause/ Load selected song 再生 / 一時停止 / 選択したソングの読み込み Stop 停止 Fast Forward 早送り Please save your song first まずソングを保存して下さい WARNING, the new file is executable by the owner of the file! 警告, 新しいファイルは所有者が実行を許されている必要があります! Pause. 一時停止。 Playlist Browser プレイリストブラウザー No song selected! ソングが選択されていません! Playlist: set song no. %1 プレイリスト: ソング No. %1 に設定 no Script スクリプトなし &New Playlist PlaylistDialog_UI PlayList Browser プレイリストブラウザー Song list ソングリスト PreferencesDialog Slow 遅い Normal 普通 Fast 早い <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Open Sound System</b><br>簡易なオーディオドライバ [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">不完全</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>JACK Audio Connection Kit ドライバー</b><br>低遅延なオーディオドライバー Preferences 設定 <b>ALSA Driver</b><br> <b>ALSA ドライバ</b><br> <b>Automatic driver selection</b> <b>ドライバの自動選択</b> <b>PortAudio Driver</b><br> <b>PortAudio ドライバ</b><br> <b>CoreAudio Driver</b><br> <b>CoreAudio ドライバー</b><br> Please restart hydrogen to enable/disable LASH support LASHサポートを有効/無効にするためhydrogenを再起動してください Driver restart required. Restart driver? ドライバーの再起動が必要です。 再起動しますか? &Ok &Cancel キャンセル(&C) PreferencesDialog_UI Buffer size バッファーサイズ Device デバイス Input 入力 Channel キャンセル All すべて Meters falloff speed メータ減衰速度 Slow 遅い Normal 普通 Fast 早い Application font アプリケーションのフォント Mixer font ミキサーのフォント Select font フォントの選択 <i>After a font change the application must be restarted.</i> <i>フォントの変更は再起動後に有効となります。</i> Sample rate サンプルレート 44100 48000 ### 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Form1 Polyphony ポリフォニー Style スタイル &Cancel キャンセル(&C) Alt+C &OK Alt+O &General 一般(&G) Alt+R Audio &System オーディオシステム(&S) Metronome volume メトロノームの音量 Connect to &Default Output Pair デフォルトの出力ペアへ接続(&D) Alt+D 88200 96000 &Midi System MIDI システム(&M) Midi driver MIDI ドライバー Ignore note-off ノートオフを無視 &Appearance 外観(&A) &Reopen last used song 最後に使用したソングを開く(&R) Restart output 出力の再開 Audio output details オーディオ出力の詳細 Post-Fader ポストフェーダー Pre-Fader プレフェーダー Track output トラック出力 Use lash lashを使う first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm Beat counter drift compensation in 1/10 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup Beat counter start offset in ms create per-instrument outputs インストルメント別出力を作成 Path to the Rubberband command-line utility Rubberbandコマンドラインユーティリティーへのパス Maximum number of bars &Reopen last used playlist 最後に使ったプレイリストを開く(&R) Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? このままだと保存されていない変更が失われます。 よろしいですか? &Ok &Cancel キャンセル(&C) Close dialog! maybe there is some unsaved work on sample. Are you sure? ダイアログを閉じますが、保存されていない変更があるかもしれません。 よろしいですか? SampleEditor_UI Dialog ダイアログ P&lay original sample オリジナルサンプルの再生(&L) &Apply Changes 変更の適用(&A) &Close 閉じる(&C) Adjust sample start frame サンプルの開始フレームの調整 Adjust sample loop begin frame サンプルのループ開始フレームの調整 set processing ループ方向の設定 forward 順方向 reverse 逆方向 pingpong ピンポン loops ループ Adjust sample end & loop end frame サンプルの終わりとループの終わりフレームの調整 &Play 再生(&P) new sample length: 新しいサンプル長: fade-out type フェードアウトの種類 volume 音量 panorama パノラマ Sample length to beat: ビートあたりのサンプル長: off オフ 1/64 1/32 1/16 1/8 1/4 1/2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Pitch the sample in semitones, cents Crispness: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 Start 開始 Loop ループ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">ループ</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">モード</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">ループ</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">カウント</span></p></body></html> End 終わり "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. "Rubberband オーディオプロセッサー" : テンポ (サンプル長) とオーディオのピッチを変更。 Pitch (Semitone,Cent) ピッチ (半音、セント) SimpleHTMLBrowser Manual マニュアル Welcome to Hydrogen Hydrogen へようこそ Don't show this message anymore このメッセージをこれ以上表示しない Ok Documentation index ドキュメントのインデックス SongEditorPanel Create new pattern 新しいパターンの作成 Move the selected pattern down 選択したパターンを下に Move the selected pattern up 選択したパターンを上に Clear pattern sequence パターンシーケンスのクリア Song Editor ソングエディタ Select mode 選択モード Draw mode ドローモード Warning, this will erase your pattern sequence. Are you sure? 警告、あなたのパターンシーケンスを消去します。 よろしいですか? &Ok &Cancel キャンセル(&C) stacked mode スタックモード stacked pattern mode スタックパターンモード single pattern mode シングルパターンモード not_categorized 未分類 Enable time line edit タイムライン編集を有効にする Pattern %1 パターン %1 SongEditorPanelBpmWidget_UI Form Edit the bpm value for current beat 現在のBPM値を編集 500,55 Edit beat in timeline タイムライン上のビートを編集 500 Bar BPM Delete this BPM Marker このBPMマーカーを削除します Delete BPM Marker BPMマーカーの削除 Cancel キャンセル Ok SongEditorPanelTagWidget_UI Form Tag タグ Cancel キャンセル Ok SongEditorPatternList Copy コピー Delete 削除 Properties プロパティー Fill/Clear ... 並べる/クリアー... Save Pattern パターンの保存 Load Pattern パターンの読み込み Open Pattern パターンを開く Hydrogen Pattern (*.h2pattern) Hydrogen パターン (*.h2pattern) Virtual Pattern 仮想パターン Pattern 1 パターン 1 not_categorized 未分類 The pattern-file exists. Overwrite the existing pattern? パターンファイルが存在しています。 上書きしますか? &Ok &Cancel キャンセル(&C) Export Pattern SongPropertiesDialog Song properties ソングのプロパティー SongPropertiesDialog_UI Notes 備考 Author 作者 Song name ソングの名前 Form1 &Cancel キャンセル(&C) Alt+C &OK Alt+O License ライセンス SoundLibraryExportDialog Export Sound Library サウンドライブラリーのエクスポート Directory SoundLibraryExportDialog_UI Dialog ダイアログ Browse 参照 Export エクスポート SoundLibraryImportDialog Sound Library import サウンドライブラリーのインポート Sound library サウンドライブラリー Status 状態 Updating SoundLibrary list... サウンドライブラリーリストの更新... Installed インストール済 New 新規 Author: %1 作者: %1 Downloading SoundLibrary... サウンドライブラリーのダウンロード... Import drumkit ドラムキットのインポート SoundLibrary imported in %1 %1 にサウンドライブラリーをインポートしました An error occurred importing the SoundLibrary. サウンドライブラリーのインポートでエラーが発生しました。 Drumkits ドラムキット Songs ソング Patterns パターン License: %1 ライセンス: %1 SoundLibraryImportDialog_UI Dialog ダイアログ Internet インターネット Update list リストの更新 Sound Library Name サウンドライブラリー名 Sound library Info サウンドライブラリー情報 Author... 作者... Download and install ダウンロードとインストール Local file ローカルファイル Browse... 参照... Install インストール 1 License... ライセンス... Edit server list サーバーリストの編集 Close 閉じる SoundLibraryPanel Load 読み込み Export エクスポート Delete 削除 System drumkits システムのドラムキット User drumkits ユーザーのドラムキット &Ok &Cancel キャンセル(&C) Songs ソング Patterns パターン Error loading song. ソングの読み込みに失敗しました。 Properties プロパティ Warning, the selected pattern will be deleted from disk. Are you sure? 警告、選択されたパターンはディスクから削除されます。 よろしいですか? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog ダイアログ Name 名前 Author 作者 Information 情報 License ライセンス Save 保存 Cancel キャンセル Save changes made to instruments into sound library インストルメントの変更をサウンドライブラリーに保存します SoundLibraryRepositoryDialog Edit repository settings リポジトリの設定を編集 Edit server list サーバーリストを編集 URL URL SoundLibraryRepositoryDialog_UI Dialog ダイアログ Add 追加 Delete 削除 SoundLibrarySaveDialog Save Sound Library サウンドライブラリーの保存 Please supply at least a valid name Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog ダイアログ Name 名前 Author 作者 Information 情報 Cancel キャンセル License ライセンス Save 保存 SoundLibraryTree Sound library サウンドライブラリー VirtualPatternDialog Select virtual pattern 仮想パターンを選択 VirtualPatternDialog_UI Dialog ダイアログ OK Cancel キャンセル hydrogen-0.9.6-beta3/data/i18n/hydrogen.nl.qm000066400000000000000000001263261211146647700206420ustar00rootroot00000000000000<0R<0iGH6H6H6)zH6N%H6PH6kH6#H6kHH6H6N]H6,H6)H6PH6kH6^H7kJ6JgMi*MiJMi)MiQMinMiM OPWoTTXUjUYpYpZdpZd]Z|Z%rZGAeZ# [ arm`J}8^H[ќCRqn7S2~UZY\4\ӵ07\ӵzjeL{?~5NUw12 }4Brr1Մ*} y$%k}? 9'&i+A9o. _. q^FdM>W,eȹQ|[F.Z~:%*P+M676sl,=x$f3.>#q^CVF .XEEK6CX%;k)+lQDOBLS0u}+\B]/#Avn6l7lRXQ(C<?ACbP0b Wbb^bIC[U"aI I/ INIeIIIInn n^eɷ0,,,Eϕnv vva֏1N؃d ޱe @oo~ls%].{Wv<=(58[|z@fSV|bV|pW^|aI-h~Z%h~]k2_Ym'p^r`$Iv Dz&<.DZD]<ȿ&g7eT7;AH1eo\y4l)JV >R @ ''WDVU*3_pL~>#5,#",0֣֣=>[!gJ`_rp/B En^U bpK#P e%46,4=`V^Ia.f*h3^s#Ec'S_;  -M6L [>:mi oD¯;o&Feݿ/빆VV-Bq7( d@{G:G.l'$oV!)+%|ZlcO>Q3#3+3¸3\t7k S! ){;m +s' 3bP @e Cn S%]A aO.K h> h> w-Xr w[t   r ~U ~\  4$ $ TmZ +Z$  gn\ kJD x@#B zS + ?  ?41 dV / DY" ;$q{ s'+ '8 = =m 5b "U"m 5yLx 5yR5 @! B  Cp` C FPJ \pe `nh j6 w: |vb m 8 c a< 9 3 $= 4< =  =/} yE[ { ( 4)+w <4 d ͫl ͼ S ӽ^Y mmSc|" 3N35"%$R2e=-kGB^jdjeQPmeYsw>a|F&z Xd%EoǗ.  XB"8U.=ЩFaN!st`}4?EA+e>tkUPޔk,$p5di0<b>Mailing lijst</b><br>Mailing lists
     AboutDialog:<b>Hoofd programmeur:</b><br>$Main coder and mantainer:
     AboutDialog4<b>Project pagina</ba><br>Project page
     AboutDialog$<b>Website</b><br>Website
     AboutDialogInfoAbout AboutDialog######AboutDialog_UI&Auteurs&AuthorsAboutDialog_UI&Licentie&LicenseAboutDialog_UI&OK&OKAboutDialog_UI &InfoA&boutAboutDialog_UI$Info over HydrogenAbout HydrogenAboutDialog_UI Alt+OAlt+OAboutDialog_UIAudio infoAudio Engine InfoAudioEngineInfoForm######AudioEngineInfoForm_UIDriver statusAudio engine stateAudioEngineInfoForm_UIAudio uitgang Audio outputAudioEngineInfoForm_UIBuffer grootte Buffer sizeAudioEngineInfoForm_UIVerbonden met Connected toAudioEngineInfoForm_UI Form1Form1AudioEngineInfoForm_UI FramesFramesAudioEngineInfoForm_UIMIDI ingang MIDI inputAudioEngineInfoForm_UINaamNameAudioEngineInfoForm_UIPatroonPatternsAudioEngineInfoForm_UIGespeelde noten Playing notesAudioEngineInfoForm_UIProces tijd Process timeAudioEngineInfoForm_UIRealtime framesRealtime framesAudioEngineInfoForm_UISample rate Sample rateAudioEngineInfoForm_UISamplerSamplerAudioEngineInfoForm_UIInstrumentSelected instrumentAudioEngineInfoForm_UIPatroonSelected patternAudioEngineInfoForm_UISequencer SequencerAudioEngineInfoForm_UIPositie Song positionAudioEngineInfoForm_UIOpname status Song stateAudioEngineInfoForm_UI SynthSynthAudioEngineInfoForm_UI TellenTicksAudioEngineInfoForm_UIAnnulerenCancelAudioFileBrowser_UI@(%1/%2 KiB) - Geschatte tijd: %3(%1/%2 KiB) - ETA %3DownloadWidget$### Drumkit auteur### Drumkit authorDrumkitManager_UI ### Drumkit info### Drumkit infoDrumkitManager_UI ### Drumkit naam### Drumkit nameDrumkitManager_UIt### De drumkit zal genstalleerd worden zncxbmzbxcmznxbcmz4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b> Dowload meer drumkits op <br> http://www.hydrogen-music.org </b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UI AuteurAuthorDrumkitManager_UIBladerenBrowseDrumkitManager_UIVerwijderenDelete drumkitDrumkitManager_UIDrumkit mapDrumkit directoryDrumkitManager_UI(Drumkit bestandsnaamDrumkit filenameDrumkitManager_UIDrumkit naam Drumkit nameDrumkitManager_UIExporterenExportDrumkitManager_UI Form1Form1DrumkitManager_UIImporterenImportDrumkitManager_UIInfoInfoDrumkitManager_UI LadenLoadDrumkitManager_UIDrumkit laden Load drumkitDrumkitManager_UIOpslaanSaveDrumkitManager_UIExporteren Export songExportSongDialog&Bladeren... &Browse...ExportSongDialog_UI&Afsluiten&CloseExportSongDialog_UI&Exporteren&ExportExportSongDialog_UI1616ExportSongDialog_UI 192000192000ExportSongDialog_UI 2205022050ExportSongDialog_UI2424ExportSongDialog_UI3232ExportSongDialog_UI 4410044100ExportSongDialog_UI 4800048000ExportSongDialog_UI88ExportSongDialog_UI 9600096000ExportSongDialog_UI Alt+BAlt+BExportSongDialog_UI Alt+AAlt+CExportSongDialog_UI Alt+EAlt+EExportSongDialog_UI8Exporteer de opname naar WAVExport Whole Song to WAVExportSongDialog_UIBestandsnaamExport filenameExportSongDialog_UI%1
    %2 KHz
    %3 %4 FileBrowserFX aan/uit FX on/off FxMixerLineMaster uitgang Master output FxMixerLine&Annuleren&Cancel$H2Core::SoundLibraryPropertiesDialog&Ok&Ok$H2Core::SoundLibraryPropertiesDialogDit is niet mogelijk, je kan enkel wijzigingen opslaan van instrumment in de geladen geluids bibliotheekfThis is not possible, you can only save changes inside instruments to the current loaded sound library$H2Core::SoundLibraryPropertiesDialog Opgelet! Door de drumkit naam te wijzigen wordt een nieuwe drumkit met deze naam aangemaakt Ben je zeker dat je de naam wilt wijzigen?fWarning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure?$H2Core::SoundLibraryPropertiesDialog(Geladen drumkit:[%1]Drumkit loaded: [%1] HydrogenApp MixerMixer HydrogenAppOpname editor Song Editor HydrogenApp AttackAttackInstrumentEditor DecayDecayInstrumentEditorFilter Cutoff Filter CutoffInstrumentEditorFilter tonenFilter resonanceInstrumentEditorAlgemeenGeneralInstrumentEditorInstrument gainInstrument gainInstrumentEditorLaag gain Layer gainInstrumentEditor"Laag picht (grof)Layer pitch (Coarse)InstrumentEditor"Laag pitch (fijn)Layer pitch (Fine)InstrumentEditor LagenLayersInstrumentEditor,Nieuwe instrument naamNew instrument nameInstrumentEditor$Willekeurige pitchRandom pitch factorInstrumentEditorReleaseReleaseInstrumentEditor:Toon instrument eigenschappenShow instrument propertiesInstrumentEditor.Toon laag eigenschappenShow layers propertiesInstrumentEditorSustainSustainInstrumentEditorWis noten Clear notesInstrumentLineVerwijderenDelete instrumentInstrumentLine*Willekeurige velocityRandomize velocityInstrumentLineSoloSoloInstrumentLineInstrument InstrumentInstrumentRack0Toon instrument bewerkerShow Instrument editorInstrumentRack0Toon geluids bibliotheekShow sound libraryInstrumentRack&Geluids bibliotheek Sound libraryInstrumentRack(Bewerk FX parametersEdit FX parametersLadspaFXMixerLineEffect volume Effect returnLadspaFXMixerLineFX bypass FX bypassLadspaFXMixerLineLadspa FX naamLadspa FX nameLadspaFXMixerLineInschakelenActivateLadspaFXPropertiesUitschakelen DeactivateLadspaFXProperties2LADSPA FX %1 instellingenLADSPA FX %1 PropertiesLadspaFXPropertiesGeen plugin No pluginLadspaFXPropertiesSelecteer FX Select FXLadspaFXProperties8[%1] LADSPA FX eigenschappen[%1] LADSPA FX PropertiesLadspaFXProperties$Alfabetische lijstAlphabetic ListLadspaFXSelectorCategorin CategorizedLadspaFXSelectorGroepenGroupsLadspaFXSelectorMonoMonoLadspaFXSelector Niet ondersteund Not supportedLadspaFXSelectorRecent gebruikt Recently UsedLadspaFXSelector&Selecteer LADSPA FXSelect LADSPA FXLadspaFXSelector StereoStereoLadspaFXSelector ### FX maker 1 2### FX maker 1 2LadspaFXSelector_UI&### copyright 1 2 3### copyright 1 2 3LadspaFXSelector_UI### fx ID ### fx IDLadspaFXSelector_UI### fx label ### fx labelLadspaFXSelector_UI### fx name 1 ### fx name 1LadspaFXSelector_UI### fx type ### fx typeLadspaFXSelector_UI&Annuleren&CancelLadspaFXSelector_UI&OK&OKLadspaFXSelector_UI11LadspaFXSelector_UI Alt+AAlt+CLadspaFXSelector_UI Alt+OAlt+OLadspaFXSelector_UI Form1Form1LadspaFXSelector_UI Info|OverMainForm &Over&AboutMainForm(Instrument toevoegen&Add instrumentMainForm&Annuleren&CancelMainFormWis alles &Clear allMainForm&Negeren&DiscardMainForm,Bibliotheek exporteren&Export libraryMainForm&Exporteren &Export songMainForm,Bibliotheek importeren&Import libraryMainForm &Info&InfoMainForm &Instrument rack&Instrument RackMainForm &Mixer&MixerMainForm &Nieuw&NewMainForm&Openen&OpenMainForm&Instellingen &PreferencesMainForm&Project&ProjectMainForm&Afsluiten&QuitMainFormOp&slaan&SaveMainForm(Bibliotheek op&slaan &Save libraryMainForm Ex&tra&ToolsMainForm&Handleiding &User manualMainFormAnnulerenCancelMainForm,Wis alle instrumenten?Clear all instruments?MainForm6Kon de opname niet opslaan.Could not save song.MainForm &DebugDe&bugMainForm:Toon deze boodschap niet meerDon't show this message anymoreMainFormBFout bij het laden van de opname.Error loading song.MainFormPFout bij het starten van de audio driverError starting audio driverMainForm4Expor&teer patroon als ...Expor&t pattern as...MainForm*Exporteren naar &MIDIExport &MIDI fileMainForm,Exporteer MIDI bestandExport MIDI fileMainForm<Hydrogen Patroon (*.h2pattern)Hydrogen Pattern (*.h2pattern)MainForm$Hydrogen is klaar.Hydrogen Ready.MainForm4Hydrogen Opname (*.h2song)Hydrogen Song (*.h2song)MainFormI&nstrumenten I&nstrumentsMainFormInstrument InstrumentMainFormLJack driver: kan client niet activeren#Jack driver: cannot activate clientMainFormbJack driver: kan niet verbinden met uitgangspoort'Jack driver: cannot connect output portMainFormNJack driver: fout in het poort register#Jack driver: error in port registerMainForm6Jack driver: proces gestoptJack driver: server shutdownMainForm"MIDI file (*.mid)Midi file (*.mid)MainFormOkOkMainFormOpen &voorbeeld Open &DemoMainFormOpen &patroon Open &PatternMainFormOpen &recent Open &recentMainFormOpen patroon Open PatternMainFormOpen opname Open songMainForm$Patroon opgeslaan.Pattern saved.MainForm*Afspeellijst bewerkenPlaylist &editorMainForm>Afspeellijst: opname nummer: %1Playlist: Set song No. %1MainForm>Afspeellijst: opname nummer: %1Playlist: Song No. %1MainFormPrint objecten Print ObjectsMainForm Opslaan &als ... Save &as...MainForm,Sla patroon op als ...Save Pattern as ...MainFormOpname opslaan Save songMainForm.Toon &audio engine infoShow &audio engine infoMainFormToon &info Show &infoMainForm Opname opgeslaanSong saved as.MainForm"Opname opgeslaan. Song saved.MainForm,Onbekende audio driverUnknown audio driverMainForm&Ongekende error: %1Unknown error %1MainFormZJe gebruikt een ontwikkel versie van Hydrogen. Help ons Hydrogen beter te maken door bugs te melden en voorstellen te doen in de hydrogen-devel mailing lijst.<br><br>Dank u!You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!MainFormMenselijke tijd Humanize timeMasterMixerLine&Menselijke velocityHumanize velocityMasterMixerLine<Menselijke tijd parameter [%1] Set humanize time parameter [%1]MasterMixerLineDMenselijke velocity parameter [%1]$Set humanize velocity parameter [%1]MasterMixerLine$Master volume [%1]Set master volume [%1]MasterMixerLine"Swing factor [%1]Set swing factor [%1]MasterMixerLine SwingSwingMasterMixerLine(Stel FX %1 volume inSet FX %1 level Mixer>Stel LADSPA FX ( %1 ) volume inSet LADSPA FX ( %1 ) volumeMixerToon FX venster Show FX panelMixer"Toon piek volumesShow instrument peaksMixer.Toon piek volumes = UitShow instrument peaks = OffMixer.Toon piek volumes = AanShow instrument peaks = OnMixerVInstrument naam (dubbelklik om te bewerken)&Instrument name (double click to edit) MixerLine DempenMute MixerLinePanPan MixerLineSpeel voorbeeld Play sample MixerLine&Instrument pan [%1]Set instr. pan [%1] MixerLine,Instrument volume [%1]Set instrument volume [%1] MixerLineSoloSolo MixerLine CutoffCutoffPatternEditorPanel$Speel nieuwe notenHear new notesPatternEditorPanel0Speel nieuwe noten = UitHear new notes = OffPatternEditorPanel0Speel nieuwe noten = AanHear new notes = OnPatternEditorPanelHet is niet mogelijk om de patroon grootte te wijzigen gedurende het spelen.8Is not possible to change the pattern size when playing.PatternEditorPanel2Geen patroon geselecteerdNo pattern selectedPatternEditorPanelPanPanPatternEditorPanel&Patroon editor - %1Pattern editor - %1PatternEditorPanelBQuantiseer toetsenbord/midi = Uit,Quantize incoming keyboard/midi events = OffPatternEditorPanelBQuantiseer toetsenbord/midi = Aan+Quantize incoming keyboard/midi events = OnPatternEditorPanelPPlaats keyboard/midi noten op het raster%Quantize keyboard/midi events to gridPatternEditorPanelResonantie ResonancePatternEditorPanel4Selecteer raster resolutieSelect grid resolutionPatternEditorPanel*Selecteer noot optiesSelect note propertiesPatternEditorPanel0Selecteer patroon grooteSelect pattern sizePatternEditorPanelVelocityVelocityPatternEditorPanelInzoomenZoom inPatternEditorPanelUitzoomenZoom outPatternEditorPanel8Vul met geselecteerd patroonFill with selected patternPatternFillDialog Wissen&ClearPatternFillDialog_UI&Vullen&FillPatternFillDialog_UI Alt+AAlt+CPatternFillDialog_UI Alt+VAlt+FPatternFillDialog_UIAnnulerenCancelPatternFillDialog_UI Form 1Form 1PatternFillDialog_UIVan:From:PatternFillDialog_UIOKOKPatternFillDialog_UI Naar:To:PatternFillDialog_UI*Patroon eigenschappenPattern propertiesPatternPropertiesDialog&Annuleren&CancelPatternPropertiesDialog_UI&OK&OKPatternPropertiesDialog_UI Alt+AAlt+CPatternPropertiesDialog_UI Alt+OAlt+OPatternPropertiesDialog_UI Form1Form1PatternPropertiesDialog_UIPatroon naamNew Pattern NamePatternPropertiesDialog_UI"Patroon categoriePattern categoryPatternPropertiesDialog_UIPanPanPianoRollEditorVelocityVelocityPianoRollEditorBC paneel uit BC Panel off PlayerControlBC paneel aan BC Panel on PlayerControl&Tel BPM en afspelen Count BPM and start PLAY PlayerControl,Tel BPM en BPM opslaan Count and set BPM PlayerControl6Jack-Time-Master mode = Uit Jack-Time-Master mode = Off PlayerControl6Jack-Time-Master mode = Aan Jack-Time-Master mode = On PlayerControl,BeatCounter paneel aanBeatCounter Panel on PlayerControlDoorspoelen Fast Forward PlayerControlInstrument rackInstrument rack PlayerControlfJack-transport zal enkel werken met de JACK driver./JACK-transport will work only with JACK driver. PlayerControl0Jack-Time-Master aan/uitJack-Time-Master on/off PlayerControl2Jack-transport mode = UitJack-transport mode = Off PlayerControl2Jack-transport mode = AanJack-transport mode = On PlayerControl,Jack-transport aan/uitJack-transport on/off PlayerControlHerhaal opname Loop song PlayerControl(Herhaal opname = UitLoop song = Off PlayerControl&Herhaal opame = AanLoop song = On PlayerControl MixerMixer PlayerControl"Nieuwe BPM waarde New BPM value PlayerControlPatroon mode Pattern Mode PlayerControl4Patroon mode geselecteerd.Pattern mode selected. PlayerControl Pause.Pause. PlayerControlStart/Pause Play/ Pause PlayerControlGestart.Playing. PlayerControlTerugspoelenRewind PlayerControl(Toon instrument rackShow Instrument Rack PlayerControlToon mixer Show mixer PlayerControlOpname mode Song Mode PlayerControl0Opname mode geslecteerd.Song mode selected. PlayerControlStopStop PlayerControlGestopt.Stopped. PlayerControlDoorspoelen Fast ForwardPlaylistDialog Pause.Pause.PlaylistDialogTerugspoelenRewindPlaylistDialogStopStopPlaylistDialog&Annuleren&CancelPreferencesDialog,<b>ALSA Driver</b><br>ALSA Driver
    PreferencesDialogF<b>Automatische driver selectie</b>!Automatic driver selectionPreferencesDialog6<b>CoreAudio Driver</b><br>CoreAudio Driver
    PreferencesDialog<b>Jack Audio Connection Kit Driver</b><br>Lage latency audio driverCJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialogt<b>Open Sound System</b><br>Simple audio driver [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog6<b>PortAudio Driver</b><br>PortAudio Driver
    PreferencesDialogd<br><b><font color="red">Niet ingebouwd</font></b>0
    Not compiledPreferencesDialogSnelFastPreferencesDialogNormaalNormalPreferencesDialogJe moet Hydrogen herstarten om LASH ondersteuning in of uit te schakelen6Please restart hydrogen to enable/disable LASH supportPreferencesDialogInstellingen PreferencesPreferencesDialog TraagSlowPreferencesDialog######PreferencesDialog_UI&Voorkomen &AppearancePreferencesDialog_UI&Annuleren&CancelPreferencesDialog_UIAl&gemeen&GeneralPreferencesDialog_UI&Midi Systeem &Midi SystemPreferencesDialog_UI&OK&OKPreferencesDialog_UI@&Heropen laatst gebruikte opname&Reopen last used songPreferencesDialog_UI11PreferencesDialog_UI1010PreferencesDialog_UI1111PreferencesDialog_UI1212PreferencesDialog_UI1313PreferencesDialog_UI1414PreferencesDialog_UI1515PreferencesDialog_UI1616PreferencesDialog_UI22PreferencesDialog_UI33PreferencesDialog_UI44PreferencesDialog_UI 4410044100PreferencesDialog_UI 4800048000PreferencesDialog_UI55PreferencesDialog_UI66PreferencesDialog_UI77PreferencesDialog_UI88PreferencesDialog_UI 8820088200PreferencesDialog_UI99PreferencesDialog_UI 9600096000PreferencesDialog_UI<i>Na het wijzigen van een lettertype moet het programma herstart worden.</i>=After a font change the application must be restarted.PreferencesDialog_UI AllesAllPreferencesDialog_UI Alt+AAlt+CPreferencesDialog_UI Alt+VAlt+DPreferencesDialog_UI Alt+OAlt+OPreferencesDialog_UI Alt+HAlt+RPreferencesDialog_UI(Programma lettertypeApplication fontPreferencesDialog_UIAudio &Systeem Audio &SystemPreferencesDialog_UI*Audio uitgang detailsAudio output detailsPreferencesDialog_UIBuffer grootte Buffer sizePreferencesDialog_UI KanaalChannelPreferencesDialog_UI>&Verbind standaard uitvoer paarConnect to &Default Output PairPreferencesDialog_UIApparaatDevicePreferencesDialog_UISnelFastPreferencesDialog_UI Form1Form1PreferencesDialog_UINegeer noot afIgnore note-offPreferencesDialog_UI IngangInputPreferencesDialog_UI*Meters afval snelheidMeters falloff speedPreferencesDialog_UI Metronoom volumeMetronome volumePreferencesDialog_UIMidi driver Midi driverPreferencesDialog_UI Mixer lettertype Mixer fontPreferencesDialog_UINormaalNormalPreferencesDialog_UIPost-Fader Post-FaderPreferencesDialog_UIPre-Fader Pre-FaderPreferencesDialog_UI Herstart uitgangRestart outputPreferencesDialog_UISample rate Sample ratePreferencesDialog_UI(Selecteer lettertype Select fontPreferencesDialog_UI TraagSlowPreferencesDialog_UI StijlStylePreferencesDialog_UIGebruik LASHUse lashPreferencesDialog_UI&Annuleren&Cancel SampleEditor&Afsluiten&CloseSampleEditor_UI00SampleEditor_UI11SampleEditor_UI1/161/16SampleEditor_UI1/21/2SampleEditor_UI1/321/32SampleEditor_UI1/41/4SampleEditor_UI1/641/64SampleEditor_UI1/81/8SampleEditor_UI1010SampleEditor_UI1111SampleEditor_UI1212SampleEditor_UI1313SampleEditor_UI1414SampleEditor_UI1515SampleEditor_UI1616SampleEditor_UI1717SampleEditor_UI1818SampleEditor_UI1919SampleEditor_UI22SampleEditor_UI2020SampleEditor_UI2121SampleEditor_UI2222SampleEditor_UI2323SampleEditor_UI2424SampleEditor_UI2525SampleEditor_UI2626SampleEditor_UI2727SampleEditor_UI2828SampleEditor_UI2929SampleEditor_UI33SampleEditor_UI3030SampleEditor_UI3131SampleEditor_UI3232SampleEditor_UI44SampleEditor_UI55SampleEditor_UI66SampleEditor_UI77SampleEditor_UI88SampleEditor_UI99SampleEditor_UI$Documentatie indexDocumentation indexSimpleHTMLBrowser:Toon deze boodschap niet meerDon't show this message anymoreSimpleHTMLBrowserHandleidingManualSimpleHTMLBrowserOkOkSimpleHTMLBrowser&Welkom bij HydrogenWelcome to HydrogenSimpleHTMLBrowser&Annuleren&CancelSongEditorPanel&Ok&OkSongEditorPanel,Wis patroon sequentiesClear pattern sequenceSongEditorPanel,Maak een nieuw patroonCreate new patternSongEditorPanelTeken mode Draw modeSongEditorPanel`Verplaats het geselecteerde patroon naar benedenMove the selected pattern downSongEditorPanel\Verplaats het geselecteerde patroon naar bovenMove the selected pattern upSongEditorPanelSelectie mode Select modeSongEditorPanelOpname editor Song EditorSongEditorPanelOpgepast, dit zal alle sequenties voor het patroon wissen Ben je zeker?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanel500500SongEditorPanelBpmWidget_UI 500,55500,55SongEditorPanelBpmWidget_UIAnnulerenCancelSongEditorPanelBpmWidget_UIOkOkSongEditorPanelBpmWidget_UIAnnulerenCancelSongEditorPanelTagWidget_UIOkOkSongEditorPanelTagWidget_UI&Annuleren&CancelSongEditorPatternListKopirenCopySongEditorPatternList WissenDeleteSongEditorPatternList&Opvullen/Wissen ...Fill/Clear ...SongEditorPatternList<Hydrogen patroon (*.h2pattern)Hydrogen Pattern (*.h2pattern)SongEditorPatternListPatroon laden Load PatternSongEditorPatternListPatroon openen Open PatternSongEditorPatternListEigenschappen PropertiesSongEditorPatternListPatroon opslaan Save PatternSongEditorPatternList(Opname eigenschappenSong propertiesSongPropertiesDialog&OK &OKSongPropertiesDialog_UI&Annuleren&CancelSongPropertiesDialog_UI Alt+AAlt+CSongPropertiesDialog_UI Alt+OAlt+OSongPropertiesDialog_UI AuteurAuthorSongPropertiesDialog_UI Form1Form1SongPropertiesDialog_UILicentieLicenseSongPropertiesDialog_UICommentaarNotesSongPropertiesDialog_UIOpname naam Song nameSongPropertiesDialog_UI8Exporteer geluid bibliotheekExport Sound LibrarySoundLibraryExportDialogVerkennenBrowseSoundLibraryExportDialog_UIExporterenExportSoundLibraryExportDialog_UIEr is een fout opgetreden bij het importeren van de geluid bibliotheek.-An error occurred importing the SoundLibrary.SoundLibraryImportDialogAuteur: %1 Author: %1SoundLibraryImportDialogBGeluid bibliotheek downloaden ...Downloading SoundLibrary...SoundLibraryImportDialogDrumkitsDrumkitsSoundLibraryImportDialog$Drumkit importerenImport drumkitSoundLibraryImportDialogGenstalleerd InstalledSoundLibraryImportDialogLicentie: %1 License: %1SoundLibraryImportDialog NieuwNewSoundLibraryImportDialogPatronenPatternsSoundLibraryImportDialogOpnamesSongsSoundLibraryImportDialog:Geluid bibliotheek importerenSound Library importSoundLibraryImportDialog$Geluid bibliotheek Sound librarySoundLibraryImportDialogJGeluid bibliotheek gemporteerd in %1SoundLibrary imported in %1SoundLibraryImportDialog StatusStatusSoundLibraryImportDialog<Geluid bibliotheek updaten ...Updating SoundLibrary list...SoundLibraryImportDialog11SoundLibraryImportDialog_UIAuteur ... Author...SoundLibraryImportDialog_UIBladeren ... Browse...SoundLibraryImportDialog_UISluitenCloseSoundLibraryImportDialog_UI2Downloaden en installerenDownload and installSoundLibraryImportDialog_UI&Bewerk server lijstEdit server listSoundLibraryImportDialog_UIInstallerenInstallSoundLibraryImportDialog_UIInternetInternetSoundLibraryImportDialog_UILicentie ... License...SoundLibraryImportDialog_UILokaal bestand Local fileSoundLibraryImportDialog_UI.Geluid bibliotheek naamSound Library NameSoundLibraryImportDialog_UI.Geluid bibliotheek infoSound library InfoSoundLibraryImportDialog_UIUpdate lijst Update listSoundLibraryImportDialog_UI&Annuleren&CancelSoundLibraryPanel&OK&OkSoundLibraryPanel WissenDeleteSoundLibraryPanel@Fout bij het laden van de opnameError loading song.SoundLibraryPanelExporterenExportSoundLibraryPanel LadenLoadSoundLibraryPanelPatronenPatternsSoundLibraryPanelEigenschappen PropertiesSoundLibraryPanelOpnamesSongsSoundLibraryPanel Systeem drumkitsSystem drumkitsSoundLibraryPanel$Gebruiker drumkits User drumkitsSoundLibraryPanelOpgelet, het geselecteerde patroon zal gewist worden. Ben je zeker dat verder wilt gaan?FWarning, the selected pattern will be deleted from disk. Are you sure?SoundLibraryPanel AuteurAuthorSoundLibraryPropertiesDialog_UIAnnulerenCancelSoundLibraryPropertiesDialog_UIInformatie InformationSoundLibraryPropertiesDialog_UILicientieLicenseSoundLibraryPropertiesDialog_UINaamNameSoundLibraryPropertiesDialog_UIOpslaanSave SoundLibraryPropertiesDialog_UIfGemaakte wijzigingen opslaan in geluids bibliotheek3Save changes made to instruments into sound librarySoundLibraryPropertiesDialog_UI&Bewerk server lijstEdit server listSoundLibraryRepositoryDialogURLURLSoundLibraryRepositoryDialogToevoegenAddSoundLibraryRepositoryDialog_UI WissenDeleteSoundLibraryRepositoryDialog_UI4Geluid bibliotheek opslaanSave Sound LibrarySoundLibrarySaveDialog AuteurAuthorSoundLibrarySaveDialog_UIAnnulerenCancelSoundLibrarySaveDialog_UIInformatie InformationSoundLibrarySaveDialog_UILicentieLicenseSoundLibrarySaveDialog_UINaamNameSoundLibrarySaveDialog_UIOpslaanSave SoundLibrarySaveDialog_UI$Geluid bibliotheek Sound librarySoundLibraryTreeAnnulerenCancelVirtualPatternDialog_UIOKOKVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.nl.ts000066400000000000000000006345461211146647700206630ustar00rootroot00000000000000 AboutDialog About Info <b>Project page</b><br> <b>Project pagina</ba><br> <b>Website</b><br> <b>Website</b><br> <b>Mailing lists</b><br> <b>Mailing lijst</b><br> <b>Main coder and mantainer:</b><br> <b>Hoofd programmeur:</b><br> AboutDialog_UI About Hydrogen Info over Hydrogen A&bout &Info ### ### &Authors &Auteurs &License &Licentie &OK &OK Alt+O Alt+O <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info Audio info AudioEngineInfoForm_UI Form1 Form1 Audio engine state Driver status ### ### Playing notes Gespeelde noten Process time Proces tijd Song position Positie Patterns Patroon Song state Opname status Frames Frames Ticks Tellen Selected pattern Patroon Selected instrument Instrument Sample rate Sample rate Buffer size Buffer grootte Connected to Verbonden met Sampler Sampler Synth Synth Sequencer Sequencer MIDI input MIDI ingang Name Naam Audio output Audio uitgang Realtime frames Realtime frames AudioFileBrowser Audio File Browser Size: %1 bytes Samplerate: %1 s Name: Size: Samplerate: Sample length: Please do not preview samples which are longer than 10 minutes! Sample length: AudioFileBrowser_UI Dialog Name: Samplerate: Size: Length: Pla&y samples by clicking &Up &Home &Play Sample &Filename to instrument name Open Cancel Annuleren &Stop View hidden folders Be careful, this change all Layer velocity settings Set automatic velocity Director Director Director_UI Dialog DownloadWidget (%1/%2 KiB) - ETA %3 (%1/%2 KiB) - Geschatte tijd: %3 DrumkitManager_UI Form1 Form1 Load Laden Load drumkit Drumkit laden Delete drumkit Verwijderen ### Drumkit info ### Drumkit info ### Drumkit author ### Drumkit auteur ### Drumkit name ### Drumkit naam Save Opslaan Author Auteur Info Info Drumkit name Drumkit naam Import Importeren Browse Bladeren Drumkit filename Drumkit bestandsnaam ### The drumkit will be installed zncxbmzbxcmznxbcmz ### De drumkit zal geïnstalleerd worden zncxbmzbxcmznxbcmz <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b> Dowload meer drumkits op <br> http://www.hydrogen-music.org </b> Export Exporteren Drumkit directory Drumkit map ExportSongDialog Export song Exporteren The file %1 exists. Overwrite the existing file? Export to a single track Export to seperate tracks Both ExportSongDialog_UI Export Whole Song to WAV Exporteer de opname naar WAV Export filename Bestandsnaam Alt+C Alt+A &Export &Exporteren Alt+E Alt+E &Browse... &Bladeren... Alt+B Alt+B &Close &Afsluiten Samplerate in Hz: 22050 22050 44100 44100 48000 48000 96000 96000 192000 192000 SampleDepth in Bit: 8 8 16 16 24 24 32 32 Templates: WAV in CD quality "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off FX aan/uit Master output Master uitgang H2Core::SongEditorPanelBpmWidget BPM H2Core::SongEditorPanelTagWidget Tag H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties &Ok &Ok &Cancel &Annuleren This is not possible, you can only save changes inside instruments to the current loaded sound library Dit is niet mogelijk, je kan enkel wijzigingen opslaan van instrumment in de geladen geluids bibliotheek Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Opgelet! Door de drumkit naam te wijzigen wordt een nieuwe drumkit met deze naam aangemaakt Ben je zeker dat je de naam wilt wijzigen? Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] Geladen drumkit:[%1] Song Editor Opname editor Instrument + Pattern Mixer Mixer InstrumentEditor Random pitch factor Willekeurige pitch Filter Cutoff Filter Cutoff Filter resonance Filter tonen Attack Attack Decay Decay Sustain Sustain Release Release Instrument gain Instrument gain Layer gain Laag gain Show instrument properties Toon instrument eigenschappen Show layers properties Toon laag eigenschappen New instrument name Nieuwe instrument naam Layer pitch (Coarse) Laag picht (grof) Layer pitch (Fine) Laag pitch (fijn) General Algemeen Layers Lagen Stop the current playing instrument-note before trigger the next note sample. Auto-Stop-Note InstrumentLine Clear notes Wis noten Randomize velocity Willekeurige velocity Delete instrument Verwijderen Fill notes ... Fill all notes Fill 1/2 notes Fill 1/3 notes Fill 1/4 notes Fill 1/6 notes Fill 1/8 notes Mute instrument Solo Solo InstrumentRack Show Instrument editor Toon instrument bewerker Instrument Instrument Show sound library Toon geluids bibliotheek Sound library Geluids bibliotheek LadspaFXMixerLine FX bypass FX bypass Edit FX parameters Bewerk FX parameters Ladspa FX name Ladspa FX naam Effect return Effect volume LadspaFXProperties Select FX Selecteer FX Activate Inschakelen [%1] LADSPA FX Properties [%1] LADSPA FX eigenschappen Deactivate Uitschakelen LADSPA FX %1 Properties LADSPA FX %1 instellingen No plugin Geen plugin Remove FX LadspaFXSelector Select LADSPA FX Selecteer LADSPA FX Groups Groepen Stereo Stereo Mono Mono Not supported Niet ondersteund Recently Used Recent gebruikt Alphabetic List Alfabetische lijst Categorized Categoriën LadspaFXSelector_UI Form1 Form1 &Cancel &Annuleren Alt+C Alt+A &OK &OK Alt+O Alt+O ### fx label ### fx label ### fx type ### fx type ### fx ID ### fx ID 1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> ### fx name 1 ### fx name 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> ### FX maker 1 2 ### FX maker 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 ### copyright 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm Error loading song. Fout bij het laden van de opname. Hydrogen Ready. Hydrogen is klaar. &New &Nieuw &Open &Openen Open &Demo Open &voorbeeld Open &recent Open &recent &Save Op&slaan &Export song &Exporteren Export &MIDI file Exporteren naar &MIDI &Preferences &Instellingen &Quit &Afsluiten De&bug &Debug Show &audio engine info Toon &audio engine info &User manual &Handleiding &About &Over &Discard &Negeren &Cancel &Annuleren Hydrogen Song (*.h2song) Hydrogen Opname (*.h2song) Save song Opname opslaan Open song Open opname Cancel Annuleren Midi file (*.mid) MIDI file (*.mid) Export MIDI file Exporteer MIDI bestand Unknown audio driver Onbekende audio driver Error starting audio driver Fout bij het starten van de audio driver Jack driver: server shutdown Jack driver: proces gestopt Jack driver: cannot activate client Jack driver: kan client niet activeren Jack driver: cannot connect output port Jack driver: kan niet verbinden met uitgangspoort Jack driver: error in port register Jack driver: fout in het poort register &Project &Project Save &as... Opslaan &als ... &Tools Ex&tra &Mixer &Mixer &Instrument Rack &Instrument rack Print Objects Print objecten &Info &Info Song saved. Opname opgeslaan. Unknown error %1 Ongekende error: %1 Clear all instruments? Wis alle instrumenten? Ok Ok You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Je gebruikt een ontwikkel versie van Hydrogen. Help ons Hydrogen beter te maken door bugs te melden en voorstellen te doen in de hydrogen-devel mailing lijst.<br><br>Dank u! Could not save song. Kon de opname niet opslaan. Open &Pattern Open &patroon Hydrogen Pattern (*.h2pattern) Hydrogen Patroon (*.h2pattern) Save Pattern as ... Sla patroon op als ... Pattern saved. Patroon opgeslaan. Open Pattern Open patroon Don't show this message anymore Toon deze boodschap niet meer Playlist: Set song No. %1 Afspeellijst: opname nummer: %1 Show &info Toon &info Expor&t pattern as... Expor&teer patroon als ... I&nstruments I&nstrumenten &Add instrument Instrument toevoegen &Clear all Wis alles &Save library Bibliotheek op&slaan &Export library Bibliotheek exporteren Playlist &editor Afspeellijst bewerken &Import library Bibliotheek importeren Info|About Info|Over Song saved as. Opname opgeslaan Playlist: Song No. %1 Afspeellijst: opname nummer: %1 Could not export pattern. The document contains unsaved changes. Do you want to save the changes? Director Undo history &Undo menu Undo Redo Input mode Instrument Instrument Drumkit Report bug MasterMixerLine Humanize velocity Menselijke velocity Humanize time Menselijke tijd Swing Swing Set master volume [%1] Master volume [%1] Set humanize time parameter [%1] Menselijke tijd parameter [%1] Set humanize velocity parameter [%1] Menselijke velocity parameter [%1] Set swing factor [%1] Swing factor [%1] MidiTable Event Param. Action press button to record midi event Mixer Show FX panel Toon FX venster Show instrument peaks Toon piek volumes Set FX %1 level Stel FX %1 volume in Show instrument peaks = On Toon piek volumes = Aan Show instrument peaks = Off Toon piek volumes = Uit Set LADSPA FX ( %1 ) volume Stel LADSPA FX ( %1 ) volume in MixerLine Play sample Speel voorbeeld Mute Dempen Solo Solo Pan Pan Instrument name (double click to edit) Instrument naam (dubbelklik om te bewerken) Set instrument volume [%1] Instrument volume [%1] Set instr. pan [%1] Instrument pan [%1] PatternEditorPanel Select pattern size Selecteer patroon groote Select grid resolution Selecteer raster resolutie Hear new notes Speel nieuwe noten Quantize keyboard/midi events to grid Plaats keyboard/midi noten op het raster Zoom in Inzoomen Zoom out Uitzoomen Pattern editor - %1 Patroon editor - %1 Hear new notes = On Speel nieuwe noten = Aan Hear new notes = Off Speel nieuwe noten = Uit Quantize incoming keyboard/midi events = On Quantiseer toetsenbord/midi = Aan Quantize incoming keyboard/midi events = Off Quantiseer toetsenbord/midi = Uit Is not possible to change the pattern size when playing. Het is niet mogelijk om de patroon grootte te wijzigen gedurende het spelen. No pattern selected Geen patroon geselecteerd Select note properties Selecteer noot opties Velocity Velocity Pan Pan Cutoff Cutoff Resonance Resonantie Lead and Lag Loaded Soundlibrary NoteKey destructive mode pre delete settings destructive mode post delete settings Show piano roll editor Show drum editor PatternFillDialog Fill with selected pattern Vul met geselecteerd patroon PatternFillDialog_UI Alt+C Alt+A Cancel Annuleren Form 1 Form 1 &Fill &Vullen Alt+F Alt+V &Clear Wissen From: Van: To: Naar: OK OK PatternPropertiesDialog Pattern properties Patroon eigenschappen %1#2 %1 PatternPropertiesDialog_UI Form1 Form1 &Cancel &Annuleren Alt+C Alt+A &OK &OK Alt+O Alt+O New Pattern Name Patroon naam Pattern category Patroon categorie Pattern description PianoRollEditor Velocity Velocity Pan Pan Lead and Lag PlayerControl Rewind Terugspoelen Play/ Pause Start/Pause Stop Stop Fast Forward Doorspoelen Loop song Herhaal opname Pattern Mode Patroon mode Song Mode Opname mode Jack-transport on/off Jack-transport aan/uit Playing. Gestart. Pause. Pause. Stopped. Gestopt. Song mode selected. Opname mode geslecteerd. Pattern mode selected. Patroon mode geselecteerd. Jack-transport mode = On Jack-transport mode = Aan Jack-transport mode = Off Jack-transport mode = Uit JACK-transport will work only with JACK driver. Jack-transport zal enkel werken met de JACK driver. New BPM value Nieuwe BPM waarde Loop song = On Herhaal opame = Aan Loop song = Off Herhaal opname = Uit Show mixer Toon mixer Mixer Mixer Show Instrument Rack Toon instrument rack Instrument rack Instrument rack BeatCounter Panel on BeatCounter paneel aan Set BPM / Set BPM and play Jack-Time-Master on/off Jack-Time-Master aan/uit BC Panel on BC paneel aan BC Panel off BC paneel uit Count BPM and start PLAY Tel BPM en afspelen Count and set BPM Tel BPM en BPM opslaan Jack-Time-Master mode = On Jack-Time-Master mode = Aan Jack-Time-Master mode = Off Jack-Time-Master mode = Uit Record Destructive Record Record midi events = On Record midi events = Off Destructive mode = Off Destructive mode = On Recalculate Rubberband modified samples if bpm will change Recalculate all samples using Rubberband ON Recalculate all samples using Rubberband OFF Switch metronome on/off PlaylistDialog Song list Script exec Script Add Song to PlayList No Song selected! Load Playlist Hydrogen Playlist (*.h2playlist) Save Playlist No Song in List or no Song selected! Hydrogen Playlist (*.sh) Add Script to selected Song No Script in use! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Set your Default Editor No Script selected! Error loading song. sort Hydrogen Scripts (*.sh) New Script Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. No Script! &Playlist Add song to Play&list Add &current song to Playlist &Remove selected song from Playlist &Open Playlist &Save Playlist Save Playlist &as &Scripts &Add Script to selected song &Edit selected Script &Remove selected Script &Create a new Script Rewind Terugspoelen Play/ Pause/ Load selected song Stop Stop Fast Forward Doorspoelen Please save your song first WARNING, the new file is executable by the owner of the file! Pause. Pause. Playlist Browser No song selected! Playlist: set song no. %1 no Script &New Playlist PlaylistDialog_UI PlayList Browser Song list PreferencesDialog Preferences Instellingen Slow Traag Normal Normaal Fast Snel <b>Automatic driver selection</b> <b>Automatische driver selectie</b> <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">Niet ingebouwd</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Jack Audio Connection Kit Driver</b><br>Lage latency audio driver <b>ALSA Driver</b><br> <b>ALSA Driver</b><br> <b>PortAudio Driver</b><br> <b>PortAudio Driver</b><br> <b>CoreAudio Driver</b><br> <b>CoreAudio Driver</b><br> Please restart hydrogen to enable/disable LASH support Je moet Hydrogen herstarten om LASH ondersteuning in of uit te schakelen Driver restart required. Restart driver? &Ok &Cancel &Annuleren PreferencesDialog_UI Form1 Form1 &Cancel &Annuleren Alt+C Alt+A &OK &OK Alt+O Alt+O &General Al&gemeen Alt+R Alt+H Audio &System Audio &Systeem ### ### Device Apparaat Buffer size Buffer grootte Sample rate Sample rate Metronome volume Metronoom volume Connect to &Default Output Pair &Verbind standaard uitvoer paar Alt+D Alt+V 44100 44100 48000 48000 88200 88200 96000 96000 &Midi System &Midi Systeem Midi driver Midi driver Input Ingang All Alles 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 Channel Kanaal Ignore note-off Negeer noot af &Appearance &Voorkomen Application font Programma lettertype Style Stijl Select font Selecteer lettertype Slow Traag Normal Normaal Fast Snel Mixer font Mixer lettertype Meters falloff speed Meters afval snelheid <i>After a font change the application must be restarted.</i> <i>Na het wijzigen van een lettertype moet het programma herstart worden.</i> &Reopen last used song &Heropen laatst gebruikte opname Polyphony Restart output Herstart uitgang Audio output details Audio uitgang details Post-Fader Post-Fader Pre-Fader Pre-Fader Track output Use lash Gebruik LASH first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm Beat counter drift compensation in 1/10 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup Beat counter start offset in ms create per-instrument outputs Path to the Rubberband command-line utility Maximum number of bars &Reopen last used playlist Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? &Ok &Cancel &Annuleren Close dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditor_UI Dialog P&lay original sample &Apply Changes &Close &Afsluiten Adjust sample start frame Adjust sample loop begin frame set processing forward reverse pingpong loops Adjust sample end & loop end frame &Play new sample length: fade-out type volume panorama Sample length to beat: off 1/64 1/64 1/32 1/32 1/16 1/16 1/8 1/8 1/4 1/4 1/2 1/2 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 Pitch the sample in semitones, cents Crispness: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 0 Start Loop <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. Pitch (Semitone,Cent) SimpleHTMLBrowser Manual Handleiding Welcome to Hydrogen Welkom bij Hydrogen Don't show this message anymore Toon deze boodschap niet meer Ok Ok Documentation index Documentatie index SongEditorPanel Song Editor Opname editor Create new pattern Maak een nieuw patroon Move the selected pattern down Verplaats het geselecteerde patroon naar beneden Move the selected pattern up Verplaats het geselecteerde patroon naar boven Clear pattern sequence Wis patroon sequenties Select mode Selectie mode Draw mode Teken mode Warning, this will erase your pattern sequence. Are you sure? Opgepast, dit zal alle sequenties voor het patroon wissen Ben je zeker? &Ok &Ok &Cancel &Annuleren stacked mode stacked pattern mode single pattern mode not_categorized Enable time line edit Pattern %1 SongEditorPanelBpmWidget_UI Form Edit the bpm value for current beat 500,55 500,55 Edit beat in timeline 500 500 Bar BPM Delete this BPM Marker Delete BPM Marker Cancel Annuleren Ok Ok SongEditorPanelTagWidget_UI Form Tag Cancel Annuleren Ok Ok SongEditorPatternList Copy Kopiëren Delete Wissen Properties Eigenschappen Fill/Clear ... Opvullen/Wissen ... Save Pattern Patroon opslaan Load Pattern Patroon laden Open Pattern Patroon openen Hydrogen Pattern (*.h2pattern) Hydrogen patroon (*.h2pattern) Virtual Pattern Pattern 1 not_categorized The pattern-file exists. Overwrite the existing pattern? &Ok &Cancel &Annuleren Export Pattern SongPropertiesDialog Song properties Opname eigenschappen SongPropertiesDialog_UI Form1 Form1 Song name Opname naam Author Auteur Notes Commentaar &Cancel &Annuleren Alt+C Alt+A &OK &OK Alt+O Alt+O License Licentie SoundLibraryExportDialog Export Sound Library Exporteer geluid bibliotheek Directory SoundLibraryExportDialog_UI Dialog Browse Verkennen Export Exporteren SoundLibraryImportDialog Sound Library import Geluid bibliotheek importeren Sound library Geluid bibliotheek Status Status Updating SoundLibrary list... Geluid bibliotheek updaten ... Installed Geïnstalleerd New Nieuw Author: %1 Auteur: %1 Downloading SoundLibrary... Geluid bibliotheek downloaden ... Import drumkit Drumkit importeren SoundLibrary imported in %1 Geluid bibliotheek geïmporteerd in %1 An error occurred importing the SoundLibrary. Er is een fout opgetreden bij het importeren van de geluid bibliotheek. Drumkits Drumkits Songs Opnames Patterns Patronen License: %1 Licentie: %1 SoundLibraryImportDialog_UI Dialog Internet Internet Update list Update lijst Sound Library Name Geluid bibliotheek naam Sound library Info Geluid bibliotheek info Author... Auteur ... Download and install Downloaden en installeren Local file Lokaal bestand Browse... Bladeren ... Install Installeren 1 1 License... Licentie ... Edit server list Bewerk server lijst Close Sluiten SoundLibraryPanel Load Laden Export Exporteren Delete Wissen System drumkits Systeem drumkits User drumkits Gebruiker drumkits &Ok &OK &Cancel &Annuleren Songs Opnames Patterns Patronen Error loading song. Fout bij het laden van de opname Properties Eigenschappen Warning, the selected pattern will be deleted from disk. Are you sure? Opgelet, het geselecteerde patroon zal gewist worden. Ben je zeker dat verder wilt gaan? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Name Naam Author Auteur Information Informatie License Licientie Save Opslaan Cancel Annuleren Save changes made to instruments into sound library Gemaakte wijzigingen opslaan in geluids bibliotheek SoundLibraryRepositoryDialog Edit repository settings Edit server list Bewerk server lijst URL URL SoundLibraryRepositoryDialog_UI Dialog Add Toevoegen Delete Wissen SoundLibrarySaveDialog Save Sound Library Geluid bibliotheek opslaan Please supply at least a valid name Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Name Naam Author Auteur Information Informatie Cancel Annuleren License Licentie Save Opslaan SoundLibraryTree Sound library Geluid bibliotheek VirtualPatternDialog Select virtual pattern VirtualPatternDialog_UI Dialog OK OK Cancel Annuleren hydrogen-0.9.6-beta3/data/i18n/hydrogen.pl.qm000066400000000000000000001163751211146647700206470ustar00rootroot00000000000000+;]+[+[V+[j+[s+[y+[>4"k4$l74(l80xH,cRTV~>V~BV~L[*JN+;{g*BFkBblBldyyȤ[Ȥfz5t5tTFO$H5NH5H5QL>Kg\~gjU/b/?s`T`V*,H+)+f*++Z++/35SW7t07t0`7M970!70`;0a<0<0b,GH6H6H6(H6IH6KvH6cH6{H6cH6(H6I=H6ZH6(OH6KH6dH6|H7d8JMiMiOMi(MiKMifMi|M IPWg[T-TPUj|Z|Z%jZG:Z# [ ;rmYYBSaќ[UR\0\ӵ-'\ӵrTeGa{?w5NM.}4rr. y$$k}8 3'%. . i^{ dM>N|[F_R~4(+Hx6n6k"*X=x#f3+>>q^=-?.P|>E%k)+dLS0uuQ\;/xK:vf9i[<?AC}bP4b<b|VbbFI=TU} "ZI I,FIIuIxIyI(IInrn}Yexɷ,,z),m,I?ϕf7W W -WqW}WWnWWW#vv}v֏1I؃ ޱe !o^ovls$h.sYv5P(5-8[|r@fSuV|[V|iW^taCOh~RNh~Vk2Xm&pr`#z%<+DSDVEmȿ%ug7^"B06)D 9''ODNhU*/_pG~>#I#!-UE֣z֣=>[!J rhw,u EnWF?#P ]424=V^Da.fh3X(s#\Ec&_4 +%GFbdo>¯5 o&@9\( +@{A4G.l&$g y%ulcJ>m333 V¸ 30\t3Cdp S! +s' 3bs @e Cn S%]:= h> h> wS  rK ~M ~U  Tek +Z$ ?j Avm _W+ b d gnU kJD x@#<) ? ?/ \ /za DQ s') '3 = =e 5i "U" 5yG" 5yL @!n Ch C FPJ y `nn j2 w4V e \9 a5 9 $ 45 =/" yETp { _ '0 < ]d ͼ ӽ^Qt 31N/H$R.=*G<^jjeL0meQfw>[|@&qXd8EhǗ.~-w C P.aN!~st`u48*;W+e7tkM`ޔk*$%1vdi6<b>Listy dyskusyjne</b><br>Mailing lists
     AboutDialogP<b>GBwny programista i opiekun:</b><br>$Main coder and mantainer:
     AboutDialog4<b>Strona projektu</b><br>Project page
     AboutDialog*<b>Strona WWW</b><br>Website
     AboutDialogO programieAbout AboutDialog######AboutDialog_UI&Autorzy&AuthorsAboutDialog_UI&Licencja&LicenseAboutDialog_UI&OK&OKAboutDialog_UIO &programieA&boutAboutDialog_UIO HydrogenAbout HydrogenAboutDialog_UI Alt+OAlt+OAboutDialog_UI4Informacja o Silniku AudioAudio Engine InfoAudioEngineInfoForm######AudioEngineInfoForm_UI$Stan silnika AudioAudio engine stateAudioEngineInfoForm_UIWyj[cie Audio Audio outputAudioEngineInfoForm_UIRozmiar bufora Buffer sizeAudioEngineInfoForm_UIPodBczony do Connected toAudioEngineInfoForm_UIFormularz1Form1AudioEngineInfoForm_UI RamkiFramesAudioEngineInfoForm_UIwej[cie MIDI MIDI inputAudioEngineInfoForm_UI NazwaNameAudioEngineInfoForm_UI UkBadyPatternsAudioEngineInfoForm_UIOdtwarzanie nut Playing notesAudioEngineInfoForm_UI$Czas przetwarzania Process timeAudioEngineInfoForm_UI2Ramki czasu rzeczywistegoRealtime framesAudioEngineInfoForm_UI2Czstotliwo[ prbkowania Sample rateAudioEngineInfoForm_UISamplerSamplerAudioEngineInfoForm_UI$Wybrany instrumentSelected instrumentAudioEngineInfoForm_UI.Wybrany ukBad rytmicznySelected patternAudioEngineInfoForm_UISekwencer SequencerAudioEngineInfoForm_UIPozycja utworu Song positionAudioEngineInfoForm_UIStan utworu Song stateAudioEngineInfoForm_UISyntezatorSynthAudioEngineInfoForm_UI CykleTicksAudioEngineInfoForm_UI AnulujCancelAudioFileBrowser_UI DialogDialogAudioFileBrowser_UI DialogDialog Director_UI"### Autor zestawu### Drumkit authorDrumkitManager_UI2### informacje o zestawie### Drumkit infoDrumkitManager_UI"### nazwa zestawu### Drumkit nameDrumkitManager_UIX### Zestaw perkusyjny zostanie zainstalowany4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b>Wicej zestaww perkusyjnych [cigniesz z <br>http://www.hydrogen-music.org </b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UI AutorAuthorDrumkitManager_UIPrzegldajBrowseDrumkitManager_UI,UsuD zestaw perkusyjnyDelete drumkitDrumkitManager_UI katalog zestawwDrumkit directoryDrumkitManager_UI&nazwa pliku zestawuDrumkit filenameDrumkitManager_UINazwa zestawu Drumkit nameDrumkitManager_UIEksportujExportDrumkitManager_UIFormularz1Form1DrumkitManager_UI ImportImportDrumkitManager_UIInformacjaInfoDrumkitManager_UI AadujLoadDrumkitManager_UI.Aaduj zestaw perkusyjny Load drumkitDrumkitManager_UIZachowajSaveDrumkitManager_UIEksportuj utwr Export songExportSongDialog&Przegldaj... &Browse...ExportSongDialog_UI&Zamknij&CloseExportSongDialog_UI&Eksportuj&ExportExportSongDialog_UI1616ExportSongDialog_UI 192000192000ExportSongDialog_UI 2205022050ExportSongDialog_UI2424ExportSongDialog_UI3232ExportSongDialog_UI 4410044100ExportSongDialog_UI 4800048000ExportSongDialog_UI88ExportSongDialog_UI 9600096000ExportSongDialog_UI Alt+BAlt+BExportSongDialog_UI Alt+CAlt+CExportSongDialog_UI Alt+EAlt+EExportSongDialog_UI6Eksportuj CaBy Utwr do WAVExport Whole Song to WAVExportSongDialog_UI(Nazwa pliku eksportuExport filenameExportSongDialog_UI*%1<br>%2 KHz<br>%3 %4%1
    %2 KHz
    %3 %4 FileBrowser$wBcz/wyBcz efekt FX on/off FxMixerLine.Wyj[cie gBwne (master) Master output FxMixerLine&Anuluj&Cancel$H2Core::SoundLibraryPropertiesDialog&Ok&Ok$H2Core::SoundLibraryPropertiesDialog.Zestaw zaBadowany: [%1]Drumkit loaded: [%1] HydrogenApp MikserMixer HydrogenAppEdytor utworu Song Editor HydrogenAppAtakAttackInstrumentEditor ZanikDecayInstrumentEditor<Czstotliwo[ graniczna filtru Filter CutoffInstrumentEditor@Czstotliwo[ rezonansowa filtruFilter resonanceInstrumentEditor OglneGeneralInstrumentEditor.Wzmocnienie instrumentuInstrument gainInstrumentEditor&Wzmocnienie warstwy Layer gainInstrumentEditorDWysoko[ dzwiku warstwy (zgrubna)Layer pitch (Coarse)InstrumentEditorFWysoko[ dzwiku warstwy (dokBadna)Layer pitch (Fine)InstrumentEditorWarstwyLayersInstrumentEditor,Nowa nazwa instrumentuNew instrument nameInstrumentEditor^WspBczynnik losowo[ci zmiany wysoko[ci dzwikuRandom pitch factorInstrumentEditorUwolnienieReleaseInstrumentEditor@Pokazuje wBa[ciwo[ci instrumentuShow instrument propertiesInstrumentEditor6Pokazuje wBa[ciwo[ci warstwShow layers propertiesInstrumentEditorPodtrzymanieSustainInstrumentEditorUsuD nuty Clear notesInstrumentLineUsuD instrumentDelete instrumentInstrumentLineLosowa gBo[no[Randomize velocityInstrumentLineSoloSoloInstrumentLineInstrument InstrumentInstrumentRack8Pokazuje edytor instrumentwShow Instrument editorInstrumentRack8Pokazuje bibliotek dzwikwShow sound libraryInstrumentRack&Biblioteka dzwikw Sound libraryInstrumentRack0Edycja parametrw efektuEdit FX parametersLadspaFXMixerLinePowrt efektu Effect returnLadspaFXMixerLineobej[cie efektu FX bypassLadspaFXMixerLine&nazwa LADSPA efektuLadspa FX nameLadspaFXMixerLineAktywacjaActivateLadspaFXPropertiesDeaktywuj DeactivateLadspaFXProperties8wBa[ciwo[ci efektu LADSPA %1LADSPA FX %1 PropertiesLadspaFXPropertiesBrak wtyczki No pluginLadspaFXPropertieswybr efektu Select FXLadspaFXProperties<[%1] wBa[ciwo[ci efektu LADSPA[%1] LADSPA FX PropertiesLadspaFXProperties GrupyGroupsLadspaFXSelectorMonoMonoLadspaFXSelectorNie wspierane Not supportedLadspaFXSelector&Wybr efektu LADSPASelect LADSPA FXLadspaFXSelector StereoStereoLadspaFXSelector8### twrca efektu1234 {1 2?}### FX maker 1 2LadspaFXSelector_UI4### copyright1234 {1 2 3?}### copyright 1 2 3LadspaFXSelector_UI### ID efektu ### fx IDLadspaFXSelector_UI&### etykieta efektu ### fx labelLadspaFXSelector_UI### typ efektu ### fx typeLadspaFXSelector_UI&Anuluj&CancelLadspaFXSelector_UI&OK&OKLadspaFXSelector_UI11LadspaFXSelector_UI Alt+CAlt+CLadspaFXSelector_UI Alt+OAlt+OLadspaFXSelector_UIFormularz1Form1LadspaFXSelector_UIMainFormO progr&amie&AboutMainForm&Anuluj&CancelMainForm&Porzu&DiscardMainForm &Eksportuj utwr &Export songMainForm&Informacja&InfoMainForm&Panel &instrumentw&Instrument RackMainForm&Mikser&MixerMainForm &Nowy&NewMainForm&Otwrz&OpenMainForm&Preferencje &PreferencesMainForm&Projekt&ProjectMainForm &Wyjdz&QuitMainForm&Zapisz&SaveMainForm&Narzdzia&ToolsMainForm.Podrcznik &U|ytkownika &User manualMainForm AnulujCancelMainForm@Wyczy[ci wszystkie instrumenty?Clear all instruments?MainForm&OdpluskwianieDe&bugMainFormDNie pokazuj wicej tego komunikatuDon't show this message anymoreMainForm<BBd podczas Badowania utworu.Error loading song.MainFormTBBd podczas uruchamiania sterownika audioError starting audio driverMainForm(Eksportuj plik &MIDIExport &MIDI fileMainForm&Eksportuj plik MIDIExport MIDI fileMainForm Hydrogen Gotowy.Hydrogen Ready.MainForm2Utwr Hydrogen (*.h2song)Hydrogen Song (*.h2song)MainFormInstrument InstrumentMainFormTSterownik jack: nie mog uruchomi klienta#Jack driver: cannot activate clientMainFormhSterownik jack: nie mog podBczy porty wyj[ciowego'Jack driver: cannot connect output portMainForm`Sterownik jack: bBd podczas rejestrowania portu#Jack driver: error in port registerMainFormBSterownik jack: serwer zatrzymanyJack driver: server shutdownMainForm"Plik midi (*.mid)Midi file (*.mid)MainFormOkOkMainFormOtwrz &Demo Open &DemoMainForm Otw&rz niedawne Open &recentMainFormOtwrz utwr Open songMainFormDrukuj Obiekty Print ObjectsMainFormZapisz j&ako... Save &as...MainFormZapisz utwr Save songMainFormBPoka| informacje o silniku &audioShow &audio engine infoMainFormUtwr zapisany. Song saved.MainForm0Nieznany sterownik audioUnknown audio driverMainForm Nieznany bBd %1Unknown error %1MainForm*U|ywasz wersji rozwojowej Hydrogen. Prosz, pom| nam zgBaszajc bBdy lub sugestie (w jzyku angielskim) na list hydrogen-devel.<br><br>Dzikujemy!You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!MainForm"Humanizacja czasu Humanize timeMasterMixerLine*Humanizacja gBo[no[ciHumanize velocityMasterMixerLineNUstawia parametr czasu humanizacji [%1] Set humanize time parameter [%1]MasterMixerLineVUstawia parametr humanizacji gBo[no[ci [%1]$Set humanize velocity parameter [%1]MasterMixerLineJUstawia gBo[no[ gBwn (master) [%1]Set master volume [%1]MasterMixerLineJUstawia wspBczynnik swingowania [%1]Set swing factor [%1]MasterMixerLineKoBysanieSwingMasterMixerLine2Ustawia poziom efektu %1 Set FX %1 level MixerJUstawia gBo[no[ efektu LADSPA ( %1 )Set LADSPA FX ( %1 ) volumeMixer,Pokazuje panel efektw Show FX panelMixerNPokazuje szczyty gBo[no[ci instrumentwShow instrument peaksMixerRPomiar gBo[no[ci instrumentw = WyBczonyShow instrument peaks = OffMixerPPomiar gBo[no[ci instrumentw = WBczonyShow instrument peaks = OnMixerVNazwa instrumentu (kliknij 2x aby edytowa)&Instrument name (double click to edit) MixerLineWyciszenieMute MixerLinePanoramaPan MixerLineOdtwarza prbk Play sample MixerLineBUstawia gBo[no[ instrumentu [%1]Set instrument volume [%1] MixerLineSoloSolo MixerLineGranicaCutoffPatternEditorPanel,Odtwarzanie nowych nutHear new notesPatternEditorPanelDOdtwarzanie nowych nut = WyBczoneHear new notes = OffPatternEditorPanelBOdtwarzanie nowych nut = WBczoneHear new notes = OnPatternEditorPanelNie mo|na zmienia rozmiaru ukBadu rytmicznego podczas odtwarzania.8Is not possible to change the pattern size when playing.PatternEditorPanelLNie wybrano |adnego ukBadu rytmicznegoNo pattern selectedPatternEditorPanelPanoramaPanPatternEditorPanel<Edytor ukBadu rytmicznego - %1Pattern editor - %1PatternEditorPanelvDopasuj nadchodzce zdarzenia z klawiatury/midi = WyBczone,Quantize incoming keyboard/midi events = OffPatternEditorPaneltDopasuj nadchodzce zdarzenia z klawiatury/midi = WBczone+Quantize incoming keyboard/midi events = OnPatternEditorPanelbDopasowywanie zdarzeD z klawiatury/midi do siatki%Quantize keyboard/midi events to gridPatternEditorPanelRezonans ResonancePatternEditorPanel6Wybr rozdzielczo[ci siatkiSelect grid resolutionPatternEditorPanel*Wybr wBa[ciwo[ci nutSelect note propertiesPatternEditorPanelBWybr rozmiaru ukBadu rytmicznegoSelect pattern sizePatternEditorPanelGBo[no[VelocityPatternEditorPanelPowikszenieZoom inPatternEditorPanelPomniejszenieZoom outPatternEditorPanelHWypeBnij wybranym ukBadem rytmicznymFill with selected patternPatternFillDialog&WypeBnianie&ClearPatternFillDialog_UI&WypeBnianie&FillPatternFillDialog_UI Alt+CAlt+CPatternFillDialog_UI Alt+FAlt+FPatternFillDialog_UI AnulujCancelPatternFillDialog_UI Form 1Form 1PatternFillDialog_UIOd:From:PatternFillDialog_UIOKOKPatternFillDialog_UIDo:To:PatternFillDialog_UI<WBa[ciwo[ci ukBadu rytmicznegoPattern propertiesPatternPropertiesDialog&Anuluj&CancelPatternPropertiesDialog_UI&OK&OKPatternPropertiesDialog_UI Alt+CAlt+CPatternPropertiesDialog_UI Alt+OAlt+OPatternPropertiesDialog_UI Form1Form1PatternPropertiesDialog_UI&Nazwa Nowego UkBaduNew Pattern NamePatternPropertiesDialog_UIPanoramaPanPianoRollEditorGBo[no[VelocityPianoRollEditor*Przewijanie do przodu Fast Forward PlayerControl$Panel InstrumentwInstrument rack PlayerControlbJACK-transport dziaBa tylko ze sterownikiem JACK./JACK-transport will work only with JACK driver. PlayerControl>Tryb jack-transport = WyBczonyJack-transport mode = Off PlayerControl<Tryb jack-transport = WBczonyJack-transport mode = On PlayerControl6WBcz/wyBcz jack-transportJack-transport on/off PlayerControl"Zaptlanie utworu Loop song PlayerControl:Zaptlanie utworu = WyBczoneLoop song = Off PlayerControl8Zaptlanie utworu = WBczoneLoop song = On PlayerControl MikserMixer PlayerControl Nowa warto[ BPM New BPM value PlayerControlFTryb odtwarzania ukBadu rytmicznego Pattern Mode PlayerControl<Wybrano tryb: ukBad rytmiczny.Pattern mode selected. PlayerControl Pauza.Pause. PlayerControl$Odtwarzanie/ Pauza Play/ Pause PlayerControlOdtwarzanie.Playing. PlayerControl$Przewijanie wsteczRewind PlayerControl6Pokazuje Panel InstrumentwShow Instrument Rack PlayerControlPokazuje mikser Show mixer PlayerControl.Tryb odtwarzania utworu Song Mode PlayerControl2Wybrano tryb: caBy utwr.Song mode selected. PlayerControlStopStop PlayerControlZatrzymany.Stopped. PlayerControl<BBd podczas Badowania utworu.Error loading song.PlaylistDialog*Przewijanie do przodu Fast ForwardPlaylistDialog Pauza.Pause.PlaylistDialog$Przewijanie wsteczRewindPlaylistDialogStopStopPlaylistDialog&Anuluj&CancelPreferencesDialog&Ok&OkPreferencesDialog2<b>Sterownik ALSA</b><br>ALSA Driver
    PreferencesDialogH<b>Automatyczny wybr sterownika</b>!Automatic driver selectionPreferencesDialog<<b>Sterownik CoreAudio</b><br>CoreAudio Driver
    PreferencesDialog<b>Sterownik Jack Audio Connection Kit</b><br>sterownik audio o niskim opznieniuCJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialogz<b>Open Sound System</b><br>Prosty sterownik audio [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog<<b>Sterownik PortAudio</b><br>PortAudio Driver
    PreferencesDialogh<br><b><font color="red">Nie wkompilowany</font></b>0
    Not compiledPreferencesDialog SzybkoFastPreferencesDialogNormalnieNormalPreferencesDialogUstawienia PreferencesPreferencesDialog WolnoSlowPreferencesDialog######PreferencesDialog_UI&Wygld &AppearancePreferencesDialog_UI&Anuluj&CancelPreferencesDialog_UI&Oglne&GeneralPreferencesDialog_UISystem &Midi &Midi SystemPreferencesDialog_UI&OK&OKPreferencesDialog_UINOtw&rz ponownie ostatnio u|ywany utwr&Reopen last used songPreferencesDialog_UI11PreferencesDialog_UI1010PreferencesDialog_UI1111PreferencesDialog_UI1212PreferencesDialog_UI1313PreferencesDialog_UI1414PreferencesDialog_UI1515PreferencesDialog_UI1616PreferencesDialog_UI22PreferencesDialog_UI33PreferencesDialog_UI44PreferencesDialog_UI 4410044100PreferencesDialog_UI 4800048000PreferencesDialog_UI55PreferencesDialog_UI66PreferencesDialog_UI77PreferencesDialog_UI88PreferencesDialog_UI 8820088200PreferencesDialog_UI99PreferencesDialog_UI 9600096000PreferencesDialog_UI<i>Po zmianie czcionki program musi zosta ponownie uruchomiony.</i>=After a font change the application must be restarted.PreferencesDialog_UIWszystkieAllPreferencesDialog_UI Alt+CAlt+CPreferencesDialog_UI Alt+DAlt+DPreferencesDialog_UI Alt+OAlt+OPreferencesDialog_UI Alt+RAlt+RPreferencesDialog_UI"Czcionka programuApplication fontPreferencesDialog_UI&System Audio Audio &SystemPreferencesDialog_UIRozmiar bufora Buffer sizePreferencesDialog_UI KanaBChannelPreferencesDialog_UIJPodBcz do &Domy[lnej Pary Wyj[ciowejConnect to &Default Output PairPreferencesDialog_UIUrzdzenieDevicePreferencesDialog_UI SzybkoFastPreferencesDialog_UI Form1Form1PreferencesDialog_UI8Ignoruj komunikat "note-off"Ignore note-offPreferencesDialog_UIWej[cieInputPreferencesDialog_UIFSzybko[ zanikania wskazaD miernikaMeters falloff speedPreferencesDialog_UI$GBo[no[ metronomuMetronome volumePreferencesDialog_UISterownik midi Midi driverPreferencesDialog_UI Czcionka miksera Mixer fontPreferencesDialog_UINormalnieNormalPreferencesDialog_UIPolifonia PolyphonyPreferencesDialog_UI2Czstotliwo[ prbkowania Sample ratePreferencesDialog_UIWybr czcionki Select fontPreferencesDialog_UI WolnoSlowPreferencesDialog_UIStylStylePreferencesDialog_UI&Anuluj&Cancel SampleEditor&Ok&Ok SampleEditor&Zamknij&CloseSampleEditor_UI00SampleEditor_UI11SampleEditor_UI1/161/16SampleEditor_UI1/21/2SampleEditor_UI1/321/32SampleEditor_UI1/41/4SampleEditor_UI1/641/64SampleEditor_UI1/81/8SampleEditor_UI1010SampleEditor_UI1111SampleEditor_UI1212SampleEditor_UI1313SampleEditor_UI1414SampleEditor_UI1515SampleEditor_UI1616SampleEditor_UI1717SampleEditor_UI1818SampleEditor_UI1919SampleEditor_UI22SampleEditor_UI2020SampleEditor_UI2121SampleEditor_UI2222SampleEditor_UI2323SampleEditor_UI2424SampleEditor_UI2525SampleEditor_UI2626SampleEditor_UI2727SampleEditor_UI2828SampleEditor_UI2929SampleEditor_UI33SampleEditor_UI3030SampleEditor_UI3131SampleEditor_UI3232SampleEditor_UI44SampleEditor_UI55SampleEditor_UI66SampleEditor_UI77SampleEditor_UI88SampleEditor_UI99SampleEditor_UI DialogDialogSampleEditor_UI&Indeks dokumentacjiDocumentation indexSimpleHTMLBrowserDNie pokazuj wicej tego komunikatuDon't show this message anymoreSimpleHTMLBrowser$Instrukcja obsBugiManualSimpleHTMLBrowserOkOkSimpleHTMLBrowser"Witamy w HydrogenWelcome to HydrogenSimpleHTMLBrowser&Anuluj&CancelSongEditorPanel&Ok&OkSongEditorPanelHCzy[ci sekwencj ukBadw rytmicznychClear pattern sequenceSongEditorPanel6Tworzy nowy ukBad rytmicznyCreate new patternSongEditorPanelTryb rysowania Draw modeSongEditorPanelLPrzesuwa wybrany ukBad rytmiczny w dBMove the selected pattern downSongEditorPanelNPrzesuwa wybrany ukBad rytmiczny w grMove the selected pattern upSongEditorPanel Tryb zaznaczania Select modeSongEditorPanelEdytor utworu Song EditorSongEditorPanelOstrze|enie: ta operacja usunie caB twoj sekwencj ukBadw rytmicznych. Kontynuowa?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanel500500SongEditorPanelBpmWidget_UI 500,55500,55SongEditorPanelBpmWidget_UI AnulujCancelSongEditorPanelBpmWidget_UIOkOkSongEditorPanelBpmWidget_UI AnulujCancelSongEditorPanelTagWidget_UIOkOkSongEditorPanelTagWidget_UI&Anuluj&CancelSongEditorPatternList&Ok&OkSongEditorPatternList KopiujCopySongEditorPatternListUsuDDeleteSongEditorPatternList(WypeBnij/Wyczy[ ...Fill/Clear ...SongEditorPatternListWBa[ciwo[ci PropertiesSongEditorPatternList$WBa[ciwo[ci utworuSong propertiesSongPropertiesDialog &OK &OKSongPropertiesDialog_UI&Anuluj&CancelSongPropertiesDialog_UI Alt+CAlt+CSongPropertiesDialog_UI Alt+OAlt+OSongPropertiesDialog_UI AutorAuthorSongPropertiesDialog_UI Form1Form1SongPropertiesDialog_UINotatkiNotesSongPropertiesDialog_UINazwa utworu Song nameSongPropertiesDialog_UIPrzegldajBrowseSoundLibraryExportDialog_UI DialogDialogSoundLibraryExportDialog_UIEksportujExportSoundLibraryExportDialog_UInWystpiB bBd podczas importowania Biblioteki Dzwikw.-An error occurred importing the SoundLibrary.SoundLibraryImportDialogAutor: %1 Author: %1SoundLibraryImportDialog@Zciganie Biblioteki Dzwikw...Downloading SoundLibrary...SoundLibraryImportDialog6Import zestawu perkusyjnegoImport drumkitSoundLibraryImportDialogZainstalowane InstalledSoundLibraryImportDialogNowyNewSoundLibraryImportDialog UkBadyPatternsSoundLibraryImportDialog8Importuj bibliotek dzwikwSound Library importSoundLibraryImportDialog&Biblioteka dzwikw Sound librarySoundLibraryImportDialogLBiblioteka Dzwikw zaimportowana w %1SoundLibrary imported in %1SoundLibraryImportDialog StatusStatusSoundLibraryImportDialogTUaktualnianie listy Biblioteki Dzwikw...Updating SoundLibrary list...SoundLibraryImportDialog11SoundLibraryImportDialog_UIAutor... Author...SoundLibraryImportDialog_UIPrzegldaj... Browse...SoundLibraryImportDialog_UI DialogDialogSoundLibraryImportDialog_UI*Zcignij i zainstalujDownload and installSoundLibraryImportDialog_UIInstalacjaInstallSoundLibraryImportDialog_UIInternetInternetSoundLibraryImportDialog_UIPlik lokalny Local fileSoundLibraryImportDialog_UI2Nazwa Biblioteki DzwikwSound Library NameSoundLibraryImportDialog_UI@Informacje o Bibliotece DzwikwSound library InfoSoundLibraryImportDialog_UI$Aktualizacja listy Update listSoundLibraryImportDialog_UI&Anuluj&CancelSoundLibraryPanel&Ok&OkSoundLibraryPanelUsuDDeleteSoundLibraryPanel<BBd podczas Badowania utworu.Error loading song.SoundLibraryPanelEksportujExportSoundLibraryPanel AadujLoadSoundLibraryPanel UkBadyPatternsSoundLibraryPanelWBa[ciwo[ci PropertiesSoundLibraryPanel8Zestawy perkusyjne systemoweSystem drumkitsSoundLibraryPanel<Zestawy perkusyjne u|ytkownika User drumkitsSoundLibraryPanel AutorAuthorSoundLibraryPropertiesDialog_UI AnulujCancelSoundLibraryPropertiesDialog_UI DialogDialogSoundLibraryPropertiesDialog_UIInformacja InformationSoundLibraryPropertiesDialog_UI NazwaNameSoundLibraryPropertiesDialog_UIUsuDDeleteSoundLibraryRepositoryDialog_UI DialogDialogSoundLibraryRepositoryDialog_UI8Zachowaj Bibliotek DzwikwSave Sound LibrarySoundLibrarySaveDialog AutorAuthorSoundLibrarySaveDialog_UI AnulujCancelSoundLibrarySaveDialog_UI DialogDialogSoundLibrarySaveDialog_UIInformacja InformationSoundLibrarySaveDialog_UI NazwaNameSoundLibrarySaveDialog_UI&Biblioteka dzwikw Sound librarySoundLibraryTree AnulujCancelVirtualPatternDialog_UI DialogDialogVirtualPatternDialog_UIOKOKVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.pl.ts000066400000000000000000006373621211146647700206640ustar00rootroot00000000000000 AboutDialog About O programie <b>Website</b><br> <b>Strona WWW</b><br> <b>Project page</b><br> <b>Strona projektu</b><br> <b>Mailing lists</b><br> <b>Listy dyskusyjne</b><br> <b>Main coder and mantainer:</b><br> <b>Główny programista i opiekun:</b><br> AboutDialog_UI About Hydrogen O Hydrogen &OK &OK Alt+O Alt+O A&bout O &programie ### ### &Authors &Autorzy &License &Licencja <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info Informacja o Silniku Audio AudioEngineInfoForm_UI Form1 Formularz1 ### ### Buffer size Rozmiar bufora Sample rate Częstotliwość próbkowania Connected to Podłączony do Frames Ramki Process time Czas przetwarzania Ticks Cykle Song state Stan utworu Selected instrument Wybrany instrument Audio engine state Stan silnika Audio Selected pattern Wybrany układ rytmiczny Playing notes Odtwarzanie nut Patterns Układy Song position Pozycja utworu Sampler Sampler Synth Syntezator Sequencer Sekwencer MIDI input wejście MIDI Name Nazwa Audio output Wyjście Audio Realtime frames Ramki czasu rzeczywistego AudioFileBrowser Audio File Browser Size: %1 bytes Samplerate: %1 s Name: Size: Samplerate: Sample length: Please do not preview samples which are longer than 10 minutes! Sample length: AudioFileBrowser_UI Dialog Dialog Open Name: Samplerate: Size: Length: Cancel Anuluj Pla&y samples by clicking &Up &Home &Play Sample &Filename to instrument name &Stop View hidden folders Be careful, this change all Layer velocity settings Set automatic velocity Director Director Director_UI Dialog Dialog DownloadWidget (%1/%2 KiB) - ETA %3 DrumkitManager_UI Form1 Formularz1 Load Ładuj ### Drumkit author ### Autor zestawu Delete drumkit Usuń zestaw perkusyjny ### Drumkit name ### nazwa zestawu ### Drumkit info ### informacje o zestawie Load drumkit Ładuj zestaw perkusyjny Save Zachowaj Author Autor Info Informacja Drumkit name Nazwa zestawu Import Import Drumkit filename nazwa pliku zestawu Browse Przeglądaj <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b>Więcej zestawów perkusyjnych ściągniesz z <br>http://www.hydrogen-music.org </b> ### The drumkit will be installed zncxbmzbxcmznxbcmz ### Zestaw perkusyjny zostanie zainstalowany Export Eksportuj Drumkit directory katalog zestawów ExportSongDialog Export song Eksportuj utwór The file %1 exists. Overwrite the existing file? Export to a single track Export to seperate tracks Both ExportSongDialog_UI Export Whole Song to WAV Eksportuj Cały Utwór do WAV &Close &Zamknij Alt+C Alt+C &Export &Eksportuj Alt+E Alt+E Export filename Nazwa pliku eksportu &Browse... &Przeglądaj... Alt+B Alt+B Samplerate in Hz: 22050 22050 44100 44100 48000 48000 96000 96000 192000 192000 SampleDepth in Bit: 8 8 16 16 24 24 32 32 Templates: WAV in CD quality "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off włącz/wyłącz efekt Master output Wyjście główne (master) H2Core::SongEditorPanelBpmWidget BPM H2Core::SongEditorPanelTagWidget Tag H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties &Ok &Ok &Cancel &Anuluj This is not possible, you can only save changes inside instruments to the current loaded sound library Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] Zestaw załadowany: [%1] Song Editor Edytor utworu Instrument + Pattern Mixer Mikser InstrumentEditor Random pitch factor Współczynnik losowości zmiany wysokości dźwięku Filter Cutoff Częstotliwość graniczna filtru Filter resonance Częstotliwość rezonansowa filtru Attack Atak Decay Zanik Sustain Podtrzymanie Release Uwolnienie Instrument gain Wzmocnienie instrumentu Layer gain Wzmocnienie warstwy Layer pitch (Coarse) Wysokość dźwięku warstwy (zgrubna) Layer pitch (Fine) Wysokość dźwięku warstwy (dokładna) Show instrument properties Pokazuje właściwości instrumentu Show layers properties Pokazuje właściwości warstw New instrument name Nowa nazwa instrumentu General Ogólne Layers Warstwy Stop the current playing instrument-note before trigger the next note sample. Auto-Stop-Note InstrumentLine Clear notes Usuń nuty Randomize velocity Losowa głośność Delete instrument Usuń instrument Fill notes ... Fill all notes Fill 1/2 notes Fill 1/3 notes Fill 1/4 notes Fill 1/6 notes Fill 1/8 notes Mute instrument Solo Solo InstrumentRack Show Instrument editor Pokazuje edytor instrumentów Instrument Instrument Show sound library Pokazuje bibliotekę dźwięków Sound library Biblioteka dźwięków LadspaFXMixerLine FX bypass obejście efektu Edit FX parameters Edycja parametrów efektu Ladspa FX name nazwa LADSPA efektu Effect return Powrót efektu LadspaFXProperties Select FX wybór efektu Activate Aktywacja [%1] LADSPA FX Properties [%1] właściwości efektu LADSPA Deactivate Deaktywuj LADSPA FX %1 Properties właściwości efektu LADSPA %1 No plugin Brak wtyczki Remove FX LadspaFXSelector Select LADSPA FX Wybór efektu LADSPA Groups Grupy Stereo Stereo Mono Mono Not supported Nie wspierane Recently Used Alphabetic List Categorized LadspaFXSelector_UI Form1 Formularz1 &Cancel &Anuluj Alt+C Alt+C &OK &OK Alt+O Alt+O ### fx label ### etykieta efektu ### fx type ### typ efektu ### fx ID ### ID efektu 1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> ### fx name 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> ### FX maker 1 2 ### twórca efektu1234 {1 2?} <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 ### copyright1234 {1 2 3?} LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm Hydrogen Ready. Hydrogen Gotowy. &Project &Projekt &New &Nowy &Open &Otwórz Open &Demo Otwórz &Demo Open &recent Otwó&rz niedawne &Save &Zapisz Save &as... Zapisz j&ako... Export &MIDI file Eksportuj plik &MIDI &Export song &Eksportuj utwór &Quit &Wyjdź &Tools &Narzędzia &Mixer &Mikser &Instrument Rack Panel &instrumentów &Preferences &Preferencje De&bug &Odpluskwianie Show &audio engine info Pokaż informacje o silniku &audio Print Objects Drukuj Obiekty &Info &Informacja &User manual Podręcznik &Użytkownika &About O progr&amie &Discard &Porzuć &Cancel &Anuluj Hydrogen Song (*.h2song) Utwór Hydrogen (*.h2song) Save song Zapisz utwór Song saved. Utwór zapisany. Open song Otwórz utwór Error loading song. Błąd podczas ładowania utworu. Midi file (*.mid) Plik midi (*.mid) Export MIDI file Eksportuj plik MIDI Unknown audio driver Nieznany sterownik audio Error starting audio driver Błąd podczas uruchamiania sterownika audio Jack driver: server shutdown Sterownik jack: serwer zatrzymany Jack driver: cannot activate client Sterownik jack: nie mogę uruchomić klienta Jack driver: cannot connect output port Sterownik jack: nie mogę podłączyć porty wyjściowego Jack driver: error in port register Sterownik jack: błąd podczas rejestrowania portu Unknown error %1 Nieznany błąd %1 Clear all instruments? Wyczyścić wszystkie instrumenty? Ok Ok Cancel Anuluj You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Używasz wersji rozwojowej Hydrogen. Proszę, pomóż nam zgłaszając błędy lub sugestie (w języku angielskim) na listę hydrogen-devel.<br><br>Dziękujemy! Could not save song. Open &Pattern Hydrogen Pattern (*.h2pattern) Save Pattern as ... Pattern saved. Open Pattern Don't show this message anymore Nie pokazuj więcej tego komunikatu Playlist: Set song No. %1 Show &info Expor&t pattern as... I&nstruments &Add instrument &Clear all &Save library &Export library Playlist &editor &Import library Info|About Song saved as. Playlist: Song No. %1 Could not export pattern. The document contains unsaved changes. Do you want to save the changes? Director Undo history &Undo menu Undo Redo Input mode Instrument Instrument Drumkit Report bug MasterMixerLine Humanize velocity Humanizacja głośności Humanize time Humanizacja czasu Swing Kołysanie Set master volume [%1] Ustawia głośność główną (master) [%1] Set humanize time parameter [%1] Ustawia parametr czasu humanizacji [%1] Set humanize velocity parameter [%1] Ustawia parametr humanizacji głośności [%1] Set swing factor [%1] Ustawia współczynnik swingowania [%1] MidiTable Event Param. Action press button to record midi event Mixer Show FX panel Pokazuje panel efektów Show instrument peaks Pokazuje szczyty głośności instrumentów Set FX %1 level Ustawia poziom efektu %1 Show instrument peaks = On Pomiar głośności instrumentów = Włączony Show instrument peaks = Off Pomiar głośności instrumentów = Wyłączony Set LADSPA FX ( %1 ) volume Ustawia głośność efektu LADSPA ( %1 ) MixerLine Play sample Odtwarza próbkę Mute Wyciszenie Solo Solo Pan Panorama Instrument name (double click to edit) Nazwa instrumentu (kliknij 2x aby edytować) Set instrument volume [%1] Ustawia głośność instrumentu [%1] Set instr. pan [%1] PatternEditorPanel Select pattern size Wybór rozmiaru układu rytmicznego Select grid resolution Wybór rozdzielczości siatki Hear new notes Odtwarzanie nowych nut Quantize keyboard/midi events to grid Dopasowywanie zdarzeń z klawiatury/midi do siatki Zoom in Powiększenie Zoom out Pomniejszenie Pattern editor - %1 Edytor układu rytmicznego - %1 No pattern selected Nie wybrano żadnego układu rytmicznego Hear new notes = On Odtwarzanie nowych nut = Włączone Hear new notes = Off Odtwarzanie nowych nut = Wyłączone Quantize incoming keyboard/midi events = On Dopasuj nadchodzące zdarzenia z klawiatury/midi = Włączone Quantize incoming keyboard/midi events = Off Dopasuj nadchodzące zdarzenia z klawiatury/midi = Wyłączone Is not possible to change the pattern size when playing. Nie można zmieniać rozmiaru układu rytmicznego podczas odtwarzania. Select note properties Wybór właściwości nut Velocity Głośność Pan Panorama Cutoff Granica Resonance Rezonans Lead and Lag Loaded Soundlibrary NoteKey destructive mode pre delete settings destructive mode post delete settings Show piano roll editor Show drum editor PatternFillDialog Fill with selected pattern Wypełnij wybranym układem rytmicznym PatternFillDialog_UI Form 1 Form 1 &Fill &Wypełnianie Alt+F Alt+F &Clear &Wypełnianie Alt+C Alt+C From: Od: To: Do: Cancel Anuluj OK OK PatternPropertiesDialog Pattern properties Właściwości układu rytmicznego %1#2 %1 PatternPropertiesDialog_UI Form1 Form1 &Cancel &Anuluj Alt+C Alt+C &OK &OK Alt+O Alt+O New Pattern Name Nazwa Nowego Układu Pattern category Pattern description PianoRollEditor Velocity Głośność Pan Panorama Lead and Lag PlayerControl Rewind Przewijanie wstecz Play/ Pause Odtwarzanie/ Pauza Stop Stop Fast Forward Przewijanie do przodu Loop song Zapętlanie utworu Pattern Mode Tryb odtwarzania układu rytmicznego Song Mode Tryb odtwarzania utworu Jack-transport on/off Włącz/wyłącz jack-transport Show mixer Pokazuje mikser Mixer Mikser Show Instrument Rack Pokazuje Panel Instrumentów Instrument rack Panel Instrumentów Playing. Odtwarzanie. Pause. Pauza. Stopped. Zatrzymany. Song mode selected. Wybrano tryb: cały utwór. Pattern mode selected. Wybrano tryb: układ rytmiczny. Jack-transport mode = On Tryb jack-transport = Włączony Jack-transport mode = Off Tryb jack-transport = Wyłączony JACK-transport will work only with JACK driver. JACK-transport działa tylko ze sterownikiem JACK. New BPM value Nowa wartość BPM Loop song = On Zapętlanie utworu = Włączone Loop song = Off Zapętlanie utworu = Wyłączone BeatCounter Panel on Set BPM / Set BPM and play Jack-Time-Master on/off BC Panel on BC Panel off Count BPM and start PLAY Count and set BPM Jack-Time-Master mode = On Jack-Time-Master mode = Off Record Destructive Record Record midi events = On Record midi events = Off Destructive mode = Off Destructive mode = On Recalculate Rubberband modified samples if bpm will change Recalculate all samples using Rubberband ON Recalculate all samples using Rubberband OFF Switch metronome on/off PlaylistDialog Song list Script exec Script Add Song to PlayList No Song selected! Load Playlist Hydrogen Playlist (*.h2playlist) Save Playlist No Song in List or no Song selected! Hydrogen Playlist (*.sh) Add Script to selected Song No Script in use! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Set your Default Editor No Script selected! Error loading song. Błąd podczas ładowania utworu. sort Hydrogen Scripts (*.sh) New Script Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. No Script! &Playlist Add song to Play&list Add &current song to Playlist &Remove selected song from Playlist &Open Playlist &Save Playlist Save Playlist &as &Scripts &Add Script to selected song &Edit selected Script &Remove selected Script &Create a new Script Rewind Przewijanie wstecz Play/ Pause/ Load selected song Stop Stop Fast Forward Przewijanie do przodu Please save your song first WARNING, the new file is executable by the owner of the file! Pause. Pauza. Playlist Browser No song selected! Playlist: set song no. %1 no Script &New Playlist PlaylistDialog_UI PlayList Browser Song list PreferencesDialog Preferences Ustawienia Slow Wolno Normal Normalnie Fast Szybko <b>Automatic driver selection</b> <b>Automatyczny wybór sterownika</b> <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Open Sound System</b><br>Prosty sterownik audio [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">Nie wkompilowany</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Sterownik Jack Audio Connection Kit</b><br>sterownik audio o niskim opóźnieniu <b>ALSA Driver</b><br> <b>Sterownik ALSA</b><br> <b>PortAudio Driver</b><br> <b>Sterownik PortAudio</b><br> <b>CoreAudio Driver</b><br> <b>Sterownik CoreAudio</b><br> Please restart hydrogen to enable/disable LASH support Driver restart required. Restart driver? &Ok &Ok &Cancel &Anuluj PreferencesDialog_UI Form1 Form1 &Cancel &Anuluj Alt+C Alt+C &OK &OK Alt+O Alt+O &General &Ogólne &Reopen last used song Otwó&rz ponownie ostatnio używany utwór Alt+R Alt+R Audio &System &System Audio ### ### Device Urządzenie Buffer size Rozmiar bufora Sample rate Częstotliwość próbkowania 44100 44100 48000 48000 88200 88200 96000 96000 Connect to &Default Output Pair Podłącz do &Domyślnej Pary Wyjściowej Alt+D Alt+D Polyphony Polifonia Metronome volume Głośność metronomu &Midi System System &Midi Ignore note-off Ignoruj komunikat "note-off" Channel Kanał All Wszystkie 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 Midi driver Sterownik midi Input Wejście &Appearance &Wygląd Application font Czcionka programu Select font Wybór czcionki Style Styl Slow Wolno Normal Normalnie Fast Szybko Meters falloff speed Szybkość zanikania wskazań miernika Mixer font Czcionka miksera <i>After a font change the application must be restarted.</i> <i>Po zmianie czcionki program musi zostać ponownie uruchomiony.</i> Restart output Audio output details Post-Fader Pre-Fader Track output Use lash first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm Beat counter drift compensation in 1/10 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup Beat counter start offset in ms create per-instrument outputs Path to the Rubberband command-line utility Maximum number of bars &Reopen last used playlist Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? &Ok &Ok &Cancel &Anuluj Close dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditor_UI Dialog Dialog P&lay original sample &Apply Changes &Close &Zamknij Adjust sample start frame Adjust sample loop begin frame set processing forward reverse pingpong loops Adjust sample end & loop end frame &Play new sample length: fade-out type volume panorama Sample length to beat: off 1/64 1/64 1/32 1/32 1/16 1/16 1/8 1/8 1/4 1/4 1/2 1/2 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 Pitch the sample in semitones, cents Crispness: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 0 Start Loop <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. Pitch (Semitone,Cent) SimpleHTMLBrowser Manual Instrukcja obsługi Welcome to Hydrogen Witamy w Hydrogen Don't show this message anymore Nie pokazuj więcej tego komunikatu Ok Ok Documentation index Indeks dokumentacji SongEditorPanel Song Editor Edytor utworu Clear pattern sequence Czyści sekwencję układów rytmicznych Create new pattern Tworzy nowy układ rytmiczny Move the selected pattern down Przesuwa wybrany układ rytmiczny w dół Move the selected pattern up Przesuwa wybrany układ rytmiczny w górę Select mode Tryb zaznaczania Draw mode Tryb rysowania Warning, this will erase your pattern sequence. Are you sure? Ostrzeżenie: ta operacja usunie całą twoją sekwencję układów rytmicznych. Kontynuować? &Ok &Ok &Cancel &Anuluj stacked mode stacked pattern mode single pattern mode not_categorized Enable time line edit Pattern %1 SongEditorPanelBpmWidget_UI Form Edit the bpm value for current beat 500,55 500,55 Edit beat in timeline 500 500 Bar BPM Delete this BPM Marker Delete BPM Marker Cancel Anuluj Ok Ok SongEditorPanelTagWidget_UI Form Tag Cancel Anuluj Ok Ok SongEditorPatternList Copy Kopiuj Delete Usuń Fill/Clear ... Wypełnij/Wyczyść ... Properties Właściwości Save Pattern Load Pattern Open Pattern Hydrogen Pattern (*.h2pattern) Virtual Pattern Pattern 1 not_categorized The pattern-file exists. Overwrite the existing pattern? &Ok &Ok &Cancel &Anuluj Export Pattern SongPropertiesDialog Song properties Właściwości utworu SongPropertiesDialog_UI Form1 Form1 Author Autor Notes Notatki Song name Nazwa utworu &OK &OK Alt+O Alt+O &Cancel &Anuluj Alt+C Alt+C License SoundLibraryExportDialog Export Sound Library Directory SoundLibraryExportDialog_UI Dialog Dialog Browse Przeglądaj Export Eksportuj SoundLibraryImportDialog Sound Library import Importuj bibliotekę dzwięków Sound library Biblioteka dźwięków Status Status Updating SoundLibrary list... Uaktualnianie listy Biblioteki Dźwięków... Installed Zainstalowane New Nowy Author: %1 Autor: %1 Downloading SoundLibrary... Ściąganie Biblioteki Dźwięków... Import drumkit Import zestawu perkusyjnego SoundLibrary imported in %1 Biblioteka Dźwięków zaimportowana w %1 An error occurred importing the SoundLibrary. Wystąpił błąd podczas importowania Biblioteki Dźwięków. Drumkits Songs Patterns Układy License: %1 SoundLibraryImportDialog_UI Dialog Dialog Internet Internet Update list Aktualizacja listy Sound Library Name Nazwa Biblioteki Dźwięków Sound library Info Informacje o Bibliotece Dźwięków Author... Autor... Download and install Ściągnij i zainstaluj Local file Plik lokalny Browse... Przeglądaj... Install Instalacja 1 1 License... Edit server list Close SoundLibraryPanel Load Ładuj Export Eksportuj Delete Usuń System drumkits Zestawy perkusyjne systemowe User drumkits Zestawy perkusyjne użytkownika &Ok &Ok &Cancel &Anuluj Songs Patterns Układy Error loading song. Błąd podczas ładowania utworu. Properties Właściwości Warning, the selected pattern will be deleted from disk. Are you sure? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Dialog Name Nazwa Author Autor Information Informacja License Save Cancel Anuluj Save changes made to instruments into sound library SoundLibraryRepositoryDialog Edit repository settings Edit server list URL SoundLibraryRepositoryDialog_UI Dialog Dialog Add Delete Usuń SoundLibrarySaveDialog Save Sound Library Zachowaj Bibliotekę Dźwięków Please supply at least a valid name Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Dialog Name Nazwa Author Autor Information Informacja Cancel Anuluj License Save SoundLibraryTree Sound library Biblioteka dźwięków VirtualPatternDialog Select virtual pattern VirtualPatternDialog_UI Dialog Dialog OK OK Cancel Anuluj hydrogen-0.9.6-beta3/data/i18n/hydrogen.pt_BR.qm000066400000000000000000000615611211146647700212360ustar00rootroot000000000000007M(WGmH6{H69H636H64H6DH6S H6DH6H6H6pH64H6EH6S[JPWGT&T8{UjTZ%KZG)8Z#rm?W/uU9\""e2{?O5N5 rr$k}' $'. . J"^RydM>6|[F:*6 6K{=xq^+I-|.87,1SYZ%+EuN\*)kvG9I<<?ACb bSbXybYI+:UTN"@7III3nIPzIPIXIYIZ]n #nTe_ɷ,Q,V,YPϕGv vTvW؃|ޱe oUoO|lsb.Lxv &&5m8[|LV|AV|IW^Ma/h~9h~<k2>Tpr`zw<D:jD<ȿ@!)12 '''7D6U*!'_p2~>#L;W֣R-֣X1=>q!JVT0 rH En=#P C4#L4=V^0a.fs^Ec_%2KC _o,o&-( @{.G.l4$H %Mlc333V3W¸q3\t${E? S +s' n 3b @e Cn{ S%]( w: = ~5t ~@|.<&KXd EH7.aaN!U)st`N4&)+e&m$"dUriZ6<b>Pina do projeto</b><br>Project page
     AboutDialog SobreAbout AboutDialog&Autores&AuthorsAboutDialog_UI&Licen&LicenseAboutDialog_UI&OK&OKAboutDialog_UI S&obreA&boutAboutDialog_UISobre HydrogenAbout HydrogenAboutDialog_UI Alt+OAlt+OAboutDialog_UIDInformaes sobre Mecanismo de dioAudio Engine InfoAudioEngineInfoForm6Estado do Mecanismo de dioAudio engine stateAudioEngineInfoForm_UI"Tamanho do buffer Buffer sizeAudioEngineInfoForm_UIConectado a  Connected toAudioEngineInfoForm_UIQuadrosFramesAudioEngineInfoForm_UI PadrsPatternsAudioEngineInfoForm_UI$Reproduzindo notas Playing notesAudioEngineInfoForm_UI,Tempo de processamento Process timeAudioEngineInfoForm_UI$Taxa de amostragem Sample rateAudioEngineInfoForm_UI.Instrumento selecionadoSelected instrumentAudioEngineInfoForm_UI"Padr selecionadoSelected patternAudioEngineInfoForm_UIPosio na msica Song positionAudioEngineInfoForm_UIEstado da msica Song stateAudioEngineInfoForm_UIMarcaesTicksAudioEngineInfoForm_UICancelarCancelAudioFileBrowser_UI6### Autor do kit de beteria### Drumkit authorDrumkitManager_UIF### Informaes sobre kit de bateria### Drumkit infoDrumkitManager_UI4### Nome do kit de bateria### Drumkit nameDrumkitManager_UID### O kit de bateria serinstalado4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b> Obtenha mais kits em <br> http://www.hydrogen-music.org </b> E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UI AutorAuthorDrumkitManager_UIProcurarBrowseDrumkitManager_UI,Remover kit de bateriaDelete drumkitDrumkitManager_UI4Diretio do kit de bateriaDrumkit directoryDrumkitManager_UI,Nome do arquivo do kitDrumkit filenameDrumkitManager_UI,Nome do kit de bateria Drumkit nameDrumkitManager_UIExportarExportDrumkitManager_UIImportarImportDrumkitManager_UIInformaoInfoDrumkitManager_UICarregarLoadDrumkitManager_UI.Carregar kit de bateria Load drumkitDrumkitManager_UI SalvarSaveDrumkitManager_UIExportar msica Export songExportSongDialog&Procurar &Browse...ExportSongDialog_UI&Fechar&CloseExportSongDialog_UI&Exportar&ExportExportSongDialog_UI Alt+CAlt+CExportSongDialog_UI Alt+HAlt+EExportSongDialog_UIRExportar msica inteira para o formato WAVExport Whole Song to WAVExportSongDialog_UI2Nome do arquivo exportadoExport filenameExportSongDialog_UIFX lig/des FX on/off FxMixerLineSaa master Master output FxMixerLine&Cancelar&Cancel$H2Core::SoundLibraryPropertiesDialog<Kit de Bateria carregado: [%1]Drumkit loaded: [%1] HydrogenApp MixerMixer HydrogenAppEditor de msica Song Editor HydrogenApp AtaqueAttackInstrumentEditorDecaimentoDecayInstrumentEditorFiltro Cutoff Filter CutoffInstrumentEditor(Filtro de ressonciaFilter resonanceInstrumentEditor GeralGeneralInstrumentEditor(Ganho do instrumentoInstrument gainInstrumentEditorGanho na camada Layer gainInstrumentEditor8Novo nome para o instrumentoNew instrument nameInstrumentEditor.Fator aleatio de pitchRandom pitch factorInstrumentEditorLiberaoReleaseInstrumentEditorDExibir propriedades do instrumentoShow instrument propertiesInstrumentEditor>Exibir propriedades das camadasShow layers propertiesInstrumentEditorSustentaoSustainInstrumentEditorLimpar notas Clear notesInstrumentLine*Randomizar velocidadeRandomize velocityInstrumentLineSoloSoloInstrumentLine&Editar paretros FXEdit FX parametersLadspaFXMixerLine"Efeito de retorno Effect returnLadspaFXMixerLine AtivarActivateLadspaFXPropertiesDesativar DeactivateLadspaFXProperties2Propriedades LADSPA FX %1LADSPA FX %1 PropertiesLadspaFXPropertiesSem plugin No pluginLadspaFXPropertiesSelecionar FX Select FXLadspaFXProperties6[%1] Propriedades LADSPA FX[%1] LADSPA FX PropertiesLadspaFXProperties GruposGroupsLadspaFXSelectorN suportado Not supportedLadspaFXSelector(Selecionar LADSPA FXSelect LADSPA FXLadspaFXSelector EsteoStereoLadspaFXSelector&### produtor FX 1 2### FX maker 1 2LadspaFXSelector_UI$### direitos 1 2 3### copyright 1 2 3LadspaFXSelector_UI### selo fx ### fx labelLadspaFXSelector_UI### tipo fx ### fx typeLadspaFXSelector_UI&Cancelar&CancelLadspaFXSelector_UI&OK&OKLadspaFXSelector_UI Alt+CAlt+CLadspaFXSelector_UI Alt+OAlt+OLadspaFXSelector_UIMainForm &Sobre&AboutMainForm&Cancelar&CancelMainForm&Descartar&DiscardMainForm&Exportar msica &Export songMainForm &Novo&NewMainForm &Abrir&OpenMainForm&Prefercias &PreferencesMainForm &Sair&QuitMainForm&Salvar&SaveMainForm"&Manual do usuio &User manualMainFormCancelarCancelMainForm De&bugDe&bugMainForm,Erro carregando msica.Error loading song.MainForm<Erro ao iniciar driver de dioError starting audio driverMainForm6Exportar para arquivo &MIDIExport &MIDI fileMainForm.Exportar aquivo de MIDIExport MIDI fileMainForm Hydrogen Pronto.Hydrogen Ready.MainForm2Msica Hydrogen (*.h2song)Hydrogen Song (*.h2song)MainFormTDriver Jack: n foi possvel ativar cliente#Jack driver: cannot activate clientMainFormZDriver Jack: n foi possvel conectar na porta'Jack driver: cannot connect output portMainFormLDriver Jack: Erro no registro da porta#Jack driver: error in port registerMainForm@Driver Jack: servidor finalizadoJack driver: server shutdownMainForm(Arquivo Midi (*.mid)Midi file (*.mid)MainFormOkOkMainFormAbrir &Demo Open &DemoMainFormAbrir &recente Open &recentMainFormAbrir msica Open songMainForm Imprimir Objetos Print ObjectsMainFormSalvar msica Save songMainFormNExibir informaes do &mecanismo de dioShow &audio engine infoMainForm6Driver de dio desconhecidoUnknown audio driverMainForm$Temporizao humana Humanize timeMasterMixerLine"Velocidade humanaHumanize velocityMasterMixerLineZAjustar o parmetro de temporizao humana [%1] Set humanize time parameter [%1]MasterMixerLineXAjustar o parmetro de velocidade humana [%1]$Set humanize velocity parameter [%1]MasterMixerLine4Ajustar volume mestre [%1]Set master volume [%1]MasterMixerLine:Ajustar o fator de swing [%1]Set swing factor [%1]MasterMixerLine SwingSwingMasterMixerLine$Ajustar nel FX %1Set FX %1 level Mixer0Ajustar LADSPA FX ( %1 )Set LADSPA FX ( %1 ) volumeMixer Exibir Painel FX Show FX panelMixer:Exibir picos dos instrumentosShow instrument peaksMixerFExibir picos dos instrumentos = DesShow instrument peaks = OffMixerFExibir picos dos instrumentos = LigShow instrument peaks = OnMixer\Nome do instrumento (clique duplo para editar)&Instrument name (double click to edit) MixerLineMudoMute MixerLine Executar exemplo Play sample MixerLineDAjustar volume do instrumento [%1]Set instrument volume [%1] MixerLineSoloSolo MixerLine"Ouvir novas notasHear new notesPatternEditorPanel.Ouvir novas notas = DesHear new notes = OffPatternEditorPanel.Ouvir novas notas = LigHear new notes = OnPatternEditorPanelrN possel mudar o tamanho do padr que estiver tocando8Is not possible to change the pattern size when playing.PatternEditorPanel*Editor de padres - %1Pattern editor - %1PatternEditorPanelZQuantizar eventos de entrada do teclado = Lig,Quantize incoming keyboard/midi events = OffPatternEditorPanelZQuantizar eventos de entrada do teclado = Lig+Quantize incoming keyboard/midi events = OnPatternEditorPanelXQuantizar eventos do teclado/midi para grade%Quantize keyboard/midi events to gridPatternEditorPanel8Selecionar resoluo da gradeSelect grid resolutionPatternEditorPanel6Selecionar tamanho do padrSelect pattern sizePatternEditorPanelZoom inZoom inPatternEditorPanelZoom outZoom outPatternEditorPanel Alt+CAlt+CPatternFillDialog_UICancelarCancelPatternFillDialog_UI*Propriedades do padrPattern propertiesPatternPropertiesDialog&Cancelar&CancelPatternPropertiesDialog_UI&OK&OKPatternPropertiesDialog_UI Alt+CAlt+CPatternPropertiesDialog_UI Alt+OAlt+OPatternPropertiesDialog_UI$Nome do novo padrNew Pattern NamePatternPropertiesDialog_UIAvan rido Fast Forward PlayerControlzTransporte-JACK somente irfuncionar com o controlador JACK./JACK-transport will work only with JACK driver. PlayerControl2Modo Jack-transport = DesJack-transport mode = Off PlayerControl2Modo Jack-transport = LigJack-transport mode = On PlayerControl,Jack-transport lig/desJack-transport on/off PlayerControlLoop Loop song PlayerControlLoop = OffLoop song = Off PlayerControlLoop = LigLoop song = On PlayerControl MixerMixer PlayerControl"Novo valor de BPM New BPM value PlayerControlModo padrs Pattern Mode PlayerControl0Modo padrs selecionado.Pattern mode selected. PlayerControlPausar.Pause. PlayerControlExecutar/Pausar Play/ Pause PlayerControlExecutando.Playing. PlayerControl VoltarRewind PlayerControlExibir mixador Show mixer PlayerControlModo msica Song Mode PlayerControl.Modo msica selecionado.Song mode selected. PlayerControl PararStop PlayerControlParado.Stopped. PlayerControl,Erro carregando msica.Error loading song.PlaylistDialogAvan rido Fast ForwardPlaylistDialogPausar.Pause.PlaylistDialog VoltarRewindPlaylistDialog PararStopPlaylistDialog&Cancelar&CancelPreferencesDialog Controlador ALSAALSA Driver
    PreferencesDialog>Seleo automica de controlador!Automatic driver selectionPreferencesDialog<b>Driver kit de conex com Jack Audio</b><br>Driver de dio de baixa latciaCJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialog<b>Abrir Sistema de Som</b><br>Driver de dio simples [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog*Controlador PortAudioPortAudio Driver
    PreferencesDialog`<br><b><font color="red">N compilado</font></b>0
    Not compiledPreferencesDialog RidoFastPreferencesDialog NormalNormalPreferencesDialogPrefercias PreferencesPreferencesDialog LentoSlowPreferencesDialog&Aparcia &AppearancePreferencesDialog_UI&Cancelar&CancelPreferencesDialog_UI &Geral&GeneralPreferencesDialog_UISistema midi &Midi SystemPreferencesDialog_UI&OK&OKPreferencesDialog_UIx<i>Ap modificar a fonte a aplicao deve ser reiniciada.</i>=After a font change the application must be restarted.PreferencesDialog_UI TodosAllPreferencesDialog_UI Alt+CAlt+CPreferencesDialog_UI Alt+PAlt+DPreferencesDialog_UI Alt+OAlt+OPreferencesDialog_UI"Fonta da aplicaoApplication fontPreferencesDialog_UI &Sistema de dio Audio &SystemPreferencesDialog_UI"Tamanho do buffer Buffer sizePreferencesDialog_UI CanalChannelPreferencesDialog_UI<Conectar ao par de saa &padrConnect to &Default Output PairPreferencesDialog_UIDispositivoDevicePreferencesDialog_UI RpidoFastPreferencesDialog_UI,Ignorar nota desligadaIgnore note-offPreferencesDialog_UIEntradaInputPreferencesDialog_UI@Medidores de velocidade de quedaMeters falloff speedPreferencesDialog_UI$Volume do metromoMetronome volumePreferencesDialog_UI&Controlador de Midi Midi driverPreferencesDialog_UIFonte do Mixer Mixer fontPreferencesDialog_UI NormalNormalPreferencesDialog_UIPolifonia PolyphonyPreferencesDialog_UI$Taxa de amostragem Sample ratePreferencesDialog_UI"Selecionar fontes Select fontPreferencesDialog_UI LentoSlowPreferencesDialog_UI EstiloStylePreferencesDialog_UI&Cancelar&Cancel SampleEditor&Fechar&CloseSampleEditor_UI(dice de documentaoDocumentation indexSimpleHTMLBrowser ManualManualSimpleHTMLBrowserOkOkSimpleHTMLBrowser*Bem vindo ao HydrogenWelcome to HydrogenSimpleHTMLBrowser&Cancelar&CancelSongEditorPanel2Limpar sequcia de padrsClear pattern sequenceSongEditorPanel Criar novo padrCreate new patternSongEditorPanelModo desenho Draw modeSongEditorPanelHMover o padr selecionado para baixoMove the selected pattern downSongEditorPanelFMover o padr selecionado para cimaMove the selected pattern upSongEditorPanelSelecionar modo Select modeSongEditorPanelEditor de msica Song EditorSongEditorPanelPAteno, a sequcia de padrs serapagada=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanelCancelarCancelSongEditorPanelBpmWidget_UIOkOkSongEditorPanelBpmWidget_UICancelarCancelSongEditorPanelTagWidget_UIOkOkSongEditorPanelTagWidget_UI&Cancelar&CancelSongEditorPatternList CopiarCopySongEditorPatternListRemoverDeleteSongEditorPatternListPropriedades PropertiesSongEditorPatternList*Propriedades da msicaSong propertiesSongPropertiesDialog&Cancelar&CancelSongPropertiesDialog_UI Alt+CAlt+CSongPropertiesDialog_UI Alt+OAlt+OSongPropertiesDialog_UI AutorAuthorSongPropertiesDialog_UILincenLicenseSongPropertiesDialog_UI NotasNotesSongPropertiesDialog_UINome da msica Song nameSongPropertiesDialog_UIProcurarBrowseSoundLibraryExportDialog_UIExportarExportSoundLibraryExportDialog_UIAutor: %1 Author: %1SoundLibraryImportDialog.Importar Kit de BateriaImport drumkitSoundLibraryImportDialogNovoNewSoundLibraryImportDialog PadrsPatternsSoundLibraryImportDialogProcurar... Browse...SoundLibraryImportDialog_UI&Cancelar&CancelSoundLibraryPanelRemoverDeleteSoundLibraryPanel,Erro carregando msica.Error loading song.SoundLibraryPanelExportarExportSoundLibraryPanelCarregarLoadSoundLibraryPanel PadrsPatternsSoundLibraryPanelPropriedades PropertiesSoundLibraryPanel AutorAuthorSoundLibraryPropertiesDialog_UICancelarCancelSoundLibraryPropertiesDialog_UILincenLicenseSoundLibraryPropertiesDialog_UIRemoverDeleteSoundLibraryRepositoryDialog_UI AutorAuthorSoundLibrarySaveDialog_UICancelarCancelSoundLibrarySaveDialog_UILincenLicenseSoundLibrarySaveDialog_UICancelarCancelVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.pt_BR.ts000066400000000000000000006464001211146647700212500ustar00rootroot00000000000000 AboutDialog About Sobre <b>Project page</b><br> <b>P�ina do projeto</b><br> <b>Website</b><br> <b>Mailing lists</b><br> <b>Main coder and mantainer:</b><br> AboutDialog_UI About Hydrogen Sobre Hydrogen A&bout S&obre &Authors &Autores &License &Licen� &OK &OK Alt+O Alt+O ### <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info Informa�es sobre Mecanismo de �dio AudioEngineInfoForm_UI Sample rate Taxa de amostragem Buffer size Tamanho do buffer Audio engine state Estado do Mecanismo de �dio Playing notes Reproduzindo notas Process time Tempo de processamento Song position Posi�o na msica Patterns Padr�s Song state Estado da msica Frames Quadros Ticks Marca�es Selected pattern Padr� selecionado Selected instrument Instrumento selecionado Connected to Conectado a Form1 ### Sampler Synth Sequencer MIDI input Name Audio output Realtime frames AudioFileBrowser Audio File Browser Size: %1 bytes Samplerate: %1 s Name: Size: Samplerate: Sample length: Please do not preview samples which are longer than 10 minutes! Sample length: AudioFileBrowser_UI Dialog Open Name: Samplerate: Size: Length: Cancel Cancelar Pla&y samples by clicking &Up &Home &Play Sample &Filename to instrument name &Stop View hidden folders Be careful, this change all Layer velocity settings Set automatic velocity Director Director Director_UI Dialog DownloadWidget (%1/%2 KiB) - ETA %3 DrumkitManager_UI Load Carregar Load drumkit Carregar kit de bateria Delete drumkit Remover kit de bateria ### Drumkit info ### Informa�es sobre kit de bateria ### Drumkit author ### Autor do kit de beteria ### Drumkit name ### Nome do kit de bateria Save Salvar Author Autor Info Informa�o Drumkit name Nome do kit de bateria Import Importar Browse Procurar Drumkit filename Nome do arquivo do kit ### The drumkit will be installed zncxbmzbxcmznxbcmz ### O kit de bateria ser�instalado Export Exportar Drumkit directory Diret�io do kit de bateria <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b> Obtenha mais kits em <br> http://www.hydrogen-music.org </b> Form1 ExportSongDialog Export song Exportar msica The file %1 exists. Overwrite the existing file? Export to a single track Export to seperate tracks Both ExportSongDialog_UI Export filename Nome do arquivo exportado Export Whole Song to WAV Exportar msica inteira para o formato WAV &Export &Exportar &Browse... &Procurar &Close &Fechar Alt+C Alt+C Alt+E Alt+H Alt+B Samplerate in Hz: 22050 44100 48000 96000 192000 SampleDepth in Bit: 8 16 24 32 Templates: WAV in CD quality "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off FX lig/des Master output Sa�a master H2Core::SongEditorPanelBpmWidget BPM H2Core::SongEditorPanelTagWidget Tag H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties &Ok &Cancel &Cancelar This is not possible, you can only save changes inside instruments to the current loaded sound library Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] Kit de Bateria carregado: [%1] Song Editor Editor de msica Instrument + Pattern Mixer Mixer InstrumentEditor Show instrument properties Exibir propriedades do instrumento Show layers properties Exibir propriedades das camadas Random pitch factor Fator aleat�io de pitch Filter Cutoff Filtro Cutoff Filter resonance Filtro de resson�cia Attack Ataque Decay Decaimento Sustain Sustenta�o Release Libera�o Layer gain Ganho na camada New instrument name Novo nome para o instrumento Instrument gain Ganho do instrumento Layer pitch (Coarse) Layer pitch (Fine) General Geral Layers Stop the current playing instrument-note before trigger the next note sample. Auto-Stop-Note InstrumentLine Clear notes Limpar notas Randomize velocity Randomizar velocidade Delete instrument Fill notes ... Fill all notes Fill 1/2 notes Fill 1/3 notes Fill 1/4 notes Fill 1/6 notes Fill 1/8 notes Mute instrument Solo Solo InstrumentRack Show Instrument editor Instrument Show sound library Sound library LadspaFXMixerLine Edit FX parameters Editar par�etros FX Effect return Efeito de retorno FX bypass Ladspa FX name LadspaFXProperties Select FX Selecionar FX Activate Ativar [%1] LADSPA FX Properties [%1] Propriedades LADSPA FX Deactivate Desativar LADSPA FX %1 Properties Propriedades LADSPA FX %1 No plugin Sem plugin Remove FX LadspaFXSelector Select LADSPA FX Selecionar LADSPA FX Groups Grupos Stereo Est�eo Not supported N� suportado Mono Recently Used Alphabetic List Categorized LadspaFXSelector_UI ### fx label ### selo fx ### fx type ### tipo fx &Cancel &Cancelar &OK &OK Form1 Alt+C Alt+C Alt+O Alt+O ### fx ID 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> ### fx name 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> ### FX maker 1 2 ### produtor FX 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 ### direitos 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm Error loading song. Erro carregando msica. Hydrogen Ready. Hydrogen Pronto. Export MIDI file Exportar aquivo de MIDI Print Objects Imprimir Objetos &Save &Salvar &Discard &Descartar Cancel Cancelar Hydrogen Song (*.h2song) Msica Hydrogen (*.h2song) Save song Salvar msica Open song Abrir msica Midi file (*.mid) Arquivo Midi (*.mid) &New &Novo &Open &Abrir Open &Demo Abrir &Demo Open &recent Abrir &recente Export &MIDI file Exportar para arquivo &MIDI &Preferences &Prefer�cias &Quit &Sair Show &audio engine info Exibir informa�es do &mecanismo de �dio &User manual &Manual do usu�io &About &Sobre &Cancel &Cancelar Unknown audio driver Driver de �dio desconhecido Error starting audio driver Erro ao iniciar driver de �dio Jack driver: server shutdown Driver Jack: servidor finalizado Jack driver: cannot activate client Driver Jack: n� foi possvel ativar cliente Jack driver: cannot connect output port Driver Jack: n� foi possvel conectar na porta Jack driver: error in port register Driver Jack: Erro no registro da porta &Export song &Exportar msica De&bug De&bug &Project Save &as... &Tools &Mixer &Instrument Rack &Info Song saved. Unknown error %1 Clear all instruments? Ok Ok You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Could not save song. Open &Pattern Hydrogen Pattern (*.h2pattern) Save Pattern as ... Pattern saved. Open Pattern Don't show this message anymore Playlist: Set song No. %1 Show &info Expor&t pattern as... I&nstruments &Add instrument &Clear all &Save library &Export library Playlist &editor &Import library Info|About Song saved as. Playlist: Song No. %1 Could not export pattern. The document contains unsaved changes. Do you want to save the changes? Director Undo history &Undo menu Undo Redo Input mode Instrument Drumkit Report bug MasterMixerLine Set master volume [%1] Ajustar volume mestre [%1] Swing Swing Humanize time Temporiza�o humana Humanize velocity Velocidade humana Set humanize time parameter [%1] Ajustar o parmetro de temporiza�o humana [%1] Set humanize velocity parameter [%1] Ajustar o parmetro de velocidade humana [%1] Set swing factor [%1] Ajustar o fator de swing [%1] MidiTable Event Param. Action press button to record midi event Mixer Show FX panel Exibir Painel FX Show instrument peaks Exibir picos dos instrumentos Set FX %1 level Ajustar n�el FX %1 Show instrument peaks = On Exibir picos dos instrumentos = Lig Show instrument peaks = Off Exibir picos dos instrumentos = Des Set LADSPA FX ( %1 ) volume Ajustar LADSPA FX ( %1 ) MixerLine Play sample Executar exemplo Mute Mudo Solo Solo Instrument name (double click to edit) Nome do instrumento (clique duplo para editar) Set instrument volume [%1] Ajustar volume do instrumento [%1] Pan Set instr. pan [%1] PatternEditorPanel Hear new notes Ouvir novas notas Quantize keyboard/midi events to grid Quantizar eventos do teclado/midi para grade Pattern editor - %1 Editor de padres - %1 Hear new notes = On Ouvir novas notas = Lig Hear new notes = Off Ouvir novas notas = Des Quantize incoming keyboard/midi events = On Quantizar eventos de entrada do teclado = Lig Quantize incoming keyboard/midi events = Off Quantizar eventos de entrada do teclado = Lig Zoom in Zoom in Zoom out Zoom out Is not possible to change the pattern size when playing. N� �poss�el mudar o tamanho do padr� que estiver tocando Select pattern size Selecionar tamanho do padr� Select grid resolution Selecionar resolu�o da grade No pattern selected Select note properties Velocity Pan Cutoff Resonance Lead and Lag Loaded Soundlibrary NoteKey destructive mode pre delete settings destructive mode post delete settings Show piano roll editor Show drum editor PatternFillDialog Fill with selected pattern PatternFillDialog_UI Cancel Cancelar Form 1 &Fill Alt+F &Clear Alt+C Alt+C From: To: OK PatternPropertiesDialog Pattern properties Propriedades do padr� %1#2 %1 PatternPropertiesDialog_UI &Cancel &Cancelar Alt+C Alt+C &OK &OK Alt+O Alt+O New Pattern Name Nome do novo padr� Form1 Pattern category Pattern description PianoRollEditor Velocity Pan Lead and Lag PlayerControl Stop Parar Song Mode Modo msica Pattern Mode Modo padr�s Jack-transport on/off Jack-transport lig/des Playing. Executando. Stopped. Parado. Song mode selected. Modo msica selecionado. Pattern mode selected. Modo padr�s selecionado. Jack-transport mode = On Modo Jack-transport = Lig Jack-transport mode = Off Modo Jack-transport = Des New BPM value Novo valor de BPM Rewind Voltar Play/ Pause Executar/Pausar Fast Forward Avan� r�ido Pause. Pausar. JACK-transport will work only with JACK driver. Transporte-JACK somente ir�funcionar com o controlador JACK. Loop song Loop Loop song = On Loop = Lig Loop song = Off Loop = Off Show mixer Exibir mixador Mixer Mixer Show Instrument Rack Instrument rack BeatCounter Panel on Set BPM / Set BPM and play Jack-Time-Master on/off BC Panel on BC Panel off Count BPM and start PLAY Count and set BPM Jack-Time-Master mode = On Jack-Time-Master mode = Off Record Destructive Record Record midi events = On Record midi events = Off Destructive mode = Off Destructive mode = On Recalculate Rubberband modified samples if bpm will change Recalculate all samples using Rubberband ON Recalculate all samples using Rubberband OFF Switch metronome on/off PlaylistDialog Song list Script exec Script Add Song to PlayList No Song selected! Load Playlist Hydrogen Playlist (*.h2playlist) Save Playlist No Song in List or no Song selected! Hydrogen Playlist (*.sh) Add Script to selected Song No Script in use! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Set your Default Editor No Script selected! Error loading song. Erro carregando msica. sort Hydrogen Scripts (*.sh) New Script Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. No Script! &Playlist Add song to Play&list Add &current song to Playlist &Remove selected song from Playlist &Open Playlist &Save Playlist Save Playlist &as &Scripts &Add Script to selected song &Edit selected Script &Remove selected Script &Create a new Script Rewind Voltar Play/ Pause/ Load selected song Stop Parar Fast Forward Avan� r�ido Please save your song first WARNING, the new file is executable by the owner of the file! Pause. Pausar. Playlist Browser No song selected! Playlist: set song no. %1 no Script &New Playlist PlaylistDialog_UI PlayList Browser Song list PreferencesDialog Preferences Prefer�cias Slow Lento Normal Normal Fast R�ido <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Abrir Sistema de Som</b><br>Driver de �dio simples [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">N� compilado</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Driver kit de conex� com Jack Audio</b><br>Driver de �dio de baixa lat�cia <b>ALSA Driver</b><br> Controlador ALSA <b>Automatic driver selection</b> Sele�o autom�ica de controlador <b>PortAudio Driver</b><br> Controlador PortAudio <b>CoreAudio Driver</b><br> Please restart hydrogen to enable/disable LASH support Driver restart required. Restart driver? &Ok &Cancel &Cancelar PreferencesDialog_UI Polyphony Polifonia Device Dispositivo Buffer size Tamanho do buffer Sample rate Taxa de amostragem Input Entrada Channel Canal All Todos Application font Fonta da aplica�o Style Estilo Select font Selecionar fontes Slow Lento Normal Normal Fast Rpido Mixer font Fonte do Mixer Meters falloff speed Medidores de velocidade de queda <i>After a font change the application must be restarted.</i> <i>Ap� modificar a fonte a aplica�o deve ser reiniciada.</i> &Cancel &Cancelar &General &Geral Audio &System &Sistema de �dio Metronome volume Volume do metr�omo Connect to &Default Output Pair Conectar ao par de sa�a &padr� Alt+D Alt+P &Midi System Sistema midi Midi driver Controlador de Midi Ignore note-off Ignorar nota desligada &Appearance &Apar�cia Form1 Alt+C Alt+C &OK &OK Alt+O Alt+O &Reopen last used song Alt+R ### 44100 48000 88200 96000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Restart output Audio output details Post-Fader Pre-Fader Track output Use lash first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm Beat counter drift compensation in 1/10 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup Beat counter start offset in ms create per-instrument outputs Path to the Rubberband command-line utility Maximum number of bars &Reopen last used playlist Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? &Ok &Cancel &Cancelar Close dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditor_UI Dialog P&lay original sample &Apply Changes &Close &Fechar Adjust sample start frame Adjust sample loop begin frame set processing forward reverse pingpong loops Adjust sample end & loop end frame &Play new sample length: fade-out type volume panorama Sample length to beat: off 1/64 1/32 1/16 1/8 1/4 1/2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Pitch the sample in semitones, cents Crispness: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 Start Loop <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. Pitch (Semitone,Cent) SimpleHTMLBrowser Manual Manual Welcome to Hydrogen Bem vindo ao Hydrogen Ok Ok Documentation index �dice de documenta�o Don't show this message anymore SongEditorPanel Song Editor Editor de msica Create new pattern Criar novo padr� Move the selected pattern down Mover o padr� selecionado para baixo Move the selected pattern up Mover o padr� selecionado para cima Clear pattern sequence Limpar sequ�cia de padr�s Select mode Selecionar modo Draw mode Modo desenho Warning, this will erase your pattern sequence. Are you sure? Aten�o, a sequ�cia de padr�s ser�apagada &Cancel &Cancelar &Ok stacked mode stacked pattern mode single pattern mode not_categorized Enable time line edit Pattern %1 SongEditorPanelBpmWidget_UI Form Edit the bpm value for current beat 500,55 Edit beat in timeline 500 Bar BPM Delete this BPM Marker Delete BPM Marker Cancel Cancelar Ok Ok SongEditorPanelTagWidget_UI Form Tag Cancel Cancelar Ok Ok SongEditorPatternList Copy Copiar Delete Remover Properties Propriedades Fill/Clear ... Save Pattern Load Pattern Open Pattern Hydrogen Pattern (*.h2pattern) Virtual Pattern Pattern 1 not_categorized The pattern-file exists. Overwrite the existing pattern? &Ok &Cancel &Cancelar Export Pattern SongPropertiesDialog Song properties Propriedades da msica SongPropertiesDialog_UI Song name Nome da msica Author Autor Notes Notas &Cancel &Cancelar Form1 &OK Alt+O Alt+O Alt+C Alt+C License Lincen� SoundLibraryExportDialog Export Sound Library Directory SoundLibraryExportDialog_UI Dialog Browse Procurar Export Exportar SoundLibraryImportDialog Sound Library import Sound library Status Updating SoundLibrary list... Installed New Novo Author: %1 Autor: %1 Downloading SoundLibrary... Import drumkit Importar Kit de Bateria SoundLibrary imported in %1 An error occurred importing the SoundLibrary. Drumkits Songs Patterns Padr�s License: %1 SoundLibraryImportDialog_UI Dialog Internet Update list Sound Library Name Sound library Info Author... Download and install Local file Browse... Procurar... Install 1 License... Edit server list Close SoundLibraryPanel Load Carregar Export Exportar Delete Remover System drumkits User drumkits &Ok &Cancel &Cancelar Songs Patterns Padr�s Error loading song. Erro carregando msica. Properties Propriedades Warning, the selected pattern will be deleted from disk. Are you sure? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Name Author Autor Information License Lincen� Save Cancel Cancelar Save changes made to instruments into sound library SoundLibraryRepositoryDialog Edit repository settings Edit server list URL SoundLibraryRepositoryDialog_UI Dialog Add Delete Remover SoundLibrarySaveDialog Save Sound Library Please supply at least a valid name Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Name Author Autor Information Cancel Cancelar License Lincen� Save SoundLibraryTree Sound library VirtualPatternDialog Select virtual pattern VirtualPatternDialog_UI Dialog OK Cancel Cancelar hydrogen-0.9.6-beta3/data/i18n/hydrogen.ru.qm000066400000000000000000002214351211146647700206540ustar00rootroot00000000000000+Aw. . gQ^9b)dM>eȹ7y4|[F" 0V~xgF+66jC=x<8f3l+%m5>q^#;.Rf %kb5)+iDOLS03mD2mDu\/'-[vlvql_7d7]9GȵXQ@%ߥ(9<?AC4B2֨ITn[R35:bP)]l,x;qA%Bz^/Vbbvbb I3 'Ui"IIlIIIZII I ?nnEe/AAYɷn , , , ϕ<WW WޣWWW=W LW W ٯvQvvˈ֏1؃ޱeKo/o-7Dls=.v!$f*{ (1 518[|D@fSXJf~3HV|$V|tW^[R35a d(eN7hFh~gh~9k2m?pr`<v z?:|VdzT<lBDADtvȿ?g7f;Aeo-1\yr({$B) "c+\) ''DU*q[R35_p g4~>#2h5i^#: U&oGR#s֣֣=>/[!⪁*Je2Frl6`b En! bɋ!o=#P 4t4=.tV^a.f)h3s;Ec?_y k&J:X8*>xo¯z=o&<5*H-ݿmp-B(a3do3d@{kG.l@6VQ}[R36$9$ t%aOlc0>3u3$3B >?¸23P\tv  S9Z $T4 ){y +s'G 3b1 @e{ Cn# S%]= Xfa aOk h> h> [ w-X w  r; } ~g ~E  V1 I 4< = $ 3V ~ Tt Cƈ a S  #~_~ +Z$F 2 ʧ4J j1 v b7  aD ~zA ɺ eP gDJ $hL >H 1< ̎A $ %+^$ >T TY gn kJD x@#= zm h ?7 ?r  /G C DT ;$ s'i 'v = =& 5 "U:V &[ 5y 5y) @9 B  C# C0 FPJ \p `nn ju" wy4 |vd ~Y Į wO / F a{u 9 r[ $ 4{ => =/ Gh$ i yEr { @ 4)h R'Q <0. y ͫ ͼ7Y ӽ^ q) 3+Nq"=D$Rp=jG[36^jb jemz mew>i|&fXdpBExǗ.mG 8  &MJ"w.0=Щ+HL"gaN!st`&%4~i+e}tkޔki$0dtdi 6<b>!?8A:8 @0AAK;:8:</b><br>Mailing lists
     AboutDialogr<b>B25BAB25==K9 70 2K?CA:, >A=>2=>9 @07@01>BG8::</b><br>$Main coder and mantainer:
     AboutDialog6<b>!B@0=8F0 ?@>5:B0</b><br>Project page
     AboutDialog&<b>51-A09B</b><br>Website
     AboutDialog ?@>3@0<<5About AboutDialog######AboutDialog_UI&2B>@K&AuthorsAboutDialog_UI&8F5=78O&LicenseAboutDialog_UI&OK&OKAboutDialog_UI&@>3@0<<0A&boutAboutDialog_UI HydrogenAbout HydrogenAboutDialog_UI Alt+OAlt+OAboutDialog_UI2C:>2>9 4286>:Audio Engine InfoAudioEngineInfoForm######AudioEngineInfoForm_UI !>AB>O=85 4286:0Audio engine stateAudioEngineInfoForm_UIKE>4 72C:0 Audio outputAudioEngineInfoForm_UI 07<5@ 1CD5@0 Buffer sizeAudioEngineInfoForm_UI!>548=Q= A Connected toAudioEngineInfoForm_UI Form1Form1AudioEngineInfoForm_UIK1>@>:FramesAudioEngineInfoForm_UIE>4 MIDI MIDI inputAudioEngineInfoForm_UI0720=85NameAudioEngineInfoForm_UI0BB5@=>2PatternsAudioEngineInfoForm_UI&>A?@>872545=85 =>B Playing notesAudioEngineInfoForm_UI@5<O >1@01>B:8 Process timeAudioEngineInfoForm_UI4K1>@>: 2 @5;0L=>< 2@5<5=8Realtime framesAudioEngineInfoForm_UI*'0AB>B0 AM<?;8@>20=8O Sample rateAudioEngineInfoForm_UI!M<?;5@SamplerAudioEngineInfoForm_UI(K1@0==K9 8=AB@C<5=BSelected instrumentAudioEngineInfoForm_UI"K1@0==K9 ?0BB5@=Selected patternAudioEngineInfoForm_UI!5:25=A5@ SequencerAudioEngineInfoForm_UI,>;>65=85 2 :><?>78F88 Song positionAudioEngineInfoForm_UI(!>AB>O=85 :><?>78F88 Song stateAudioEngineInfoForm_UI!8=B570B>@SynthAudioEngineInfoForm_UI "8:>2TicksAudioEngineInfoForm_UIA sAudioFileBrowser0@>A<>B@ 72C:>2KE D09;>2Audio File BrowserAudioFileBrowser<O:Name:AudioFileBrowser>AB0@09B5AL =5 2:;NG0BL ?@54?@>A;CH820=85 4;O 70?8A59 4;8B5;L=>ABLN 1>;LH5 10 <8=CB!?Please do not preview samples which are longer than 10 minutes!AudioFileBrowser;8=0 AM<?;0:Sample length:AudioFileBrowser;8=0 AM<?;0: Sample length: AudioFileBrowser,'0AB>B0 AM<?;8@>20=8O: Samplerate:AudioFileBrowser2'0AB>B0 AM<?;8@>20=8O: %1Samplerate: %1AudioFileBrowser 07<5@:Size:AudioFileBrowser" 07<5@: %1 109B>2Size: %1 bytesAudioFileBrowserB&<O D09;0 2 =0720=85 8=AB@C<5=B0&Filename to instrument nameAudioFileBrowser_UI &><>9&HomeAudioFileBrowser_UI&>A?@>8725AB8 &Play SampleAudioFileBrowser_UI &!B>?&StopAudioFileBrowser_UI &KH5&UpAudioFileBrowser_UI^AB>@>6=>, 2A5 ?0@0<5B@K A8;K =060B8O 87<5=OBAO4Be careful, this change all Layer velocity settings AudioFileBrowser_UIB<5=8BLCancelAudioFileBrowser_UI 80;>3DialogAudioFileBrowser_UI;8B5;L=>ABL:Length:AudioFileBrowser_UI<O:Name:AudioFileBrowser_UIB:@KBLOpenAudioFileBrowser_UI2>A?@>872>48BL ?> &I5;G:CPla&y samples by clickingAudioFileBrowser_UI,'0AB>B0 AM<?;8@>20=8O: Samplerate:AudioFileBrowser_UIH2B><0B8G5A:8 =07=0G8BL A8;C =060B8OSet automatic velocityAudioFileBrowser_UI 07<5@:Size:AudioFileBrowser_UI(845BL A:@KBK5 ?0?:8View hidden foldersAudioFileBrowser_UI8@86Q@DirectorDirector 80;>3Dialog Director_UI((%1/%2 8) - ETA %3(%1/%2 KiB) - ETA %3DownloadWidget$### 2B>@ 4@0<:8B0### Drumkit authorDrumkitManager_UI###  4@0<:8B5### Drumkit infoDrumkitManager_UI*### 0720=85 4@0<:8B0### Drumkit nameDrumkitManager_UI\### @0<:8B 1C45B CAB0=>2;5= zncxbmzbxcmznxbcm4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b> >?>;=8B5;L=K5 4@0<:8BK <>6=> A:0G0BL =0 A09B5 http://www.hydrogen-music.org<br> </b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UI 2B>@AuthorDrumkitManager_UI@>A<>B@BrowseDrumkitManager_UI#40;8BL 4@0<:8BDelete drumkitDrumkitManager_UI(0B0;>3 A 4@0<:8B0<8Drumkit directoryDrumkitManager_UI$<O D09;0 4@0<:8B0Drumkit filenameDrumkitManager_UI"0720=85 4@0<:8B0 Drumkit nameDrumkitManager_UI-:A?>@BExportDrumkitManager_UI Form1Form1DrumkitManager_UI <?>@BImportDrumkitManager_UI=D>@<0F8OInfoDrumkitManager_UI03@C7:0LoadDrumkitManager_UI"03@C78BL 4@0<:8B Load drumkitDrumkitManager_UI!>E@0=5=85SaveDrumkitManager_UI B>, 8 4@C3>5BothExportSongDialog2-:A?>@B8@>20BL :><?>78F8N Export songExportSongDialog:-:A?>@B8@>20BL 2 >4=C 4>@>6:CExport to a single trackExportSongDialog>-:A?>@B8@>20BL 2 @07=K5 4>@>6:8Export to seperate tracksExportSongDialogT$09; %1 C65 ACI5AB2C5B. 5@570?8A0BL 53>?1The file %1 exists. Overwrite the existing file?ExportSongDialog&$09;... &Browse...ExportSongDialog_UI&0:@KBL&CloseExportSongDialog_UI&-:A?>@B&ExportExportSongDialog_UI1616ExportSongDialog_UI 192000192000ExportSongDialog_UI 2205022050ExportSongDialog_UI2424ExportSongDialog_UI3232ExportSongDialog_UI 4410044100ExportSongDialog_UI 4800048000ExportSongDialog_UI88ExportSongDialog_UI 9600096000ExportSongDialog_UI\AIFF A :0G5AB2>< ADAT: 48F, 16-@07@O4=K9 PCM)AIFF in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UIXAIFF A :0G5AB2>< CD: 41F, 16-@07@O4=K9 PCM'AIFF in CD quality "41 kHz, 16 bit PCM"ExportSongDialog_UIhAIFF A C;CGH5==K< :0G5AB2><: 48F, 24-@07@O4=K9 PCM+AIFF in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI Alt+DAlt+BExportSongDialog_UI Alt+BAlt+CExportSongDialog_UI Alt+MAlt+EExportSongDialog_UIF-:A?>@B8@>20BL 2AN :><?>78F8N 2 WAVExport Whole Song to WAVExportSongDialog_UI2<O M:A?>@B8@C5<>3> D09;0Export filenameExportSongDialog_UIXFLAC, 157 ?>B5@L, A E>@>H8< :0G5AB2><: 48F1FLAC lossless compressor in good quality "48 kHz"ExportSongDialog_UIbOgg Vorbis, A ?>B5@O<8, => E>@>H8< :0G5AB2><: VBR3OGG Vorbis loosely compressed in good quality "VBR"ExportSongDialog_UI& 07@O4=>ABL AM<?;0:SampleDepth in Bit:ExportSongDialog_UI6'0AB>B0 AM<?;8@>20=8O 2 F:Samplerate in Hz:ExportSongDialog_UI(01;>=K: Templates: ExportSongDialog_UI^WAV =87:>3> :0G5AB20: 22,05F, 8-@07@O4=K9 PCMWAV LOFI "22.05kHz, 8 bit PCM ExportSongDialog_UIdWAV A =08;CGH8< :0G5AB2><: 96F, 32-@07@O4=K9 PCM-WAV best Mixdown quality "96 kHz, 32 bit PCM"ExportSongDialog_UIZWAV A :0G5AB2>< ADAT: 48F, 16-@07@O4=K9 PCM(WAV in ADAT quality "48 kHz, 16 bit PCM"ExportSongDialog_UIZWAV A :0G5AB2>< CD: 44,1F, 16-@07@O4=K9 PCM(WAV in CD quality "44,1kHz, 16 bit PCM"ExportSongDialog_UIfWAV A C;CGH5==K< :0G5AB2><: 48F, 24-@07@O4=K9 PCM*WAV in better quality "48 kHz, 24 bit PCM"ExportSongDialog_UI*%1<br>%2 F<br>%3 %4%1
    %2 KHz
    %3 %4 FileBrowser -DD5:BK 2:;/2K:; FX on/off FxMixerLine1I89 2KE>4 Master output FxMixerLineBPMBPM H2Core::SongEditorPanelBpmWidget 5B:0Tag H2Core::SongEditorPanelTagWidget&B<5=8BL&Cancel$H2Core::SoundLibraryPropertiesDialog&OK&Ok$H2Core::SoundLibraryPropertiesDialog8!2>9AB20 72C:>2>9 181;8>B5:8SoundLibrary Properties$H2Core::SoundLibraryPropertiesDialogK <>65B5 A>E@0=OBL 87<5=5=8O 2 8=AB@C<5=B0E B>;L:> 4;O B5:CI59 703@C65==>9 181;8>B5:8.fThis is not possible, you can only save changes inside instruments to the current loaded sound library$H2Core::SoundLibraryPropertiesDialog=8<0=85! !<5=0 =0720=8O 4@0<:8B0 ?@82545B : A>740=8N =>2>3> 4@0<:8B0. K C25@5=K?fWarning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure?$H2Core::SoundLibraryPropertiesDialog,03@C65= 4@0<:8B: [%1]Drumkit loaded: [%1] HydrogenApp 8:H5@Mixer HydrogenApp& 540:B>@ :><?>78F89 Song Editor HydrogenApp B0:0AttackInstrumentEditor 5@2>5 70BCE0=85DecayInstrumentEditor$ 57>=0=A=K9 D8;LB@Filter resonanceInstrumentEditor 1I85GeneralInstrumentEditor(#A8;5=85 8=AB@C<5=B0Instrument gainInstrumentEditor#A8;5=85 A;>O Layer gainInstrumentEditor!;>8LayersInstrumentEditor4>2>5 =0720=85 8=AB@C<5=B0New instrument nameInstrumentEditor8!;CG09=K9 :>MDD. 2KA>BK B>=0Random pitch factorInstrumentEditor$>=5G=>5 70BCE0=85ReleaseInstrumentEditor:>:070BL A2>9AB20 8=AB@C<5=B0Show instrument propertiesInstrumentEditor,>:070BL A2>9AB20 A;>OShow layers propertiesInstrumentEditorAB0=>28BL 2>A?@>872545=85 B5:CI59 =>BK ?@8 ?5@5E>45 : AM<?;C A;54CNI59.MStop the current playing instrument-note before trigger the next note sample.InstrumentEditor!B018;L=0O D070SustainInstrumentEditor #40;8BL 2A5 =>BK Clear notesInstrumentLine$#40;8BL 8=AB@C<5=BDelete instrumentInstrumentLine0?>;=8BL 1/2Fill 1/2 notesInstrumentLine0?>;=8BL 1/3Fill 1/3 notesInstrumentLine0?>;=8BL 1/4Fill 1/4 notesInstrumentLine0?>;=8BL 1/6Fill 1/6 notesInstrumentLine0?>;=8BL 1/8Fill 1/8 notesInstrumentLine$0?>;=8BL 2A5 =>BKFill all notesInstrumentLine"0?>;=8BL =>BK...Fill notes ...InstrumentLine,!;CG09=0O A8;0 =060B8ORandomize velocityInstrumentLine!>;>SoloInstrumentLine=AB@C<5=B InstrumentInstrumentRack<>:070BL @540:B>@ 8=AB@C<5=B>2Show Instrument editorInstrumentRack4>:070BL 181;8>B5:C 72C:>2Show sound libraryInstrumentRack"81;8>B5:0 72C:>2 Sound libraryInstrumentRack*7<5=8BL ?0@0<5B@K FXEdit FX parametersLadspaFXMixerLine>72@0B MDD5:B0 Effect returnLadspaFXMixerLine1E>4 MDD5:B0 FX bypassLadspaFXMixerLine$0720=85 LADSPA FXLadspa FX nameLadspaFXMixerLine:;NG8BLActivateLadspaFXPropertiesK:;NG8BL DeactivateLadspaFXProperties*!2>9AB20 MDD5:B0 [%1]LADSPA FX %1 PropertiesLadspaFXProperties$-DD5:B =5 =07=0G5= No pluginLadspaFXProperties#40;8BL MDD5:B Remove FXLadspaFXPropertiesK1@0BL MDD5:B Select FXLadspaFXProperties*!2>9AB20 MDD5:B0 [%1][%1] LADSPA FX PropertiesLadspaFXProperties";D028B=K9 A?8A>:Alphabetic ListLadspaFXSelector> :0B53>@88 CategorizedLadspaFXSelector @C??KGroupsLadspaFXSelector>=>MonoLadspaFXSelector"5 ?>445@68205BAO Not supportedLadspaFXSelector05402=> 8A?>;L7>202H85AO Recently UsedLadspaFXSelector$K15@8B5 LADSPA FXSelect LADSPA FXLadspaFXSelector !B5@5>StereoLadspaFXSelector ### FX maker 1 2### FX maker 1 2LadspaFXSelector_UI&### copyright 1 2 3### copyright 1 2 3LadspaFXSelector_UI### fx ID ### fx IDLadspaFXSelector_UI### fx label ### fx labelLadspaFXSelector_UI### fx name 1 ### fx name 1LadspaFXSelector_UI### fx type ### fx typeLadspaFXSelector_UI&B<5=8BL&CancelLadspaFXSelector_UI&OK&OKLadspaFXSelector_UI11LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">2B>@A:85 ?@020:</span></p></body></html>

    Copyright:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html>

    ID:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">5B:0:</span></p></body></html>

    Label:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">!>740B5;L:</span></p></body></html>

    Maker:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">0720=85:</span></p></body></html>

    Name:

    LadspaFXSelector_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">"8?:</span></p></body></html>

    Type:

    LadspaFXSelector_UI Alt+BAlt+CLadspaFXSelector_UI Alt+>Alt+OLadspaFXSelector_UI Form1Form1LadspaFXSelector_UIMainForm 5:>B>@K5 87<5=5=8O 2 :><?>78F88 =5 1K;8 A>E@0=5=K. K E>B8B5 A>E@0=8BL 8E ?5@54 2KE>4><? I The document contains unsaved changes. Do you want to save the changes? MainForm &?@>3@0<<5&AboutMainForm(&>1028BL 8=AB@C<5=B&Add instrumentMainForm&B<5=8BL&CancelMainForm&G8AB8BL 2AQ &Clear allMainForm0&B:070BLAO >B 87<5=5=89&DiscardMainForm4&-:A?>@B8@>20BL 181;8>B5:C&Export libraryMainForm4&-:A?>@B8@>20BL :><?>78F8N &Export songMainForm2&<?>@B8@>20BL 181;8>B5:C&Import libraryMainForm&!?@02:0&InfoMainForm(&!B>9:0 8=AB@C<5=B>2&Instrument RackMainForm&8:H5@&MixerMainForm&!>740BL&NewMainForm&B:@KBL&OpenMainForm&&0@0<5B@K Hydrogen &PreferencesMainForm@>5&:B&ProjectMainForm &KE>4&QuitMainForm&!>E@0=8BL&SaveMainForm*&!>E@0=8BL 181;8>B5:C &Save libraryMainForm!&5@28A&ToolsMainForm2& C:>2>4AB2> ?>;L7>20B5;O &User manualMainFormB<5=8BLCancelMainForm2G8AB8BL 2A5 8=AB@C<5=BK?Clear all instruments?MainFormD5 C40;>AL M:A?>@B8@>20BL ?0BB5@=.Could not export pattern.MainForm@5 C40;>AL A>E@0=8BL :><?>78F8N.Could not save song.MainFormB;0&4:0De&bugMainForm8@86Q@DirectorMainFormD>;LH5 =5 ?>:07K20BL MB> A>>1I5=85Don't show this message anymoreMainForm>H81:0 ?@8 703@C7:5 :><?>78F88.Error loading song.MainFormLH81:0 ?@8 703@C7:5 72C:>2>3> 4@0925@0Error starting audio driverMainForm<-&:A?>@B8@>20BL ?0BB5@= :0:...Expor&t pattern as...MainForm2-&:A?>@B8@>20BL MIDI-D09;Export &MIDI fileMainForm$-:A?>@B D09;0 MIDIExport MIDI fileMainForm<0BB5@= Hydrogen (*.h2pattern)Hydrogen Pattern (*.h2pattern)MainForm0Hydrogen 3>B>2 : @01>B5.Hydrogen Ready.MainForm<><?>78F8O Hydrogen (*.h2song)Hydrogen Song (*.h2song)MainForm&=AB@C<5=BK I&nstrumentsMainForm=AB@C<5=B InstrumentMainFormX@0925@ JACK: =52>7<>6=> 0:B828@>20BL :;85=B#Jack driver: cannot activate clientMainFormh@0925@ JACK: =52>7<>6=> A>548=8BLAO A ?>@B>< 2KE>40'Jack driver: cannot connect output portMainFormT@0925@ JACK: >H81:0 ?@8 @538AB@0F88 ?>@B0#Jack driver: error in port registerMainForm:@0925@ JACK: A5@25@ 2K3@C65=Jack driver: server shutdownMainForm"$09; MIDI (*.mid)Midi file (*.mid)MainFormOkMainFormB:@KBL &45<> Open &DemoMainForm B:@KBL &?0BB5@= Open &PatternMainForm(&5402=85 :><?>78F88 Open &recentMainFormB:@KBL ?0BB5@= Open PatternMainForm$B:@KBL :><?>78F8N Open songMainForm"0BB5@= A>E@0=5=.Pattern saved.MainFormB& 540:B>@ A?8A:>2 2>A?@>872545=8OPlaylist &editorMainFormL!?8A>: 2>A?@>872545=8O: :><?>78F8O !%1Playlist: Song No. %1MainForm$0?5G0B0BL >1J5:BK Print ObjectsMainForm"!>E@0=8BL &:0:... Save &as...MainForm0!>E@0=8BL ?0BB5@= :0:...Save Pattern as ...MainForm(!>E@0=8BL :><?>78F8N Save songMainFormH>:070BL A2>4:C ?> &72C:>2><C 4286:CShow &audio engine infoMainForm&5B040==K5... Show &infoMainFormN><?>78F8O A>E@0=5=0 ?>4 4@C38< 8<5=5<.Song saved as.MainForm*><?>78F8O A>E@0=5=0. Song saved.MainForm858725AB=K9 72C:>2>9 4@0925@Unknown audio driverMainForm*58725AB=0O >H81:0 %1Unknown error %1MainFormNK 8A?>;L7C5B5 =5AB018;L=CN 25@A8N Hydrogen. ><>38B5 =0< C;CGH8BL 55, ?@8AK;0O 2 A?8A>: @0AAK;:8 hydrogen-devel A2>8 >BG5BK >1 >H81:0E 8 ?@54;>65=8O. <br><br>!?0A81>!You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!MainForm"G5;>25G8BL 2@5<O Humanize timeMasterMixerLine G5;>25G8BL A8;CHumanize velocityMasterMixerLine`#AB0=>28BL ?0@0<5B@ G5;>25G5A:>3> 2@5<5=8 [%1] Set humanize time parameter [%1]MasterMixerLineh#AB0=>28BL ?0@0<5B@ G5;>25G5A:>9 A8;K =060B8O [%1]$Set humanize velocity parameter [%1]MasterMixerLine>#AB0=>28BL >1ICN 3@><:>ABL [%1]Set master volume [%1]MasterMixerLine8#AB0=>28BL A28=3-D0:B>@ [%1]Set swing factor [%1]MasterMixerLine !28=3SwingMasterMixerLine59AB285Action MidiTable!>1KB85Event MidiTable0@0<5B@Param. MidiTableL06<8B5 :=>?:C 4;O 70?8A8 MIDI-A>1KB8O!press button to record midi event MidiTable:#AB0=>28BL C@>25=L MDD5:B0 %1Set FX %1 level MixerH#AB0=>28BL C@>25=L MDD5:B0 LADSPA %1Set LADSPA FX ( %1 ) volumeMixer0>:070BL ?0=5;L MDD5:B>2 Show FX panelMixer8>:07K20BL ?8:8 8=AB@C<5=B>2Show instrument peaksMixerJB>1@065=85 ?8:>2 8=AB@C<5=B>2 = K:;Show instrument peaks = OffMixerHB>1@065=85 ?8:>2 8=AB@C<5=B>2 = :;Show instrument peaks = OnMixer^0720=85 8=AB@C<5=B0 (87<5=8BL 42>9=K< I5;G:><)&Instrument name (double click to edit) MixerLine"8E>Mute MixerLine0=>@0<0Pan MixerLine&>A?@>8725AB8 AM<?; Play sample MixerLine6#AB0=>28BL ?0=. 8=AB@. [%1]Set instr. pan [%1] MixerLineJ#AB0=>28BL 3@><:>ABL 8=AB@C<5=B0 [%1]Set instrument volume [%1] MixerLine!>;>Solo MixerLine!@570=85CutoffPatternEditorPanel$!;CH0BL =>2K5 =>BKHear new notesPatternEditorPanel2!;CH0BL =>2K5 =>BK = K:;Hear new notes = OffPatternEditorPanel0!;CH0BL =>2K5 =>BK = :;Hear new notes = OnPatternEditorPanelh@8 2>A?@>872545=88 @07<5@ ?0BB5@=0 87<5=8BL =5;L7O.8Is not possible to change the pattern size when playing.PatternEditorPanel&!<5I5=85 2> 2@5<5=8 Lead and LagPatternEditorPanel603@C65=0 181;8>B5:0 72C:>2Loaded SoundlibraryPatternEditorPanel28 >48= ?0BB5@= =5 2K1@0=No pattern selectedPatternEditorPanel0=>@0<0PanPatternEditorPanel. 540:B>@ ?0BB5@=>2  %1Pattern editor - %1PatternEditorPanelj20=B>20=85 A>1KB89 A :;0280BC@K/MIDI ?> A5B:5 = K:;,Quantize incoming keyboard/midi events = OffPatternEditorPanelh20=B>20=85 A>1KB89 A :;0280BC@K/MIDI ?> A5B:5 = :;+Quantize incoming keyboard/midi events = OnPatternEditorPanelZ20=B>20BL A>1KB8O A :;0280BC@K/MIDI ?> A5B:5%Quantize keyboard/midi events to gridPatternEditorPanel 57>=0=A ResonancePatternEditorPanel0K1@0BL @07@5H5=85 A5B:8Select grid resolutionPatternEditorPanel*K1@0BL A2>9AB20 =>BKSelect note propertiesPatternEditorPanel.K1@0BL @07<5@ ?0BB5@=0Select pattern sizePatternEditorPanel6>:070BL @540:B>@ ?5@:CAA88Show drum editorPatternEditorPanel6>:070BL <0B@8G=K9 @540:B>@Show piano roll editorPatternEditorPanel!8;0 =060B8OVelocityPatternEditorPanel#25;8G8BLZoom inPatternEditorPanel#<5=LH8BLZoom outPatternEditorPanel:0?>;=8BL 2K1@0==K< ?0BB5@=><Fill with selected patternPatternFillDialog&G8AB8BL&ClearPatternFillDialog_UI&0?>;=8BL&FillPatternFillDialog_UI Alt+BAlt+CPatternFillDialog_UI Alt+7Alt+FPatternFillDialog_UIB<5=8BLCancelPatternFillDialog_UI Form 1Form 1PatternFillDialog_UIB:From:PatternFillDialog_UIOKPatternFillDialog_UI>:To:PatternFillDialog_UI%1%1PatternPropertiesDialog%1#2%1#2PatternPropertiesDialog"!2>9AB20 ?0BB5@=0Pattern propertiesPatternPropertiesDialog&B<5=8BL&CancelPatternPropertiesDialog_UI&OK&OKPatternPropertiesDialog_UI Alt+BAlt+CPatternPropertiesDialog_UI Alt+>Alt+OPatternPropertiesDialog_UI Form1Form1PatternPropertiesDialog_UI.>2>5 =0720=85 ?0BB5@=0New Pattern NamePatternPropertiesDialog_UI&0B53>@8O ?0BB5@=>2Pattern categoryPatternPropertiesDialog_UI&!<5I5=85 2> 2@5<5=8 Lead and LagPianoRollEditor0=>@0<0PanPianoRollEditor!8;0 =060B8OVelocityPianoRollEditor6 568< Jack-Time-Master K:; Jack-Time-Master mode = Off PlayerControl4 568< Jack-Time-Master :; Jack-Time-Master mode = On PlayerControl$ 07@CH0NI0O 70?8ALDestructive Record PlayerControl( 07@CH. @568< = K:;Destructive mode = Off PlayerControl& 07@CH. @568< = :;Destructive mode = On PlayerControl ?5@Q4 Fast Forward PlayerControl&!B>9:0 8=AB@C<5=B>2Instrument rack PlayerControl`"@0=A?>@B JACK @01>B05B B>;L:> A 4@0925@>< JACK./JACK-transport will work only with JACK driver. PlayerControl6 568< JACK-B@0=A?>@B = K:;Jack-transport mode = Off PlayerControl4 568< JACK-B@0=A?>@B = :;Jack-transport mode = On PlayerControl85@5:;NG5=85 B@0=A?>@B0 JACKJack-transport on/off PlayerControl(0F8:;8BL :><?>78F8N Loop song PlayerControl<0F8:;820=85 :><?>78F88 = K:;Loop song = Off PlayerControl:0F8:;820=85 :><?>78F88 = :;Loop song = On PlayerControl 8:H5@Mixer PlayerControl$>2>5 7=0G5=85 BPM New BPM value PlayerControl 568< ?0BB5@=0 Pattern Mode PlayerControl>K1@0= @568< @540:B>@0 ?0BB5@=0Pattern mode selected. PlayerControl@8>AB0=>2;5=>.Pause. PlayerControl(3@0BL/@8>AB0=>28BL Play/ Pause PlayerControl(4QB 2>A?@>872545=85Playing. PlayerControl 0?8ALRecord PlayerControl$0?8AL MIDI = K:;Record midi events = Off PlayerControl"0?8AL MIDI = :;Record midi events = On PlayerControl 0704Rewind PlayerControl4>:070BL 10=: 8=AB@C<5=B>2Show Instrument Rack PlayerControl>:070BL <8:H5@ Show mixer PlayerControl  568< :><?>78F88 Song Mode PlayerControl.K1@0= @568< :><?>78F88Song mode selected. PlayerControlAB0=>28BLStop PlayerControl$>A?@. >AB0=>2;5=>Stopped. PlayerControlR&>1028BL AF5=0@89 2 2K1@0==CN :><?>78F8N&Add Script to selected songPlaylistDialog6&!>740BL 2K1@0==K9 AF5=0@89&Create a new ScriptPlaylistDialog8&7<5=8BL 2K1@0==K9 AF5=0@89&Edit selected ScriptPlaylistDialog&B:@KBL A?8A>:&Open PlaylistPlaylistDialog&!?8A>: &PlaylistPlaylistDialog6&#40;8BL 2K1@0==K9 AF5=0@89&Remove selected ScriptPlaylistDialog@&#40;8BL B5:CICN ?5A=N 87 A?8A:0#&Remove selected song from PlaylistPlaylistDialog"&!>E@0=8BL A?8A>:&Save PlaylistPlaylistDialog!&F5=0@88&ScriptsPlaylistDialogJ>1028BL &B5:CICN :><?>78F8N 2 A?8A>:Add ¤t song to PlaylistPlaylistDialogP>1028BL AF5=0@89 2 2K1@0==CN :><?>78F8NAdd Script to selected SongPlaylistDialog8>1028BL :><?>78F8N 2 A?8A>:Add Song to PlayListPlaylistDialog:&>1028BL :><?>78F8N 2 A?8A>:Add song to Play&listPlaylistDialog<H81:0 ?@8 703@C7:5 :><?>78F88Error loading song.PlaylistDialog"5@5<>B0BL 2?5@Q4 Fast ForwardPlaylistDialog\!?8A>: 2>A?@>872545=8O Hydrogen (*.h2playlist) Hydrogen Playlist (*.h2playlist)PlaylistDialogL!?8A>: 2>A?@>872545=8O Hydrogen (*.sh)Hydrogen Playlist (*.sh)PlaylistDialog0!F5=0@88 Hydrogen (*.sh)Hydrogen Scripts (*.sh)PlaylistDialog 03@C78BL A?8A>: Load PlaylistPlaylistDialog !>740BL AF5=0@89 New ScriptPlaylistDialog65B 8A?>;L7C5<>3> AF5=0@8O!No Script in use!PlaylistDialog65 2K1@0= =8 >48= AF5=0@89!No Script selected!PlaylistDialog5B AF5=0@8O! No Script!PlaylistDialog25B 2K1@0==KE :><?>78F89!$No Song in List or no Song selected!PlaylistDialog<8 >4=0 :><?>78F8O =5 2K1@0=0!No Song selected!PlaylistDialog<8 >4=0 :><?>78F8O =5 2K1@0=0!No song selected!PlaylistDialog 0C70.Pause.PlaylistDialogp>A?@>872545=85 / 0C70 / 03@C78BL 2K1@0==CN :><?>78F8NPlay/ Pause/ Load selected songPlaylistDialog> 540:B>@ A?8A:0 2>A?@>872545=8OPlaylist BrowserPlaylistDialog8!=0G0;0 A>E@0=8B5 :><?>78F8NPlease save your song firstPlaylistDialog 5@5<>B0BL =0704RewindPlaylistDialog !>E@0=8BL A?8A>: Save PlaylistPlaylistDialog*!>E@0=8BL A?8A>: &:0:Save Playlist &asPlaylistDialog!F5=0@89ScriptPlaylistDialog<O AF5=0@8O 8;8 ?CBL : =5<C A>45@68B ?@>15;K. -B>3> =5 4>;6=> 1KBL.Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces.PlaylistDialog:#:068B5 8A?>;L7C5<K9 @540:B>@Set your Default EditorPlaylistDialog"!?8A>: :><?>78F89 Song listPlaylistDialog!B>?StopPlaylistDialog, =>2K9 D09; A>45@68B 18B 8A?>;=5=8O, 4>ABC?=K9 53> 2;045;LFC=WARNING, the new file is executable by the owner of the file!PlaylistDialogK?>;=5=85 exec ScriptPlaylistDialog>@>A<>B@ A?8A:0 2>A?@>872545=8OPlayList BrowserPlaylistDialog_UI"!?8A>: :><?>78F89 Song listPlaylistDialog_UI&B<5=8BL&CancelPreferencesDialog&OK&OkPreferencesDialog.<b>@0925@ ALSA</b><br>ALSA Driver
    PreferencesDialog2<b>2B>2K1>@ 4@0925@0</b>!Automatic driver selectionPreferencesDialog8<b>@0925@ CoreAudio</b><br>CoreAudio Driver
    PreferencesDialog<b>@0925@ Jack Audio Connection Kit</b><br>87:>;0B5=B=K9 72C:>2>9 4@0925@CJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialog~<b>Open Sound System</b><br>1KG=K9 72C:>2>9 4@0925@ [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog8<b>@0925@ PortAudio</b><br>PortAudio Driver
    PreferencesDialogj<br><b><font color="red">5 A:><?8;8@>20=></font></b>0
    Not compiledPreferencesDialogt5>1E>48< ?>2B>@=K9 70?CA: 4@0925@0. 0?CAB8BL 53> 70=>2>?)Driver restart required. Restart driver?PreferencesDialogKAB@>5FastPreferencesDialog>@<0;L=>5NormalPreferencesDialog5@570?CAB8B5 Hydrogen, GB>1K 2:;NG8BL 8;8 >B:;NG8BL ?>445@6:C LASH6Please restart hydrogen to enable/disable LASH supportPreferencesDialog0@0<5B@K PreferencesPreferencesDialog54;5==>5SlowPreferencesDialog######PreferencesDialog_UI 1&;8: &AppearancePreferencesDialog_UI&B<5=8BL&CancelPreferencesDialog_UI &1I85&GeneralPreferencesDialog_UIMIDI-A&8AB5<0 &Midi SystemPreferencesDialog_UI&OK&OKPreferencesDialog_UIh&>2B>@=> >B:@K20BL ?>A;54=89 A?8A>: 2>A?@>872545=8O&Reopen last used playlistPreferencesDialog_UI>B&:@K20BL ?>A;54=NN :><?>78F8N&Reopen last used songPreferencesDialog_UI11PreferencesDialog_UI1010PreferencesDialog_UI1111PreferencesDialog_UI1212PreferencesDialog_UI1313PreferencesDialog_UI1414PreferencesDialog_UI1515PreferencesDialog_UI1616PreferencesDialog_UI22PreferencesDialog_UI33PreferencesDialog_UI44PreferencesDialog_UI 4410044100PreferencesDialog_UI 4800048000PreferencesDialog_UI55PreferencesDialog_UI66PreferencesDialog_UI77PreferencesDialog_UI88PreferencesDialog_UI 8820088200PreferencesDialog_UI99PreferencesDialog_UI 9600096000PreferencesDialog_UI<i>>A;5 87<5=5=8O H@8DB0 ?@8;>65=85 =5>1E>48<> ?5@570?CAB8BL.</i>=After a font change the application must be restarted.PreferencesDialog_UIA5AllPreferencesDialog_UI Alt+BAlt+CPreferencesDialog_UI Alt+AAlt+DPreferencesDialog_UI Alt+>Alt+OPreferencesDialog_UI Alt+?Alt+RPreferencesDialog_UI (@8DB ?@8;>65=8OApplication fontPreferencesDialog_UI"&2C:>20O A8AB5<0 Audio &SystemPreferencesDialog_UI(>4@>1=>AB8 > 2K2>45Audio output detailsPreferencesDialog_UI 07<5@ 1CD5@0 Buffer sizePreferencesDialog_UI 0=0;ChannelPreferencesDialog_UIF&!>548=8BLAO A >1KG=>9 ?0@>9 2KE>40Connect to &Default Output PairPreferencesDialog_UI#AB@>9AB2>DevicePreferencesDialog_UI KAB@>FastPreferencesDialog_UI Form1Form1PreferencesDialog_UI*3=>@8@>20BL note-offIgnore note-offPreferencesDialog_UIE>4InputPreferencesDialog_UI:0:A8<0;L=>5 >;8G5AB2> B0:B>2Maximum number of barsPreferencesDialog_UI:!:>@>ABL A?040=8O 8=48:0B>@>2Meters falloff speedPreferencesDialog_UI&@><:>ABL <5B@>=><0Metronome volumePreferencesDialog_UI@0925@ MIDI Midi driverPreferencesDialog_UI(@8DB 2 <8:H5@5 Mixer fontPreferencesDialog_UI>@<0;L=>NormalPreferencesDialog_UI> 0A?>;>65=85 CB8;8BK Rubberband+Path to the Rubberband command-line utilityPreferencesDialog_UI>;8D>=8O PolyphonyPreferencesDialog_UI>ABD5945@ Post-FaderPreferencesDialog_UI@5D5945@ Pre-FaderPreferencesDialog_UI5@5703@C78BLRestart outputPreferencesDialog_UI*'0AB>B0 AM<?;8@>20=8O Sample ratePreferencesDialog_UIK1@0BL H@8DB Select fontPreferencesDialog_UI54;5==>SlowPreferencesDialog_UI !B8;LStylePreferencesDialog_UIK2>4 4>@>6:8 Track outputPreferencesDialog_UI"A?>;L7>20BL LASHUse lashPreferencesDialog_UID 0745;L=K5 2KE>4K 4;O 8=AB@C<5=B>2create per-instrument outputsPreferencesDialog_UI&B<5=8BL&Cancel SampleEditor&OK&Ok SampleEditor0:@KBL 480;>3! >7<>6=>, >AB0;0AL :0:0O-B> =5A>E@0=Q==0O @01>B0. K C25@5=K?GClose dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditorAB0;8AL =5A>E@0=Q==K5 87<5=5=8O, :>B>@K5 1C4CB ?>B5@O=K. K C25@5=K??Unsaved changes left. This changes will be lost. Are you sure? SampleEditor:KA>B0 B>=0 (?>;CB>=0, A>BK5) Pitch (Semitone,Cent)SampleEditor_UI(&@8<5=8BL 87<5=5=8O&Apply ChangesSampleEditor_UI&0:@KBL&CloseSampleEditor_UI!&K3@0BL&PlaySampleEditor_UI00SampleEditor_UI11SampleEditor_UI1/161/16SampleEditor_UI1/21/2SampleEditor_UI1/321/32SampleEditor_UI1/41/4SampleEditor_UI1/641/64SampleEditor_UI1/81/8SampleEditor_UI1010SampleEditor_UI1111SampleEditor_UI1212SampleEditor_UI1313SampleEditor_UI1414SampleEditor_UI1515SampleEditor_UI1616SampleEditor_UI1717SampleEditor_UI1818SampleEditor_UI1919SampleEditor_UI22SampleEditor_UI2020SampleEditor_UI2121SampleEditor_UI2222SampleEditor_UI2323SampleEditor_UI2424SampleEditor_UI2525SampleEditor_UI2626SampleEditor_UI2727SampleEditor_UI2828SampleEditor_UI2929SampleEditor_UI33SampleEditor_UI3030SampleEditor_UI3131SampleEditor_UI3232SampleEditor_UI44SampleEditor_UI55SampleEditor_UI66SampleEditor_UI77SampleEditor_UI88SampleEditor_UI99SampleEditor_UI<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;"> 568<</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">?5B;8</span></p></body></html>

    Loop

    mode

    SampleEditor_UI'QB:>ABL: Crispness: SampleEditor_UI 80;>3DialogSampleEditor_UI >=5F:EndSampleEditor_UI 5B;OLoopSampleEditor_UI.&!K3@0BL 8AE>4=K9 AM<?;P&lay original sampleSampleEditor_UIN7<5=8BL 2KA>BC B>=0 2 ?>;CB>=0E, A>BKE$Pitch the sample in semitones, centsSampleEditor_UI0G0;>:StartSampleEditor_UI"8? C30A0=8O fade-out typeSampleEditor_UI ?5@Q4forwardSampleEditor_UI&>20O 4;8=0 AM<?;0:new sample length:SampleEditor_UI2K:;offSampleEditor_UI0=>@0<0panoramaSampleEditor_UI8=3?>=3pingpongSampleEditor_UI 0704reverseSampleEditor_UI@><:>ABLvolumeSampleEditor_UI3;02;5=85Documentation indexSimpleHTMLBrowserL!?0A81>, 1>;LH5 =5 =04> MB> ?>:07K20BLDon't show this message anymoreSimpleHTMLBrowser0 C:>2>4AB2> ?>;L7>20B5;OManualSimpleHTMLBrowserOkSimpleHTMLBrowser*=0:><AB2> A HydrogenWelcome to HydrogenSimpleHTMLBrowser&B<5=8BL&CancelSongEditorPanel&OK&OkSongEditorPanel.!B5@5BL 40==K5 ?0BB5@=0Clear pattern sequenceSongEditorPanel*!>740BL =>2K9 ?0BB5@=Create new patternSongEditorPanel" 8A>20BL ?0BB5@=K Draw modeSongEditorPanel4?CAB8BL 2K1@0==K9 ?0BB5@=Move the selected pattern downSongEditorPanel4>2KA8BL 2K1@0==K9 ?0BB5@=Move the selected pattern upSongEditorPanel0BB5@= %1 Pattern %1SongEditorPanel"K45;OBL ?0BB5@=K Select modeSongEditorPanel& 540:B>@ :><?>78F89 Song EditorSongEditorPanel=8<0=85, 2AO ?>A;54>20B5;L=>ABL ?0BB5@=>2 1C45B C40;5=0. K C25@5=K?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanel57 :0B53>@88not_categorizedSongEditorPanel500500SongEditorPanelBpmWidget_UI 500,55500,55SongEditorPanelBpmWidget_UIBPMBPMSongEditorPanelBpmWidget_UI"0:BBarSongEditorPanelBpmWidget_UIB<5=8BLCancelSongEditorPanelBpmWidget_UI$#40;8BL <0@:5@ BPMDelete BPM MarkerSongEditorPanelBpmWidget_UI.#40;8BL MB>B <0@:5@ BPMDelete this BPM MarkerSongEditorPanelBpmWidget_UI:#:070BL 4>;N =0 ;8=88 2@5<5=8Edit beat in timelineSongEditorPanelBpmWidget_UIL7<5=8BL 7=0G5=85 bpm 4;O B5:CI59 4>;8#Edit the bpm value for current beatSongEditorPanelBpmWidget_UIFormFormSongEditorPanelBpmWidget_UIOkSongEditorPanelBpmWidget_UIB<5=8BLCancelSongEditorPanelTagWidget_UIFormFormSongEditorPanelTagWidget_UIOkSongEditorPanelTagWidget_UI 5B:0TagSongEditorPanelTagWidget_UI&B<5=8BL&CancelSongEditorPatternList&OK&OkSongEditorPatternList!:>?8@>20BLCopySongEditorPatternList#40;8BLDeleteSongEditorPatternList*0?>;=8BL/G8AB8BL...Fill/Clear ...SongEditorPatternList<0BB5@= Hydrogen (*.h2pattern)Hydrogen Pattern (*.h2pattern)SongEditorPatternList"03@C78BL ?0BB5@= Load PatternSongEditorPatternListB:@KBL ?0BB5@= Open PatternSongEditorPatternList0BB5@= 1 Pattern 1SongEditorPatternList!2>9AB20 PropertiesSongEditorPatternList"!>E@0=8BL ?0BB5@= Save PatternSongEditorPatternListj"0:>9 D09; ?0BB5@=0 C65 ACI5AB2C5B. 5@570?8A0BL 53>?9The pattern-file exists. Overwrite the existing pattern?SongEditorPatternList&8@BC0;L=K9 ?0BB5@=Virtual PatternSongEditorPatternList57 :0B53>@88not_categorizedSongEditorPatternList5B040==K5Song propertiesSongPropertiesDialog&OK &OKSongPropertiesDialog_UI&B<5=8BL&CancelSongPropertiesDialog_UI Alt+BAlt+CSongPropertiesDialog_UI Alt+>Alt+OSongPropertiesDialog_UI 2B>@AuthorSongPropertiesDialog_UI Form1Form1SongPropertiesDialog_UI8F5=78OLicenseSongPropertiesDialog_UI>BKNotesSongPropertiesDialog_UI&0720=85 :><?>78F88 Song nameSongPropertiesDialog_UI@-:A?>@B8@>20BL 181;8>B5:C 72C:>2Export Sound LibrarySoundLibraryExportDialog@>A<>B@BrowseSoundLibraryExportDialog_UI 80;>3DialogSoundLibraryExportDialog_UI-:A?>@BExportSoundLibraryExportDialog_UIh> 2@5<O 8<?>@B0 181;8>B5:8 72C:>2 ?@>87>H;0 >H81:0.-An error occurred importing the SoundLibrary.SoundLibraryImportDialog2B>@: %1 Author: %1SoundLibraryImportDialog@!:0G8205BAO 181;8>B5:0 72C:>2...Downloading SoundLibrary...SoundLibraryImportDialog@0<:8BKDrumkitsSoundLibraryImportDialog*<?>@B8@>20BL 4@0<:8BImport drumkitSoundLibraryImportDialog#AB0=>2;5=0 InstalledSoundLibraryImportDialog8F5=78O: %1 License: %1SoundLibraryImportDialog >20ONewSoundLibraryImportDialog0BB5@=KPatternsSoundLibraryImportDialog><?>78F88SongsSoundLibraryImportDialog4<?>@B 72C:>2>9 181;8>B5:8Sound Library importSoundLibraryImportDialog"81;8>B5:0 72C:>2 Sound librarySoundLibraryImportDialogH81;8>B5:0 72C:>2 8<?>@B8@>20=0 2 %1SoundLibrary imported in %1SoundLibraryImportDialog !B0BCAStatusSoundLibraryImportDialogP!?8A>: 72C:>2KE 181;8>B5: >1=>2;O5BAO...Updating SoundLibrary list...SoundLibraryImportDialog11SoundLibraryImportDialog_UI2B>@... Author...SoundLibraryImportDialog_UI@>A<>B@5BL... Browse...SoundLibraryImportDialog_UI0:@KBLCloseSoundLibraryImportDialog_UI 80;>3DialogSoundLibraryImportDialog_UI(!:0G0BL 8 CAB0=>28BLDownload and installSoundLibraryImportDialog_UI07<5=8BL A?8A>: A5@25@>2Edit server listSoundLibraryImportDialog_UI#AB0=>28BLInstallSoundLibraryImportDialog_UI=B5@=5BInternetSoundLibraryImportDialog_UI8F5=78O... License...SoundLibraryImportDialog_UI>:0;L=K9 D09; Local fileSoundLibraryImportDialog_UI40720=85 181;8>B5:8 72C:>2Sound Library NameSoundLibraryImportDialog_UI:!2>4:0 ?> 72C:>2>9 181;8>B5:5Sound library InfoSoundLibraryImportDialog_UI1=>28BL A?8A>: Update listSoundLibraryImportDialog_UI&B<5=8BL&CancelSoundLibraryPanel&OK&OkSoundLibraryPanel#40;8BLDeleteSoundLibraryPanel>H81:0 ?@8 703@C7:5 :><?>78F88.Error loading song.SoundLibraryPanel-:A?>@B8@>20BLExportSoundLibraryPanel03@C78BLLoadSoundLibraryPanel0BB5@=KPatternsSoundLibraryPanel!2>9AB20 PropertiesSoundLibraryPanel><?>78F88SongsSoundLibraryPanel$!8AB5<=K5 4@0<:8BKSystem drumkitsSoundLibraryPanel2>;L7>20B5;LA:85 4@0<:8BK User drumkitsSoundLibraryPanel@54C?@5645=85: 2K1@0==K9 ?0BB5@= 1C45B C40;5= A 48A:0. K C25@5=K?FWarning, the selected pattern will be deleted from disk. Are you sure?SoundLibraryPanel 2B>@AuthorSoundLibraryPropertiesDialog_UIB<5=8BLCancelSoundLibraryPropertiesDialog_UI 80;>3DialogSoundLibraryPropertiesDialog_UI=D>@<0F8O InformationSoundLibraryPropertiesDialog_UI8F5=78OLicenseSoundLibraryPropertiesDialog_UI0720=85NameSoundLibraryPropertiesDialog_UI!>E@0=8BLSave SoundLibraryPropertiesDialog_UIr!>E@0=8BL 2 181;8>B5:C 87<5=5=8O, 2=5A5==K5 2 8=AB@C<5=BK3Save changes made to instruments into sound librarySoundLibraryPropertiesDialog_UI<7<5=8BL ?0@0<5B@K @5?>78B>@8OEdit repository settingsSoundLibraryRepositoryDialog07<5=8BL A?8A>: A5@25@>2Edit server listSoundLibraryRepositoryDialogURLURLSoundLibraryRepositoryDialog>1028BLAddSoundLibraryRepositoryDialog_UI#40;8BLDeleteSoundLibraryRepositoryDialog_UI 80;>3DialogSoundLibraryRepositoryDialog_UIF#:068B5 E>BO 1K :>@@5:B=>5 =0720=85#Please supply at least a valid nameSoundLibrarySaveDialog6!>E@0=8BL 181;8>B5:C 72C:>2Save Sound LibrarySoundLibrarySaveDialog 2B>@AuthorSoundLibrarySaveDialog_UIB<5=8BLCancelSoundLibrarySaveDialog_UI 80;>3DialogSoundLibrarySaveDialog_UI=D>@<0F8O InformationSoundLibrarySaveDialog_UI8F5=78OLicenseSoundLibrarySaveDialog_UI0720=85NameSoundLibrarySaveDialog_UI!>E@0=8BLSave SoundLibrarySaveDialog_UI"81;8>B5:0 72C:>2 Sound librarySoundLibraryTree8K15@8B5 28@BC0;L=K9 ?0BB5@=Select virtual patternVirtualPatternDialogB<5=8BLCancelVirtualPatternDialog_UI 80;>3DialogVirtualPatternDialog_UIOKVirtualPatternDialog_UI ) , hydrogen-0.9.6-beta3/data/i18n/hydrogen.ru.ts000066400000000000000000006706361211146647700207000ustar00rootroot00000000000000 AboutDialog <b>Project page</b><br> <b>Страница проекта</b><br> About О программе <b>Website</b><br> <b>Веб-сайт</b><br> <b>Mailing lists</b><br> <b>Списки рассылки:</b><br> <b>Main coder and mantainer:</b><br> <b>Ответственный за выпуск, основной разработчик:</b><br> AboutDialog_UI About Hydrogen О Hydrogen A&bout &Программа &Authors &Авторы &License &Лицензия &OK &OK Alt+O Alt+O ### ### <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info Звуковой движок AudioEngineInfoForm_UI Form1 Form1 Playing notes Воспроизведение нот Process time Время обработки Audio engine state Состояние движка Song state Состояние композиции Frames Выборок Ticks Тиков Buffer size Размер буфера Sample rate Частота сэмплирования ### ### Song position Положение в композиции Patterns Паттернов Selected pattern Выбранный паттерн Selected instrument Выбранный инструмент Connected to Соединён с Sampler Сэмплер Synth Синтезатор Sequencer Секвенсер MIDI input Вход MIDI Name Название Audio output Выход звука Realtime frames Выборок в релаьном времени AudioFileBrowser Audio File Browser Просмотр звуковых файлов Size: %1 bytes Размер: %1 байтов Samplerate: %1 Частота сэмплирования: %1 s с Name: Имя: Size: Размер: Samplerate: Частота сэмплирования: Sample length: Длина сэмпла: Please do not preview samples which are longer than 10 minutes! Постарайтесь не включать предпрослушивание для записей длительностью больше 10 минут! Sample length: Длина сэмпла: AudioFileBrowser_UI Dialog Диалог Open Открыть Name: Имя: Samplerate: Частота сэмплирования: Size: Размер: Length: Длительность: Cancel Отменить Pla&y samples by clicking Воспроизводить по &щелчку &Up В&ыше &Home &Домой &Play Sample &Воспроизвести &Filename to instrument name &Имя файла в название инструмента &Stop &Стоп View hidden folders Видеть скрытые папки Be careful, this change all Layer velocity settings Осторожно, все параметры силы нажатия изменятся Set automatic velocity Автоматически назначить силу нажатия Director Director Дирижёр Director_UI Dialog Диалог DownloadWidget (%1/%2 KiB) - ETA %3 (%1/%2 КиБ) - ETA %3 DrumkitManager_UI Drumkit name Название драмкита Delete drumkit Удалить драмкит Load drumkit Загрузить драмкит Load Загрузка Author Автор Info Информация Save Сохранение Browse Просмотр Import Импорт Drumkit filename Имя файла драмкита Export Экспорт Drumkit directory Каталог с драмкитами ### Drumkit author ### Автор драмкита ### Drumkit info ### О драмките ### The drumkit will be installed zncxbmzbxcmznxbcmz ### Драмкит будет установлен zncxbmzbxcmznxbcm <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b> Дополнительные драмкиты можно скачать на сайте http://www.hydrogen-music.org<br> </b> Form1 Form1 ### Drumkit name ### Название драмкита ExportSongDialog Export song Экспортировать композицию The file %1 exists. Overwrite the existing file? Файл %1 уже существует. Перезаписать его? Export to a single track Экспортировать в одну дорожку Export to seperate tracks Экспортировать в разные дорожки Both И то, и другое ExportSongDialog_UI Export filename Имя экспортируемого файла Export Whole Song to WAV Экспортировать всю композицию в WAV Alt+C Alt+т &Export &Экспорт Alt+E Alt+э &Browse... &Файл... Alt+B Alt+ф &Close &Закрыть Samplerate in Hz: Частота сэмплирования в Гц: 22050 22050 44100 44100 48000 48000 96000 96000 192000 192000 SampleDepth in Bit: Разрядность сэмпла: 8 8 16 16 24 24 32 32 Templates: Шаблоны: WAV in CD quality "44,1kHz, 16 bit PCM" WAV с качеством CD: 44,1КГц, 16-разрядный PCM WAV in ADAT quality "48 kHz, 16 bit PCM" WAV с качеством ADAT: 48КГц, 16-разрядный PCM WAV in better quality "48 kHz, 24 bit PCM" WAV с улучшенным качеством: 48КГц, 24-разрядный PCM WAV LOFI "22.05kHz, 8 bit PCM WAV низкого качества: 22,05КГц, 8-разрядный PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" WAV с наилучшим качеством: 96КГц, 32-разрядный PCM AIFF in CD quality "41 kHz, 16 bit PCM" AIFF с качеством CD: 41КГц, 16-разрядный PCM AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF с качеством ADAT: 48КГц, 16-разрядный PCM AIFF in better quality "48 kHz, 24 bit PCM" AIFF с улучшенным качеством: 48КГц, 24-разрядный PCM FLAC lossless compressor in good quality "48 kHz" FLAC, без потерь, с хорошим качеством: 48КГц OGG Vorbis loosely compressed in good quality "VBR" Ogg Vorbis, с потерями, но хорошим качеством: VBR Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 %1<br>%2 КГц<br>%3 %4 FxMixerLine FX on/off Эффекты вкл/выкл Master output Общий выход H2Core::SongEditorPanelBpmWidget BPM BPM H2Core::SongEditorPanelTagWidget Tag Метка H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties Свойства звуковой библиотеки This is not possible, you can only save changes inside instruments to the current loaded sound library Вы можете сохранять изменения в инструментах только для текущей загруженной библиотеки. Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Внимание! Смена названия драмкита приведет к созданию нового драмкита. Вы уверены? &Ok &OK &Cancel О&тменить Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] Загружен драмкит: [%1] Song Editor Редактор композиций Instrument + Pattern Mixer Микшер InstrumentEditor Show instrument properties Показать свойства инструмента Show layers properties Показать свойства слоя Random pitch factor Случайный коэфф. высоты тона Filter resonance Резонансный фильтр Attack Атака Decay Первое затухание Sustain Стабильная фаза Release Конечное затухание Layer gain Усиление слоя New instrument name Новое название инструмента Instrument gain Усиление инструмента Filter Cutoff Layer pitch (Coarse) Layer pitch (Fine) General Общие Layers Слои Stop the current playing instrument-note before trigger the next note sample. Остановить воспроизведение текущей ноты при переходе к сэмплу следующей. Auto-Stop-Note InstrumentLine Clear notes Удалить все ноты Randomize velocity Случайная сила нажатия Delete instrument Удалить инструмент Fill notes ... Заполнить ноты... Fill all notes Заполнить все ноты Fill 1/2 notes Заполнить 1/2 Fill 1/3 notes Заполнить 1/3 Fill 1/4 notes Заполнить 1/4 Fill 1/6 notes Заполнить 1/6 Fill 1/8 notes Заполнить 1/8 Mute instrument Solo Соло InstrumentRack Show Instrument editor Показать редактор инструментов Instrument Инструмент Show sound library Показать библиотеку звуков Sound library Библиотека звуков LadspaFXMixerLine Edit FX parameters Изменить параметры FX FX bypass Обход эффекта Ladspa FX name Название LADSPA FX Effect return Возврат эффекта LadspaFXProperties Select FX Выбрать эффект [%1] LADSPA FX Properties Свойства эффекта [%1] LADSPA FX %1 Properties Свойства эффекта [%1] No plugin Эффект не назначен Activate Включить Deactivate Выключить Remove FX Удалить эффект LadspaFXSelector Groups Группы Stereo Стерео Mono Моно Not supported Не поддерживается Select LADSPA FX Выберите LADSPA FX Recently Used Недавно использовавшиеся Alphabetic List Алфавитный список Categorized По категории LadspaFXSelector_UI &Cancel О&тменить Alt+C Alt+т &OK &OK Alt+O Alt+о Form1 Form1 ### fx label ### fx label ### fx type ### fx type ### fx ID ### fx ID 1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Название:</span></p></body></html> ### fx name 1 ### fx name 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Метка:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Тип:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Создатель:</span></p></body></html> ### FX maker 1 2 ### FX maker 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Авторские права:</span></p></body></html> ### copyright 1 2 3 ### copyright 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm Error loading song. Ошибка при загрузке композиции. Hydrogen Ready. Hydrogen готов к работе. &Save &Сохранить &Discard &Отказаться от изменений Cancel Отменить Hydrogen Song (*.h2song) Композиция Hydrogen (*.h2song) Save song Сохранить композицию Open song Открыть композицию Export MIDI file Экспорт файла MIDI Midi file (*.mid) Файл MIDI (*.mid) &New &Создать &Open &Открыть Open &Demo Открыть &демо Open &recent Н&едавние композиции Save &as... Сохранить &как... Export &MIDI file Э&кспортировать MIDI-файл &Preferences &Параметры Hydrogen &Quit В&ыход Show &audio engine info Показать сводку по &звуковому движку &User manual &Руководство пользователя &About О &программе &Cancel О&тменить Unknown audio driver Неизвестный звуковой драйвер Error starting audio driver Ошибка при загрузке звукового драйвера Jack driver: server shutdown Драйвер JACK: сервер выгружен Jack driver: cannot activate client Драйвер JACK: невозможно активировать клиент Jack driver: cannot connect output port Драйвер JACK: невозможно соединиться с портом выхода Jack driver: error in port register Драйвер JACK: ошибка при регистрации порта &Export song &Экспортировать композицию De&bug Отла&дка &Project Прое&кт &Tools С&ервис &Mixer &Микшер &Instrument Rack &Стойка инструментов Print Objects Напечатать объекты &Info &Справка Song saved. Композиция сохранена. Unknown error %1 Неизвестная ошибка %1 Clear all instruments? Очистить все инструменты? Ok ОК Could not save song. Не удалось сохранить композицию. You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Вы используете нестабильную версию Hydrogen. Помогите нам улучшить ее, присылая в список рассылки hydrogen-devel свои отчеты об ошибках и предложения. <br><br>Спасибо! Don't show this message anymore Больше не показывать это сообщение Open &Pattern Открыть &паттерн Hydrogen Pattern (*.h2pattern) Паттерн Hydrogen (*.h2pattern) Save Pattern as ... Сохранить паттерн как... Pattern saved. Паттерн сохранен. Open Pattern Открыть паттерн Show &info &Метаданные... Expor&t pattern as... Э&кспортировать паттерн как... I&nstruments &Инструменты &Add instrument &Добавить инструмент &Clear all О&чистить всё &Save library &Сохранить библиотеку &Export library &Экспортировать библиотеку &Import library И&мпортировать библиотеку Playlist &editor &Редактор списков воспроизведения Playlist: Set song No. %1 Song saved as. Композиция сохранена под другим именем. Playlist: Song No. %1 Список воспроизведения: композиция №%1 Could not export pattern. Не удалось экспортировать паттерн. The document contains unsaved changes. Do you want to save the changes? Некоторые изменения в композиции не были сохранены. Вы хотите сохранить их перед выходом? Info|About Director Дирижёр Undo history &Undo menu Undo Redo Input mode Instrument Инструмент Drumkit Report bug MasterMixerLine Set master volume [%1] Установить общую громкость [%1] Swing Свинг Humanize time Очеловечить время Humanize velocity Очеловечить силу Set humanize time parameter [%1] Установить параметр «человеческого» времени [%1] Set humanize velocity parameter [%1] Установить параметр «человеческой» силы нажатия [%1] Set swing factor [%1] Установить свинг-фактор [%1] MidiTable Event Событие Param. Параметр Action Действие press button to record midi event Нажмите кнопку для записи MIDI-события Mixer Show FX panel Показать панель эффектов Show instrument peaks Показывать пики инструментов Show instrument peaks = On Отображение пиков инструментов = Вкл Show instrument peaks = Off Отображение пиков инструментов = Выкл Set FX %1 level Установить уровень эффекта %1 Set LADSPA FX ( %1 ) volume Установить уровень эффекта LADSPA %1 MixerLine Play sample Воспроизвести сэмпл Mute Тихо Solo Соло Pan Панорама Instrument name (double click to edit) Название инструмента (изменить двойным щелчком) Set instrument volume [%1] Установить громкость инструмента [%1] Set instr. pan [%1] Установить пан. инстр. [%1] PatternEditorPanel Hear new notes Слушать новые ноты Hear new notes = On Слушать новые ноты = Вкл Hear new notes = Off Слушать новые ноты = Выкл Pattern editor - %1 Редактор паттернов — %1 Quantize keyboard/midi events to grid Квантовать события с клавиатуры/MIDI по сетке Quantize incoming keyboard/midi events = On Квантование событий с клавиатуры/MIDI по сетке = Вкл Quantize incoming keyboard/midi events = Off Квантование событий с клавиатуры/MIDI по сетке = Выкл Zoom in Увеличить Zoom out Уменьшить Is not possible to change the pattern size when playing. При воспроизведении размер паттерна изменить нельзя. Select pattern size Выбрать размер паттерна Select grid resolution Выбрать разрешение сетки No pattern selected Ни один паттерн не выбран Select note properties Выбрать свойства ноты Velocity Сила нажатия Pan Панорама Cutoff Срезание Resonance Резонанс Lead and Lag Смещение во времени Loaded Soundlibrary Загружена библиотека звуков destructive mode pre delete settings destructive mode post delete settings Show piano roll editor Показать матричный редактор NoteKey Show drum editor Показать редактор перкуссии PatternFillDialog Fill with selected pattern Заполнить выбранным паттерном PatternFillDialog_UI Alt+C Alt+т Cancel Отменить Form 1 Form 1 &Fill &Заполнить Alt+F Alt+з &Clear О&чистить From: От: To: До: OK ОК PatternPropertiesDialog Pattern properties Свойства паттерна %1#2 %1#2 %1 %1 PatternPropertiesDialog_UI &Cancel О&тменить Alt+C Alt+т &OK &OK Alt+O Alt+о New Pattern Name Новое название паттерна Form1 Form1 Pattern category Категория паттернов Pattern description PianoRollEditor Velocity Сила нажатия Pan Панорама Lead and Lag Смещение во времени PlayerControl Stop Остановить Song Mode Режим композиции Playing. Идёт воспроизведение Stopped. Воспр. остановлено Song mode selected. Выбран режим композиции Pattern Mode Режим паттерна Pattern mode selected. Выбран режим редактора паттерна Jack-transport on/off Переключение транспорта JACK Jack-transport mode = On Режим JACK-транспорт = Вкл Jack-transport mode = Off Режим JACK-транспорт = Выкл New BPM value Новое значение BPM Rewind Назад Play/ Pause Играть/Приостановить Fast Forward Вперёд Pause. Приостановлено. JACK-transport will work only with JACK driver. Транспорт JACK работает только с драйвером JACK. Loop song Зациклить композицию Loop song = On Зацикливание композиции = Вкл Loop song = Off Зацикливание композиции = Выкл Show mixer Показать микшер Mixer Микшер Show Instrument Rack Показать банк инструментов Instrument rack Стойка инструментов BeatCounter Panel on Set BPM / Set BPM and play Jack-Time-Master on/off BC Panel on BC Panel off Count BPM and start PLAY Count and set BPM Jack-Time-Master mode = On Режим Jack-Time-Master Вкл Jack-Time-Master mode = Off Режим Jack-Time-Master Выкл Record Запись Destructive Record Разрушающая запись Record midi events = On Запись MIDI = Вкл Record midi events = Off Запись MIDI = Выкл Destructive mode = Off Разруш. режим = Выкл Destructive mode = On Разруш. режим = Вкл Recalculate Rubberband modified samples if bpm will change Recalculate all samples using Rubberband ON Recalculate all samples using Rubberband OFF Switch metronome on/off PlaylistDialog Song list Список композиций Script Сценарий exec Script Выполнение Add Song to PlayList Добавить композицию в список No Song selected! Ни одна композиция не выбрана! Load Playlist Загрузить список Hydrogen Playlist (*.h2playlist) Список воспроизведения Hydrogen (*.h2playlist) Save Playlist Сохранить список No Song in List or no Song selected! Нет выбранных композиций! Hydrogen Playlist (*.sh) Список воспроизведения Hydrogen (*.sh) Add Script to selected Song Добавить сценарий в выбранную композицию No Script in use! Нет используемого сценария! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Set your Default Editor Укажите используемый редактор No Script selected! Не выбран ни один сценарий! Error loading song. Ошибка при загрузке композиции sort Hydrogen Scripts (*.sh) Сценарии Hydrogen (*.sh) New Script Создать сценарий No Script! Нет сценария! Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. Имя сценария или путь к нему содержит пробелы. Этого не должно быть. &Playlist &Список Add song to Play&list &Добавить композицию в список Add &current song to Playlist Добавить &текущую композицию в список &Remove selected song from Playlist &Удалить текущую песню из списка &Open Playlist &Открыть список &Save Playlist &Сохранить список Save Playlist &as Сохранить список &как &Scripts С&ценарии &Add Script to selected song &Добавить сценарий в выбранную композицию &Edit selected Script &Изменить выбранный сценарий &Remove selected Script &Удалить выбранный сценарий &Create a new Script &Создать выбранный сценарий Rewind Перемотать назад Play/ Pause/ Load selected song Воспроизведение / Пауза / Загрузить выбранную композицию Stop Стоп Fast Forward Перемотать вперёд Please save your song first Сначала сохраните композицию WARNING, the new file is executable by the owner of the file! ВНИМАНИЕ, новый файл содержит бит исполнения, доступный его владельцу Pause. Пауза. Playlist Browser Редактор списка воспроизведения No song selected! Ни одна композиция не выбрана! Playlist: set song no. %1 no Script &New Playlist PlaylistDialog_UI PlayList Browser Просмотр списка воспроизведения Song list Список композиций PreferencesDialog Slow Медленное Normal Нормальное Fast Быстрое <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Open Sound System</b><br>Обычный звуковой драйвер [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">Не скомпилировано</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Драйвер Jack Audio Connection Kit</b><br>Низколатентный звуковой драйвер Preferences Параметры <b>ALSA Driver</b><br> <b>Драйвер ALSA</b><br> <b>PortAudio Driver</b><br> <b>Драйвер PortAudio</b><br> <b>Automatic driver selection</b> <b>Автовыбор драйвера</b> <b>CoreAudio Driver</b><br> <b>Драйвер CoreAudio</b><br> Please restart hydrogen to enable/disable LASH support Перезапустите Hydrogen, чтобы включить или отключить поддержку LASH Driver restart required. Restart driver? Необходим повторный запуск драйвера. Запустить его заново? &Ok &OK &Cancel О&тменить PreferencesDialog_UI Sample rate Частота сэмплирования 44100 44100 48000 48000 Buffer size Размер буфера Device Устройство Input Вход Channel Канал All Все 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 Meters falloff speed Скорость спадания индикаторов Slow Медленно Normal Нормально Fast Быстро Application font Шрифт приложения Mixer font Шрифт в микшере Select font Выбрать шрифт <i>After a font change the application must be restarted.</i> <i>После изменения шрифта приложение необходимо перезапустить.</i> Polyphony Полифония Style Стиль &Cancel О&тменить Alt+C Alt+т &OK &OK Alt+O Alt+о &General О&бщие Alt+R Alt+п Audio &System &Звуковая система Metronome volume Громкость метронома Connect to &Default Output Pair &Соединиться с обычной парой выхода Alt+D Alt+с 88200 88200 96000 96000 &Midi System MIDI-с&истема Midi driver Драйвер MIDI Ignore note-off Игнорировать note-off &Appearance Об&лик Form1 Form1 &Reopen last used song От&крывать последнюю композицию ### ### Restart output Перезагрузить Audio output details Подробности о выводе Post-Fader Постфейдер Pre-Fader Префейдер Track output Вывод дорожки Use lash Использовать LASH first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm Beat counter drift compensation in 1/10 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup Beat counter start offset in ms create per-instrument outputs Раздельные выходы для инструментов Path to the Rubberband command-line utility Расположение утилиты Rubberband Maximum number of bars Максимальное оличество тактов &Reopen last used playlist &Повторно открывать последний список воспроизведения Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? Остались несохранённые изменения, которые будут потеряны. Вы уверены? &Ok &OK &Cancel О&тменить Close dialog! maybe there is some unsaved work on sample. Are you sure? Закрыть диалог! Возможно, осталась какая-то несохранённая работа. Вы уверены? SampleEditor_UI Dialog Диалог P&lay original sample &Сыграть исходный сэмпл &Apply Changes &Применить изменения &Close &Закрыть Adjust sample start frame Adjust sample loop begin frame set processing forward Вперёд reverse Назад pingpong Пингпонг loops Adjust sample end & loop end frame &Play С&ыграть new sample length: Новая длина сэмпла: fade-out type Тип угасания volume Громкость panorama Панорама Sample length to beat: off выкл 1/64 1/64 1/32 1/32 1/16 1/16 1/8 1/8 1/4 1/4 1/2 1/2 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 Pitch the sample in semitones, cents Изменить высоту тона в полутонах, сотых Crispness: Чёткость: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 0 Start Начало: Loop Петля <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Режим</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">петли</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End Конец: "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. Pitch (Semitone,Cent) Высота тона (полутона, сотые) SimpleHTMLBrowser Manual Руководство пользователя Welcome to Hydrogen Знакомство с Hydrogen Don't show this message anymore Спасибо, больше не надо это показывать Ok ОК Documentation index Оглавление SongEditorPanel Create new pattern Создать новый паттерн Move the selected pattern down Опустить выбранный паттерн Move the selected pattern up Повысить выбранный паттерн Clear pattern sequence Стереть данные паттерна Song Editor Редактор композиций Select mode Выделять паттерны Draw mode Рисовать паттерны Warning, this will erase your pattern sequence. Are you sure? Внимание, вся последовательность паттернов будет удалена. Вы уверены? &Ok &OK &Cancel О&тменить stacked mode stacked pattern mode single pattern mode not_categorized Без категории Pattern %1 Паттерн %1 Enable time line edit SongEditorPanelBpmWidget_UI Form Form Edit the bpm value for current beat Изменить значение bpm для текущей доли 500,55 500,55 Edit beat in timeline Указать долю на линии времени 500 500 Bar Такт BPM BPM Delete this BPM Marker Удалить этот маркер BPM Delete BPM Marker Удалить маркер BPM Cancel Отменить Ok ОК SongEditorPanelTagWidget_UI Form Form Tag Метка Cancel Отменить Ok ОК SongEditorPatternList Copy Скопировать Delete Удалить Properties Свойства Fill/Clear ... Заполнить/Очистить... Save Pattern Сохранить паттерн Load Pattern Загрузить паттерн Open Pattern Открыть паттерн Hydrogen Pattern (*.h2pattern) Паттерн Hydrogen (*.h2pattern) Pattern 1 Паттерн 1 not_categorized Без категории Virtual Pattern Виртуальный паттерн The pattern-file exists. Overwrite the existing pattern? Такой файл паттерна уже существует. Перезаписать его? &Ok &OK &Cancel О&тменить Export Pattern SongPropertiesDialog Song properties Метаданные SongPropertiesDialog_UI Notes Ноты Author Автор Song name Название композиции &Cancel О&тменить Alt+C Alt+т &OK &OK Alt+O Alt+о Form1 Form1 License Лицензия SoundLibraryExportDialog Export Sound Library Экспортировать библиотеку звуков Directory SoundLibraryExportDialog_UI Dialog Диалог Browse Просмотр Export Экспорт SoundLibraryImportDialog Sound Library import Импорт звуковой библиотеки Sound library Библиотека звуков Status Статус Updating SoundLibrary list... Список звуковых библиотек обновляется... Installed Установлена New Новая Author: %1 Автор: %1 Downloading SoundLibrary... Скачивается библиотека звуков... Import drumkit Импортировать драмкит SoundLibrary imported in %1 Библиотека звуков импортирована в %1 An error occurred importing the SoundLibrary. Во время импорта библиотеки звуков произошла ошибка. Drumkits Драмкиты Songs Композиции Patterns Паттерны License: %1 Лицензия: %1 SoundLibraryImportDialog_UI Dialog Диалог Internet Интернет Update list Обновить список Sound Library Name Название библиотеки звуков Sound library Info Сводка по звуковой библиотеке Author... Автор... Download and install Скачать и установить Local file Локальный файл Browse... Просмотреть... Install Установить 1 1 License... Лицензия... Edit server list Изменить список серверов Close Закрыть SoundLibraryPanel Load Загрузить Delete Удалить Export Экспортировать System drumkits Системные драмкиты User drumkits Пользовательские драмкиты &Ok &OK &Cancel О&тменить Songs Композиции Patterns Паттерны Error loading song. Ошибка при загрузке композиции. Properties Свойства Warning, the selected pattern will be deleted from disk. Are you sure? Предупреждение: выбранный паттерн будет удален с диска. Вы уверены? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Диалог Name Название Author Автор Information Информация License Лицензия Save Сохранить Cancel Отменить Save changes made to instruments into sound library Сохранить в библиотеку изменения, внесенные в инструменты SoundLibraryRepositoryDialog Edit repository settings Изменить параметры репозитория Edit server list Изменить список серверов URL URL SoundLibraryRepositoryDialog_UI Dialog Диалог Add Добавить Delete Удалить SoundLibrarySaveDialog Save Sound Library Сохранить библиотеку звуков Please supply at least a valid name Укажите хотя бы корректное название Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Диалог Name Название Author Автор Information Информация Cancel Отменить License Лицензия Save Сохранить SoundLibraryTree Sound library Библиотека звуков VirtualPatternDialog Select virtual pattern Выберите виртуальный паттерн VirtualPatternDialog_UI Dialog Диалог OK ОК Cancel Отменить hydrogen-0.9.6-beta3/data/i18n/hydrogen.sv.qm000066400000000000000000000450121211146647700206510ustar00rootroot00000000000000nrr'^=dM>&Z|[F )1+"6 v66=x.'!)%_+3u8\95E<?ACbb=bAbBI)U>>".I<II#JI;?I;IBIBIC2n3n>e ,<>,@=,Bbϕ3vv>v@ޱeho o:ls.7vW^8k2-r`2<D)iD+R'''#D%U*[_p".~># #*@w֣<֣A=>p .r4 En,u4p4= Ia.f s_5"m!1moo&I(@{ lc#33?3AN3\tz2 St +s' 3b @e; Cn o ~$ ~+ T3 ?5 A9 _, 3@ I Iu I I$U I+ I1 I6L I8 I; I=n I@  c v a $0  9 $& %+^ gn*q 0 /<| D' s'[ ' = =3O 5 "Ul @ C4 FPJ0 `n j w 0< 9 $ yE) {v . 1C ͼ ӽ^(8: 3^N$R=je$me(Jw>/L|&6Xd bE4I'b.aN!?st`9h4A+ed?biCpL<b>Huvud kodare och mantainer:</b><br>$Main coder and mantainer:
     AboutDialog.<b>Project sida</b><br>Project page
     AboutDialogOmAbout AboutDialog&Upphovsmn&AuthorsAboutDialog_UI&Licens&LicenseAboutDialog_UIOmA&boutAboutDialog_UIOm HydrogenAbout HydrogenAboutDialog_UIBuffer storlek Buffer sizeAudioEngineInfoForm_UIKopplad till Connected toAudioEngineInfoForm_UIMnsterPatternsAudioEngineInfoForm_UIProcess tid Process timeAudioEngineInfoForm_UIValt instrumentSelected instrumentAudioEngineInfoForm_UIValt mnsterSelected patternAudioEngineInfoForm_UISng position Song positionAudioEngineInfoForm_UI AvbrytCancelAudioFileBrowser_UI,### Drumkit upphovsman### Drumkit authorDrumkitManager_UI ### Drumkit namn### Drumkit nameDrumkitManager_UIv### Detta drumkit kommer att installeras zncxbmzbxcmznxbcmz4### The drumkit will be installed zncxbmzbxcmznxbcmzDrumkitManager_UI<b> Ladda ner mer drumkit p <br> http://www.hydrogen-music.org </b>E Download more drumkits at
    http://www.hydrogen-music.org
    DrumkitManager_UIUpphovsmanAuthorDrumkitManager_UIBlddraBrowseDrumkitManager_UITa bort drumkitDelete drumkitDrumkitManager_UIDrumkit katalogDrumkit directoryDrumkitManager_UIDrumkit filnamnDrumkit filenameDrumkitManager_UIDrumkit namn Drumkit nameDrumkitManager_UIExporteraExportDrumkitManager_UIImporteraImportDrumkitManager_UI LaddaLoadDrumkitManager_UILadda drumkit Load drumkitDrumkitManager_UI SparaSaveDrumkitManager_UIExportera sng Export songExportSongDialog&Blddra... &Browse...ExportSongDialog_UI &Stng&CloseExportSongDialog_UI&Exportera&ExportExportSongDialog_UI<Exportera Hela Sngen till WAVExport Whole Song to WAVExportSongDialog_UIExport filnamnExport filenameExportSongDialog_UIFX p/av FX on/off FxMixerLine&Avbryt&Cancel$H2Core::SoundLibraryPropertiesDialog(Drumkit laddat: [1%]Drumkit loaded: [%1] HydrogenAppSng Editor Song Editor HydrogenAppFilter resonansFilter resonanceInstrumentEditor(Nytt instrument namnNew instrument nameInstrumentEditor,Slumpvald pitch faktorRandom pitch factorInstrumentEditor4Visa instrument egenskaperShow instrument propertiesInstrumentEditor*Visa lager egenskaperShow layers propertiesInstrumentEditorRensa noter Clear notesInstrumentLine&Slumpvald hastighetRandomize velocityInstrumentLine&ndra FX parametrarEdit FX parametersLadspaFXMixerLineEffekt retur Effect returnLadspaFXMixerLine FX frbikoppling FX bypassLadspaFXMixerLineLadspa FX namnLadspa FX nameLadspaFXMixerLineAktiveraActivateLadspaFXPropertiesDeaktivera DeactivateLadspaFXProperties.LADSPA FX %1 EgenskaperLADSPA FX %1 PropertiesLadspaFXPropertiesInget plugin No pluginLadspaFXPropertiesVlj FX Select FXLadspaFXProperties2[%1] LADSPA FX Egenskaper[%1] LADSPA FX PropertiesLadspaFXPropertiesGrupperGroupsLadspaFXSelectorVlj LADSPA FXSelect LADSPA FXLadspaFXSelector### fx typ ### fx typeLadspaFXSelector_UI&Avbryt&CancelLadspaFXSelector_UIMainForm &Om...&AboutMainForm&Avbryt&CancelMainForm&No&DiscardMainForm&Exportera sng &Export songMainForm&Ny&NewMainForm&ppna...&OpenMainForm"&Instllningar... &PreferencesMainForm&Avsluta&QuitMainForm &Spara&SaveMainForm Anvndar &manual &User manualMainForm AvbrytCancelMainForm>Visa inte detta meddelande igenDon't show this message anymoreMainForm,Kunde inte ladda sng.Error loading song.MainForm@Kunde inte starta ljud drivrutinError starting audio driverMainForm&Exportera &MIDI filExport &MIDI fileMainForm$Exportera MIDI filExport MIDI fileMainFormHydrogen Klar.Hydrogen Ready.MainForm0Hydrogen Sng (*.h2song)Hydrogen Song (*.h2song)MainFormPJack drivrutin: kan inte aktivera klient#Jack driver: cannot activate clientMainFormVJack drivrutin: kan inte koppla output port'Jack driver: cannot connect output portMainFormFJack drivrutin: fel i port register#Jack driver: error in port registerMainForm@Jack drivrutin: server nedstngdJack driver: server shutdownMainForm Midi fil (*.mid)Midi file (*.mid)MainFormppna &Demo... Open &DemoMainFormppna &tidigare Open &recentMainFormppna sng Open songMainFormSpara sng Save songMainForm.Visa &audio engine infoShow &audio engine infoMainForm(Oknd ljud drivrutinUnknown audio driverMainForm Frmnskliga tid Humanize timeMasterMixerLine,Frmnskliga hastighetHumanize velocityMasterMixerLineVisa FX panel Show FX panelMixer`Instrument namn (dubbel klicka fr att redigera)&Instrument name (double click to edit) MixerLineLjudlstMute MixerLineSpela sample Play sample MixerLineHr nya noterHear new notesPatternEditorPanel$Hr nya noter = AvHear new notes = OffPatternEditorPanel$Hr nya noter = PHear new notes = OnPatternEditorPaneldEj mjligt att ndra i mnstret medans den spelas.8Is not possible to change the pattern size when playing.PatternEditorPanel&Mnster editor - %1Pattern editor - %1PatternEditorPanel(Vlj grid upplsningSelect grid resolutionPatternEditorPanel(Vlj mnster storlekSelect pattern sizePatternEditorPanelZooma inZoom inPatternEditorPanelZooma utZoom outPatternEditorPanel*Fyll med valt mnsterFill with selected patternPatternFillDialog &Rensa&ClearPatternFillDialog_UI &Fyll&FillPatternFillDialog_UI AvbrytCancelPatternFillDialog_UI Frn:From:PatternFillDialog_UI Till:To:PatternFillDialog_UI$Mnster egenskaperPattern propertiesPatternPropertiesDialog&Avbryt&CancelPatternPropertiesDialog_UI"Nytt Mnster NamnNew Pattern NamePatternPropertiesDialog_UISnabbt Fram Fast Forward PlayerControl`JACK-transport funkar endast med JACK drivrutin./JACK-transport will work only with JACK driver. PlayerControl0Jack-transport mode = AvJack-transport mode = Off PlayerControl0Jack-transport mode = PJack-transport mode = On PlayerControl(Jack-transport p/avJack-transport on/off PlayerControlLoopa sng Loop song PlayerControlLoopa sng = AvLoop song = Off PlayerControlLoopa sng = PLoop song = On PlayerControlNytt BPM vrde New BPM value PlayerControlMnster Lge Pattern Mode PlayerControl$Mnster lge valt.Pattern mode selected. PlayerControlSpela/ Pause Play/ Pause PlayerControlSpelar.Playing. PlayerControl TillbakaspolningRewind PlayerControlSng Lge Song Mode PlayerControlSng lge valt.Song mode selected. PlayerControl StoppStop PlayerControlStoppad.Stopped. PlayerControl,Kunde inte ladda sng.Error loading song.PlaylistDialogSnabbt Fram Fast ForwardPlaylistDialog TillbakaspolningRewindPlaylistDialog StoppStopPlaylistDialog&Avbryt&CancelPreferencesDialog2<b>ALSA Drivrutin</b><br>ALSA Driver
    PreferencesDialogJ<b>Automatisk drivrutins vljning</b>!Automatic driver selectionPreferencesDialog<b>Jack Audio Connection Kit Driver</b><br>Lg latens ljud drivrutinCJack Audio Connection Kit Driver
    Low latency audio driverPreferencesDialogx<b>Open Sound System</b><br>Simpel ljud drivrutin [/dev/dsp]:Open Sound System
    Simple audio driver [/dev/dsp]PreferencesDialog<<b>PortAudio Drivrutin</b><br>PortAudio Driver
    PreferencesDialogf<br><b><font color="red">Inte kompilerad</font></b>0
    Not compiledPreferencesDialog SnabbFastPreferencesDialogInstllningar PreferencesPreferencesDialogLngsamSlowPreferencesDialog&Utseende &AppearancePreferencesDialog_UI&Avbryt&CancelPreferencesDialog_UI&Allmnt&GeneralPreferencesDialog_UI<i>Efter en teckensnitts ndring s mste applikation startas om.</i>=After a font change the application must be restarted.PreferencesDialog_UIAllaAllPreferencesDialog_UI Applikation fontApplication fontPreferencesDialog_UILjud &System Audio &SystemPreferencesDialog_UIBuffer storlek Buffer sizePreferencesDialog_UI KanalChannelPreferencesDialog_UI EnhetDevicePreferencesDialog_UI SnabbFastPreferencesDialog_UIMetronome volymMetronome volumePreferencesDialog_UIMidi drivrutin Midi driverPreferencesDialog_UI"Mixer teckensnitt Mixer fontPreferencesDialog_UIPolyfoni PolyphonyPreferencesDialog_UI Vlj teckensnitt Select fontPreferencesDialog_UILngsamSlowPreferencesDialog_UIStilStylePreferencesDialog_UI&Avbryt&Cancel SampleEditor &Stng&CloseSampleEditor_UI&Dokumentation indexDocumentation indexSimpleHTMLBrowser>Visa inte detta meddelande igenDon't show this message anymoreSimpleHTMLBrowser.Vlkommen till HydrogenWelcome to HydrogenSimpleHTMLBrowser&Avbryt&CancelSongEditorPanel*Rensa mnster sekvensClear pattern sequenceSongEditorPanel$Skapa nytt mnsterCreate new patternSongEditorPanel.Flytta ner valt mnsterMove the selected pattern downSongEditorPanel.Flytta upp valt mnsterMove the selected pattern upSongEditorPanelVal lge Select modeSongEditorPanelSng Editor Song EditorSongEditorPanelVarning, detta kommer att radera din mnster sekvens. r du sker?=Warning, this will erase your pattern sequence. Are you sure?SongEditorPanel AvbrytCancelSongEditorPanelBpmWidget_UI AvbrytCancelSongEditorPanelTagWidget_UI&Avbryt&CancelSongEditorPatternListKopieraCopySongEditorPatternListTa bortDeleteSongEditorPatternListFyll/Rensa ...Fill/Clear ...SongEditorPatternListEgenskaper PropertiesSongEditorPatternListSng egenskaperSong propertiesSongPropertiesDialog&Avbryt&CancelSongPropertiesDialog_UIUpphovsmanAuthorSongPropertiesDialog_UIAnteckningarNotesSongPropertiesDialog_UILt namn Song nameSongPropertiesDialog_UIBlddraBrowseSoundLibraryExportDialog_UIExporteraExportSoundLibraryExportDialog_UIUpphovsman: %1 Author: %1SoundLibraryImportDialog"Importera drumkitImport drumkitSoundLibraryImportDialogMnsterPatternsSoundLibraryImportDialog&Avbryt&CancelSoundLibraryPanelTa bortDeleteSoundLibraryPanel,Kunde inte ladda sng.Error loading song.SoundLibraryPanelExporteraExportSoundLibraryPanel LaddaLoadSoundLibraryPanelMnsterPatternsSoundLibraryPanelEgenskaper PropertiesSoundLibraryPanelUpphovsmanAuthorSoundLibraryPropertiesDialog_UI AvbrytCancelSoundLibraryPropertiesDialog_UITa bortDeleteSoundLibraryRepositoryDialog_UIUpphovsmanAuthorSoundLibrarySaveDialog_UI AvbrytCancelSoundLibrarySaveDialog_UI AvbrytCancelVirtualPatternDialog_UIhydrogen-0.9.6-beta3/data/i18n/hydrogen.sv.ts000066400000000000000000006440371211146647700206760ustar00rootroot00000000000000 AboutDialog About Om <b>Project page</b><br> <b>Project sida</b><br> <b>Main coder and mantainer:</b><br> <b>Huvud kodare och mantainer:</b><br> <b>Website</b><br> <b>Mailing lists</b><br> AboutDialog_UI About Hydrogen Om Hydrogen A&bout Om &Authors &Upphovsmän &License &Licens &OK Alt+O ### <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> AudioEngineInfoForm Audio Engine Info AudioEngineInfoForm_UI Process time Process tid Song position Sång position Patterns Mönster Selected pattern Valt mönster Selected instrument Valt instrument Buffer size Buffer storlek Connected to Kopplad till Form1 ### Sample rate Frames Ticks Song state Audio engine state Playing notes Sampler Synth Sequencer MIDI input Name Audio output Realtime frames AudioFileBrowser Audio File Browser Size: %1 bytes Samplerate: %1 s Name: Size: Samplerate: Sample length: Please do not preview samples which are longer than 10 minutes! Sample length: AudioFileBrowser_UI Dialog Open Name: Samplerate: Size: Length: Cancel Avbryt Pla&y samples by clicking &Up &Home &Play Sample &Filename to instrument name &Stop View hidden folders Be careful, this change all Layer velocity settings Set automatic velocity Director Director Director_UI Dialog DownloadWidget (%1/%2 KiB) - ETA %3 DrumkitManager_UI Load Ladda Load drumkit Ladda drumkit Delete drumkit Ta bort drumkit ### Drumkit author ### Drumkit upphovsman ### Drumkit name ### Drumkit namn Save Spara Author Upphovsman Drumkit name Drumkit namn Import Importera Browse Bläddra Drumkit filename Drumkit filnamn ### The drumkit will be installed zncxbmzbxcmznxbcmz ### Detta drumkit kommer att installeras zncxbmzbxcmznxbcmz <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> <b> Ladda ner mer drumkit på <br> http://www.hydrogen-music.org </b> Export Exportera Drumkit directory Drumkit katalog Form1 ### Drumkit info Info ExportSongDialog Export song Exportera sång The file %1 exists. Overwrite the existing file? Export to a single track Export to seperate tracks Both ExportSongDialog_UI Export Whole Song to WAV Exportera Hela Sången till WAV Export filename Export filnamn &Browse... &Bläddra... &Export &Exportera &Close &Stäng Alt+C Alt+E Alt+B Samplerate in Hz: 22050 44100 48000 96000 192000 SampleDepth in Bit: 8 16 24 32 Templates: WAV in CD quality "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" Interpolation: Choose type of interpolation methode Linear Cosine Third Cubic Hermite Enable tempo changing TimeLine BPM Enable use of rubberband batch processor Rubberbad Batch FileBrowser %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off FX på/av Master output H2Core::SongEditorPanelBpmWidget BPM H2Core::SongEditorPanelTagWidget Tag H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties &Ok &Cancel &Avbryt This is not possible, you can only save changes inside instruments to the current loaded sound library Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? Saving of this drumkit failed. HydrogenApp Drumkit loaded: [%1] Drumkit laddat: [1%] Song Editor Sång Editor Instrument + Pattern Mixer InstrumentEditor Random pitch factor Slumpvald pitch faktor Filter resonance Filter resonans Show instrument properties Visa instrument egenskaper Show layers properties Visa lager egenskaper New instrument name Nytt instrument namn Filter Cutoff Attack Decay Sustain Release Instrument gain Layer gain Layer pitch (Coarse) Layer pitch (Fine) General Layers Stop the current playing instrument-note before trigger the next note sample. Auto-Stop-Note InstrumentLine Clear notes Rensa noter Randomize velocity Slumpvald hastighet Delete instrument Fill notes ... Fill all notes Fill 1/2 notes Fill 1/3 notes Fill 1/4 notes Fill 1/6 notes Fill 1/8 notes Mute instrument Solo InstrumentRack Show Instrument editor Instrument Show sound library Sound library LadspaFXMixerLine FX bypass FX förbikoppling Edit FX parameters Ändra FX parametrar Ladspa FX name Ladspa FX namn Effect return Effekt retur LadspaFXProperties Select FX Välj FX Activate Aktivera [%1] LADSPA FX Properties [%1] LADSPA FX Egenskaper Deactivate Deaktivera LADSPA FX %1 Properties LADSPA FX %1 Egenskaper No plugin Inget plugin Remove FX LadspaFXSelector Select LADSPA FX Välj LADSPA FX Groups Grupper Stereo Mono Not supported Recently Used Alphabetic List Categorized LadspaFXSelector_UI &Cancel &Avbryt ### fx type ### fx typ Form1 Alt+C &OK Alt+O ### fx label ### fx ID 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> ### fx name 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> ### FX maker 1 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> ### copyright 1 2 3 LayerPreview Layer %1: Min. velocity = %2, Max. velocity = %3 Velocity = %1 MainForm Error loading song. Kunde inte ladda sång. Hydrogen Ready. Hydrogen Klar. &New &Ny &Open &Öppna... Open &Demo Öppna &Demo... Open &recent Öppna &tidigare &Save &Spara &Export song &Exportera sång Export &MIDI file Exportera &MIDI fil &Preferences &Inställningar... &Quit &Avsluta Show &audio engine info Visa &audio engine info &User manual Användar &manual &About &Om... &Discard &No &Cancel &Avbryt Hydrogen Song (*.h2song) Hydrogen Sång (*.h2song) Save song Spara sång Open song Öppna sång Cancel Avbryt Midi file (*.mid) Midi fil (*.mid) Export MIDI file Exportera MIDI fil Unknown audio driver Okänd ljud drivrutin Error starting audio driver Kunde inte starta ljud drivrutin Jack driver: server shutdown Jack drivrutin: server nedstängd Jack driver: cannot activate client Jack drivrutin: kan inte aktivera klient Jack driver: cannot connect output port Jack drivrutin: kan inte koppla output port Jack driver: error in port register Jack drivrutin: fel i port register &Project Save &as... &Tools &Mixer &Instrument Rack De&bug Print Objects &Info Song saved. Unknown error %1 Clear all instruments? Ok You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.<br><br>Thank you! Could not save song. Open &Pattern Hydrogen Pattern (*.h2pattern) Save Pattern as ... Pattern saved. Open Pattern Don't show this message anymore Visa inte detta meddelande igen Playlist: Set song No. %1 Show &info Expor&t pattern as... I&nstruments &Add instrument &Clear all &Save library &Export library Playlist &editor &Import library Info|About Song saved as. Playlist: Song No. %1 Could not export pattern. The document contains unsaved changes. Do you want to save the changes? Director Undo history &Undo menu Undo Redo Input mode Instrument Drumkit Report bug MasterMixerLine Humanize velocity Förmänskliga hastighet Humanize time Förmänskliga tid Swing Set master volume [%1] Set humanize time parameter [%1] Set humanize velocity parameter [%1] Set swing factor [%1] MidiTable Event Param. Action press button to record midi event Mixer Show FX panel Visa FX panel Show instrument peaks Set FX %1 level Show instrument peaks = On Show instrument peaks = Off Set LADSPA FX ( %1 ) volume MixerLine Play sample Spela sample Mute Ljudlöst Instrument name (double click to edit) Instrument namn (dubbel klicka för att redigera) Solo Pan Set instrument volume [%1] Set instr. pan [%1] PatternEditorPanel Select pattern size Välj mönster storlek Select grid resolution Välj grid upplösning Hear new notes Hör nya noter Zoom in Zooma in Zoom out Zooma ut Pattern editor - %1 Mönster editor - %1 Hear new notes = On Hör nya noter = På Hear new notes = Off Hör nya noter = Av Is not possible to change the pattern size when playing. Ej möjligt att ändra i mönstret medans den spelas. Quantize keyboard/midi events to grid No pattern selected Quantize incoming keyboard/midi events = On Quantize incoming keyboard/midi events = Off Select note properties Velocity Pan Cutoff Resonance Lead and Lag Loaded Soundlibrary NoteKey destructive mode pre delete settings destructive mode post delete settings Show piano roll editor Show drum editor PatternFillDialog Fill with selected pattern Fyll med valt mönster PatternFillDialog_UI &Fill &Fyll &Clear &Rensa To: Till: From: Från: Cancel Avbryt Form 1 Alt+F Alt+C OK PatternPropertiesDialog Pattern properties Mönster egenskaper %1#2 %1 PatternPropertiesDialog_UI &Cancel &Avbryt New Pattern Name Nytt Mönster Namn Form1 Alt+C &OK Alt+O Pattern category Pattern description PianoRollEditor Velocity Pan Lead and Lag PlayerControl Rewind Tillbakaspolning Play/ Pause Spela/ Pause Stop Stopp Fast Forward Snabbt Fram Loop song Loopa sång Pattern Mode Mönster Läge Song Mode Sång Läge Jack-transport on/off Jack-transport på/av Playing. Spelar. Stopped. Stoppad. Song mode selected. Sång läge valt. Pattern mode selected. Mönster läge valt. Jack-transport mode = On Jack-transport mode = På Jack-transport mode = Off Jack-transport mode = Av JACK-transport will work only with JACK driver. JACK-transport funkar endast med JACK drivrutin. New BPM value Nytt BPM värde Loop song = On Loopa sång = På Loop song = Off Loopa sång = Av Show mixer Mixer Show Instrument Rack Instrument rack Pause. BeatCounter Panel on Set BPM / Set BPM and play Jack-Time-Master on/off BC Panel on BC Panel off Count BPM and start PLAY Count and set BPM Jack-Time-Master mode = On Jack-Time-Master mode = Off Record Destructive Record Record midi events = On Record midi events = Off Destructive mode = Off Destructive mode = On Recalculate Rubberband modified samples if bpm will change Recalculate all samples using Rubberband ON Recalculate all samples using Rubberband OFF Switch metronome on/off PlaylistDialog Song list Script exec Script Add Song to PlayList No Song selected! Load Playlist Hydrogen Playlist (*.h2playlist) Save Playlist No Song in List or no Song selected! Hydrogen Playlist (*.sh) Add Script to selected Song No Script in use! No Default Editor Set. Please set your Default Editor Do not use a console based Editor Sorry, but this will not work for the moment. Set your Default Editor No Script selected! Error loading song. Kunde inte ladda sång. sort Hydrogen Scripts (*.sh) New Script Script name or path to the script contains whitespaces. IMPORTANT The path to the script and the scriptname must without whitespaces. No Script! &Playlist Add song to Play&list Add &current song to Playlist &Remove selected song from Playlist &Open Playlist &Save Playlist Save Playlist &as &Scripts &Add Script to selected song &Edit selected Script &Remove selected Script &Create a new Script Rewind Tillbakaspolning Play/ Pause/ Load selected song Stop Stopp Fast Forward Snabbt Fram Please save your song first WARNING, the new file is executable by the owner of the file! Pause. Playlist Browser No song selected! Playlist: set song no. %1 no Script &New Playlist PlaylistDialog_UI PlayList Browser Song list PreferencesDialog Preferences Inställningar Slow Långsam Fast Snabb <b>Automatic driver selection</b> <b>Automatisk drivrutins väljning</b> <b>Open Sound System</b><br>Simple audio driver [/dev/dsp] <b>Open Sound System</b><br>Simpel ljud drivrutin [/dev/dsp] <br><b><font color="red">Not compiled</font></b> <br><b><font color="red">Inte kompilerad</font></b> <b>Jack Audio Connection Kit Driver</b><br>Low latency audio driver <b>Jack Audio Connection Kit Driver</b><br>Låg latens ljud drivrutin <b>ALSA Driver</b><br> <b>ALSA Drivrutin</b><br> <b>PortAudio Driver</b><br> <b>PortAudio Drivrutin</b><br> Normal <b>CoreAudio Driver</b><br> Please restart hydrogen to enable/disable LASH support Driver restart required. Restart driver? &Ok &Cancel &Avbryt PreferencesDialog_UI &Cancel &Avbryt &General &Allmänt Audio &System Ljud &System Polyphony Polyfoni Device Enhet Buffer size Buffer storlek Metronome volume Metronome volym Midi driver Midi drivrutin All Alla Channel Kanal &Appearance &Utseende Application font Applikation font Style Stil Select font Välj teckensnitt Slow Långsam Fast Snabb Mixer font Mixer teckensnitt <i>After a font change the application must be restarted.</i> <i>Efter en teckensnitts ändring så måste applikation startas om.</i> Form1 Alt+C &OK Alt+O &Reopen last used song Alt+R ### Sample rate 44100 48000 88200 96000 Connect to &Default Output Pair Alt+D &Midi System Ignore note-off 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Input Normal Meters falloff speed Restart output Audio output details Post-Fader Pre-Fader Track output Use lash first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm Beat counter drift compensation in 1/10 ms second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup Beat counter start offset in ms create per-instrument outputs Path to the Rubberband command-line utility Maximum number of bars &Reopen last used playlist Interpolate resampling Linear Cosine Third Cubic Hermite Default interface layout Single pane Tabbed SampleEditor Unsaved changes left. This changes will be lost. Are you sure? &Ok &Cancel &Avbryt Close dialog! maybe there is some unsaved work on sample. Are you sure? SampleEditor_UI Dialog P&lay original sample &Apply Changes &Close &Stäng Adjust sample start frame Adjust sample loop begin frame set processing forward reverse pingpong loops Adjust sample end & loop end frame &Play new sample length: fade-out type volume panorama Sample length to beat: off 1/64 1/32 1/16 1/8 1/4 1/2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Pitch the sample in semitones, cents Crispness: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 Start Loop <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> End "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. Pitch (Semitone,Cent) SimpleHTMLBrowser Welcome to Hydrogen Välkommen till Hydrogen Don't show this message anymore Visa inte detta meddelande igen Documentation index Dokumentation index Manual Ok SongEditorPanel Song Editor Sång Editor Clear pattern sequence Rensa mönster sekvens Create new pattern Skapa nytt mönster Move the selected pattern down Flytta ner valt mönster Move the selected pattern up Flytta upp valt mönster Select mode Val läge Warning, this will erase your pattern sequence. Are you sure? Varning, detta kommer att radera din mönster sekvens. Är du säker? &Cancel &Avbryt Draw mode &Ok stacked mode stacked pattern mode single pattern mode not_categorized Enable time line edit Pattern %1 SongEditorPanelBpmWidget_UI Form Edit the bpm value for current beat 500,55 Edit beat in timeline 500 Bar BPM Delete this BPM Marker Delete BPM Marker Cancel Avbryt Ok SongEditorPanelTagWidget_UI Form Tag Cancel Avbryt Ok SongEditorPatternList Copy Kopiera Delete Ta bort Fill/Clear ... Fyll/Rensa ... Properties Egenskaper Save Pattern Load Pattern Open Pattern Hydrogen Pattern (*.h2pattern) Virtual Pattern Pattern 1 not_categorized The pattern-file exists. Overwrite the existing pattern? &Ok &Cancel &Avbryt Export Pattern SongPropertiesDialog Song properties Sång egenskaper SongPropertiesDialog_UI Song name Låt namn Author Upphovsman Notes Anteckningar &Cancel &Avbryt Form1 &OK Alt+O Alt+C License SoundLibraryExportDialog Export Sound Library Directory SoundLibraryExportDialog_UI Dialog Browse Bläddra Export Exportera SoundLibraryImportDialog Sound Library import Sound library Status Updating SoundLibrary list... Installed New Author: %1 Upphovsman: %1 Downloading SoundLibrary... Import drumkit Importera drumkit SoundLibrary imported in %1 An error occurred importing the SoundLibrary. Drumkits Songs Patterns Mönster License: %1 SoundLibraryImportDialog_UI Dialog Internet Update list Sound Library Name Sound library Info Author... Download and install Local file Browse... Install 1 License... Edit server list Close SoundLibraryPanel Load Ladda Export Exportera Delete Ta bort System drumkits User drumkits &Ok &Cancel &Avbryt Songs Patterns Mönster Error loading song. Kunde inte ladda sång. Properties Egenskaper Warning, the selected pattern will be deleted from disk. Are you sure? It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. "%1"is a system drumkit and can't be deleted. Warning, the "%1" drumkit will be deleted from disk. Are you sure? Drumkit deletion failed. SoundLibraryPropertiesDialog_UI Dialog Name Author Upphovsman Information License Save Cancel Avbryt Save changes made to instruments into sound library SoundLibraryRepositoryDialog Edit repository settings Edit server list URL SoundLibraryRepositoryDialog_UI Dialog Add Delete Ta bort SoundLibrarySaveDialog Save Sound Library Please supply at least a valid name Saving of this drumkit failed. SoundLibrarySaveDialog_UI Dialog Name Author Upphovsman Information Cancel Avbryt License Save SoundLibraryTree Sound library VirtualPatternDialog Select virtual pattern VirtualPatternDialog_UI Dialog OK Cancel Avbryt hydrogen-0.9.6-beta3/data/i18n/stats.py000077500000000000000000000031221211146647700175530ustar00rootroot00000000000000#!/usr/bin/env python from xml.dom import minidom, Node def parse_ts(filename): doc = minidom.parse(filename) root_node = doc.documentElement total = 0 unfinished = 0 obsolete = 0 for node in root_node.childNodes: if node.nodeName == "context": context_node = node for context_child in context_node.childNodes: if context_child.nodeName == "message": message_node = context_child for message_node_child in message_node.childNodes: if message_node_child.nodeName == "translation": #print "translation" translation_node = message_node_child total += 1 if translation_node.attributes: translation_type = translation_node.attributes["type"].value #print translation_type if translation_type == "unfinished": unfinished += 1 elif translation_type == "obsolete": obsolete += 1 #print "Total: %d" % (total - obsolete) #print "obsolete %d" % obsolete #print "Unfinished: %d" % unfinished completed = (total - obsolete) - unfinished perc = 100.0 / (total - obsolete) * completed print "|| %s\t|| [%d/%d]\t|| %d%%\t||" % (filename, completed, total - obsolete, perc) parse_ts("hydrogen.cs.ts") parse_ts("hydrogen.de.ts") parse_ts("hydrogen.ca.ts") parse_ts("hydrogen.fr.ts") parse_ts("hydrogen.it.ts") parse_ts("hydrogen.nl.ts") parse_ts("hydrogen.pt_BR.ts") parse_ts("hydrogen.sv.ts") parse_ts("hydrogen.es.ts") parse_ts("hydrogen.hu_HU.ts") parse_ts("hydrogen.ja.ts") parse_ts("hydrogen.pl.ts") parse_ts("hydrogen.ru.ts") parse_ts("hydrogen.hr.ts") parse_ts("hydrogen.el.ts") hydrogen-0.9.6-beta3/data/i18n/updateTranslations.sh000077500000000000000000000017041211146647700222670ustar00rootroot00000000000000#!/bin/sh echo "Updating translation (*.ts) files" cd ../../src/gui if [ "$QTDIR" ]; then LUPDATE="$QTDIR/bin/lupdate" LRELEASE="$QTDIR/bin/lrelease" else LUPDATE=$(which lupdate) LRELEASE=$(which lrelease) fi; UI=`find . | grep "\.ui$"` CPP=`find . | grep "\.cpp$"` H=`find . | grep "\.h$"` FILES="$UI $CPP $H" CMD="$LUPDATE -noobsolete ${FILES} -ts" $CMD ../../data/i18n/hydrogen.it.ts $CMD ../../data/i18n/hydrogen.es.ts $CMD ../../data/i18n/hydrogen.ru.ts $CMD ../../data/i18n/hydrogen.fr.ts $CMD ../../data/i18n/hydrogen.pt_BR.ts $CMD ../../data/i18n/hydrogen.hu_HU.ts $CMD ../../data/i18n/hydrogen.pl.ts $CMD ../../data/i18n/hydrogen.nl.ts $CMD ../../data/i18n/hydrogen.ja.ts $CMD ../../data/i18n/hydrogen.de.ts $CMD ../../data/i18n/hydrogen.sv.ts $CMD ../../data/i18n/hydrogen.hr.ts $CMD ../../data/i18n/hydrogen.cs.ts $CMD ../../data/i18n/hydrogen.el.ts echo "Creating *.qm files" cd ../../data/i18n $LRELEASE *.ts echo "Stats" ./stats.py hydrogen-0.9.6-beta3/data/img/000077500000000000000000000000001211146647700160375ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/000077500000000000000000000000001211146647700170015ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/about/000077500000000000000000000000001211146647700201135ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/about/aboutLogo.png000066400000000000000000000231751211146647700225640ustar00rootroot00000000000000PNG  IHDRd<tbKGD pHYs  tIME">6 IDATxwx' AD[bYeI;ǛvNKnMr۽\6)ώ[ֱ8r(VDQl` DP<33ٺ~B!sRB! B!P0A! &!B!BB`B!LB! B! &!B!B( BB!LB! B!P0A! &!B( BB`re<6_~[P!yQ(5,V,wlGeE)$ x rSB( DOݏ|̶>zx}~ _gp-7C"DQL!P0AE:W.Nٖk3ϽHĴ@B BB`B!LB! B!4h+ˢR;n9&Riy>Bw^{MY!BJh_㟠V!&}~?FGӏ7vήyopf~ᑴ,e3~㻘&;0dAP$= tMhЧ6рoEEy)l(r0 .;:#k0m(.*9'JeC!8N[8v4#r zc(/+ٜ JR x)j5غej!ל Z6A\ 011a=vIz,ZMy9h`Y65ta`p'O7cSP0Ayyf|c⚤ FTWUbx])=9CAA^ǂ &rlx?= ȗ:sV΂B.O;ovw;Ω:~k>v؎; Lvz:- nJ7]\oۡÌZEEXjq'~Oq<6o\ %ÐSiQP7.{?90_װ < ddt^yyfܰb)vܽ xL9'$B#eYH},K;|< f>xMm[7;)HWC*<)W_m޼޽mNĥAyY ׬^1@"Z~~.أ3~I-}9Ѳ3ؗAiiqk->3@"^-?0jD( ן[6GmMռcnIJ+5okjk%`,r?y_Z[u¾#;5%Ņm18`w7>d E z|y\j }+r&j f q^ I! br9֬'N5Az%8HJELZR)V\~U7nh[#!b8 q 8.࠶fQ&Q#AE"ݼ~mܾ楄Tcaj )/+q)A! rMP*u1C!M-ݓTd4Y8`p48oBu(@&=4gge}_)%1~3ۓT!ל%ŅIUU ~45嚊DŽ`ö9N /u`j qspAYiQg:T 7<"ns/1xI$0y1j2&s,Qҟ_Ǒ#'᜘Hx, hnU+"=F_ٙqo5qp:'JL,456nh7G ';}Vz@ &!+3~m0lAggWo:-VGڕ(×-,[Q&r\CxѸ@Jwyy1/W^ۍW_{3wu6<۟-^ f۞/rzsJ(/ozmi߈> |T MQQ~O)Bw/Nn3O>FQ#},Kel0qL v=lJÉSMxrϐix壩uf[ =}~uhjnEYi1J".`,j@# V3EO=D| '?U ALǎP&x<8w+4>zP(,Y0D{aw81::{*-*Q5Q!ty'lj4Q|6A'=.3i_ϖmY0vhZ䡶 nـ\3&].V#=o~1<| U0<i9ܿѶ0 kZ0+MLEBJpg6PSi@aS;B.WDzlD]@fxpEy$ reKbe2x}~CRn^&!V03xg" •ˏN\{它8k0L,ɔ :„R04R3`|HxO[C[۹uq{~_)5릆Uxߟx ˲X%E1wvuSf &I_;!C ő')3^r|~<>N" z8t +׃$~oj`hF9(qΣ2蓹#"BZB!v? zښ|x d^$Q٤!p~Sؼ香aq55AۑcOG4]sEDw=drYǒHؘS1 B.OSVeYJEyKcK'zGDF dGA_=Ĕ J yMش!y㊥ZaWѣ'e1O6B15%^|5P3Y 6 ܶuLL芊 ܊`Hc +qǶ-11xr^ Fq|;nQOi5Ou0%3Jy%-TQ%}Nj@?Nz?c;V\4GF㷿C0LěnU봳h,<|X+#8kl7tM֞B5C嚂5ZP)}r v 6mX7ѨL06m̓C6TEl4៿wp8x}q[ER{`b`(N Waw&Ony55+Xqstt|鵄˪;{7v#nz^/_Hgi^x>ׯ}+l`"LK0߅ޗ( ݂ӵgwE^d<N9{bxW//|z/7SSn귿GwO__[8x'7,S3-8sUQg/$LdAP3YP'N53~ 6R᥽giEP@v~ ݸ/  &q;_0cv8} {|l^{F C"$sB!(: #^~b YWE  =ơ#s/•`-q>of.sX7bdd O? +N\&KދyvqIr%^rp? jY> 28NX~JyirMwWܧPoBT*My>IN291Ŷ HH8.\SϼGÈ,(fEr%, Fܜ: 2£JK =@WWw%ʊ҈LLp+~*%rQlN)LJq;~o!''뒠(G>59Jfڔ5dadd,噑{I? χ#Vu \;6fSm\#7 ^t@ ÉO

    ?lB ,H98zԼ]к) :R)e5`.fB( 䪓xhS᪭},̀(sI5sr:|GYrMEt# m릈~" sxJݰoZN"I @V#?V8Nd p]Ahrfs6r1o|>߂L5N^kW}s\Fq㊥0󲿞>Z4Q B権e_v^}}51!{e_~W) B'QtwuTYTqO ^wߘ &C"aߗh(,,D__&θRDQAKz@bbb/\ `\ ߊ`(U`qט7Y99Xz- C%qHAa!zFGF1>6:U*t_Lbe`$ z9.|^o Lj͆gf h:} KwA qqZ1Ô^c>sÿ8x}LNN#;y+ $e1(+ wnHV>fG{K} +I@ C'n3ls3A$ܞԱpFcvCEl+**˲IX"fC `0 MlĢj0`tv{)59-:wAx99rcxp  ]7vѲeC0$T3AuAAA~Nå475fdCQ}1[vhpy˃jEuu8/#?<QRR z(J"$1s b_ٹs:)gfgZ-6Y1`Y |d3hF|….T/Yх_jYJ4x<*#3&Sua_ZV@ ёQ&mh!ZTUUd2AB!W>NB==L;:ўXΨ /GjNtD6/RX\8bp:ND$%UJ0 aPxI缌GfVF^Riz=l3rQaj(…˖@qQ0< ''w M1;^ϗR)J\&/cjDx^%y#~!y<^oA`~i%OBg^ v>XV҂j5.8lظ:| C!=8''g"vM9XD,;J8 42B-IDATڹP(!"`MtmF|JP^VZ4FuXW˰ x<j(drئj~䢸Gm~y˃ɉpM[:è} CX[ZS>.tڈҩR\[X\ Z渇uH"ktt)4K\遘}XFa$ݍVCQctdǏTdq}=:=8B\5 tSµ@)W_F<ƹD@`6 33EF1fB vڂˆIazZ;E >\8~& H% 0ElAeeQUCEdEAi;ƶN__:<2,j &C9L)k򞶏CR~?Y!>\g 7Mqq&TէUQ.ךpE\~AwVZCEB5$}u!q&558}S.0ذq[Pe hmV EII JJJ{ (((FQQ{^j&\. #3oހ6(J.MQޠǦ[ Q/Is ހuBvN̹\ang! !rE^ 4 VZۨ y3}@50VCR'iSSdhhX37QRT ̡HgNFII)KK!B fszJ2?paܞs'*-^Gtpq&"T3A ;'"D&0&.,,l߾FAo0`ժ5$D0$2NOw7X&[w3 ܄)Rd~n0L&VY;ӳؑ#qKنiq+rJ(rX}8vhcymL&UkWlFOdfd"3#&T*X 14v҉9r0B rrQ&cN8yM~+D!t W*h1:b y`&(] TgtzlV>*x׏ϳ1$,X sz&)'6ۢg*N~;Ζ6`4fpF+_'Y*97kΉIz &!0B!LB! B!P0A! &!B( BB`B!LB!P0A! &!r Ucp/IENDB`hydrogen-0.9.6-beta3/data/img/gray/audiFileBrowser/000077500000000000000000000000001211146647700220675ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/audiFileBrowser/go-home.png000066400000000000000000000020451211146647700241310ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|dIDAT8KL\U{wqxSTiݸڴDkIcR۴DSMea;j`SGZk\` 5B1bCM^mx00txu:|?_UEe 0#+5.@s˗cH0X\?}\ )_ݿرOԸ6oj`]eeξCJ7U$J=M'3~,8)D{z07m߿>eep lж]};ϞuoNfFi5X&ffFcN<u'w5 >IENDB`hydrogen-0.9.6-beta3/data/img/gray/audiFileBrowser/go-up.png000066400000000000000000000013201211146647700236200ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|dIDAT8KLQm14#i!5 E F0҅I Ih!qqqCLn\]E[VCi:(njR==v^ `?@YSRi,=/`ؑllJ |S0{jv&?` hJteJosa'˾ŕFcy􉙙DN`SGhr}],k 'nb5s|YQFӚ>Q/M7=!CGuxFw<<-KPhj=G.AZM雗V 7cyi(2@L&N\Q A8Wp pKSM}7Y+o( Jp_'~ p8\#:ӗGwXк!̍jq,;ϑo#`НE̱A& ^0`ن>ߴdjpUeYU$g%DVUsP`Y{rncVF!K뛺llRgE_W&o $pK U[yj խ(n.l `ҿV̿IENDB`hydrogen-0.9.6-beta3/data/img/gray/audiFileBrowser/player_play.png000066400000000000000000000014561211146647700251240ustar00rootroot00000000000000PNG  IHDRĴl;bKGDtIME',IDAT8[Hao߷M7mcs[T."].ERtiy"(H(/tii͙;tiʦY=\o~{BU9 @,Y'lV&'^7 pbJjrWFO$&$xH FX '& vŊbx0 Qp\߆ =NGf}A6'dGҶdddVaD"j5Ecjzn{RS^fx~lmJpˍ3ΙH <$%%@)y `hhnr f `ogJyN]]V隰FY9~y t: UwO9{XPf󶨰R*y=C ƿc%vۧrT*.܊ ZuFeٰX,Ꙭ,CCѹ^aQaZ|CȲe0 (p:Bhz!%8*j,;%y}Μ7KO/.ċ0q}}s>0@W׍xH2LL5BYs8q%X^~˗J@!dn=0"L) @}cˊʧr@!dHxBz:tB&7  S"IENDB`hydrogen-0.9.6-beta3/data/img/gray/audiFileBrowser/player_stop.png000066400000000000000000000006271211146647700251430ustar00rootroot00000000000000PNG  IHDRĴl;bKGDtIME',9IDAT8픽J@{wFqHaeo ڋꛈ",X;$55+v{ %qroك/s-nsw{B\oj?0o(pyuAa8L6>>= "R-"Vs~v`!"L5M`}s"p73j**|98P} Qqt9]Qx102N}]yOfVMq._,"YT3c\\rXUmATc g秭.;4ob{.-;f9Z7p=Ma7IENDB`hydrogen-0.9.6-beta3/data/img/gray/drumkitManager/000077500000000000000000000000001211146647700217535ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/drumkitManager/background_options.png000066400000000000000000000010421211146647700263500ustar00rootroot00000000000000PNG  IHDR)鸿 bKGD pHYs  tIME 3 0IDATx1ka 8TB ٪B T fRDqHu+dOP:.p`Ph{Z^~?ddxO=.vW$ #A;"D #-#OˇI@qod_ܧ'G&OEQQJΥk?}l2+ǝ{⎈FfrPc4&Q?Nj1_ޮ-[b[†f6oA n@܀q  7 n@ Ҽ)n/: ph/]Hm={"BmjEM"" F9(7ӈI&A<k|9T?,iߊK.~ m }. O=Zz.'6B?6AKN;o릟j_~2ΝPw9_>U#Wx{{xG @ev 4,W͙) wLTJa)y^h`&J5nyJp8 ?v-IENDB`hydrogen-0.9.6-beta3/data/img/gray/drumkitManager/btn_export_on.png000066400000000000000000000011621211146647700253410ustar00rootroot00000000000000PNG  IHDR3 sfagAMA1_)IDATxŔ=hSQ7Ai㣋TiTBq BC8t3 tRfK'K(0O)6 nN&qH | 򒾔$K:VHf<!{;O9Qc0L Ck};DU,~TU궪XRU7CEOSiHDz%DTF}tޠg`ٶMV^Sqe! UrVȂښu*';q*.>GW%ʍ8_AeWT9Z 9SysG< _I"2H bI:GBfb+U~vNqc KY3zߠֆFp7jWO<}ekq~7s7)LiIfQ0A? l,gr˓!vt_/ņQ IENDB`hydrogen-0.9.6-beta3/data/img/gray/drumkitManager/btn_export_over.png000066400000000000000000000013211211146647700256750ustar00rootroot00000000000000PNG  IHDR3 sfagAMA1_IDATxŔMHAM/T$$"EK魹y+Pj,Ńz굠1ԏ(*؊RGMk6d75MŤM73n޺#C:v !YkZirbl63ڬF <𳠡;0*QށI'е`;P۵Whdbr3,y &JYW2~v =ޅ,kwv5xK\}-9jϊ0@z]Yw9,k&gl{W\R5rg0JB溏 ^_Z 7Dd~ZL(Fp|9]CiTB=(j0Z/Ka5EHEMJKs=Z/ph=>[~6!Z6 q*ˁ`5W.UVi O7lTdC7Kh{O$40c9Kͅz 9sd.Ƞ$4ljZEufX=D:+^?7Gy=D:V\g8$@ H*߳E!JΧ7yQϬ^\-A9y$QOxjY4IENDB`hydrogen-0.9.6-beta3/data/img/gray/drumkitManager/btn_import_off.png000066400000000000000000000011701211146647700254670ustar00rootroot00000000000000PNG  IHDR3 sfagAMA1_/IDATx1hQwq8H".A'ui't: (%8HZ,t ")%h &fzC'w}{{w=_"IİLCLuyPši`F 늰6^&{wO~A'ܱ]D)||V4}*_ۭFLS~8 !<3!xtRF rwo"BP*(Cs{}P1!'gf)+\[L6GA6PUΩmnKNض=m _G^*9|ŹY3 $Ա!~´LƇwa?7nm\,JTx3B=xSy + Cڣp^tXݨ(T\|m<p4MzD)%8m0:R=`*iVKQvIENDB`hydrogen-0.9.6-beta3/data/img/gray/drumkitManager/btn_import_on.png000066400000000000000000000011771211146647700253400ustar00rootroot00000000000000PNG  IHDR3 sfagAMA1_6IDATx?hq?AmEt9t(B[dqu -K.J6S Hcu2CҖv9\~%iH{a޹+@OQmpf*A0U?ܠ$_daՑUG>:_(?)nON HXt:+vi*U╪B;=Ze5%k* D1"kkv>sıVjޭ|.ah;N4ٌj5tF#rFt0tӮk5gxUJQ`BdLyNx`OU 3cyug:ɪ9u/y(ô~fB4';4`L _$} GYa~% yAIENDB`hydrogen-0.9.6-beta3/data/img/gray/drumkitManager/btn_new_off.png000066400000000000000000000010411211146647700247430ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxkSQ?/<-@)Rn)TTtrrs(T@ BE !ԩAlmC#uJl}r!^^=\P@B@5[mXj#9cDPh<=5f=fp{}Bj$xipu ŅxɕR9JS=wiPpsv"g\\)%RDŅ{d )%Apً(aתH))Oi͑?]ͿyQ*WI_l/'?~mJbuTmB_wH4+oxL؞;OZ4 &/]Y 0a=GlWlcslBv]A*Q)8OEUcIENDB`hydrogen-0.9.6-beta3/data/img/gray/drumkitManager/btn_new_on.png000066400000000000000000000010731211146647700246120ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxka?o:7UMF嘢jOEQT![(z @zPK3'Wq5E<1j&}cıA>pk7wO8,D0t걆`)E۱_~-Fc;B=@*=LFP=j4Kp/uTz3=?cX2Uo?Ap])?9ftu* wlC OIENDB`hydrogen-0.9.6-beta3/data/img/gray/drumkitManager/btn_save_off.png000066400000000000000000000010721211146647700251140ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxkA@JS*-VA=H'Q=^BR H.x=xC҃aiу2aqc 7=f1y}<(?1GK8M>t;9Z= n{XEW.SwB> 0q$djio&>+ƿs{O48TgnK䎍14 @Jږ>ST9:zѺ5^FلmZzDR q[]3fLjIENDB`hydrogen-0.9.6-beta3/data/img/gray/drumkitManager/btn_save_on.png000066400000000000000000000011231211146647700247530ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_ IDATx?hq?M., ("*J"*ť\T(4keqͥrЀ$ TZ9\#/<ùzC Sg!+[\N]LɗtL s]/ GD$C"x- ߪTJvҔCV,WBņB3=˟-<Ɏ+Kn^;L3-w_쏩^Տtcb]zΓ;+v۶H;\^sܡC8c3`ٶMݱրUL jsɮ|xtEͯF?nmZϭub/hXMWr?Y{ORϻH$XypT,c\8 ~} +@Ljwn(܏jpl0pom4mEfe=S9`LG)2E&:8_xlAhnzagdA?7 wlIENDB`hydrogen-0.9.6-beta3/data/img/gray/drumkitManager/btn_save_over.png000066400000000000000000000012431211146647700253150ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_ZIDATxœKTQ?w|d+,d ,I?mhaA슠"PE~IhIPR\ r.Aщ `f*1,f7#|3/ ss=4=onf:[#v(}3Ė8~ S >~نW.1:`m- a37:$^'׭` image/svg+xml hydrogen-0.9.6-beta3/data/img/gray/icon.icns000066400000000000000000004355731211146647700206300ustar00rootroot00000000000000icns;{ics#Hics8+UU+VVVVVVU+UVVVV+U+Uz+++U+U++UU++++zz+++++++VUUzUVU++++++++++++is32Ngnlkjji,hibPias꧐NJiqL"Q=sLgqR)WcVgpR+Ix:eeaVfpR-0+(eVfoQ-0-)lmqaOfoQ+IqjּRenM$PۗPˮOen~`~Ԭ_``^^Zrdmȼþ9dlЫd~ndmȸef^Pdjihhgffeef_Qatyxxwwvu+vn_un̓u}[4_M~[t|`;epds|`;VX3͞TW901CRRQ;/GihfzX3͞TW:01/--.0*X3̝TW:01* X4ʜTW:01*㦁 A7țTW:01.,0*($& .9ǛTW:01 TpnlB)ڇ|;8ǚTW:011/]'V5řTW:011/\'X5ĘTW:011/\*jB7ØTW7,--+Y*,,-,,7—TWͅvxvvΒnqppoonnmmlljvTWTWĽƼĽTWͫˆwYn®aYx`TWȠtm]ATH@{zgzTW˭~bx°ia}TWĿý TXɀTURQPkcQNRVUVUUVRQU]^abbabab ^`]y¿Vp]`ڟ`f׬be龵«֪beK@AA?m=?<<=@JשbeHABB@k>A<:68 ?ỊbeJAB b|zxQ;ݑKHˢbeKABB@j9dEʡbeJABB@i9fEɡbeKABB@i;wRHȠbeH=>>==GƟbeҎқ{||{zyxwğbeÞbe½¾beѳƑςgzȴmfĔbęzjPbĪVOubeдǗΉoƶunØbe¿bfca(`]wo_]`dcddcdccd`_΀̀(Ż ÏĀÀ€Ž}uvvusustu|Ž|vwwusyz|vwwupx|vwwupĆx|vwwuqx߿|vwwuty~x޿}vw}vx޿}vwvuvsxݽ|vws‡ yܽ}vwsÁ z۽}vwutvsqno pu|ڼ}vw r簁}{ټ}vwwuޓqyؼ}vwwuޓqÇzػ}vwwuݓrʄ‚{׺{tuusݑsst ss{ֺ߮޷Ժ݀ӹҹְݥɖԲƹҸѣ۔…ҧҸִ۪ʜ&ԵǻѸЀ зۀ׀2заŀl8mk}r}xrmxmit32m[UUTTSTSTWf3UVTRSTTUVUTTSX[YUTTSSRSZ_egfefedc_[WRRSTTU VTUUVZ^jrx|{zyxwvuttsnibZXUTVYTTSUcoʂɂǁĂƒ{d[TSWp߁݁ڂق؁ՃӀ°scSTUSSUR[߁܁ل؀րԂҁƳzTS TT`߃ށ܁ق؂ׁԃ҄ŷWTSUbu߂ށ܁ق؂ׁԂ҆ǗdZSSTVk߃ށ܁ق؂ׁԃ҅ϟl_TWt߂ށ܁ق؂ׂԂ҇ΤveT Xx߃ށ܁ق؂ׂԃ҅Ѐͦ{gTXx߂ށ܁ق؂ׂԂ҇ͦ{gTXx߃ށ܁ق؂ׂԃ҅Ѐͦ{gTXx߁݁܁ق؂ׁԂ҆ρͦ{gTXx܅ۂف؁ՇҀуςπρͦ{gTXx΁̀ɀ€̀ς̥{gTXxϻ ʬσ̥{gTXxw`UVUTS` Ң[QRSRSSR[hπ΀˥{gTXx}O8/.=z ̊i9./8Cπ΀˥{gTXwsA612>p_90136y΀ʤ{gTXwn<412>lz[901v΀ʤ{gTXwn<413?l{\:1 v˥{gTXwn<513?l{\:1 v˥{gTXwn<412>l{\:10/0012vˀ ˤyfUTTXwn<512>l{\:15>BFC?912vˀˤyfUTTXwn<51=m}^;21G`4012vˁɣyfUTTXwn<51=m}^;21Rܣ˫w5012vˁɣyfUTTXwo=512>n|]:138e701uǁɣyfUTTXwo=512>n|]:14:k801uǁ ɣyfUTTXẁn=512>n|^;214:k8012vˁ ȢyfUTTXẁn=512>n|^;214:k8012vˁȢxfTXwn=512>n߀|^;214:k8013v̀ʀȢxfTXwn=512>n߁|^;214:k8013v̀ʀȢxfTXwn=51=o߃~`<314:k8013vʂǡxfTXwn=51>o߄~`<314:k8013vʁǠxfTXwo>512>o߂`;2138k8013vʁǠxfTWvo>512?p߃`;2137c8013vʀơxfTWvo>51>o߂ށa;21I8013uʀŠxfTWvo>51>oށa;210>bs8013uȀŠxfTWvn>51>p߁ށa;21451>p߁ށa;210/.T8013uȀŠxfTWvn>510=qށǁb<310U8013uǀơxfTWvn>51 0;fsZ;310U8013uǀơxfTWvo?5124?FRVWWVWXXYSB;43100/.S80124uȁŠxfTWvo?512234667899:94314?CHJIi80124uǁŠxfTWuo?512310Ao80125uğxfTWuo?512LȖ80125uğxfTWuo@6138e80125u€ƀßxfTWuo@6139l80125u€ƀßxfTWuo@614:k80125uƀßxfTWuo@614:k80125uƀßxfTWuo@614:k80136uŁÞweTWuo@614:k80136uŁÞweTWuo@614:k80136ułweTWuo@614:k80136ułweTWuoA614:kޗ70137uŀweTWuoA614:kڗɴ}50137uŀweTWuoA614:kԯlbcZNA2136u€weTWuoA614:k˟OBC=53137u€weTWuoA614:kǗ@3432138vveTWuoA614:kǖ=0148vveTWuoA614:kǖ=0148u€veTWuoA612214:kǖ=0148u€veTWupB61441013314:kƕ;./00148t€veTWuoB6134:>GIF;84314:kѨ^STNF=2148tveTWuoA6107RazWH7314:kִyZ3149u€veTWuoA6109]rcO9314:kӗs50149uveTWuoB610jԁӃһwZ;31CsuX315;uveTWsoC612>jԁӄwZ;310;Vdy}mWF215;uveTWs܁oC61=iӆwZ;31267975415;uudTWs܁pD71=i҃ѺvZ;31015;uudTWs݄oD71=iԄѺvZ;315Dr 3_{taHA?\2U/ R' %/C,kd0 ZjɍeQܭm{%V2qBR?g{$:OrYCGpu>٭HɨGX \ {|r,Fn sRN\gqyEtïG|By~Ay #+^L<ؤʫQ}Tw5cM@ Wa{̜j1iF"rLQʐgrRrӳ(XB^/M"_h+`TB9sʶx>0ua }9dљpaH j䄮4ƒjO3$5إJQ/HyLM7x>sOJXQWo#`?ΦQK`r93qcA:#>][G:5O96I,Wc"\u$Ur< pl DFbCN+WCew]g} BY{H2kA`4y5Ƴ< )ޠ=M $Ld`gypxSEp7JBUR|x,IjI*{}PwrjAOړ*E#p+G Y5O9TiDXı[֧>3[nď>rÁ|/n "뵑I0hɄy6&L$} ^@_.B6 WR,VIf6s~W3g'#{# 3yq(XR,:Lof *fτk0 @%!C_a/zU9G'y{c@J=ŘbYk*X '`{c13BoT!?_Ro1IרD8wV$$lH=6bX#Om;m>Ā*]p[;*EJ@ xX5omy"+ 8g&."؀z v;[F+5'@z0A1kÐLO9l~aD+2_ ]T\5l|D5P (s؟rz=D ›,1/0u /,|xgAwF9Oiu$Tj~QN*bREDȍϒ(Q!Q%:)AҜ,_?ߚiEUID̃OUOoݻxvcK܈ ~սWpq(}F#%Kkը/d6ې-H.RycaXm SlꧺF'Rw pW==5¢pjIC-ܾ͠.Ca#P?K`,+eK"=GgUҏDڑͩSgTS?$<^fҒ.ܫ=⫢ ^:)E5š_!QF![>Eλ_”̠-\+cx6teLxj-e b)?``Ό ZcVG:hЗC0ػJASV 9=wbm#9؎`sPftjH %mp&rP)b!G'\i~Aoju(&a 4XțyJUA [~ \wa:KYF?`VO07lu39UAF}90Mt=iH15q ]=H/gɫzJ184^ oy[f)j7IKGϧ 8Iah>7%wpkl uSGeSpxCCH,2|1.>_zv4{Pnd䣗[M47~Chr +P=#49:cu(>+gy*Lo'-×>ml:t-C**- [`ZHyڶfRlhz%C|XJ",L k;1jToED;u:%/1+*̚%kp5f%㉒)nUSnt0׏Ri|& =&P.,4CFuws#U89s9~{xnP)@L4b[a4 x%*PGrmp;?z%kgJ,>؁qqbW:q|%m#-^r~}@4sx赸=QtC8 eS8i$8WG B,`1n?\Vxqϳ/NQ[j)PE]@<;Cc@rR$/?H'+0Pt1N@ԝG33n\e{RU@m[0ߊ;A1q4è{4@ALH /bq^lSgFUl1Q"mm0š!lghF¶L^.[>_O1Ij3KXrx^-`blB,yJ+QO^΄겟݅=Cl&}P2XD(.imZn`CeC6"e֏-g) 6t߽-sfF"Mbqn}!ɼ=!4 mv|:7vzU/z6:]HcLcdjÒ2!;#lB.nWmk/ZU .8E"%>lQYD *ߕ2]ȅ>e2$L٬4n'ۯ-3>" $bFtu3ɓ;5C|{lBӚ9 A{ބZ@ĴpГc9'n4t`>$ \|z?vI';bG0W9̭IEJQ]yaፓ8^#$=oc\ﴂ%xW$H_WWzE)t W 1HK">E!&OU'ܮoBlTŎ\J=3/͍϶2XNl>&4jn&Q+?\[VG +XKa%)CArnNct?몸؀2#i~D3~m5OmQt AG~Xc ez#-d1uO{7?})rSv񈝆wHc¾M.*rF=ࣲsisb~xluiJ4:Aq:#u1A_udE%?R@ RV<$|J]Khi?0o  MI]ؕ(X"D!rwkDw8J;6yۭCXlYzi%?_zIrvZ!Cn^=hЊN>]δ , UEвn-"'-᜼sR yKWZ;4'̣r|KZ ZYi' U@\la~zx҇;+T@:v )WhYwAY܊,(P`{l50y{#~Q猬K ;^:Ck,&Dq&Mb|`+V Jv"DD$Wo>2J-7;'dS3( Hr29Yrp3pUJ^}?{m@Ј('*着w5)t%y1`_{t,b3W ҄tfpϣTr6c񘼗 ܯiTca@UGc!P+vK GۊkgW#P؝:DGF]s9BheUby9 ehhhk> xP-96a؏ syX98kbb_IIV(NbrCe7ԭOrBP.>=޹`F4Z5j {294oD ͓@曐8  Ή=|C!WAe(# ݋dKbej/oUjjGוGO 1*-p\-ވTfoAEIQr$eN)|_1mؽ1Y|Qwfz aE'gp4:R~GWm,I#&%3 Km `Qg!5xLi, 3Aȭ$I&aV32mõNMpډEi;dQfHY\3YI Q;љ'gW$0{?iJxQ yx Λv+(=*Y3EHֳ eE$]QW02JRnk(UK>ѽ\YHVe:E^Y_kD^!wW]G=B5CwSQ)Ć56]嗱3+f"wviG gΩ3QI]`|yXe'9U8ũĒ%Be^R7z9E鷪9vv=Ow r0:[z|.k ](z Gof9q3 plz9&D 1vd\>q@038 -x]܇~*(|xy#u=Hm+a\k,LV\__i?8C He~)v,8۷yXجӔ= MӘBbҤ%k\;O{cC 8ompzx; 9JjA !Bz{H`='K}zbhYđ@c(;we1)m C6Dg>ƳD*oT]! ,ڰ;(uܠ7Kfr/`2XAM(VJ!J;5.d.V·{'mg i 1CEӣLmt _WFytdUg(1)Q\Ѳ|1s7"4_]S{vGX>{i|JVɈӎΩSsu(4zɄ;m ^0yfE 0ݝ1^}+6 q3bN,*U5nwL? A*Fw… %ExncN[E2+Kx8UP{[ķ{X|o hE[r9$ YZ}>4 ȓΡfv $O '/s$Hز+mqh͎gBL}OͨrcB-5wPOkcyuD(A/jqgS(x ݞ42yDMf=+R}PFv#ZddEcfR㟮< S`6_2qiIpiE"̡Ȇ $KhsA4` X9&(+yGskœZGZ ےeÇvE3~ÇQ[MT 4es2a5Be3T0DQ$SfXi0FRu0;<Xf!_~{ٍA\9Q7MKiF{nD̩T8P P7P]LX|VC4gu3cgvKܐ3mmB HO" 2-ߌئE;BgDxċEI}S^_[05w2}/)QZgCK, MSo*vG:HLI;0(f!v]f`}<bY?Zf:aJhgOm6 Iu8u0LCW,08H?I}%6Ln/TNoI-a'*"2"6V`uMV+vyl\`#2^mb{mve﹓SeffDvzflg>m:t{smV7_7eȗJeߞOeΛGU .:h̽qPr&2h1OmX >{r1dp Wj4ƪ#N$-Fڄ{g_d%\&NBUI7*J( [bʵ63cz+iVez>F#L'=^v;8=ǦQEA5[η#ޔ)AL5J@((&v;lXg쑵e75= X@w= ?Mmt"ic=:{P@ ik2clmB{H (T5ڐ?͌GsjW1G(*}5Tg570bOY>L &8y8>k<"asҝvQyV,bATJZĀ0d VV*Mv~;@[tx p/5vxQqwY%Cm"%IOV P ^d:m&"qGheTX\sܠDݍNp^0PP29@6ec,{bB#^\C:!RraS5fh;ڥp17 x+V})tOJl#͇oad|B1*W6 R?ItOƫ9Ȧ67q XV23Xqzx<ϑgE63>E^)1(,Kڥ0a- #*5_i]VSWN"ڛ0U R?eb[fb(r|*P1ᦲxGڏ ӗǪuoLy1ch(v7hK@V jo(= ,)Hl e.gς͒;2!mT[OYTM]_P>cЀ},;P!{E `A,DOmv<*n_Ҋk%p/[jrH#;7@O9#(%D:#" TZN#qBsu:7fb vV'Am!yo3}ԍŠH4Kv׽TQxSWh.|ۏ^_ܱ kɣԉJAi1|F`B 8B-;S@oC˭Cg<]Rw@c3=fA[QNYDĝ{e$H@YfrUh7krW젘V `=Jѭ }gƬ(EI,nZw}=Zo:\ }ڎ,w~`vz/e|( w5gZWOFiiCޣX5 ZH/ .,N]a6F>U5erzEN? !ӥK)l#xQea>jhzGNp__{FJ }}[LWo-oKw"*l9rSd/ZJxN?o@f.72)e&w.O)K^H/UYF5Ә%ubHPA[Kd5XaٳKt)4b“q y 94K UG62+WϦ  O -@O`Щ\躍c?9^BhҒq:slz@jv=@dP73g96< (a`ik}I:5Œ͝B-ړ/5yIs+R6H|}`?ΌQ+= q d5'^ :g=D}k٢)+q,_!udpBXxm\ o0?)ڭvr!Lu t=12ߡ_9"nYLǯ bban yT1om[~0Կ C#hlGn2w4ȧ DGm:u`>]@ynFpLt8D)0Ч6A c-.1w&Q*ج蕁K+n6 #RG`DIRX2Xr= t]$nAydP%\KJK/H-3< 44d}wYDUߦmr]A`j#FFBO}LS1'=+:t`\y dͮ]FK7E߼U@ "CuK~ ڭ]%mLp*=::GxPcvJ|V_?j/7o7/|>_v mQ X Rub{"$ an=^`:^& rά\YHXx8KMT`IhHօOd3H]@V8uLuw+m@GT=2sL9@LM6F?l-cR`7~`e8eh\j/Xc!u[gUHKxR"=2z#=3;}^);Ҫa~*1.ZՠmF+6UJhy67v`3d|Ȱ \Y }԰-WX̰RB}9q!DufVnU͌0[7Kة. U̱6 >YB.'npwEiU1+ǺE鲨 n{=4CE7IY@Cg((' 9tOA?# ݏSDž^Yw'6XJcҮ $Hܪ>ӌ!&?QuB=Qwydn֯ygnZK[ļN>j٢pLOy0-&8:GKQMc6(q7ވkjcxϥުe<&[1zRrgwT$4 r" ]J_4XK OC*ӒzTHrEK4{o%FָPݨ4ȥOϝٌt yŕ-ɸ2Oml>\ 1nޕQV΢@QL(v+?\J3|V(1Į=gCD*Q¢ȳTߺ3Sf%Qߌ(tSuo4ĻpgEf]P&~8$ p[Qa[?[:P ɢ~Q!dTR,%,E }L2 1bҸ$cʤf _`(<)AFth-_"*othj6)i;H`sX8wmK&#*s!&z=41 l4hYCk>046l<P^pUr'@LKWUcCⷓ̕CM@p͆ι \YSӱsw'7_J-&JzݬzD8(;Z;,ͪA'ۗ&+S''U?m)B&}/e=9ˮ)hBTK[|M5zwv]iވ]ut'ɽC!e[v-l?V9o^U }u\x̚[ۇ-W< Pd?P!5 !˺Raf45Yk8BVs}Vn ;m ٝ,-4/T?FAM>(d)$͸V\8D6S]=3!/?,tdWȄN(7x2;xvƪ g~->ݬ1ӶkH,* jQeKt1Yxj ӋME#;9fJ!P5̵AnE}6F#ai hxt>:F3i _!Lr^Ɠ|cY*ȀPZPLȼL{v$F3F$š0Pu7*я!C[r[z&0砻ЇE(b94b78z܈ }C0_B4UY\?wL%G'ɦJگ `z_,]‘".tЃDvV hL!o UZh(7M0") @N_:崢;Ǐ|Ȟ|09^0M÷vފ/=S3<~mWʫh5,6gV5*@aZcExh鵕+h{pa35 Ttn=Kd6qqd1W;Doy>62v_ -mSϹbpi)'0yIN#HY8x,̮gyMV& |]r2nR?u+Yư{ubKS'ˏ]SjʮGu2IfיA䃾LVoGyVZ$d@o5ȵG"h+76bvI$I3Q(kmmn7HXgVmmXج+t@\(0_ɥV9&촌^lW0>< HA{h"StIeڋ vC@#[-p袾BP]iU;gΉk#cHd(ٕ4ÞcV·xQVφ.;GC|Obf9D'- s2y1DKXU%* =ónމ Qku)~hbS;@Ck8";B|%XߩhDʠGzjq%p-0m("^w{sw$7"y$azM(IH(\|U1KKgi7^Ч< wEXs}O.Umnxglh$9㤿cGܙаjwE G64v boZЍ_sޙ=Ŭ>%ܠ'^ߣLʮ#cp^o#'+U _ 1'Kva8AqIgGLl`ޒ%Ԕb>n@d򓷅*mvM~ ^y䅤##i"?dϛИg"3&ѴWl t1"%%9z'ۻ]ӷI1c<+#C8S 2֨X50Jp,u>tE{\l9 _HHW&Yy}@HR1m_q\ u_ROlBMIݨ!׸ED!M](0dgzDgjIk$#y'^AB׾81|-oNjYl@PA}e}<1aQm8XΰTryt~} 7kP@Wjx`À%EDoU6/XWOZa_*9/h72]7 ƼwZ(4_syI+*** paxk Vc'RP*"e u- ,vێqO3TO^He2K;Wpj鹙>RJ(OTUCޛG;rh tTK}j_+enV_V`Z|a|`sK0X8 ȴoaùƹKg@7/+X i)\,_m:$ȰlQ֌D 6Tse #LeR3ztlJ-_<3yt#J!ѹ&OgAgG矀x޵3+V %C a24;8%C2 ae^2Mم']<ιU^D]Z5^>ƯdMk%btYGL:ʆvjW [٭M}L2pQd\1'U9&v IM*I[`keC.Gs(/dk1K7J g5$OuR&:TGb$S OkkķxTp72LͦOObkVԈ&b,Kᯄ^BzD8ٌ; / E_J'^'ƙի;J;_}# "$L61Im[_"CAuNGJ<ٱ<^b(&tZxNw{Q_5ӤeZ+{=q/^܏V5 5 x@W S v auQOT޸%NesE{ PV}>u5u['&i"0Wǚ&5 /hm !0WMi,2<7H'~bf<6r?ʿ+K;L%zǂCoX)u( 5P,8,"iV4@F;5IP[ky |'88Σ^t@TsJx.G3>7zs@aveSgP^"%$|~@Q09ْF6*}:we] _npѠ\]-Q<;C/تztl&o:>kF2$i|7T)}1en=x6u8뢦Op鈫iǦ.%+ze Z.,X%x?1`@--~./stC5w&Ï%҇1Oxr& P8P :7ݫ % öj8Ch+!\@K6;nT-#yٵpv4Zza|$H=V#,t+8\r-To+'4G&Q;;fl^𳕦{"֍ǷJhPwfәC [xAَ)ZhH:c[xLK9n^8WmdRf)ufﳙMq|%mZw͢?W,gw9%IVE^.TM8EH?fr{s(/Ebk4=dz3~glDap$ ;$1a_#nd M3zc0]w0/-|m dVk5E -ڊE9= ߕ,5| <|ݾÊL1& -5+}U0f|HiɝPY-Pj"CNQu0p$B8̾m[+47| ]#9hJ&P똃R7nw`$_ѵT2O#CDX˖(]na=:&[ c bX㥀?cKc_1}Pi9Ь80ٕꚉھJGb9ŜY]/<4tk{Y% \z 7t_"v&ɒAG[Y[ɭTI{ӨCrxqOKWѓ yV_r$ZMuɋX ,q l|Z>>.]eG &bbv\eՌ,a~Cة^ĺf.qhҒæTN8ԘV^o@ ).&Û vz;F"F譅t}{f&1}U&rͳ6FvyHi: b|6]aD 1Lu<3˼)u[@P5& ]p~/6mB֐աMU fm/#8oJ^<19:3\K(G[Pc!r#OeϚNa{PxtKKe(d>*Hߜ-xP\ߴ@hS9N浢)D/DK-5&!HpCd[k}`pӲxV \q4P.2UfLSUpqD}]ݿħ14d.R(Q}Q M6S2⓯MF^q.nuM`.`KM .s j":g "Lr?i_Jnݘ[X6sq,R 6f#͠{Zfin3D솱g_i]oH(Qt9y%xUpX!xNᑉg!`ӈ1/yíYKإdIsruB _L~glévA5,eF4YYg0-&L-8-_8+؄uy= oH7~_M]$8o\$i,^;͇mý:8v% P9-*.)-_?l.<wht_Xp>pzkMT^5Sp" 8p̑yeχ/A4"ʯ[Lgܭrj-k$п5Ђ <+~BT'\2C2N06Aţ5:7\"CAchWxi^¾A`>TJ;$,p=۱'6'fFQx<#paee*L%k%)~3ЦmPG9=1h8>66!ɱ%]]N[o&UydK:چOD&[%H\!nJ9am5?u;.#?Kr;v{ ~+0AeX҈>;[y)d}Y#Zb M'$ZR+h K*ic^(~2uPB]p$C6!obx^.cҋY/)<ͳX.ձ*4ˋE>q =֕,=/oj 2L90f +_X@ ࠳߻; n J49UR9$:Paw_%,|>A涋mBķՇ?]CW*ť] Lyd e7 y0Lu `u4ȍ{-`E^]3C]fbPHcỸ1Ԡ4<=(j  <ٴ  a < z5 %XMD;X'LM /[&'BUS.}Mrĥڈ$浂"J_.W !cе 'N:+5H Mk+H̶cKu-Cw@5gn*Vr|'r5q[x{8%5i—/:҉OsG GXy.Y 9.?saePx@I'EMAGSpJĶ.~{6Q6b'.j ӝ05fB%6 XR縛2qd'HtHfYk$_h:$4r ~M>54ò`&z@5U\#|3M[>ՙDoJZT&,;*X{'o6(dQgi62Vp@teaw2ХflX}>;PM^8Z!߾ч3 mMj[Y2̂}, *- E« Fx+zh?-/i+ (Z|[cM D $$*Du#ٺqS C8ԭIKmvc|}ؾN_'Wv`&(NBgޠ{fBBtHv4sf@>"}rTO9TN+DO C#"һ4|>61,Yr:4G<ҽΤioK~oD- Gr׌/k}-C)s6@%,RX>oJ+F%QW-?c'0L>Q(jzr9uӓr4]?j8<2F(;VodU]zڱ4ypsA kP|(}F4qdؑg~k9o0&Cn%j+>\#sh '7η@az?wTm;e;Y*K-w42 kGAN#al4II^"ao(lGe+'k€ L93Ozl ;aTeXRguDW ][K+"'rOLEG!(M=)P!QN*xg zTsUR@4wRK3˙!qa^A%&7z).ht51B0`oh=S"g*:t>^Nl45  9WS[GhIUKr6,ûQVi(ol7 鈚8wE=b7dOFf~GLN˅I1>p "X#$dJʼE$hTXzE6glۦԑ%Dp_S@J B"Gv%fUt]{ ye#gJnL;XDI`wpL]!&BC~Lġ2Zn`9 sO]zhCZ ATkYѤd9LNŶb  ݙ,j 7e?}xEmo I.Àwvrf/] viý; px*8%&4Yɰ5Wʫ:4|TWHp< h bG=2/y ?8W->0k@:{H ܙu "kڸtrv"fHJM*qy?kBŹ^|ܘ- ^R OqgB3I;\VI0T7Y]j݂NuxL?Ƈ'͋1%q<֤R.UetZ 2HXZV9:2wYb^oow ޥLf+8E3Td u@8^ddD;{&6AbfFcb !WNCCW}}Ӥ=!P-goNԔ6ޱԽSoϽv3pCXYU+Iyag >e3aV bO`EXQ!̈i^SS> ! =_bSg04@;EOϞ|KFZB]y<xV )YGa5 5sLG`'reO~;xeZ-l<ذZWM1W2]p(vͤ TzĕϳwW_P,z 2 2_㚋 064FƳp4DJ7i|j&3}6/~b5"3F$-xʦkj/haP :WBA"u]$0_4vA-J dFu5m@Z-KPWʪ=fF69$f*]DzV0{!wF 8Zo'LˇFC1sFH?0] ]./M14DKư ӳ*j[09WyźB#5r@]B}Ե6J59~C p\34.:#jK\@22$'׃o#3-ՑMqN_B2Ko93s`*k&zbfϕٟ{ᅶo^iO;Ec1da\"qnO7nnM JaY*?W @v`]Z]$adK]3DmL!;u1qQ2+Q[ѥ%k6`4,e=wJ+l%eks2<1jdGC')2ѪYijju, y m }A +$b9`;4뼙k"GJ=bb[?$Ta{HD%e?g0>8=,: I4t U[fsRy;_fpN\$l*YRT T7N.S9WS!gQn -]b/*!`$u(m ۸1/g"\A#Hh3<ݦ+d9 牎@9 CkE6!8j+Tz | :wu-fٸsr<_lO=o0LJ6 ¼-U - "<]s6AF7DM"uΩ$=W/qϓOo+Xe۱[K9^ؾ)6d,.sM7fKIV\&̸iٽS'ruA 3iCyG_11#Q?OZm<TFRݩrUY&ghRM:B|{ځuc4>IIŸ~4BNY) LlXzU:$zO{w S#[@<}zVwZE&kiȗc_+*u* Ŕҧ0@G_u#{ -w+_!lS0t~T]kPH(FUNȷ.k=ƂjE}FR҇fR˂b+Z0Xhh Wcǵ |q?0 [+| {MM3(@/Sry2vT4J8")ĺY+x-:?é /"N So1AnjĴZޘaP,N!G j)OQ+8g"}/M3$^wY"+,S]K0*Ԉ% &eM`MxLaYD9z3'?/;1ˎYxAj:J@5"0>CJ>pw>}k&H3qPZb ͟s2ZĢՓ`1jAHu3Ӣf## pi:1cmh0VOS);]rT Uw]-]Y"|]&/?|p~sNr _!l>jh1a<$}\yBF}dI_#v\E]rAe|4j#n"({*"Ρ Qޫ`D _[} d*醸{6S>Kn[s{I:`:aVQV4R bru*~W~-JPqB$=jڀp;;}$Ӄ+R.(ldhbYtcF?i{nƍ壤䂦UȾ*?cg3X78cp B7$=!? _>tWFh_ic09M jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 `{XAgs΄_f񮝼"[j)$ӝ0<oYג>ؼxuUU`6A[@fH! O:le< }ݤJ X4=g%<"fItSs?;U&lEhlEusG@zŴTܨl̥Z/L$f$|A`IWLjDi}7b3Ԧڛ_;B5vƓۣGTa)EN~Fc8%4X~;&=-HP%g`q',X\COkK0*Qz,AˆC}{+owt~ƹf" Zx@漻t3s }ؗZY_Փcίn2VlWl*@H[_ [s=\^ajh5 V[]:qWsV5dᦜQpx3{SU<BF6%X ˷S7[u_9ytd~ 7H ,$XE1z%d76 Gև,G 4$YCT%AB+x\nбa"S(V?QqT\iÙ YۻW̝f݈QÀE^{Fiu"dCL'0spVt4)TG_?9& ƚp2^eW-rQZӸq\@ H$=z,{v[$cvHʉeQ  Xџ.?t`bPgJDϕVCvKd[Vu8G55!˟+򾉪Sc "FfH+eZZOhu5$NL͈@,!3ka.Cڜ7>aU8BYo z2#ȎtW|Aǻ\qNoZw|ڦ_ٸlHu45iɍfZ5g˰*'Jԗ\ip\`: s`cV8p2*z|ϟ]ܜfSGvK>%A5jQ»"Ew+vxT~h6ۗeO@ eQ}Ty)؋~^|jx">`8,6:, ON'PGr~HOE>HQ LV=dMoا,YڇqiAyYs/ЊIYt T#UrShЎ@.->G4ƒjO3$5إ⅛*o3p3]-G+$bB#JͷF__Kt ~9c4ANe9-M{!zU vǕ<6.(*AwrQsgx* OԂcx1H ~"p9Yэ(@Ԣd<0%l!ElH(Daltgm=G,H$|_J*9,RS]Jr1:;KY5t=e|H, hܯޮ8XjrwAӌs& [}KH],!kt,"Be4$r @_ڗ5%6؛O$761/"YgӉ:qP#.tM /B"rXO6kSsN /O:!NDEg #UU@]/Ybt+SRHM&z&}%DDw"-ɰ]=>gL5)aesK%;%CH5^4kXuHY pHGCe.(f5!?_Ro0we:hXwVJ~6bX#Ш9n>΁j8*]utTێh_,|'IKYDt؋BEQ{(? KmԤɥ;?uYj]q x:{62<脳*<,JXB<{leh|0/ Z {YIV%6ib5r>߫._n:0ٝ?b#E>e/I?IRH,JkO&dph7>ӆrbaX)o nqڭ;)HtkNP5۾]X1˪XLpJ٬&#nm>0YR%o9}mq:_OH %Y-jڹQNPC`rwy{FEHʜ:CgЀĖ%?DՓrrQ$foJ&i(D7h2xc8EQp;d?4xZ\S'țMVlӺ[2(+~4}I6S9$O=iJ51!F'ӻهHxҢ0"hwtreYI3r$пPgf>,NN3;;Ti G qL2N"}[Fs0V1w#Y msSXG@ya]+Zbധ,qHUP`%. |Hd*p*@(Uz9Z jf.8b]&¦ @aDG{:@`~ēOW֏PL>|)]zzQF\Q>BL=j]ߌ 0,Mʍ vl^CՃ#m]x:+]K*pS+~WE"8\}MH6\|AQvjaGxwp\߽-L`:!LISx@1 Ǜ0 ۓ;b#o= P#{SL.k2pw^wX9=>.( Oh([vGHR<i#`\| SyGW3OuwlSuLa{unry Y ?VĬۅ NMs :>:mȐ 9YQV [xзngH}v ~Xy\ [`!~(FXHDb n VbycZ3m-sAP.###z'ߖb 5ت^LcT_$-7wM+Ǜcy } wݸFueJ!Bcudej>+%rmKLVH+8Rx#EQ.*r]yK -`}k=u@؍!üN"X-mδhH[ԭD\DEPװ{ uZa;J-k`wRG|+9[Ϙ%" [ ?#p%" α4ada`&f':#ke' +3^MNck\K Jaw6I}>C`>NwjWj̞MGou ˢd _1o7+a9N֞VحۋQlIDN !>TF)p*O'jjCB/*n1X?u괵ˤL6k وE8I/rqǜi ;a,6Z{\1j˕O`!"r.D%P;QtJWX_PRvs67cb)-bcpø]TmW%E3oS(YZե9q Vu~ F0!KhSO-gJyndptjL$'4њS34-յꤒbM">"JZu G /3qĽQkiM<-Q[#76e7K7f65Du B$erҸk=bll%%d護N&ISF'ָ2͌ELQMg\Mx`=GQD _l̀JN;4b/ˏf`pu%2X6Ҭ12;bcZ,'͹0L $/k@("S_Z)2_?ӁAGy*У,P+<Fx@Br9B[ K,0^ӇE \+vl MoEJ}(Uy}&s9lgaoߛsߎWGh" RX9s2$FxzR1IhyM13ܝ ]y yqtL'V-P *]>.!UTMv^ ({~}R!2B8Q8!Տ$; rЩ| 2n ߄ ; -ޚM/["e>؀aTSSOrHšQG8Bp@':S&A2kC Gejw160XTm?u0SzK"EZ5v27 N2ǭֱ,`*.%C!"Umz RXn'o$lT&=D\P>vإ38Ŗ(Db;6t=W{{0No/ `‹x[@+^1t~cDp^=w{D "bO!$E{˻%n ^XeL'1yO^7:(Y`Pv*Vq?RKA9`LpuuGgyiˡ:FWJصRor/ zx= Dh8lniO%kO1̵I? oLqv ~<#m|n>~'a]BԁKȢaqfEٻ޷tto^` fynE%Nbmoe:Yӛi.9<=VGɳM|s罡* q6zADV-:w/eVϸLL!`ž '5O OynYѯSy._+f\v޹P,78@(HYⵙP*Yy+ Bx7fJlDNv4B@;%͇iN!n &42 _qtKy7JIZ,R]. ̎C야-Jo+Adž4ϕ39.W q$mQg%IpakF*2_b 6d7G?>L/*L(%bP5RZB@frF(Oo +(@^??Aā *OMգ>ADgO~3tS봈x#ҷdgףEBHj կ8erlYMl[kZ\{7():sZ w&E|!@JPO_*[6*v"?I~gaty 0}]t68WR`闹Q>%Ǎd~G_\fe_}+&傣툱'V_OC0;}m嬩pFQ $ZDוFPlÚӓw@ed=}As2cH3"&X?ۨwѣ[:s2ۅr^D' f#ľƹ7mlC\UnOXwTH7XI eOPoll1׹Ffw18*8 bm"YG,$.(<>au$1Z $ 6p©ўkg8u32+MHQ`g/'sSd` 1`#ǛX1iO9k1h_FAp:8rg `^,*,BNي)f7i!$J Q] П1`ͷ`iɀ5)Nzz`ObF׊L~*F8IR/b̗$סBUhcϽO,ya%e]xtY19 }p+&W!C'}쮙H1 0?3@3}swLԮJGG1%KGŧ@m7".Ig\6 E-Xb(y$* CilO=k?"DE6l3? 83=\A$16ʦ8*Fe^ӌE->RoYY9JMѾ3el@$6oK:4M48P~A~F tn_%{M#.Z AQnVLX)0zkk>\[U; Ν7y1ya6ͺnۀ`[[_d~O˝3Hv98D @  =QA # (Z>:CygDy2344A`B(gqDpnq$<ȫHt4\0j*P[#fX]Cex5ȿe7wݐaon}B~IB*jXu ׷:ʁj<-Fhzmډ{;w9@1_˞us)*' 1&WQPi9׌kܩB5,P}O,4 Yɗ)8Ggndi$1u$k^'-=m@#QǺ9.~-V9HF>PB6Q&YP U86$3E܉j\Z20|`svRQ}6ڜMw /QA#(ޔZY %^]\!ć*WKRiό,r^w<4rSOф 32-ua& f y0eA`_0fR.C# r/1է.9L/:SDDf}@6ՅtcF*WY Fi!B霃FcXePKw]쟽|lJ8f{ U\g^k5o_oJh),EquXjm ^堃U,4@<)~ftl Ab?BU)H0NDA5sn/3#WGERaoZ">pʓ仿Ln]^_q3`5ha1V @眡'Cit?743`lWaB0Ͳ$0K1U hx:7Uet(b N<, EpX=Rm^u#ƈ3=.7ug Ff?kaXTKL4QMN.5֝D%`zpc3!"Ac2HK 0F1%n}^}A .ʙ6yRǚ”&+ 2]x|F{8ZħтNln{O;ɝ Ֆ I:̮dU 2=)VSNvrbmy Vt3B`JiV! e+(m[Z,=2a u/$y_-4T6}8bc= ^Z g^(ۄJ$Uް]1OX&TDe`,$Ƈ؝%1V˝[ 5uvM?-#E* ]ځP M m_^hGIp~DZo^cm/!9ɅN;T&J0Z"tsM[igS.Ou@0|Wn3q[*v=Dq- 0G)u1 \Ӆ]:tb0 7:91=$3pJ3螲Wet"L''\оjφ[p"،%bԥVm^8!D7ZAL'u u-,~x.&(I5v!5VT#PQxmEXb3ÜjV],*`rlB#C :AODC BCR.؁c}4ΪrA%Q|u/):!Vm bʲ}(y>Sb%1On^95\KX Yӝ|[-ޗK$~Ϊ2v\U0=M3`~XBtOtνk](Wп o:$h{bxOY7oCbzMv,}=c 531KxhaM0 uI),8+xGkv^CC^;N{vg;QI z'1(~MU}^|hzFFZlsfxI(<+DW`Ts O{hKe[;#*=CS+]!G7~j,:ZK8C쭒 ឦΖ~CG:d,<^!ibs_^|zpSnogI/FN$.. 27I Q陉=UNZ;BܦfWE40Vs$ѷ-DR2y ϠSfmRōBjh3M]OC3tJ<SP=J0&~g`L*n֨> )Z3H(:zxa/nޛ84Ԩ a&pi|x&D;CwNHZv] D7iƷ`qzb0ěi/Qj鞹gBcxB9Wi<}]^gڠ8K\|vw7KU< (|[ ?/wuΖ,2҄\z$^W~I_NE řkƊ S!&c`PU+Y';?!%8}QOO3^Dg/&)nkyzS\ѓR5PE;v% u|R/ Y`Tsk(B\_ǯȬ#h(n%%> &( =cGJQ;]dXϱɎ-&aҝSOvW-oE2sr&Uskӏkd~TئYYUmwAVq:p7ވ$_B1y.JE~c!+36&kKW85] X(hbOq5r4,nWTܹWS]{IY판sĈEȍU;Z6όX盎*lu"6凳ۖ@ѷ ?5e8Wuz 4c.ݒ8[i8N4RJ֍˲aYB6' @ڃ;P%WFP94 X?%/VR V7Nyџծ ǬEJBOFa$)slVC_hp 0" KY,DYt)#$Ѐ3j`o%y<bp>8^;|wfjc8ڙ] W.SGq]2?uWX?USXOِ &=rblB Č]eȨ]E/F*'¶rA[I/هh$B-^v6N2A p 5-FD5WKPsyU媆cxê'n ;H mDQF+ܾTt֠OIZ7&?n)vm H &EDU0ӻ]۴I-S$'! 1H[+:z{ րʒ/'z$7@Ezufh0n$|IJ?"U3\32=%SCщ'c҅m:Iud_¶Wp_GZcg?NO1GlbauMr}DF M~t6;aoh Ӫ"})8(:EDEl_m^D9UN)u l}N pײyU!1Zr*Y3ZKIڀA.lFaư0s{R{GNDh|Fh 33i:T&Rb}C`JZSZ*O۬BHqJ?ɋ)T2CEw۷"٪X :+/-7]_(v TIrM}PiHHTP"4 L~GM _5 Jvwa]"޼uVHfyF{6&1&|m/Y~-Db;ɡx3Y4E^;V.44І?O"zR=[lK1m"դ1nFa/'YmAthw9y\M$E; ?&6(ؕV%H{[xxZo_; B [q;?3PEKNknhv{čg]v83dϯ\w.GUPU:d;'zFi^k_fnܥ$9@ :Bj["y[6,`DX ӳ^BMSʑ}̱9Y5X^m+#kzA@řlN={#jA~[NgK/9g:fxȾ4ldm]@F⌵xaK1\2v-.[2 |rvw~㮫^ kg3k~/{ˀ nD:"/~o1 w鵹` 67*Yd`3kKR3D|+}Y<醆f87̜JI@s281+%8˲PnW:j$q CC aGE2(`b01!AJDvUL#J9-h@&jP%H(gx#^u Ba,.SqݙRIq_+l  Ь|Kz7/R= [Afh8{@'Ͳ|IRVzxY?c䫫zН(Xb ؔHV-LJRE9vP]}:Cp`Lj.9ˀQrܿ^X&y}Xi Xe7;z KP! N`Q}U~K_dBjѽϖzI&җ'2+ѷ. z72'|Yp';x=ȶ3̮!IyIUO_y`uiU0|kf78#'oSe3 uɋ+K}ߩyRS4Bcp~fհ p&mEZĀK$P pf}НdZs9PlKÖA{lN4V:V$5ATAeq oeWȌ| +8Ng\ lru\DB)[`S" TKWv?{g;+C5w;ВK/PĶPshs%ڝyO%'ƛ %8<.5ʤpigxV٤z]$?ՑN$A7s %"5zmS!] L4!'6?Z};}J_zxc xtRw4kl!(qn<)};$9tqX Zs< ek.>~XSdf X.zӢ܆LčurdMt {J =aDHr q>yv9e<1h'Dr{-Z\&јX\pAYuʤV`P3nM4 #v}Ş92..ejnU0vKؔ'ׂeOI8sV,E~(1ai%F{_!u!n:|L2N-~*t [K [[s0ʥc3 BFoCqeHD0 #\sߔmmkf!#^=aV=ͣE)mڌd&Ӭ7|pF%{BG'ڮыᘔG0X(jǬw"v+ڎy@+8lbm~(4*vFEjGgӟϔ=FmmmlJZGq9ŶmmfL bb)acj[mmh Z}Ur.U(w/-f7Տ<.oqGbL3UHH%teo(h_6ՂǦ%LB7wܵ,?x4ʦlw>1y}%PQkzbwpoae%iU`TȐcn$ބ;H* W&`i0M:|9Ekj>7k[Ӿ>ai&G\3 1cZ˿L$/Q-OsrEU^D?59CuvwG0FKdP;k#q7ʮ |MmpYmy,N,.NyŽ PD!3EJg!^;Gj}4 "PkmJ s} X +߀ORW ē莎M"XKLv5$Yh-\ިiIĘ- \aD^G]XIĉs%lq9= \1)2u(N}ѩbsV:,4oBkMc6SeH裍0p-jOj)4یݒn@(bHۥS4 E<6#Nьr1"30 c˼w9aƼmclgpC #,]Z,oze³L. r ݲEWR#{"CP!"pfϤFc S|tZķi"5UZZC{ *={D5aAVo$i fnx^5@W)Fd[!(ї T- BPFL78R>!v4lSX814y[mA%E,< $I+4mmmmf͝9dM iPXċ4hБugX_)N# іͤ@HڇL}WO77|۠+\: `u( ruk/6F5PjߕUig%^\;'a?ɼeGg88S{q9YFK Ō:OR6ekS"bG)}l`NF8Kpkg>~>eK.K@Woy3F@6qj" ժ+nw%PdPqڃ{{O\| ']yF&gsS y]jcYHpԆ |li4W |KFըC9֖o[.0;R85fg#BǠEfE`~vDtXM;@TC^9ǯ\MHMOF&]?uc֟5OLڷ]/^a|- $&^YacV~ 'qGos妎E gg*<_'m(|NpG&8q6lcrV(F[41I\IQL.79zY,> qWh0|D]طw:g$MSEBns%8U W wcȋO_q؃NXL"y+'~~'d?SVce&-M7Y%:3yxY_ +t͊PqG__jVrMza` XDp( 2RYVOkcQ⺬K!{[}jNl%IY6]Y+`=}wG2BBZetݲiW!QNGZg_~Uځ.u|Y!_u^\ްƋ욁vr+{܏`AN8|mD`ωa*9A؛DZ> #'ss-ot d6 =O)Lm5d͟-AՐ\A L} P'X9N) $^ev^4aTD=Dj//ve?|m0NT"(9hs_ PS$YX6`FK+rM9莒x)>h٢+}3cdFg!,.nt 0׶FѓŬL`pY'z t}@ot;gqahP,VfV/%<Era!xzY|K8~M:($| :AK/Fhᮾ  HO>O!< J@doP@(޺R,.t=|q/8"aX)04RތC!U}) D`+h_![R7487;YABhs$܉V8=*:Z \DotX"AVbp՝YUPEV71.O_LO KS7$qb7 ^Tڳ!e'Tķ*Ix z AKwɼl~t*I}u 7x}0މS.CR=75L'^#)Dm'q?hi0LǹQ S. }̂p( DLvZ|7[2ah/ 3ɜОFk)b/͋)s+R{ӱn,"Nn`mtV6?& 0x)\ݮ0 ؑeydr={8nbյ4+> J O @[7MN:F>s͘Tn|mMݶe./ɿ oM^>4&q?,)IBEo `yr l\6\#I{m@:O3 X\:vVPb4LNe#}V{P{0Fa:f,v4P 4ҙ&`k8JĀڙE)4e?D3v6|]-.9 $SNRP`\[_[j]Z[u. !Hpe1bJ;ӻ:(aw|-X,&ZY7M8x=h G~m,Q* vžd`]A@y{,Juԟ!U_I3\|Nާ[_{-s3_9elH^VOPfb-19՘E.ϔ.aNuF*oNnYҕUD*\I[,/7$^$G2<|s %΍luBV-wr/X|z0DDGoX":Gt~  #qe䛹ȳt %c3~B:ie6>~dY_fFa-\:DaJ2,|iYZYikhI+!"H!JkfHGSt@DTd?QM HW@:@~vB;dPᰅmIiܔCy<')29%%`ތ < jj`'#Kk#x]tak`z}zp>lϢZ0WrW]͹$V,4"P9}K&{=Ts~xJx>S"rlҳ#-yH!°i^"n0/9PmE[zzf|' P8` Zѻ#/K^&_ȬO*=h|/?q4aFR&D&ڞX?Kpe1yRxg`+ԮK3܇U4Rڹ9BʻGzԖoD (;(d՗U;8|2'V&l4c{9^`z"Bj5h9G3JkǝM!td?@:{eTh|.,@a 'qx`#>@mm\W1 t$FêmcD~MUlAKk ]5)o'Ć[:PHRin)(O~vJ!&M~p.'Y 45yP,~V %sW1lK om36˳RLPzbٗH: qX" +@հdi|XC|edE2QYn, 1*xNf U^qq:r$k!)}60gni(ɏZ,2H[|UK޼r+X/=OD``&~ b_N!]*-VU 5f?QxRvسߦܽ EqRK$֚zXI7e.'oGq%g;5Nݔ趤A.OoP̟}RYDo_(kȲ3V&[^ӊDϴ4=gmP{0Jiv_ߠo/dM 6~(W: !!T}z{?phhB !,d?3ɴrO}+]o,a$?gUmںe#&djQwI,G-FP\jc4keO$d,Au={bأ9Φ@E*sRީBb8 0ƴOKy7`E蛛!4-;5"%KvI:$w(R3$밖R׾fg"P2@у5n`&emʬ0g~oqӺ*dJ٦Sx4.].Wk<$ ):4ɊƄMwuFMر`jUhLffvG»>5fy>.}5q#,ؾ+ r@Y(=q+gZ*[igTǜ\&wYH>i㞌&S==MCi S /0Fг NE\|ǽw bxp~)JVO5bCG%KFSRKq暉6,lhKp]>%VXSb32Uq3C)၇3Ц*1_g~k%E4Nn4SiDLN"no"b@R ZB> ]judI օC~tOeg35.`^B.3j7Ɩv,(Zƍ x pPP6x5Κt4@D9FlvC'fnRiDb?=&: $nL) ͇l+R :>2^6'0_ 'V|iB<1!h$I%Dk+K_Ǖs9q9]%1Q@MB͋_T5| Z0|5CQ\yrMx>x#JWoG/ϯv)U{XB36ɖ]`4k|*Ӛw(E( ? 829ۉoyn-ErG8 U zMwK4a Dx3NqD۹17dx{pL`'!EW4fDp[{^ M=0Ӷ76 }O`uhʑWlYqIJ1c[l/+ZՅokߒ >AM9D2H4FXKB4'5@SS.OxRL[K4x\ܰ?7&?Lhkd,e垕Ah䖫_B1[ɁRTߴ~& ?H=Z `-ȼol}n4#9c!2,v+I^@ScR=N>G8l054"㬁mzOlO q :J^HT6(YU3[&͟A.FۥvO{H A" <^RṚ%Xʀe _w]amD|[u`Z-{eSj 4 ɓ4~:OKLzQ5*U-e~Ri?Unu X{{e 7JC|3VN *~@@]X:~cJpIZ=ܸ;%pnX6((,pq%(~)A~sR s̭ * aZ-Q@$Ehsԥ&oEc^o (-a"(~n|߽MaR k,hRsH-YuFٺi#GXCA(p:1ʌ5|Qbmtq@%*ӳ'wnǾ*Y`APl=2n*d)EQ̗CUyBIz˥IZ[6)SAKGsRkce"ȇ1 #&#/(d 4q27DgExpMvԾb#-ِ^ϥ$_RgRUs#T5qj]+ѵ;ISchQCr"`?T+r^>ev?TBTY5> VG D|jbhq&wb52i˟U5%2 $H!7%a-J1Բ0!֭6пf|od0fvX""NInxc0c#UMn@N;O#XS"||N[C,nks,xf|zk,o[~fp &iN|  X⇳Lm[pN7I~211JI C4:nB8.#lSi)e_B_e=:#z{^dq @q['=l%krۥim!/#9<-)JLLh`+5H Kx/.֮Nv,~ӆ JkyZTCQWV4Bz<&Ա Ô*U=:wfD#18Q9`z˹ -ȲN[xU)$N{Z8qP DW*oͲs/6tY]73oeI0ɍ v "3A HJ-0AۜMt$ɶFޫM3bW@3!T;///;,r~o^5!QDK9V9ßu֨J*ƒscb K[ Ux;MϨ;΋x B8[@)KwC_oV%ijYI -mQ`vs_l:9CPkhۥJyS':;1A t2NK<9>U.픊zDAOxX<"_ t}` bzTs'}FW07ݲWm vUgg+EF_/32d"=`E!Kk̕G?KQgTnى;$7p{/<N/_? ڼM/>X6;%i6.Br{C 5j[-[k1v\ 4hVv+!:G⌇ՏĤse@πii]ئ g3?}eMI`ceÌ?d>#mY<#N.O sOHyWO)e Щc>G gb Ȋ$xCQpI|cOC]*K208byCc)An0F;p{eÞ\PU/ =] J/pE,2b9n& y =e ua+7mG$dL^bx`t{P;\ )_.})JL㷗ex$WH;gizgic[W2PpD /A~U+[tBI+3uS[G) U哷 fz]T缾ʀ7hĿ~ݖP`ԺwγԜ*(4vXJS r;L×9k} GChDopSc!nKZ]Cg?ʸq'amEIwl@qj繈 S9 `ʵĐ gf [\ ) ٟIPM_L7r#xD$leq="E%z%/l]cP+zlpP//>/XD!_VH]S8l896v: ?Vԉ,}>D9}zúOii#S>S|wiUO'|z|>s%>XgG.} ף/@wX~{j;_IF ˀ M@P(-FuZ3 Aqe 7ҒҪOhg܌ Sg=*aj/AjC#eS}X İTZO(Ǥ+Ne@uoi_ok؄dΡonPasb%Q;ȝ9Ij#:錜{UFtщ5,rFG .ð4it<\_ȍ`1Lvյ&n[[S%^C;]3ETyTD 5 \Y VԢřJ!\| LaaWHZ}K~%H(8e[=4ШYϩ* {C ,B^j+u΃.92<܍j2ez;%#Dw}ȫ &’"G MF /Q?EMRj 3xY n$R`r'P~1w Y&Ra$+e EnelnqB-}jĨo{o\DO^ }56^a<,n_I7MdZrPa%y֔*?DTܺzmvHiZM]<867RƎ9幈arje%i_("*SmjC "{/)DHezD?_[%gw? wLՇ& "9ƋHR|5ؑ>XiruyCxW޷R$n2Z'>0I!;PqP,'I$Pᷥ- ,=,RCciBTG ocp$BcrRi'_2IJx̫ZhH5_oFrU#vȧ 40e*-uZ{dhtlY['{(A? ?o)+ (~Dp8Ncg@!;avC:ˆDUL,Hf  no0k\έʙ» <TRhʹ)tA+W ۯ}bJIKLc )Y%>:c^ikoYN][Ki T;ym޴)cEP<^3v$T}4Q 5oK'R |a͊ZT'H7Fl:W۶o?e@* Use WXbD;+}<'J][Kium.lmTH7 t!p^[@WQUܻъOER,ʘ(0)E5<6.VV#<I`J ؒr RKVR}R֣mARJ48D^ɵMVu#ۛseiwJT9Y'\CԆi9sxmz"iVOH9Z7X5kϼןy?S.۾6Mwr J9es9ZHԜDVOq%SV@ĸ$yIS4\(%zG|ecşft@]WNS0͒l.+ coU |q\s;'=ix"Bx+i?yKxnԏJ0y J4pD u`ߵVs1GpN(^/Jo1w8r7w$[DKQܚ2s!l'z"yL΃4çpSǪmuO8n&g7O{:A%=3g#>=+Q֘&7Rm睿Gӝg G}mO?*e5B~dG9#'q}[5^(DQ8"ۈ`YA.[}hVucOmCa JAKvvKR~!2f}m.մI_P1r 4!ﴉjh'%:]f{"[gƟD{խΘm5f[4@AgfP.4VCff[\XtyFܵUt~4W56B+t>V}$djֿ/ #z~<3Ө& ')$j>(&3%OTfG5im8P OhPY)rSXѻn)N Y>] :8>@+ w1c@Ed-Pnrrh ehPM,sZ(7tywࣨC$%u!~JF.MW8KWM+YtLj%D/˓3oW0JW+&&m,:_QxPY jJGN[X$Cm+wt⭼[iPh(m6MH?Xr7ӋxʾpuG<^ >G1&+ˏb熶)+ +mtam96i{*g)[ >Ms0߻+u=оW#CAJ>|J˞󼹺yB1cXk72D a2)DuV &vpEuQJb(;t=1LW N )Ejó.v֪;SE;oi;=H&#H<bî)N[KFY%@J}e>'@&q#Vyӕ&  r]oH8ͱ",' ԌQ$10TRP˳`dʼnҦ 0&QRkX'$Zj !h(oؤ#FS*UZS\ #8q/"\HfuHsΛdJ5K~D^W%)};4hh[VayFn8W0)xgc8tÔG lUBG~hd4-\I: k A.3wotBgw㹚tzȐAW`n׈5[lH7zDyAgmZTu[N:>GH-!Xğj Sfo?8]PIrh oS+CO>f t2yW%U~#{HV# QBC&` A ? uo%/xsn|ڇEجj8@Ky9X?w.a iћ[Eʴ}vB-6*Pg(ϼ0P*2q!+Δ"JϲuX}T`n 4dQ՟N%CF5kj 5̀t]2Ź$UC?QNn K`Q|wNd3-B,G Z7# sתӳ|ñzj/mòau5NfjYсCmVJPrH$ʽ-1H?oqX׷PSH<\)>,7Z!%) LlUb$S,[h?ۄn>\u){lhGw 5ǤMԠs#@xm\=Z -^Ɓh?=4X6Sm YuVYpz]]N^ pmYG+l\%$oih+..A4O/kugjz\Dk4mW˻P Oxyk$?Oߥ&6;,Ny耂lوHxG[DвiuAɣi <~dDM A"zrgNF}nWݺӹw~p=MdZE1erHdOXh% Z/j/<Z'MO# קWpb0=Zs {x.v-GZi]?V=i&VPjnX]KoTl,g?Z^ E`i8{fM#Hv^?jxMXbHqSzrbqCQvͺi@]66rܚeEl T-~[ȡR0g7@\E/ŌtQ>3>nkKʎSB" ~C_;u/ aG:#k"tVxHu:Y=.A KmyA)dob l;;PRޝB+b9jQi[$0:4.;TZIjubA>;hAK#Hprs-+!?O$=:]u*\gA.`..Iidد&6o7Wi1p҅v@)/8^X9u]Bo?J^a:2 EDy9x' RBm^5r ހEPޯurTJmhmmO`9L=wޤK/,sPahԗo467JZYUR")sn_9. SUjq.f L)MdN:YE`.hY!Mbsb^h,`:~~ij ,Xkf{@P\Lb_3@`"˾卵U 0}~ݧNU'8iU{`֌OH@AFKT>1yշ[ Xs2'uEfC'[a~ BXoB[ \rK~%&JBCsX[C4=k’( +*ANv^!URkBzj+ֹ}Umpoi+^όmoE+os6j|@؄Dn; Q:-#0z 0M&δ5xD 5~F + 5>;pad3b&! Ccj75?펥IS\+%bM)F`hbGםB.0GdaH u0\ym NX ݓ׈˳\w]w1SnO[ UBW7ĺc~L9/krZ0RD5xt;|k<(/(@/{HBN6C8͔.)2i+Tg)Z%٥(Q= d|XLN Y|o]w: ޾:\qzM|C;\_xaע е~gmJﳠ1NРi; {Ѩ!7G~ p5]~`@:Cwܓ`z'Au0O_ "q*ԶziaNPځ [elV}1u1rHJºZ7a aFYAΐ2">rrUCّ?GeF 0T,7R)}%&coz*^?AqP6 Q1@w 8P5䒚ޙP`eS+5ry Jx~ZXa>$08cXvYHBlW^UZ% U!uޖ㱒W$ ɪzL%[-v/Q'Yb6ǽ71˕f ˟sq_ bN{t,Zs&(mj{fZ)َ|u0arcgɏ=3Q:َ/c CȯIjZ곃m/!Sz**49ЀIp":M }#T94 NLKFe ,+y.4%\守 fн~.GaK`NN%vuB%rE3RYiLD9 .7p5 w3cj4&R-M*i4eAh`P PKE3Ji2",qu+2=TPiD91"Tfgk |cJ-h&#Ϩܼ `Dl;/ 8J W5m Y=Er6+6,D0X:W&".Č+@9dDҤũMh/c7!iz1r7-,zNU.#xHlYs4"![t۸=n7Cw_eG/5&}cNJiː# =h&S]:EA pcvj CzW :OoVT"<윏L["W؜za&kc_B"D -pېujzMՍȑF 4} DS=޿lrs ~jÉ+M.ڙ}S(y ئ?*Ŕdr2/R@?_ r=ƑGÄzM֠i]qg<(t$MNeƻB܄a#*ams-Qrg}MZ0׬J f J Zev4MKl pM=/*ֆ7{ v$;:Zfq|kM8"ĩ\T}4\ʷ$BVkou=UmX lNƱYgL*8l x e; Sihޏfݲ3y\?,6Mq #W]76vΝY A=Th䚱N~aKcExMsW?7 U3Yӽ%n3zlՀ :f*J fZPv n=h{@d`9KJ'%yv}6X-34(G6?U(/=sRtd5wVG9g 96- 4wĻ;~V BlE1W‚Dpغ )p\j+=rK:K-^Ob/mƹwҍ?@I(O|}siKi"35>2_X7b2T3Kmj&o5F1)@]1@46^VpHB GË"=c#bt!>^# N $r|l4 [8_Oװ ICGgwAUc,8\8Ȕi´"/Sǣ',OQ +C)*(ea$Tgg2DޢsqsiiItusX| RInppYXgwZw;AM{:3+Bs 1@C^iyk" NF\Y(aޜ ]+9礗&}KKnCәOYu^q`Syg=4NP]jO݄>W`U x =xQ\Nx*g@Z籭_?fdA쎃15?vuzno{۹);Ɍ)> *AŶhz 4lɼVA+/A"5a {)I_]B.$Jn$o:SeQ(Ӛ$`_b3SR;(4 C-,$iv )\ۀ{\4`Q8Gq&jEFo$?Ka"X%B^o$ϕAK7Y3k_z5ϥb-6@F{cۈ׃p }U*8) N×_րV%;*yD[EwɿSc1}D"@wޭEg*Zݑ1{#ZF a&b9՛8 dVD6>q_\: ȭh RtI2!SBF3BpKmdӮ;tsOY1H>bCb$~lq% =;|*oVZoij~-:`?ųˏ=`~B+,T >^~ @T(>&BDPRh*;q牮տ[WjJ pMK)46Km3CyvN;CEC 2ud@_0#oM4ʻG3UcDRFѪM^+^Mۗ/KrL}/u vΓC3?W_k+nrlpszm7d=Ԭfh}9REE[͛t=to*y)`\c5Tvn)vH@ZPjrLRNjIZEu3:4@A:v_ ygvqV_~l(]@"332PFS$?o𣳖-K ' rM=瑓>TIRܞ7e?A_6Ʃg& x ڄ}X۸;}+i%9݃*5^9(G~5Z HHPaN+͇LU f{:m}E yl6qǰhxa=S+s#ado#q !,/),3~(~C DZD~׊+voTDbz[aS#&VR~)8A{VM)Dj|7=1DxA1,FdS!SXhb?PA;JGBZT0>[0rp@;x*soGMMv,YJqS'#x9<88bw= ԖClu uaX9jW;yyT-&w.zj FgZK6ݫ57K`'eJ QjK9ɇEW-ld;p ȌI g~߇dAqZn6 |A3ߘ6n zmډգ0!ʭ%2~%1˨Uu\Ya. s F9r!=zss:*fQ5& '`+؝0.TuSaͨd'S3.#l;?E%`jg<>C$WHo%J[~v};f́½nœX#Ae>K tZ/mu*1>\8~8 Jle0]9_Cm93ͦ?=:g?=s(2Q$tgo{qqʈõtzG3-js&~:_"pF!fe=CL\:$6'Qy*RYIς`z:#D72td[ԋW'#ȗAQeߓ0"w A='=[X۸@z4Xљ;m=>:(8y\@ ۡL4l9?wjJy4Ah*sR*;yi,+ꯕ[J0j|\&ҭaD,JކU-J~ Js:ܳaƹmʕIEDKVu I_$UDNī!CA_۱sV^J /"pI/μį;8MbMxe-V6K7iT:Lb)FUw n;>v?*$?IWW9Ńae^8X~uj5eT7m qeކ̯l̬(Vzwg!4QSnV]|~h$`D '̽,2s:o^><* K)KK`pm'Й N c݅tHc^B^S.Ni=NL1A޿=iK3'lvlO*&2\져:ϫ㣩`lUIdlʈIn%8𵒚- @.L7Dc?@34\@)%Qssz.{R+3m^܂#׼Կ fk4kL-0 ~iW{ЀB{f qCt--"vDS %z2tm b7:M2|~jSvu % \d4xۡd'<< ׳r[go;g0P՗@5flYŧ*Jz7ZO`PU`?yC߸'GY>"C=.3F&;.:b5F& j>!ZAj}rYڥEyE?d`sT!o|缡6470EEA]M0mdAkGOEwQ8 -6[*M*.$$İDs4!eb{VAq]"1x(;ߤ*v;M( |$  .7Aa.bu9E(HMn=澩7:݋˜~^Xv͓LL4 @b}o 1ZKmcAw SwK!*xSQҜ ;D?9%{uC$LT 0T)DFFƍ?Z0 85\6z}WK 7>loz[ğվQ9?p=ȃ"|"3`~hV6Bg@ ^=o6ja!<..幠U,629SG [{i<&*Q>j~ S6Avz@͕k;)y`Rwciw6Y%m+027H_ͩbsxK_{xoe %/ D gYeTn$x;D-:>OY~(_vNC d_1'|{aïf:#PDeqUPyW>?riiHS ?srsp4x:xf@9F;"}6;ms;Ym:?A(zOKۜӷ=QuȢ,+2%$Pa)D+0:xD::ZxwuP7o@҂>-jj@Lx %[0f^(Rk]!D;i5FS3BN,ÿ|J2[;O]cJǼ^9+!{90S%O1f FKIzʵq]/~pmep{/FD>~U7)ѫoG})bZŸ ܔtNĎ%Of{bYRMQ'XdO~;UNG7t4`q4z uIk.m ̘cI? R0n^GȢ%펜`\](쵾7%!#&VW}^J6M^z&m %oT*lHRs ?}zne`r;4y+_lZƓ0%/(iRڥhEZc:fY)ǡAщŅiu]p*GB'ΖV5.ar7@Pͱl=6نZ^퇞RЈ'dif z|̇h.R7E'C:  籜@#J:Ӧ ׆esvAO ܥ#ZpטomKӋB;[Lvť$koާdMj8LYQc`qVbm:A$lW_ײGWE iT&SڽAؓ1iJ(߈DepLy 9;\'GoS^mO?҈FkYCk\Ϲ@3ܫ~#kA=r]iō\Bc4[}=,9z? b^(h[;J%UjPz? Q)x,8ysҿڷtE(7 ŵ$?e';/\i[Uj!lJ2J ͨ!\yWBlӼWrt^Czx14ӥT<yRY% / ʛ鮃]e0vq#Heb棵 ({f&=(9M@-<)qfnż*sPTwYN2_ e+짛PlVSE.y(ew9t*w!)xQ ٜ9lBʥN<قBeZ`>t^ܜ٢p#%CqBHK>^m&ۯF&>o!r,+Jҏa_% 82* J ~8X)4Iuf&pٵ̔=- XHX<`&f26*lA6HANj)K`[\ҕ4^]¼Vvd|-drO\ fF Um:s4c-okFH(r,ǀ\:SܲޜWLDŽ歅妱`m"氶9޿GDA29iȨX\z}ɈɓbO,ѐcUC faV]/*@%}g O&pt 4L/zށ~!I}~^1@~z$:h VAS13gڥ*TtFdt9'4㈪Jk鯾NY8L  >oN:|9لg+xyVk146T@8ж^Z?|% ptxccP1V79@63d;|x3^WϥYrbCb#M> =nWC?8?tl w?(GKGOc5oOњs9S<]Jpyy)u(϶ FH#Kfl-Xk4Cc@)CiGd]{[%xl|w?Ҿ\\Aq&+0[cRc G9NyR6^2( ".m'Yy Amk0wk?:] 0^CWCy] x=v fC0M:sij,Qlp[nM]וxk')vvvأo=,oc@c`©*֊3@X$@xk۟OLi}[HTfe%+gi\G/vǣ)XN? GEI9ud{RY|#:94VdZ1THjt 451NCUQ+4Kuk`a#*TvfoGIH1{a0k@aWhS*7sG2zHtPlF]E%; [2ПE)Pu|4E<@tFt +zߙq(8/ϗdABjƹ:q8 c/*Oݭem (&>9\K݆& Bȏva@fͰd3ߎS?;=Ƴ G܂:E^+z(]Ќ~xp ԑ/b.I'PwI5}B|6AJ!x^>n9"'[KR]k! W';8wRd[ʘP%kwZ=B!Zc~jikOlfߠHxao›T܀DD0mc/L>-l(j!'0W"b*׈R˂1<͵[Gq"O Piqs|bðr$(2X.b$k$K1h+?Ww\M ~Ʃeb-%$xƝXGs~Ʈwxݬij\KNjK;{k8{A,NByp_Ehf:ϛ԰&NuTԫ&O,W}0<9`vҔؼnf=@Bkzy\Hw!4|p<4E:u:bpas%cOaɡC¤I``.S:S?x?fOXKH3#0 EvCH ]T(mj;[ V̢ 0^xHĢhLaSڏnqag:L=E_:n%I%A^S0(2;S0)8Kk֠D۸iĆ(5c TBA8ii9H|YЅǟL&?^ tRذE֩_lKL(ɐHPk{[$+XMb qf#3E?TPe_TRճ?eAc2%1kH< E_A\'B!|* EJllJmt ϴ6`hxRΈve>w>>2  `mjsYb UAݵ^/ء{nsLDKbD:-X pN:x8\^[LHN:*bViɮh?-ݴ&84Y!㕆L;;QR;\wlw??kc}c?Ӿs=:-d^\IDӾNI&`IhB#S?ĪKS.7<).x:S1 C^V c97wOZթEN8鎪hƚߢչ "Lb32bkb3^;M&47IlM S\W~V覰ISe'hU݄"F*r2C8i_`A nOB6bN|#㼁 7 ,;K݃ӓ~pJs#~2$޹/kd؇֙V"h UVHdsS۴#~ְ?-q""Ud n쉟㖟w[_`7=10qs3pIFIl*2(#[{5wΰTŠ@f>ZG$̗+Ny"C.3A ,x\f܍W?D;aӝO]kDf!S9sFU<ݩe9#͕\7 <= -zy1kڼ¸5irC@$bri+u,`T ˢP{{"u,B-Fi| |9! +ѽP Y[%8 \'AުFb&*XXqS/Vu?%Yq&XL%` ^1D7Elx1#.)9JSm+ Qe5ϳl`4G¸@yNC=IE)&nn[4t:IUX4LE_`xs flp}p/hRdMl(B>kHEP n2z $CrcqQW甌 7>#1.:|-w?W`@R\O#0,/EvZش: D!Ԑ;<Ȋ;QԒ͑2lؓBu2DSU|0qƺ33v( 鄆]vOIqᅬY"`GWj~c\[{83:kt&cPA,_wds}/|nLa60 4慎W؀bϼ7%<8h)ő#+'iNcd*}r^AY<.<VCmrތå]B@X.yKCZ'¼lSikB`h߈LZj[u %+`st= UO`^pւ߅Mk﷯@t^1nFˊg9G]]%utw떵+A9Mod h8Ν<3"X|80@"_6գGDc_a'?vkP@ is'sgݑdJS ~M@ /Dr 8WQ:5(mohqFqt#+f[#\1_]JRrQ |OqVFL vDD\8R=5i}zKl9x NA?<*"gl 9侦59?EH71..FTc)`]{R>Bكs(>n d)>_6u6rXvvQEU2])^5{ט g9+ ,?H;rmn(7U~.V*m|hTn`3njN08HFJ;j!(:^/k* M}?@9 Q䮟bqedb>*B[aà1zjnWgϒ*\-&'$#rJ{LrT`}Wñ!r8 oR|>-yqJcsLQN!jZ]$QV?lF]lZ(G+."pplMܭ\LE|Rв31#fSc8!łWC`!,J̉g<ɰ&!v.+|< gKB7ΩeL-C͖7:6؅qwcgQ)kQ@SS""7uH4o㩠&ZdTxԷǐCBoF.9f +˜eAݍ|RV}ltK&cFT*>gX tm]/Vp_ 01QIJT\а).4ԡPo*'1#@ͼ[t1.Xt<:oSz4BGif Hh{u6(HpJ/&poA_Ͼ 3S|b;00u=· d$KJhV*; GF!~}\?;R'jsfPkM:kBۨtu7Aϓڌ@ [HqkBwV*m 1Q?-@BD ^:Z钣`?nѕļI1 h|ptnm˯|9$xxQS@'Sf&b HTM7Ռ@}^ P#ٗi 5rVJUTf0,b2e26ib=ɒR04M$SbV,f \(-ULT4,7H莗z0}xL^o#WA0;{_\˦ t_l99&%G QUV3w.rsHytJ6P֗6:jMg6 (OaD9CÝSr/$VGmHnR$>Ee{NqWmks0RzU_v<+iDOW蠄|<=Eʻ}n q.џ=~g$-H.Xuc,k+\t' PʻOK+W[yӬQ|<9}l2>&B(Pa?WWwDCdHRTiCgQJAaH\M'p5;~ߠKq V",*Xoi1겖{^Ep_t]c5Ҭ9S6لtj7dcI4Whs0&v~'qhy!@1J!e2>$j\෶l\}بvttcCk›"ۋ𹉜sV9d:,IiX5--y޿;P$)xxJ2 ]r˜c˂fZ#}j!̬koW92ҡ! 섰I).Ɖ,4!<;N0%ZE$ӓ%wYC 6'3t0h<_čYbl!P$OЀcH.nc-z|M&s&~ëʠk_::{n[ ʪs*7D(3X7ȟ̿S. :|+Gy Whѩx#{R,:*e*d`[5Ϩ)ஒoFTtX:A6d,!]c\$EM" 8{dR0SBbMb;+y-+C8_0=2 diaOUD8M ݭbt[gSL%ptc]sPi'SI ֽͺs9Q˯j 9)/Іa[S 3D9TcnBFt-1Imaxᱟ%ـo所/V)dSJ<3ڽgbΆE)Zăd:͚1JJsfb%)l! WxFYHb=uxd#o+ȴ E9MuQ>aK[Ȥ/̮u/^4't"u;_ |)+T*͗ j/ĪJ t͍][)r*Y,\J{5kuQ=4\ W|aD,6f*6=A; ?<//UM*䜹cn_?^_Ph"ٟl=n& N4tDa(kێcUz:DR X8}dX$s.2Wm3_a*VV?vI7nNwK$6uRhY穌]Q1H !"2ZR\!tMz4S"N!ɰi}:j#oY)rz\Qr|( DqF6!e;jyԭKO'o]@ tNUpvZ .9<7$)Q?ήho[SUf4?&0YE2wֵ̥.NJ#_ct9nǐ)X@4GCDbp*iqUapn@ 9 v3֓PI{:+ѹ8҃ ˞^5yrF ۶4=Z0zey`G sjzZ5\9'l99'B'z\RNo^,='u E%c/p/Pٯ ;ub%.D!X[]ao}]1pl(iȷpzKʮN jF6:JZ@0 PU.#FZ:pm D#G"!(] p7K2̞wғb#Cݜ8["e|؅I{XbX!Q'T^yܢz "` *GX!:E@/!{u5 I7-9+>]5G(bv]@nUZ%a-yFR}ƚmw9;$?6 RLT[|0c9b&qe&TZrE`^ ;v ++ U̇ʍL%弫]TI:G:Hyګm^u*N*G]!$n]z1:=ySPfSW]_3N A0f6-6jal9 j%w74ty .oa1[镚*k ;F1Y΢w⤧z `Md֛c ){3;paExCiÃd!9BQ[H:>fFe23MbP y^ng zHS}9sn S0W P~?Qo [WU3# ?gw KΜeƮQ'["#(X*+[l({S^gnD)ƧmF||T`6T~>I< /;(S`3G_8#T:V) ;)l9W>ZMY]h vL\Td,dXZ^0s姶aLnrT~y!ez*Ħ޵`8(w쑼?4'.<IN8ju L%SΡ%.Y y;`m2{3 u o,?5~qpL sfg% 2Å4yv;W)F*NpAT5*#^0꣙sgx%%2c)H E) >C|.~bld~hJeQyO`MQ6De,Pv1bZrٟR#!Y#O:\-xO} ` .jyw"yFfiBxH0d#62H!v+CS$v,Q3F(MW / TRD[q%x$hS`6& K-N.SwүI 9֧Riл1F"G(n ҽB-I6>gPy 8ߛwjoPnvW{nN2dfhPFJNЏ"&2Jw%􊏽_,ZLf'szdM~e!Qע:x2`u$l׎4,0U,[j~"wUm%gI}U-阶"Pu^EG*TEٙ'0jYCTɇmCGH\A*/ɗMVиgLt!I "fA_IS }4 h|D-y$\k| J lTmi/Y26v|ƀ3.6h2݂Ѻ1jcj{RM(a[,'_IKL0($nFh'=XC,+{8r!ZOnM;pbY(#JsmlI&u!e)NvM1>Q|50 I1[YZMZz'7-"n(z' Ch?ti96gD)W$E,) $v[Zޝƥv4cCpa=}xY>}!&U8Nں?CDg,tC|\yԬ8% ݶX=)vq)5^:d}MCGl.YWw/3E1{3GZ].oBAV}x"#]GvZ@Z/Edpإ |ڪ&Bĺ4Jl&U[b"CůyѲ(h$  Yb atkwTOd4AXI*fƽwh2^kjeؽ9M -1ɛPmZՔLBjNKЍ$gϚ:`ǝ[;ydPLoo2fMC.|h-d5r RfRe/E2Dq>PPܚ:Ľ2ꕲǕ#*PkB]pLqvmr-b'06z5!" ~,͘?\^(7Ĩgu@X> $ mX:J;, (fe}cTKo \dMNUJ7nzfjć\t8RJ?77bdM|W\ yCJi9]|+ZaW*NIgg:`]_^s/@lMuBYK]J)-28uj< Ge3T73Eg׵t8O1 .{x,"CfQ0. e]9NmM Ti˕6gH&⥉@ekb'\ '3i;w 6llSu]| 8qlq n1`S@%nXVXTp?7_h^"n(t_y#8Lmf 5aPh3/ ۖmld7A,3`8}l8lٗ } NZ%tj Y%OAIq͎M/j*.Pv~YpmSLFY <*8/pqyG)uI)Yb[5i}WrɗDMGfngB_e L-'ӫkBYiBvH8lu8k} el"c ` 9 N!:&ķ}VRsyb|%Ch `W n&%v Xjݕ[>Xr[2I*(bQT&&F"c[]# w0}D`Aцɶ$XNe| z~UT͌y˔HяUsV cgT%Ǒ0l:v󖞽f? V y` Iۻ&W 9 }Z!jYh>%" ˘ZDz\dzYvJַUy6yl2@s sCl#$hydrogen-0.9.6-beta3/data/img/gray/icon.svg000066400000000000000000000221271211146647700204560ustar00rootroot00000000000000 image/svg+xml hydrogen-0.9.6-beta3/data/img/gray/icon16.png000066400000000000000000000007061211146647700206110ustar00rootroot00000000000000PNG  IHDRatEXtSoftwarewww.inkscape.org<hIDAT81kTA<^k~m6il$$kagJ"v)HS mNj!))A,pbf޾} z{{Lzݵqj-l [s\`)"t~9Y_V ["QζVJiܤ?d@)I-E3U/@Oxu+[j\v Ƥr-,יkuM}=_JS 2v Dc M\(uL7/У/2ژ `Pzd+t{ZmESj} ptBv̌lԑ!ŗoIVsض].LJk貐ٮ~IENDB`hydrogen-0.9.6-beta3/data/img/gray/icon24.png000066400000000000000000000022011211146647700206000ustar00rootroot00000000000000PNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDAT(MlTUo:33NFHV!LDgFQ1h;uF.\ݹ1b4c LtTtL31vͻ?v;5;|I@Hn k3YPr]֛gNo_ώDa& 03(LÌzsb"~q+a%a&~O>t*~6A|C<&k[:hL~zd\4ǟMі5KIՅryjAϭZ$ [ʝW#4`ػk;nz ?* Sø3g. 2ʵ ͒Rn[ _1 GG:n7pEKA_!E41A3 6i]rmkoK+Gwt䌋,"yWf4Xv#Du;!o)ӗ+7ջqMK9 /`|lAbl9R)ꍰ W9|$"m8f2i2qy&bwle9Iҁc)7RklΜ+ߒhI K!G%mj3nE?q'NxGɮgRY`p'_&1llz#T,0T̻ EYZBraEi@ 4Ks>OaLV_Ʊ;ݲ>|(b⾱La*L y\. RZ1/hld'Ŏ,ԃV#ߜ58П9,ϑ':^7qv~k95=w?TdSӽ.IENDB`hydrogen-0.9.6-beta3/data/img/gray/icon32.png000066400000000000000000000026541211146647700206130ustar00rootroot00000000000000PNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org<>IDAT(]U;캮mVk)Yx]DQXdY]]tQtuuSdDd` TFf|yx1J03|sF=[}MT* o"pTF*Sn{mݫW1 b0b =ʈ  bgDu#?F\ǍN狯~]K pNJhiNt"\wpĔ#~"{`A0xX$kQnMR>w.R*`ujzw/#7OSuIΞُ'ru^6 ˗b =J)Үm,kgk>|dd:@PP^:wn6\[& E eJ):sb9`ulR?[ssCjgfRt Fh\B`h9 r (VyC&=;oj@&. 6DdV3KCG6 wHm3הVļf9ԆR߫j2Gh+̀pc+&yOg 0w('TݾDa5 8X X *aLî'6zUq_ 0m4 W8wbz!VMkf.'Tp] 6;ױnDOy~ O %ڎl [H Pv:,n"-=KPZ'Jld6_Yqo:kWOj^q{heL%~[x5"ܛw[\6 %. V&JS4\MgGc0N>#nXd߁cT._}ngyP:ƻnjFchnJoЏ/S*OJi E\ 3^,3>>1D33{ヘ F)LTH&JS3ԨT1bPJђFP(bJiSn 1PC:jiRNL#"hIj5AĽSh6u]`kՑ5ADH&)i@fS#LԇѬMx@P]dCC]YQ?oNT.\ oǖo}K(gX콫}öMmc0NqgfX` poﳗgخMQeǖ``?ߺ<.x}$eor1r# 9q5(F*kV}18*";H Y! aADQycìZ$ PW?y i`ȢK"~[F䩋x鷤i*ZpDEWսXgb`ڕ9$IG1*0:Pf%ěEtmH:ɜɪ %h7v7@^:X ",T D$!M%߱mH7N\VTZ;8xOs >m4bW׻U<KG> 3#'vdX |8Ny0Ci/o6ᥟ?gWs<<ؼK큕,%Ǚޢ"m=>rG7Y !^:xAhWh߀ciLv37nZx&TkGc(9MXdjN[ 3;7x>ٔײmڎ&Wr7$b㵿3"ӓdT0~ |e'»>v NGo7 G,t~ʒ!J7nV9sa&SUV,EyE.M^xkFK%&.Nq$ ~o^ǒ ܚaTI 7 # 4u{4T`hc5*a295sWIP5UvDC.UArȧ?9LM߰PoǶ2;[9OWvmdW8}υ|g/MNM4ͪn*H"̺GLIhd=R#Y87~ JPiYtu_ܺN3b(L3^j)W_j-v68xTY2t}K2urﰛZ͹i Y#c#TV@_2ĭj PBP#-&T0k{׿֬hm,2Fiֹ`SGx]Իmg{:TnTv\r'EO~o/U[E P^4]UiAM^s+{S]F~ wëWP3Uu㪂`Q4Q6(jQqb}cYX! M!Q Qog>s 6B1_y zcټ~ԭTv``h ^Sjˍn$hx*[$7>x_R\Kuע~||= +dP +ax "·ۖDV$KUZ1JB& HdER$_> x?zUoC?ɃUşyW*u)e%;E:DL8[icScNι7~9eXD%o]ar$`͋Hn>$/&;=!ܲnŇ:H8_I$m[_n/*Qܞ%əD^*𪊢d Ϙ2A7ȽEQXkR Cx$ hΖ;3G2ޜƭ[Uȓk2~'S0Pku$f)l{^d 'g* ٪3ϙ`^jgɳW#?"ͩ<}@|GQ@afH;q 7R;<|꓂r8'W&.z{xFabLYI;9Q(P! 3`Bx;% QYyEJgK P/zH8x<Bx- aI;OWO悞=}ڟYx P?O>`rUy?r.1ӊ$Yyٝy@m\V<|.<|o%i[֛rG{Ɋ^}RyjG߿%R K f;yak黷%;vd9"6\}XDw~(0e7A|g攪m.G)D'B+b"yM}x{yRӚzRy)/YSb'ՠQum:7k\*(s> Z 1K|)ݧ(/| ԍx1@P J$r2J-{FgdoQ.P4/̞ ɆH<;\(&dvC*FL)5cE*õbL,z_>WK "jlmr;ݜL.| eY66[{ecaJ6 (Ir`5<݀[T3~Ԣe|YW|'^ xkS xuzf+^;S o;sà '&v0`[S*S-7z} ҷx?wɑ#'XPZe}`9MtL Ûo 8Kmi_5uc,O`WZޅ!oiw} ꑗsl]l{OjNO,_y8݈&Vr (9zz(ۄmob>@9uzѓcP֯]AѕD8g6of\{bjZ`7'xd+O7nONr(qM% iKf 2`g}_z24|򏿇U SW$-ux$}Affڹ=<ؾ<U,dF$zi <a07&M5/Uꁷi r.׮U+F+5QS Ca*&&\c}.lFs&˖- Bݗ8oMzcmZd|b$QpA!맻@b ,^7Xnwktww!)>R .h:o4lZ7tڷםOM7Vqލ' ް,[݋^a#X,to7V/B:yxܛwJ{^S1'|\>D^m{@z̀T#5sc/ID_6y8O>Q01Z>UʂoNWE!CFlZWOR, rG]m[$?癱nZCsbc`Qi>XIENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/000077500000000000000000000000001211146647700223605ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/bypass_off.png000066400000000000000000000010121211146647700252130ustar00rootroot00000000000000PNG  IHDR ugAMA1_IDATx?A i XDDHqlV^u Eː&UBQYF,9Ep-RHf Y3oΣV ^ XŘ1i6*D1RJH'IZe䆣 HR(h6*((K_D'_Nl|<|_9q7j?!:;{2`eƘ3m3Z9Zk;- Z xi΋5^!%or7#)76m>}ղ%8{ݝx;]Yоs>A￱}W\JҚՖMI^:VOG9:}Z*aE ȲaY GqB&I\(8qQIENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/bypass_on.png000066400000000000000000000007121211146647700250630ustar00rootroot00000000000000PNG  IHDR ugAMA1_IDATxA (٭\U4uD!jW!~j=hMi :FPiW7NOG-P+UV=j%ۿ~z/sG>8?qLg!"6wG1c"MhlpL+9Ǵ)z]g)#Npy.xK\+¶@Bݚp~Vz_y[gm[ܝR8=FF'R{3r1¾,a19 9 ߻]1M:1x\{ om!~衛^([/6qLUX[ a|m/xr?X0ڲӇ;{{>Gǔ?d1IYIENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/deleteLayer_off.png000066400000000000000000000013431211146647700261600ustar00rootroot00000000000000PNG  IHDR^ WgAMA1_IDATx?hSQ;(8p ZCiNATR0Ŕ:H Tq(bSQ2 \!L!}/IW!=ι˻UhX|`|lc0k <k5+YLed*k.Dc5c&߳olɫx,"H4H4mso\r:\n&l34حcػ_o*BB>$u/@_BWݶ Ut3oJ:.Oiege5N6 Km~dV}!TR)rRvT>̩旘R T{`vnGGGom ]:ի*Nzf]τ_7ELL"ft¯X,: $|;IAR'u$&G־- tT`Sё~`-?֜?xH>rz9{|ʩ?.~}L2%ϳuzbXt>wʩ?.~'Ux۷25Ft f ]ihu흟 ێ,Gd888huO`O!kZQIENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/deleteLayer_on.png000066400000000000000000000013441211146647700260230ustar00rootroot00000000000000PNG  IHDR^ WgAMA1_IDATx1O"ADmM$Xl B+cIal \B(,L&h@_Nαaw=%qy7۷ *@bQ.m Q.Nx_F\̙ ܕ89Ql4l6%`tx9$jJEA\6j$"@:8"G:F6n6tXۀ⤪7%C3PEn b007UsضZ5EmNg]ׇш8ZtzB*P@VBm[ 6 ąbN{?;]s^\'J[r6]Kd\d:Er\j=.c~cL:$0)yzݞٶ//JxYecYf| hՙk pݙu:B< φ^^Wb1C}k"d#Qk>CZA2 Z-~R: 0,qtDi2Ov7/fȿJLԺWeu$g+K>[o}bۅn/^%m;^ EΘݽlejja%w1EDt8"%ki(i2:7/^ۤrCP]i`զBAzZ;n#:! v˕1'9WV2d@ٓq ]M-<|@(l9- byJ%,>k<8Vb'׮(YSWKM]-Vb\IZysK)z7^Q}OdTpEcL%wOuv򕲾 p,Tg}N&cYmRt5(iyƆImZl[bwfݽ8pzC,ug^mo/ P]OOP[wZVk?MFgBwmMu[6~2W-{mbç&ܺgsog8_̢\޷{mbç&`p$7ظ}SLϴe<Ɗk Qb371}QG%^|s'$LŽo"_3!:.ۘIENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/editLayer_off.png000066400000000000000000000012361211146647700256440ustar00rootroot00000000000000PNG  IHDR^  7sRGBbKGD pHYs  tIME  ɡӗIDATXKq_OPY";zXN(^Da;m'!"٠8q80:t“hb`fP`D|sty}C#S#]|=*{~ށrT>EQPFz G$I\'7I }]2 S_c}>g8g,rf>s^YH׋>a>^Zp&/=%<8j9z__ߧ^zV,]8዗.snݝefQ߶\s\ۅCFHsd3IR7{ڥYRa/"縦ցeY䘽;o)㼨Vl&X: [O-$hqfF4{chɵ]!˽ɖ+~mf?]Vhb'PU2.OnlOr(^jio[y{oqRJ❊ {K]AIENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/editLayer_on.png000066400000000000000000000013021211146647700255000ustar00rootroot00000000000000PNG  IHDR^  7sRGBbKGD pHYs  tIME  vBIDATX?KPoBfˊ۬66V #"3ej "bHa؈~Yݎeq)ַE_l!{ɽ!SRQqj]JHJ I)Jxz j)HQ:VI"2FlysY\[\Mǡ֤;d vڔS稶eN)W(C#1;:>J|#t=䜵.ׅ8*#wwao/]wj'r[R <,.*kz ooIJjPhun&m;+k'swO}[#md[[X1pwv{@"'WZ-FDXd1 =eL\d_.^^R9mmIBрHl4`{;Qkgvw{ydm|dWuGj`4jסJ\^/}2R|Y|Ӊ1MDj<}Ǜf,Ub;wޖW#\?jR[IENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/editLayer_over.png000066400000000000000000000014751211146647700260520ustar00rootroot00000000000000PNG  IHDR^  7sRGBbKGD pHYs  tIME  9BYuIDATXKHTQwjH{PHP!*f @ -*a/4#(]Xh lcZ0X4Er'Yz̽gz_sm"k1\8{~=\;5 9IrlߗWo? wKo4VZj7}>x!&"J[)2cI(]L˹fr6쳑 `ьy[m<ଳĶ$Xk~GQfD%M{{j'yvMغͭ62 {/2&TWCc [[((-pՇj\szlcPU,/m߄jШVykص}'69YFsy^@ w2ǸugtCT5ҧÖWBU͍"w=Xe]E<}l*^5I\xjUӻƻw^G9>K>>aIj,y(7j~3 >slIENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/instrumentTab.png000066400000000000000000000371171211146647700257360ustar00rootroot00000000000000PNG  IHDR"[qsRGBbKGDC pHYs  tIME!dKV IDATxyxU?՝@$!.f.AGQsu:Ν2, (_I" !$I:HNwg!:U:zϩSUʓϾb)? Bo!@%ۈ uڮPNuUNGEE{d |9zĎhώO6#~q. rW stA=DA!A!AHAH"A"ADADA!A!AHAH"A"ADADA!A!AHAH"A"ADADA:N^OqFObEBTu冂 5AHPAo1mFAL& Vz`k4A FqO)th4X,(-gr˟b2jOʾc6-_XfK~~w(**.T˙,א1"AJAo2mFAO>xB?Nh,?*k ^GƈA*fdk x\W<"A u\\|xF7:'D+/aڌ K\tAͮ>-{ܞ.kO՝?FO'z!'_ݓ “eQ ;{LOԯ75"BkEc-/0\ȫ/?Ï@bh4-khtZjmT\X\mdŚyw X֝&HL#B$  "D Aڛ=?1=ju |;F;߻{ C c=+BEμ]}çƈCaڌ y' Yۙ/RE/$$THz@BBBڶJE!44LH<(Ba^o~'Dn .pM}M#ȵQxx$fd/a}#=fde r^Mll =z\̙_;JIJ-QQ0F  ٳ A0Ʋ.kN=i `PWfƞn hXX,F>X݅(|j'{Y4%>/ƏR\;7JrPMQ?5uu*:%%EQW^5eOinv)' 8lE{=#BQ|.^(7_C[_O\\555TVVMzz:&M⪫+dСFZ-DEEC^΁v:7޼o^:ld@3`HT`6#`wI6g=lڲ߾ݽũ2SOv$&&R[[Kmm-ZֶlFRJ||<&g>W NB$BBSet,\7fdQ\&O)g t ~5X8(o[ҧRAl"D ;AK|-k7vNۦ^>Z߷-GȶΔ-_ ︕wsWz;/}9֑/'Bԋ_&k}LVׯyus]p(g4)J c]9ڦ+{glݡ|x?qvn˭ZxOڷC^]|ٮEzM6(ՙ[Z1?+;n3k'.;'V Y[mѺ~ݭ/kJ' ϮLj=tv]~"DLZInD]\ҲH%k't&iϦ;^B7Zn}JG^Z^_~ݭ/Eڕkkyj=ޝ _k:{k((N6Z^<3KⴝbK_goq8ֺ>mZG[Kѿ^shMko˩۷v?uUޝ ]~~իqGO) xߏx Bd}i WhAb'qLJ:Az B$d6X̶׿lYSz ^TTHR;,5~׃̚5[jEmW_˙.gϞCyExN1{֯yu$u7˗7'D+/aڌ AB|IĨ<&׻fVF\QQl6Sxٽ2j;'e.0pP2S"uHj8S8Up7T_=[)?FPPpDT6oqHx떍gnQ>G]3Ei >)Begٶu#Jb.Éwyblڶ/.:&8]?%LrYy OtGSeS.krƌKcFF#455AL22>x# f}˸@ I׻`Nm ݽɳ]̘22`S?Qh!rhSWAgyd2)//F, RE >u٫0[aI:95S3EߟymNNO8ѥ4DDIxSzOpG]N!> EQ0L=zGRWWGSS&R"&&˜fYD0H^F>skؖÇ0vXN,0*t~2 -!)-!-cN_.fvDʔXhK$d4ٹs'yyyDFFOdd$PWWǹs())x><~4;.} ZQ_O묫a2Wl˫V̢{u'""<*o{we?xٯ{N_.:]=_rTUkyɧl'޽{9x ƍ#%%Fdl6@jj*QVVFTT&^ɉǨ8Wh{ϙttbcJ]tg]Nzg#ロロ?{) S۷n~#ESvזsEN~JNN&&&:j5ZC}eyL&hpVAw'w$D%%%NXbcc]1"OkʓQdfIEfz= LZMPPjuPӕMQRRR8t uLi %EfgFyўO;Jo7|=eQPKDd`hj%_|o^7FD ID$BXPm<( yD )8%?~:(ƏOnn.(t:(//gȐ!$&&R__O~Zn9g]ZZ겲2{rT. O6# LHD3 I6gO t_qqq={@tt4 եuZLdd$!/@tŚkxL&5z$h?) xp9jVEVOpp0yyy9X'3hdY_ x Sgq&OD[IT;}l|c@Ḣp7)0"}ՄGDq.&OV[=?Of2 N~weF6 2_h6Qvf,#"PXx%M۱9Q Dc'16*9zن>@Y, m^KvGٖn֓~ܼ=Vꬍ˫nw:k#׿ץsZoZ|rMX,nkUY=׀#_6_8լsHkl~mZOq(,ʜo+-"m]wlZYYcmٯߞiJPdmt:5m U`m&i?x(~b*k}ey{l^G_j|imo?͸NuNWgmdQ|R,_(s>֭3gS'4n?wi?N|CM ewdmbMk᰿S9]̺w;,Cg˻(s-[ٛͿ6fk[~"ch]קo[~]BCٿuyAb6d]-Y\4^wes/{C9;Y2햩ڗZi?<+R^Q+/]&NWPy#8tMww4Gs761!\Ȃz3mF"ܜC/+'&"W/' J=~ā} 29P/AbBEǙ0FDKAhzpxFҞV,_"W2MX,iEOAvT* Jvxl6s]2kl c۶Xmo7p5={ B QfϞ5o= xn߾AmA:zGh%'AX|IH>G1(/ ui`4H| Bã&fVF\QQl6Sxٽ2j$R`SSQ:}FV}֦v/:{ |&8Up7T_=[)?FPP0_2Utf:#  L/, ER*7|QvL #QaI>f?2x# f}XG MI׬Cz{Twbs45GLyJ-GKe.kCc#TWWh{JBɠE>UL3{]Ar}ug"ȁ6_?bY UMɝ>|WaPR|l%Y"tYFLm w:Q}]-phx!&? ѣG9z(uuu455a2Z-(bbbX,ĥزk? 4|sc?c-?K]EƤ6"~2BVS}^Ifcr;+JH̉o69o&_rg pn,~hK$d4ٹs'yyyDFFOdd$PWWǹs())x0<4<|V|oqG1dϔXhK$t96 u?,%' wVpkc<9k ?2(}R' {rAƍGJJ Ʉl&!!T ˣ &^IΉc$+d$pϙttbc\=zZO>ek kӄWr1* 6PHk |z7cHg}n\i@-+9ĦERQYYΝ;3f #GD`6( Ɍ5 V^ Pudi4NVOriݏg!6LSX=mS EDh2FMMM459E?s 7p`0\Z6 /Xœ?W`DX\n Ʉbh4Fm[.NNN: V%l0΄E3!@},fFrss=z-b]RRRt6 2~ c tzFcԁ&ǂIM=hSDi2/=ϴi's6FrLX;ooYMdd$jqD@HH< jdOJbؔ_;JIJ-QQ0͘L&L*..vIWfˑ#G8sL+::"ppN @hI5RRRcL<&Dߢ{˖6͞\1RRR1^YA$-wJ]}g:li݁lcM=FL&F@AA 2fN!i GX_1>bqj *DǷEa2hjjbر>|EQHOO'((&DF|#MzZ@DD S-ÚDhdeM x~BϯۿbZjkQPXa0l6YEĉ'$"!UaMs]NLUN0 HSr '鈊bRZZJjj*(NFSRILL~aI:rLZyMӮKo<Ç2Φk&_KpH({siSyy9C qIד{(w)e_TGiyY@4V4i?~Stt4&L@Rj %$$ݮ\]SNp & HًP ^>i]۩)02 D$"4km 746 t_qqq={@tt4 եu`WLdd$6AOwcI| %Mr{nKofX_yCcgOw)g9 p NDjkkE:4ZJEhh(L&ؽsv[L{dS[ iI>"1yLL&;w"i ;?֙* EQ0-*,&O$$&a,/s:7z Qqz&ZmAk&]3@HV>j#lEQ]]=eDDMhh(f :555̈́ENSgqb w< BՕe>yn ny$*A"*2~|CI:5SgyS$ ,ѵ 5 q߳zVgmdl[OkKm;ZX:{EYpgGG˞ MV:k#kNn]m_ٺ<](ӺMVؖm@WhȎE 8,[}<@n?*ϻ7J⮎.s egӺܕ9af5KzS[">mԞ}[q~ ~$"Q%m׻ڮ3dmbM&'[yl~ש _ٛmXm׎ |:-ʜ";~ #B'łlz2絜ٛXumV~)gk2`29ٸ!oWa,ض8]=+]>O> mņwxWTwKL4ٯx"G!!1 A&vQΑHU$&Ѓ YAo\Ds~DC$e%9rxߕ;q`|C4lAB7HLH8&^݈3cI rC.QъKs x/"AM\FD 23w\ c֭NPs eܹnHf f׬+Ƞ i&4._´R ׅhn|`b7RQ^FEy h4?AGYIqFG}LfV**ʨmw@Q:}FVřO!DֈHDw"JA1;! 2r8>x~E̚5#Gdbe%' Çcֶ}qi4!)d/N:$ڣ{1f?a"FHss3MMMDDD4x0SLO>ȁ_Y2.P=C/qaa>&G{@ ?[#KRZrillb( *H\#X 3hu|sk\/ED5]N!> EQ0L=zGRWWGSSo+BTT111X,Ƥ6"~@MEr6r 'ӥk-=X(\}́};lbeY,}%2Lܹ۷@||<~4!ϒ3~(gڿfRNW׻8Skyɧl'޽{9x ƍ#%%Fdl6@jj*QVVFTTˤ ĉcT+{Lz:}3$Hp\iӺϜCjPT*ܹ1c0rH4 fv($''3j(Z-zږGtlԅsx,D薝?W~7a20 8pFѣ1L.YOdbbbCVj:t!aWVY GYY 0k1*% QoQ\&л_OE՗q6y  **++aÆKJJ2(+-&)iDEl6c20ZHj-q8FHH< "F"D" 8o1 444(+/Dhh`0~h$44NGeeCm-ϸcB$KGwvlGSScǎeH:tKy0477ĉ"R;j!ӮKo;Ç2nt:QQQ\3ZCBٻw( :"2dӯ_?z=Gk؋PBX}&=Mhh(j&MDqq1Ǐẅ́ PThZBCC aՔE+_|A.R}Gk&g谑/'..*++&==I&qUWqW2tPF#Zp!/@7/ƛ9!]Iex$h3N:ǟ~µ%11Zjkkjf3*P1L{`1Ӆi5 >ztt}L: H4i߿ֺuJBQF#g(*,S$$&QQ^toHHfފ kkHw5Q¨`Ϟ2""‰&44E}f"l3j8ayV2"T]YF쓧vM0њm.DV1#WW۶]Qk?}~fuY5 mӺ(Ȧu+ݦ,Zay!sQ|<;Sf}q-~{EQ9gc|7I׬Y9[6).^`Vr5OǼN_n: ]3|5YXﶼEή>]Aa1]it%m؎v[WZٛߕu\DHw.L s1foniٛl[.uaݕ92]cfm]ٶlNbaW.pOu.aͯe|(O> mņwxWTwKlW&/T^=$$&$xi~;(A[Թ761!\Ȃz3mF"ܜC/+'&"(+9͑{܉`4lAE!Z$&Y$} nDԙ$Apb\(+n#˗ANDRz ^tSDd65kԊ c۶XwfϞ#Ђ xٳ"# u}^A˗0mFԂ u!Z[b$fVF\QQA#> NY#"aϼwyn|q[ OS?x$5S5O%>>P~D@~>U{wGr-\< SeS\6ɳ]̘2g<0""yOUsy999L8e羨D5s-O?nc41N> رc]#>h,0#S:":o;e,[0LLKݜg{ؖW|E=ƽ및#Znוs_iI-e+=bvһzu{~u췻tyzu'݄t  WW~)uJNl:Jw(JJJƶ|UZ_|WSgir ݉7w,vӎi2E>999<=R1ڿz% W݄QcDD|s_=4&QFaԸ.&&FH|ރ_U:Jjضmo67͛0>*Mr;뮻뮻vWwӎꤽs_A""tfu"##;嫳\"""?eee8yvC y9}L^G-y/+O_z< H": }@9^+o=0t| <N}kgBE+(8\3uߊ(,s>m2=szw[j߯sxqbbQT;_/~0c9m˖>HUUĻfS@y?F Ib#Fk $$)^I^QEQ6;&O\,(Ԥ7j<n;OZЀijҳ`^%4hZjuogξ>qcx7O_-I?Jss3yH,fIRTTN(@!88(jե=2231\?cU5t 8xf8zkOve!Gk#̻Fۺ)-=``0rĄxyKO7MMMݥ{`Bתn-wl1Çҿ쥱fY O%~3&'{ ̺aY?fzkޏ,{&޶m۲E֮ٳ~d[.*.#55018i tf^ /{D(0""O BԦqvr_wj۪( ?a:>eO_/=C$1bPP/CCCؘ.e1n։Wl˟~' N};vq_Ǐ#B#_yW,Gm+6doÝW,_;`~ 9rx InBx AAA444 X,fkȃvQΑl~/ v[DIRוĀrO$*E/"7l"E."j PDfE|յEXD"E=`_D`ȍEF,xחd݊hz|\b'~V?싫4P\d#{Pu$~-xIENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/instrument_show_off.png000066400000000000000000000011171211146647700271700ustar00rootroot00000000000000PNG  IHDR6%sRGBbKGD pHYs KtIME &wIDATh+DQǿ40(ƒZb!!B)E! ?֎Rdc),8oxo$yS}9JO@xgO뇍@L鐓?1K.o;+D_6ZɳnCDmV,ohmn8NUB 3!'b@#S,Y& U!#BAc%(E}@1=1͗ a25>,yJCjiA\)~K צk'`o룋"ofjxN%k%H!}gQAZ 4;?RS^gcmu<7oA;GE_9F цZ%d45Fa`**ʇcm;]5=`K$ÃST% z"|:ϻcC._u} IENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/instrument_show_on.png000066400000000000000000000010561211146647700270340ustar00rootroot00000000000000PNG  IHDR6%sRGBbKGD pHYs KtIME \mIDAThJQƿkWJ%ьA=D6!"Ѣvip 3p|;{. Mn(ˁ@Npw޹l?y'Cx*ZHW+ݧTRYI\?k&H@dX#u$ЬMiF; Үc3z0'ZhByy6˫TjzAtUNWXEHF&=Ԭx -`ΰF A"D" D@ @A A"D" D@ @A A"D" D@ @A A"D" D@ @A A"D" D@ @A A"D" D@ @A A"D" D@ @A A"D" D@ @A A"D" D@ @A A"D" D@ @A A"D" D@ @A @'!uMpAVYN/rҪ\D7rJдh;b5 I @&s 2k}Aҟ{z=a@fb@sGd^ԡ.>Esy qckwG^|^Z@T.RWT\RJH6& @D" D@ @A A"D" D@ @A A"D" D@ @A A"D" D@ 0hyU-;W|˝*ubB s253fjgJH-nT$mݾk9RM`~ϫ]>=[TÀ)'KZ*k5"g_Ğ戮sޏ>I a D{_Gsm#:5| AqkaktsdFsΕd1" i{w\;?ڲuǘ/;S̉.O3\fֳLpv9m 5JNQ(R(C7]o5?9ޖF<ש~m_3ƻ~2Ӷm ۆx6>Tm-5J׾NQ4x/ɮl_tmշkSo$[}}욭'oM&GDSDD6'n&̧1"Z#"IwvHG_m]7ų/KwC?jǶ9R&;'MN>f|#E2"?qӵsh##qӴnK}ϙg%ӟsˈ2="6L>˽~&m-5Z#"# /_*Eƛn>ϥ 1MNշ/7&x g3mDb).0uHL1 $>B|Ziyah>gdw;)}OgXt; I @&sG~@3ȈǾ$ɞ_棣Ipcgj0Xqcάx$ A3e8&x_ܿgXk i}/P,l̬"y,ⅴ=ŋµ575Kڿ~ffB]m:KkǶaJ(8P0P p8X4rb)77OGw0 n9?VTm۩WUsDSLGۭh4ߢʫ'gAUYL,yݥ^hW\KZ[۠9^}*--7g `Z>_gi>wx`pHW08ퟺYˮRž:twFhTXLHDPHGKZWW;v\(/Ӳںm^{Eݸwңx? Lo 'ծ$)/spoĽ#nSӾ}NxS:oKPOymݚj!( *H0 )á͛UKKζS]W?*wS#_2b1>m(˲Fu䨾^e{rbmV\)˥Al6~-]R(TqKyygzF? { tM,Ҡ_E.6>jqA577>5 J~MNUUU .2 +C E"!M|>bQ6IN fzy#"KhDyyyEiӖ#iS4U8V Paa,FɝsԫixRMShDi*//_pPA Y龼=Oh_Q.x<EɸVӰ H`PVRssd)Y<eY,KpX*,,fv?)''WDBpHEKwyf_X|Q ~ YIMzFe,{-)jhhHUUU2 Cobؘh4jmmR,P0i+7/OXTC^{uߌ+|j63؍L}$b1?5wTNe) Qo PCCv{j Vv@CCCr::֦"r:זZ|xCiN\\Rǵz:񪥥EVR PQQ6lؠfuvvZNSa(]===Zb***T\\H$@HeKeuT\DҫL}q]wyߏ-]>8Ӣ%k[KĉUXT$áNl6mڴIzwFVRR74M~9婵UnKE._Йw32K~h(,4.'`~>ȡsrݻR)DK.MKr:+PNST\RRwl6:r@ J)S3h-=߯-'gw?_>o?쇧ٮwN99Hgϼ߽𼺻UQQ"B!y<_~_6MeeeՉ'tyZB1ukSYD,VgxϣO^Ww{yJ?}^J^Zn[RΦi0 b1Y)m7zob/,,kD f>UMWHLW<^<إJJJp8dR8P mq9NI"r͖O+靓oчĈHQ΍':Ao/Od7Ԯwg;XVL%%wDSfWIIrsr Gl[XXk^A؇>C>#koO~@-# ># TNz||Q*J,: %6<*ʗ' 2l| 0X@H,fwؕeoiS;jjii[ w)Z Fo0? # %NYLpٿhw$ |t 0sL 2n{<:hiWQVE助(?;>pNZ @ZKzg֤'IΝ7r#ٰzӟ3GSgm £Ofϓax<|nHڿﷺgz9?9 55zMCyOgZ[&Gu͖3:RA5=qv=ԘxWi~?ߠWojfm.va}ҫReԩS:u dYVj-**R"PUUѨehejoԉGvrjk@]!ь7}L}x<#_eY4ߧWvX,&8qB*++SaAuwwܹsUYYUYY)ǣ p5v\l6;5XD5OlΡ`#g:KR S{[>*@OA}[SCCѣZv6oެXBі-[بP(.Z>PArsTn:488@ Q 4N.w.:$uwkSE Ze˖4MIׯWmmrrrǕH$F\Ruuu zJ$rW,ʪ }M I .~wS#_2b1>m(˲Fu䨾^eG/b\R.KlZ-?P(=/ˊQ^(A4t~dlF CG ܬ85Q;UUU)T(Rnn %d69M$' j@e}O;E-E0 Y%Ӗ#iS4U8V Paa,;Wr›шLT^^ᠬXPXzq1I}G#^Y1 aIR$1S$OoN`s8 SQY(A`I'Mtl?UF QMLӦH84b 2M ۫˗'w_#efdYrm`׀ 2Q4{+mDruҀd\ziXxTTT`0UVY 2Mst ˲,Yp8f D"p8%z;<'+ [je`?tpEQ9r: ^{FRUU oX,6+Z[[rp8 eS,P^wϕPfSL?ab9NUk,n],R(Rccz-ԑ6Z[["ۭ tl[s\[juc:;755 ,[q^NxjiiѪUTTT 6Ya jooWOOVX |>+h(Rrmv=,Q繳ԀD3fvթےwDۏwy*?1 CiQqtɵĭ%KJt*,*Pggl66mڤ;#^)))ƍe~*ۥb/Ly'kN FurdSA *ôҲezq5Hk7B^W^W~D'H~NYY,҉'tӻoS׹6_h 6(拻HlD_#=M6U u?h Α[WVjrݒZ4M31mj?{VJDu :tp[*X>a=w#dLԶ.D]ٝ~Np%wѼ~5\q9  4M-q]*(pDC!#Q t l9VFjxa4 Q5L47M]gE?zz=Iy~v$Ǯʆ?rR;p: DdYGc.{Nrsr g|ֻG\޿ZZVA I n/uM=F$3d'wh'wdSj, 0NE Aj@ ># TrU,*=5Ȍ )@ BYD{}RK?/OD/f{qvhL'  mS@08bjv_UMm#- 횛xKA.V>E3 CT{dDT!ɁXGIDATSw 2Ё}[U:;IENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/layerTabnew.png000066400000000000000000000306351211146647700253520ustar00rootroot00000000000000PNG  IHDR"-vgAMA abKGD pHYs  tIME 3na IDATxy|Su7I}o :PYdRd3SGqN\Eg#sGhTERhK}Kis(iI۴I_BON|~''ϽXZr "+s;dPS} D'FQlFQlFQl+Y|lcpρ62wmsH@8iе+Lt6bب>Ut//GD;nf]ӻ8<%uuLb{`pssGD>5ˣ,Nٯ=P(ZpRDF(7w5] / ;:2qscW?qTfc)wwgfMT?[~$69M9HOgO3gA"-^nzO͍hRc9xcЦVu)#>-^xe;v qc0"4Ǐ[urQ]]hdaGЦVuyM< ҥBd>5n x 3&;;RRW;=<)MGQi#dMuFxXVNmp*šQqTh̜yKAlAlAl0kw?r,_{\Al rc>sG֎C}䛼ŦkrY0 - 2"tp'kWa,Ox"ݑ6894$D8 lic̡΁n2{>\d]1>߮~Uc-mdT,6w]m]/ vߵ=,Zk]y*;@},JYX>|111|> /OzЂOڼrd a>V7jos1yrŵ,X`LʇI@ǵ̿Hl:M}eH\qN9mqs5B+Čln`s._]*x1 2Z5k7 *ޖ͞ov9Afx-_5T߂nݼ%)G#(&uzW_|{.Khm㡇5zn_jȼdj!Jbܸq:KR"//5շ:]|n?!̧[[ؼiTVVBbɓ􂏏<<< ~n>c6BW]QͿ'P_SN!99MMM9 u[. 60 @mRƏSN?BBBЪTaK3vûv|29߲ T"Hc%;-(0{^]8-l7_uH!w1(?x 0͛87=qxxfl12}Ȉ0DD#22Z:J>>hj>ܩA);;['ǎSg눉/sg9Aɝ旗Wg!%e1Ǝc_Fk1&)@ݬbC]g,f&&q}ᚵEt cfFm\_ 0=`Ygh~8w7toc1zw:p;K0g,\--BC{MolsR>ٳ8{KЌ6krI3;#b֜PQQښmHYzտuM.tzǜ`Ub6kIw ^=I}]5{Qdggc={6._B|qhw L}vi?ۿE/W_ٳ1fxzzbԨV bI Pю/hzӏqzi k0QUUgB@ H$nlk{20#=  FvCEhA){< M@6M&/"J ձ7n}۷QQQ0qN˱ZRRWw;XDQD0رEqa~ԯM5Q/Ν9!ɠT*qR>:=#+aOn? Wq^߿YQ|mshaA6(.Yġ|(Il9bys0r{ΠRr蹗^%Wgen8՜yKL75晊oL"bDDL"bDDL"bDDL"bDDL"bDDL"bDDL"bDDL"bDDL"bDDL"bDDL"b) bb9EilD!#C}K(x{1*'Y!+ 4Oě=x<D$"bD$"bD$"b#(*& FrL|"'"vIDÌ HU>01"dc(+s;dWٚe y$ueB6˿p =Dˮ} rPDR 6H|8HRCX,XzDJng;&O _-tj5r9J%nܸg86{vo9m"I!^)UPV4M翙xOXQ46M0cT9rhiiAkk+N8?oum/e5N?aDRWO"ٺt;{Ѵ!((MxnFCC NQ!-Z2Ԡ ܃SJ$qݙT*;@ю(12:MGD7q/j*F/bES|w_}(:p$e2:$OFIqv&2l3=8 N1`.^WOl)N:V ZpTT^ĉ؟\Lxe~i=u_R\ҫE=o%nnhSoo{|+$X~6 ߘ79x8> E'@πk !vה_,RQ׬d:Mdco#cxPden&#A۝yy ??MM͸q#B6  AxȎ$2> ` <3D0(e}29aA9A8ZjMcCm(:2 |x.c OS݉0ӧetю= Ɵ'~K\?KRܾ}ce2BCRA!oƌYڵ I3}`y˞./Uvo>,/f̼KRWbP((..J2'LxW/CzD;|rޞo?+ K  ׯ_Gcc#|}Ѩ+v-yJ  oo_l|b.\> 555CHH<==@?\Vu;{u2IVurnToTMV+V܏7obڴih4E#Gč7P[[v Ga-erX]!,< Mhjj믿t:n`0`pssCTT$3: U"~{13sFؔʮ`@cc#&O Z}!)) |VG3r" 0hP= O;+V@*BբJF\X|vܺYi:|Ξ9+W;XW"Y3_R\`qgםjlG'> B:u gΜA~~>MrA*@.$0c շo`c??̙37 77yyyGŘI`>+ѷߜSg:ayںFS%7gtR=D*"9Trc,ѦdrUep߁Lkߦõv e!Zs/.΋WYyX kn G  @8$G1"dTΈIDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1IDL"b1hPɌƏGCC-#B}O"LHF;!D)))YVvjj _%RԌ/JK.1 40W P0"ԫȨDFtM"`3B+C|XL"bDDL"bDDL"bDDL"bDDL"bDDL"bDDL"b# eU[D.o DĎ51ID$"&1IDԉ`yK IcC-gJ"ޞ]23ds[ޖAY!;k1DH$w"FzO-Z ޅl'tMRk'ڡ}"CsUx*!r;$$ d#vIu\C|f%:or:|Fr3PZP_ e +PY~< 0oXܝu]A__ڃSU8r0 <*+J|r=* ---PT9(ӽ5 ݙ7VPVěVi60n'Ox4T^@RRߏ]vaC\\, z-<LIV[ E ' ׯD"$''cŸBs~9ٙDNDt\̘y/jL&(v5jd2Z[[1&! Z:7l rnjT&]F\hZ 0%ҸqP* mX&(2pp10.ӛ1MnmD`0@.:]G1 tT*5D0(%D~Z)iteN 'J%ϟ'N`ƌ0 thkkCaa!R뇦z~}lyH@8v4s… ݋$T*;wSN_仦PK'{(%]*dUSc==:˿pkr u8ep:B&QO=0AD"9eǚ'(%%Q>HDjQ%QIed?+߀q!M<2DyAIFz$r!^ɁC 2gR!v>_T.JY+ȡ. O%U\Wo2fU7X)2 6WP0k?46ouI$66#B#PYQS#>> =svcGT9O~%hڱp|/"..M x@*+._ N˗/ĉE=^K`؞cD*-*'hhh@kk+Νh3K.EII A";JpssA-[l2$%%!22fѣ؈ܼQRVhHaH[BXη_ĈAƸqLt04iR)"!7! 0M]wVaPXrr9&MNg AUUڪF`P_(2 z%2un|kϷFiD@"uCkk+J%t:)  <<m|'CHR8q> DQ`VZF`` d2t+tzޖC鯐0B0޽+VT*VEQQd2ԄP[L_dVobcC}9.d>}'O`ZFvv6 F*`?BCC yKnݬ4[qO\ uAcS={`׮]8z(&LQqUDC{aGg~+xtf$O|e-PR\ɦm-M({PU}KRXS׿_<2{ϦvivJ={fى ?xכ^D"ATT9^^^((( `-{ ˎ7&L2 (**\.GCc#Ξ=ϝ{gǶ)ֶ~Q_W? [=jkk!ڵk8arLpX kn %eɀlSg:Ճ~sƥ(g/FF 2dnUC@e!0`Zh_8[.1cP]72lCxXh9ywz?'?keeIDATn`LDFlVZrNzwkDvW"9$ͨ_4\yNNR{u!" Y;D3jX Q"Ȩ_f#р8i^                                            j!k{!oƨрjlEi% QcC-j5"4a C5M  4IzDϽz)+s;GDDN@fB͞р˛tVG`ѐc!"""""""b!""b!"""""""b!""b!"""""""b!""b!"""""""b!""b!"""""""b!""b!"""""""b!""b!"""""""r26=12D4jQZrɶBPƆZFGQ!7sbDFV`TF\ތ1x   u)DQ1 9DwڐFu:螙?dhGDw[84#!'0D4tyw&FLZ,hjj+"pa![!w?BMmFD&#= f6GJ ED@Ɩm. .Y20gRfEAd }x .= E)+t>vѐ"I+h[dU `" N : Pa7^$ )I/{C9{)[jgDF@ގF45I!22^^^hinƭ۸vZZ C`P<=P]ugO LkʭمI#r=>FY4uR HN͙ٺӼgw4?ÙS_`7VˮbD#?5h jjjZ Q:b H`0P\\KĪ=۷[1{bL9#X {Y6gl݀[4/C/Gx|3d wOo t:+\x /A\.GUUЎ^ϴwM 9*m92w_ R[0g+@k/"dYzz۪2/NJ?j [lAkk+-[s")) шĘ1c0k,,]GFII QVVHnyFiI!JUnDdp[bjQR|#"1",juXrZ-r9~mL4 ƍN`r19cbb0i$TUUA*QQhmUC.oB`Pp*46n.D!84ӓ:uףI}vc@η^F_?H z=$R7Vh4(JCә (zӏt:$ t:]NJIޮ_T*mo'a 81ڿy+ڱ+vk5}MeƬ{"dnnEuu R0qD8q?яL{CQM?:Zj L&3=W : ?v f= q`1/B*Aw+a˗/JBXX{nc„ dBd,B|2BBBfzmk n߼ŅcHOc1r퀅ȉEu8>yii-eoq`nL̸AAAhiiL7 H$E^^^pwwGaa!} zׯyTeq ؞oJƖmv ,u97W`/|6Tj||OOOiBT2|=%XahM||ZNKŻ[=f,DíK  YsŌ1cPYJƖm b&טuA|\D2J5k7aLDX>NDWϽ: ??Ь#GDF. bfD4Tǎ#"eby XOD]'+s.Whd"'TY;#O1:D4 9}.-l"0&Oÿ>zN94̞ʵKtp΃h ݗ^ƌG|8f */b4ЯWwz8n3K% PVZuD뀅hH2ݰOwgv \C Wp!<],D64yOp(gS׮`[p47bH0"DUJJJh4mi;S*<= /[Q  Ƭ=_>R뀅C3V>vZ;j 9 ]h([(',˜1cjގ6h4tMM ΟZ(<ȓ~h,N:`!rX=uj ;*.!Ǧ6/A˜$,]0VT )i~^K.ҥKhkk^@eee|111xpsX q uB4="K9[7 E |'cނX7ng?݄(H$;v 'ODrr2fݴ^VEee%.^T ???`\X;s 9ٙ# u=YNױpcD@o~<׹t1^*Va ^ǁp)<HHHL&`t4DQFaѢEdCkk+ $hmU`Bi(tz`/D]lIΜLlFZm;1"4R mj4z$CѠ>}:Zil0tW bܸq;.RDR)L憀`46Bfs;7a:pu@WP;Οv1q'[`hĎ4 P9ホ7obĈREQ__T Tj8D :n>ׁk" lџOLGDV'|}~jXp̱kf \X84]8!oo_;W>аH@8444`֬Yhhh~OOO=Jׯ_GMM F &@P=:޾8g:pucD04[Ӗz{~o~*/+FSc=>ǵkABE( 5 jjuW1axyy`0 44W*M477AYbx_{D4437M?n3';2VVUk,ÁT#*2 8xL& pwwǍ7Q\TZ!;}@Xxjknk/;m8us+D ee_P?#= +X{, |IqJ{Ю@^g$ RdnnpwsG[[Qwňp'YKHOra;W="g8>{d\\x}m{X1@xDw__S5OA}טYSO>5KDWjuњ"rsVG`G(F]VvNId8h eIENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/library_show_off.png000066400000000000000000000010351211146647700264230ustar00rootroot00000000000000PNG  IHDRyotsBIT|d pHYs KtEXtSoftwarewww.inkscape.org<IDAThٽJCA3j#FSHD 6R1V`>DF-$] &ravv.ڟ (HQhmΣiڕ[aFȎӹ %#"F3LF3S#PUDJ h⢾`$|WG"ȱs7VcT/zKD5s-ury(8Pn{LKr]EVIgr{-TC跋gXm]^zm?uyuӋDP(~"8SVD>^D>6D> D5 0im"7^xy}K;1DZ fhh<.-.d@DZkoEU1[PM9 GE|aIENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/library_show_on.png000066400000000000000000000010541211146647700262660ustar00rootroot00000000000000PNG  IHDRyotsBIT|d pHYs KtEXtSoftwarewww.inkscape.org<IDAThJQ͠`D-$6 $""^ZV=XVpע?:JifaV 9{GouNA)DCR'"':F ;J/[Zzv&2DBrzÊ3ZqDG !qhV. Em.+tDd^[XlB"K}UCpyh8cx=g5܀4qLiW[,*!Ckxo]5(*1̫1m5_Gś@ÐY|V._^P`|E}spmx4"RJj2H 07m6ht2xDP*Z-۾Ԕ3r!#3\|4gʍIENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/loadLayer_off.png000066400000000000000000000014131211146647700256330ustar00rootroot00000000000000PNG  IHDR^ WgAMA1_IDATx;hSa#*8pD[B)աة8J[DKS 銃TЖkiZcRMmݼC1C+M uiPB߹''abzV*tIVtIVt _b*VIV=4 $+З#yz\M,Gvطɽa|NWURER*hv7inncg{`Qx=e9ȠLiIVqcjq?V4$ɢx8 LZ~_T>)f':3cSF,ֿ)]ֽTn?ZLt;yzFF,9'Gb`4 MӊJ#'\ml{4@:6z3\k$E<ޙGn篐d䚦q:0gƀ6ORhfjo IVrr%YKZ:X /Q/҆wGkc\qkω@K.v.z>&VI5in=qnb %e%Y(fxZ4 5_Us'KA |"e[q˶b<%ԩu*I\~AGH I<3|8@B 3ךּe}GIƣu-۽U[= ϐM=01 #!n$yT2!קK۾S_]ŋYꫫ)_~)5-vFlVVV =Ϟe~\~d!3(?ˬ7} ȫ~1LWlb;闋*5@yYILd. `q@F^G3&ש.+K:s잇y^WKs4u5 >Z`guݹ7@U0å5zL]^}܊IENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/loadLayer_over.png000066400000000000000000000015761211146647700260460ustar00rootroot00000000000000PNG  IHDR^ WgAMA1_5IDATxMHTQOEE АHF\Y…p$(4nE 6DӇRC,IJT4u>5-޼睙7# {坋!SՄSՄ!Z(ƪv]}BE1NU3~!PbLe%ٴioM4pn0>> hRRtE rhَ޾AꪏmUYI65-\|z}rmCܺJ*G&s1NUcxd7055e܊YoڢIH 0>#!uxcO7EYO0,Drk'aM_?;_4O;:|6/N<~z׺QZEZ `pIP,e/{>7d -Yw:96[1\&[0;Kx9o?~_lh!?/+}^>or)>X@.iE7dyD-̄W\}SLyvދ57;.4|Xvj/(,ȧyu߉rI4.~}Cnm]ѿo];2ֺp|?6Z lL 8\ban@h),DŽ8{m떄vY_Oνm!232bo%$yyo|0gJ}}戶zœqc[-lZAEͻo(/ͥJ/iϰ=UHfrs,d8g)d@۷xO316F9W#>E7UK&5&IENDB`hydrogen-0.9.6-beta3/data/img/gray/instrumentEditor/speaker.png000066400000000000000000000006441211146647700245240ustar00rootroot00000000000000PNG  IHDR szzgAMA abKGDIIDATxW[  o\/:ֺY&Ff@^MB~mߕY֚$ `I@Se>,R@.D"e]kbdQr|ִ⥏'v,#%'sU`X[i坳bQ@ by so,1*ߩۭ4,:,'x"RqoۧjQ^JiNhz맷EE{4W?/}V9okr*zdUڍZ!={>:v}oVWM;V:+[qߛvWIo?_k{z*WU;OLfh~Yh|?|VA>Uougqr48ݮ;:[Gg6QY>/fokݞw~+}<1z^ZUSft0;-og/J]t5Iʞ̬ʷ`Բߛ_vWj'w֕ףb;.h?VVmsweDˮxھ.k~r:Ut~6l]t{v}%h{:lJ^+]g1}2j4X?|6nVwv;hgvq4~V]\lO(^Er{9{ѵuQj>-oeughj2REUzϫ~'|#z81+fGz;Af6ݮIft]U蝼jW`z>A+]oՂYhqY8z-g{+߳d"dEO2^\U矣Ky:Q\[V'>:֭Fˑu|Q|W=ۛl=De2n;O͞^Yl2ov~ۯgxʷw?8d5V+G5ί*qx]*j%Uq jx~F?_AՕ9.nSTf9EgC7N+h,:g]eJj4_]/r?{c-P*u9~69NE[;YmXM_Z,:XƢe,:XƢe,:XƢe,:XƢe,:XƢe,:XƢe,:XƢe,:XΏdʒIENDB`hydrogen-0.9.6-beta3/data/img/gray/lcd/LCDLargeGrayFontSet.png000066400000000000000000000031761211146647700237630ustar00rootroot00000000000000PNG  IHDR@c#gAMA1_5IDATxKr6P٧ d\‹%;Y\5V h6*KHJ~?o\ z1*bTŨЋQbz-zŨЋQB/F^ z1֡P A0 A0 A0 s=(9(9(9(9(9(9(9( 3[< H O< H O< H O< Ho'tN8 @N8 @N8 @N8 @N8 @N8 @N8 @Ny>v۝_o鲎oz譟roM=V_:zNYYUʱ[uv~Gu~+7*+e6߬tmMo{|g8FKʹ{|4ތfQgIZTdfUU}lV>1Xݵؼ_tLv~GMw8go{=/e8v_\|'ZvśtY_tgm+-l۹F;젱J.gyu>g야Vc%bt2:Y;"]ehnlܬv.:wlޱyϨG9V=fݎo۵Z=ɌW Y7:9hr|zZ?k\߳|t\=WV;kGo^qo{]H1>Qًst|:OU!ʙB:A޶n7Zt㋚-꡵|f!.|fG?vݿhnjgƗ|~8?^vǣVQ#qz\?q~U9wKGvǣzW9WQ%%uљU{<Rw:GYޥmj꾭f<(Ql~uiͷP_I;ksUNYdُݶC Ӹ^#Wŏt`?Lu[t_ĞwH7~gDT|'/_?sGψjD? l/?sңx bT3UH+Y]xF(s!YYXVz? ? oxĨ6w/05D!]/w\cS>tH7f<"Ɓ8V5E~<7+ ?@pңw-2Z.Dq em9geeȱZsEcl:06@oǹF0{~XQ&gl8lm4Gy#{n}x:ݏsn^6ࢳN7"̰}eyV{xl+Dztznj>ϽgiYaTxJ3Fl2>`-~']pm,#=5Up]Q^1kD{p?9>wuϏ`Y|X9jg'QTqLfDXު8;c F#'Nf5 뽫?Z[?3hE?'ޟ7b=평]66ʪGD>`|G1sl^gsج]/>yX__6ffo_wzG+oB!, C!ߗWY3#_e ĺ kn=uvףfM32Oj`C_poHקu^LSn_E3G Ӣce+g<6!o.m,#;?߁h~1&?|Z⚹?س8٣m*==gV؟tZXUJ3FlfH2Jݛ= ĽEGoh#>|.Qq~sϣznXd9֏oc;zz2?Vq*}Q]?cJWu;y{>d]IrFlc|QL{ hOuy3kn+-T@u`kǼWOÎϕ͛']_wL^>ֳ#[4^?a$F7Q_LLLFo&m<|2#1ZcGx*V+=EG{Ǔi/1:h=6>(|hr܎}ݏ gVu u:p|0t`[㈽|\j/S^7Z/~Y@8UٸQ=8F4N4#gp<e\stt9ft3ڃ<̨fhTwo&lpF>1Gx,"QmXWF !9qe[pkx{xbz6"dy:DQ-t0՟/? g!|b|ЌD~ cyu}@ߟň;f~Ïu1{^ :fێȖ:s~Y.<Y}";f?a_cԷY50B͇(:PzStSotZE1x9@#_#5*o(/W !qVA+ͨl2-fdv1cZdE1_C4t![UB!Q !B_e ҥGHHzB!B!B!B!B!B!B!B!諬B1)u# IENDB`hydrogen-0.9.6-beta3/data/img/gray/lcd/LCDSmallFontSetRed.xcf000066400000000000000000001215541211146647700236060ustar00rootroot00000000000000gimp xcf file,BB gS,Sfondo     ,6eq},f`*C$TSfy|B:/$   B@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@B:/$   BA     F@@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@A     F@A : =@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiimiiiii"@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiriiiii"A : B@       766     &88889z@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@@       766     :88889zC         @iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiikiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiniiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@C         r==   %"@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@r==   %"l23     8@iiiiiiliiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@@iiiiiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@q23     8A     """=@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiqiiiiiiiiijiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@@iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii|iiiiiiiiiliiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii@A     """iiiiiiiiiiiiiiiiii!iiiiiiiiiiiiiiiiii!iiiiiiiiiiiiiiiiii!iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii!iiiiiiiiiiiiiiiiii!iiiiiiiiiiiiiiiiii!iiiiiiiiiiiiiiiiii B!,Nuovo livello     ?,c#/;G, G    G    G    G    G    G    G    G   G B!,Maschera di selezione,<HT`, $(,048         B!hydrogen-0.9.6-beta3/data/img/gray/lcd/LCDSmallGrayFontSet.png000066400000000000000000000007551211146647700240010ustar00rootroot00000000000000PNG  IHDR,~BsRGBbKGD pHYs  tIME 4{BmIDATxݱ @ v(a v V&b$xN|_s!<Bh?/&&c7tSP_:$ yV{7K{6z*") `0 2G=1SJ`N dG}0"G"F&.'I0$|\cO IENDB`hydrogen-0.9.6-beta3/data/img/gray/lcd/LCDSmallRedFontSet.png000066400000000000000000000051561211146647700236110ustar00rootroot00000000000000PNG  IHDR,4'vbKGD pHYs  ~tIME { IDATxKr8̬s\ %&w—f7" 7$$_U*&^hׯ__!BHRJ)/RJO/Ͽ~m|5$/#委ӗ/Zo/8$/ʗ)%XV{_4[.Hv5ͿZxl?*PfrʿG&ӯ/gA/%yKjia74YVHZH%úv~ Zx)3|5mo/ʦh>&//?:rR쏗}8IV16R -GͨC˽%nZ6{(ί}6#o35CD˾nY<I RGP ѧǵIW";–A(S3WJIO+٫M*S+!m0^j\Goo'QB!$ʰ[B_VGYotz)pbǣ^_O *:7c(\W-#Pv]+_"ysn@ gZ_R~?ID'{?d=ɬf4ЇZGWoZ: t x2ZʷBv_~}q|R>KzȽ]CϵED9Qh-.Kj둗9ZV'ʻlď$)eyIAtBe^$]K/y9oq^6@V]9CU:ǒ\JؑIX?ez XQZʣXArk'%yF McM=Z ̑X;J=RVK yk@ZGyz{xPOأ mѐ;m)b-ޑ,@j[Sc:<_yޞԟos$umS揶5냝ho=hl5Y ze - 0J1B3_N.I2zQֿ.SA ׎Ff#bĥ{щp|F8?k:6Z[bD^jl{HCC(nbi1g,Z+CrPVQ^Dt0k@J^4>f@ko=Av<%jyHz)*whY$/ mIZ V8Ōqa| h(1P~R~Ɂ.?/,2pgDBHmE9:>U?t8Dtdj@ (8NZ0bijt@]'BoJ|;Ph[zXS6{YrS` ZiTcԟ">&BHnaB!d~eM9SN9߯ARQiާ]J"85hЇlX3>hFơ>$;?k.BfD|B{Bz* ֏^Ol}UJ./ɯP;*ʈF!d)$.ʞV^s=hhd=8A-2?,s ,#}bB- =amǛj;kvQ:)hhN !-rJI>A)"\kӮ9Oc]+򛕦!QRnHޑEO!DG| Xx':$ʶ rђ!r(D IuBlZCރ|TZ0F(z=!!£ !GYB!$ r)rrF !!d^NV?? B.VA!2)?VA!BЁ BH:B CL!<ʚLwtzyB@SքIENDB`hydrogen-0.9.6-beta3/data/img/gray/lcd/LCDSpinBox_down_off.png000066400000000000000000000004341211146647700240400ustar00rootroot00000000000000PNG  IHDRqOgAMA1_IDATx=j@F` \Jt |T ܻ¤ T:5bPFպ0'ȃof ܊VT =,KL]xP`i}Ouk'""ǑynڶED0Lywi x?TUTu<+?-^W,os86[s+v wIr=IENDB`hydrogen-0.9.6-beta3/data/img/gray/lcd/LCDSpinBox_down_on.png000066400000000000000000000005001211146647700236740ustar00rootroot00000000000000PNG  IHDRqOgAMA1_IDATx1KPBy6 R!E"pPqqsAA)еtTn}YJtOq{/Qĝ1*@aAkDQwXʼn_D.NZӈ7 l,AC$2Ê#wVF|}E'% wF}=^ ҬZ>WgG3 ;xW3`)ѠB)5uC+m*ܦ2c_uXIENDB`hydrogen-0.9.6-beta3/data/img/gray/lcd/LCDSpinBox_up_off.png000066400000000000000000000004701211146647700235150ustar00rootroot00000000000000PNG  IHDR L-gAMA1_IDATx}J@}QH)GHauO2ƀhAXL1[8v_3êZ;'9 R~u'7[o{ wa0 EQFc`cb%jڽ.sk-]x @"B]dYF$ s}|ZS],ii{yCL8F,{tG7t[ǶW)[9is[Qp s ѡ`>&dPQ3˦~`)Nm(7Zzq!ÏgIENDB`hydrogen-0.9.6-beta3/data/img/gray/mdiBackground.png000066400000000000000000000004361211146647700222630ustar00rootroot00000000000000PNG  IHDR,z bKGD݊ pHYs  ~tIME  IDATx10 P:JoPHX6yB};x10r] +w@OHrA ȶVpPK9^GOAY `!ֺTWbP"+gW# `s2> O\AK ?,&eJ6{n(^IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/000077500000000000000000000000001211146647700211055ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/background_FX.png000066400000000000000000000377111211146647700243400ustar00rootroot00000000000000PNG  IHDRPKbKGD pHYs  tIME^jv IDATx{xս?eoBBHIrGAAAJbVnPSk϶O}|>'{b ~D| /_qWx71A$aƻj; CS !*@J BT@ D%!*@J BT@0YO`zOa#><\{G@e ;'L ˿}̩斈y'?%\jo& bB @ D%Q ExoRUTbF@0q(-@!*SBl#X}n W3k5cx}qE) ,gZb5_/6=p(y!MTlz^^֐[<0O~K$ICģ`jq5=_3nI VA f]zub2[PU -vܰ u/MeryeWßpZ[P*^Ǒ_P/U1r:f%e~!0$QųPіjry%9=_ԶˀEp;>L[[ KJ,+}x47]3= >E7SZV()Ta k͘1Cˁ$رm3ǎ~T^ݞh~ɒ ͑,ddܼTT`_݇B)V9աnjW8/F>./"'0 ܡ>aT*&T ՎjG7 N4;q?ȈJSyh;͎Ñax47^OĂR6itΞ.\.'[Iw/D%Tubʹ47Q<{Z:^Fo Xw}TM躎vc(Wٳ9s 55矓f7LW9o}waمb5c{8z%tlY5߿Y.V:::#I,cYzo߆ǖ38~k\j \6Upx<:VsEzqz^$ 08p ۍaNVV~)S`;wnGd3lv-`B[_tKZ'7<]aL,-ve ]שA~~>IӜ:u6ioo/*8~0jb\Q Gn߇,Yz[g]Rekq:EzF6ɌvyIٹs'wfƌ`20 GAA444P__OKK TNʩSxMӨ*dx]C^^nÁ#́PUjӍү]rs#_,[G\= 4U ~kbiNM#ElQ Fw dFUT4C!snсx9ƅ W|(8O/NzUdkBocPT,DJ)_\+X~ZQc JȲ Ixu( i"RUU$)Tg<$u/&9`/#Qu Jb+$K2I{9<q^/aD|B 5Mɓ8EAQ~?^wUCױXl9UoF-I-{5Q\<a 2Lmm- .rQRRB}}=}ӗ2 ]z;vnCC. Wt-ԌBUMв71ov)ǵزe״hB >lL&{~ܹ0 ٻw/$qUWjHT:|0r:|U(*==> !˲Uɜkn57y?hD&~\L& mcԩ8Nә9s&uuu477SZZnG$N'MMMR\\Laa!dddi1ȲLv,+ET")ދ%Eg9~yGH*+TU$P65PXlcOLJxlڿgm~TO7pݼ>eH=6crҲ ,Ng7y)rrrhllI^^^*4Mp8Á,ɜi9ngjլQ{RN_j?,)RP+{;pމe$l.c`M;{t /N:;;,XV1 z>xo7FΝmUבe?;yEgWP%yqJ<&QP>eW_̾;8TWh?KMV1|2g[,#IChjhWe+|\fTNۋtJӴi,˗Dt߆~PX+W;aM-IY#\m~ܱa֮ \w2t]]ݽ;>ի#Ҿ““cDRJR=}-Ȋ٭ r͋5ItxJx<㗩}-gŷT7u"+ͦgd:]_&KO꟟?jwmdժU}aù^:w0*=a)sVxgՁLzW||K. UNۧ~"?|8x߰ht"M\^~h t7~c ''V`,Uz.ԳcBrӟ%̎:5K\+Sk6#B᯾\Km_jy/'R%jFlT}_Q1*eڿ?'NHJdf&ޞK;>*es)\­Wj g57#%`7ˤQWPc͆>Mh+6ga$oK~vx:[=5y^u֎kG#uW7F㥏N/ҏ$&\1ewzb8*֕am=?{Xy!Q+cg~IFX3-䧿%/bѿTW< W@Ec3-1OTS cOKX&h6=p/jL[[ KJ,k _߇Gsu/8#PC[t3e1% :i6l0~PxZ]*_:c Qc/wcǶ;)bbRyv{zhχˆ$c;Hsd 29x57<3Xh)99#}pY^\a+N^>K=|lS,^nx@TTKs#nx3ףC}*ø$I(PM&,V;V08u/caVNZV_[koČ4 ڧ.jJS}h;͎Ñax47^OĂR6itΞ.\.'[Iw?u28/]JTC#=L˲ezdY ^Z[[蠷ߏ$IȲngŊjپ}[`4>cv7\dT)8#6Upx<:VsEzqz^둤StuuvCK?KDzz:YYY~LaܹIIȦ]WL#7`Jij{b*U,U-/d -“Į0 &q]TTNg r`q8p8$.N>ͩShkk#??vJJJ&p~}ȒCS|enw_-iq:EzF6ɌvyIٹs'wfƌ`2B{PZZJCCXrTNqcS'u{s"FOsYi[]IS|kЋ ts^<|>ܹs)..FeΞ=KMM 3gΤ"$I8q"Q[[l;yr9aHȢ9h;QlpOMCS25$F>3O*6F-Zax^vڅd 0b.eO8,PMW Ŋ(m;aIO&&`N)KW5T|?Wh=EU@߇Śzh錻m~?6-4*uar̨b:$m_VSg$xh^q1soYA7t?$@U{,!QC9%/gwCoX"a差5v , Wiiiiih!p!EQUIBu I~]b21=]CkHe% 1QXVt=`dIF8io?㡷290OPHAib}Ra:^cǎMqqqhHruYjWDN=-yDMq>=Ė-[EJ}8ddfc2ػcΝanO޽{$ UUC Ç%-- ˅nCEQW0.GPRucE~Ok)?k#+;B[i:u*NtfΜI]]͔bۑ$ ISSSXXHww 1ȲLv,+ET"ɦolKj$*TW*ajgl~p9{XmX&yg3XVQ9spI< YLf͚,`ZX,x/^̖ nXU8#)2H{mڒS*f! kmHUEIRYu}DF[99EW֧lGf@^N77RZVb7e啘Lf!-Յ@HHi~7㉌7@^ nXonݺ[u֭[Ǐ~pDX0m>Ux'y'#*fƌ<ɖ^ի{< 3hKu߆q-IK,wtX<*rNDpA\C,`̌ۧr:#vw~v8z?^XO\CTߵիW[_-4 oHw]K~_;,_<ҥKC '`T}#ݯ\U/Ϳ*l{8aqb;ѿp+3/GiWUU9^"j牕x~!~g -;lG,_}鹘 +JIDATͿ8_S&07$jF#ZXo>/D(VX|Ÿ,ՐjjS*_p8q")L<\׬puňj(̹o}+4s&GJW*ac͆>Mh+6ga$oK~vx:[=5y^u֎kG#uW7F㥏N/ҏ$&\1ewzb8*֕am=?{Xy!Q+cg~IFX3-䧿%/bI_R\,\\=ƋRYZϴk>QTO%>U,a ׋.wozބ ~#n[S NS\t݋Au$ UU1- GKzvl[q- zۯ%#+D)T&WZvh= M hkmϒͺ%?ELRS*c6 $c9)++G k-U< m&WEm X{i}> ǏʹYNb}x47]3= >E7SZVsZpaÆ5ϩ3f5r!|9vḻ(&&Wa|/l(K264G,Ws+SQ9?2݇ nڊQ?hFڱT8[TG%ȇߥ|;yEhP0./%I*&T ՎjG7 N4;q?tXhX<ǖ-[x͚qWv#aZQSqmx^3sp821 X0Z&M‘@}tih8IucӅd7nrrG43wԐYd7.xO0usfZ(X=-WIфI>MCut]-|c(Wٳ9s 55矓f7LW9o}waG\X?>/]JTC#=L˲ezdY ^Z[[蠷ߏ$IȲngŊjپ}[`4>cv7\dFSPodTdG['3;꡺zׯG$ 8p.nwhgIHOO'++ ϔ)S0 ;#I2tvS_iMthaIxwo^S w%LExrR>?n_Y^SSC}}=|$ӧ9ummmNII _UpaTĸOݾYlOϓϼK>UU#I2;wd̘1L&Sh߂JKKihhVNʩSxgNBQUl6=,Z0zڵ DUUa\,x8q"YYYtuu( ===/ϯ:EQ8vGeIsJY!<D0 vf+$c^tGEE>MӨ*dx]C^^nÁ#́PUjӍ#ޯa;ֈ.|#_,[G\= 4U ~kb t:~-2ߏf g]Xm6\&3i.Sg$xh^q1 S¶QdkBocPT,DJ)_4 g;\òk-ucYVe%dY$MPMHKKCӴ )ގH3II!ZC*+Q]Jb+$K2I{9<q^/aD|B 5Mɓ8EAQ~?^wUCױXlIyN5Y&Q#Sw{GQTrhn|$˨&3,\EII |G̟?O_0 t]r1).. \.\.P32## UM)ﲥ71ov)ǵزe״hB >lL&{~ܹ0 ٻw/$qUWjHT:|0r:|U(*==> %uUHJnL o8E'RT4smdeb2Yhk=M]]SNt̙3Rv;$t:ijjb &##M؈lEe:ϷcX/(L6}ۿg[R%Q1BR!ݝV;Ӧe[كjj5;j܌(̙3'OrA<OZeff2k,dYՊba{bdv8/IIFlcF*JR(U(T=hc5'|z)DѴ8P͍U`p:3OqCcc#^LB48PiÁnn?-8dILIv;Sfo)6PtVUPgI)_H|Y$-X&^{yΝ=C^x|PXXHgg'DJeV+A}}=7#ζɪNHӝ"+h*+U(2/fp`P+tf+㋊\>\г-Y!MM454ز>UCAx[t3S*ELDY%+-ݷ{_>_s%J ?Ν;C/ ?{ ի#Ҿ““cDRE;̘1_8rXzu\ZMh0 [n铦?/-ܼ\i6=#s;P6 3^ӼZO0l8ߵիWǽ^ ?_-t~[<)?+vwX|yLK*X~Sts>s7nz(lTh!x-zX;]_~>:m@0VT5lf_/WA0&{7?mMrc(3:MIpe`6[u/^]_XZ$TUd&<-y۱o ]$;o[KS\^)jǣq'45֖>K6놗q1KULlIZ#3^YY=PHX#nYhK5ߜ/jeƢCNh8~lʥtr%5ã:_O!-ҲӒFR.]ǿVװ?̘1Cˁ$رm3ǎ~T^ݞz,ȲLFf^kMӰZ}8狶m^/98GseI,-e&Hw>:ihl44Zmdru˛T~799ۖ/C#=z{]ܶ&'cOKuR4aiu]C 6 2{lΜ9CM|́&$y[fy]l6ߏ$I!K5<2 !́==|ISBrzY_,KKkk+*,vV۷Ns?vOjws͵KFLO55*ɰ"<ɞOfv.׋Cu*֯_$I8p]]]ϒ$NVV~)S`;wnGd3lv-H$I߽yO**\2 OdpbׇcKK.**~d9NzMM 8q8HDWWOԩSO{{;%%%|VQUJ8rh?u>dے=ϼK>UU#I2;wd̘1L&Sh߂JKKihhVNʩSxќnn񐕝gz;w.Ȳٳga̙TTT>D.I'ND4jkk1͡='O.:,Yt?m*Ѧ!FfI#c ǙӧPT~ak-0 ^/vd2QUUa17'N$++.EEUtCb( g`z~gFDFĂ9,]qאrRSU Anx"AWg;fI1t/χiQUUNO.BII {!//ۍgh E5Fn뒏1>|?Wh=EU@߇ŚBk;θFcB 3٭6].TUQѴ^ ]͹knX%lEV ),l>E/rHTꐢ K7,^mwpe)2P[~ZQc JȲ Ixu( i"RUU$)Tg<$u/&9`Cڅ=TVjEVHdtsx<z{{)++ȑ#x^ Ètkɓ'q8((~ܽ"~?cؒj8QKu7lMF8nyޫ7de IQMfjkkYp.裏?~a躎رctwwS\\Rw\z];lfdFFSveKob*QkSkeiф|~Ng7٘L&sanӧw^$I⪫BUՐuarssIKKra9tCQTzz:}K)+Tݘ@p+nZqOh"dz:N$==3gRWWGss3v$ItDkk+MFF桩ي,tob_P4J%rl϶KbN|B;[vM Նjw6jEQ3g'Oxxo7FΝmUבe?;yEgWTW*!QP>eW_̾;8TWh?KMV1|2g[,#IChjhWe+|\fTNۋtn|IJKmׯs.\_sN~ ?{ TK}p 0c duw/cq=@h5X6|[nOwtX<*rNDpA\C,`̌%ڧxO꟟6jժ>qð~FV^{)*~m}ПX?+~ܯa1.]Jb O?KE9pHaDBn3/njN0NtYZc7UUU%b{Sk6#B᯾\Km]1C,Hq)j4 yHRzy$BDgd,HZaߠ`S߿'N$P23oϧBR!"5'z۠ i/̹{䡤L"sR!_Z6C54颭`,6 /mSa۝>7nz(lTha㦇"[v];z1?/}tx~~$)7ᒏ1, .›QRҏ4{`C #+*썰VgZO)J^p0/?E x.QAf;F@0v(9 b?@J @ D%Q !*@J BT@ D%Q !*@J ##;E)  ʋϲpqӟjix|XE B0 Qq-1 u޼k>3gͦxxQB`Eu%'L F BT@pE!WbEoIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_edit_off.png000066400000000000000000000006761211146647700242460ustar00rootroot00000000000000PNG  IHDR *gAMA1_uIDATxKPJG(D:9vI ?D\QAکJuH5URZҀDqx11^wxh APpT*+"2Hjcs_jknvMF3LuqV^x!kB5Bd#eY,KtWEfNw/8Ch$DJ^ȣRXENvX*x{lƢW\=2??N "jhjz&է~Q]gQ_aSd%Im +3XRyx0+% dJ$C4'*f+7 IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_edit_on.png000066400000000000000000000007061211146647700241020ustar00rootroot00000000000000PNG  IHDR *gAMA1_}IDATx1K#QҦZMJ 8`;Xl elhENQYNd% b<#^ 4΅-κwt@k1c Zk\`-\F@Vcyk-QP˥ YQ3?B^4 aZYT:IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_edit_over.png000066400000000000000000000007321211146647700244400ustar00rootroot00000000000000PNG  IHDR *gAMA1_IDATxK#A? C&w *mť>V`#D9. W\(Dfhfgj$kr3Ǜ{`BڲN҃R”e U8Հ*jH'k?46NBf@ aB8]5n`fsZKg3  e^j$)/"QAlU*^:;\6ep&)2 ͐f{Q-ShO)V+1xx|u]qa?NO 5:;af7λ1Eʧ݉rerzCz2&S/x}{z=FPг 24#}U5c6lAt_ 27О(RIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_load_off.png000066400000000000000000000006261211146647700242330ustar00rootroot00000000000000PNG  IHDR *gAMA1_MIDATx1K@-Q3tr6X8I" .V`Uw q9zY.k]DE=KqL% O/Sqdum!msr|@\]? di~)e붹yx"!9&ym{3~o| uۅ:="(j IR(U+殔2b++<q1+u 0qel|}mۤm<.:-v6G0a'ɩb6lCJ)|/ eFQEg#ϙ!-?E|ij]cܟIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_load_over.png000066400000000000000000000006751211146647700244400ustar00rootroot00000000000000PNG  IHDR *gAMA1_tIDATx=KP~M\W! ]$ N. (8 U((tr "X[k֨I:šmc{8E|WT͏҇ķ/;jBfQ#9xTQbQi6;9y=Y-bPI$ g*24Mky=7jU5`JPTx#d8pp\y# 6nry~J"gT&Y;6ǒ4Esn27;ߑ=`w})܀ez㳏8P'p h#~jX֛7BZ˲B,:A_ÓŕIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_mute_off.png000066400000000000000000000006231211146647700242630ustar00rootroot00000000000000PNG  IHDR IgAMA1_JIDATxK@ ݻ*b 8'"XĿBpqC8)lXL;OrCs x}}w `,MRX?U F ;"( )"; =ϋ ̣N j\]?#Z^dfCK^*T WM E@ks$"gjz_$SJ"rglfuߥZ)8NU!%I/ks ?!"_ޱ/^[i= (89 'r]p8PX#4k-IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_mute_on.png000066400000000000000000000006061211146647700241260ustar00rootroot00000000000000PNG  IHDR IgAMA1_=IDATx@ i.>rm86`)hiR>])v\1#}027;3,o\ 9źD},@$Q* 4 lzC.O/F#dx l|ρl<51_$_1bYk*x>Z:]IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_mute_over.png000066400000000000000000000006761211146647700244740ustar00rootroot00000000000000PNG  IHDR IgAMA1_uIDATx=,CQ{s Z ] `a,MLv1Y"6$~#MB5z[=Mp+MNΗs -,P(`|XeķN3@,mo` H%h1@)yI9l#f5iuf.X]sJD tbryT.Q٬ry,GH|O׶Lq]$C&D,±D";_ X--cWanL_ 4HB]o,mme9G #iJON#i5+rAtw=#D$`| IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_on_off.png000066400000000000000000000006371211146647700237320ustar00rootroot00000000000000PNG  IHDR *gAMA1_VIDATx=KAEOB*m߰Jۿ`a')lA`#IL AHoaeMTmfڱ0..~adM (~VojF 3EQt;uF튢mH) u@K˹-lJ) qO)mdòuo6@I$ ˜[H=* G6ho]IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_on_on.png000066400000000000000000000006771211146647700236000ustar00rootroot00000000000000PNG  IHDR *gAMA1_vIDATxKP/t?&k'q? S!`@ǠKM "8KA:Jti($A,< Uνwy%i֏# r*aZr"% +R%Q*Dy|h!aZ|eOQoIVTm .6iA aF1S>t ͬ8di.uW>r5u@8' BkäC'JbsA0e& bƽ_Uznc_hhVх X;|ZG bgQ(~f/bIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_on_over.png000066400000000000000000000006741211146647700241340ustar00rootroot00000000000000PNG  IHDR *gAMA1_sIDATx;HP֮:wUA89e3Cl]ܝ}(N. qQB'qpri+>PQcm\Mڂpqai$ @ iL^r=iK@Uޥ\.jI-/iCpszxr<,]#wvk<9/SQ&WW> v2Lk5 Ӯ!?5,]RJ)E>ץ[t4T#UC!'H׸b1vFd3;,n062=`yv"`{OO6OQR/{|MG~ (_s._ M0 Q r=[9 ׽S) jG*hЈ@IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_play_off.png000066400000000000000000000005601211146647700242560ustar00rootroot00000000000000PNG  IHDR IgAMA1_'IDATx1K@ n"X]I?P:ASc l̘A!9Ą\cB{;:vW /WV~Up *әB((A03E@JG4@>ԡaWe0{qҤ^T"(߿Hb|Œ'*M{kQBnY:+ Q&&(ñ҃TMht _?X:o%{t4گ#Țf:9ꆍ2rۻҁ u}Eu4 ~*IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_play_on.png000066400000000000000000000006521211146647700241220ustar00rootroot00000000000000PNG  IHDR IgAMA1_aIDATx?HQ?/0M/ 6p(""(%¡"isjZZ%hiͩIZr+ApS/<}G*9"e $<} JL˻W#Ǜ 7MFΎ$S?^Z:λ|V"C sBR6H͎x}4`J%)W`q~̛Qj{'4V>llO3kH U4@|(W_~hT+IMd2 j$K9Ԗ"DPx}9@]=  X;q`@IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_solo_off.png000066400000000000000000000005741211146647700242720ustar00rootroot00000000000000PNG  IHDR IgAMA1_3IDATx?K@ D:HZ)A⠃ 8*VD,f`fNpt5Ťm?{cquKй ۻ8;MZm*j{H)7`Kg̩A`[ea 8FaWRHˑ)iՖ6_'G"CEDQmJ)Raڏ[C/oBO/FVvw+9a_"6>YN4MkP0u|z88.gIkMPIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/btn_solo_on.png000066400000000000000000000006521211146647700241310ustar00rootroot00000000000000PNG  IHDR IgAMA1_aIDATx-HCQwvA(_AY 6f+. bbY0,eisNDDr oo7BdYDUn B0'%IfDʊP p,A7d*"yp(@RYgS U^evqMt@w^ H$p4I&f@Ȕ&< % EQHV~{N @Fy$V[}xiK/[[AUw!ׅZ05Q,9Z%zG/0[ԟfWCfmubsi9VzWR j3=AeiB%gC|}aSF[eQl*WVE e[m%t^;%pTIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/bypass_off.png000066400000000000000000000010071211146647700237440ustar00rootroot00000000000000PNG  IHDR ugAMA1_IDATx?A i XDXH &ZyUWDA4w'"]b:NE ,0Z;&Ur#z}E*aZ.U*~D\j[$AYtnc{L~ ?>r9Gt S*F?bKL#p<^ʗ~j!WVZ mbQǁf9]T&c:N[gX8{ה!IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/bypass_over.png000066400000000000000000000010601211146647700241440ustar00rootroot00000000000000PNG  IHDR ugAMA1_IDATxOhQ.R`N҃x`*m ^<(E=Tr / ĽDE H(` ԍv_?z?`fx,jrB?KJ5-\+ZljVA+ژ V ,宮u]]R,B''uQzd,P/W|[Zuw~_E?;uLAM.M<%xZE>rlixZYƵ!?ʹ l0Ž# BD6ť /qGFXAza[DGXb\Wyv;̷~":cc{wĵ,\" I7WĦc#~C7\~ [7(,8ͭ. E/5?GGX}|ߟx{wÉgtxJIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/edit_off.png000066400000000000000000000007671211146647700234040ustar00rootroot00000000000000PNG  IHDR ugAMA1_IDATxK[Q?/d, "SҡN! KUq(]lЩPfiKi;D-C<_8~ysYnh<_ 9P!Xh@7[]/"2VFXP,Uh$}7A)}uvg"!n.V!; CvTǹ !f4 + n5bnu$Kc'f>2RJ6 e^~F\U89Eݯ"?e獺^ OJ˛DP`a稽~_uoћtKwWZn ',_a"o p&u$1OY9>L?R~GHZm 9?̍20r_~y3IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/edit_over.png000066400000000000000000000010731211146647700235740ustar00rootroot00000000000000PNG  IHDR ugAMA1_IDATx?hQ?w )*VfLfѩ`q1-()(N.֨hՖ}CGm/‡!6t9SYqr-?͸۲EUXtmܶ?8.:}]Z(Vh" n\v\'`e]C 6nIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/fader_background.png000066400000000000000000000016341211146647700250770ustar00rootroot00000000000000PNG  IHDRtMgAMA1_SIDATxYMkQ=LT2. .BNlGǢ k҅ wO\QZMW.DPk)IЦp]3}L wϜ{ &HQn)CUUTE4}(ލa"- n@(FxN*0 "D(vX^`ggGs ~S0}&ƪ̻UǕ(C/_nq($I#lc_<k[X]]n0 j57}/F T*Q]Kl^ B@'[,ɯmYڱPYj 3߾"wD /KCuM4"]}z"_zd ϗe&,|Y&iAtfe:3:RP/|؎,?_\H~f"3)ED"ZʝRdO*8&oe)uZJQV /T~ɢ=<ޡ,(4Y-ݐ%4vkdpɢ*zV<|D}BeZOrzhp\^,˚͈b&?vT`Jbl~рau]bԠ: #" xBOIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/fxline_background.png000066400000000000000000000070721211146647700253050ustar00rootroot00000000000000PNG  IHDR+*W{bKGD pHYs  tIME" H IDATx{pT}?}Ѓ`x`F! a2(&n<8ݴ!өa<1vCg41c76y l$0a$a $J{ˮXI+@{w9W-jXFHbF]yx$SɻĘŞϻ`^i3OλG"v*?:BZz&޴hJ Ii]9{,gϞYu=/)))b&3f@uN8 Kk$ f #}ưgWY|t[ 0=0ͦ웈TTTp!1g Z|\x6gBA?21;֛T!"cxP}o Q;:b !do]nω'8u3f`ѢE̚5\>}:/fȲLcc#~9C($#Ii4mw;IR}NxXOG~zPԴ CGUC<""---TTT0w\ uk/4c&μ<E ͆i8NƅNRƥk뤥e$F#*S!CO?1nэ_ Y,8. @UC,[ ]1M'ObZ)**AQ[[K{{;tvv2)gϝC5v$|iӋ$ː~὎,.@H65@kfs "i(TWWSTTWO.u~~>ddd 2ۃ+X,V$g 9 Z!WgDߌ I 0MÍE*x<1 =it:#Ѥp:h`ڰH%i`;.$Jk }I❃q(( P(FÊm%wQf+bAӴ>ݖ@]ZO%DQBQ$IBQn7DwbX!GPA0MMSl]V> A(>ڸy&{]xEx_oKVij1-䧵^o*`)SP]]ͬY"|e0 ]uEQvI"uul45 ɿ QC5Ǧn'qoO}X۝jKϧ>⻈:*/_H4H8R9vdc 2$bX#I1LIZ>q,̞=WRYYI @U+r.^ȅ HKKvi.kX$I Lu1M'mhk$. #ΣV3iZ47]3gIIIaܹTWW@AA. ADnn.YYYttt0n8%D}]6Qb; ç5 &zyGENvO>>>Y} YDHƁw ͠,?'y1qg1D8Syg(*{MGLQo8l]eɂ)&CNN>(Rve3SWWx^222"^,+B(r>CSS#Qx ! R1l;Kv?#FՋ8]nn #3 >?CQq8dff:555|p=0u,Zɭ&:;}p~ځa8Wl7ǥKF{u?-\rǟsN**iS?~<@dAEA@4멯Se՜8Z'+=!G-XbNLիWGzJ.ZVoW}M6nSu|Vf3\(=ڈp8PB*6,$TUe';8bx"Ȳ,N/ݿrJ֯]IS?:[ogƍw_v!EҚ!2GO~w<9._燐kx8] j(( I^6 YƴxQdU#"啟u]?,YEQ﷏irTu'#,L±ݗEx?_olׯkS/:ݽD,V?K!EtR\I̓.^8_o~ _۲5k_jU]8$dUx܋&k']>f_}:׉׮Y/Гԟ$bw*jt`)hoʶ}/B>a(e4ҽ^6x=p<$$XE8D2IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/knob_images.png000066400000000000000000000552611211146647700241020ustar00rootroot00000000000000PNG  IHDR@DQugAMA1_ IDATx|ytT5J@ `#1ر1:}zH'׽νɰνq' s6 `M4ռǷT[zy}=fݸ?xysdxYgNnf~p,igNsV~;DXh?su=x9N/kIִ̝7ǪsS<=}fӊ0cIӴk[Z3o}=<?O-v$m{\xM%+7%u\nǗysOy4[MVnKj΢,%;aV|.uas XX[vaj{\x[-`aMFj>αiӝxYTWǕ!Z=H\t0E5m7p;/>?c唖W+ܻM~.]:K˦;Y1!Jʊ p=x&ǣ̚SoQ\^7^DeG=aJ zLLF]Q@0R xLNZ}#̞WF0兌 xLLF=*1;DIi#ã8x d<}[Z8AK?TEe%/e+lTd{̯8︛B}D2Ju}=+W;7q6nVqJe(0*oųln݊/5\n=LBq3{|.^:C;-{$5x 7߁/Eub,m{!cllRo-߿!G;JnI|;+ba*އIhqŨdS8n'QfU3lJ׃7Ú߲5r1f)es}L5ƠWeph gƨ#3LiY!#ã^;3N_&ʊ}j 3+]{cfN8vkWCPd^=b#;#?Zw7/w:ކ,ߡ6|n~q>;1\g~ǡP$/=4U"'#>UHj*/=tq>0׮]NĨI^ jÐd~?}/{i^vϾkWyK=*jUch\"0kCѓT+ƗBr6c.u*6<<ȏOv|w{PM?1zteǡH* ^yY4FNG}Јu, =<\K'kC^4j''?ڕ˼qX.Ty|s />-4UT]";G̑/>+x?`[tS6J*LIbKLw242nnw6n+$1hF$:cGpy),ΧddcxF7T&#QNGaq3fchFU"0ǿ<ǝM|JK`Gp:HDr(]FilL!/QEV/fFi!%0$;Ãt7H8Me$n+GnY %1t_^l^^^i1%f5?UOq, K#;Mh,/D<E׈ig\r gp)LIֵp @ż~tz{>8ia3w.y%=νn>s!31|]BLmla9[4 OcJ& k6Yf-(iL0ᖖ|B$̫ pgN1ҲOZ&W0iqx$ 4?3D[[9rR)ϜJbM왧Kh;Kdٸ%?P^^JXo[BRMMg8|nX=e?aH]~k+ 5F,an+TLok%ƈ,N_ '{Hj 0{7{q).E`7D֧yvbbqͦ!y *OX}y 뻯vE\noallEE_$ɵk]<J}Y}س (-/̩/pfJx"žUHYy9c^ZHQb{,JKh?͆ $+B<7ַT<,voV-ӊ6{,67Zl#!rݽ `wJ&8?wE! sƓ墬|5˦;1w^xo%8C"&A$GLYlFG z}F$xLل^6mYՈExu#tSR6PM[C"LilBAtCށ˔fl4@/nC~۩nJf"axgMI,"I}l޺ ;324BoeJgQX\-YlN~ށ˔cHj h#0 Chٺ EӈF Dil"@<()+rqSRV@d"dL()+r07 J(%eE8N#Hy&#ǣHt:E-IJ LD8.Q 33\V/r{Dd(p}p{=(- :e"S^da':ar5_%3z<5 14UI2cF@hqk$9u|Y΢yYӑUkW7Tϗ}AM=IS\q+lyz!Td~dM |ibl.?-f=^Miܾ'[1w:;dζ41>ɇflesl6vp[xd.8=v.xtL~]v3s~Oc;x:!-qp 9xx4$I͚K9+&Cd")g'u] ֜<..~hT9!C%$K &9s֩(SpqL?vv O n"* XհB<#Eyg/db4JTVW XѸd"d4W#//uRYh +H$G{OX1YPUMp<F8W%/ɱXVLF}3aa^PUW"'F#{Yr Hᩪ"06"#Q,j <ìlXIBNDɷj.Z"yY QhEU}&X${_~|&Fc.YLeU5 ;w=O9\BUu?|Mwm4pS11.f׮\ d{Gyyi~*kk 9v#~X$+7&//_x15CV7``ϻoZ -B7 ^}OD" -/@Px#Hp%L IDATkTT?'Y۸C3A{z\<'|~4@54\v;-[!9U4-' qsnXf`ne=CN ;Gg;Kol.|q>=1]p9l^w]tMizw>+VqKV&&Ʊ[; +ts} oMi]sUT;%~~b=|5Q YwC Ba5a`*Kl;~YݴMӰՁU 0L RT\Р-?F7tqf疍[ F,GYհUM;$ZSv9/TAᴻظY3M3Y 0MLFdb³G >ݴ O$dY-玻fIBVY~s =`ذcJӚ 4.]ΦMb tF8! It$UQ5(,,4D&'0& Yf zťtS3h&6" L Ik6 +:n$L (a5)I׬GTLDL¼ʅq5A(ahvTrB ;eUM7P19PdfϞ$Vb1?]>%(f$& ~b*h6gCa|$EWPuݎi T+S\T誆Hv;~̫䉟#K.A]EQ$$q?`y*j 6v;45&)ȚH6 p/=W;q%.\BRQPt C0#;KN4MDQUMnc}\$'tIt݊1$\"$UX߃RyJDVUrk*6;O﵋&(KUdlvkhot!+*3z& sJjJRs Y4D2iNi }~?׮UWQdY"WMEϕNd5,+$5]wpk]h*$IUAj {&)*IEASUŖꈟ]5 Yٹi<~z]BVEd2IM͍nŘ { USQ-sOw ]EUb -}E7-pb&~zuL=n܌a0b.(2STΫtl =C^(hJBS qxn|37W:TE|G南lRZޫYH( *]Ot`]*b.uw#aY쩎:e#Ct;An^>tf&>?!UudegsNK"*иϏ|$b|\tbwzHT0MW6٧R*`Bf>?!5ux}\ppGqe3!UuudeeqZyƕM|GVL:;p8^1EY%TpӉ%Aֻ/˝dDdيfjY.4RNOVZ:+33F$lOS}Y1.DVi "!R8?, L+";7fCSa4E#uf GNN.6 UM U-$GnN.dQ#Y"mJ`(&kW&SxD$dOdInA9V9A0jM-dvTL^ܩP(*kd-&NJєfjZya4EMג,~rR?~4u%!3!ZxLxfCSatENf59tLEv&)YJa<y>=8dYKM DP^Yiij``M A4M γ{, oF,yl3 )z2H}$ 13' :!Gi2W"ش,/!#Ⱥij(8[X$L,kb|YY 񨺊(a?}<-MXZz 1<4H$.t %*^u*OC-[38' =} L?9V,~ OU 5#82dIϥ75x9 022d|]W ՚/fN][z|~Dcad]Pt644iC }A?C"!36"LSkj o%7𡡠k&J4h`M^[ַ3FQ CHFeFGi?;d(?g88H8A3U MEɄtV{bn'++9Bs}@sF)ddpP(妰xX4>ܽ_{S__TBN^!cn'ΓZ? <>O'+G~c`b, `EA 8cxYܩ&pyH6oPPTL"`,81oWߤx_PJn~>H6&G  p ~BӴz豝u kXaT_E)&;ކrL)~qDxp.^gɹSeg_XJ^^؈'qQ8 ;+'B$#/=C3ɹ -FKL2x(QLL|i~ROA $sd<8.FGCBLN]4ܾ7,֟egWPLN~!A.v.+CxJtܓZWO[^8򏍞 twur{XFZ7&Ak0㡰8's~] O}e\Ln^1d21_ssFe,x2֯G5dME@SUdYEVe~Mb3D yĢ _{0u4C'N8wB),DI<Ĕ$韞r,ogMtd]A3 q''I*mO~$EHXT_ .u-Ȋa,a*15hKUdډEe$$yXK]E1 4M'dq$,")xys]Ֆl~ /~?a~$( bb)L_DT46?/~/4?ocvGX$A !$ҳiq,˜_Z;b z;GGOu9${wFHBP(bELQ*z{WS?Ɇ }ذq~bVMD`IRk~[? 7rrQ RqE?tx)vlc9?ڕ9ٹgZؚ"f[n;`,/6wd Ξz{3wyWMO*EDŽϕKe<4ݻ_ٹyYNjy7ٻkq$ u+_u·8xA˯X![ߠ!`A+?Œͳ?o "c?<[E_^dkio<2هl\Z*:ϯQr졳\T.Ipy?`&G䑇Z#;_{>׮L9;%0_{O;N?R ){럸w; ve/S1R%RQ,ܟݷ,6pO4{ߟ~[8 >|XOĞA1>ˬ..4 |w-;O$&xcqQFB-q;s֏lR֎zIOX^ʎ "KDK>!`~gl3Gmb0Hmm 9_-]}/^y>s J$BՌP\}\T.I:[x?>tH(O}L(B8ᩗQ ;G7T^R" -nt 'NT"PiH @d֫X.{\_q聣ؽϿ婋ܻ;vCc@T Ba <gO ~wA*哛W{&ۘ{ndE cWC WO8cx/aqN?|()$z9r Ul?uM|r:2>vǏKϲ8gN"%c1$sg9k( 1"[7oyqg{xӓNhӌ2v(hCPh׽ͯ'x|Ͻ4sjG*0ܸ3wxb-%6~\~h RH>{˕U;ԙ3a?INNKϰ+FhѨWعw?&HeR|r16qygΟ8C";1`o#"Ksl޾`O?F;q^z)/hcPiͯ>.B^P(pJA|=c<x@eFۿbËܻ (pxLNePQ4v dyue>3J岍k'x /9=yXHOQ@a;J&ӟ%խtyc>c?puמA,sǭ[71חsib!JaJ!"W,`\?'&yg{h'O#d[=4F Zx>ɣy{Z|Hh\8Ӎ_AɞViԫF|OFXi .N{PR.ܧ^{B*vmn3*֊%e'%0Hzz..RRʭ[W9qTHc?QF!"T3K4UQ\r07˦8y4B* F*I:݋ O=E2dniFJm>oV*,--ٵ OB*OjE:AIi0yt2Y޽M5U|ϣ?c۳-$FQZγ$J2w(lK’TddY7h7l\R}ƃL*Z\ȮٵmmzF"">h鮺{T""zL{ܴaP0Jcٸ_Yҟxxܺ{hK.?˓[\QISb.߃$REk:i`H-Yf2}q3HF(*RdR)f+DdZIg9q>p(JJҽ/1.?Ki֪E1xxHB2tO㗍+L2D^@D8FK1@}R'^==IgnizJ_ ܼ}CHig(aH{PJ{>I8+eBq=&RMT]d,~c$TKUzi \>C)FE:1I:bniFF:G$"2AkH`ػs/; 8Gv'b/ɳoģ'sB!Rj=i[a}N(#|m,}'?|ELD4f^"6T*ɽE ^(7)m_ER1y4264 h'~!I[tv2vl2#=p(ܽs?!J0hG 8 Y^?I%YX\JZb9;Z(Vkn^$Izz3he'I&xzF_8P%?ݼ/Gc,VW=c՟00sH25uuzf=-e[s7D½as`9,ޟ#/ߗCJtE*~@0y48L"3HұȞ@+~D R*4H)<-~0PKaCO/r\PDD@T\tl8./BBqݷY\{oQY]f-${c #QPr»r9(LރVX!Zog:h b#ߕF!B*߼?1Vz4}ͰevA+o "4:jW8/nxJ(TA [K G'I i6Tv~Nu@17wѭ({|m` Qшԛ  M_?/e VN27w=S,pR JC)€h6\z o\?6P[mf aӶry~4OXBJ{KSuj 7/s3~:q(6oF._fii\r܌hVϺֈ"6oI7^KdEp¸IѰyyxx#:"RDA m'ן_fi>JXl~*MOq_X]\" fؼ};l7^ťr*hFfZyٺD$ fݶl6gtc?xW]tu'?Dqg@fsۍ.~I{wֽO^[\\a:8^~2LV~m|*+U`͑m^ɷ7(@M<5{QkGZ;%k'`6/xp`4[qݚں{N˔iZ¡ݻws+W} 9d3KLa FZ0PXw SV~-*it 'l<{;-.Y;̷p -߷X*+-iຎ?-kbyv:6?=,0}'x H86 _v9:߭W>-=|+?-ZX;N[vZu~Ѯów/`qq3#i6':'ظ]xS(it3J'O"h똭)wtR'GhsW" ]<21JeCwɺymf]~Zu_w~ڪEGZir]:c_\~>Kr$DUK:}pNЈ:f~ؕ#(O$I||HT ZnV)xO&I%=&s$6zǴuDzuYTD(aFDMAyoFeoY1Z? 9IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/led_trigger_on.png000066400000000000000000000003631211146647700246000ustar00rootroot00000000000000PNG  IHDR ;gAMA1_IDATxu D-ja7h2ؼl5 AP,LN8}iwY88Q<ԏ0>I$m{aIA<}n `V ĴOUpѕ ([$Xdz CIDATxjAJ".ԗP$R("/P zz ԋ!x-hh{l4Z7)g;v7eScfg>3e@]RE8=KQ\)XI2`p{rE/VHeCуn(Va{qb筏;y͍湍 u]ؚt;&Jy::'-,>v6_OMdj?eѨ^472 <+R/4hhhhh<)4iV@si[&24EI74k5h14+e24A:roh4@Z7 ͟/4K%h1"xbh ͪfhL ,syC3렙hhhhhhhhhЏӡ@ 4@ 4@SqʬHuHq N.ǹz-ҫom9&w"~s^\N~|/oE0Tj4'M&cLrO.c%{̇_SSF~ $L$3IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/masterMixerline_background.png000066400000000000000000000155571211146647700271770ustar00rootroot00000000000000PNG  IHDR~hmbKGD pHYs  tIME ;0IDATx]y՝[1g|1` lV(&TmBNK)RP&,[[ne<3F1#!itG׭{Z_3[۩Pv7R+:R3'XU]gȈ&(>.l~=&Ixaگ2மfi}!8a`ph&v\wյ&E߹.ƥ&L-TH/"~rNrx4 [%K. tcg-VN^e `4n&6vsZ GWŲ8~ ^|8l 놢(X+`0 vAx f``yi4٪ 2&'0 #*`Y`b|:Z^J"~nl= Pd $f#=BoŢ( Uk*Ξ9UU!Nx4EQGQaVʨBVVz<2 ܓh<"> hPUej[#pM` bN?%`[e7/9sXlŌI450:M3Nz^ZV.@e#jkV>/0yaq,׍xnȒ=HQӁy,l%t:=$ID8*pGC|G|D#[,sBUUN ="0f "TUVрcHtAQU5@_8krN5u$PxsLn1[TAcS X`?FFPS[o`1<ހ%K/0p@5pT"j7SFkG #7L=ݷoʴ^J;$IN aԂE!J"8┍FVYINԂF5mq| L,FIOU>qc "ď-Ν9>+.f59znD<'֨>~K4ҏE[ksQ~o޹Kķ6ӳEkkkIϞ=KxS.]ӊ7^{)v%U^lB>#N{)DA?1Z>v=v7ر?~藸cKMOvnyxv{\IE֓mK{GpǎxW""^UKxQێF|zTi|alzcƨϣg,Q#{};>?Ψ+q䞸6mޞ}qj;U&OE < \x(f#A=Oчv|HC ["P*_{Njrd'm//kl ;ҁeW-xzb'ww9{K[Գ/fM8a?6}ll5Ln{>o޿hs# râEKÅWvV/پMUSigPn}F'"D] iuh8Ez"Y鐮l.9!+Vr!7׋GT5iK'K0[Ɏ|'#ϪL]ϩY'9g[& w3qxnns1Et*3G/$ݎys2 5J~:c# iI_;|"H{ZP7GCL\$~g]r4}I"={5['΄ϨuJxWM/_Zk\_TO Dn)#~k7",pLvΣhYȻs]OL%YzlES>wv=0ٻgE끇9n=vlmz3>aZS{H`&DHOF~}H$:\\'>Qƙ 酌(۪ttc$*DDBC,I4l.dMb7`#X>oMdQ\ I=>ـj!uA$s s1eFiVDԣK>ւ-vMC* JZ^orST~oa16oZ8EQtܙϠdyL&+TU(P괕˰0,0[*,*lv|/I} Qaa >p(E``%X-$.zz{p)\V`D`y;kkH P?>4-^ Q и7v$ $A^f2QW_+###xϟ٤ġoDR_LRΜ>%+!tNsϽ`Yf attBPU ÀeYL&ر8t} Eq#lf{%>K;rUتD;wމ{ @e,Ϸ>tw |8ATq}P0,>>k׮Ess3Z-dY(EKK zzzݍ!XVU004Ah4^OcU[QUUMR?R?<QPYU E!֯_&, tttQ՘a/N$I0 Xl9N^ocy%> h4AQ[BeGBբ ,K<,^z8~H016W'Y0,dI$)hmm(y]]]hkkFydIJ f;v ðX,-PdFIq ~I}D9 0*pZ`X=3BPUF1:ڏFAh:h8 x>Y}DBCdc!c9HW/)a ĩ@d=ɲlx*@%gY,E# Q<80{G,ىF0Ѿ_0 UU!I":ݔШ>Ra7_˰\.'lJB!,]]]]Xz5X!@eȲ e¡ϸ Y_0ycX4@:|a> E,4Z:;;!" 0 9]DQ.ΝCeeev. " 1s%~]q *lUj8~c_,#c͚58~8իh!ܹs8}4f3 L&>?94@Uox󵗰㶯$ר>2(KnhX s Uhz VB jE{{;088L&0 @ > uuu| Ng˲] <5ePqi~ F Z8a0088n:ԩSq#}͆+,`0@㓏pI' y>ϣX,ZԌ^,m^oD þg=v;z{{!"l6DEwz.dsb5pOglzxxgY555exUƆM91 ߃p(XHS `1\<p # 54`ep8ީ @$PEl%~>>ځںEII?PI,zU0`YUVLN`6``00/pp (b57 ԧ I4~8wY/l6;& 㞀+&9NVp8R7X+]ۮݾ`wX̏|T_.id2*JfF̄(AQ r1Y"3qHez׶LHsiCM[-iTeTFvgnd(iJ$&iRg<Hgs;$ KRH}J=)(R? SbB:! ̏.E꿙 oO/&Q̏ /ϧWc͏$3?zݰX,b0zPSS˅f…hoh_??O>oϛ)I}(E#ٚ]~hmmVMi~rJ~<gq˖-χ( Ec$-̏TU^QS}6hem%X 8T͏H3F|nGɲ 0LQH)z2?*S'2@''H/t`l0?ڲekGW_=xY|p|>fY-Ƭ͏ґ_IgҧONGe2?ʗߚBo-e >AGe,d~6A0Ӌd~TB <}މ(bqT.B!bs)ζ,mڂ})$}߭ ߲(D6)~#2Iҙe[. ', q@H>m0 2?3*RHz[QJ=) ̏PLQG$Y [v9cDlytvvBE-lr>kE%}UUU0͐$ & }}Qp88HUUrKKCۊbTOGz'>R3?"#UQ!!{)}>vnLLLfaXn6l؀cɒ%$ ~& Vݝ`3?qW;nʜTKRdf̏Td~TBROGe*d~T(7#/S\}d`TG$9 a\SH#flIW.%eP~Qcs%D|BVq}4Qќ邘O#4lM٦Q=PR^̏UXpS*WO>Rp餹R'~>lIRO/Q=_zzE)Td@RO(B2z''reԜ %B&IJxtI=@RO 'H $z"@OROēԓ(IxzzEᡡK_5:W/.-?y krKN|~D/Zo޹mN/vv۶mz=oܶft~z(]Rr Yo@xeٳ "3<O~q޼}mÏ7|鶜m';7 ppCu7ܱc#DAnEcƴWnS?y}E|xܱc#رnlrz5nQn[Ws(ʈ嵃ؿsV߿c`P [2OxB# RE'~܏jeuu;s 6hJ45.V-ULb< D<'5+7_X0fIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/master_mute_off.png000066400000000000000000000010671211146647700247760ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxœ1hQoRPA28P%v.PĂP*b !SRPCCZRڤ) tP 7 <+7=^Tp}ޣ,34 K4R8r%bZs 2_XxޒoV6$^0k֙Z+t:EᏙG6gml<ٖylFFWZFҗWq}2_/-'9"C w?1g[As=L!B}SZs !X<`аCÑ)T}o>rɉ>~I;tzl޿ ?纕I2wb~l091 dIBK@qS\׍\aűޮ23h}5FVkΣnw;zIK+KՎ2WnG8~Tټ[ӎP{/WpQܮvt}c_顢epTzC^vt@y1SBݡIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/mixer_background.png000066400000000000000000000004441211146647700251400ustar00rootroot00000000000000PNG  IHDR e^gAMA1_IDATx횽0`J4. ̬,.F pA@)$"Rg!XP7TlP75=y>)dH~B ǔdD @uU[#y"Pw'uř qŦ/3;Up@ŘЈgd|ْNXTczx~\]^o2t0| Ϧaz+O~9+V6D %px<ѤK?3j_s%xÓW|8\#&3O{YvY$?[m$ )[Z`̈&ßtO?Q+\.q\39r$?Jykk+S*lx?f|_@,z_Hr. m;t>`"L7t)Mp<)K\Bx_5q/!i͟јD3.qgnJD i`ӥl~Gzs-ߋy.EOE3#! Z#7m%I/^M7F_ 1k{ܴ}#=sy|Kw!ψeY$grUhI yO?nꙗ'?n>P:u JRRXt~.+ʉWJX$I!#4,#L;]aESiEEEa0-w;cte0K D7%ۺ:9|pȹ,M8xF?4x.m$ DdtdphrLU^4KOM;crb'9s} .{qxp*C0OϔY^-Wm&i_~ C4 scccoNbb3rNNOiLClܲ-Wmx`oo/v=*sZ{vjYpgppp})磯xvP[{bEadxS4}p͇񉎐>'!I]VEw~$5W`dYF@:e6Yx%l޼>ؿWɃSX7{aiSȦ+cqrrrBռ^w$Λ1ǘY7C_z~ӕB(..tRZZZD3*( (ݍbh4<#77HފbvYx1 p@|O{{;!2yyy\.BUݷ_9=ש MӢNa{|#y^V\IGG$i@|)Z[[)..l6#2B'"XX,ZrΜn=:Xz .BV^MKK TWWSPP \.`ѢETTT011jEEqgXq4!Jq 9݊pl7>J  0Al.f (p\vr*P6]y N>nUsw"n2f7ÌIh̡ВbeӕdWQ{*z3p-WЦ'~t*2PsGHكuM&w&3LЌF{F1T z( hh4XUk$8c 7lf1ai 2~YK koko l^&pb,Rh+r"Fzh”UP2@3l?a]~mp:L mE-Xzg𙦙> ]{?p-f-@0qNLP`#ǘùnF))OqLffF+/s=\Ux * .eڍkǚl)b+`efF7~1? l*{(Z4׭Vt:|"(J`jh`TVaګPeŠ scԮVR`!?l/4SfpQu-45|OR_[Oʵ,Y Ȣ%'& A:h~2DL~^.n5AIq׿ޠh h_$IT yȪiapME4pG/DbTՇ=FDFECAEPUTIU 4YF4TMF@0#ffd^Euu|l݁RHNTIEEU$EFT}H*(((T5Zqu0^KP.qn$Y+x%OFTه䓐|n8=]XV!l]!462qKk`$yDB> WzDδdVR,rlЌ֌U\gjbz(QK+P5 IS$DQvsNÍޯ'tD#aNR^y +stxR , ]N;;`*+& uiU4:pElBV]Ϲ.ZO@Vʵkр;^ffdv1<0$/ψblg 4EAU%<.K瓧d%jjXܘ )28/Njpr 0dICUB-٠2?2:60MS}J #bmhY dfm"&U&E&]&mzMb$`h aȪ^M&MI38j2)KkzMF5&dL%(%®N>LUd2C)nC7I[gh -Iчusl\~9![ol8zZu oʈU VV.J^+t eW'܎<ɲrsz|}gWy276#ӥ?&k5g; hV5m#m3?] ̥`&˺{6@3OefpY9O;X$? .tӃmdVKSapm][A`MFv?&̕W}GZuc>/lMdyr('m+ :1qi99䘢qEQHިJ\OyyF$~DI:K,ޞJJJw%o%W_9p 7r### 5 ꋡ> 1g&;neD6D#:Duf߬hխnEu!;zM_2/2.Ln3~3^ 5oC4mWPۥCTь4Gu!fMjV:Du!CTѹQu^`sڊgڊRWg~FowM7nCUw}pWR}x٧P~=%4diooOh? `6)(H|KlOcCxx< u Lј u88]  A7888 s ֭ =VXXMH,Z CCCIIphhhAthhHh0D{܂h܃jM {kEu6644$Q˯q@tdd$)  -&s uuuI9zJgW܁VpR̬I:mkh@T'l9Go۱I?NA9#5z&?A"/=3!:&7c?ȏ9|0=k>C&9QWLȸ}@4д7}TQ:Du!CTQ:DuM+![QiEuVT[_Q5D+7g~VT'8 zg~Ilr}{a&ʑ&ϝK_F k7PRR֭[#8V"-[GGGxň+.K52,X afkFda6~5 "vۧ0~Zlin:~z^9fYr ~xͲiš3`F`:z#Zbg+R$8u?x0XQ1l6vIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/mixerline_background_on.png000066400000000000000000000130361211146647700265050ustar00rootroot00000000000000PNG  IHDR8o7ƷbKGD pHYs  tIME  'OIDATxyt[՝?OE-b;q,J)'BB^2@tҖaJsÙi̜-i:4@@ Ά8^ݲIo?d)Zm{;+=a5;PUM^ΟF PȠ>m8$T_tz mw="XGnI WNT šcT&%[|]~wuMMG{xQyJ#_0jk*i:і?}i蚛QobT G~KMH;yx*v - >];~:;E1q}{I76W^7ƊQۍ]}~bÀ+`C7P ~\Mh*-$AhgF20TAM]OG jB|ysx⩟Rbkn>W:q JRRX|Ml%]H .ŰUUt;1 dҥxӛLM N=W__O%qi7 OY0Wa``y˗E q ]CJQUӠ#UOY={,A A3"* P?=6fY&\| (=219'g'$&a6nΖQXX8{`oo/~.V5pj{7q:\,\ 888Ⱦy2+wPSs9BdYfdxVxQ-T><]FEr~,仕k<5H$Ith4ؼy }}}?q>P._m~~>wLvvF7 [ۇ#\.r_a2s_zr^mS+μvFx䛏",sINNCe˞={p:̟?Y~PUU`VV+]]],^k ycGͬ :;;<3w9|0V3_lUUU;wǏG~~>6lS ^0%3]tmTU-F1<<޽{Yb555 EE+**˱툢8$vƈldK{"o~#,z9tZdYZ6Ǘ`v/!;š>`=rɲm|4j[(Hss3(6*444PRRd21sc}Qt=-otC14(zBLBjˉȨABx,*2,=/`P6-a>ׅ,I%~)_|'`o ]XO,C@{R(xސqHlN 6bFT1t-􈢈hPT"18YYY!ng$Λ>K^7_ڿm!(,,rd D3kQQdYFeDQɄ^#;;Ǣ_3%{#t:D<C8ۙIp0<d>x'.y7jI=n7+WNgP@JKK F$I"//V$q"\(u]iE˖^3-i8̪kp8zj<Ap- f3(t!4r z qVU;`;I xL &"hɡ^ڵkx<[,֬YNnCvv6. QK9v];C(RT{Gk`;w{泌N^/cQxmf4Hz}ܨt&MW]YkXEMǥ޶\C,_G׾ddl排T5zUxa uM&w&2&?Uxx}OrA,XNqQncd<}=awj| Sdf&nFrF{e;b3<.bd߅*LZ5%TxM' ef^;{݊`"Rє '1n |puW?G`4_A>1A1,}{x>%Ɔƃ.diZyԮ\_5k7Qjٜl;pRa%ZG8u^|L<&@@L2:wSmW}\IA@oyf,|vWY\) Xp75+b Ǘ I t*'*U( +Qr-K!C@Eӳb1Ή S33 YrH&7'˃1AQa AEVeP6ǃWPСJLH wB(FQ؜]ND$TdUEAȠH*I(J*:}ĖLL~+ѷ a0?߉|EVPd,!*^< ȊJȲ(d5ZSb^z\?!:Hn#JȒ"yx=xqz:1:B}LLg::FG9׬A|ǍGzHqE.-ٰ"yn)w&xFkeO/XndT/< D˩[G),.CQU<A=NZ[I qڜHsuF=l >o$#0<4LיJ/cezN;BoOgAp ++()-::3 jyTUSXYv=绻h9u FPTT,V] Xq;:3v :÷ *5V+~Epcf83g XZj |?Tg\7~.ϼTŌ᳝46OR.%p) ɧOpwo<{_hvtѧ?eI~kL<htl[Ye*]4lU5 n>5󔕕ͪLAફ?S5qc9D'[s4I $~>q!>(z&"+..`GV!a,CTP=k-7PZZhIhbœAQQQBt]v[C>!ǭ#h:MHtFx%ra1ft5n"Kݰ㖰ZFta/Q- ATh:f-DEAT AT5GA4v*vx1XrFf\_5o 3I AThZ- j:d4YQ D5j AtCpq \̖o?se-uki?sKA!7ldpoܸu Ev~V0~鞄hxQ{+)f4drssioo{|OOhXb0ſ%h41!Zxø\.\.WܴNIh3aٰlqCvpppnA4)3 tuOHѡ48444 :44A47 gDT܃lN{˥kE3t_DlG-L&c?]Z ca`(**b֭;u]5y6|nD(.r:DTtlNgq 3]KyٜpVoL",i`sSgϴǽYZOgT/ML'^,8t&*ў?M5f'lf `6H+ 65hYd,+Af"IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/mixerline_label_background.png000066400000000000000000000005041211146647700271440ustar00rootroot00000000000000PNG  IHDRtSgAMA1_IDATx;@g wcXXhD B#ǡ xm| %"A?2͒]8IqFRS[tL>VQLjI]mvPjA$dKv9I "Z9B=bQxeB}_AU ؙ5NR{q]rng-(J(^ a J(J($#pv 3qwt=DW IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/mixerline_text_background.png000066400000000000000000000007411211146647700270540ustar00rootroot00000000000000PNG  IHDR&@ќgAMA1_IDATx͕1OP֢R!$b\L?D6&V'p/n qrjLL,„Cy= w{}jOA(]P`͔JtKE]t0X.*qxqUO"5!xD5}Xf=99Gi"zR Q b2_oP,X~SMG66.4YH=S)V;Z޼_+, BzU^kTP,bQ|}j4!llthJpkJٺeF c3ճ&}%'k~B\Iq~$/s_&AX7W/&A;N¾tBFT؊M)Tp\e|}}IIMgu'?W^MfXЈZS^a0b3famÇ1߫"2%AguMkb:: ߫}7ت`:ڀAg2ˈE1ϋZP|Bzmoj_߾ĦgڍT&hJжo#Ww@='NdΡ&E|YZj{坫3grk[Z;]ǒ R|9ulc^IJNڵjQsi.jny <(ueo߳Ȧ)}^[h^6' ;AK9H'vGDw;C=w/$/lt8N.]c"/Qd?@4E@DT**nbWŮ\ \U\BFƉw_ݴu?7`K в׉[{:2dyEq 8Hn臘"qkӺ%g-hf6Zw8lie_98ܱ]T\go۴t=NYZ75մIM9ohM45 푳UY'b -]/Z`!Z,]6SX ^Gg]\ptt/aȣn.8p٥-),ĥ;j FB"UťU;uݪlT1.n/JsszFDoW*88bdcXƐg @[/y5Mytf39{_0si3/>4Ψ04hTszt&;4?[ЊKر)(iժ9{꛵SciaWՂVPYC3A5[\-tFb= ڻOR6w<| ڜEsHo,j},:f٥"g Ǐ}/I=;S|-향%_%hJG'BJɦ Mp )))ʆЕh9*l&#eBWR-b/d6w n\A`ԨQ61!l;>⁘E6Sf:.\tq#b_䨈 ["6ma2k@ye%4o\]޽{Rd55֪"?jNNNpum߮m`5f0jBuMSKVYY(ma@rLĆr0_І 4A{ꩧH</h%j۷nǩLQDMVZl-snw7Lz}}Ϋ"-Q[cQ:|||HOZUn#m٧8*W7ٟ Pm]GF]kĘ8\VϬrFUnꙣ#^;׉eQ3Tȍ7r ܶe&՟$j%Zyy]~b:uG&Lj/740j,I݄/ƽh4:ywM͍RVKlml>r,j-݈Qϡ_x_lml䮣WgK5.i ^ 䮟%w#wL[­:vܩj0~ ]ʱ$L{Yrw`JRBE9WsrvsNr:+Lʕϗ,ʔre-\y;)gg(*J.Kg~)ɽTMʹUr^RW)W.[{!_5hEKaרI ]]mzxq,kӶ_ԭ[Wk׾3Za6R\7rqɪS=%ՔoîH̀x+ `)Y?p$EzQ5sE>o=!gnQ Tvލ (݁hx!fffTPxbxXyEU:թNuST:թt 05kq#nb̛77ח)-T:թNuۉWO5TT:թN֙|.>L`Fy ptt|STʜ> wa$>- 8^3 x1I']}}..*$]ORT\7[uyCGb?(-8w ceeT:\ Lpb'邁)*$a`X'N 7ztm96m]``W]]It2+epRI`m$DH` ;[w w{թofd?;͹0>!x_Lij[̌M`cDSTՓtptc$ Ftg%݀p$>Iw9\I9]ss|WY%J>I`iAm[ eiۤ:թNug룬źThGoʊtΜ9`s<64Xp9T:.d E[vttmю.Wʵ!js|sEiv,rۣPRnF[5EnͪPk=%33SEn^OJrm܁{ZO /o!ǼhШ ssf-]ؾ5lba(C[C /\r}Ο;G~AKOOԩ8ɓ')(( @Н>}C~>qXޞE9 C4K4VNuG:Ԑ__&55DVˣ'7uRQM./_ΔRy sׯ_ARn0}c+-gObАa7As`a21j=b?)wV"E۴a {vmaB勬^>A#\bb"k89; -~nnՅS03W2b~IN݄CV.AC l\aBϏ?BݮQR̩ﰳNB.]&\fBҲ,۶l`BƆ-[p&Nv>IA\pQ-^0 N0M9qcim/~%Bs$䬭]8S988|,9`0 e 8}^6W^CsՓ +a0HpdBj9v{H{qsNu8Mmນp0___ͩUT#YOX%$\HvNmٴ_}ΣGVs!Dz"t>)$@AfKbn ՁKΖsgOG9{TG1נacl}_ K>[? rBØ2ȍkeHIϬiܰc{cC!By{p7a:|+'v3,f֍voq5spp$//WؕO܅gWۿ EEEӹkoahҴVkrTr7 > {߻ ʂSYnee2jX_.rsr:0=@7x{PWruԯN_֮ZF菝5)p,_2wpuͱET)`GfC&WCA&ON¥&IKȖa\|Kq)8{Yp~8>t\ Ξ69NCb ߴ|eXh\l\JEn\7G M!˃dMN%rۢ"ܔs̤o7Lωvg\EVVGnNz۞*N.(r;s,]At7Op3,zqraTܺcb}r&OLGQbŘS\fF:"Pb`*F#+iԸb׳Gww̶ -[kg3ܺ- 9}^.+6p$fTwTؽؔvZ&LvVVL1{hJ)(4L-[Qʭ "6l)"A K H!CGG^^ [ʵnӎ&-Bϯ!KWl`O^ʕJ999bf B\r,YKK+tlҲ,-\=IIIYsSb%!1&VCuIJJ"9"Y/ F>Y)rׯęLgv6F-x{7 sV:Tƌ5Ӏs `3lHO;]\vQ{(2!+oC^Cea8^& ztSR͵:4w맛̙5v;Q?@~-3fT*vW.'t\. {b(m?Ǻ]!Nёx_w~ȅ, dff́}{ؾm#"vP`,$ȕ*WLa-&?ԴG߼np.ԨY[u9i>r cF"V.bfƝh4!O=iXI.uTa2EtQ*RW])r+$*J9[{)giUN(Fcc'g,䅺B̤f)(C^N(S giUNK9 .RˮRγf)(kסs{{8rrr8t萐`\)7wJPVR+DCXĎ82Ou;%8&o^Cg9[;G"v(Υ˄E=rfmZ"v!l9{XsʵQ|0ܴZu1{n(&ׯ) (g=F 41Ҫmg\&-IAѱ>%q$f?B4@Vf&...IJf٪Hzt:W^‚\._z<%8w^x:rrrܫo x)׼]fkZW+(r11IDATŜCdgg:Ë+ (չ!\tt" ȔpCuST:թNu )OZY6ţ$wM^zB:5|KoҋR``1΁a&Z wOsr=zuێS&NU:3(qq:to.G?3e=ijukJK;[[P(Yz1`0U9`o@Y@E:D':щNtD':;u 0:v^n:`gBYvNZrT*l (--᧫9D':щNtD':щNtv&sվEc㥾߿G1fL7/_f~ZǫyۿpwwE!< Ox'< U=.A2ze2zig iPV#kTLQ p;dWo Vx'< OxyNȩT*ROVT_vy(="Cvo8::>'< Ox5䌌^%A=TOt.0 %"W!y2z?R}r^S`,pAF 5rx@_'^;|mʄ'tt:DѠh4p`Τ%u{^cee'< Ox_ u2z.q0ɻs@4P.ИKeR&d452zS#W^FJf/7'2z){!-r{P%PIL[Z Lrd Q\9OVF/0Ox(< ɌK327{83|^RDTRRRBee%zlllh4P(ʎeѥ-'< Oo`n&s3Y(W T4h2y>cq15   l^yy9ٶVot:d UdTʫl%C&/Gy瘭i42x.1[yS[  8 OxLZg]a$YZO7w8uxyy쌅z^GՒMFFfff`mmBaMԶTǫh4Oxg0ͺB#?ؿbiMGG5Ɐ;vN|%,k hOxqN$WŤ)Q#kɽÉHO;qv~Mr/11i'hڬ(wi7慬խ^rr2Y7?[oeɒ{2\?,'LE.Kݾەْ{LdLRٙ5+q\*fѷgX:~?NÆd|(-4m42ymtT&dnX [ Ox'<]FC/D8p vvvb41;BŅ{V177GӦ7J5)) Ux>CxWޡxqvqATOspx‹'iy@e"l ,xщ_Sa@eE(3.bmezZ2 /*r~+XY5xa^+5É :Çra^nB3},^ZZ*kg${wbcW7ɼt֕}놹daø}M>:ccX2oذḹ{;.]8;˒y ۽9=;h4j'7p@t}R~<Okt{-I=W7=ZsaN坞011̳ï$&$^ 6soٚ [a𒤞%%jnݼNF Z355bnnAN]$Z-Ǐ&`jfF%F#xPY{wplzWwɽCq{}Β{.c(\\[2j$ɽX8? K~?$UU̜6 %;JF/s.#'HL84w˯]RBz_Κƒ4e&H3?%%:tfz|0m[~D2h43f +ʥ4om%XpG'/;8Q{Pt4h3Ǟ}o.ףHI>mr1 KK̭{6W^㌶]=xF‚|Rt2)oKԓPXY7mQyJz VܾJ[+T^I[?B{8\ UdW3}Ԁʶ:hPդ^Ša(%:=F֭<())+++ZzxZ~;ͮHټ?_e{Fټiټq,^Ey)GKd ћYdA!ɧv) I8w&nQ0sfMKII!{c_o"h$M;|3'3c8&d˜W'K=c2؛ѐ]N^ G⶯WQVZ'/zlѬ=,Qk8cmsyAOyy9u@<0 /55W^Ϫ!{wzfz}fBfž¶4#xF Ǎxz#:65[0L8Q̸ ױc'6l%r{<}~s5S%Zyx0}f0b0qtg԰~>yDGG'ֆEr&JL3G$:-cO%|.Z4c $<7KÓN@'ZҒ⧼)ݹbu-'o]WQ^Lo_槶g'TǥN[LoOlS=O@:zF c0i$A3&2sV/_M1_fEћ9y,bi9ASYd{⢸|,EO^[8?a+HK9Iۻਪ;߻o6 KH$$HO$@ !<"*U,mQ1Ъ:vDU|L1*QC B6ٻ{wbÐ^wf?wvs3眽9]w(ëוO{r*:6{y~Ϭ[ÿ^rLos8Pnދ/lH!ݼ7^{ǿ,/ގר=qٞ#|]vv ɭz|(?d aa ʡ`´y>̉jf ү` &5&{#F3$^xx8}qqtut'-?1]q 5. -WV ņjm\k>oᅅp 4߭0||Kż P{.5 -,Yt/M-Eyaaa8WȌu*i}3ws.x55xqWuq\ۿ==^L=fP mJ5/Ow©?a.WΣĐ1xC2s+l޴Ht\kliI)lyn=OY @>d v^{ `XJ^/](v&[%ɓ' a.s54-'nE\q'VM+kT2A'guuu$&&RZZkݝۙ\4; 3{bhn8UUeTTTt:1 vn7;Kij K{yv45X>9۳onpb/-&_KԴlr\.y\wc'LHjAl(2G0L:쫮#U@{ #wts-`B&2K&XmH^CF]@\z$j>'=ت6=/QLzz鋣[wfKO x grF-6 v{bHy}X,JL xeeeҽ{w4MzO<O<O<O<CGQFcyGSyhNt+\M%<<|lӵ)0h(0:m-)渦R Էӳ!ٌ+ęzq/)f8O4"IBM™loin7)% p2,k㧒7n]bRILL LHbTxOexh~n{>^iNe\L&omo CC?qbz?fBP=zxa3b&!#jqC[=L|rr[.n}}.Y?iQ+x3Xv2R]yI˱l$%%aQtK}}=(–8SwU3;p:x* br`ee]:X 'x'x'x'x'x≷yg뎑O`C{e7cCTw:xFE-)GrorAgK̚5 Deee`[łl@Q3nUU nS^^ήmJz`%boow-^ +h}M<O<O<O<O<Oq233Bi"Q&Dg)!Nۯu9 }|,a)/+ UC"//ᛷcGJRWBJRDY/7")I HK;G^^>n}CfRRr/wX#bve()koMI H۬_pt4SQDt$%a?uۇh'Me2"YڛHͦaO?/ч`a@al).}dzN@) za6t UYEky’[W;g;%hŵXwu۟,Ka&z- 7̲UaUTV)Y:(mhlcT.˶"t{3prQ cy ߌA=5vݺs^ԓ ɔv;-ŻQƉy(D̗"%)7nbĈr{ (|ᛷ@h3*xz%+L͈spAɹC_#*p6VsMf>U5I3 (q= )񱀙 8bqIOTnfVXZʙOWg&]4134]'њۈ󠥵f!aRG)-9ARRG'W)c.¢UX M*,FyX}J]fhĐ{ѽ+,,-affqŀ1zv-.ؤ m`aa)GEUa($uk﷔1hJ=׈QJu1s1IJ"aaW/1sZdqpFK%cnbJbY_af.8˹X ~Ji?oSPZ723aHJo36<+I`kۍ gObf`m4U(񇭔V؀,mJ { -(pڱ/}>Qڢ.%є`"P[3ZxΝqpҡ7tF]>c+UU+nҚvDO[)of5_] ςW!77ZZZpo,H`g$,@ Jzݹ]Ai~~cqeJ5jD(N?zh7o\%idebaѾZh+id+'ZD>Kmy=썂(,%\{/eV6(5q$lP`wBhMkzH4HV`ZZ|Rle fЩXիCammVWYXX@"< T֭YuadlVwLjUvɉe]{Oz6~Gs, ÚoL;r 1N,--1u/͘Rgעխ|!`jfN۳; *ҫrFb7 AsnY[UU-D҆6 Vz'yjr".{wEprKqX4νNGGΝn=p!nYC@4kq6$Fw1'#C]sc FCO?Bܚvw,0xڨRݍA*P7 WN,~0L+:[<{@lƃup8b|H$tx:[4B,,iuԬ -,>=:w6U++#x8p݉8 \B_@ѣF_設x~Eps_KKn]/vÐa#(wP}p.`9] zGDV;6ǎđC{ g;GZZq1'`n*>dAcCb#*;:]]]ήjw<ޡN(|Z2,-m4W /Xa/J!&O @IMUYzΜ5 xH_K l6V7q ;8b v/ՙoJ:@q'B"$;|]H0Oo]záθwR'H0C:UAUpp\ڝp>?F;;8C$t~Kǁ hwaμק՝OKF'̩DLhuǎĐa#1ݡw-Q슾Gõw?t&8jt6=ɻL6J}(:Ki#9&iC'gZ݊eƝq Eg"RpN.0C$NDA~||>z|]H*6߮@5;~g]Ey1,> &p/\ͥ]>cu: .=z*u0++.sl\+Baai8#'a`ub欹066yngVeX,FHeg 8+YwfAO8Ap0y\ . (Xj[o]ͥP%BCqEͥLͮ⒦j]EfcfEKsZ~u;?=yy9gp=<܀w<!quusyzP^#aՀML|swصЉ-ڒ=ilukZPbo{X{q9?ܶo44iwQThK]=i85^uaRίj5o%&6>g ^ UFh^^υժUٳ|zp/yJԋ8:,*Y)r#W^9SWp5SNP N z\lܙh\\FXr)r)r)ro4sZj%c_:]Lޭܟ@_?8@1SN9xnǭ\Ikrtk xTҍH8#ݒA5tyQ4pi;p@[,p.)r"NӺ]Ǚ;ə'03<-yܸh\jF r)=u$'xGDk,赬FHJ@Kzc&(4c&󼄻3\i&nOI/Mh|B[r$BK R/d˼qO%kJfF.h5SN߱szKo[tʘIqEz=ƔI0 )#** łbh4k.(( _rmC0)𬄳U~a֫'V,_ = C2c|a׫3>w9nBnP zq8Qu$ 9)3kY46m+iؘ \WHNYD#Յܶ-: kW/Չ$2]Tg/zogٸi=s;?OxH!{ =;r9;1ql!g0IԃUon1-yG|.&28V!mk*G[ 175ڴ&t:#^#, {ѬӄKAAB.d9OPPuܹ`w'}vq+5ci{uVpi;hAW5rS pIlfݺuDGGcZ)h4;rDqUj?reK8w4\XUƥmZr]] K6Kszn\rYȥ$B^9}+!Y>;rP5~ }{>Gr3f-`hb/A[lN}S_lfLMr/AF$Ir?%%r̘=ʵ:e: mMv?s׏bsSo4 8Ʋů3rh_F'* m9/gOHJK.>s1dWΝ=Mڦu|se+p99|u \ TLQa5k{qΔp1nɇ_ ZNbΝ|ƌwbZquuٙrWS'[W ԍ9t#a7cx^,nNNrִBnQ\gssKe稻 %(Z-3h0`2XnCЕq%f-_l-PӖig>8~s,ʹ[qGlXIr-ߕ' ‚;q57tؽ`%%%l\Z:ztekFVǏM[{g+))aӖX,,^vc^#Sy//oaW+"I ;O&N%l6Sg̓rs歐rrKV%V}GmH)6mًdvVdh4 I1HCFP\\LqqֽkӮO$d2 &,^,jGa4J(+צ ?eR sssgμxW!++aRӓP- Hi4FDhXYYY;:uA\deem78'''jGo 9l6ׅܷ3n4fkM$mZ;-~57f qѸL^qfA|4 @K@aN1o}]|ƌݞ˻IҘDhD+"";g]cQ3N]{ۿϊܕ_&yt'?qUSpv؝ f3oW'%,^G.;s(**AܼƏMdX,f3BxlOOet!71iwn-G݀>#{S. oPFhFGv6u@QW;"ظҧvu1t gg ݐ2At!g~k׮R.""Ba׊vFmy"ΨCG$ ;ggg &':v!^=HʵlkҴkTիPՎ#jKjAR׷r+J9FII* ;*Jo`ŝ3bah0 ®reW)%KG\Dh)xӄt \\܋0 ߿_M4Sz}ݹ8얯#7n?X>G]7!NqI8WN;=.#}N㼼f}:lO  ftN[;^5ٰn9~;] ՛8~aQ4sEiLLJLf7nꐋmؘ~yMGkE]&EEE{.fYFJt?F#x0~uߢ$jE2wj kӾGMtȍzx \2ɶVq>UAW<2o(,,{+r)r)/6tй]Kҥi{HIDAT˄`2hJP{oOxeJ`,g񌄞7zF]wQۓ'-f=xQcɼ4]b-L؊3-=%󲲲R7v):R2o!BlTwҮ}g% W+vlf[h[fyk=LO%1>N mIӥܾ}vsJI=xy&}M9on])<t{{9˯ZT3jEnzJ-juW._V>z *mcTҡc=AϡX[[՞{fۢya%숥RM~4h"G~^.=ꇇ#zI =s}N'ؾ- ^ +WR|ysfT*aCI=}u5L͛MA~zfoCfs"+ͰHFo$|m4e$OdT1n4:u*W"-0x^UoC`˦Ti40 dl&.6% pTnMZ-:woCfsp. ryqSjɼDn\\xR(k&m|9]` -01Q9{*[[[ֶ5/_Tdt3͔zԔxU*38M?JK_/+{* :vaQ#lmet{*:6~^RAf^? I=> GgWڷN4:u^e,/I\X *++h4oœ蕔\gORl޵kWپ5J6O!w<# +d4ۻU+}&,#W^^FCZ9Ip<#c67_2kIcǎQ5ql_ɂ_1c|ltv}^#wӧc@ƍQe}BgW:מqk<a>/#c4{ xbirqovvū֘unݺgWݷ%u/--^`08 Oo:}6eeL6YolJv&n%pF xC}HdN.&MWٳ7EqKzgw_3"?'3%u{)S?cST"&%r#s:w&njƍJzFuԽ93>ȞzޭNn88I=šoHڵ zF:|??æ %^Ө('|r=;;{NL3L@Үxz 3#U׷#W.$$jٍRYb,ݱeRL%-MMv{6gyh ܋;xW?R)Gؒoܥ;+DyVݓgNݽVF2샏$1CY&|77wɼ#|8Of| 瞓;I.=lf_F׮%Ϋ8l&(4o#w `A$'ӷ{,\ ]O^n/̞c'Kx5fھﲷ?ᕖM(+-R}~X{?=w֭Fm#ju=.o^{LO>Kܾ%h0h4>ԋߺ/ۇb>Zc=DgaKB8sIY0˖~C\&R~ f=jo{m7k,CΜ:AyٍukBH?͛CJo¹lߺCJoE:V+!|%'^b"|lQ>`C0LFӡppp ??WWW*+̟7‚<ܚ6÷NNF FR Fߊ';u8/Zm|y{ի'ƈ+=hncc͹Mk(/Ɔ>}j(:Nfgqt&UgpGCDuuխS5p}=( YA\eY^*( "cbkFh1ϾEGÖvs]xKbf^~A ys5?=f^}?q.6fndh-)Tjs _PCЬ?mɩzM=s8M=>LSʻ|ÏWl6ӇԻ5Mn |~66pfކn ̻ y˯rՈ=JX\}y*) ͼ%i͜ǓsedyiS|AzVېއ~ob|^zcGD ;zb6lmK5_k~:ˁ~޺ =|ӁCϙ3ѣtb׮zy9d'0>H{X']]uc:oI)Y vNяhm7_pc8!_w=]ꏼ3OCl%$磼bo?) _K ~) p=3(y=` SU-<yiYd x<(|ݬ[swH53VqT._C@m!nCN=ÚX\VI57*/Xvb`絵w_0mU{Xr-E XFE@IKy^ٲuK$;'A{ {n sټe;EIIM)OO${x!\ô, 6ǁs$Z)0!(L: 1N7h4^}}=$$$~B{)x'S<O<.'x}sSF.Yxwy~EQ0A 5Qݼ"Z49 էpzyյ5Tn>g0`#5m*9򘘐Ni'Az&[r*m rX[C*1㙞5E.j.r^[ì1,q-G.$&6 /њ̢ҥ-]AQ³}$%%]k|Oɠb%Kʗx奿C3sɝ=7_jFR҅SIKmiP lCYv?NCC$''c2P۱XV9}4QQQ(sI;[Zz&^l4ƪ=L Hxŀjq!&4*<ެ&=O<Oo7j.YoNKO<"{y-M<-x[8(x'7;sN9B}7SJ Az:E!!rW1BEv'P۟:[RJ 6n}Xmmmg}E˜q\nf3&wxE {6VA ^bs`6sP<O<2Z/x]/O<fo̼fO<Og$PEo_Q`'jW0=k)ʁ˩S*=7'M"-= )pFӡ( ^O::hc{ibd: 9'x'x'x'x'x'x'zJAqa^NW'x'x'x'x'x'x'x#O~SIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/showFX_off.png000066400000000000000000000007351211146647700236700ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxœ;KAF),҈bİA4S Q "B T+AP">A%bB))S#Z5nր#3Lmv:ʼnCQ T'H8 KB- zcz?bg:`_ZѶP*\X$!si}FG7UٴM~C2fs(5m/²ܗ40A~LoY)g^vrDvr?=OFJLx,d:nm!Խ7wϴ~q|vE<NWڪ*^;y GM,aE=k ?/\){+t^4>>@DDj|B5xA{tSIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/showFX_on.png000066400000000000000000000010501211146647700235210ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxŔ?hQ_zDQ Bjł!P&hNYzN.tp/,H.̒b*N:fqW ipwkz?xw߽w(m(L@YES q |' !xq"VHhqg`lY^|`i~뇧GZEV`c?Z]Ƣa헾~3}r3xc'&!0uݭtqn.Nq)m`LaoB4M~ÑB>-~%=54MvN1(da=q{?Cɧf4lX XEq飐R?E:=,fPwVh6oR)+S P~4? nCw}Ϟ wW?sVdH/ n;0trυZУx:J heUGm_@]t}/R8+:2V.N28q8ݹdD<NǝIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/showFX_over.png000066400000000000000000000010631211146647700240640ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxŕ?hQ?[dR:XQl{Nb0IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/showMixer_off.png000066400000000000000000000010441211146647700244310ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxœ=haWoRPA2:KSBp  "$S"`DHC?і)|`B-W2=rɝx}||P_q.1w]-'Lż9y[w04ly̭݃3k%{! :kٞN%6@l46SW gf3guoח(= 'R[k7(̯`@h I%;-ZnɤzM-LL)%RЬY+ 9TH>SzA45t3n|r{ D\glm@>4k]UP?o`v:w ϟ=,SW} *^Wmk:(ܽ?K)^Ƶ1cǏѮw45wWt^N!XZxuVQwMbfjIIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/showMixer_on.png000066400000000000000000000011331211146647700242720ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxŔ?haoz*(EAZ(4P *8up݅qꠒAACT,d!!5~'wK<||U-TV Q޿&0,M8.|`I52`a6|rwOX%fG kh[?x3 }f `fƣ:]9EEqymLSBBuOoX:K `}NYQ҂YQnĉ#Po[p^cZ%EaV|چ]_dԓ|}ԹZ8cC2|J̛hBw2즆a!cKKxqoʍf&YȈ;ZG֟v `![{H7L&~X"t];y}Ϟ5%p}Xq<j 3 ĚQg$Xo&ϫ/M:IENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/showMixer_over.png000066400000000000000000000011321211146647700246300ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxŕ?hq?XAd/R ƩD ](RLvmD:X])/C%rIxw陴 سk|xhe$G,w&ru1#riGJĘz0 TЯu]MGX*ouj \Z?hC[Yy"-tsc=8O\hmnSPLϤEF5xa0͝Kƣd2i;T"jhN&[ P3ˏ4MEPTT Cיbv~!uz9>q<} ~pı0s/oܾri'_D,B[2%43-zEv gH/|^/b?ݵw,s%666M$n/!̽퉖y Q8?TˆIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/showPeaks_off.png000066400000000000000000000010571211146647700244140ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxœ1hQWoRPA2bTҐs0.N NbC,RJpՂt`J"-i`@A6\nAx)C|ޥpG(΁ڦ2s{7/jmk_kڶzl_qJ!!Fն(ZYZm@kD\`vm{oq \]Okt>~XB}jm /[$0C FԽۍWɯ&)DJ:ѿ6=3OʲWbyj/\ ŇfZQ$TLQ 3"޽os1N2wbhHӉjгq޼uq#y%&'r>ۘq~:aG=)q?&pSϏU6W#sO滯$G+Îv]z)T ߥenW*EIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/showPeaks_on.png000066400000000000000000000010721211146647700242530ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_IDATxŕ?hq?xtufP 1qv3=ZD:*=,СKҡ dJ+V$!\ %w%/<~Ud`j"(Q |nz^~@|[DM##C ),ek_D1tLq˲K+@c@iE>l>G]Bu7.\?Ӹ(b-Ēӊ)4Y׍փk00M3Z1\qVQ*淄z:K{F⍋igeY!_*q<^*V ]fUm #o֋zI$'0Y }S$V<@;`G s8=װ0s|+.Mi뺑u5YoUxKNN=KspuFyB.Lww_ /5IIENDB`hydrogen-0.9.6-beta3/data/img/gray/mixerPanel/showPeaks_over.png000066400000000000000000000011671211146647700246170ustar00rootroot00000000000000PNG  IHDR* mCgAMA1_.IDATxŕ=hSQ%Nڡ1)BNDq(dTP0q,"bK5TH,M)=ɹI*};9{{?(d:GUb@*3ryD8>|.d_g8^k@Q"kSv6$n p< p ?[m =0l2UV\+SUbjT`uiF*/OmSzbwb͊5 D%b/*\+byRR>+y62Wu `)K RwƋw \|{\'_xAC-eT`K zl( pl1(ob?NG7/~KZT.}g _?=܋"f7|;-J8OyS= ~}o_f.cDK"lQ(OU_o7?u3TjN++kcUQ'-P{1x1u_IENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/000077500000000000000000000000001211146647700216255ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/patternEditor/background_channel.png000066400000000000000000000013001211146647700261340ustar00rootroot00000000000000PNG  IHDRa+bKGD pHYs  tIME 6MIDATh?haW- T)AmRDAS$؎-JB:`CqHq4W9Kg2JJnbCbrΒ]?) g<.(WcG7o<ڈL&"9!o+0 "~0l|m@p?xݼk-d;ym6h%ލyLS{k%0ꥡ+\zl2xR:.nAIENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/background_rec-new.png000066400000000000000000000052401211146647700260730ustar00rootroot00000000000000PNG  IHDR|sRGBbKGD pHYs  tIME / IDAThYT> l"AaA)(dq5)DKTUBI*Uh1*jI԰80F HqGazKgzznD {s=;,ECE/)x'ӦMEi=s6qBwڥ>yaJATzU$T l\Ǘ-GB f^_UR(eRS;ނi|* @)*!߳Qc3eLE=ov`!Ч/yOs9ϱY9{l FҸENmb]T `R4ja\t͢HskOo͢Uf3Lr$v{i;ZwDefUfɢoT!%jAH)QLG j'}ML>RaEx{kbf3jx3|:VW/_lnlS W\9\gWО9{6Uiڱ )% 3bXG%X,VNp&dfˎeUeR_0:֛\q )H)3\kƗعcR*4L9}v!XdIrcKOVdV9jE4vjY5-E<jlot!$lflg/W͘b)T-[3=%Qon庛s! QD<=;\H)H$lZHRI\noXǸi}xd˹\JedzsXNkK%ℹ\jlb #Zz*9uc9L&/J̴ZNU:q5y]WGy,-XwNч[BZdI$|qxk؆$IAm[ j8Y_`x@f8Kdd$ך9ZA4Y0o!-s⽣ߵ0l8Vuh4ulITj(* hiZS2jU|o4d*Ei˪x ==x<"""G͖\8=n^'5}]hgpp`G?}.B$af/f//Ɍ)#Χ+O4$sb؏ SN} ߞ g!;![_vCue. ۅIJNgS 2Uv<#DП/ΎvNeIb SU /dr]|ìI9[^%#TOCtK]Btƽihh-`lM3jͻ+fҲ >xoP&Պwb^zzYJٽ\ _ysUrm!IENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/background_res.png000066400000000000000000000017631211146647700253320ustar00rootroot00000000000000PNG  IHDR+wbKGD pHYs  tIME 7}IDATxOHQǿ+{%, ?%*.&) DD2 I!t  딗N,(vY̸7of~ü}7Ͳkѣ߿v@98X| ኍ}>)Fu,1>5 ?_RKԐH(4^[@EttpliMS*?_[{ƕq١WsEAӔJꄻގ͍:mmWn'1% *i=O{Wӓok8g_Tl Ӟc̥^c.5_q|I-67*gUOmV7jGvrЇ L ^TuZrS%CܝS&`(SPtr=Ԙ$ZD0.#pɴ 3C`Oo jalFXQ쒇'>G/Kawݴ})Ѷt3zkfrS-B8l[ ?4Tj'N%nu8 S7#溄ytۦN4Up7&m㓞"ѾewPoxZ z"Wtų;.&~-8+ ˩yj[dO1.ˁp||T;BnK8EQ( -UI}PjzFc.F46hn͵8 AD:r8{ts+҇CtEq=ZRFgnJ8)Fzl6mvuuuTݸ&n;1=1brnR酼ܺ/~ Pr&?#ռ :؝>Rhñ ,@?Tl鱌/IENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/background_zoom-new.png000066400000000000000000000017561211146647700263160ustar00rootroot00000000000000PNG  IHDRIcsRGBbKGD pHYs  tIME'?nIDATX_LSg uJ*20C#Z1!$96w -YwCdٖ`]P" L ,==vA<+=t9w9O yS1Pe5dg~ȫT*|KK M գ1[6NHI͠`I$+̋mˢ" A"ZAQM |CnaaB{8[F KloUtG*=Jr7ZvksSiU[?sP-"9\!l 6r6K',V=靣nj5e{ֆ(:X.Ze 2_|tLXG=Imٓ:jO9.mj 8"{#I$IWL3:`kg"әgwn;C>yI޼ΕK$gl!*kͺ\ݢ/vWlLq*xW"3/ws@K-gX[a|Z~P[66~ژǥE =u[COR~./?o/r:xTWexd\7GHhO$I$I$I$I$I$I$$I$I$I$+v~Tj 7Ia`RlXG+@"]בJԹIENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/btn_dropdown_off.png000066400000000000000000000005631211146647700256700ustar00rootroot00000000000000PNG  IHDR gAMA1_*IDATx?kAw\7?? %VJRTDR\B'X\)t%8yoBP7q3pS0~G/KoR턆} )%a:\L gRJR؍J)bQjutR/?D"A̐uBFG~ɑDRicq:yV,kʐ'C?NJeY.b# .Z[-;:4i.ek;$7t Yĵ["Dַɜuc$Ԭ09\}xw1?j}%l>~؟׷h+˫ Ţa&!/K:*78O//PHX#H7 w[+~]y!O|KZ;~~d᭔5\")%RJkA"-mT_>L 5#٧{菎H ;<14u!tee54#rrֵãebdzT9 Ruv7 P/rGx|&IENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/btn_hear_on.png000066400000000000000000000006751211146647700246210ustar00rootroot00000000000000PNG  IHDR v4AsRGBbKGD pHYs KtIME6)ȸL=IDAT(ϕ1KPWKtp蠴HG,`TD:)U'P\ҥSP*X )!$ qh\8q9c? 6.Ll6K"gWsUܞX4]k@ԧ3>[-.y0 ^n8\!Wڐ>ɝs?c <)b)m00[(3%͗OVn}ĠucIb+څ&հ<ɨB 48cko֎BLV IC}OrfqE LtIENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/btn_mute_off.png000066400000000000000000000004571211146647700250100ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs KtEXtSoftwarewww.inkscape.org<IDATctΚ?C.0yϚyAY{0cAV?=_B^> ͬbFFInvfyl ; $AE}C^ O8 ~arX_kϠe]?.IIENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/btn_mute_on.png000066400000000000000000000004371211146647700246500ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs KtEXtSoftwarewww.inkscape.org<IDATct N?Kg53l`f?V7 /Rea````+9?%Y68(M"nV&첿13p9?VIl U Lo`````? #$6?e-p2IENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/btn_quant_off.png000066400000000000000000000005721211146647700251640ustar00rootroot00000000000000PNG  IHDR v4AsBIT|d pHYs KtEXtSoftwarewww.inkscape.org<IDAT(N0?7q A,0W b2QLSW$ (k{vqŤfE|ȿ%J)!OB4撝BNuHTJQ8 7z}~ںuiű߲A7] i#NV9MA7] W@yjcLI|IENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/btn_quant_on.png000066400000000000000000000006001211146647700250160ustar00rootroot00000000000000PNG  IHDR v4AsRGBbKGD pHYs KtIME(5/PIDAT(ϕ;KA`!V۹X)a;E J>DK >?$}ڹi~Ǎ-'CA]$W+Ai$!VSJI\RǦ{ԁyHJN3F%Su#95Hm0LvC.?ܟp:'ƙt/Q^>`||=̄8HD*.62sӃgf,{! /[aTlO Mj*W IENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/btn_record_off.png000066400000000000000000000006031211146647700253050ustar00rootroot00000000000000PNG  IHDR v4AsRGBbKGD pHYs KtIME:cIDAT(ct ϟ,+봝+&d3:e/a J?;0||K ?%rFFIw/ >B 000CYauD'0E HP5(GKa(^pI3]3+ \@5Cjff @++Q~~!Yԝ>l¬*'E?'&FG ƿi3#LjvLh}=0/{^=]X4@aCe1umP̀[)hiU|Ch^CJxlmgٺa8u޼{< eh哊w0ɴS!ki[c/"j"w6+QW/cPc@yށ홳j D$odjh820p@a 6 HiZ Ft#17e? #2.dȑ)&H8)$ 'P"S[QBj|0lc)G fup1/h:'0kl$lk,Wwme!d),\`6ܹ۽(&U@ \c)+ X]8.ΟkwI )<zQ W8mgU#`K3i|$*mi% C_(PK}b8Xi9 u[)IENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/btn_solo_off.png000066400000000000000000000004541211146647700250070ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs KtEXtSoftwarewww.inkscape.org<IDATct ɚC.0yyAY00cEV?F||KSYN , ,ج&Š\ѧ2As8 \#3} 20000AUQ T/IENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/btn_solo_on.png000066400000000000000000000004231211146647700246450ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs KtEXtSoftwarewww.inkscape.org<IDATcO% gځ3U7Vo0000 9?%!fEl hΊP4 A3h020JbSs,-vKIENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/editor_top.png000066400000000000000000000012251211146647700245030ustar00rootroot00000000000000PNG  IHDRw>I=sBIT|d pHYs KtEXtSoftwarewww.inkscape.org<IDATx=nSQ * rˎ$*VŹEt)CaHoSwۻ~Tm 2FWn^]ߜ{.eճjTm,vFf zu!x<; ; ; 7 $wA$wAfUUY";=$wArJe"H[=aN;5e"*(JHB ; βAeHB   AYe"*$JHB ȬSݹsOcp P(1"@_U-J8A@U(A rH%2G5>?{eusYo>۴_U\1jtaY_oIENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/instrument_line.png000066400000000000000000000005671211146647700255620ustar00rootroot00000000000000PNG  IHDROGsBIT|d pHYs KtEXtSoftwarewww.inkscape.org<IDAThAJPNGd#w .*u`1M5P{B iJ)-@)Yǯ<ϻe|x("f29=5ss:;?3"z{{:EnmvB+]sH+k-ұJR+Kt,ұJR+Kt,ұJR+Kt,ұJK_BZC0uǥց7Du@ \'[VIENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/instrument_line_selected.png000066400000000000000000000005121211146647700274200ustar00rootroot00000000000000PNG  IHDROGsBIT|d pHYs KtEXtSoftwarewww.inkscape.org<IDAThۡ PF H0 u B6"Ct i9z#'p\.W ۶?r12S)vVcVU5*OVrү1jc ǨQ+V8FpZ1jc ǨQ+c@{]>cJ<;]8"l 0t;м#+^BIENDB`hydrogen-0.9.6-beta3/data/img/gray/patternEditor/tickPosition.png000066400000000000000000000003071211146647700250120ustar00rootroot00000000000000PNG  IHDR /8bKGD pHYs  ~tIME 7 NTIDATx 0 /wj !q5I3Cx%pY/VeD}[RE8ǁG/:%8M9IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/000077500000000000000000000000001211146647700226165ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/background.png000066400000000000000000000002651211146647700254460ustar00rootroot00000000000000PNG  IHDR2K^kbKGD pHYs  tIME+!tBIDATXA ! 0 sοpBh_߿[ъbX,bX,b 񌈚83WlIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/background_BPM.png000066400000000000000000000026461211146647700261510ustar00rootroot00000000000000PNG  IHDR+xj0bKGD pHYs  tIME %93IDATxmH[WkhB:ڴ砵P6ɬk*i[$kC[F16":Aզgvvɺ9 A@ː$>֛%j|pxy\yϹ稢; hSZ*|eطUz"R(|?: k@ٞ4b+ʈm^FWNWe7hVffLIqCťwā`ltTs]x<̹e7([3ebÆ'#M h ;s<4ЇSz's-ad4QOxgE;3bL @|>l f)J 6nÃQnVu`Q^3ݹ*511?Ǧaۗ%Yg`j#Cam`Fj/GE|zro$ĐވcYV@yy9''ZZZb%ш,tѪG~nFvrH, "BՋ=oH9Ij$:vHLjj:d$ <"$ VUpg5'KDD"QsTpH .#ՊD""Ø(ԷPI($uL׆YsJ%kvVq"{vf6qfsTfg+E:DW~%D}rHD$&QRRgw"&k`Rggr}Y3}cpB{WD8$D*.~[? J,C~O$jSZzJT 'J޲4nVwL$hEyy1V=(&(V(X:ʙ z V&B8qoc ZCg!Fjd;P%0\@H7wU#/j?3|fȤ`?:glU=ݲ:gCvv6 c# #mQ@``wAnn pBfYhrsXvlֳki}cI֭[:f#PsƧ}̜O);:- 㲐 ׋9sDj- **7pݨ ̪8}}}8~8jkkarj|棞<4it){dɚv㸨yOEJ0L쩨Tlb<n[l,>r8UJ8|ګXSv|,X^Fi"RBc MRmjAT>Dرc8.RtR8R`ɦB0 ^׫a,OM*J.sbǯ_쯔rHpOrI",Y+sVEZS3K1 qь'BN>QU^_^W_}@uG>q(C);54}>% {:0{) ?y Ϯ,&K6,A5uK[,m.vc΄C?c:_{;E},-2irDr*T`w99;?m9;|h=#YlW5E`w\¼iǕIsr%bIdMr$k\;kdʤjq%SMDNB nVcqG @QaA"%oĖp&K9 s+Vຮn8>eM4se!3sdS_uCIuql sï~Drf\lj`< ]yuN ܟS{#wՎܼ'\Z¸^eddGU@ps2~b?l,^Z6j<e3}$W(R,U'XO*B<ƫZ#%kqӊż_,T;`򛅩A*=Š(H;:xpJNz\S0k1=igO~B3566hnnFۡws_mb}/M6\qxƍU? f׍smF8 K 6lDpyoUgTTO1g^Lj9#q~my}ۡw2466NcRVW8ܼMMMufԤӹ q( QYYI lf*؎tjgY})>5566'NmiZAw.*6DTQ":[QYYZ2`[;OEpGp|***"K6L\.Ϊc\bd%b4riهc2T+].KnM4g[[[G5r \?6řq lz`N'xGOH*uW3z\ #M 'W)s~ Ϊχ:ى_TR`Kod_#`ɦ]]ii):_Ԭj'q:-(Gpު'-c-؂#+#Z(--լ(Su!1b,ٴUgE0o˿`U|9u/tڒk8jդ۴9<Rc5: 0:x,YSL6VƃKGT`oK a$ (/04` xlj׵Wp6i;ߛT\VsAσB$H$\_<;mEsRJokwyGB`:b^P4MK@JկP(|Rx? c&~o?ߺ-Wk'FRBqbo4S @ka|0~ㅣWNLDg b 7/S> uma3r_4gV 󧏾<^w+zsRڼ_Q)ok ~Oڒ[IGaZi2<'7IDAThZAhP^;ul&!x`eA, (׍- C0aÉLp9wxx7 3!M,Ilm^˟=Jbf6 >!TXZ\@blN2SeOaiqtd&[3gg{!cs$𵟁RyAG\dٺKGKG</B~b xAhcҸRar4G~/G^:qr! gYVU0 RxZ)N:VVVJCyL:z|O4)鷵˲G3:Xal'4?(!r J&ZL9VeYji[+nhTtwN_nq$^{oHAҸ<,_3:zǂ+b`q|})L| )Zp-x$ѴFlQd2{h5f6N} +hTtzըf766jRնXeBĦAP"ﮣ Dd {, ӵVBlV&}D-8Ԃג$\˗"ېDnkk 2.6CU]x}}jq#cՂ qY1wo`jz#a@Pq^8yt{Kd}c}Wf;REdz#aLg1b(!Ƅ6Eꥣ&/(@5׬łL?bcv{:Nu5xW\IޱVt-rEgYr'Z[ޢn3S,Uʄv:Շ316CYz۷rIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/bbt_off.png000066400000000000000000000007131211146647700247260ustar00rootroot00000000000000PNG  IHDR VsRGBbKGD pHYs  tIME$v?!KIDAT(ϕMKBAi936 Um\haBBDi[ iaQ)Axr#QDE+آ5zsŰ`h $ "$9wf5c`(091r(6?c H-o+?-kV 7n5Ìϧ.jb 6 \R~] Y{g `]޺'KvPx鴶.ٲ`Bsxe4FBh4Q129To-YyT4oi{lIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/bc_off.old.png000066400000000000000000000007071211146647700253230ustar00rootroot00000000000000PNG  IHDR VsRGBbKGD pHYs  tIME'(GIDAT(œKQ`.IXCRK` ZCQC 5AKDs[K-:T55fDEa/is89|ۍR !RH!$\.zZ4M(tpc(e2b}s˚р;IruQ8?=fceuo;8ܱVYBHј>8Z֭? ʼ=Ͼ66;9vA_>b)G*ffYF+A**HsK[abkmq0g,/Ns{hpyqn:[iljwLWqxs8s{;[m>:o5Let/ 9G>9s`a')%!DJ3}Rʒsw{֏߆1!^ZKx]/ {IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/bc_on.old.png000066400000000000000000000007421211146647700251640ustar00rootroot00000000000000PNG  IHDR VsRGBbKGD pHYs  tIME'3 bIDAT(ϝ+Dq?\ϙleg,< IBf0y%%f#,)"IiN"$E{y\gyt輺V`F-I՜Eoτ/聥3P.CiHQmP @Ϣmh ޣD_ bn|{5];̍:w|qxJC΢th|&$vFq]q|#;3rq4S+&k( HMr8a9l/O`=ƜE1(occv ͅ5%nb?o@ \ L>>%+#'iQIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/bc_on.png000066400000000000000000000010241211146647700244010ustar00rootroot00000000000000PNG  IHDR (VksRGBbKGD pHYs  tIME /1KجIDAT8픽KQ5ɫV(֡K+~"4R?@p ."8VTtPhi)D*A!g9xyν\׭퀫` ň{I>l' lCȆ PoLc|¨Ps]Hի(\,z收%?O+96"o:`Ϝ5ގ'u S&l(ʤ<4xu}r hrgpݍL}U/?}|׮DmmhI9"+UUfcbv;Fas4hD(vlbۇEU&YXIqҜD:*QU4=Ÿq8#U+<V033Gv[ͭ ʱjOuT<\.mkf E''MRJBmۿWžĺñ#d]hbr7UsX3bb|\M jXڞ%S/D"[-Jeg K vc՘ hzL‘0^/6XE slҁҞ%U<o+ sl%Kӳ$bAۅ^'X5,I)~Y.Ck4=k4YqҮ}InD5Ugb!XZڞcK+X}`E?L3ˑCjj$?O*[8k2bXF,#ˈe2bXF,#Vqb_Q4JW~S̽iiTI\N[}G^ڏOHZ\dz}߸F'lj QOnWr DC7ayfIV'+9+󅨵3ׅGݗY+rLNO>$I^"zܷ+XnJ6izIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_ffwd_on.png000066400000000000000000000010071211146647700256070ustar00rootroot00000000000000PNG  IHDR|]gAMA1_IDATx1hQzRytAp"78 Tcq(C頛ࠜCQ) ڂآS\ܜAZBpW%罜B>x?? _ۂA$l-sK%l  Lm֐Վ 哗ohG Y ? Gŋ HŎlm$76OhGBy~Z[G;<pje y]hmY\!N N!Nn>u Sg٧ku NyuDhlujȇ#Z1A2N?T*5&ܹq~Ђ{^X$JbWktnxkVcbۿj)Kg 2w̭-n]0<  ).8;]hC?~O9@/qIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_ffwd_over.png000066400000000000000000000010221211146647700261430ustar00rootroot00000000000000PNG  IHDR|]gAMA1_IDATxkA "z+x,{ E$`!{z ޼yۦTAB!xJǞ  &Tvgv71ӴF!|̛ofxxY87M`[Zo.zCT뭣1*{H;y8yo-Y>z\:RZ!dx\.wNb˚>Ai~LLr1@P:BR|@*UOVTVt^DZݏH8/6:[3ZBxE7->&ipSilq̩ɟ͏\83ޙ ﳯ sXY-SqLV(xv*j#FjlC;w(i5uf=uO7 _D_6 I~Q/ N_IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_loop_off.png000066400000000000000000000011051211146647700257670ustar00rootroot00000000000000PNG  IHDR|]gAMA1_IDATxkQ?,%` %,IFRD<F$S}Oɇ[܍7A,z_,L .RoB(a.< )% hLn )% nMCJIm 4q8ND"8 RKmOPߨjÜp8Zjs/@b˩3*L:9x@ ҁ>8 Kp|YptXŎ۽XQ >-_aocvFp$Н}(P0\J[ 05 SGC<6bji;ж~iXOwۑW_ J* IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_loop_over.png000066400000000000000000000011661211146647700261770ustar00rootroot00000000000000PNG  IHDR|]gAMA1_-IDATx?hawP*-ÁChE8;8(Pb-V!K+Or9|w5Ù4Mb1G *mF%b`<ch̯ЊFqv4ZaJ$̯WlKSm=U5[X֎ُP]f?e۶A*U%*U۶CsDuC75lnAyut0ns1 ,@R>3O I)Þ |t~ ~@#DbԷH)B4b1(Wќbtԣ/:]q3WG3|TbG}^vR.mk/.ЩBx(-dzz\C!N^#<GS@N)X̭ޝ :gC[DQ(_]ET%ôk1Ҏ9D|}g׾H?/GIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_metronome_off.png000066400000000000000000000006721211146647700270330ustar00rootroot00000000000000PNG  IHDR W~gAMA1_qIDATx;KA]OWl,ahJlF  *bJ Q tL!"2kt=pa K;!C(KDU(ZeD6ez@[SY=`4 <׉니J\8LLV7vd[h\S4i6[s^WB /stl!RJqc (K!d-ePW}O_mÎɟ+\ W%jrTuo" dL?;af:yYz@nxbq$Qqfl 4pqyZaHR "֦ IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_metronome_on.png000066400000000000000000000007121211146647700266700ustar00rootroot00000000000000PNG  IHDR W~gAMA1_IDATx1KAA#D(L)X-,l B8ZVZYD4B4D ^=s&y7vfD'XUx4S+&61F̔4ƻ>5qv @9>WB v^sg/7Kg]E L&||M\?|{ZJrt<+<\'hJf- ,ˢXU4%XE#NCct3W1xPGorvFps sHN~A/a&iT`[5h\ RVPl$S]QBK=åR)\ß薇t p"#qqw/:~3b0IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_metronome_over.png000066400000000000000000000007711211146647700272340ustar00rootroot00000000000000PNG  IHDR W~gAMA1_IDATx?Hq?9CJmDML- ]$NJtRqQ4J? *-Aq/ݝx.>}-@ /x._B锑 So0([)a\TrB?½wL:ٔ773m_x0sKċunL:QwoQG)L:޾# `(Wa6˫?FlADl aBMp!/cڂ#fC Mݽ)x{},OOSϋ=R]_ /c4 73#!*Q#m֖yo+*0 #/v@|bzJʫldyf;&979 B0э:a'B\&G ǾNlq9m-8yNȰ2f!RvR9M9:{][G:[SID%0aMUTsſMTVEUɋ64Up򕸔tf)\n.Lee̲,O~Y[XDwT5h/dde3h6\i01]Am `Nw`/JH;߱eQihq Eϫ~lpޣ;Fie>r_ 8*!5iC,Q\}A#&˜71ڐ>Er|],Zܣh5dUU),k`HyETDUUoEZ2,Yь9=4by-$e|fb}%ONcv8='m|[)+IZrs]5n/UN<^|#^ F4U&=DŽ$+ N +hZؠ%Ź xy``0A_~_A 7EN޾y `+`7?eb 6Q%h>}TPUszW:UUL]2 -x;*?D1/:'k,ntLrЁLq|}ZӘ9sXYi2]YF{d oWaWKܕG t%ݷrW%ѥ8My^>w!~̉aY2_o|B<ڟpI5bFto#usƒgjj6H=Ei;];;B3ܸzHo6!=G!_wqg1Q IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_play_off.png000066400000000000000000000007741211146647700257760ustar00rootroot00000000000000PNG  IHDRgAMA1_IDATxAK@ ,/QARhw!x+G'X<RK^ AeE vf Lˤ4^䅰h 0c=Mao0'gW! N[||Lh_!l*͋'0ϵټ^=R.`IkMEl]|E0h2dDqAO;a;zPi:NGB[Z-g/k}0.^mv)^Kh4[7+F;IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_play_on.png000066400000000000000000000011051211146647700256250ustar00rootroot00000000000000PNG  IHDRgAMA1_IDATxOhA. !P)Ճr\$bO79H"E"^RA0TZPoB7MDRbƅ0ugDÛ7v)OLK  ȗ$!tU]Ƌ7"×f(~f^wR+ 6ғ}I\~_`|m{O 3%aph<ϰVsㅴ:十wfP>|?4Sl?XC, Q[r]~`X:)?\ 9;5 Wa5=o8X=wVp^쩃p7OItsF1ڠRj^OwD`.:P_ZO,2ǡQD9I54n=Z~z$"۝gJHBqA`w[A@*y@R1b܌ I_qrBu/sSc;" }}9 IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_play_over.png000066400000000000000000000011011211146647700261600ustar00rootroot00000000000000PNG  IHDRgAMA1_IDATxkA z+xxnSٓ4*? x)x*9z"TEV+P@ = h%flf VE[#/'1]Ó8b䔯p\q*ay 쓸/_ |}DH6ʛ zG>gu)XOzu˗.6*>vZ_'.N=jй )gծpp%vD,>zAWcRR V?G= ux\/ V6%faIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_rec_on.png000066400000000000000000000007041211146647700254350ustar00rootroot00000000000000PNG  IHDR ZksRGBbKGD pHYs  tIME ^0DIDAT8˵KBQ?ܔpfA¡M ѥ5tա?Cp3]P@Omx=W|sϹBXBX i eY\ǾEGTUUKߚB̗d*&Ip4ɍzm!:mxq8/yN7t*MB^[M"M? Y$k!=ΝD\ED r5)f}8_EK4)]仦T\ȕ|׹nڿӓCWӧ79Fߓ0ޖIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_rec_over.png000066400000000000000000000007161211146647700257770ustar00rootroot00000000000000PNG  IHDR ZksRGBbKGD pHYs  tIME 3:NIDAT8˵JBA?VѸ?A@P]}n"ںov*t0B2Žg-4W8sf2V,3V=u󖃝 xĤYFR[|(5,tR(-"T*|qo8*{,;j@B;>9q5RQ)\*jyq&* "SV״JRSK^2EtDd*۹V嵼+Zh`FitSjqnʢQ(30Z;FOJlmfߋ3XW&.??:pټx h'X2~IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_recdel_off.png000066400000000000000000000007121211146647700262570ustar00rootroot00000000000000PNG  IHDR ZksRGBbKGD pHYs  tIME $M>ġJIDAT8˵KQ[KE>@:l<DN w$7^2([E[ID k Zo|<LD(h?Y0.M,~ٶjP)%RʾCB ,ȤeDy[M"CӞ#T7 Ku۟PgUOH&`W³Xi[ӣ&֨̄۶6z'p|@0Evܕ6kiq%1V2渠UπIηv)| >G;B*ܼ{ X .__}nm֞KAi`=IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_recdel_on.png000066400000000000000000000007351211146647700261260ustar00rootroot00000000000000PNG  IHDR ZksRGBbKGD pHYs  tIME $q]IDAT8c@5le񟑁qS?2P vgq20000,XbCb`1_dfL  2`o2T3:q3T30߿S-/;P-?`&i/rhȡu Gf.p}9U( &p> X\*zz}>w&Uc`}&N6f0 c y&X0JDCnpm+Xգ{lTgX3 ?l\ ̃Lax/U=JDq30=^3l+^*tj%}0u>AR 8]AC` IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_recdel_over.png000066400000000000000000000007511211146647700264630ustar00rootroot00000000000000PNG  IHDR ZksRGBbKGD pHYs  tIME ##T̖EiIDAT8˵?(a?98(YH f6Hb0X&- tAXCJ罟ᗻޠ㩧ާS/=V YX}v`m_S_[Mqrz@^P0}pCP5JQXĿDYldW//ӨPبMT +G3u^(+[`S^^QuKdk;NaЋq*iAD\~!f}USίTZ  qz+Dĕ7-xF-* uEz6xXh_))ۢ-xb;3Eg된Ex(;>* pe|IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_rwd_off.png000066400000000000000000000007501211146647700256170ustar00rootroot00000000000000PNG  IHDR|]gAMA1_IDATxK@ {A!CO=ܞ=HY.V Ct&"zk%2'@`zHf̼ސ757a?ņԵ9;a{iLq4~MADYGD|lu3ieݛՓ ΝYYѠn?r|v<\]WJJ]r˫_/9'7+[`0zuV&4-!G_YDj* 2{LN#?*D-L|Y#{4TjC2p^ IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_rwd_on.png000066400000000000000000000007771211146647700254720ustar00rootroot00000000000000PNG  IHDR|]gAMA1_IDATx1HQ<\OQ!Blb@ R'cRA\Dkvj./ y$&?w?@Q Y$,H:Ht G2 \f10YհA a CY O#j17.s#\3dȅ0+F7`34C#O~v*T,yu\rn>,q##XH(ַn<3zW=O(S.M:v h^N)u@\j~3 D|2D<{ś'q+:Dkm&I[:cD]DbH$7I{$ /5F0[/|o_8sqB}$fW/K5GDFC}/ڳK0zHZ[J%+ EN{+wo ?|;4rm4^^x 7IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_set_play_off.png000066400000000000000000000007351211146647700266460ustar00rootroot00000000000000PNG  IHDR v4AsRGBbKGD pHYs KtIME ,hR6]IDAT(ϕM(2cd-K@18(7Rv\Ra'RqIb##/yc?I L$# " R/0%fpI  >pqFt͟bj&hbȎG-E(˶Gq 01a361 lb 9P50`;fffiO6U<x.* $9QO.IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showDrumkitManager_off.png000066400000000000000000000003741211146647700306400ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  ~(IDAT8ձ 1 _Y| -q8GаՁ\'ݝMDZI gEk- 6HUHUP{df;TCDd\Bf6zaR(<>G)e;G񻢱sIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showDrumkitManager_on.png000066400000000000000000000004611211146647700304770ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  4$IDAT8˽1@Eq.!VRZC,<2^N`m,)(b<$L2Yfy7NUUHT$`e]Ѓԍ(0оe@p[D맮qDV] )Y!u_T"(W(N 8]hD(IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showDrumkitManager_over.png000066400000000000000000000004621211146647700310370ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  EpIDAT81 @?.(imS <BF;] W }7 KU7p=U ͉dGVr:qm]y9xAft.P^>BtupKb\DC@$N0'H *߉T}w&2vD"DYZv ][^.}GOvx|gIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showInstrumentEditor_off.png000066400000000000000000000003741211146647700312450ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  ~(IDAT8ձ 1 _Y| -q8GаՁ\'ݝMDZI gEk- 6HUHUP{df;TCDd\Bf6zaR(<>G)e;G񻢱sIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showInstrumentEditor_on.png000066400000000000000000000004611211146647700311040ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  4$IDAT8˽1@Eq.!VRZC,<2^N`m,)(b<$L2Yfy7NUUHT$`e]Ѓԍ(0оe@p[D맮qDV] )Y!u_T"(W(N 8]hD(IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showInstrumentEditor_over.png000066400000000000000000000004621211146647700314440ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  EpIDAT81 @?.(imS <BF;] W }7 KU7p=U ͉dGVr:qm]y9xAft.P^>BtupKb\DC@$N0'H *߉T}w&2vD"DYZv ][^.}GOvx|gIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showMixer_off.png000066400000000000000000000003741211146647700270120ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  ~(IDAT8ձ 1 _Y| -q8GаՁ\'ݝMDZI gEk- 6HUHUP{df;TCDd\Bf6zaR(<>G)e;G񻢱sIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showMixer_on.png000066400000000000000000000004611211146647700266510ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  4$IDAT8˽1@Eq.!VRZC,<2^N`m,)(b<$L2Yfy7NUUHT$`e]Ѓԍ(0оe@p[D맮qDV] )Y!u_T"(W(N 8]hD(IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showMixer_over.png000066400000000000000000000004621211146647700272110ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  EpIDAT81 @?.(imS <BF;] W }7 KU7p=U ͉dGVr:qm]y9xAft.P^>BtupKb\DC@$N0'H *߉T}w&2vD"DYZv ][^.}GOvx|gIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showPatternEditor_off.png000066400000000000000000000003741211146647700305120ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  ~(IDAT8ձ 1 _Y| -q8GаՁ\'ݝMDZI gEk- 6HUHUP{df;TCDd\Bf6zaR(<>G)e;G񻢱sIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showPatternEditor_on.png000066400000000000000000000004611211146647700303510ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  4$IDAT8˽1@Eq.!VRZC,<2^N`m,)(b<$L2Yfy7NUUHT$`e]Ѓԍ(0оe@p[D맮qDV] )Y!u_T"(W(N 8]hD(IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showPatternEditor_over.png000066400000000000000000000004621211146647700307110ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  EpIDAT81 @?.(imS <BF;] W }7 KU7p=U ͉dGVr:qm]y9xAft.P^>BtupKb\DC@$N0'H *߉T}w&2vD"DYZv ][^.}GOvx|gIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showSongEditor_off.png000066400000000000000000000003741211146647700300030ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  ~(IDAT8ձ 1 _Y| -q8GаՁ\'ݝMDZI gEk- 6HUHUP{df;TCDd\Bf6zaR(<>G)e;G񻢱sIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showSongEditor_on.png000066400000000000000000000004611211146647700276420ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  4$IDAT8˽1@Eq.!VRZC,<2^N`m,)(b<$L2Yfy7NUUHT$`e]Ѓԍ(0оe@p[D맮qDV] )Y!u_T"(W(N 8]hD(IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_showSongEditor_over.png000066400000000000000000000004621211146647700302020ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  EpIDAT81 @?.(imS <BF;] W }7 KU7p=U ͉dGVr:qm]y9xAft.P^>BtupKb\DC@$N0'H *߉T}w&2vD"DYZv ][^.}GOvx|gIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_stop_off.png000066400000000000000000000006051211146647700260070ustar00rootroot00000000000000PNG  IHDR|]gAMA1_ ei_ͺ4V˜I{/ό&a.iIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/btn_stop_on.png000066400000000000000000000005621211146647700256530ustar00rootroot00000000000000PNG  IHDR|]gAMA1_)IDATx0M:!Xށ7b!x4 3BhĶ?݀$KNOOno/a Y]Q e V~GҔ&y$\x-W 9zjD7fcºzc_ Z n]E(K%Ikn*AxIn _hFhc ]# Ϯ/R,x*"}tVi砃MZߵ]`ϦRr%?ԯB:r2&tHΐә閔uM]fzүZ Mkqz{3Am`%Kq:: ?G4:aȖӏoIZR"m8Tl; ۼVJ C[تRytu2 IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/cpuLoad_back.png000066400000000000000000000003741211146647700256770ustar00rootroot00000000000000PNG  IHDR\/gAMA1_IDATxclhꕋ QC2cU @#ШL phT@rM K-GkiAB|FO4Ў @4N_qz5j5 yaϡB2ò&L`0i`E2]l\zUIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/cpuLoad_leds.png000066400000000000000000000005751211146647700257310ustar00rootroot00000000000000PNG  IHDR\/gAMA1_4IDATx1N@D8ELrt H+ڒ qEECM:$sc",r"2x|}sb@ܸѷcR  J``"fE_Խ^zVZ8[H)M/~>x& |U/τd˗k&_*?瞜IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/icn_metronome_off.png000066400000000000000000000002731211146647700270160ustar00rootroot00000000000000PNG  IHDR wgAMA1_rIDATx D) ߃  h}ެJ){iu$ڇoRO+gѡaꦁ4[2'e]+x n]#d&FM¥NTʚҫN.c@NVJ.Z:]fVy#gDj y4im(Z.:;x$o?كLͲYTL$ŭ"CcdYHSbb&48 i ӍQ;0/.zDJ 8tSq|tFN1z+\-mO!9.:\ٰ27C'+cm۞/s!1!J>\ُ{cB\?a >xs+#p4Xq6EE="ޘ%JïEYn?^UJzIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/jackTransportBtn_off.png000066400000000000000000000016151211146647700274520ustar00rootroot00000000000000PNG  IHDR- =sRGBbKGD pHYs  tIME:x\{ IDATHՖOU?w|II%j45&n %JON'y*9űgv0ɉ$'%'QKEa9EUQDBD-"@޲Aev=AHvs_/S*GR,^F$^d|"!~ 333~0DW|a> Ic2퀜X ٽku OkW`nv#G?Ô>@{AΝ*Q_c En":1iUo;: F<Jff@k3」O=MWw}78twtw7ϷØtS qqiZ:ښy>]hȁֽ|qR+X֭+AUa}UO?^gbb4/+J˯q O݁n@zfe,i-\>?nhnwʆ|rbq@JQ*z4 na/;L$se9߽taN;\=1f |&-;+*f;K"jTN IA]_ ,U>qdm|ȉHɪר,iD1,t4晌@kför0./l䕢) ˂nDc qH_wxa!%czyr &>!,d?lQ+3bjn ) Dz[\W rDܹ0b }+eڇn0A ! IV1j|~ud IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/jackTransportBtn_over.png000066400000000000000000000016521211146647700276540ustar00rootroot00000000000000PNG  IHDR- =sRGBbKGD pHYs  tIMEgCƜ*IDATHՖ_hU?1sd좋. CJ{ǔ0!2h)"(.tB-II"UW]Uy<nj|Ra: r ˭N:-N%ֲM>캒aEkw˼7tWlZüyeazj5ld-1~ǘӒTQ=`20ej aVl&(8M&߱E&KXp }/ŻG_BocyqF6m?$}_:_$F[/uOv=K_o'%x~['_=Duҵ"߳0 8S,r\*Lʶl˧O`߄<޲(X39݇-ӗJQ?t|nL]>>z rΪYիk Vr'y|JVdOW<7]wbOfIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/lcd_background.png000066400000000000000000000005421211146647700262660ustar00rootroot00000000000000PNG  IHDR+nV'sRGBbKGD pHYs  tIME(1IDATx1UNOJHd2,` @D07Kꁑ}{o˰kz${ugk@˲d tGIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/metronome_off.png000066400000000000000000000002211211146647700261560ustar00rootroot00000000000000PNG  IHDRUC|;gAMA1_HIDATxcd``@$`bRM f 4 ZF !XD-q(Ua)0ԡL%mI LiIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/metronome_up.png000066400000000000000000000002331211146647700260330ustar00rootroot00000000000000PNG  IHDRUC|;gAMA1_RIDATxcd``@$`$IVL QL-Up,@;X0dʨa_XJ; 4u!C ĻSIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/midiActivity_back.png000066400000000000000000000007771211146647700267560ustar00rootroot00000000000000PNG  IHDR: RgAMA1_IDATx;KC1IcۥTDP1P\ts !CEgGw-~AB#dqЄ{mrȓs*z R8|= hDͭ B6l"kka{gNmG""0ϒDifkتF !z½Ǎs%NlT* a`-}Aͭ*vwpŽ6q.~<d߻R1Hh:-jaJ)A)T_E5X`gn}1l7%LLa:  kR9?\.J|>o< d20co"H)Vv6rX7qqo\$8<֨N 6H)>c}S/C$I}y8nH[pɸdT*A~kAj̧&}Am*^F^dy%jUCD9UM@Ǝ1>;#l@_.E dl˸~Lݹ'Ltwv_wL{}D/WڌpP-\NgfHUqt2|qʑQ1xxԟ Xs(rI/>d*n>Z}>{/deK)IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/onoff.png000066400000000000000000000013211211146647700244300ustar00rootroot00000000000000PNG  IHDR+jsRGBbKGD pHYs  tIME'$r38QIDATHT_HSQs/\QZ>lж%4ZC=AE[=lJԃ/9P+b9_{ {]aAs~|$;57X "&f0 Q TB$PI86V[aLvþs7paNW#-;5v3'dl;KEJyzxGL<-[,q" Be~{;s,I>@{%{dY(Psשv-m{yV'zf lwdC1Hev~:y|-dY LA(Z&#YY\cيKXYJ^ 0& h40B Lcl~fjhϫa p>zusRGBbKGD pHYs  tIME&"ttEXtCommentCreated with GIMPW1IDATHTJ@=wzbtQT,I~M4|m  D٬,Ù<Μ;YnCzgW:R+b|A4 cf':@$ȋ8uѰiz纼Oۦm=.u@4R UU! d٘"`fc`veY( cuՏ""}wM`QY3ebû/12tq>{APj~}Mi p ^[Y_Ob>?o1, r'<ѳIENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/playlist_background_Control.png000066400000000000000000000022001211146647700310560ustar00rootroot00000000000000PNG  IHDRw (sRGBbKGD pHYs  tIME 4 $>IDAThZKo@[8*=D k Q)DAʉP^BQ4)zzqPB)m9Y?63;G F[kߛ%[AXYd@;g&g~;ؕӑ])Дo^L PiVEܴv>w`y +0smyUbxa`6`Y47=+Pik- ݈'jP/-_k-ljL62< u bf:T-~CSC|\vZpCWa]5+*Tg4M{,0 \0W4"уk/1Z :Vr ! \"uäS<<#j:u]/`b wTU4]9k꺎J}sRtٜ}6Zfkr:goNMiU7wf;ԫ3WgP,ž 07Axkynn/w\v. 7 nĴ0 \.X)2E! Ou4]"Ì\[=""=9} .(k MxA%2!X߱tq^e\DV2Zsee鶊XoB$B\6.U5s8EQk|$l4]"râ(vh:=z,dYN_\zV(x71l'DQt9;E1Դ޹}571֚GSt9di_u 7O֚m]{r6Եh.piz*1)K8\,.naU$j15_ +Jcܿ.p)Xf4W޼Rq|:D0y$ ;O[y:MZ`|^:-KJv~ !R l5A&'^Z^99}r>S8] I$i:.e٠j#88  :tO}0AH՛\\ϟFi߸\G֍?L #Lիgr]MOo_6Zko?SZkII)RjŅBkoZBA"RjťRXkŮ4g?Kޙ<МP}b{*IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/rubber_on.png000066400000000000000000000011611211146647700253000ustar00rootroot00000000000000PNG  IHDR %]sRGBbKGD pHYs  tIME # ZIDAT8˕kSAGϝ%15Ј BX B"Z4 TDж  F3FA#D" Rl]؊jLؙT8̽ҹ%owfbQETfQ'cS|F66&$ -0vQ" 4`k`,ւP`F)A ,R *Д b;pt8 b8T2NW(r{=C1^!Dۋg}bPwsz+I`)x}7OZYY7_XOP bt Rm|}·+К<Ѕ߳}2IĽ׹$S)QX@sRGBbKGD pHYs  tIME)#=XItEXtCommentCreated with GIMPW4IDATH핱N@!gMwVы }憆g1L'kpl\dų`w7;|Bcz>au]kPDeVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/9%bKGD pHYs  tIMErIDATH=@lZq$`E8YlH[* #1 }$̫|CqtD0Gy!z0ϒy~,287GEŮ tD )בk1/׋a/@ʪqRhf#^h'\wGa\/g;TwA}@IENDB`hydrogen-0.9.6-beta3/data/img/gray/playerControlPanel/statusLED_on.png000066400000000000000000000056411211146647700256760ustar00rootroot00000000000000PNG  IHDRD Պ CiCCPICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/9%bKGD pHYs  tIME ;<xIDATHclh*A^ŀxx#0  4SW00 bU-Ù^7QR7A n1l+U$p6C~DДwӏ!ןpQ#ݚ( #  #00̿wf``f8vn,çll ߿NJ>ŰT}d$KQ;IENDB`hydrogen-0.9.6-beta3/data/img/gray/preferencesDialog/000077500000000000000000000000001211146647700224225ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/preferencesDialog/rec.png000066400000000000000000000003111211146647700236740ustar00rootroot00000000000000PNG  IHDR sRGB pHYs  tIME% tEXtCommentCreated with GIMPW6IDAT8c`0|]LFR #PFR #d(pHX$*" `IIENDB`hydrogen-0.9.6-beta3/data/img/gray/skin_btn_off.png000066400000000000000000000055131211146647700221540ustar00rootroot00000000000000PNG  IHDRÍ CiCCPICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/9%bKGD pHYs  tIMEH>%IDAT8ձ 1 _Y| -q8GаՁ\'ݝMDZI gEk- 6HUHUP{df;TCDd\Bf6zaR(<>G)e;G񻢱sIENDB`hydrogen-0.9.6-beta3/data/img/gray/skin_btn_on.png000066400000000000000000000004611211146647700220130ustar00rootroot00000000000000PNG  IHDRÍ bKGD pHYs  tIME  4$IDAT8˽1@Eq.!VRZC,<2^N`m,)(b<$L2Yfy7NUUHT$`e]Ѓԍ(0оe@p[D맮qDV] )Y!u_T"(W(N 8]hD(IENDB`hydrogen-0.9.6-beta3/data/img/gray/skin_btn_over.png000066400000000000000000000056011211146647700223530ustar00rootroot00000000000000PNG  IHDRÍ CiCCPICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/9%bKGD pHYs  tIME3@GIDAT81 @?.(imS <BF;] W }7 KU7p=U ͉dGVr:qm]y9xAft.P^>BtupKb\DC@$N0'H *߉T}w&2vD"DYZv ][^.}GOvx|gIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/000077500000000000000000000000001211146647700211165ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/songEditor/bg_topPanel.png000066400000000000000000000041601211146647700240570ustar00rootroot00000000000000PNG  IHDR1sRGBbKGD pHYs  tIME  WpIDATx\klUvwvbʣVy_@BJD h TAy$ZmѦh0DQQL@b%E,ct^;%̽sν{wcμ%?΁@xqC/[8rsč.t<ŸpQqF߅j@nv4CKL:w6 HGl-_ 18~|k[sK,Z2琕q-X?ӐQAq#Nx[m!KrrẴ (gYZ[6E"X˲.n\r9qN,Z m,7\^Tg_i8T} _F% !*|>|DGǿņ˱'/]UKn*’e+anttkA#y2B/DXN)-t!=K[*di6tTP ظPBK\yҳmg}^>AA1 i ܻ@Bk C5io<"F7wkz4i+7oA{BA 8s-d4hAk:XvK,Tt 5ct ttƢWP QP L׶Ԑ&44axnHK&DO 0.LoDPGWWWD9.`X׮׿ck-x@49mkKvYCI!p92ǎ~ΫWPR.$ƍ@a$ 8zқ>1.!W'pg{T?֝U V^?uX ;`uw6FUԄT)r5v|ZX"?%7O.g4}𶢭=SGĜW+֗ceݞ>Q3BDԼ׷)Ӧ+{./ӃZrZ#:RꣵϜzԖe3_y#3q=h0 |aڅyxuNLrW##GKLO[&=9O*4~'Y#5L~e%|Ejm}>N?!˼ɪt̎pH͏1s%c$I]vGKD@ۃ8eb<[VR_^hUl̛ {H|r*{9f#ᅦfR#t֡ idɶ4&^نM̟ژ/-2$Bbhtk4B͋h"Dxdu}4ˤt2-V<*"Ln?N |4p폀+\EG{+~s_x MEX1Ic/`8Np`>_ <.^1ހdrƵyq,._oC%a<"'wnp5{><fQ?ZQfIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_bpm_off.png000066400000000000000000000007721211146647700241050ustar00rootroot00000000000000PNG  IHDR6 sRGBbKGD pHYs  tIME :yfzIDATHݖ=HBao.$S98C#ADYAPCKcPCBSSRPAJD-f]w tK"Bq|p~/r+V raD;9#^I& cV@M%ـ,#rQBz^_3[~>3s+ֹH\]Yg/+X·@$$DãKo /_^ [T)Dwŷgy$1+WU۾h i'glD 4Y4KLvd2iƂ>GVs`k{ J5wMe1W|-$fu5ëfSv,Jtad2e, oIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_bpm_on.png000066400000000000000000000010311211146647700237340ustar00rootroot00000000000000PNG  IHDR6 sRGBbKGD pHYs  tIMEIDATHݖ+a?vFVmBZH`X96^ $Z@;+"$]3aWͷ{M*Ԫ Zp$IALLP ] a"DQU6G&BHfmx `05B|wjfN/{ io V=%VUΏyh}ʃ ] ꂍY7=l4(eUd]˪b`0R1K~6]if!qeYl6td^R/`f#HeC%6KV[q:$n}߯b.<>&"&(O󃵱u*ye''8/ÔR`fGL.#+͎ڏ$'P,B.j5ٴIˋ!ل @67a}j(*{zcbCjpsƠ:71`u: .no'z>iP}=rnP,/w4!B^_^9x{5EP1e+#J%^^Xg i\֚ՂV+K!)WVlJ ~("vp*_jnl'- IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_clear_over.png000066400000000000000000000013341211146647700246110ustar00rootroot00000000000000PNG  IHDR6 %gAMA1_IDATxՖOHq?3-D<$Rkaݓ"u$<( RaK%nFf !E+%r~c0,R_{{o+@"Q$pHeb(g Sw8˿xRj/ѻmcIdKd5hI64œ44œihy-'uq1/ۘ a&c#ݸS931$$&*@jeUS1[7j8ʇ{9TPs-{ʻro'^M1/}EJ̪83)0̤}̤5=eIq|E(J!j#14S!zvI !nݡ)'^6Wn*YD*U3 1vC a:-°WH0oUq8Ff- `CnT#iIUrO_GWZcR)5&IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_down_off.png000066400000000000000000000005721211146647700242740ustar00rootroot00000000000000PNG  IHDR IgAMA1_1IDATx=KA/Ho; !+TbX6UlEZ"pUP! K􁁝w7<<88<"KjGXk!o0abZ5L$,,-$ _weXkDFF@^j"2r:>4ѿ1tT0 0opΕsUEU1*A'8.TmY%-ZKZ|~1uUF1:7/E$;y. 7squX^LUR4Oo>1f!~~ 3b&&XpIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_down_on.png000066400000000000000000000006311211146647700241320ustar00rootroot00000000000000PNG  IHDR IgAMA1_PIDATx?KA\FUK;;?AJAOB.`!e0QS#1$c\/#XKr{003̾} `W3al~N6oPn``(,MjT*@{"srE}HTZ62iALZbkLlhYLIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_followPH_off.png000066400000000000000000000004001211146647700250450ustar00rootroot00000000000000PNG  IHDR ZkbKGD pHYs  tIME ,5IDAT8唱 P EO:A`8gb CH Mϼn "]w[zzb\P7G)& uwܽ:2*3̊#c:c.PC% / ܫ7i); IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_followPH_on.png000066400000000000000000000004521211146647700247160ustar00rootroot00000000000000PNG  IHDR ZkbKGD pHYs  tIME #dpcIDAT8˵@ @,3,hBg W_1CҤiK_ڔ( yQpÍ,˨1!֚f }4PAUJ>$Q?tE,>qPTx2V`4UM( `Q#pS;]t;3on^(Z! )IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_followPH_over.png000066400000000000000000000004521211146647700252550ustar00rootroot00000000000000PNG  IHDR ZkbKGD pHYs  tIME ۠uIDAT8˵= 1w1v""4^~CyO!h"$3"S=|3d{U݄ÍlBjWv `5~=r СV T}2ڶUUh2('HT\T "hP'ufH*QR.ORqC@RF㗣<;%x`>dӚkK}' -IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_minus_off.png000066400000000000000000000004251211146647700244550ustar00rootroot00000000000000PNG  IHDR KU'sRGBbKGD pHYs  tIME 0IDAT(͓1 @Et{$``~-J" ꬅyд]i<+̹\o,3@]))e%1"@UQUs:AĮ7frߙm&f!RJ2}7_ŀ$~]IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_minus_on.png000066400000000000000000000004661211146647700243240ustar00rootroot00000000000000PNG  IHDR KU'sRGBbKGD pHYs  tIME -IDAT(ϭ-@F_)h* +`818U7 Ѵ,?iH;dF̼|&CfhIiУLYF@)j64]*(&BY]aDJ?ʖq9feQFg@m˳PV9`I 9lz56GTP* JLIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_minus_over.png000066400000000000000000000005341211146647700246570ustar00rootroot00000000000000PNG  IHDR KU'sRGBbKGD pHYs  tIME 3xBzIDAT(ϭjB1?]7pv|ggǎ}.]tqPsoMKk h9ICt{xzt=sMZ&4ŊѠMQ}0^hgnR3k-&t븯k.0XK8ߺ,S;+pLxuv}V3K zfV ɫoV_BR;KN`1_L'7%KvXIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_mode_off.png000066400000000000000000000004621211146647700242470ustar00rootroot00000000000000PNG  IHDR N>sRGBbKGD pHYs  tIME ),ZIDAT(ϭ! P'c aaa2 &d&ѢD`3LX4n1 k`r'ޣy(ouڊ ?Q mV`Z u6.y11_VjRSJ46k5j}v%NA塚h66CUehkZ+_T>\z IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_mode_on.png000066400000000000000000000004041211146647700241050ustar00rootroot00000000000000PNG  IHDR N>sRGBbKGD pHYs  tIME /mIDAT(Ͻ P EOЭ'?I:wt]daJd~t <45 vaVTfŃTe-wGDʍ2]sqhRJCƯuj)GIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_mode_over.png000066400000000000000000000005751211146647700244550ustar00rootroot00000000000000PNG  IHDR N>sRGBbKGD pHYs  tIME %8#(IDAT(ϭӻJAc`go!AB_gQ|)2 h#Y$ffw\v-&:z`ڟo7 /F|&cHQz 23x0`EeݭRӋr+k'cqK>R D;p*҈LEÞ(Ӊrɔm _P=<b'jRQ^H&.Ԏn Ӥ2Gnm=%[H6IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_new_off.png000066400000000000000000000006541211146647700241170ustar00rootroot00000000000000PNG  IHDR 9k_.Fya2l9痷ݷ `?<>syA<ԡ$ϧѢY2rraXNEH"ClAϤ7cxosU+ev689 ::t~Z؎Wᛦ}Q \tZW14]~HY؜o~(j5ܰh7^?V֋z IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_new_on.png000066400000000000000000000006711211146647700237600ustar00rootroot00000000000000PNG  IHDR Ě$  wLmDo$"{SE |kh{ż㩤@++GQ*xv-(p.m7@(VTuL~I[>)qij.Dbo:kۦN0CȤ>DՅ ބ7 UQ|l64Mr#NˏV8c.=hO1ޞ тF^`h|\Xt/ {s0#J_SvqZ0>X}a:7 t7*?IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_new_over.png000066400000000000000000000007601211146647700243160ustar00rootroot00000000000000PNG  IHDR ooy`l]tWC fga.i7TuA> `#@o&#ͅVvBΓmu/TgJN˛nj<|Hb7COh70 ۼ`5 t­pT~OwckݒT.v,Zni=%f nEjp?fh6|Ea8 _h_}'GIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_select_off.png000066400000000000000000000005341211146647700246020ustar00rootroot00000000000000PNG  IHDR IgAMA1_IDATxJ@Fτ b^ RXX.R[V>64 €#H"2I3v& j9nDrs&1'g*pD-~[EAĤILQ8% !Ƙ_"{1r߇Y |6(Ե;oZ=B/ϹtBNohNb>͍hoF[54aުF4ԩUDo%ECheY|>-z֚0 ( oIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_select_on.png000066400000000000000000000005661211146647700244510ustar00rootroot00000000000000PNG  IHDR IgAMA1_-IDATxJ@kB@> Nn>;:9n\tM)"bĎKrr5CZLJ%\܏M Xц#`o, w<6L8"{rgl4M;G>\YF2'Ksv@ZW,IN IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_select_over.png000066400000000000000000000006151211146647700250030ustar00rootroot00000000000000PNG  IHDR IgAMA1_DIDATxAKA]6Q7!c;_:x҃ ђ`κ;v،`f{>f>6# "{)?o, :+<ͤ9>)o!FuI6&ISw%]ܼ0 ={+xnl?O4-h?2'گOءTXW%ꣵQZ{0H)i{O hy]<g>ʚ>aGL: rgVʎZcg3O%L1 f%r!i SS>3EJgI:,)~_Ŗ ,k'(| d_iIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_up_off.png000066400000000000000000000006311211146647700237450ustar00rootroot00000000000000PNG  IHDR IgAMA1_PIDATxKa?wn(KАC`P$N6ESGS8A-IB aKі\!8/<(m{0P7ZvR;lZB-sIjˎKz%J(~vbue/nl:d.a놯(&iT2T)ߑR"$[I  _(9h"FJiCԝҽfqRnXAkw au>]8es(evx|&8_ߨ\i`hrFVH$룇 @/1"IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/btn_up_on.png000066400000000000000000000006771211146647700236210ustar00rootroot00000000000000PNG  IHDR IgAMA1_vIDATx=H@kDt+-t8vNv\'qspp"(. : .?X1t&4* ݽ CrvqZo49X>LaarWe[DWsv YTu4`VH]שizM}D\yT_r)At 19i2@46*NGgnJۼ-wT}$֯{ulRv=^TsAݎMI܊/^Xe01 WPsL?od~9 ,ę_b(ӮA|aN9 ?dY;^*IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/playingPattern_off.png000066400000000000000000000003051211146647700254550ustar00rootroot00000000000000PNG  IHDR r|bKGD pHYs  ~tIME ,O RIDAT(c`;6gis%F-?LXĒYTM Qldc N4/+%(MpiiYVJP4)1UmU?IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/playingPattern_on.png000066400000000000000000000002511211146647700253170ustar00rootroot00000000000000PNG  IHDR r|bKGD pHYs  ~tIME!X6IDAT(c`🁁a)9300%GI]KjZOs?zs7@wIENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/songEditorLabelABG.png000066400000000000000000000003731211146647700252160ustar00rootroot00000000000000PNG  IHDRbKGDC pHYs  tIME *'IDATh!PDс`] 7TMu[ !@R?=;uos:_VZE I۶Zs?,IciV%`@@ @@ @@ޯv)Ә,IJi$/=$IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/songEditorLabelBG.png000066400000000000000000000004171211146647700251140ustar00rootroot00000000000000PNG  IHDRbKGDC pHYs  tIME DVIDATh= 1F/2[.cv"kp"BDAls.!?eَ&u_$w*b2.i!3qn@i_)b*08;A!@@ <!_ :@ZI;"Ok`IENDB`hydrogen-0.9.6-beta3/data/img/gray/songEditor/songEditorLabelSBG.png000066400000000000000000000004011211146647700252300ustar00rootroot00000000000000PNG  IHDRbKGDC pHYs  tIME *)IDAThڱ Pq7v2`W!#h?{v(Z>uHIjAx |\Χ,ef (@@ <&5ɴ^q$o܅w٦IENDB`hydrogen-0.9.6-beta3/data/img/gray/splash/000077500000000000000000000000001211146647700202735ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/img/gray/splash/splash.png000066400000000000000000002310461211146647700223010ustar00rootroot00000000000000PNG  IHDR, pHYs  tIME $Zn IDATxYeu%o1#2#"2++3k YA,SK)6)QInܶl ڿ[a %ѶIl)Q,"EVee Y9gd x{}=6 2#p{ï~_?Wï?NcT Te qOU=῜S^K{o~$_Rr6Jd$|bC x#HN7=O~Ov΋ypE#3Yd\#Iy@BU+Rv!f.[窭s+uY\'{kw`+ kה?'w)WV$d{y#&ko6j(ku榘 wH/r攘k_~ ߐOcf'>Nm8hr{5)Csxs*ALqli88?fc]4C$ L+ I7'1%}\T86&ڣ&g/"V8iLq͏2|ͶR-hp?Hf34BP8vbX 'MYF!k/u ]A<_Ht}UL yx^]Eapjлp'iqS $b 5Q]0ABE_*C}yj3 Yɢ#,y߁P,:攓!qM{~YUO^xFX@mg>n[.ܮC7(Nl" ߩb8,7 PxeSjM" ZfG^t6)ZA)G$ ~Md]W@6uº+i .b|z; ''GXȀ5FU$#0QN)G"ۭ݁)OJQn$͈K6y, @(TlU"Eh+͛(B@^N1}DO!$ND*Mpx~E%AL"Jd,TXaTh4T MNm >i T՛Mݡmy촎S:uj7SEk+2 TK5Z y1+"|6 (qeʉSB [wrn'6q0( bD띧A$5QMɴ^jJ({cب h>#!"ndZ*bld#n7*pNA\cSŶ:m { P0e YrHK3y@"ҊB6A%[ Q8ܬGv뜼]N$E,LXB@2Knt(X\;V"ag f/MqWMdp&w=2r,PF%niR"DLjh&pU?adS, "KNϚVT8FB/m#%xRJy;Hq:YkfE8vq8 δ1ZsܐgqG%K"=H r#>}~jQٮb$ n+yS~oU؟6jF~.OhoK5`a4!0ntyHȑE*ן(+ÔT_l4Hp)e\ZFs i:yNAA-E$d%o;W^+Ѩe/@Wz lPX$(rmfanwsS!bp)&#1͍nWPW*IRGs1hp?Z`WS݈Ɉ%=HGd25Jt\ﳭS$j'BĠ b)0#1T]*#6Mq"q$jC84p"APghV9r@y$\W\jK|pBH[G'*G3(`*OGb:'r{>QT݊8Iid Nt-i) Yk(rᆛ !$BE_q9[r*[jy|v'vT?'|T(AݎL50`L|=պ|QI;d* r<4 no,* $=%"p֓"'"&,s4E<:(6gka A/8*K!!X j⿢\+ ]d jJȔ> hzQGE3q CP7sOCL/Q$EUFZǛ[a9F᫥94 6U}6_m܈m2#xݓkyLvqE.HM5xaf )ԖuP:[|q^421 ̍\jdm1꩹BtL7V1R ?CT z"s. |jAq<*fP'vr s) ⏇(PT mO9\@}Uj )jE!P>LG 4*q$$Q"w&VXّ[i=)щ*L;IЋezj feUj|m+YE.>zeY@5h$9R@BB*F~Jo%ka(S'{[mӁ>ȣ ?$Qz5BIRi?yaݕ UiRBz. gA)1r l*h|wσl&ghS=J{  Kli(9I,]ms dԦ^ݮ"Gngݒ4je1,;X 4תƬQ䣏Pt(]QnSNXz$fk%!N ꌙ#MT#snuemIȤ5z@Aihc*4?c>$qc)Rd4fpFHnQ$ 0]WZ9殳p/FWӯ2πHbj !clq>;㜣ː8P\F"fap0vIL(:pKm=*%{iRrH*و3ѨlD;6Ւ9RGk8C`S9J%jhRjgV- D+]LD5T(< nj3ygj "LQz?ٔV g76#2Ns!瑺qAQH8BCw0>3~M^v5héN;`R ?G&T1?ߪLF5xShNqt}XXi@ǐ+8/jĩӏ=GSP7ٌc]DϟV[N)'ږ QHvwSv-yrfM-(wRl&Q "!8{rH{hC]2-dZ:)mP/r+n$.CYMFrt Tk\p.B/Q'7SǬ5 i ,Q7Həa9-fBp#,sE C%خ@jZ⅟a å8UێH*mO45]0v֝ aA$XyHy[BDIf|m.H]. 2Wű?,dh'$1@doq1see āLGbUYO. T%;TL![XJm#3/2ٓm`| pmI`Kt^GRW!^'WMlpU`}"9m7e+8oF Y[â-U&=(ԏk52hfVƢ|vAd :S*Ȑi-Ws@qh,ۋ7ʯBh, Y &VJQUk 䖍{6@"/SOQwI@ʖdXRBW٠1܇J^AUt;1 _g4BN3(qO (ĭ U*5ur֔u ġ51`y wqppT"^)Bu.382n`iyNwHXUE]]rLtD ~WbE4}$ip0Ԍ,VN`P@ԉ*;Q'E§@P+ȩ\ȫ!p4}8^dsZ3N[ΎCu﷤)w%8 :=N`L@}TU@^#ܿ{7o;)GQyzFqpll^Obk ,..!te V @! UV%W*Fh؛8@jT hyDo37Y p {؜PEdeKsx66\䓪{7EvՠiSCIHrfN*rY ^ِlMlPl.'+Ce~A UTjUUlH)U'0.G>}uܸ]>zɤ Tk:L4k 16ܽƥ-z}dYdYuOTC5jAGh&+D!g56=.2aKnB^: 6A[ImyL:!ClHw x<*Q,ϵtݸlzN%bmmkGxX]=ͭLQ^5< I'12<! EIAs3JuH߯.It Ww`v6uqeI];N]W\m$Ow?w]CjѼ)αߕZఽz=et37kt@BP]?rDuvJ05Ÿ?!$"tM l;JRI 'U |mܻN0=n%"dY`Nťe{=FC<[o1:'͋1ѨxTuuGS YHhx*#,d-1^"rْ0a[x6)۔ӃydbX׫S< DT^*.EbQ2.UC+]f{xeIL`*E~X0Ftƚqr|w6< )5vwwqxx=VBrPN[vZ>v/18tyӼ@J4O [ &szw { c2#sB5Lh9O<1prfS؏'ш_: 5 S K=dnZkܾ} qt|p1n·2g`4aww{89`늪vr{bѓX]]C><)QH6i~J]eT#Fj8 r׶՘eG} $(CGlJHcUf*TMقL|E 2ċjtr]ᴏÕ')SMt [ I#nc 6gba(>CqNrq<ʱhGƹa4ΫcKq|xncX5j'Z[vyP aف)Ns7P7I l-tt*-up%Q~#2f')^7e.sƒ1< J#@2s~0xgL0+aMAX4O3"]TQ,xr7U-JUMroT䊬js5ƚ)F`6ո9Њ(":RY:rf10**u&G!vq|t<O@-I+5nQ5Q$#2Rθvi7T ˑJ쓥˪Ŀȳ+ %%j|ZxCZA,VN$`TuUbm@  5sat5OBÉ(5&R5^~) آ)$I0X׎F QmSx4Xρr1dC_:8<ǻ*MkɂKӪTg9=C!+ q>޶dD5:(Q :`v(;g#K͉dEdQVf^3DHçpbiJG1|%T\LRռt75K!BwA%fԝ3Z+Z jvs֌It?qg3>L,̙3ȵΣ]F# c<Cw58Њ LCEcLqj`juS2/^4*8{ߖ苺'%' VUK yEroH@rUӌLtTV'.n{6UI[qbM+ӏХ,:4sFPreX\N/Y )T? K$u2yGDI e祵 ?կaaq+++e>BWqBy;t UI]qu ogjX~ |g Μ5.FܑS70;&Xe7$VFT0B6wL'%aṠUѩJ)Oӛ@)G*dVs՝+=iy9َ ,<g&6|*ML?D:~EyGu."%bgg^W>^x?άݻ+kK.auu{rg3prr<Y33-mpBT5}XDjM'B̊iy)c @33,m"CoZ!2lQ!ܨqh,'S 81q"Y{(# Cmi]0&Rlf Jæ`lDr&J$˙xf-Zp^m|,ɘODD8w> /`ow=cN`yed~O}i"S ___Ν;!S<Qx8ֹEAdP3V7FٙѥU**gYA{vz&9Pl ڑ٣Z)s!Is+f֖ !gm"d=U6KxcJ1]T t6nkF=F"sRqQyPiȣ}g>}x+swmy_0~*|++XXXDC`ggJGȣdv nktg:QQo;nl+03N+mXI#yfVT,hn+TqBLn 8O6kzDD4ȤJQ2cG3N wT C҃rQp5HrnԤnҦƇ[ϟK/{O]B.\c?yT5^xy|5~S?nf,ˠȏ~5~8|y>*fpI11wnt9VriZa9j*x5; Buu\*Ěn bmGmC ۙ1љMIa1*/ ޅ*zL8>CE\DI 6tWSUa f?x\2p uKF;:RP:ę S?)y8,lW׎@F">}S%49cpy6!RBٕSG6+R%pnk׮aooַW\R:8^\y O=OW|hgc\vys R}" 3ij5)фalPx搧#O\~P[`kG!xid-dp)P@9 eVD(9ҚQ;*&ü2ӟ %&X$塥g(k#fQ؄M|i胂\~QU-ԃ$n,Sv;t2}u\~G~ ',˰'/]իOayy~YWo|uݽ}7pxxs.>y("6=R+8\N8KgAaՈэsUn CE1nasSN-'BNI%5mC+@:4HI8^) 3de|4 ȼ)-s}ȄNI'yVkv,6%AL4 'UmL 2h2R: v 1_6!slmn@Q>~mG4cܼy q?sܻw`3xQ!PB_>aR+G{xJA\ ~i/2@qB9TW]wg 0ȮG$z <"7-4G<]d:H!,v 3t 9 L Kg$rE+*Kx_(9FM-doK_n~Ǟлg.),)8?d.oً_㓿o< Wo#C[_nx_L .2sFChhzv[~OSRA, "OhJ!>"X[J3i/is8j:ToeLb>mc3Dr"9@F §5lf9+P{P=P $~ YցRnܸW_}W7?g5`uUay8DFu'̰EҚb~KC|G;w=_{s ?3RHF89>.#zy =UڣATH4&$/vv63q:'P[\9SZgpu6ڽ К@'"Qm] Y&UiGySEKG M(<"(!S =:㹅ڇ8w$EFwQa"26C|y o+ǏsAXS =cJIg4h`END6; b*(Ƞ=qѩBSlhPkMȦ /i2@T79ϾsjhD% 93p9+jx P kfvN\ک_-HyXHqڽ!.l):@;AY6E,Rg@Xao|ws1 cl0ޣq܎'88؟lL&@,Nߜu/QNm;IQ`)̝CX_F!f*<< %IY2;һVHcI޸ Lc7> nT W7tGs5W3\c'㄂O(Ln2Q̡Ϊ{=5T\E~ o: 9^NGV]STAt@P]_5*Ca4d qM vmcx*=]͌|<62S QX`|+7$LgNք5Aؤ3+7O>hrSBO)d}@8#lda"?M1U7ju4Ӣ\{Gg3O~pS( SuE 9䘱q-g eup{7bX2\7q||#n``Lj2_EXiN8]++>vKpe.mUUgF ~ @ΐDžQ݆`#oLPIċhZI2('TZ$ jVi/"Xid;Ks}![dl?i^`DcBeh` =ҢiyztsYMW2eL+(:=PĚzdKz`o2k1¥x7wO*\~p:@у{CB< .0複1`0A\}r_wZkܺu K/__Wt{=dYZg o Sxigә>P| >\pOJbAp.*@kU9O6.ceW]5a70<[fvPG@˻.SދFȯ)鶜/-Y>?"R%5<6.<~0v^v 5GzdC =`au&irM8<" h=)tϽ >?W^y{{zϟ>m >zwn;(b󼺥y>Ki˖ yRUQ<'Qn(w=*vvـܟxD59p2#@k_8 ?$(Au:XZZ1K/᝛p2~+Wݻx󭷠5GClǽoayyYJgРzLv"F1W8S4Z!ګds~^tKjޘmx~}}pnAJ1:0,rǤ!Oe'#ܽvv"5HeX\ZĹsv8:<@?2V/|{{w11z,{>-]E?XZZ(ˤϞ]ǧ?i|cŝ?l8::'5a]C'Ht 9x q*O rcI ).Rv;7LٖFB&)@Uz| t=ͥ)t͝GNHGBB Nwf+"XW$Hg$F4qTR46<: <TYT! w6n`0,vww1 F/[Eꥏ`<<0uV@Ae=wX\er%nW\_~ 7ͷ߁ֱty gΡwy'"(EHjP rRu|uKdoCJ7]YJbz Jø/%gS5%je߅/npu5WԷ6S8!p.8emQiZC݂Z$ #A_X3?JMvGsR<<+9Gsݷqx5xq*ְhIe7[Y(XY=-pgϞBrq>g?Y,,,^֌xxc<!}g6ךbemHàsP-S'@8J/̊4"zB JAxoq, mI$pG*dmHf߉%3ӣDN'}g(I%r'>ŝ=C;jg䣧8tNy,̗YOM#RTE1ߔ$"f~iC#N0Pp?#Ϭ W ̭D?%]_XWzB_3He|R]FwnW <ܾQ>K}/RPJNdmL!!`T3xE\toauu^JQtpR /Q|sE׍/9$^ 6j562d $@ϵk NaB] /)}Ne 75%$jcPYyrG''*P-&t.+1h7^.޽DW7O\/2aqq߇֌^%,..aaW84ᢐO|G?|叒Vpx; z>U>4BoX JFTp_3z8XRb:72U VА^!!I]0[KlFy/2XHNQ,$fɰq5"L l: L⍥"?N$j"#= mTU$>=sP d6SE@_I䶒ތU!JM3J#%"^عW)iq!Q Rrf\nzs "ڵ9,,,LpD&D),S0^bR 27_CօA2fhkO)yvDEn51+L jܘ!ENs(oyna"ɽ:D9`Tg\5XxaEiWgN,ml.yc 8sKGZ+\(5ZWl.Xܒ{ )Ё* Y`Z xm̄E|砵Dd8΃׮='/?#B(1.TacB8*F(BB3N8#*{Y_1pVSjTbF y zHj&' V;y:lj)uZ1Ffv`^׽P4i4ϜݜI+-[sh;2PD#cΠHh1 \*!d#R6Gxn\.vv`<].?t:ݤWd38cN'CeP dx\2~^_2*xl&(#qF#c F#dY^Wa}m I5'G}Ia8 l1Be%M38J'"~EAAACU˕Z"`%n3ijyz:O#:ɑm=pt D6揨ɱ1KٕDOBu6< @eB*`\4Fn7H*S K3#S{3f fU %1߽A<^[x^[C}%pp,@E"^HqttA7ȧsΕ2>'>IܺuVR,h OpMo{*H!M9 1Jaœ-4s$HNI.h$Coכ8J좄# MTg Oiј"nr!B5<- @B&N=:Q3ƤuG6vSd2a{fČcO usF)"Ξ=,ːkh`^[VIu,[XZZ2,SJja_8 `4a4!'@&dRsX?{͗7|_70 G#?.1wױVPZғ!LxnY@h>_$8))뫢XWejD81T6;VՈJ|G+0F0)JR$*yUXLXzTU͵\s c y O=u.]d`a4bww/~eFC|$q+X__"iBȩ sNcVͲRQS&rtBQ:LfݰLia%&sMzp6I"w{k5 YiC2sf!A9K&FF%hRaMC2@9ɪ@^#r>~T( yGT#VI;Dw>xǻ~xά`aa`4' > .`yy Y<)*o0=nN@>r Qm'{XXcuugϮ!+++W'9?>1677Sfx8_ZݝGX^]Gu:V ,BVl%M8\/8M*q2#$Ϭ(yX埮 ;e ȉ 42gB4k''|a2M/MŻ"t'A۟jt]bɍ@ȈDR9QN,v3t[Jpp*.^cF#t:]g>/byyԱ2) dRT"f3k`UEc}} .9,,e| _j.1XEqkS|`In@(Ja9KPpvP*γN¦qHt1'#QI\M#%f5ϝ,(ۦY؟pix62'x8DC_۹22;)l@2K3ݼKcUc.exc9.F>v:>}E^ 6BͅR]B{ x t?5llaa<#p$8'5h>F|'D/i9]ρ%ʒ(y4Δ5FLQ7S8&8pBQ!L@i앑֦ {pmBޣttֆ.2$D {g}KjsF܇8P΃(pv>٢fB%5F!R5{rD5tICjαxwflnmb08  ++Lf%41u01 1J9igB̌"}Ybsxpv,q||}h46N.b/bz#  U90R@Y0Pa*DF,LhЍ Q?xMF{1̟&[26"A`?CjpdZxAaӜ 輴Hݕ@2$ {#x#O`x=G]'$9& 3߃GZ3'O|\_N9iU*KIo%bux񑏼>&>.1顤 ɱwSdEםvSKH^$DFQfTZvR$Iz0Y<1!F#{:8bkXoG@$N[ O;sATd> SoȩCJv?r2ǁKO+yܟ0L ʑ =;C5}QGsYs([4:JAc<ƣ8888駯_Ξ]^I ]L\0<4sYdKX^^x1ݻ] ח>>|ݝUup$ 6g|!lAJdR?\R(lOpQbi7FoqdvNyimrΩMRrBҒRh#Iȫ)^ǘzԤPj8WJ^Q)ID~ WՐ\Z ኻ΅ţ8L 5{ZShܛZWb;3)ޜ3kf(KDR۲[-jb~l m6MkDk"rμ7xӎqܼUV u3 k}ZQ[q?9]}ĄX8>>dr 0_>(YfA6irtZkK>)\m;eƕ2Q_YÐR˗8; cDQ8V`Aɤv(1` 7Hx̀ cˁAU!(ƲjLQTw B3 oKD*LyjV7[ܾZV}"wk+j)06gv),X|QBZ Zeɞ]/x6צVuaӘS'!4(Zx(%<Qe  ln5n[n-oMڛ IDATdʹ5@P9іHqtzMG-bY9fS&6Q^]:e+hҪ1$w+O\ӥk J!&DJFppJGټ>)* %#/Y`qQmr爚*,_-յz7X! ]N+.4dWjbd$ѩ9=I)A CH<}.\)5:ƸIqo o/:R'\ylgfFC| Ubh4:rd@.b2p5`*1Q)lj8p6j\.bE߸Áxa,C 2K,7V?AX\٨_ѡ[F;s#]|b̛Na8,>G0[UwRNFAFFbв,HTW- g>lv)k0G0;;/~`h<8/='Xdns]V(8-.A]~Oh4NE C^{5ήE"վz Zk(dK5QM EԺ7Mz!{7nymtݟ)ƚNN,F`ǀr@K^/u $5pUb,׸)U5_U&wB@Ԁ"Pemf +|iEژ8*=t)RT%hm+Tf)ef@+ꁧ qW%2ZUre\QeN&f) '2盫*ϕrDYUv?KXPk,3QX&QZsiWalS.Y'}6fA%L rLcKwVS&Z5GI]ؖ4fט AJ+%?)^S/ V52m=G̏غwqn_,Y.X)0ҍz MiZ/U*z%CzajN[,*0%47Jugf6.dB3tzD*靮[p[,v:shLՠ W$C@m~am$)w L- Ik{Wz K)YpE`Y1.M6s%zETaAW+mGG8=~gq| {o<{M~QPm1A%b 7-k*Δ4Z$vmp8A+0eLers+$muoe2mpwYW#`ր5kNw2ih.#]mK9^^3|D%G={_%yd_<^YiP굽~aelnLrQ$%YtCni\y)\T$jA1݇U%!u:RQW.6\R0pt D:^"8.Og?ba2(u1|ϵ2iDPLUd(R*H*Ky3G#}VB)v^../VoqKl#+% Le2},s=y0s AʫBN V3g18L&<ՂQ* J½\ ~+W(mwIV$A; CNN٣b㼘م)8e|X#*~MD*E `302z~u޿lnS|^C^Ç%0Bŝ?sfNvdżƜs,f)6q)dZK!":jvwYIzisB™\)' jZJ]A8F|ZEj %؊I%jsT(HEAeuBtU?Ǧ ,'^ĊoQ ?}@)Tbs VJK.|dS1ͰsS-I:vefR(=~6a^ }U' z>fyߴ[/$Wz I;(L%WFf@y4GO뮉˦ůR%q՜6PY(CFL} jO-M7m0qW]`$BA50;"[M4+3)jm4ɰfTe`)hux‘LW*AgR.W( βlJġ,@jߵ$zM7q[wa ws!/"!C-ɣa=3ůt TNL՟k²'^gV^i][*v ʍcyLBezV?3Dx aoogggyED<=_+p+1y%U5ߋ2nL e~#[T,ԓGE3cZ A?d铧>R*C?gϰ{}[7 IHv\/$[_8ʸ'R ׫h.xV)&[*sV.Z$R;*OܺKer*z&_EDۮG2R\&NHjj{uJ[V*\Gk+sz%hIvL%& f̡t<mCgsJj> ݾyI RpmɹD'UW^y _+AɃ9ҤT ljk=/'Ŷ7~w?W^$ )@B& {IlzК]7ۻ.]+(f3c1 xll7~o`8b`r5?G3( P<ϱsO! bĿ?qͽK.&pp D$H#!8j 8B0 ώ! ޯw ^yHqJ*51En jJh#F?ɧF^ҨۊY[U(/?&Aupږ<؂7 ډtITjol{%Zv\S wE$ QpE.ʟhxKR[Wۜ;>DX7W1s|MWf(f݇VJE6xM1>{o7pqί`ckW@/ݺ}6RBk0 EJ2% "  \!QY71b CS\wwvp:|R ڇP:B{p g# _G zcznlC-r[x7[=~*^B+i,dHA hZC8VTpQ0 RIDyB݈uuA} =u!G.u=&L%$pJ 5v7o;ē{O={ĖN\U (#n鷁Xx˜,X'G<uߗ`}?Ӓ Qy20宠T֧Yj `~RFSBFRH 궳m8 ]zġ܀gdUJP4n@>,ǮnXlSoʰ3Y*LzJ[+F۫6e3_6fr }9׏#\ރp"GTМl] Bi 8B7X#V T  JhΑ H)HB?pˏ1b31@@.@=ۇ@ Y_"N M r$c#wD IDATL~+M:szx6as|xtC@J`g ܹBs %`0LLgc O.'>H)'XdApIn{NS58'c.m-̨^=5M"#DdqxU Z5eWT5Nm>69F9pAvx.OdkX5&eSff`]*"A+$Eۀ@==15>y7;pMx>\vh ^.@z<|\h $T7iʇd ) u̩7fy`ĞGKCX'*q=׃#%HA2q"clB8xs~xos=$A>0$}psƀRIW:^M`4&|Hc߷Kʵgxt-hIC0假\M6rbF!lHZ:]9lewg&P KqP-P] m*^8[VD.dͩ1~)Gd_6Y$@\&ͫ]؂XfP_-ɣ6FP_~iWQ**Gfg@4S(B׿v6B/6ēGp= +J >@\q\te1mTA*0Ne:&NztRL)%$ uR\z:  ޯ&L9>=z=@ FZSBWYʤK{@O=BY,^=ǻ>&Kb@ 隃Ȼ1غT  .[;,EЧZ8OYS3ȊWX-#Z*–\6^l6D%\J:H%W:Y˼H.V+ V[ Gu.j6@2T*hxzU7QVѯwWN T W\0@Ol2_bNF}0$xmC)~ 8?bb[H@:Iy"YE97v&>(sRt,9JaMQm ?)BUZJY0MՒz3{7=USz"[i]UC c4YF+o5U>,;|]<.}J_d\!ë*u_IDX.>vwqpxzʕp'wL g@cfÛ$# O2|M8RɂaAubjPɶ$I@) H8}HnE:`@DK(.!a._•8NhŸ{ߊ?j|H/4E6YB:؝UXYZLfMcˍHYD 5}LoLAPU!xػ~{h~@  4"G&w'ACCX)L%X q5N~42쟠!DKGuQBWOlW dzCC@Ly=J^HZ NiIɁ2q(%~w2^>E<(#+Ne0ctKD>\V:ǰ9^I/՗EGL[:JITO$+]¨0.iRwZ}m_WרԙP >Gl%{UaK"h?]̄ZZP|1/{o6~2gKWS^KCk#V +eR(ƝJF^)-5k8Ou%+D;-T)( ZNqkR:ld<``sݘ1~6]EөXqrOTt dsXO%,5(.k5ah!o:nUcc]߹DDQKhh9/;C,-#e./bѐ|-HIBit2E!u*eQЎŬuI\xMēϱwc?w?;& B%i\e1R3x]f;FqwB&R*BI %H&{Mr# "HQI'=f@4c29_o~ {Kq=Ǹ-=}f\lW07 a\̕@`\(k7VAechuaxU}=դUuλ4T;T2CqXXZ;rKǍ@fkQCԱ<5]1!IT|YuM] 15@g?8 ^{:|y?_>n^e7\oưK 1Ӵ]zIcUe֬{Ouu C4GfKDߓJF6}%9f cӟ`yۛȆ" 'yd";%ƽG?S%^{v$+YmP&#B_QrLiK .GLrr-OE*߆ _mojBMap9^fPWWV/;v{BK#_ewx||GGD}zw1=,4S{ \\wnw`0qiguh$*V.Yf2&KVC(!*p8 fjP|1d2Ǐ3q[zNRB:iI3@'~%;VrhE FlgI0)o t."U+ңɗlnZ+jpc ]X)&5t,_BlCW=u[d:_|v>lv(lO0+peC`/!nܼv<sYLxz~ +lbwwׯ_]ܼy[p=Y;Z(H2גmʯ2- =̦b*q6gx ~ >ēp1$il\G'C\~w?i v.81_%ߣP@"(8pܔ!- x\"fQ|.naǢmZ܁+K6j+ijWmo|K i{.Z&5Ty]7*6=_D<ڒBm9ƣ.ocmHG88h/w DFxPWٿE8C p p{ܾ&]۷oc<b<b4<`בp 8kPJ%{! s!(F,K,%)&3|ygOb1sOAZAVp~w?Go}m+>P1~5-pɃoCd9Y 9GH[RbdBMԊeS F / tϭ]S)76Ev<sjuRŀ\Y5Bub<ʗEV~oօP ph L(" _a?~҈"xq:Qpiw`{Dx y}K|OB#ә|AJw m }lmn`sc-)Op6Mqvr!>姘O%h &''To]0@=Hw(Pgxr.xa|w^@CtJHH&~_M=[b'qsv V QukXEE߼S ft!T1w27Z#)͖Fe^1@8Jj]ѳeH^we΁׏u.\W6wKEW+ KOG$YU ^oKy^kl::8@%GpS ?Sl]{N&K\.3(pm)A FP=sPC:^χ0 .b0N17>B(@1菒]\=w8p=,^<}×`yxlN0%' h "I<;ekx %<BȔH>}tF.$HБ"|2,9$RÕ[ [H[,g\!Y iC#'a"&Dx~Cnn(ZW:ˮ] "EbW;aS@ 0Ԡ89e_ĎwK޹5ĻXWA>7^1?X_7]A1}>Clla8A%, »-hOt*vvp?av/o! -%bOl/# FBb XAӴ96 5DpFX<:%?e,~r<B:BH !E>FB[vb!)8NY4ռbծ:hyW0-F{cLOE\Cɞ"( JChc<)t-ٸNn8T,te3 A?Go.\Kd@J r ɲʍ)%CbI\'TkGJzYAQs yI yb΅# ',6Zn1VBG +M:\&Avlv=^Ub!SKqvuӫ&G:%s P0 G8[8[ɧ1>1 }T0M~V@R1)9~ß'!1TG:Cb)1;d"Oh xw3{|9?&bc߿+W09;ģ_ٳPQ`q0_ueglW"yaN|,ۦ"qpg"Mcy(mB*b<1(:|x@JB1DW)5ccc)H$(A@+@Otbh#xn#|ˏCg)%@=޵X?ObCā0#uL@BH B܀븼B&"+' P#XjKt!d_Oo$؂&'P]q#I"٤`jmߩ"Rlt!RJ8$WBE&7*1Zfpð\K@jWM,æť$HfqX;[6I6&I~[pBGrZbt%.AHgU|2끂ۄo~> 0߅"`;^vMܺu O=l2g*Su"*yJ% HN(Xb1ecF)Ę *Zb=9(24 tR.d%3bN4*:Ç?Aȸmw'Sa !NP?:%ƵF2Lh~5<^AO: ϑ%jȓ)ai).Rٍ]NŨ0+g}G^[<*I {TQvDKxjףm׸ikJc«',jȰ{~ľ^| P"l-`Ҋ@MMe E.I^^Τ@4tśgA`0Xbs&%=ybo}uH/?)?Vs˺TN_ M 5(LD`$mKIX,(o6kθ f $)WZ?uZgǫY=C0*:T]JHfH̓/Sã#lb ]p866FLS|y|2D)dfCf& V:oqL6pt&W཯iH/㰙|3$&3@Pb N|DQ(M#cp,WnQ{0Y<ηuhKJ8@*Ny`61v7n9!sSBFC 2Ypor@r^@R*i \UJZ7Tő0M鸮V1p =)ԗ#6 P3GjkˌȬ2ߧ֮d- |*Kk5_SrSK&aU"Cl܄[|v\-M،Ο;.y?dTJ\|?@G7.2EO"%5$ h!)D1bٜ.@.e#D1p=` O>jʖ]2JC.v.]~ [;[t:pW W6cwP`grI|B#K'MFNÈϧ|vvus}8 q SC&CQph:wv8%3,8# ߃](_SX꭭~LFPuFSȅUm5B$ B1C*NbK{;bsHe i!"'ym)\$Cz}`rA1b@ 82BR$ZbQ L/nb1ܴp'],`,qd \є; &RC8%(1m [*3j1lr]8h 'W6Z?6B!|[LDlF2^*w6΢%;~V>4Lvl* ڵR_j!6RUK-y4uUKv~.S 4W` Iۛpqd1P `@ 6;t6K rY41 &6*8#$~1+Dab:xn`2[).ƥ/d_V1=y[NW2˰SkmSz>%fhձPWi ݹg=IcA@ F l 0pXbr|+_U{g`No54 0I"B2R"'S9҂A}<1oBʌd1uN`1 @Hzp|m0S$\KSX#b0']B1 +O D }5U ڭiJ%ف] !)ɏnR2M\6 4gXLFp*^L믭ӹ& XQ$_L"8kn:[>4G}  -n6muvbi++2?_kJګNAİ$H;҅#:@ͱx~q0f|P:ImqD1$g@k]Bْs64_,qz|Ǐ  BCBAHK@@_ H=aυM"%i DX$)MrMxz I8ҁ47S9:Tflm$2v4(E8flUS*aJ; `U)CF\&UuAY0 o|b~H"[Jm. pfbM\ W~zu3HjgUB( el+]f4)1 Ь-/I͉/OV|@(e!`90 \A-Ib;3xa1 0gIJE7"Lܳn#7J|> ]'R$KAi76u!{.16`(CyY,\ D*?" D(#iQk>X?uώUA: G aM85J\+SBd:VT 8dD_9Q6JcI(OB`Ku<+,Pޜmvs׷6:Ўs+dbD7k$ue34*yjSE8;^U%^'[xS|B3xK6piKH0I2),  tdTicp쓴*G Kf>B1} SU.XdDu.$t!{>ΎA !| qMiRDZ:ośIiPa.>Cs hՒwsZQ:Gn *jZZ`Vu]l:AB'{+ܖF#Xqw. w?sAgFk:V֭{5lF-׊ޑoFjn:;^fձw/zbƜJ7)9w H%\8<>>G Bg̈xIvF<*A:.m)7R]WAh/{# = PRJ3oDiMp ߓHưaƐN!.Vɓ.Ld$jAFҊ.䪬v^٩+đE*F}$5^oHT 5m7=z j߆]|+`2.Mp:n\E.tht$-/mɶzOb&`d[B `"KZ'6(͚%3os2ukB UP $D)Evn;~r~a;~nYI " H 3jn՝33a}NP"pr𭵾%%(| *'RU>?/D1;+B@40Ĺ װs.ܲ2eA7I #ISt0 ˊB$ZERT*0Eٶm;_JSP.^w0X_-*ȝsq ,IT˰{,nٻ)$+y"MJLJhjIq,ŔzHWU82/,g=ʞ} =);n4UGU*)F|?P'XIN P"g77ae2ޘjnF AA1#Mpbpq ݲ~+Sr*.@9RR$ @EoVأ+BכY|qP)L&Л:iI1,JtD9 F CٙI"ܲ$z>tX :u r }~JX=#waHLdR]Mli sE<rXA˭u0n.ssTMI֔{U*:;(uPX(g3fQd)"AJ2Ͳ%g4%ˠVb ,W=2<%wRT6iEޢcH# B1&LijOH$'\g:Cw܃)^X") }2]@G&+k}:[vEadT]~7.]!("Q`JAЅB2$3)gqaIO_:WiUkt-T82ćZϦa,r4J|Aƻ Ӓ5u૵FeкW͊( MsM]: kКs~~ * _T5CXkYDua28[E3ŽXNך]lЪvJM*M٤b4y,"[Y"L!F/p:bEӋTW)_Tu֡a4{ppIx mu7P8gq;Sj 4k}d;{-x/blZqeaX+eAbvZ3 Tgƀz8$B4nD t3Ȇ\"IDYmmG:piNAU;B!c Ϙr .>IxoMҕz.:ҴSu`*- \">[Ja= {gCHc`7Q<' JO$g*VNVv("a F2N#Ceuʺ|/;,59R:Z1Cqff13'@g?"q23{a&(*AU0^=Q K]nc,9 0ՐP!y(ji4%@j9\3f2W0$` W@n?8x7_1XbmmLH(Jd @u_p ҃B./"T` ϞCb}@:},/.Bx̘י4~všrW^@znA)U@%e`-'چg.چ6JuSd2M 9EU+j9e;{X [LEs(uqnǬJΧNLLs{h~FHٕŖTUNFޠV0Qe'\H1i;q"`WB2(*efzĸ Qy懄2t?hƘ3e6[n乢|p0 =\Caulߊwmpwx2^k׮cye:#J8&Tu-LLz.Bg% 3]c$FgbLm[ 'WR''z32-asg_TB(tJ;HU>ANy y`:XNS:sثpz8Rs;I٫GYMe$(T CN@\yҚY΢I3O` PUT&DhX8Ge;HyƉICB7&X ,K*l56Zkg–GԪ\ZPb_ g88XăǾW\(08viElnHIJs )@عc++k8s 6-W_u ֗qc:VW Ȳ ,):InmcΝx7$I NS3S`֘Fw;2NLbn6Ρ;3޶]/a}"E^^@:yćI R Bܴ,Ȫof"(UsԄ!.cMBqi6VK-7h^PQKE&?'1'\*9Ȏ3VשּA(*RQHKDZ8S0Ec[$`Յ,,yLLb8;6IΰvVWCLMLĘ!L{`XՄ7߻ < +W'^//]CJ N/t4O[,QuAPΒ2]*hujV}2DRYLBfA)-`KQ}յȲ.j]Ɓ4[2atHJI(rQҒQ42;@WT(s>Z'Z0l(r`+2t%f8<;p0#g=6sUД΃FspO1 $سSGaS؉]UJf,9{(i(Vy H D,[~ iև#Gor ;0X_YΣ!ڕsX_]ŮIPݻwbǶyݵ&lǕؾs;:u1=5pߞ|;+ xZ/,bCu`mWz" iibV %QhlJ hG])@"USS_,5S,"Xu.;"iFA '` '@'Y$N4\"iIHPfpD^F5 ]sw "|l: }B֨ þjX-_eCnqe R*w p#el jR&aIwp>f化Yn+S((h( M$T:sP׮;3mabn;tAgn2KPŤJƍ $lx}UA_݂(l^euS1ڋ5Fv0\YΆa)tAM7Q)(3 ,A^qKi90]-!z}8&DUOœOJ̢8M KCYz<(6 n!+Q"spL*:+W:Qi4M1A nh9 fm"6J<=i[DA7g!GFٰ Xsrل"(f*"D`piotНHSNLeHzr~tЙ4n\Xů^|zpUtgo /a9߸ dY>H *!MsNiiEN,@,CZd/vw9 rZ+=lɣnGU`]JXj+#dEImp;6NwKp8]փ+l7560`~!iæFj6ػRi#f:0yw IDAT⼺VQ+aca0gy DLhI 8V0e>' *+籒b`9gHX-c7L::SbN!c5,Cpm- YޡC!Nyr-)X6"O͡ѝq0BPHM"eĶqTܼa%Ks/A[Ɉ4!( ΐj ] $EF1 iMf?J3#p͊3Wa rlԪXspK#S[*stͶfPKr /Nf-0ɜQ2zx׌ 5"P5qeڎjS[1.F3R>2s uY4?*ABTչ"UhsV8bN+ ױdE q{?J%DTyXysFyfbBdu#xco['?T#))tmNvQݽmՎDJ (!8fɱ`CH)FuDy&E׿,Zl̚W g!i"FbvBUa࠲Vi @!Q N HUJʶ_95  N,Awkt8@.,sP 0?l qP\ b"%!-ҙVl=2g6.2%JzZU@3->Ġp7`:(EM2d!#S"44u.aajp΂WٴgtaV*}dTyH]ef l#,vm\Jw oC ʻ.rb4UG`5` .l%Gt,EvSD j͚ϥmf$cTKxF{[&n}b8S~փuؠ .bi6k 6|W”,ː2@1k:nf1Oso}9QQjcL,?QմɉV1MoLr;M)>Mi,w $AdZKJ?ûbc?>խ `,6C9{q0k (0bјa9u.1!#C/2#SfRxٚcx$x ŕ4+8|i0zXξZk\(ދr[cdvYC5}EMb irs24y ^cn2Hd-Ɂt(*fS;\ 13Ax҂`$BRg>\DqěaiE:E.G FFj<B RkC0QY9V$&I6,t1 Cw3օ0w}8 TNʛE;1XN #\>Qc&S \b. "NAsbŤZg8o"Gt@&L# mbk6 [\^%{$KkTtٵzp4 StI0JNaԫ(OG-c6\Ǧv)OalZz3Qwc;6[>Xe 7s dG QFr pW;EcD`ʳIuKfTjP՗^Kj!g(k04,Qnj_dsr̄)쏥8|B(")T4=ĕf$^- \22*G('ة|;.>0`Y=V`7O83"װKBA pW܌zD| Njځ&!Y4ly wEF'RWؔ$aaסT] SQ@8#ʯ?zbxASiPޫ_!;۴=PxVa&-ұDiܧΕ^RS((Ȳ<+l;*xrnumz@/yf0ZpgZd)X m66sl.A8<Ğ!3GE- D9kAFi 2d}Ar"!.=kwYmlSC$q0 ,~d)8rؔ5 IT:2108}Se=ɚ7EgYٲLm &9b<ʈOKgR\e$e3.ɉshƔmYx@DW"\Sp24yqZۿ)G,-;-a4-e(:=G&\B*:r)wMa'B|TIE8 el̓5L70.6Lq$׀ ּӈħ áua4S1Y+idMQ$n I+LX\g\2R(j&EAU܉]#4FuFTĈ"(Ttk iڑ{) $<1A' 2RFkY䃄 4]ܚ8 PA4MCcI<%mR~(ސAoqn9Y33FQ$ѨA-o0lm2,+'5LV|EB\g^o$;ObֽkɃQ@ߣ` * d4Y{T~lASSŖa~o_2@~Nި#D\]涟ٔA/)SaaY>4DDsH5Q6H6WC Zvd9xEVkn?pR i0s( PD*̍ȏ s`0PRpQk ^32- KC][md'P+mKr|˘-!Sǽlph-n4pM$:`l2an؛$뙙ń{E٣'Fnfo c$G#6ю)0G!ֆ-Mji+2!|YLJ8IF2.S$wPSR@  HJ'\ mԂH=lqFjL;e0tTL\DnB@ e01I ?C$ȁEX2;LGIäx9| ؂ڹt2BTtpsA-Х-{jH ԌX2Wx[4sh;dm5enfJ{ABY02ՂvDn 3αn*{q!yRX$`Il!a_E )kl-sM(:e1ROWPlX">Wcъ0'ܙډDrBoL :cn<lZFqpĆl3]I"rE+n`ViB,Ṣɸ2͓%PN]+eeWIċ~{m(بل [X?9Fԧ%!*2[ /)}6evB~~sgG~?U? AWV*# Y6B)dC;öhZ[( Of$(ѐhZD^H0.Y01+a\c KS|YMfle6|J'A#QIڙ1XuIp^񷌞++72s]j =rVQJL`,U 1 HOa w' 6^)Ki 6AuA]\ *yXp0SM*j{%æplj80Ak.\"2V8|"y? ^י[]3S PLfwg!{j4$C,oe8 S4eY̪Vj%'L"io'rk82I# df(ߵw$稕8 6#sg)nJ Z8;2iC*Ѽ8iu5%t0r0m 3c*+$%,շLXr`۵&ӫXsO\,rQLxZ+U xaB-lK*H1EŘ}l犔H1t@%7'^cӨ T&G!s ’I5tZy"gHOJC,'U%O& 8Z:6I7q wnw\87Oo3@r`WK2ɡeSqȧswo(Z{Y5uLk6!m #eo)]`F7ҫ5k`Ol,4U>֟1H4|WuŹ/ l~Gedav K})Xz0ۢcQڧ@-ns _MٌR׀`gH&lŊHeT+BM:ِ]u ubrs n}@(̤#!aZ޼,z ?;3trŹ望!QUZ$аPTq`CW A'׉LGW@gE yŬZrѱ87 0-x^fn8V cٯ-I]]ç`V#(sGtܖ@T+0ּJ^ƬXĢh`$H3P#iV2*qMAD͵d"0'PĮv5XaNjqHsKNPndz[F (tpvjIyB568F02Jj [ ӵν3d ʈ)؇9Q: 9rАq^|?ܬEGh I[vi63Z8R߸I,+xrRJ-"м >1M*vQr6T6m7 ДW e;i<\:*2DÀ[ #Cp%~[\Ih4f vcqT r#еm*?n^6gv*;Lj+ڦYbcph":{Y$4J)DEj`U p (.]L)y( , |nEJj9Y?ҝXphLl_n-fcMc{&#gEF٥qϭ }En<>'3*v6BR0xm< a/[0Tf7؏9Ϣ4|^opNm;0*I6Y1JEz 2 :78hE&k28a~Ae]e)8{)T5r1_q_12 &%7dRea@ZN*q"'bm[>w2q7=Ex.Q>WgY.0qovۤh4dEX~69HHJz~4eWÃFv1*m7Nu-g䎹 ^8ipF)pWۄK]I&Ex#V&ahY;:QC> 5D՝eIRy?pXSFLK)TV'>JY4v8Br:172F1YTHg ,n F G֞GDt9h!xz%H`1c[;61"]$lAQ#a+akQ[/I:|D1?j.CݲB j@jt)PZ95I"5RԪj:r,\k ~V5lBA-4)F;;h#NsGsڟq=qppe4;bϱXM0u)bj\sٟ &׎[`FH>$C¹%{hIH+1aM\lqWY5M11/F(?7g ߀[ gr,X?]m0m8h1tmnWa'"I5j IDAT;rVVj~הӵGxV]qx2|6VwDI:I\FC!gQPP_2!|& ImPSC C pɺ .@nnU)l3^rc}qrذJH lFU Z|4odzD#<%H$ٹq56x= \Q#eu/^>kDk"J[/((䗼yLݰTT:7ߴppEfWޱ,QXqI8.+Eo#Ѩ49tuF0Թ5a8w$/.`.N'+"}8 ** PaKҼ`%2WVtR9)nY̨tr "Q٨27IŊ:/pHs+dE,'r+k.ƀ!p4?^*\~ s="^ONp2A(E{nP$y7MSsR;*EM*øf7InӰ΅slyɚ! PkϠ !O7ǮyDڐ\nZ{6ECvF-q@(`ԉG^/2hJҪצdH%>:nh2汊{+ßԌ _2ܞvjVl@^$r$rއ< Yaj j&2SɡmTW=ߍZ%sڼ!=>8DFŎ:.7EY֊9ol . 9XbHߔǼ|#U>C48W{ɯlfL\d)m9w噹q󦋝"cX՚*2u՛ $ HFD+@ 3' |ӰơCqy4ccյшV5ڠ5 @cP8a~~K˫p-B!kz$SQYat?p Eph=AjDd)d% v6 tܔbrH_ 9h7I6."O:n ^7=g,I$(:Mo"׋` Q-E?$Mz/EL…O0ʗN_1ܾ ( ~gX\Z?#wn;:VsfCp5[BUbae nJF361hļ,[1! lIׁLvN [u62V "ߌ>yU 8ev M 34Na?9BڬHgK|{w!ĝo^ '[`zz; _^á{sbѣqa8p`/@5y /u5;mő୷?83x*'?~So=Ȇ~-⍥w gq|o:W,thR)7M A.@m"2u$h SCHSaCL=n?kg(qȆ?my G.dhy1Gz!@fd#Ukvmi[rQ_}Ͻw8{9}F? .\_y?077;wOa۶3&'0;3^zzǏba.\cGz׻w;؃)|gp ~g1 159 q}a^^Y μ?y旸|H`p b(fr!ctŠDKyƑ3R9}x:03? Mƹ&IYaY jr/m!I?&<`ld7 H-md27 ~0b}<"jCr)QTJayiۓaޝѬ Ȳ!nx {ozg^t7 /)l>o_Ehf<ǼkPVYyq|Hȟ6#u#vOW_{ Ξ{:zs~}v۾K8y'N܎pS =w?i]4~G?cw}uIt;xч߮[ﱺz.Ek e0P\q?p hgAZcxmM3p5]ϵXl-&{dU1-elְ`p8pL$!sl">X mn"aB>S4ҭDnQju#nG ~aM1X>Q弶‹/con ևt VfP*}sgtv܊4M y<]; /WWlM/9ћz C|327:ڄ$iDf9&щFArM c!ʙH;Noݎ01 l(Eb\)4/iv΃LG6(X 9-IS[JfW[O .sX؇g $vҥK4/gMu{}l}p/:z\3ǐiWMH:)zUv%~x[Z6U 2±3$@6LB)=D|n#2eɞ|"uX_73c  6Qģ8*6r|#Ke X$~ۅO h$wd+tZ`vR Y d3M1j>pe&s$ F'z3^5: W}kxI137KJ)E^غPHU 5=ffpffGG`Kcw|).)e Z]f&3@LF6qaΣ%LBm>Ufk\ᦲ$#0 F{B}v`oh]uT[@ Dʺ W,xF_k,kvkg9nsG91mAMJsFlr+3#2 9e\Oab'u1/jHd$'64 ehuN׍X_8[)R"#.Ju.hDL'ֻjf?.^ޣعm+߮_gǗ1̯p%LOa׮'yO*7"ر O<{a|ࠊ#E F3n6}LpQe`5K;5cnnJ:Cm˜]qiؑVa?ݻnϟ}N^'O|~a_=5Ÿ;q3X^Y}0_}2X$G3:Ʊ,N~L5DT*be/*@cb#CմyxlӲסy)a 9hQ8oQ#.H7%된aza5N4d:lt)Hװ /N_[nنI3q~]LMM$hqi 硍LXZ^\YY6y#G?@WѼvrу~.]; n+Ğ=_Ʃ|~XZ^Νƺ 5~[ery1h鲡Bɬj9~_)WH 9DZ:q`+6_C5hA>l R%f/ &rk~k3Gp F~΅p'^ #w+,cٻ]'Mq뭻q!,.-G!%t50G$Μ9o(Ӊp 4s7^~ |MLcnvp>74M5c<~_[Wsg;w0.2!YN$JExs8~vuڟu7*7?}b0xxFqV}^qWVqN5 a^/2I,MM>4{A>V"OYC}{g??3_~ o>5޾mrlH [:"F%jHC[B!DW$S^pR$CXX8W JPKrBj:Gä!m?>L>D{NnCN4)B_Cd-) ](ǏxϜP' !{z>ܱ`HĻ^KçOkv9srJ{Dk7ι^}-(]pwnm?L~E 싟;bbgx?/173WMYQ3l1n h[ =qND.ߕtB"EXmy&{R8vd?NyPwyfN"?HG?ݿ2x:?;#jHP7C-&®;p'p߽q*p_ lu;Μ9 E {Mtȃwkx㸱J/mɓYw`eu/ ^~M<&^|5,//c}m/^='ƑAt?8^~cq{}l1=5Q*<18̱̃糬rAϴY΅F-gPMއ!Y:cE^΁4En=@1RQQ(iO"^&;/p|($%7:4VS޳1A1F6 E npm"CVS/#.Y#=О IDATצ*86< a:jc ViYe#Kaf̡g\vCB4|?Q!u`:cBilύwu-9Yrmgk ri[m5J!DkWn"w዗a}m]n˱a"^)LM0B%fM͝I34I033ɉ:iYūR)Ә Cciy嘚z.Rek X]]rXKCf'11CAH77kk},`mr^Sګ`:7<6 ɆZѡS 7u@Ƴ~L2.&NmX3i>;D8&fy6elė%_ #:fY lLJ[Y~ڔ[pX8vn;n'X3,/xǿWF*o:^(\8o,?;w>=2~JisͶsxⱇpۡ[13F{wWv܊{a߷ 3ӓvrDK+8{2?ŋWr'I{>O~^lkum KK+x_UӉ?Sxc133ɉx?s+W=O@!DCGĮ[cfz2s`x~4g#/5j2J^j*LH1V,#3q:Fǒr$rJc H47QgoLD\lt h|4Me l_;淯4-8~|3:6G))v/`ma%fw?Lc(m-ضu ؃W\ЃwK_uWٚO> >o}:;*2~b˖Y߷k:!&&D=>[ B$ls>AHPPI;|f \.hGF4ap/gcf sn6_BD42jhvtq^%(iz~J ]?'1359g۶9 Î>yH?G:lF`ax|~nL./]1z #Ӵ68J{ẒmwjnZ0?9ʣi!AWgy +/} חy%I[H5u~۶kȸ(}~KWrlm<=ؿo~IZ;!4^x ױZmK+XYY0`k!IiFp~|vֽ;11-2Ʈ[bffz+ 3ūȆva~,q=DYߋqSo^7ŕ ۅO=fgu6LOHyk}^Y]O~O炘w_/sB0|巟.nL-Il)W॓oo'|7OA07;N'c۶-2o?کHv{ob,U5"_o>>' h)\xc9k'/7öm[pp4=5^ՕVYH)3Z%T!]2묖,?\azLC1r H:$ڈM{l)6 8õdHZc.=7s_ߴܨӺqȊb*XZ^ ~oD61Bcrg,\_ĕk׃Σ ruA\lRd]sV z< j2;o;hE 9[=Xaffyy_nK+pjH)CR^s.]8zUckD2i8`fЬ+9_}4M tܔ%^BitʼnM6V9,\с7ЅG2׮,s[l''&@ hᡢPO}[ڪ}PUUAj-¥I '\;ׯ{]o滬M*5E2Zf7XD VKuЎD5 +ͳrr%EFX.ݹkwwN$@+).ipiDvv4H% tgX2^U0壑>C°(/Z6.@}ɹ5#<6 P@A2L`+R,N&e_p[Oҙ3//}̴w:}}т.]~@QYrBEZ#b Yy WVd : { .bP.azp+: b}}&J aedVMk9 FyiX@4V]WaMaXpHYolmC?$ek5Wied\Ρ:t>AϼD׮f{رm(@<ˑe$ۿ5"T[wWΊ1'\lGPB88_$pb+h['keFu^ƚ_^LWfθP0+$h0;ѩtĚ ?l;z NR%XxWJ5;~AP<'sf6}nt"RH^$ski4ߩ/7 P#4xИT.H6UYQB]qԐ.'j)P5[rQjHӟ~o|~}05|%UV1"O[H>+ RCrm:Hcãni `Js |$: $q:[шb(=fhg%>(hٰnKy[F EU͙"Q^ib;Z*s!dj]AHk"}k왗'ђ8Λb{F|cm,"kPzeOk ֋,R1jvƺx,*+ r[CmH^ SH?]K?;T@+]L '%DD/*}sL 7h޶AT'ƒ!a+%ATLzYM a8Ŵtkdq"nUÉۀvt:9dL*rs`'&gkt 89E!ʫ~iS}Coo:D{;4troq "ÇCK7ܰ^={?|jSv>ocGo"nMt#;~s #}_{mw Ncqŋ *st'his{6t%ۻ,B_n Ia9γL&%&h CD5|Yv M,WNBżc4}HʦΚ'mH{Hb..@uis,׍~ߦw$}?bҕmEߤ\'1~1?i𘛦}C/_UСНwzs.S1;]ڸJw'?N/tn!ծv:~0vzYw":w~ì_I/^V;NJm;W_DI_3ϟ]_3fw7s>Z34 ;C!,߆ $y=?2RΩVLBl>:8ϙ0 H-tJQ5qyƑH,9iɂ.Ev 䪧4v'Oщ['nNzKNn^\[2;?-e[d\ǷwO{:9[[?' mnm :t'e{=г*uz;}34< kss߾965'"M%Ѹ G1*r5$T) a$`rW*AX#vИ!/m4BjE{HLnq{Zݢ1982/GsPm5Gm!VSs%"s0IH3YWә9}KI/Vݳt5_KME3՞n[Sc&d^O}O"/}^}ucr/}xWGI;U{~2< _<~EzG*:َ.l01*E?K~x.b<:Cj$dΓtV >BRݬH#!h&:r(цg0, 2Jof%7U:SX2N"'s/.f"dD<w4bփȃg>O;9IGmmn-'ou_{nzS[#o}{6hc zbּ/?cthssN~>/;S~n8[{G-jkk+ ×Ϟ/ЩW?,6"fŮz$t[iR9YRD:VeŽc侀GwD 5fN),*`,BPT\d^0KD>A IԟGMEI#lY9% -5˶"QeAf$o k3j=CE!*e}}}؛;ATp'Q*VIm ?2 .42lZqjJPV2^6ˆF<žHDgόzz4/lF:>1z;#"G7*ڳY8x;tĂ"٦vA|/~VjpQZx4FAkEe+&БY}Mt o`=rjBd'1Ƨ9c;LRGRÏP5(3`l-#9'W?7jys w4+ ]t# U]ډ2-nUjۖ!(+9e%+U89vwwhS/!1DR r<"H\ͭq Pv*FND jٗ(lx&l0;z$TZW*2x%nfmm6 ꣜H<[F#mao`4M"A=HƵ5KiV0T-< 0ЍEMҫO%,+ n֣uHO,pjDpuUT 2YY -rCaV::IeBX8wFY4./#-~+]lnQEWlĖ u0 B.Cm,A񥼇T]x)ͽ 2Ji3H*q ho恆b^x2xstlv`>ڷ/Lڿ|1*Ϛ_I}9Je4'n/K(v\ 1 ގ$3Gxh=t5d '*rCB Lʳ܍nQ]85ճe)1L(l#RW"Y.  %͚馨̙%|`[!x韜G_t]:]p^x]ܸRtuQVMhei(-Y:r:OFo>N;sZq㼝:wa<9wlq2'ip"ឮo~}X(# Ytz[JFB'Q(:ΉyL)zˋ 7Mu#ł`ᆧerwFNIKUgX5zT\*.3]s2G?z 9+_Qvm7UxOiڱ 8.2nЅW/DtI|TiI=cP)^ua1zU*o2 H#r <8%g0{zJlF#2T s$35J(VSUH!u.xj9~*~<YIDAT1*]ElgUF%(* )ݧց4(z#@,zDI  4l"ղXs=K TZ $N$R(["[\s_T,40wVBns.R-T]z:-pKb`6>3,:NHw} k ! ՜JNT^?X\ IxP <'ʆH/1plN<. Ya.HBa?ktl4/92'h݈'8I-kCKFav/{*g2€ G$`Fٲǧ#|%Y~urQQ $iGx"&ǵ5rдBT!QW0].yica#+;T'%:q (of32#q)Ǭꑫ}L  A";o!Ƹ c)p3cH|HoIj+&fe4V'T;tRp`:h[DgK}H QI~jGSA k GF0y?򞐟70OMn@(b0.5 : h1K "7lګ` zhBАⲩJQ&?OI(0 NCHCh4QlYc eH}0Ȝ wSU h:81}Q̊p]_+r"ZhG YWגhtrՈ@аQXqU׬ -v(w٧cQęp(:(6r^<_:<= 䜖9o>p{8H^;AQ" ,DbX/Zg,LГ`09`TӅpP }[˕)ɮs4JPr$ƍl!<zn$,/ ԈYH$ƭnY5̋Kaii؞jF.),sЫPx@zM$h+.:>mUu gz?)cM$4T8bg8qϜN)׺EN768d!<=cO8$ʙ(HXxr8ຌ.)ؐS0VB08r<8(F,s@qYaɾYMOJv64eF0=\'qDF1< h r/e ݋vء2>H ᦰ'T.=Э KY lF}O.xή<W}[ccj`aÜ&}oaq" R x !NSP§ /sg$瑔E 𠚮=ەqW`W@EWVRB{,ىl n^dJj Ae=^ XbXBmXKM_F>1e>RR6Ŷ"Lywm7ڰu_S!usaiڻ؍[}ۡA0Pz,=JPy!iY>j9ڪ0Q3<υ>X-1FcrWv{, RpŃJT%ъ۸QWyU/GXR)|]! <9Fg _.?.$=*\;HI{>Ԣ%! /]DZS^; o̓p3B+ʆl+lѹOXXc[G Eɫ J`292),Vh45ҽUtM6P#& FڃdM8kkRݖe7&C2rZ5(mh԰v [8(DD܊u6! Jtjq`@1M(L#C*ЙnЙf T)hNuTU>RX) #P%<=&PDHԂ4&Uޓ\b1 t^uH;yN~Ulp;AP esߛO2@C- xB1y;}= o7Wq!sql1]iUvr5h6/P BQH#^Z G`2TR pz3.xh'H MO*(ޅȾZmX %3<%~5ItY?$N|u_ T\h*;@l:V?@)Y!Q TSb(le~^>mLl4OXsf"P^R\ǓE?vFtR$-z /{L\QD9ES(9v(-J-RP.L,x `Q*A<.q<:e`+h\;h=krFNzuoΫem]~wudV5FZP]ubCM-!;_(:b+ﴳ*Z*ǎň/Yիg|yGjGJmH>W){tYi~65޵b'g~\|m#00稷Vd #f.GkQqk&}ږo;{߉"{rpkr!CƉ Nig#G G 8)Q wu"z'b=> 7gl}ِ{/yU $7D9 ݡO/B"i oV huPhL&PVی!C`J~qkt#xM<$&sƘ6aȂ3oxų `xyzH[&ΟBsA&}vxcJÚ\.sײ^Zn|Kug3:H#Ryꧽk|/w炰_F[^]"#>˫^}ɺ*nLG`-T7κPDGa`q2wU ȣ0*0.pr#sKI2loµK9,J ,O -Yhx-eaڛo.|.XT}2¾DǿqR'>*ZWg+H ɞB)j1N&GBc|#LP Asg/\dr# =!ޯ>Lh_h8-:{=FB$;7%6o'E!oM)\%^rh\n~cRg&plmmJ2EkE&Q= ȔC-e`t=e&ʴطڼyX%# \v`}wZL*xN/W:qrti{ﶟk:G.tY+F%f@O~4)gw" Dgseei2d2 `bp={E) J 0}md@[R[FyʜD~A<1?kހ4 @!Xۅ\짐Rh<mS^"ԟd84y^I jI,Brm"AdxЙ,9c›ӷ#0}T@h$X:f!ުOT-4 !n@hY0d.l1 ݕhZ~M\%_@I7h,Er9% 0(5DkK{o^~vm䜓*ow mnXmRYAi&29~"4GdjlbWC@xGVxZ.юvm݆7g來[!Zj>) V4VUx?ZRmfiYHyԡXIfK`==|E-d =*`ȖԳ|O5F=E求f~%^a;4DmX0e.YF;-(kNYS2E+=O7RuBxuFuH~37LboeޢS<ٖG1Gz'x 5,;QAhVUF$22Ʊ+fE}4]&684b~y⤤s $2{R"(oDTExW2-p-UHhKeuhu7@䲉<R(aP (!OFT4-JXFP!6-Y$Җ 1Q?ذHS!-[ Pv+f^HN,"r^ONgUolw177*?(1z֟Io};Ӳ5"@Z{l{O(G̔Vߪ&lS/{O3f~ <uiEKf O-{;,Cudϵof-ZwZڹ۰\vm]>K˼꽦7UTc_KMW"2\홿"$6ޔR|,]VE kTChGr hգ+2weGѕ ^ 3cGKxh➫h#tG,hU=<ǬQ)Kro7# .da*BpdRBc\} sT(i)#W:J c&u0?eDVQ hQa.5MleẃILZ|ip'FJ`Bw'(Q3/)ׯZEc&o@0͎#l71&Vxvoluer%P]SޥqJ6h@5_x6'^z<"9ur#+0ıSZƞ|>ݯK];R !eTSݮfc?P0<"QnSOo^8n{/2\[}}}Hfq,.?,iڲ*#]8j^j-Yn[e%ނftQ.55URW%>gA*Vg T]3{$ir,CE8WҐ1K E ]-vC;em(ޓޑQP؈ˡi3׎Fm@lzDHMv tw[ % *xh`T z.>6 m>bAFh]*V('O>v'Go _ɛhr? GO$zA`=F_ür^3(657CcW&! $h, =ـo c82O hzq8il %:ho[$4 c88аyS(;>V1 ?Пw43VׁH3z8A2aOxN=-7*, m޳JUo 2l~6`žSQ MWe$_9Xz񣛯=ʉ^; rퟸh n|a8B#ؾ x2O6~ n4s #\:# r;'|_Ni3X )geh걼EVqG=K6mpSG<'xg.m1 tD`S8LGgO<GK\/"~czJ3y|*zTYZ^E}W1h;:yި-(orCc6sktbKHTco Z{ks&?o.=$iooMcF0λ.gʄ>Y#ӑH1qWULRdC37D#} uYg|R%ƉYFRmHL&{2nj)Naцǯ7Qh9e΋bǂ~iG(F6A=$ (Wu&6:~ 5!kT0r H'iwc: u+S%? ~!VB!,:7AOykJ ,*xE<&m>؁*z, }ﯠ_*"BT8d)XئT"yW:,"Nd%Ǣa#q\oOGz,z0 #4 dP&ГD/T2˦OƤp CRɣ`KJy5xOi.cl<;"\TKLa4Z˩$AY#i;+j-3kHN Y^-|~ ?;xa PԜ䒰 u}+ܵTھ՟|UVrH߽S{}ԏ4 xiӞ`B@|O} }nPѸq);c8wTTi=4w%QKpc[?Κa`) ( juWFréG MqGP cO-N.-FA*JN u-Hcf-vA8VIDCБ_yab>)@NjJFܳ rSU*|^ đFnGV9@Ls'~'xChP^p^qxo|oGw>4ڐЂt-2+#i`E <ѐf^Czea֍8Ȓ 0݊@#}\yaa]k[ ͨ$nyЕK0O)yh0 FxNF9 P.4#81a ,Pܖ;I3BW"&M`Dhhi=0X@o"dcb)r.uFEf#fsF'1F$hbkwui;4vE&Zb%2 PF^# $f%qO^KǺ6#5sUtrtYYɓs<3 X8$-0ibNwRGd]AOyV~t¶Yc K^"d-2 Zzw5^^g jU+:B/lw^|y4Ć6(Ie;}Î:rwiX`(edg-0\Ϥ-f<(4LA*sOl N ͖[aY;DŽ A^+Иb"DNS7 '0/c&X[UצQgsVEQ*48Jk*芄 [ъE}b"qv^.>듵P/ֶJ~-XvO_dP }5%%33R.^)Y=kۘZfjM?2yXg:tkYWcQ d. 6gId8$M'ZD[ٚPP-4b珬D\~\R: g=“!~p]WL'Y^[I+ -K 0H6ELb3XrJ?8νB lsgIXxw"0&DZ2gy¹0\`7>`Ћ^5n,gP]ʼڼ=Ы_ uw5/l#.JM 89Ҧu~sRtԶfEZ茵uhF;!Nݑs7{gM%3 P ѿϜ[ka>ўX9 1H-d/Ac򻃧>myx\pSJv)1/_'=F^U*cE[h7w8{M˫4a5s_} R9}pu_az\#6o}6q=k~W 4!:V S2wptj x9e|OϙAy ?5}dRWhڍ3Wr]>~]FUE!x&iݚwPWiJ>u-Rbo `y09q,#+oJ"sk{hT|b5aIG .`BoAC6ݸ"'>~Yu֕^юJFAk#kFv_Lĭ{ݻ 8 pK퓋%*W|Y ˂Ee91^nY9=CĄ2>9*r(0tEkYQ F|fӻMcR_Z陎7]q:*%OpJ0N!ϻTߺ2@΢UK(Xdb74QQ a#8e. hxF H_N2di U K+V,dueuɊ pvK6o| 'rlG%B3jڋQ;sQGLfHZ9wqKlVQ!Ӌ\(1y\LH$eA3ʼn3L/EJ֊7mc3NjRIu;^ͱ}@33J'gNZQN =;-8gУ PzwлbЏqsty^؃ywpf>M'R:z^a[l-]Mκh'8kqpx˕&ʥ4{L"_4V)FNʬE:1pu;ExplKIcz'^9/dE918Ghax)d` z/z}0ıñ)쑷i29,0%nԔkhӜt1]ѬNW@%6irx:%Cxs\'ss(qu>V䕛]?oGm/G珓q$VEWǺZ?d}biyxw{?~z2zɶϐ(DSLJJld3S#}HTL3Y)%rh?C`RJޓNJav$9p~Cm@$!Mp刉0ָ)NHJٶhZ8VCP<.O4pNg2UUX1~^A3:MѥSU:[textf;-ð%I>.Ly+xVN7әƑIh6;k݌ChwŹ,ynjL0GM !-A?FXSK$8oJ$V>-cü @S>e9'hs %)L#bƪ1O&&YJ8Q߬e/IlV!AW!왒h@O0Sx|Z5ѭ9q|`JhT2 i<a+]NB/Š b5"PjZo  b 7ұ4:\mNԬ`?z))XBr1rS; V^ftOQyAzʰA&wߘ+‰+3QI%7 _~z3 b ]Pyefa&ÈF >`aN0MW+<%%>aݠДG)C(>,e+鲦S Aaau f$Nnj_KqzWޕw=|xK^c}Ym2w\DJW#AԞ+S&YDLd V.IQ瓾92[BR< ;?)3mu3&:6V/C)w[YvYԅ+>“Z/]h7^6sLHw`i$߃v0vඎ'Dpv'7_QTABUzi~'*_1~Δs+ [{kWXnonL\)mIYkS}TN6zMh-qDS wHʕC,Kj'W:gk,#+8{aFbY)Y`EY\7R4isW ͱ3=xKd<1òE%9g( ą7\=n.BCmN6 󌞯i3zǎBԌ٣Dkt=BR;O{^B@\D,T$u1ԙi~twIXRJ[dN\܋[^ Z!>G܁ɯxLqtl qZvYlZ2 xd$Hcȼi4qTX宪A~-&ʮ^gXa."Ɣ+IRP١WTTG ]aF RR\~, %IUٔ;0ASCKxp]p;i N).E~R7p*_3!+ R-T[K QT%zwVQ,xMߙ%4KM+*$cvu0MHUX(FhNTh~ PtyX2dgjehm>t1u jV( ^WFK͓Q!OjNi,:6jE; Q%Jsl1Cv|D+98:DLimeMrf2O IDATF_uEO}0˺ʣ.H|! 4dBWk֞Hb!gY[CG@݈4T}:BFeJS+scasE9[R*1HʤV qۖQaPM9ta݋P972gѼ_ADxJ19Sn ؃N '7i~vvkvtԪp (ExmKq6(ס@ebE/# f#12khs hXxFJ¢%=:#=~9bJu)Q>A%:AnVq Ӗ>cNLՠD0a`슓UyoV;+4)=x@&FR+ HzWޢ4Nq$Ue?{ $3G^ζ~-g9I@JmLk8/=VCȨApmk><0~Jyq3f{%}}O!+!Ď橆'w$~V̖%b&%՘=Lsx$67o2ޣbB䏶fÂYSm3'xBr}v}lML֋VVN]/Zm3{RiZ!Y gcT;"Y} CZg%Aaa5zT7P,zv,GCaae.wd~ldE/" \ŠLGmܕTSĮE.XoL< vfqA xySuaUY;^G:jkGje^ 5ѱq$Xq&+vzک\ō4'hUo1!gL}8Sg㰾yzU5<kmbȲt$^F:ܛЪ0"XAZ&ıEQ =YMQa}hiۆ{/~[J,#bEC<8JeuxI}hZm]OJi!박ӻQ&hgj9[N6F];EqD2797m7jaYJRs\jh.Nw /b"ՠGVW bF(yZW9Vz. st?7'itB͙qdp›TV^48Q˺Eխ± &KRcSS"|`&ħe@k@=]Mx"=p/CeU%Wh=yZڞ- j1W}2}yjeYAr5/#X_gJTJ5Kv4VhV&mY_OWCImHsVT<׉l]o}x+Wgy8d g#z+%hR'┥”qdzFҧsT`p@pv0ΕQ$98V4s00z=,yUp "w-!*"K8DF_V5 ֮,\ -9zN14T6R+,,MN5l ,<Є q#Ēx VWUë<J 4嗩Ad8 Wib9$R5ZM@X6pHÊ߈Ƅ8Ѻ̧; 0s*خ3DȊ,p\9%j ,Pf.89?o㥑BRVߦom߶ Z;8? -wIle16(Δ7"G2BIc.!|e{4]&u[|",Uu(,3Ӎ^3_1yri\;=S?N@q 7uOQl8>nONNV$jgV`Y.l=ē/i.1,6zVkKmeWn|c7֍ޯ_c|T/ :Jljo~z?oo?'ZWFg':֪ s_C3 ~ׂ |IENDB`hydrogen-0.9.6-beta3/data/img/gray/waveDisplay/detailsamplewavedisplay.png000066400000000000000000000063411211146647700267200ustar00rootroot00000000000000PNG  IHDRϿsRGBbKGD pHYs  tIME h{etEXtCommentCreated with GIMPW (¶$3,K:m[ I)"AO"~Q/$ ۲}%f%I$F# bngVVM]D\xqq!Kp8omPU0SDhDU9h4"lXk rrh{a?y3JGD]bOV9Uz檺#3?.BoGlҶB^tfJRcʪ̇28@GWiImD9 ,-lF}nKH638D8Ggmw|OUڶҺM__lnnNZM,i͒nt[fffptcUg%m.I^}/jg!i(ikU̻2skw E]vGOG}m'шxӒJZo8nn|UO~03wqذ-d?>k#+EU]#|83qXpA$`zX+nRU}~pp~wmJZܬ5 I_ڶIU]q1UuU #HZ5yBMU~ܶ5>;MUMқN yvvVUJ430g\y=^t|17kxWU=;/.qھ]מ;W9N6UWd?+Ͷ%hp8ͧUնn;3Șo}@6N(31Eی>d{a0he̟yffFUuyU߶,杶'uIe۶}IOf4ͭʷcE)"TS]1VI\+ƴL!|1'1?ZU'rtEx= y& OVaf>xг\lo݌= ywA.>Ƃ>}U!{ z*# Wz6W$^E I{znodM=^UQϪj)>|MT,@C I3=7_ B dA! 2 dB! 2@ dB d2@! B dA! 2 dB 2@!B d2@! B dAȌ 2@!B d2@! B dB38l/2Ű}Q!GzшWz}jH:(sB=FT#@OG!g z3ڰf$#Oΰ: zcO0,'l/IR,,,HRJ:o3$% Ȳ}2"aDIȏ>i{ϒԭʭq1a#>$ik#w#iĸ0Fӵv4`0(IlXU ӦiWۣ?Yál} Ua"~>"5V[%iQқTյS/eD|ڮxՐ'1ÒtJ+飯͌cھ/"v{vībeNI%d{9F7߲}f!KxoȓaJzOVխk^`FM<ߝصXkqrh{Aaf{gU]q/G}.j'vz~ܜJtgf>8 Dc^>"mk;Ag%5|03wqX߈'mﯪSZ~[,-lF4e]CU=uo%$)JmjiiiC//777'Imj+%햴73oꪺ\ mlw#5-:m<lwIENDB`hydrogen-0.9.6-beta3/data/img/gray/waveDisplay/mainsamplewavedisplay.png000066400000000000000000000161111211146647700263760ustar00rootroot00000000000000PNG  IHDRnsRGBbKGD pHYs  tIME  40tEXtCommentCreated with GIMPWIDATx4Y][cAA23W1 WMdgDE 5hL6YI5 &#†Q0tgf̈́:?~t3>Oskv۷vpFLv=*-'$B^jpBw1J2]?ܖm !5i-1_<eъ< ݔ,3 DDl<&wx< !gJpYʹj6}p;)uహ_M)>b/-s)as+Jp2R 70jp)( @p  7n @p 7n @p  7n @p 7n @p  7n @p 7n @p  7n @p 7Hqp̤,KR|F܀sbv;3է( )RLTUܝ 8f&pu% ٌ,3 n7GQzv}RԾRnW.Kpcr ]"$dyw_{iU]]lmKk3Xc[_l[mf Z}7M(fX n@C@)ShBBK캭5Kڴbx ٮJKp[,2O>N ._nܺ/s\5.~oHY2 E>Ґl6 iO[rFumI#)mNm+kwOS/UcFYpU5?4I4-#,i[wY[Hy۵}ڪ;w}7rVrMڴ.ەfmqG`x\U?&rcrBEJu@mMNd+SX,dXta.r4vCEQl|^߶?;懨7퇶QmM׶2ac?.23sC }jZFٚP>CVӗ]EwNP/W95uҬ|T(u.m\k^]YkY;mwӺgmV/;h ݯ_X_Dd23KI:DA13xCkdW+h^6n{c{pP f$ n?ofHT3W:tfUh$p3: {?wa3OU?pudcs^33Ss݊X=Np!I]'&;m;ܖO,mX-eUriD"dzࢥ0u p.ek{L&WOE_TIJ[{G߷KaJ3I[2-7T+8yoyQ\ {3 3dh4hd291Rշހ ٤*p,{ulTf[䤵/j{`:NC."oq[)+iuԑc,%Ƹ6ZWm[t7;(t ºd<$~U lioNN[`08mhyu\sb{ 43}6wN_rתmU½"™8*mWRũ.ĝ_*$ݎi";?^ێ"nEgi}mZ6m< (7?XwxWpq[UUSU珪RsSp4ږ?KUhk!o׺KLg[a P_שּׂV#VkmNg˲_Unup[EUU{0|6p"}v15.V`{nefvV g ۖ{4-a~hۮ>m5W/3N. o."_f1O_)"u.eX,d8v.riLt8oׇ#׵uXg}SemGZk?-wv|HUa/- pa4`N35·ٝ~'pl].yN<ZvV~ؾb8u{y]!qS`A3{TUd7NUU"r12pޢwȋ]`k[FϺIm˶l϶}:G[R]w۷~'y/p \V!Ocyw('TAy!ѽZx{EU1;Sp~: ?VտVaOӝ.8SpF: o1޳<\C~v5JiEkqpB3#n_, 3ۃqp0rc7SFS?[,rrrBq`0`p*f];U<E=9nUUW1Y^?0 a᳎`܀KU*u9Jw|>iyVD*v p.R'g4wC׋+D;b$"FFl/ms+R~jaz]}`maADs sGཪP;'t11730eR') `>sn '''|SP.U*c<W!ujKZIQuг.T \_"rTDyoņ6!21}uгHQö e?G"rolVUյ& \~]  Հ+F'׍-1>8!tuҭE^ KEN]vS٬q‚66uX,/qYwԦnx(_44Y#n๋#=sw>9_vTp1drc7-f'5 o !CDG.KTK׮]l6[ FՖmouS+ Uݿ?KBQ+ ׮]{ ȍ1wa1|-*@yct.wXDHYw1ƻ) U?gQg^Yo ~UDWӟmykn[ӽN/=g㱖""n"c:tm@/;TN[機ӽ;5`VT#U{5V({ʁc*չj?^@ߦ:\6~aA얃l/*1S㪳k:lzn6=wH|}O;yvY>|=jDGPuj޶u/l{zkз۬Wt}~l[]8ݥA)p[֟ B.\ꁪ`>T6LsI=;ĜoKqoAi]K7t1<ߎAMz}>PQE^|_{?iymm.1R5u$y纩1:߶4IۨNBu[wvimI#MecDV!5Ex[Z>kloyH{=̞u;tm}Ӷ^mI4QFKmuv} p?R#};åhF~[c<篛 TQ7-ޙ5`m˺3z-˩:HVN<|ס~}z|~"i9>R]!<7D6ձ>]j>w[Scc|uJcm˃Vmh7uu3.CװۺWyj 4oyG4BS8D)suHkuﱶVP;[_:eo/?\_?-ˎGܞ[Jvy[[F5OHd>.6ʲ\eB>w}m';yO})oA\wf˾6Ze 82Kjc9[F;>Ha.S|~4zԧ s8F7MW;zPJz&(eYBNmy4է2 f!3k5._CλMj }{z&3v.i{( &&\~G{ԽMt]NP;}\6o-M5YF~l:)umE[뇳Ψ_ca~Iy5Qxm:n8F:Kƕ nΓjs=&Ni4XߖP4k*]wȲkm|mRIsڪ_cغml۟]iylrp 7n @p 7n @p  7n @p 7n @p  7n @p 7n @p  7n @p 7n \Vn"2on:MU'_ܾlf9JpsMU?naJp&"R f8Lf?m"x/%8LˬTD[g &WOEW,3S"ܫ4ٯPòha&_E0Eɍ;Zf0,ӫ,G>ZŇ(*C4v*-=?%"' œ,3ӧ\l&諪f,˷G&7piU)Ed6zL^PU1_Q0P/維 n1[ccR쏙=jfwCxffwE [ãwo m"  Éʄ(fUҦ&Pin9aa,"`0xOUMRx2xN;@wEQ|PUlfOȢkhRxsw"]1B>X2w>mPD^c[N0_OgEQľMDd4`0H#pc|XDToDmGX5IENDB`hydrogen-0.9.6-beta3/data/img/gray/waveDisplay/targetsamplewavedisplay.png000066400000000000000000000015361211146647700267450ustar00rootroot00000000000000PNG  IHDRFXnsRGBbKGD pHYs  tIME 2+tEXtCommentCreated with GIMPWIDATx!naSGmPt?YDZeiPY`@d\Ȧ9pOgfTUNc+TUd #At0D@@DRLG(de)to!'F@Jh͉ L#a 0F@#a 0F@#a 0F@#a 0hw91 a 0F$e3'F02 0F@#a 0F@#a 0F@#.~OI4sJvJf$Lh SU=%Yhh]UO2xMfW$UudeBU$c\$>%]r}nQOqz'sKr=O #༬7>cd~[$_lIn/ZXlcatHI>&S^$$$oycv4IENDB`hydrogen-0.9.6-beta3/data/new_tutorial/000077500000000000000000000000001211146647700177775ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/000077500000000000000000000000001211146647700224765ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/Bridge1_4th.png000066400000000000000000000755271211146647700252600ustar00rootroot00000000000000PNG  IHDR^p pHYsutIME-3@5Y IDATxy|[՝7վKmٖݎ8B!@Be)Wyc`f~Ld`ii)&RZ(kiV9x7yy^IǵYdq_~w;sd}u=2""V),(P*܀ CvP=،+huQaA鵎!"zujP=gqiaAHnbsxc'vuva%b%2UT`z@T[TEPpθH,B.}o_tӍȓa%hG.D{EhY ېpJ־uW-ȓ-AXq#BCXq>G?3sdTgfUi6>j:?ϝ9X,3;n66ܰ}J d~`eXR^1.>Xo6|Y=slq*N96n }mC>uxdؚhܰyD"1KDN̩Ot1q6ݤRk]yĭ v.+:MnqJhmxˮDtwNG uDa}?h#ler?f *hm~WPX{z=_9q? 1Bt 48 \>)t?{ GFN3}>??Tǿ?ؓO2Quՙ䔌M[w<2< Bz;w=:h``[Zv;bX"M?xCL&'Ĥ{Dcq yMgN4*J"%iY>s#  #q`i/NwԈvmh5ěK&W/En~c⨥ڼuSvCrL/R9l$"]Dr:'?ktᬷ ]Dty޷t3PQJj~yXSc.l%[Z*3B!4ҲX,HDIJnX::b5&;kCk6 `W)d ~{<[PKÙ釔C͍şݏ#"+$곞`%j V8QuśHTQ=5=SQ >wk(K"#"x 3+S`B!\{?8uJ7Q{[#q^LD6=Qcf}}>?0jZ g|slo_ʡu̟/[>)I"428w#V%"DHDE%"CB|Kca=W M4$䐶lH$&R$ J/!bZiY}?*q~LpK>P${ "5+r JG B"koi 3ņX8kW'3+9D~/?Pҁ.ޭ9VO cQ*3sͺ16myӖܼٲ/RWirE[d$cmCe[oFb|\HDpl6myͣ#V6voٵK"8?7C)"=˗h"DXFxa0*?_4*uHfZ!"+eD5[hcu8CC|%"d,嫙rsa .jG&\p9V)>YW  #|j,_km»h2sMAl6뚚w]ħ 9\0gŸu] 23`.Ox^.qS`~s"pi"՜g~$KG`o"WGħ 1x \':S`b y ~W1"dw8jHκS`jlj50 Tbtdټm29 Kܖw/ԮpDrkXQJ>}j 4pe/,,,~7m\{Emo]v{}N]Sh /ᭀyG/.*&px=m|ZP~^NsKu] uz鈏KJLGV,}BdBz 5՗*֔![,]vmjD;;5՗ݸٲęE,}7n"Vr\ =qs 70qfsߠﮩ(OMIC/^Gs"od~]-;_V[wn}IIN߼vp_["zx;';{??=^T@"$''ƑQ!++ii)UȓL& |b1q yĹn0or,4ܾmKA~nFz57.5u'?;;}np=Uk)kM7x<+xv>C?<0mC?˿2P&};O646 4\ɄFZW:<֨K<-ܹ*ϧѨW xZ YYbuAy]>#|h%|k*&"qef~o۶x;=-eO)mOS=BDSg9s\Z*-5|EGV*O?o~? pU]Ȋ%NR޸}77 q;5? Q|!E@_)%I7nZT*XW]]P\\ƹ}/??OavؖyKOskctZ"#E:)-z>zg&$_o߶p>ė?;oL?jkK 5Z r#*H$tKYd|ּ> *2XT*H&egg̪;j&h+yaGDlґgxx$6VDDii)S'Æ7zҥF~L.m F`0 cS+#~45cur:.*"8;UXYKmEI |,5;uoc1=y{sј35b{Oo9..v'%%fg=oѷx`]X~3c>X`1M,HT$B "0en5tZg1bvLKRnٺW]YC-er*eV+^Cl44dx[lٴw.joO:f떍ٯw߼=ϭܴuZ>DzVBͧO`tåa 5%޴ٲdښZ^P(2rr'K0Rf=,IRkܥ0Llllaa Fer:}o{o}bel^_6>oL<  @h0@ 4kLXܸ{v%z;l^#8y9p5(/z4ml662jjNE l^#2,{ u% ߲w5| [A ^B!,}f D{h8n9r㢈Œ~2F<J"EYpwCMD422t5B玞im}ݷ%>ZhSBvhxtX#xP5e邸XU$bSWDXz:K"4_A7BQN*Jr9hb?Ҳ rs'55|SaaX,A^#*''x_ņ,gKq?X[{ %%.\z:K&4s?8. D+3karr@ p:^DllBjj GN cc"<zk7#qB8?}wߊrEuRhу_~jv2P А%BHg0hpln#"f82nL }MٹH-"%-8"b8c (XLYQ` Ev;RyJJqCC3#H]d29Y 5K^UzJzLoKKK}/,qT*nAA bCyXB!vTl@007}- :@D GV@LL\JJ(6ζO$/aCN[P\o~<1e1!<,pq54~`LNdaw =))YqqbeYZ[_!tllfIOMO8ntԊ"mYã!c*"{-a.'~A(3othuVbhHD==~/11hL}}]K-~?>>Iq9͇BQJJfFF^[[XG%Ft} Ŭp}.~fTUթ%>3? CZ/>\;}}UU.^ qϋkhi/ByP^(/WRktN2FwU!"d@TleW>[E^/,*@4K7m, '#q~ +_~.iS+ O%b|])3 5bw7iafO}M_Ѯ¿r$ i%w`=l]Ŧzp\V(cqqEEEee⤕ٹ ByP^ V_z}%a2gF>( !,~ K_Ģ?(`@\ei?r>z/:+=YmAY.چSMeDt-2qv,?Y2tƲ$Lz6diͣwѡ#g:zKA{r|p}vfZMsyד$YxZ@h8ק&9v錉qpF10.7. 26vth"{kr5t"4CÔ":sE*ݓ:~W3=p-tA9;3yU~N8nx!IlXSiחQWwNJ ^0aͪcUw_=8RbE|7h5t"jl8r<<]͇M-m=F+44w>WGS)+֨CG_>aBj*\'2Chgz Y))FC~nz}S:J9 L37e*ZID=֋…e(>/wD.T!G\CCcR|oȐud~;H*Äo۝j">Vkj '+=i}Ez;(W$bܬ^c""kxl>ːe DIJ@R*de=Gڐk/6/.KW*d')! ,Xl(޼@^€$?ypˉhuAnftgVCê&cR|FZX,bYLe=_䳳5鴪f ;|~ 1B{gT"^:⣧{(iu: cij5Zf"(  #9YaKǗ/ uuW b2f0Ds[Z2ګ~I٪'?kw^(/ 3EVFdH/ENtn .\NdązO "+VQScc-}fO/ aBb `Ea}⩢2DLSyeB:a6k9nz!]8~@f}M_Ѯ¿ξkBgߜuuB&p IDATBp8S+***++'|#.ByEyP^(kF]0P0p G~H վ G]\=4 buج̔!?7oWd[b֔c4bDck TȈhmyLR94ǨVk5 p".=zlU;;Ǩʊ9Pnw?ey R vϔF'{7I@b~ڸi}B7^/qbOKOE,+cGE߷Y0&  YG[LR!ؾB!V4W׵oX*dVK5CD$ ǶnuL*ih67v%ҨW2 SY:4|y?j|Mi0U֑WYiO:xM!Jh_5x- +Vff bhxl>ːe DIJ@a8CDi ,=5qT[*JrSrSz9EO0D$IEDBåQc4y)y]yH$t8zR"ƖTY)IvVdN Vf&NxЮ;yP^(/ו-jNQ-64\"n^Q+ht>D5vy􉧊1owkh9l2Æ}<= _3K^S᦯hW_g_i5!ӳozغMR{USP8yTTTTVV.NZiiiP^(/ sQ۷߲3"Sn~KDz&0HbW) .ZJ.S'3Øj̻&/Ф̺|we$kj@Tx6GKm5ju^V4"4 c'7 "ˈNV!"Q'&7YN'BC(њ ;ܓO3 7} CCcR%jB$ݬ:CD=jqq1j kVe%z<셚p;/.ШN瓣N_FVL_3>V[*C! 5vx<>"sZ"j6i4*ŘQ},zy' zEq٦@nzaBÂ8rejy9Y)bБJ[{JNڸn{FD9Y^odUVDS∨ta6>É驆cH$8{%BVzBOU,ʊҬgiőz w W&8ɷ6Wkh;_՘yC>F3b)FܭfܹL&!"c5枡N ?./ΊkW0uXMj*LV9kZ]B "^~22Z jOQq& NvCa=xXV,ؕxC1", cR"⃳1[RB6u4F!N="0xq+8ʔJ˸bt hCM ?Jƚ ;Ng ùƵ bcUMSa^Ʀ%LnNB!jAw07+9'a8'T*ev{h;չ2lMO5Rʈ(e=rYiO:xM!Jh_5x-Hю#**䚌M_P(3ݨT2Ғ渕0sU~\.3­V[ߞQ+nimz}j<>Vֻ'f< cb\&MLTQѸ2Ud$ٝvY͓:)r"Z]h;CV.٫:e}N4h傦Ihp+d?{[:eƼ7kiuϭ눨?2kfx MMyM_Ѯ¿ξp0dz)=o[zGXz|lu勓ڵ{;/ By^|zor~Q˲NbLr2 ,,ĭa"/sG_2Y.dJ#ۃS`EŅzO "+VQScc-}fO/ aBb  Zp qEy􉧊1-ʳn_Y[Ww^*tϻn) cƏ\:;;yP^(/ʋI.({(;Yy{(3ϽH,Zƃ 45.s/3Ǘ0XQw ˻ ̛L&+ B DC^ҭKRe`tNemC)Բ\"Pz8;XpP&nX$IXfsU5ٜMݽ+B@{rTag1A4w=MB7YyXxZXfs vS[7G11nJ,qWN"O dl̫y2^KQ'->qODD'=n~f5{aJr9_WrR_W&ʋ I8ݘ~X%%m\[RE"wY"QdcN훇d%礪Ur3 \ie3whEwܶaJnwL<͘Q)lNSG_Op`$}fAsgwl $>tyfeމ 2\`\DZ CQm^_jL{,cƾYKy82#sҲ2"c[fttYlMY9kl0#'.;*a"8ntr'i)%YYȘ( =CDW\FDn7V1._4yXoVgP~ q!Б;ojTy9y9Dq ug+/߰29ąp} .E Ϯ5>+ rSY` )8?30.77^&N7g#`14{h'n/qa{n&kP6`u9X߾;3 Zͼl+XxZE0ZCË|\"ʰdlp^FDdw:Z =5p:~aI64<~? 66{de$c4 1ᱚKm==.T7&'ĨO-]sڮXSyZs4{(+=(s`pzJ~Rp%0n O׏9VNeމo&b?84X2r{ą]7n8͇;9vRX(ѫPb?{xŚlX]k1F0L^CDHVP1cEVgP~ K󉨦:"r8%JrCúꦒUk>E">Fku邼T"j6u\j'"2gttƝ.G&Rȥ1jP@DVǬ.!oY/?ˀZ;w|BCJNDCQuTJ0eFDKDvz' +UQ!Ȩstt䊉G &hb>kNW |h8GM &n8{l&\ YƃnIəE is|&ݩQ+cc-d&Xd]EV*e:LժaZJL*c'B!ۊYiO:xM!Jh_5x-TK{quaWWV׵lXVRTʈ(+#jMWyzEYi ͟5Wf%eR"J1Qi(]nŴqeg$;\G^* RN;ɠr9.L4؝Z9~W:d{{aZFmu&_Tf$"إ GRLs2ƤXhhm:]qK۝G &N4h傦Ihp-`!^#"]mSf{FZSwB3LѬT+UWL5_~qW<8wjIڽsH0iP^(/׵KG]hR\Qt^C@! `![ D+P)4^d(Lv Qa![ .\N)ązO "+0XPXaK K@|" `Zʏ>TQQX"&PʬX/]M ñHO\:;;yP^(/ʋI.4\s/"0x BÐW˹?}(8xwmDZ P `:Ln3#G;`ZMF9TtX`:,|7EDm֧}7g{Q ©mh0ZVKDꛛB/guQj[ Ţ򒼬F%06rt|}/|u&":SksܵUu-UVGo^MDU햁W9L?ܓ#$?Wo߇Vfd6 }5=;+#)^V/a8~J(nܸ~Ni!-Zᮨ0- B7CCL1:e:z<,-^=0wd,Q #th"{kr5t.`hz_Cf-rBZH Ps{).7&7>ikhhm3"ZL=#6a26޴$/=5e}|"&)1-ed$%;trR6/^SV)F~aH [q]av-3 IDATfSqDd;0/{N~N~N Yd" ]&YID?bwikZMcC*S9h5xJUVtZ(ʹm*2dW~w>oqS11ki!-ZXgDݧK4f1:L4f ?4醵v{{ɃC[+ri[gظ1)>3=pYLjݲIQuu[~\RC;SaVSD"JNQwZJVefp&H%P(Tx!^SB@Qj:ryQʄ\ρ@hXR .=P'}}0 ÐﯭJ$)) ~H i-~yV4BqrY^KD3/1 p J[Lf"Dd^~4"k4:$߲1jc6{zj56w5k5[oZ)S F+URB|OF^ADDB0k3"tGZHk%@"-iEGbktJZuMRND1!(ܥ5W6v9_ODJ֭.X xWc6\&!qƝM+w !KPỡ,c]6B* /wD.ÿIoܴ>!p^8XC^DZH i!-j4x}Nf^~Vt{X .marS 1vg}c;3jַw tLDLNQ"ַַwwZ{c>/+(C#2;Hp6,˾qϑdCLFV<>{MGclxNZ{ cbt)ښ:"z{i!-"aHk>V9_b44オauZ1)WYR %ŅY !L7Qm_z;FX,HNUQTȼ>ZkQ.Ka^Z~n\.]AWFEqAVJi<:ȑB.'_K|3/](;wEx#-VXikry'%yY)u_Km^ 3#5GlM]|\_5NM6!MVM^?/;%=56hn]&$$&ַ[xpNi8&IhpBٰqݢ/BZH i!--ཆ?{"^P:eƼ7k9n8r)\45啟 7}E :JS鹦/λꁇy`qV]W8i}]w.ByP^(/ŗ^B%Bhn>m -ཆ/Etn հDBH\!`[M'~r.iSKBP~􉧊1$Pf=l]Ŧz=jP(%****++'w^(/ }Ҩ 2 " ^0rO}*+J4^R\5p"TN&[o!{(#7!~ 0!LXg(/AܱNo鳆,s":WkQY` )8?30.77^&N7g}7BEDž=﹙8voDB6""\gY{r'"3Øj̻&oS ߕQ{hQ[ /6}wKsoll&{(_#y)|h(Q潏2 y0 2(^FDdw:Z =5p:DEm5<~? 66{de$c4 1ᱚKm==.T7&'ĨO-]sfLa 1rJxɔu4yAY gԵ>z&"*+ ^gD0gz}D|zöAhzZtZL!5@Dͦ 5Q9Z]¡>0 V<( ]n5|Ur"J)؈& Xq aSoj1XmwYm2N~De yDVZ.۔BZr[ _VëfԨ12Q^!Lt8n\:KrrGUJ*GAVsl'rR>x- z-q Zn,+)V*eDLDe;=EV/E}ՖW&@`X;B@'5$URf2SL75 ^AR15 Yd8` m!oeK^dk}{\-~\ߵ=}=,Q833W\4)tU%5FÊml~CmeiTjb2EdKmMEaRZLV5Jj [:e"2|yTkW\ȨSĥ̌Ң܂<{K{ߖMt,vnÑby٬6u"(f T'x(c:mw\4jSȌSX) ˜SenjM{'?lŗ~< Gmݶ99J"H/ҋ"%ՅYEݭ1mk.n3z ugasq=ET\״Zz@Xjook݃Caʏ{}|B IPZ2uEgSrH766&\eeew]Ez^T]hʚyABè~)H+jfA]_V'ZqhPxPnb6~ *Я!&ijrr>w;?cpoɼ8M/XYFDtttEWW*[UK  "~ˇ.\ ~sG -g/*Kv{nl8w$" +ky4;=xre[(_\ӿ-/.٬];U%D'xpo_yQb@TjXV^^Os:mw\4jSȌSX) ˜SenjM{'?lŗ~< Gmݶ99J"Tt]"^<_Wڵ˾ t0&⾙d8BSCCHMąHeamͪnÝJx'ox]6Wu3 9u˕%[6՜8|yV*˱'P2u2b,9hw @JIja 7g},".w㺪5SC斮UݰyF#o}$=;z#6chX\a߉%RCX< F\,RCKQD.]QyixDDiaʕ1"2M u:](P:/y~Ӛ2"/:}k¨~W;A\ec;V9'vZE$aSN{p66,{kJ򳕙78}@Kӷ۸l6Hey4tBQ"۩<h-5NK;9sXY h6tk+ˊEd֮/⺰mv5ӆ̋f٬A5S:q,5DDfi bV+:?Df J\X*s/POhz85?3=ǞEg}/#&h8rl9uW]Ez^x'/.4̲d/(:nP4Xj#H'ʀTw 9Ba&^*ij԰"*.|kZ-q,5Է|P0GVWPX}`g =>~}]Ɗ $Z(}m-:dr\y$sԻ.ҋ"H/K f.4c eSϼy aqs?|{5v^/ ZГ p-84}`g e&f`B<[(s7SLcSkkgKk*V֭-]UTqP8+44۶+[Yh2 5=w1 o?;q/|9qK"r%e};Hñ熆3svjDaqOfvtVRD}EyVG 5ZPaYymf(s,d4w۬Y+K VcCǙ>c7E"8 ""Nf>2<\n7!*Ro`2/ Cضq՟ؾ{  s"xmeI~vqxiMMٺ5V}|#_2g(/+ͱ r)=7[F:H)I-542EDFO4n<ȶv%apʺ 9zwtg>skQAݖ52:{dGuEkY}0?<1G'L!՟RCk2&Cd81\}kM"1dKb6EdǶ;li2E6|eLD|~h4CQ,}Flhsv?ƴL N_hZ瀬0j#jI-5Z]vuũ֮@0$"VpJd35+2#".'l 6kViI|xd0 =q}d(,+#cGDT[k׮^e6AŜk_[Sv*c5+ a1"0v)uɓ~}]Ɗ jE<4K.2m6C>{DϽon>֒.:L&˕G19*++M"H/ҋ"`BŅ×bO=>C0UCp8>=~ʳ?yIu9˒:]bD 3384}`K~ `BRPN>pщ k7ƶsM"r035+ֈіjUukueqC9#CyR5KՌ?tXZ;{poNB"4qOfvtVRD}EyVQjXRCaޑm>?'۶a]ᲕoDb?qDDnf}/ex2nBCT*xÆlrۃNKjQY^R:;۪Ѧ3gEdm8;x񍃇╷4C_S׽G×ǔX,O*GeScTWWX& pܥ͝R&Wt0&⾙d8BSCCdkXDDN6w EȘ2fm7o Ý"?NEj4\mt:^/_e򞾡̌\_HxuUM>t@^bUdx&e;aX-uRZjh4Ddl9-WSg54k4۳q]Uƚqc2r|Ӓe*"2t~8GbH8IDATYnvե"BWO߱5?nF\dXãKWGFRCc6-YfeEK#"e6*<7x Qϵ;t:D&wH$3Vɘ)"u5u5Wh675ejE&^8tBS:dQ w 03jRΞ78;( ;V9a=)") ^(,53BbV+"CŚeŤ5 z.^шF:jh\W;)Vfj*Kx:< 0BHjᏛJ/TO9oY7"r;6m\We6w ESE۲DD זsMXjW2 yvu*_Ǚj*K&C dٖzCr@ j+Kn2V0("[jk* nR<9sXY (捫++J+Kؘy2kn VSm{58]Qjuz F<7us[wIad4x`(iA+(,>ųG_.cEBy->sLwd2\I19*++MZ饏CI Ez%70-5O=>CO5QSǽS Vy^2fbUv`0 s8(DDž߽{-y%@m:xB w.\PJBqxy7/"9=7WD~o<4M/XYFDtttEWW*[SŭԨElWۏ~)2._;vg 5 \ .NkgM4 |6緪Dd'xpo_yQbN+5|gȟMCCEO߹1gaAn~nr/^ysd)"/"I#aq]6UDyyh2nBC Έ $94 ]-5O)넄ݝ+V|4ݖ_}2Yi?}SUyk8_kW[-&?;pc8 l6 : ]|{o7}$"7-g8 o&Hh8Y.#~ nj4\ —Gݠ~Ӛ5e@܅͛jZfy֎ނ}F1 \j5Jz݇GZDtYш ?;lx'J:{'Jdeq-#Vbvdh/Q__q ?}Mʌ{ NTU"rԙml-j 9zoa]7mYWF1NoPnݼ:?w]"RR[Y^?8ܢ,ojB x= sưG'L!)E?}|)Y^bef⾁ѱi1l[غ.Вe8UmYzD4۶-5pPCP5a*91uyӚ2JoKYaFBC+ij@*PV(\㶭;16kX-i\,DJ)^xi\nڶhXqxƫجj4Ímn[-Wk44b6 |\pW~_^x BC4 Ce_WԅTK_]"G'.KR𚊕ukkDhKGGWt5qժ5U:TN+|O_Afd7o\]Y^jfi1WNPkg։ ,".l֎ߪ]0y}EyVCP^;44Vv9smU]j5P|_jJ8 ""Nf>w5MMhCp5;4 v~ǝlD=ȱev{E0wǶ Yf^g]6VVg#-uoLk*?Ds@V qP{h}2vh'wrC1l2wy,no鹛G&C>ǒ>*m@hI;WÑcI;u^Ez^{'y|ϿM*BC$(.ҋ"H/KA2ʘtC2@hDE]Ez^Ez)PBZJŋU~=>p9FCArw e$ (.ҋ"H/KA2ʘ-! u]Ez^饠B e̊ e@B 4D"Q"H/ҋ"T(SYQ H7i^LH_)3y. s?Rh(qDhJΘ( Gmݶ99W;wݕs%ÏXk;::|p2. BY]" eWz^ojҖq?'l8-vյnjxϵaԢ{r0/GĽ09#C"oRrꍆBW/+Q -r)/ňU̹gODICQ.TP|^C2/Nk#g>q"˕ATj^w  At E"anBAϫL]w  燛*vf3s?h w TrѮooٖ#!5Rɖm>\^" w|e;'HoCoYvѼA8\V"rϙIENDB`hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/Bridge3_3a_hh.png000066400000000000000000000762311211146647700255360ustar00rootroot00000000000000PNG  IHDR^ pHYsutIME E IDATxy|[՝7վKmٖݎ8JH$ei e-PJ0NW~ә_iCg50v:Sx P(&/"ے^Iڊ,[8e/ͽG{{eqOqQR!81 9f"BXe9huQqQѤP^Q=EԚ:aBR\TDDh07 ~1gskqQHabwz'ta %%2UL`fą1iR!B!Dqt7~w3H,B)}GoCw~~7LV&aנypQ6QRZ1:fG9+kcCn jš8uib0kZLyԪœWG4+;2D!5/ bwqAFp_cu hu!O ,J24d0VKq?x?-m Jks~}:ݸʪmC?}~L_=)HS5M3br?נ\}$^dԷE:)âsn'lw>VkJ,l?KX[֋V=7."h4<ϟ=LVT\[/4ՙ:w9RiL,K*&$&Og/˲gϞ+-Y+m'<$m#c֤d{%),_"rgO22xP(47wwݸHEcj;*\`FeGs'АPX?wݴ鏿uAQYp2{o:<4p89ud]B8-G>eOOܲF~BQks]SC7hsǍi@"m!\_J*7Ύ|/~&u\ң[5R^W4T^B9ud-w >sWpvQ YϜ:?Ö!I)iL6'?{abf[`v۸Za{fVD"uK:kϙ:'r&a{<e̟ĸU.WTb+*.<gGB%,̉1"]arghIelC}`<܉<]w/텅}fFD~ fyάC6Μt|oL&/):;/qV:VoĺM[P(w9|{%(AM[g slמDnks|}P %4?X/㟾1a6msf|Wv9x)_ >Wn˿Kχࡿn/+UM? >c՜MMڶs/c``pӡGpH,va%1))QCH4dr"JNI}_6Q=^\V~opldcB$"Xc4G9HE0ۯG =λ}HGoX׉"^C|adrŃP(lm핟ovcJoqo'/\ a]_:oůGp>y?$?z;>ec2Ĵ: kʳ/(_}a >Dt''}~X^&`2HdC#%"/܄1tIlѺfm!g S3h|z# }^.rRtQ 1\.&d(Eigמ^|+/só"[`""0=,EIƍ[vs'$R7ӽ_z|:BDrM1vyo;;|oCw?|ǝ+PQZzqyZS]bnb[Qz0B!5ӲX,HDIJX11n5f{:΅C Po)d  x^GP[#هm- '&" 9NJԒM'K'"x |j~?zaJso($^}yj~2Gnپ@eڛu[7jz zʳKlxh_Xɡu,̟?;>3i~q"1mdx>$'ƭ>KDRJM&x3\GܛhzI!}o~SHL~痤RIRX1CԼ3rn?qLtN*6gBX,Ljhޢ+()(* %` 8Z[`p!\o|B$I'f_!SI;x7<OJ6zo(drYr* h4ڸk]> >N|k`Kjև\ŋiQW>RnaU>ddb`}z仜o U >{Z۾\+Vk07YlySjv w9;4pi"X _Pk0 2'5V;'" ZyӃ$`NMD_ڽhW[X!&+F@|kZ )!_?F!2r*9.B4R!XZZ[1y `1w@A@$'?}R @42 @O_ %\0Ň"K }o Wm++olPIDz_QWp Gǎ^&~[lLN2ыz7s&޿wmޒ%.>:9TUz.&, dkkn$$bˊ58`zG*27/;.NbY8;wf߻o70(k>yP$99y톆:v}e{׶W~{k-C9ٙE:9VO8竝NWfF[E VRS +.,*+,E )I M(O(S(>RՆ ˊn_/@OXV8soh:ڀ=;DBZ.pmBp`ТhtZ톪.Fc'Ov^W?e&1!~?266Өu_i4F _yeJ/cFTQiIW!1A*LN:j_om6{LINNA~? SgB6ՐH$)IELbqFFZuu d%ɂX GB!Gpl/*.0ҀX EDO|dؽk۾wٽ0?+3LLe"zq!Fs1EGNĄӟ7aέRߞy.ʮ'?K2${'?/d@xU5j 18k4e(WKs[NNX|CiP_Wψ(11P$ZcDDBDNMJ2޵TՎOLW|0 USW85oZ~LĄ[/\ '$~dW8dgg.p4:j꭪*GQpJ=;^T\\2YF@R!/k2mJꚛKKKhhon"5-CSP޽OoOD(-,4|ٟ9{a}e߻#MO8cX[U(wnڣ>{.]YiK*r{z޿wWt Mk|^҈l.@+r=. (abhmFBq܅Z$IEyIZjJA~nk[Gw$'0wt]ZjʏNg1d]=|mMͭ!DRYQJD6"/oݼ!^ySU̗oț0e0uUTtZg qbL]KRع_t\߼ Cd^*e;;;Kt㞝Dt_=in%45xmm9''5ܲy@ Ho,-)"񉣟|ͷN竏9rq!EA3ֆb=4\H\HD޹(""ą0@BŽ-ֹd]аruu^MX*o}p氕7yF"zgmݵ-QtfVYp܌^×~o}>4 AVVFDzFǍƴ;CB8^^k޾>'ɠ?~+._)|{9IƟgH[oAumhk% aNNJz헼^56^ "O-XA!JFD461UuIԿ[DLFfzi:\`E_yCc/}W-0P([RinW[[#QIɆ MO>bKyIOϩV\\)KP׈J PaK38.gkh.[;D8.#E~S9-055K \&o`">>)==l1Tqa||RՓ7Vsoq' 8cY?p7^`,g;DrDt,44D4:j F"4;9)NrrL&w8&S3.@_S.Z!vY"@9!*rCyXAa`G({<.TqМi$)9kL&'"uqfq˷ 8<3z}CBV3YsddX8N*i9!<А[y zU*MBBrzz@ H2Be0ѡ:0͵{sOOSV/Rfm-LY(-]7sH^ w^C3 l %OKIHH%,˪ڦ6ۘ>qĄUx-ys&&iUDt;*#n]oG(;otlmbhHD݁?99h[GF,@ 11Eq\쬬f[G%Qfun~?}wD!sSft*>Ŗ y96Nr2T7>\Ah89jT7,Cc~˄OXl].-6cηgl\FD}C.'%9>t+Ж rRGx^U|h#z;Xeg٢ը 2 2 DtLtv'hn9sf(ը#GO\~aRQZ*\'2\@h8h}w% 9iiFCa~fSkeȺ J9 O37c*ZID]^և¥k( nuD.6!@BCCcJud~;H*a"w9.J5u)CcL\UIJd|kR qB~NڇτO^cLԢb2kxm7A˨e DIJ`V*dU=Gٹ7\2m\ZTTȜnoJR|<dbݱt@o`zJrR.橶‘B.'E7 iim /C-O^lTx. t3y7+%QV֬'N E­[7( q!k64ܿgsfznj0LBΘT!0KsaBd,Q0#rj"%z)tYG~J$%P |BhRƦN>J$ǿr'U6t61$'lXRE"nr{X"z[Rg1AUrR *9k;X< % T(xYDCs>{p5ܷ>lGVYeo.b} 44p-]w[GD^}o/| FqK>h89jT7,Cc~˄2 U*\UoZ{'H9]~@Pe|WIqVwf0/}Ce˶v qYFB~dmc˥no`a4cH(<{L݃| kH*2gja"b5 eW_ЊB=ǚk8q'hz^OW^ۿ-U󇆇ٿgV*,$'.5vTk{e^˯4utRsSMgQ%Sy{-I8Fi;eu R N'GI`b~ںmsRW|lj7#3%/ąR~̛˜80822:>jh7}"Jŗ#Tnb*\ZSV^e㺰w9nR944; i"q**]]!tZNqBIhp+M[nB!V VD2TJ,#O~Vd LgSAVߝz̖%R'HD~НuMYHaHMF|:#?ӷ?8{|ǪpxW|*';|w^/ uedbZœDT~G WTiJ"9&,a}z=uy5:a-cM]G"ą3bò^TiyDbQѷ"N?QkvECѸ B@ 9Y_s2rt֖SǏX́!?¤4@lٰeoq(G{B,\vg^[xb_m7ξNabHx"-_Ѯ"Οh5a-MRgMSP8TUUUWW/O^===P_/ 1tȻ3Ӳ"O?H,Z\pǹݮ~_">9\s O$,KO3&raNexS '˘j:%?إ̺G^JIԨ(=P{J+GYKxFX_QeFgeDDS(LM˅ qDa^L"-_И}sZk:sѣFD5m䄄xJƆ-{=.W% #wF\V]RSZ\msYx:ׅ[ˣPȴEwgI1v-Jޏq}L*ii72 eřa TJL] ('O^js>|&|c$XosOmh(`DiT*dY) |{8{]a\.3$"%khJJӨܸqbe}~J}s19^.&'UvfL*ǩhUJrR.r9/N68\NZ9~+xpx64d-Zek7oXw5ddcrBmCM%s&zß^5LMI5|]R)c}vSŒD\&9U}N4BIhp+ȅ2.uƊEq6 ]_oyUי̓R+U Önm^}?WqS{ܿ B}P_~Js=7r(cg>6eEJg(<=`UX[D>'Ͼd x(FX^؃S`MŅ~W (QkKөG,@O aRr VpKqEy'JJ*1#g^I*,m) s揬^222zzzVyP_/Kc.(G(yS}#}Q$k.n/~򃧾a5K VX4Ln4ąn?%K1y )5Qݥ*8fSMDt32qn0- -AL&ݹ"#-E&>l7k[]eoZ;,VfSwoR DzIZ|\úG^JIԨ(=5n l.kj2uq*=dbtT *2A|zO/e45cۢDH~Q_JDtas-o^& M-|,'HMN"mNM1$&lvգc6"JINغDDB9WD}QåTcN楫Ur7wAtŢo0Z%w8fLN֨ C6=?8|cj>;àR9OTy]Ajj\5mzoE!X$7~3h89jT7,Cc~˄WYVn2rV}k "Bt;Aa^FNQ$~rb]%Yݽ}+0/}Ce˶v qYFB~dmb&A!"&wfX_q\\?JD D4429BBbRh#z;X `mٿgV*,$'.5vTk{e^˯4ubӽcKYJR|n[{]l^R. KPg[ qZfcƭisQk$"S`cK/Ðd%eaNVG[z TH'l.6B"GoddW~^B.f4g6vYZ'eH y11!nCe>N#Me!9+ 7VW9CAҌ bȘoR" v" oLBDS;8.4:T*D?8|Z] $"7G >RtSGFFG&ADRaps{vV)Қ¼-ׅ%ft+Ρ b">!LlL7ڈ*RZaQ"ҪJ].W!jA+?8+7>x춊>yM!_IkZ|.(4mvǠe˲Ɇx"bY_0!dB;{Á@ +ݐG(m`h\$e4t jtiu: ME~|8LZFL^`-c~ӗi^gXm3qNh΀8_|E:`Bs-mҫ>tj6n\WyP_/^xܵCI)@iYfXH,BA@ǍB%K1l@Xv~r]@XSD-M erj"%z)tuaI64x]kMOMS_DB}:6EDf꫿EDnc,MOnL&iqjӭKFvnuYB#^~22z VFw O|BCJNDcSQuTJ0eND^GD7/ +UQ!$SHOM8:^жG] n8txg#\ Y'm)%I=]YE |&åQ+d&x_ 㮢(2V^jU0#-Q&XҌS}M5>yM!_IkZ|b> B%ʮ*4kl߹$WQNV*54Kr3?"vחeR"J3&Qij]Ŵsf%u8ݡG^JrR.頜r9/N68\NZ9~ (>W:jYxaFVѤ}욄M&?PRa$"Rsg荆V)flyFcJ>9ax|3f&?7ݐ7p5t1vGCSgGW19!!ApDe%qCSgCSWW`Wo`xj9YFXd9G5jenp|X}LMTC\FV~ܻ}l_1[i1QS^ø8]j|kF^ y!/䅼p^óҌ8C7wxN6$>R_ؾ8G1DٙF"jh2[sE[{* ҕ W z:0k).(O˥ kը*-IKqz9RD(?;p9kxK%;;k a䅼B^ u^C?,+NJ0lB]j%EY)D46nojj; zm1!Z'.ԶjjiIGIg[Ԝ M]28#-)9)k%,ģDū}tZNq4}LZFL^ʖ|B^ y!5n 5d~ӗ)噯3V,}o8r)R45_|E:`Bs-ҫ>t|$Οٸryz_}B}P_/s?{%B+ (!Ķ%|2BCض | yx. SRX Y)װ[^ODݽ6$MPF r0+#Yx]kMOMS1u"3#y]a&q(ǐf 6SzӹmhDdu nh_VUY>+ .>r]{ *9MNJ)ۉ tYq som7xmYm2&.~hDkzEVZ=^B}Z?'yp_Pj݇e|663!pf=eR5f3[.Ejv&Ä-Hj̎20aL8|Iiݲ%uWjRn~گ߫}R×ZjkƝnŜm~qYZXzsis$7nјvn |4l⨭,{g.K򳕉w>y6R5<44 2`"~4huVxPS7eZ(Oot9S]ej2\.WrnWYYYooo"^ċx/70-5?~%}kH ^=gO1@ZQc5 zP. =nd0_g e&f`R<[('{ldo`"ƾKyq[Z: ^Wn}hno&ZS\P8Ν O|9xd7v|vee΃*"GZ.\y+ц C,"Ov ^nGKgIPD/._l=߭]`Q8(jpkF *5,+ eowَ1gIQ}{n3d" +Vc; ~!0J-""Nd # snP*Zں; WWed;zDdMlV{&? ":*KlUaZ٨+OOLL׸]Rb8 G0<d~q,5\0Wz}"iCխ;xM-]95k,Y?׮./m܏dp'{ZMMUiyYNSs~5 rVhf\ZVβ02b,9hw @JYR/}Kxo`h͖ "rDsWy1URm\6V]Y*"͝'N9_ͻ{;+L\];68bVoʘ%##SjE ?`|'԰|jwd+c("mW]xM|ژɘ)"#"2:Un}ۖݢO(z|> E_-j EYz|}iMZPHDȥYeԆ} wVe{0jT9m25ju._k6l,Z͑-[MZ+Kwl%qT[Y[ѝהg+5>yMqz-ϳ7j<{7oZ_i2~5+?7_{GDuoXyCd(țVjDd2T[YZt;FV[SQtCRFPj8M`púPHFF϶v)Nn32+5nmזVm~bM-۶mv5 pjZl6fL oxRCO~L':mƢ7\kʟpNdƄ)dWejj׹WFM^|E_O<[wlM{xS︈[#EpAy8ty X!9ʤg ~yNRæS":/ZSm͟|xhh?d4Dh K9NÜ )ByߓOmX*Ch<ʾ _SөLwїdr\ɹ%^eeew\ċx/E@R8Pz:!5zx>?iEdYT2ۮ =nd09|l\n+!0 kJ +e ${E-.ș3u׈ȉj5u8uT[(ϝߚmo=Gq||o2[)";tp^Z:{x_N"4qfwnRD|}EyV%Tcvw˦[os?qDDnf}DxrI _HI-5J.Jj}>yMeyɖMՎlF4WGϜ=s^;'"'N.)ζ\t㣍[6T) Cg[ZtsP<d7 G025D^_!֬P(=w}?ѵ ecUgPX󵽷]^]mKͅWomŚ{ %S-#Vbvưu:9tM"r{7o\65w5nۼꦭ4yc~oܭٶSœE|#N^^"~(5(VRjh2ȕ#_ H8-M6&">;=>_DzN;s9J39C7CO5Q{_3 w=|e(FZ}72CVxPlb6<~ *Я!&ų2g344tF?bu9]M\n]cRCٸcۆՅ&_tdc pzNo&"G>op~AD6,N9~pz^-?Z'AQ|g[^\`Yۻ|JtF)">O<­`}ѧ:n׮bTjXV^ܩ%MFxs[͚`uio?G0V|O$ "tl6&kMj`ut;|w"n|&0|u! Ȯn^[:{@DN.q.c8)۰j1|O|y?3g; 9ظӣMWGƈn2I#J 必B"|7~y HIq,5JYi4vUϞC{x-sw߹C&pú/ܼhX3tZ}m"w|tLج}򲂭6UmmPyC "b2U\sfG}ڿk4FG>;TRC!SD.Ox=9m4\.tSGéVGiYrKWmۻ{;:ۋ r춬qeޓgګ+Jwn_mϚ3\~:xt2{``ȔXvz^Lu˯ IP#j_|c2NN{<ןZSpg4䊘FٵckZLծ^ ObJ3$oZ: EӚ2":'Kʨ >W3`_{B{lDl ^SlK?+E;tZx55+*"nGD\.Oxc2^F>r`r8,{kJ Vk*K}6< O+tUQQ#EdRRRK ~޴fuQͯ8f*-O ᡇ7o2 9"rmdm~kF?`ssm#7V9Nefef($&QDT;..yj琲XNi}VYPԓRÑ_mV_W_<7p1rSgJ -YKJj׮XS 蘳%nۭL=jY'^`ܵ#i[)&"2:kHK{OkG9_z> ~LȌBk?HrwlM{xS︈"^ċxc(`RP&5Px>k|_UT%2R$  "*/ZSRöO><44 2`"~4huV8j=ƍu2$̯ .5bynxcm,˴Wejj׹WaMܛ&|MMZ3uE_&r%疨ohhH{q/ERxK _exB!ǽ/S V٫Y)v̶+۠$+s ơ~+_k'ˏOP5h="g{/UD6\Wn m8[Z: ^Wn}hno&ZS\SJQjRV132[7,/YZؘo`# ux6wDl"+/ʳZ,=hRʸ ]vs~ɶmPEjb|"OeYED7^34unRCT*Ν|ӦlrCNKzQY^R:;۪sEd[vl:?xCG;{5ͣ߸[׽gWǔX,?Geg'h*/*M>+:qc]ƪ Z(&|MMZ3uE_&JҸ5 y;/}H'^@x%70-5?~%}kH ^=gO1@ZQc5"26zmlڜYvW>g184yDSyσsy7qS ~ $65O^("wp"C)QZ 1祦9xXWOy>ÆAihli~(x]5"r+jMqݺ*N mF-T>굱ۺzqH~nHc%.i}պ!qfwn W^gX8{@LHj=jw_mYJjo~Y*u:vn*/z'/gmk˭68 m6 :vb?t _D֨g"rQzx]2I#I ʅ^9h]-YCFST+"`+oY_uKMiki-sTfh4fz<}ZM嚢|^f:/"gg dIXgTZi7 ޴,δejYsL "!j}wߢLxӥtyTDΜ=pՑm}wm\W!"'δ v{kQAݖumM{/ *Q[NvsKDJr+ˋ|'G="RTSQV41%##Sj@ !y?<,YCwbuf⾁ѱi9l]7ھ!<Ӓe8[6TmYzd6ێm5PѱjzS]U(:v=r~Ӛ25""Ήi:dQN } BY|m@Z<翲 Rl>y\(_ycdzϯXopP;ypk~KMM<7'Qyju Rɜ$Z?`0 ڴZ]Aa)ЯfߓOmX*Cw̰b_c-V7VcұlL{Uf^Юf{DMϽot9S]e2\.WrnWYYYooo"^ċx/7|<]v?~qiᏟ{I0)Sj <g?4 5 w7/ʄ劝jnbZ2CjP0w2jKe|Yr1>~ 55?^?~(!@ yl_D nR~"gg.ڥhhli~(x]5"r+jMqݺ*N*O  >ZNfdn^[Y^jfi1WGNUDY/o{ˋ l6k{WV.x|}EyV%>uvLDHRjsêzW:urm6Tݘj5`_'r=٬"ϛ~ M].;aGǹÇ')(ȯ('"$#5 š_ùSÛoڔm:]7}hQzzɶO9y0n?/?).ݵcS٨.;1!"uv{NuFt"^V;sqg7_6NaO}3p#Sø8/-믽#0)kJDLSǸӭe("F"R{`dt23.V][]VY^>ADnhx& y9FwX[7e6X曶=x0/-#Vb#?^xݻeR#54 "26O=ٯN][ r&ND.^6NLmTٶ,b8^">2rK :F45! jDZ@{onyk?j_Rjv{f%c#}[#ۚTG??{u;+m;9ᵑ1|b ƴLADӞ+|{TwP[:Z( -^Wy zjS[P8/KL#Ju|ɤ,RchtPVZFsaByqT/|/rZ"Aθ~(#͟Rj72[~oaŕ BY]ˌ e,g .%Bh????)3^j8cwAh(~g{ː%ܘ&F {Á@ω{#C4wZ-]jPNPhEtjhKy/F.Eg =14T,B%J*|13. ϟm W&f{Q-|Rè?TglwO/tvĉٖl65^T,]^ _+qҼkR,h ?o/]?ge,%!<2} }8sT(~ .^.Յ.WyפH[:Z( -^Wy eRCLYC$#C ݮCy@ HdBkP;5P#*@jBx%-գEBY]hE!R(KGPAE e@@Y:*Յ J/8T(HT,B%J4Pk$VrF((MwlM{%ݝǕ0"^+$^\Ljbdu5GQ.TPrġ2z[:Z( -^WB 5DePV*(WP (KGPAE eT1GEC0E+UQAE e@@Y:*Յ J/8i^LI>t;$z,u5/Ͼ!ǜ!;9j?3",qT(g RCZ--Յ_+qh -BW/8PH *@Y:*Յ J/8T(GQ.TPrġBdr""/|qɶ8 pW]^cKmllEd+,,VjOзsURCĢ9w|V>ޛ"2ϕXʷUݔ'}m" F3!yσm sY\R$mo;>~ΖWCU `M-ݷT!"0&? `2gړaB$uλOtgo0ֶ4޸=Ɔ17J A^,=\Wef?4}wnco^덚)7. ϙqoDjB@T;;x<܄ YiA+P5#;*{{x(r7|nbz^C AnyWxm?S&_Ix:rJ _׃3|iRC)b>iDB$mAMTT?5!$y!;/YNx!Tp8YC@EnYm¿x2SQixH%'N6m@YC lqNjJD!!uu7{D8 @|?j7͋8!/֦ƅIENDB`hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/C3_6+7.png000066400000000000000000000762041211146647700240510ustar00rootroot00000000000000PNG  IHDR^ pHYsutIME IDATxyx#ՙ/e[}k4@7khv!aI 1pgI3$LI @ i^˛ȋlK־ղlnXUGu)^ssEEre 0d;[Z@'',&PkT⢢)'3h"z5Jpx|g"|c_wiqQ@.ĿpmIZᣧz{Pt"UT`fąQ}~T. paY:;w_c駟3W^2Y\ơa@T#,©PRZ16nE9+Λ⦯jixe57"45瓏xG㟙twb9'v㿾BC(m- qJw宛* _l |=!S97z߆Mb?W'_00sp 2jnIgAnnv yӭ) Y2}e xo#.CU̕铇Ɋ+s zCge;w+@ ʪ- D&ohnrMኢX+v+ޞkv%pUl""o>a ?w; CC]Q`nuUo n>|!m|BD~t:TN{B y+8Kۏ>Evv474szRb2bThp29l8qs.49s0NL8v`a[|'PVXJn|A[K}scwhbz=5NOLL2Y(&]ۜMr8ŏrEn~I]||;~)%[%\n7|K*;՟H&SFN;[|~@h8(M'pi\h9{hRJ>5sb'??D̝]8kxhd^jp7l6{IQC)Cg7T*BD]W.rEX5s{79aJe!3Õت w?0Xp999ND.#d\\c/)Pw2'9u䣿L\3,Vkaa@jeL#k7ݤ>wmwD"-):.3/f:μ5fw_NNdvg:}0vm+c_HDOo~5WN^ݫ/Ͽ羇Nػk}]\b_a_p.}Opr2xѿy% wu&4wt8l6"vgdJLJUs6wFFu)So[Z#*{ΗX4А1Y.ɉH(g䘆0\Q0 n7÷Pow=9w"P;j9,D*m- oW}7xݕn~17q.4}k{^n<"-{OXhow5wSk)Ͻ| ~щ=q(װqICI64֟que|b0G6.x|77۔!Dj$\N58ЧO 5n (4FD~p4x" d "Ŧ-;O, #EpyC۬ sK0"ĐEkjKGyaFA[YyyOsyʐ3̜|CDW"JS(kJR]Yvӡ!*20ٳgvSձQ4?\Eoa*?|dB>ow%g  Q <{Rv'ב|UWxWBan(3 [ T-UJn'4aq]kݵPI:W򄷯*N5b ťt<ÿNz&]8qp\1a05D9ข`݆6b@!D"9:P@jmk5k䄅vnsQ+,תpDƛ`Mkyy8!+syQ`y !4w1Dr nޘy##cg~hUxu ZPp:>c_ $=w-/_''<[\p;~7sg~C,ݷ_}dppW^o:2/-)&gmɅ/pεZ&]W@Vα1d^BB|AaP(DZCͲPs4(UeSZ-֫aȪ5e:q ,))INN^RHKM'Ǒ=]ͅVID|]]bBU*mZK I?u ? LW snt{&'-}~(#=511>s,D.ha^ )I(Տ/e^\Ն ˪So_/ ~oWlCrƾ~L; \"[RS'~3s H7HP_ (yWw7+\v&bm%[N'3g^DğD}֟{[rA sDԔ)"*dqB0##eI$3+IQ&2 L4 jB胏? UD400Nէ\{N@P\Tp8? ר6WeE%&{?RIk[owv˔ C3mGo<y%ɣHKkńJyb߅.y|\R Wy^)ӵ>ORV/CZ[srJHGIDZ% "JID#ns 7p8'&-ឫ˭/33KW߸KT( h/$"w _>띾8';x?ω~9rٓO߿g/~bؘE+vnw=Mɪ52d]!׉Wxm4,*+Jhr>_J|H#AmoAr3^|<䩳۷m[2xX<}rCDb:T;c~ @*d4tWTj4jg2 kqBr :]dՒ+wTsSSڳ 7Wapv;.RxK@D֩蟸q7o񘑑>9oh,-)"Ƀ_}vǼkljɳ/uvlr;߯k$[nCD_:6>>׋7il޸uIˁG"e;<^<}6_ ؋O`tլaڳ 9;܁bY,N tɪ0L X,ƸϞkjq:] Cwq49F"=,(k wq @㭭{"yZ[];Dv!U,|t>Dpz K8C0-V!Q WOBC#@ 4(U/>D!rۯس\{M۷mpSz;7{PѸV˄2`2JTi"۷mǍ@͛󅗊QQf)~ K^q! !#ֆ=4\L\HDܸ( "ą0/߇Bs^BCXD eаr+uwML]LX.~|ɖo.DǧYz梽mD%`Y'v</+@xM.jsd˳as{f˶9I:-QwJ}-$˸_7\5b%X|ņ󭆯.:_0)*qvQS"ԂUD͛+$DDS\Qك.چ~L/-]|~`BÙ ʯipzEyy hooB"*)PRAj +*˫K'==rkqqP(B^" ;'x_ Y/,˲spŎX|2~DžH[ry^m5LMx?OJO!"eq+qa||Rœ;Ru[,Xx?s{Ǟ=ע^ &1/XА%{Ŭd!#1SNEDAq%f5ZpZd6Z x<DzDİ,0Q)Vo,[h_.C,,;66V?_l!)\72247%2l!"aCy$..!--bKE:Xj[,NNQ­mܶ>g|r*d~ZAD{ݸ2e/=wy<1/Аz~_rr^~bbJaYr8l!oiiYY]]-%Ki#DyrٳT)+y 7.ƔerYֳ5kk. 9\\lim;Q_qFGjk}0ӊګoX^?_1_/ ^JTi.*45B"jVk.2O߉p(z1 M fDN;z G< 9 ~{K!Cq/ <~Rr`Ma| HH3:k2i1;xzo9af~M_Ъ¿#);yxܞf1\dv}e㪪+##7 B}P_OLfؽ󚽋|g3Ͽ" !4BÅ]dhȲϞ~q|5__ˡ!O D'eD"5 Qk B *r`#X=|YZ7￉:7.w]KDP˨zSpavzEq>mno L(E¡D"ޱ"#-E"y^a06rKzPA7`7KVڻ%/qJIT)(= صssfzln1LBF >e|:'v氫*"$)ٙ#p 4Cô$":yE,q[gMį~g"k(rnvlF'BPj??\cwQ+I+N}j!SSvJms>94a=pv⋧FYע1@LZصZReeQk{#g؉z.4l5:K{tJSQRG&9G8:|frA;"B!0!^NK 3ۺMd KhdtbzYPr"p{h/\.}VL㊛lnR[?!QbP884::61f0f"i}6C%ƫ \;r2S6Wy<^0d<~58n"?'gC'Qnn5+-Vېi$ mv\&(LiY/O5aҢLLbwSÁC&mKE*-IK9lܳdR)/Nvy3-5nаM" <dM5_S 7hԊ8 [{|~,>wP,n\_cKCfEhei1l4*Z5= ) IDATy^0̥;;Ct '9}m}K!uTM+G߽gW B} eX"ڈ xQ0D!5:Ӂx|"hkm>viiOJNC9)̃?VRR! iv0LHGEe7.5bw"z!]Xn@|M_Ъ¿.h5! 45յ6%[2nq\UUUSS2yedd.{w+ B}]:.8ckz gvӲ†<@(XZ0VCCeNǾS)/zԆEȡ!O D'eD"5 Qk B DeƚƖCMDt+2qn0Epa_(XD"ޱ"#-E"y^a06~%{͗ї[Pyj1_8/NM*Ŷq4i HeB.ը۶"R$vgedURgX-KPYr{:,B&=x.Ib?80LVFR>A*ח,{2%qphttlbtD$ G<U20/z㺐~wN\5<2I P3[#oۦٟT.+Hm^0LM}( 9 6v'bFr2|?tT]7ɳ$YYw}^p `XmC1Ǔ'"h2 c(+#Y&d'/Kkg_UyA~nL*|J,^{#RSR(%YzC@ٝ86NI37U |ݥȵq "j*-IK9lܳgwID(?;Ygsع6Yr"EmGUo,Q)n\ʢȹ|l~Njfe:eo76nܺAg;+eR9PRH, H.dgH9\hȵwdLYtT[!i4jFŲbIVժp+M[6bB|.'ջڬH_r103t}oXk4M纸I"$a0bV ]fhtN7d23+b:+}A:?;K!yܽkqwL^OnT2y}{v~P_/ׅl}EG|R)D4iOZ#YZ 7T_v(t,FYD fņeݮ/BGٷtWD!5:vEFQQhCӑ Z>`2x~}iPeCUk#`| HH۝}xoK}<7νNf`pzM_Ъ¿.h5! 45յ6%2nǠfe퍽B}P_/G]88`y^"ns\O|O >+`iBX Yu:^O=_k94EkD"5 QQXCӑPn?" Wliaa1\NgV߱|?wq;i2Pili1\^QODgۻB/f+ sQt* P|;ώ9^"9p¼4}B.efwF pZ ?1?߳fjU{q#=N߁}}Y)*QiŶQ}I$^}zRG=^Z%#4L'o@DvZEDDw %;sQ% Wffnm˔ @w<ƁgN7=tߍDTЮONHW[#"x7Hv=gí8K98nn|R67ebl]L*ywxvk7Qa01AR,V{DžV9X!NCw?+*I  $(/˥b˦u|%z}u92MKI CQ$"<;&.OLץީ9ICf@Q˫slac7,R #,k..4LOw~gkϳm'''hj:SZT D]h(nv+HDDd/ܡ80k冼v8]9 ZUpC0TH/RKTJ٤jv)||h5,5'Da'40 Cj`zUch-DxǛ+G*YaC4-2ɂ( 3*?S6gp) cdb 6?xDR^ 4(Č WseRIM]kmC[qAe|nL&QdAqp4?'5/Gc49f%6[h;nLוg$P%D2]nOE9O:xM.Ikj|KTR9!Qv^.de,]uRD ;)1N]wA)x;w3R89)n3$b6NIDS6ghWUZbsظg5$Jh}Q~vsגgrK ʃËuGkUUrSرyúżC"ee$;n*7n\Ԕn\)k;eaXWkHJD[}S7i4jFŲ&[6hjZ Z<׈pQf,K}<ͽx&"7 O,"y^ES^p 'L/6'K/cW߸W8>}vʕ޳+ B}P_^|=ck: _zi*݁a-jDD'45vqX$=WQM]Kj.1AcQJr–% T ܞS5N:"j<וOШ{{?¼tB#u  ƄBMU3 THm駺sU Ð0 ޘ)ReS5!k^W]g ;J ;}GCDN"|-ph85eW6LӤWYVa0*RZmK{!"Lbw8zx<^a^FN^ ~l]%Y=}&u)0/}Cei4r Ѻp[0LVED,Nά$#M,eف!3铵U|~q`2RJ3hxtkƅ):JU #,k`9 .?xbjJQYID= $o ѱ1d7X,<<U20/z㺐~wN\5<2I P3[$^ɍ麾1 9nLVʌ4FDjɽtˤbZ?d9=`S4Ez74<GEQNƓ^&s>y6t}&Ć oJ6ds{<ɺx"x&px<2e2Ifz򂹴vUˤRϧT⵪?w8B^p^vF(O?`2x~}iPk ÏTEBBq{Z|ג-LfW8Y222z{{coP_/ qQMP.<˲{(3<@(5 C^NǾS7 _n,Bԉk#4 K"13 ુVԲ<@ 1h2 1x BXSb)0;86w^&W`%uph ]ޭ綫ƾҴzxc:߳fjU{q#WxRUJ%JV h ۹D7dLLeXtOpVBDdsj ݁`w8}aI74o?1@Ҝ>_Pt:f$"\:+L%)1^O y0L*!IIeӏLOMSkC82^в֎>+O&MphsO")/z f'vdd-S6J)Swjnfp6Ɏ;%K4j9yYVp3CÌDX4jYJOc5upd<~58n"?'gC'^ cаcǖ\\BD9YDl+/)\h싳Di\_*(M@D./#tʲLDNfw?9U夥6Y3A9ɤR"Z_9ܵ8'+CODq˹ F͝5xbwv sKNͩKlE &FhT,heIVժpW q![VC湟FD\"^gXi1;xzo7`b&8|M_Ъ¿.hv82؜|;/’^}^S7UL^}]eD ]B}.^|=BC2Ej ]нHE\.հtL!$.|<EE09c~?A_x4CaPkrP~JJ*"! P=MMumbkɇL&WUUU555+WFFFooo B}8.8Be<+ 4 yu:^O=bD54޵yak@(AsI$RӐ=QkrPFiB84d,kӖEn_?5"TWoך\ y!/MyiQ7YYK lH$m5f\nn\а0?s*T;8iҧ$fgN󸅈ᚭj4<4ZMUE tD"AjJB|0T.'?7ei`p43=I,F |V%jt8"$4y<1^֨>A.?oNB{<)sS9r> 0 Ɔ&H{P yEs^.>.Z ngU-|AY*uʶ`ʲ|"jl6deꮀ/`ffxm%?C] yx(C䅼o;d~Y:[jR\iR MDt}\0B^ yE  R{ n5,+NJ1jo k|%EY)D4>amnn䆆 Zu>'ԵqjniI,K){{̍0#-)9){e,ăD1z|h4jFŲ4s4MjJVMs^KM+ y!/䅼25xAyK~R_#-~O/s/( ES^p 'L/6'K/W߸W#qTM+G߽gW B}8/zԅLBCtn em5y=^(r9QQa9[ NBQrPnkm>viPpKrX?VRR! =gijkkm]K>Le2n_DUUUMM䕑{B}z)>_Ou2PfyPk:}/W1XSq2)v[O  $iȈrX2JQ}*tM;ę!sȢwWڎAym5--Л +ls{{WeL}Ea.>WQj{(/~;-wwjn񆁡Q"7* ƁQTd-ޘ'?q_߳fjU{q#MwJ!8}e$J@4ZVúvnyi> Y,S4C)MBìdᜎ2|zaȍ縄xi%DD6]V Hv!@ZV#rpak{{ 0xMNVjyi6Nc4}7Ԥ8ѓr2S~\KwSK׼9ݞ$]J)X9nW$_f.(xҜ4}=ڋt7@ԟWI];7%kzz{W] 7=8MyI$'߲gG\jdq7SuvQAnjrVz#lCq~ZfG& RqpZS }j|/#ZtCnrey!54u8t3"(Nun"bSz>"Ʃ߽qy23#y]a&˲ې#vé88䛝>3?5f<(o΃DzՋzQk_,kU '$@I I$SoP{SaB$SɐeLƐ&Y]d[?ԖRkkv?I5w>ܫ9vp 5dEdʨQ2g)WE& pz@8VBCvwo?ۯrl.ܱj3dfȄӭCDƵ>O?Սxu}3 uDaPk/,pYL8V9'vVE$aDik!f, \rFcfy"o4R,W,Vj*Kx::Kl,j>{ۮfTҬLp\uyx4vW辁KkJj*U9J"۩pbnc'ؚ:{ItQ^EyQ^gB,KֹN,縆l^F@Yk|q >Vh@k m-{xh?b4LѠ$xP7ez(Oon>֒.25L.+1D}}}cccbޫ7EyQ^Ey)LՅq졬3/3 ^Ch<]~ҊYx#C13\`d~eT =M̅OP5xPN'="{'zc4 \3u׈񖎎f5u{cRd\|HCӥW>w|fƶ ~9~ahDEWh: >տ[U NvJ{Y-n-hQe嵱,-{.>svlYRw (oCa: R=9n>ϧw3r9A}NX""r39jZCEk{wg!3~vUFF~oHD֯+ߴf5 Gt[vl,/|h~fQy}>ra(5p"a2 [F]RBCh4EʲMnݹ5v֬dHDn^,\zy&j55UeE:O֬.qX5ukYi~:bˈճX1)eWNwY8,ٲZDtu73J+Wǫ+KEvGs=rxw`gyei˻kdžB>CQ \?<:F08rmfdj da$W5\hhwatl^;l6mnUj1_:n2f؄9*7׾mKn'c n!A醢L[U醢l}`t>ƵLH8,"N_hV瀬2j#~W; K@\=k5dO  +kzݥWEM5KDVS}-Fcsͭ]Օ;RqT[Yуהg+ 5o<=xMq|@n@ᬚΜ͛WZL@fח_s][6VoPi2 f4k)+-0 e%g|o,-r\pXLFl(w]J[ae+PPk8SgІuU%ᰌMiR6?n0dV).-k<~ۮ-?tsz[mDnpx2S"e٬6u2(Nk 5?NuƊ%XN_^3O"La .,*Ks-/Tsοp0jy.2=ˏ>pbnc'ؚ:{ItQ^*JW{bK  ak@(' 9 -jy2UgasIs}5VGVCw B̟i?R)$D<{({2Ve=C77loky|L&˕[11UVVۛz颼(/ʋ`B8Pz!4zx.?iEdYզ:ש =g0_<{(7ZvSTq S,ˑ,s(']D>jhp`.MX]FDtttE7W)[WERq<hǿ4צ?⛰GpoK)";ppAZ;{NB"tqOfvtV肓RD}EyV@ZkxC黻eS MTDݛGE-7E"8 ""Nf>3!0&@j".D:Ig kkq[}8PĻ>yӻEٲd(,ܞۮM .߶+ןbMQ^=ᕒ͛ɖgAcRJBk cغen>wfq7Tm6t5j߼ꦭ4yc@/ܭٶYCœ%|3N^]#Oi3d,, _U9<2*"Yf0금pz&:vsn(J?? DkMZYeFBC+DR"i$Kmsmg_Dr6eZwX!eO=xMI~PSYу7+Yj O5mWUfAD*KD7V9Ne橠\LFl(w]ʏݩ VFRk 6,/++cgZ?hnp8RM,6fN׽ՉcG?> "4 xb.5fӗx̓ȬSX ˼\ˋ:ܯ43Z^;=>C5Q{OS qEw=2<ck>CE ơ~&`R<{()3u׈񖎎f5u:T* fmV?pҕM/\N@R"3' MD|:pa}BD6V>{48{ah$=/_(_\ӿ-/.٬]U%d'xx_yQb@UkXV^%1 c-6k҂եqHBH$ADvlV"{MhJ%6+F#vl޺y'vn4l[]]'pZWSa]b=Ch"ؗ?%"t;r GSq> ɸo6]Bk J E+ *c69uZCK޲\WUܹ?^c8ް|^0߱j% o-4 6yG}o3y9ȴ ӛ-#Vb~ "ty"k\ep᧚6lsd[~N͒]BD<^TceM(G8Q]Qsl{\ '',暘k#fFTOd5 f!d\x=D{h2ȰFٵc#{ZLݮ\/"Z#(P KQ[h4ܞ]\}ZSVdC/4}s@V cZBk V][q+ "/ _ffE^E2O68̫~T(DUV=j5%S5o<=xMq|Íw ,IBk ~ܼfuQ8f*-7o2 9"rutȨi뾹~k@ hssmx*po,-r\pXLFl(w]J[ae+p#R%ptlW9}ۆեUO6u \e,ӥWq%hn kT) elK4f[OflɠW: 5q?h4|\8q]vFdMoşдoމz"'} 3#"2멐`^|N{5;}ļsOꥋ(/ʋR/P8ΡLhn|034ϿFdC& q|P|q >V#+H~5lokCaڏ| űP'6nX!QghCf9p6+o c`{,͵S:N3Zp|%S]ej2\.WbnļWYYYoooꥋ(/ʋRx    "z)J" v~jDD}oyqf*';=ʋ SkXZCaޕm>?'۶iCa7E"8 ""Nf>3kXDDN7p EWIDAT踲fn Ý"?&Nej4\mt:^\u=}C61ڪm[}>ٮ[ŚBGM!v.92b,9w @JIhh [m^+"Ϝ;Ьh\n Uuk::G&\nhq cNK /[Ӌőp85[{Nʶggjv-#WVHSKwK]>}p6+gDf J\X}UZ^ԩ~`B}]ezŗ} Nl߱51uCܓz颼(/ʋ%ՅYEEݭsKMZCB%*' @rXԳXa Cq=C&$)=Y @)'=7厨Ci:?RZC}{[? ~4hu/==ƍu2SOdKLM&J-Q__ؘ*++Mt%cyPEzck'V70=5?|}k ^=>O1@ZQ5"2>vu|꼻YvW>g1 84O>q)Q+yy|WqsS ~ lhPD;v"U ݅R,c A9αٍ"=}\s PukDxKGGWt3q՚uUd mF+T "@ڻzV"I|nyHS%.ӥiպaqOfvtV肑 W^gX= x@C/h0>,,;On+o9E_^D|^?< ~k?eYEDv M].3B  Cj oݝV}4ݖ_}2ՠi?sKUyk8=^ז[-&?;p<8 m6 : ]ro7}$"7pql2!Hp^4=F1"5h4E" GƮߡ~˺ue@¥[joZnΛ6x֎ނFcj*ٮ"MA~vNքu NvML[F:H0$"?៣ֿ~[&.e骫JEs'Gdu"rtGOY{n-*ȱ۲:cioŞAe8jۻ}axN5wHIQney?hGD r* 42F<:F08rmfdj H0,"9"5z}U33WU d4؄ψLfھa ,S0aݲn'Ȃvl CGZƯMuUpG߸֔Uqf<UFm$4BKBhJHea^\Qhfb2O58Lrˎ Fê3=6_`f5ڱ^ml#":rd[4inKˢ~SmeiTjVd4ȶښ|ۥ%OMV5 58tۋ rK.}dѐYY^RZɶoljn *ʊawuDGl*HŽ~Z_Wc1`پ-*";2WHِUQQBCCfM5SoݗnWnۭp$'ӖflɠW@hˏK%hS^_?BD7M`xÓʚs}lm蛶B[0v{#ʫ_w"iq&9x^|N{5;}ļsOꥋ򢼒ܽ^ʋƦK&FrdCy=ڬ::1ruďy`),V{Ñ Bl 8}.`Ǯ.jѡ>3n|_7!P;ݻ=y['=7Ci:T2#=<4 -j4=Sǧ6VWPXJ>P5{2VeHT_{.Y\k//뛱e^f*Ks-/Tsοk?77loky|mL&˕11UVVۛz颼(/ʋ`w޻7h8VqiyA0)#4L0{,(4oݼfj5㮾 Pkg։ ,".l֎ߪ]0r=ʋ CP?44V]v9sm6T]j5Po|_ZI8 ""Nf>w\n7! qp6eۭNpz^a7=("'Nf-];6ezp-^OD u,Vr{N{Y-uX'&}rżC`2M#4=4&ְrMn>;t+cȲmf9jVUmo33{<_V!/gk+z|ֵigAc pL[GNEF8/"tߺkKQAd\׉K#WGc^ߌl:W]Q6ۖE/͈G'sG͌L!)b+w= G޲X nldcsfoVȶf'ϟ15яܴuݎ?klxut\D|h D}ZSV "Nߌ'ʨ~W@-dءMb.@2&bx@ZyTXG- rޫ؉d(/ʋ(/}ݗ_ 啪RWhP *h@Y> 啪RWhPT P^./ue@!._L&ktAE %iD\7L"gOjѤJZ8rij+ICɃyGJ$Cyjԕ.z(G%R5]_J=PY4, ^HZ2=e@h@Y> 啪RWhP *h@Y> 啪RWҼAP3AyEi¦Oؾck+ڽ瞔LW"+|_./ՕW:)be1湿HԅPգehB2WK]A?'>[uGуP^./u+{(O^/F#{֯-k7zcuh(".:UYY?/_<̾o_>gHe~SN5}}dX鎹.8_b_ N$%r"uŗV啪Y^./uKC5\AC '"Q4, ^HJtq+]4(#Mzcl%H[gEcgoQGy<dzg{gMj,z-=( d/= ȃ}ӟ,ӞAκ(#-Rk_ۿ(+7>Ɍ P^2\hPƲ6-prB;DW+׽}EYZYSԛ %޳/!n@s}8j {ˑ5q5uV&u@^~PNtq9YŅ\ʃ}1bx .<S{FQcЀ|4x!+UtѠ8ċ9qzeag?C,$4IUy~'Dmb/ǏkfSuLd(TMҕC^OԐ>O7GuehB2WK]Ai `VtCA*`cH^$Cyjԕ4 P^./u+ 0g \_ l( J@]zw7#?ɧAH![>zP"+UtCP=z-=( 啪RW "UЀ|4x!+UtѠ  (GR5]_J !R (GR5]_JW7(35VVbf5((M wlM{%2]ܓJdy%O+UJ6eBC,f5<邺0 z4, ^HJtq+]PTyGJ$Cyjԕ.z(H4, ^HJtq+]4(Gd(TME2eD!AY]AY]啪RWhPT P^./u+:H4'x T~y H4'fVc'C9: HJ5WKu H4, ^HJtq+]PHZd!8[>zP"+U 啪RWhP *hP^> 啪RWhPT P^./ue@!Nw5jy/ua6w8퉜Hk>U/nzTٟyjA 5#w]Dvh&4DB;8%U@)V+} Glx%lX}M"| !$0neIȰJNHBe,xL릝w][ϱ n ee[k'wmkm~SGGGc/B3~[H[joh}l^=1vz^7jW^Y3끱߈ąf-vtxo"R]~8ELhB@xP[0|_zz !n[Ctvi#^2Zÿ( Y\~yh֓ϺLhC E,B5\4H\J}-Y5"uVD>jYg z@".Ċ}Ŏ eG>z?kK xPѷBv򯠰VGe yuݵ@$!`>䓷{}=qߺ'k0K24\(@Ҳʱq;._E?㍻ȓ-AБCtF92*3Dt?9nhnsGUᡟ=Sg:[[>W?H?{;~hӖ9w4v;\{$p^f6G:e}'sհwZ ˱`&,o={/Zf{zwy͊K*szsg˵T`7%Uۓӈ'sΗeӧϔntS'<$䩓&mim;oH tr>yxtdHm *C5g߲PhhnaXԚޞ溛'#r9 Wn!"/7r-x!eCX?W;yCYugG~/ %}}ddH:LNIx<O3v6\0Rp^ W03''ljv-ֻCs~CNCЍkO3+߀wܙ)db""?XGds`ҡ{HNv9G&W#L8ub7Jb/&'lR(o﷿%<ޯGo [⨣޹kSv:rLӯRGͫ>(i;'t 5qaQP$7KD)Ǵ%06oI,x<3^gpϐED{QHtrJe.@_rtD6 3EɊ-w=}t_{?}}LĶC|jo|8vHx2J+6ovq@"y^~ձ>5mDK.sn=\V9AA~Z"2fcs]RҦR) iAbD*%"ޞ !#ەX&4$ڴS.WFz(D$S(NNX].gzvZ̮xC?=ƫv&"R(D4`U4D=+B}bIsD$F9`|jĭ2u#T;~(xs!uwr3C}(؇wXemZyK.pA4$"Ij1;i㦝66qo޼w9&dEh~>o||S g}qeFzƄ1E`V^Q˲RLK7Lte2,-:kk m•Ο%'>5Vm |9n4 sZm|d%-cjO/X(Xt?fS GAV|8ەOպԻj2sSquxxjھ薚݃]ħ@568hذu+@bmp",2P TcDph;hWSBZr1 ,`:v$ g ָk߷{ý#oLuE(C+ !\CC8u/z;oFEhXodoK"zN~qv)17u^:5igY=#Cָα1fARRbaQX,FYC֮qR)stȖ53gۧ7t0Ȑ5k>}9PYZZ~Õ% ~?*z،X"ayRZ/ToDYčb8X/\wNdg]P3ao|w,/ې;4dd "hpۿoSuU1~_s;n%;+a> &S?#55ȓL& ~h1q yy<eprbEmFGOs5uR3Woܽo_rN9uƔ7[7\+/Y,##cy[͑K5-"5jO1#ڪ6#xZ-&SX$BJZǎ~qȑ&oǯ͛n[Hnn6}7ёϏϿOk㼻n#w+'wvcQ?}ƛ2>h4LfD?WؘY)Uw_M撒Bɚ52<RRbr(^K*n߱ET^l}V݈m]=Dt:H$Z 흡&'%QOo{ "!ON/\V^j1A"f[p; c4bR "L7<kpQ^AO@nҧ6 ½7kr=Dtɒ$d0 _jd|bRw%Ņ@&Җ?;n%11vnBD[ %EDd tحhʇV ]_,}ʪ2uXOlNIAv)Ukvm秧nƈQku=jeٮ_a (zٶa޾?>t4te Ԟo.}.d˚55ioo|B(%%)5fjN-^sPȰOP[/ +b"4}E<|eH$ !X,Y><RBC"ڼEED 0v>W橑;7,ς5VU V;tK}f"zG筽vk[7#`ݒYpܜW~]0499Mz;:<7Zg.M)[K^rFSj~H$mD`X:,.˧Gv @h2TqQS9"L5D+dDD|jk9kWD]m[oCdegm@@[:Dg,v_\~PAҸݮ&>4$M4O>r[EŶ4UU()%(+D% ذ}8 376^@@܇Vaa0XW]zdm9rtv6| &"gYJ&&F \>9y)=W.?OoqB8O}{qi5<_Xtx2P ؘ5JTb !#夥edrn6Jࢵˊ+H,㈈8aH(P ^f gqIrqH$R"r:C LND6B+)px4#ŵ^g`җnggY8TB īլx"!T<@0224# 6BD Ä6HBBј0͕s'^0v[[?(}l|O փլx@p;X@J!##aa 4X²Zmn>\;55nOdgdgp79iC)^ wߺyFt߲kW*'@\:萈zZZ%B׎Z@rrF8ra/ EFcnNNaWWbIMG&ڕo(XWVMOMԮѦdm!  l#uuO7Pmɺ/ƽ瘟+oZZ=qy^(/ ]jO.7:C,i7_G>y;z2E%KO-s`~h{ 0.#/Z,7iFz<bf}u:g^ ;: lis\KU)G6G_< 65յ6K(Bp:SkjjV';/ By<~)ŚK/S9Ѣç{Y$-/Ctxբ68uय़++Ͽ:"1-d2uȂ|XoBD83o$=!@~;z"m}'(TbG(77w_/6T!`IѡL&ݵ2˘.IXnwv- ڿx.":xLWrs-h1|!"zs Z˲<mϬ@_NzFF[3ӝ.ws[at`t 0n*Rdlzj5D$JfkBtKDt\Ssk?T"W=gwF[_Dt=7Sȕ܌ E:qO%mSI)c<|T.^ "BCKZj CZux2`r6\,ߐGDݱˋ vn-'a˓ahۦ ^7_>8Z_c=jY>xԞ۴Ua~va~69vNöޮ Z{Om"b9Tiѱ#{Y?p%(op% Y^IDShH)*nnۖR)'щNQ+{jRTg79е~Z:1А<84::61f0[}N"Jš0ZHNԚ-CGj0eo.fY_eqMYO>MFJ?S`2~L6d- ֭xw~Ô1dlZJ"/pp YueQZ#Lc/wl-+.V*dN7=5:\?0:d]lֲ@pE{ˊMt?ypˉhcqAnZkC9~-amC!=9'+],?|>řJuZUNM E-=@`CQY۠wP*oXk{'l(ˤiu: Ӹyj5Zf&.7D8E-ak$wvwv-W ]atC0Dvu8+?3TNZ~pp=w^(/ F VkDX7! | yn}9n?vR(n߾YT /X[3ӝ.ws[atY0+EQIH IDAT?ˈ.V!"Q7%7[.uȑψԔd_tnY<:4fsMͭ]|8'HUDTSג;"KUJH$xف35nKD_V"jЕaHiU~ |SFQ~Z%g}~H]C'[WDr4W! /llzY"oi!}7m [8Ezo&[X!\ɋoQߺ /X[\k`_<:vj5[+ iIqˀur28 Uv-*\U^LjH9]@Pe1DG_UZgόZe:-)I y9B~x]c˥npaT!I$>FD!>MI*2gf"b5 eiѢj=c ;q4;ާkos6\ ֱţÃGNٽMQggQk{ϑc7uP\}Ϊ$_hh7[f[yzjbn:Μo B]TED ̽ᮞ}{$h5)#ʱYF{-.\nrSR_Kr2S}>v~ysR>\9 RvAM%_(bfvtC$`( 6u~KKI4n밍`6ID|#\''%l*'hĢ$s S檢UE*}JJ| R͇'G?I`-b~ھckjZ8>x_Vv&r/Xm<84::61f0[}N"JTnbj\Z^Qm 9r:Jkxd""H8fG?- eRIK?;+bCNpFغaαQ*L 6v&DMYO>MFJ?S`2~L6d- Vnn}ׯAD `Iݷ0ew YǼ,HD, 6F"0DPȲ3M /S!~Jݣ CDzL]mSH$t8>AMהTDBӣ) *"j.+6.<r9m,.MKq|C9~-={n|tťDG xltXfHOJE,ixDc'm.ըU^B詴\)#;3>l77q/A;+7(rwg7IDTrd>:[= i"y&0萈t:N`Fq!jZL\8o Ӷ[ !_WH]kV/jam&Nů\kZY"$aMb)I ojfwtt wGCvuq|z҈׈W_y_Ξݼju{퉿ByP^(K#iQk̯@tFܼZVc| < `riۍ^ItӪ<:2q> Bh0'<, #/XH,=q!x5y:Ǟ(-KĴPOyKx/\4jw_8u^" 3gE]E.Ql9eZBϲkBp:NYz{{P^(/ 1Xw߼߻¼S9Ѣç{Y$-/Ct!qnK?S?0XWu uIuL&[,P{DE  nE!eMn丈g*wzZv":EC__ktM !~pQnfeIono ^m,C:c_%>=içKEFCJ)gt[G(HZ̽?=_8zs Z˲<mˬ@_NzFFĴƺDTV3|lkH7]QV>(k5\RdDDzj5D$JfkBt8"ڴFN"_АskZk>uѣND 톴DydmbMrҼ^|C{h 5.tFV29Q[!G!  N5x~"DnLNhT)B㪡fkJrG04baqaNzZQCUJ6w |Q,>Gn\.U*d^*)j"L# C7vCMDu.PHD37:е~unqϯLtMoVe5u m%9;G ]u< LQPySFcfT*eGxk2nL)/@Q0xxŦ' &#%)0?~&|DC%XVpφxt(`DmP*d9YK|g$wCQ\.KIEڬ;59AVzA*yr/xDL0W٩2X&i;Je.+6.<r9m,.MKqEه@sZp\nt*5vlݴa)o$9YiƎ[Je~v0#=ﰳ{p5rJu6em5$S.o: \7 !"܊ KVhD n]ADz#qp:5--{r3+K |s{{WlCeQj@[ţCLk{e1]&>0[jZIk>nwuZmA-ݞ/@8Y3RZM{ey$suIO֨=X[ r8ۺ]qJ~y/: :BB "ce>̧2QMD}2(+ʼn~q_g9] qKYDt\SskI%~v7Եd$'#GkƧ(=-iRR. =^v`pLMᅰ/tetZկ:-ߔQVY20R7<04&u0jy!-1/7MR0 M]枡 3Y)*8TMG؞7fdNϹ:ʡfB@h5er)ģţiVڹd X'M~UfJ)i;W1"R)dNg@ gr "WY3 ZE<^ӒcP)GE:*a"8nrv'YƔ&lDdHWW ݖ1"H*+"IǗW-ڧ^Gk,ԣ'2J@h6:a.j*)gMC7ˡ!B.]|z2!k )Qh5 )Emᙾ cI"xY"fndLNJTUOЈE3I=260檢UE*|pj>!I,#r\JDD~F!.IhbrfDžJ}oZ RDB:I"C Pѡ!=yphttlb6az%Q6>]VY^Gb^TlO 6䦥8\N>,6ғsb,çk</Qh۶TVy s#ݼC~ZzV$'jGƦz@ا]ݽý|3ae$d$'j>a{ ٵ#c tZNq3ΓVj53q)s̳?{f/.a:g_i%pNh8ZtE]E.܈0l~)=ˮ[C߿:[V'?8wߞ;/ Byᵘ,ݻo/%=e'q#b u!45չx./덨C!K A05͈|XoG{R,,Be65յ6Ke-Bt:WWWWԬNZYYYw^(/ yҘf,E,3O?H,ˆ6ænK?S?/A"˰erj"%{[r5r!:52#I.xtxy~>:lm6wG1dT4 1 ]= }v":_ߖ?~b)';=.t7t]ұ ɅyZrLjȔVQ;2:yLZ%aW}ta7Uc'P2L>m9zc8G7^ a[g_pAk^L"j77\&"-0=}i$:21ApribZ Ѩέ&2[HOOF!@PktgO}`tVɉhl|&VMJ)L؉hfYE"Pp -*2"tNNN\1󬛑̌M^=8dKЩj[ R͇$ !P-=#"%+x+N;\21AA"Jkp! we4\R*Z_feRɨhH~|/|D~dm Zb>BCۘ5.+:oص4O)'͗y€O?;ODm LJDFCugzNŶL;Q^N^ W]Vl2;\yγq9)r"X\p9ʳkn#x\ۘu魆Y9+65@i)'@D -]7.Zk є=7̯uJ)v^f=^V&"Ni8.X˅̓Vj53qՆl!^%"um 9 N/swB LѢS~.%*tFaKM~_vM}zyW=SyK۳VM$[P^u^(/yb.:T.)@~ߡ vɐmb%wOL]$:>) 1anBȊ֭m;68z:d 5 1AW+gǞ(-KĄ>˳gMMumRg5UP8ꚚI+++7 ByP^<_sYf~eXmMnׁ~~/d64m}4lH,B=d2uȂ|uk,#C!܊Sr;Ve_EvF?lII -DLqa֖ba:(#=)1Ake*`*3r fgJ%(ѡP(T)ɺd]N FIN٤ ПkaJ 镊;޻a@cCT"13VLZ;iiMK Ceo_YeDdv,eUyD IDAT56O0)+1Uu-D$ :2>11=ix| 2l|)zF9ewdgQk{_SkVM%%ڗ$6"?uo2H(bfvmC$\H iCn҂5ѿ\nRV)Rm|s6ID*b&?{aƢ%m}5R!#-l,Ք!IhjIDi"~M۠7޹w[`a^)q.PHD37:е~uV0;[>8Xeeg^DZH i!-iڴj4d}Ne>~VxY -a 2Sn"fhl3%%%/\D"nljl٦~) #c2/@p1,˾yϑZRy>?*/4ss2 c;fcPZ|~iqnNf:O؛[:fa[^aH csumz|@a1;3>l[&gSRl,Z|ˏˬmjkkm =ˮ tλfu퍿ByP^(/\t}{Y$aDDaSuय़ +8JpI{[M P`>Ln ־ Hp+*@Lxpj?gy ]Dt\-l՝{ڎAm}֏Ɩs=E%Dt+zq^(o-}W#=pMѓ CD$ ػC,g-ѵ{t{Dqg>1j.HBĺ'kj@,Zúv7oEY MMMl+0G9Yiyf ÐOy E?ˈ.V!"Q7%7[.CmNG{ns@pDSNFEY>Acj3чn'm ꑑ+6rBKwSKׂ)zljJF; L^O"s_y ^YUe&!..w%ƺB9_;} ޒHJxݦ¼m*J'}4CVT"XQOX{ 2Rj3J ٙ)D4<2Q3a⪊h~د\ ]+?"_Gdض}/WJUE54u:DDN|C^eyA[g_p殚 y>9| 9f$"R>'R#8p8ODBA:,"09Q?8tE{L*&i?c^+y6>iOMqbkXtȂ˰.Z %@-;b"M˥m/n+IT~|/ˌ~d,5$kopuM .ﰾcTlLOJM5mΤiu: kyj5Zf&.7m̳?{1k0`/\4jw_8w'` q-:"_Ү"OhnD6Ԕw^|eW_y_w3TNZ~pp=w^(/ =k1  vD PeVϲB< Vv![!,4<|}@XVxöGY,!4#`[>ˏˬmjyp\՝_/zQ/j틵˒W&@`$vpq '5$U&d&7zoj&#ycj $ 0` m!oZlɋl-o+Zmվ[{ܿ>s[[R5_pħT罊zzz︈"^ċx)ԄcgYkShCvr9ٟZ:t:` ĸ2'3VT`R,C{p񞾁(=E 747wD#\Ufmkjkl/./ί$Ξ~ѯ^5\x9|WnO^Tso?w/ "G[ )Kuo8y]=?S(a^SoX,ξ])?$/l2QHD;,*Wߵܩ#=nҥ"VΛt>o M""v` ,Od~}Ɉ$x*[:u|˫RRm="drzk"Ѩoض|v%|W9kFVq{ꎷy<BKDQ b ,_lqߡJTnlXW~M.37'ؔf8pSټq͚"b͆ :3V* K4ɰUviQav<•ŒFOdʵ;7{_QmZW!"uǚ:|嶂tъBih8vՖnʗnm=uVpض.76ϐul+FfM>=C,XP-vz/]wl4E57 i6/_5SEdxdLDFF̴nTi4%EgPz(5ڗoXJQ޵kJDzGՆTH0("vO |_Vա/x#@q-;x4O ^Rj 6ts]}Mz}3͝e۶T.+zm ӕʲ·&?y q]p oܰ̔f|sZvf۴b2A5EXVHQa+*&U0+sVfbEdKueinP'TDtmu*-/-exdtKV.80/dM;6Hk&klڲƖjZx$b-x^x+H8;Tg/㨯Sf,xÅF[>= D͙JE\Pf}Uf׮f~}a\}Y /?)uGoݶ9>u̓vL"^ t\]"/Z2]heS`>g Cjn@Bqac g"25|jS>˭-Mphp/kݠr,ح"sq}>~}Mʪ,{=-MTp8S*jkk^EEE===w\ċx/Enjez)ZF!;xuO!?+J"hfJWrOWs)Z\MqXbgz-߮܊ @B`$XFY{YD>k?w`& WY[)"ǚ:#ۋˋk9u$Y=;_i=v|t2w*"=wpN;z~B#Qz8)ϱXm}S.xhoI^d]wxMͻiCtDx;GD]f?DDNbm'fp p8dV ;ch/Jvu64MYI tJTCGN>}V[c'[W䤧.\ёMJyw\/,7M' 9bE}/+o6 vt+m5gzClZ_}`d|eMWFVdoTyn屫w[Za{dDk(6oSg("{򚍕acSg֍ʯ\R;|vVcKLf,Dx*%D!,F\,CS^D.]VzihXDҌ)ʕQx}"2fwy>j5(Rz? c j@R{ҫC١BbXFucvdHKd,)egwĔi,겢_Ѧ ;],+|m,72;<~ӎˍFHCSAj7TٝvyyzR]Ymw:*K@"ZFuM~`ڲ|@_ A-<ŸG[&eUgy}oc֖T{W`p8)y;.E"^ ?5YV=-#ڐF\x'Od%GPC֦hp5N?8y`qeN(f­$;Y&{JW׬cMmm5U:Tlm[5u^ZϞݷ'GO}&9YsK_s"r%e]HsC+h DD z$?b1uNh}TD.%yYf>Dq}mUwXTRW١)p; zXSkŜ0guaΡ?ֵx,C:H(NDtX,ffyBk'Iv3UNNviiIl]wxu zC>@6n޸s7uto[DO.ΰY. c#;UU*5 ^o-^_D "rtGn-fs~r(E.7M'ojo3+/z%Z[%+0WDZ:} ψ.uUf5ڦCGFٙ;oݦ soV5vٝkWzӖ𝯯.s\ٸzPRycy͆ e}¬J6+ٸB+"%oY5R_kkmtLՇ~T*J~+?=[%xt"bwBsinr0'Zl_j1e,.]YW]*"Nu w}K7dX-i#cVM=OUnߺ6ݚ6gɈ s)S~@42shEѪT',PD*|ߡ6uF.4Ǡv&`SPڧ7zٱmmCk ._+Q#JQ#戥RT*|enڐ /*:z`vp}Nn+/`JJʃWT:ѷJt;\SQ\tskD^t%Ŝz%"+ͨ?>x~Hy^J6|@ګ.+zm &W+ ~*rD, מZ*@"(--{~+"2ko]wxy6˽_ŜVX-"9C'޸hdȕыC"rڵk>l2ffZwÞiP]Vgwڕ9+3A1"47t(*KkHqjռUwo~{pu sV|O4_ĩ\S蘒v46u}5ťy[z(TKjX`P&MbXyUےrCQJz _S5D _xМz`F~#?Ў~wఈL+ً/#ߺms|wޙ|E"^+qeLs[;y}b>s65IvqH1~VJc iEDj7j /u-Mphp/jݠrXb[wcפJ~ӿFv=&lh?ç32 0S^絫_g_i(6ӳoxO4j R O{$q/ER +548KvkS K5; .s/?`Ey/%gN3ϫq9ԋ쒲T|\טN<VT`Rӓ=}=7ȑs "rG}CssG=UkVȱrN jÎ梲X?g9%Ey㚲B9MV:z?:|`,C=?S(a^SoX,ξ])?$/l2qHDźP[˷[HlXWNvle"Ol:aED N'! *Ξ^݆tpCcv2Ku2(+)PnVjHCә"m\|%;ov{Jzkk7t?);=:6ΞtWj L? to:)@xv?ȩ1SPD *Uŷܸ% vtJM[GsE$;3]RfD$uUJդhZ|e4.J{SSS2mwl|ݣ"5[6Ux< KiqѠe+ ,)klD ĻP׉}ڥ[6SkTTk򚍕m}#cˠe,9ٶQ)͐hEdP0 ͭ'Ow[vn6mVЕ5"wBg/޶5;j6FF\.FfM>=C@NѨ7]KC#_/ HQ҂l[Nw ;Ӛmh4"ѿxd!"O[%"}TTNQOv]ڐ /*:z`zj%A;7ظLϘݥ4J6fwM CD$fQf*X^ZPQVhЧ %jZ>iSwIDATD/9 "fAm4Nt_4,h5h\#G)NW&* ~*rD, 0 R#5g[Bw9k{"r̍;6m\Wn4ECEZDDWu=X,ؕLeF t A NrƖLAwihӺ`P^_QZ ;(1g{YYY 'J81-b1WۺCO(^X }X3|zN݉L3L4=]:JS3ˆ鹾?s=+^~S*ߺms|wޙ|E"^K_J0͔>9xuq ۺC*a^2rf}^Ws]eJ)8JD)u'\.'GDj7j _l-Mphp/kݠrXbgyߣ__*E<>^DkKSƽ+`08qzMmmm}}}|ޫ'k9KkE۟pal,|ymm#^]._<'~2#ڈȕё+f2[Mf,͵)it>#ZԩwuyMÈ6Cj`iù"uV1RqV@RTy-"?o=GDw.n;"*]]RD5uFTs+VrN1X~=4._=~)ꁯ."n0=?S0[=%9owE]?^ޒ,b[ ;;Rw/?%ݽFG9ٙw]D^["q{ L|DDNbmg2N'!c&_'oReͭ]]V}둻T*ՒdEhYhԟ۾GgMkJ&?Vo;sҷl0t ^|=7F7>vmu+|tRl$Iv8Q5OƧ}**/7SDॡWTUUQ]ؼ2|ڪ׭sm=9Yʲ4?|TAVfkO6H{YQ*';=ͨs:&2KѠsJMKJ=H0 "z_"濴x ʄyucv2vB9uL[{n -Z_U*"Nu}c^NՒveM{w(#U;dgsSD 2J>G M"QZ׷cȥCOO$">CS^:5uUYI~o4ݐ z 蔴`ԉȎvl]iJ3D3lMJ4v< MHVeۖ`0pydt2[ʹ)G_9zGՆTr3U{ҫC١8 a ^}}}nek3g.FpŜ&"fq"+ͨ?xfRj/^e0Vnnn)-߲qrٸcZJ}bX3dvJDQՊ #G)NW&* ~*rD, % bÖ˳2ӷ֮D,mPi}Ѡɶ/jjV[]]Yd4|d̰ڡ{jJD 2ԂE7n_Ռ]6sfYDN[ZᲥM*46+vCuYaiW塶>>UTTӓ|E"^K&\^x;9cu/,>mIp%e`rų?y+Q_J WxFp9fٻո"t>? a` :bkeĬTb&\pCߜl{? !;X9a RD39u[Y.a?xNSb747wD#\Ufmkjkl/./ί*ᔪgNaJv5e%sZu~t$aX;z~B#ʏ8)ϱXm}S.eM& bs١NjoK=^ogYכnٰPRe"DDNbmg2N'!c3mHk;4fw)ÿ[3o[Dj-*M -";mH3Z={Ϛfjk4Zp {MoʹƜ~t^7M'@d;,+.Scv2ơ\ MH͆ʎdh;jzMEQYIVyz>w2<z}uiw`Qg6ۼDz,)klDp١^1{uNt}|dh@鎮>QTvr2SFD_2ls{g9+KI) ;-}*A|/} 裷xEY&;$< ;ђx|!㥥|aвLvd@Kx)hY&;! -)G(_/⥠eg`iY%q{hm^<]w&q3^)_/ⵤZdXZ<\/ Z hIY] wP[} -V+ή</ni 1Jj8{4wJ{~{7W+.g,-_Hxi)_{;,SkOs2o2,6 »{7o1;vh[EAJg+3{&:S ~wi '|Q>d}XZ<\/ C,x>7Xi< X g9hY! }>|Q>dH[r;zzGJP(_K`}KbKC$-}*A|/EY";R";D2%ehEMvd@Kx) LnsřLMNQ hؘj2:re.+V\&d.ѷD?EdF)<ޱw.+k"2Ǖ&o%vSV֦;|?ؖm76d_vx{[g]3<4=?jݶn]/unTDalo$;eKL6`}2[%Os2?IbMN_wgofwM3;ִ47\-ʆQ6!Aj\ )?MfkdO?ivox(+n1*W/ ͙voDvRC )r$[r\ՀmMpꘈTT _ g5Aj$ ;-JQq0|i7箛ڸ$nmN&ns;2wf;|d A\/yS9 Xoyw_P,"ݝ"xK+dj_;\OvDIK=5nt{Ջb"C,qC ڴU9d ?,"q!L;9-"7$;}@2ٲ JDa gzIENDB`hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/PatternBase1.png000066400000000000000000001037101211146647700254770ustar00rootroot00000000000000PNG  IHDR^$6 pHYsutIME {1 IDATxw|י/gA wJz-۲-%%8xlMnnzgߛƻvzol9v8MeIVA X@ zǐlh}? 93̎'b)XVH!qNWcSX#c6n".N%+X#]`rYՆ@ӛS<}ԅhJJK8Vu fnDbsX(h8~v͸+}oz?ѿ~Gv뭷,u ,q~ ^D &? ^œKʇG\Mok~v[F[š?9qhe#P=QiUʊœ(7V_',N,D!xn[*?rġWdDMw>>v}* ͍š }_߿ˤ,t×,IE|s_t_',5iQH Tw7GjMܭ{>8{~~ВO{b'/<rm<*Gs~'C~e~zȺh;OA~Cnq{1S4aqol6|tDhuٹxsc{Ju(E"qE}21|.\,)^^찍Sh[%mc&%M,X"%"y챡~m\*Uj"T]:}B=F EX_{[*UjSW{sc{uJ7W?ud 5p+ ,_7ݱ/]AQihg%y}p_ۈߚH!܄ƿ=꭭.zkok265!`~66lܑ/K4qV#/}2O ɟx<g2wcVL11ZVT^[/OÅḴ"]oH򩏥tc]ͅP>pSޛH^+/u=fFD JnyƢ÷6%?st|T*+.)iW5}k_`>1E*QrJrm}bfMoN6 "9~,0Z(Fpmwe[(_=9}$ګŧ@79,T&ɿ -Muo}ou/||ȍ;kO?/< lNֆcמtGDLխZ?<S(dN8>뉯|oX'I]N*vrWhR!l@GAnwĶٚĦomKDK6f=n K ^.ztQ06].VOD 2,ؼm 'j.yQ૿!/<Ԑ#a6mz3q@,zO;n/>3b""mDv&?t᜗ ]DtGjRi(-=-H.Ojn-߰u,KLPH3, |HdjR3ͦ}r}|bLn6COH*;NN Z\.gz<2MIyϞ:\_Xr'}#" ]v\OΚh}V{՟ݮm_ ;3szM fP({H$eENN!3ħ@l|=uDT{c _资CBwnq۾5Yxk=Дi5Q.O@4>"F~$b!m͍.#&5v֓;_OXVD{%)'RX>ìegu}"R秗o>BV$=D4g( J{ aDB"G&Ff ө!E)Ʒ%|>1K_WHWҡ.ޝVЎO U:qPFw޾}x~A/'RuϽxS(KJ[[b8cmmƗt;va|^HDh\}cV&qy࡯ܱw9,f Ex<}?)_/uS SC©-0Kj*G¯`CFCI[iYYOwe(giF\T&MN%[՚8&Fgޯ1})_ #\r#\FAXh[T)?:6b"`%:V%)w1" ={Fqg髳/i] `n,ʳ s.O|jvjDƝ{?wϡvB0?'}Z.ħ@~IVPDyA|jv^U pF -k>{cp\ANc ǰ@,H^!YX;7E ӟ| R;oٷUp7^E`M $ky8! 5V`KDϿӳ.͹‚5^l|܂p-V0\HX}.qT*rⴱLw~73 x?Y('''pi @ #l-RO KKrZW{rc9²bi47Ģ`0h2^ ga' XnٽJrfH v7Ғyɯ]YDo}Ow7VV~ѯswlrwff3 u}Й/D}D"w6m6;E,U!''DiUUՈJ&>8\pl-ZW0ryр՚'N' O?ǿ{|t;rUMe b3.޶{`0xE"ڱm&K}rjΞ(vmH$$P =(:YGFTjbr;.]jbC)bjnj u:uB]O᫯ym7Ofgg_kG~}sw;}?wߵN?i~|hg\ZIvuvWV!+BeNPj\1Y`Rr"N d jkkJJJ^EDNXv^I4O'.SM3*,}2BgLd2)TztZF4VXY]]p j!RinnnMMڌCk9#S!F(3#3;+J7)*{y߄> gzl}Bon` \N|ĉ3jɳC̪0 A >>2:>uE`}%y<ؽwGD;m&w0KaY"ڶec.nJ+ZCg\vcgyEVA4V>e@DhLLL@LV,RsV~||Q}n˖Jty^ۣR)}>_GGGB}-85|wϧShЇG^ᄑ{nd#GK?W|4%%r/?qRǎ A+Yss0WBSvߺ aYlc֖v/ y9Ɋ0D"}^I$k5 Mnau ̎hh/"ٗ^BWt2K#,O'5{Ajp*Q@jH !lNJeBWa "|2) +.v8lw":~JWsU75M ѕ֎Ĺ\ FS)\|j@D?>ka»lHKv8\:5fGW& ?8"r6e4uky3$ ?܁Rjj _Sgp۶-X# cO"S; )zq|0y=>}HDDSQ^;V&˵a[[1IIYª<_p2)8x_wg\D|ロ )Q_>]iIy9i'sپgvRT u@ϔ_YϭxNlD^l<_0q0)8Ϸp׶  w ]ʈd8]nCrB\[sӭ#?f\?h;xSg;A]gϭ[q brx^DY|!GD|Yx! jsៃ2]Yq.56wP0`jWQZQ+F?>qG\?[He3 X׎. L6\3"ꆘ<_B!D;~ᒥcvFu`052JF?9ZAD=^7T]  DN9g!LJ }ΥT6 {r [7x&s?*)xkRƠ, zϿv "yGDfqT̝ޘ~ O vm+ֈꮶZ0K!\CJzw2|8DU%E9i)ݦq$ɈhCQ~vr% G?w ?M `/ y!(HM :߿rM%"x1|ncsg(^fH8:bX+[6yGSսCAhj  \8i4jF=N.6"`MYc/Ɛq؂g~Wi~y LX6>>nfL8 9Xm*p-/⢏W_y^.]޴byc>8wߞ)k9zk B}-ԋ?=3y6jsaZRkqkT`ٱ@LFw߱ mZ+k,JY8Pq#1%۵ӉCd>y# B`Ma[Ϝ9K?6e1?zeVĢCuW/)y"RC+M0Tf7#k .Ap)j~!'V+KDGO\ID'vXP KyQpavz|"y87P^ܩT*ٵ<#-E*~f4W5s]Jd4}/'ud~dKvgP`ުQ+ 2 2Dt|-:z{hj5@S)/UCcO] ¥`u g 5Re>H&'d 3[:-PȈhpht"vAJAD흽^K.K| uX&>g}_uh~H"/Dos8\*\1vK%ٛW컑פ i>yAA`^j;-^/91|>t+DGtb}W۷d*RۛN[;R JSeIQNZO8dD(?;9r'sZ )极 U ".mX(*)5lj  =r>XiCm%'[Q+IhjisaѨ5DR8mH gs\5aSN wwDL+Oi3ی=a"zCSۺ[ڻB x{)M+CٻoO B}bגvy k#3$G`:Ǎ ԰v!;@ D(ɣ~s0Aؗ0)9 qX ...ECXPpʭQPqyl\1뙺tN9sȏE_Ц^hj5sjZ%BϢD\t:砯Z222L&S B}x$f^s;s7lHb~ˬ]\0VSCnׁ_羋/[Ӄk95"_3Je~3 5h2mxVUd(0;|]>]ilmAk;QJr¶MJeobU#'vkoᷖZR|w6}8[.?84Vdz}Dt]?REDn11V:"H O [o'#ßǧB F7>Ԩ;,#^˘ UJLQVH):]^@Pe`Y᱓WBk]o(x}-Ą,R.;~f&IoO00YIiV(p]|"Qȥ_{"}Z.xثThZ}0ԩ3Ǐ~=~kس֭8 5{voըyyDu g޴"A'z[fpwn-MIlK[+M 3d۷gkRbF6sH&'d 3[:-V~ao^PE=8<B.%M* C 쩡.N0S‰te=:Ն\.U]ř]봏ßD@4q !LJ } kֶ[x-qH$zч22 ,%hАO=~I$kq3wUeچ¼̭G, NYt+1bDpjmP Zͭ=IeB* Tն\ێJ)X0Lu}ut<('w#;IMGs>|>^͚ßD-N Vo|ɉDCM ee$9Kin,+Md@@|-z!L*NIօںe[ũhT\:VSQs[o,heIQNZ<\&# Eɉ1g kkϞ[xAZ.Z )极 U hٚ*믻ھhRZLqdw#Bg~'/ݠ˵ hm-.-,H!fgLjȧ|{\.ɔ'J Hhj  'FѨ'iCXnی 0j>'cf2=H~qO;z[%߽~8|#!6yjSHL#nD|k:!7w_Ե-~(#5\!^}xyʺtz)G{B}P_/U;vWU "9F쳷Y}P (=ep-}Kh$o.'Ǎ 5ۅ@@D^xXSؖ3'Z a_¤4`Ma|"fow0y2Ê6>>ұK^ h T M&b|}^_CCMKsDY%˝NaUVVVUݷ< ɴQrye*%YrD(|![Cs {DD>}Zګ]N7+U'O}3!Sâ+2mEy9i"{eŹ흽 LQnۼQYIn^N?.]д"j3\E"X?LzAfzb!eLXVQT圾nZvgPRw[L|{iG!9!|;ԓ;kqZwnqRN/;l2]^ܞ:|cاRnڶNU13V+RړjI 'oCaB͕u;)>6"|D$L#IOl)$ tΗ*fhrV80|q;<˔E1\v\" uX&>go[6eҪ꺖uY۷FNܺ\\Q)ʵ^}xyK7mX}pd=_/ Ӄ1;w̹߱tcCZ OU} mzۜD}~VˏyKOÜ<7rp>bgrqv!d;@ D(V<ؖ3'Z a_¤4 VeMq `Z{,VzH{ }p6e4uky3$ LܔBsJѫU*D`[ 8[:=q䄥*~qO(X;qZ\ (K:_' 褁45o(> Y*Ӆn# !L}͙'9DD.746wD,g=)5%QOV ؈(%9aۦbBƲB7tEDW;R Z򵷎[I-KW)e>;XS|Dg@oH{VaTJ9jHNV+ C6?Z15ET8WEly}Ajj\1UZ:o1H sx%a/V[o ;6>p|ܩQ+wl)3$'XF̽1#hV*dZjǶw>8EDJrwt ¼, Zx]VWfh*KXQZ͉ qY\vtMf SqcHKPq\o ɺʲ\;LD %2h`h3q_uvgPy!#Gojx=jʂ̂L"jn:~rhچUW3oQ]F3tZٖWB 3d۷gkRbF_ҶMETrM< @Dn!Ǘ§9YIDd254w3 q.;7+I!ٜUu՜-k*W\ܩae>H&'d 3[:-7 [Lj@0[PE=8Cb A `a`kQIYR}CCãֱ6#"DZf-v杖$u my[7X V(d Mc"V8lk 6Ug'v ۈ*Jna"ҨD~-+I4yO?-7[E9ϾyMjb?g`A^@:wm|^j;-^/91|>0!d\3p~5[7UJ_w}SE4.?'53=>l5߆[uj}fpe 쌤8">4 zBy0 f'[eE¢ߒ/.z{9/]޴by:~P_/OLk}~K7=НWTR9ԷQWw6Nw(/'756RQ(#rj4j"bВt$n!gN Ow§ͭP59Ye%y85CuVw_!+-IqqdeզΆXA_Q+!j&3UJ٭ʼ>U 콽 No9'򾙈t`,3oUqOoy3–2eŹƮ>\}Fmkzj↲>ːud|eeg$oPqw [* jۺLjHb&^&"U |>\SvgPeDT~r9]aCcGUmK܍ Cyv4O ҉Sw_~07{>rRXQǩN\&S "ڹ58fu )z`zh5%K UJ [LjHMISFDhD`YP^2)9?ƉH&xXz>>NS[㴪xJ SCZn@.M\p:zH,RC3,Aj8pU8M(^'/Å5q|ry Vo^h0#M/ Gipؾj('w#;IMGs>|>^w\ojXжk[yiqB!%T"o4^k*+)'Wݼ,/?'U&Q!ڌ ѵVL;QnV2^|WYRp9g5O&$ɈhCQ~vr%O>Rkh4u9Y"خ6u_h8*|Ķ@0m03D6{r{nB:py>>;dx6ZVP3-6NZQO$ӆknP~fjͭ]ͭ]SÆDW Min5B3˱"㩛LiXa&|w?0cl^}xyʺtz)G{B}P_/ "B<ND-7.gYן_:q)b[k}isoRM@Z@RC@K$Ra^6ӹBvwz>eW'.4=x)hڱ!')QwBӗ,(vvnIJ-_cY3wߵ PBY( eR;5dY6/D*1k z}I !F0A&J)8S:P*]5uo'"d YPBY( 0/ZtTyZfckk}cc kee[ʶjU^mʜЬm%%s‰p0 ==lkqƸT<)ވA/g?8Wo PBY( HuQsB@6C#..133eEccVǥRi^ T66fu8l)^"SҲu@(j4:\922HD))z} qccָ8=ˊBeE$D$rZU *scR}|LD׫7d&k-,(\܈Mx؂J__B2i~~)ʺqe2!BY(k-LV`fys.q\oOJ eys?#))z{)IIVu8l.vK>GGXV\TTRiRD40-ʋg)][ijUvΊX@ 87Y(ƕ ( e5VVl>H,ϝO˸\9D"HILMF"DڔD"u|Vq^M?7XܬBrR'8Bb^gp gH_|I$o܈DY( e,`}BY"JT6::ZR"~'B!K{ IDAT1"OT(T^ghn@:hTZBi bX####ccV BId~B9|z^_n}9\?RZqz~~2RZ817bS8LDܼg1 O },PBYKnmPPV*5Rf LTԜXr`/--[O{P%%B!O08ؗ,ID"U(jLJJML4DbRD~>kӎ 9#cOK(hvVDTJJ?2QBY( e,+[L]%\P#5#PK%Ð7](+YVqr8dDqFL4qrVLy4SϜ8qq5\Ksv#tcCZּ MM5kj56^ ujX]}l(DzZkkkԜon Dp\mP^HDCC~Vss dj=pj(+d)υleʛV ?YL B}b7 x2 5!Hf®|80^jxe$0=/|CAt+ ưKKy a}iS5yo""bf [e;m6;||+Nq3 L:Ǣ/hSчs/2>>Q",ؒNsyʪ)+##d2~P_/?Q_+i< Ŋkls.qy ^fE2<rv<]|5şp|!MV Rߌ8) !*\~  <)Uj~kĬn%Km}ڬѪ&cEJckkGiLCya. 0wjm/ii_#Ώ<[?DDPx"KD.5{Pgk2Opv7MY$FaL. e;p@wV^R!zj>!/ԷQWw6Nw( i|j,v]d( tR""˩Ѩ{CKrGBj|ᩳW]԰&'+$Ofꮶwt+>=Dt%=5).N588rB}̔`1c^/)1NRT/Oyc3MP%9iل%"?D !uJQ~ݛ.S_7!^s r×)+{<X%bц|]T흽DTSƮY]HDyQ"҈Q@#>W ~X]6di֨ _n "S>4;LCcGUmK܍ Cyv4֑雵؇cj6cOQ~zאHDަVF-uW*Rړj03Rʈhxds:FDJlJ2j'.pD`YPͲͼcK>^ctf{VT""q>jD@4q;Cb "bj6|åV)4md&x&]"7{].L&iinO&R!P컑\ i>R^Z{_zSچ]Ks )dQ}OH$ٯ,M1Ȥxʒ?y2$ɈhCQ~vrϕL>@,II..K2u6edsx]aC10uv#B1fs9.nlHDi) IzmcK2tLZFUs\ 'FѨ'iCa 1?ɫDwO3 ^qfԍЌ 7q46MEνt0b|%=/_\+?s_Xisu#{퉽B}P_/şP[Pvhl3b"Z &e텺$"9ǃVŴ64Ը."cG굈VCɣ~s050)9 qXsO\$P;}^_CCMKsDY(˝NUUUSVFFdB}P_/Lj;2+by RÈ:~w ֔Xf!j8n"L',f`ZʈDOV5ks'GDOU,;nEFb@pEZrlŎ-'XqvĞzNnf9}NM!i|(hW2"j&.)̯&VS?Dh|n^n꘺= {[M㷅-ǏCDWnN?Wwѕ枛3GEDM}fS&pTF"89+,9,Q A)D%/+ &Q-٭v(lѷ`we;r2= սce+ Ϩ~o9\yY^ѯ+2 ´bVCAWИ2=?=4";h$%,r!MVOD2ƚbKQ9ƻ+5\&x^׋m} -kPu ^1FD"=jJ9Zss2* uZs_R]WS9&RIYbΓҶP+'HH^);Ȭ3Fˌw jMNޚ&*%q*o=Pef&"hc40CӇ'ƅINƪV~ ~EphAj ~#79{zveѨރu 4sv*haQ}{ʌz\QrV~aڒ|ވ0a#G}0bӥDDz%r,Nﳆuښ:XFiw> =եUj2'kEGT*!")GV U_SYls»TQ I-VCs!2/R Ub ޟˤRYN b|竫i %y93]vTN31~}}}sssb26M|ׅx!^8uW}E0BYkoN^Hpyw5n/^K?W.H)bF3DէlDruIP!JjrbH^PN Sy KDC9{}5v6掮ȇ+v.#nT0By>ޮu߷΃D厑)aODzctt ^8V* _mezGd"pzĒt=1Ka[G0vwOM L,,,DW[6BDDe"gyCGKwBj 2qi5/-.Bj;404Rh`$$]h?8<.Q]9njj+{-yk5=]|EPyZ@xjM aeY}\QnwtFvU bh5RjѨUwUJݚmy;ģ_oKDuݜ_!+=G ־3yt ^8V* 6D|h,;8zG%$qn#,FïV!/dURh<5iՏ=zXR/,v v)g)ŸzGP;P# ~dT9\NeH /}9p\H D&.wQ3|DBk֖@G{WAv=3Z *UENqk'gu"j1m02E_Xg6J_0[O @jh6Qg2ѿ\55+p4-Mi8|㿿g*,=ogpndNЇWWZme4}ru͟b` 2: Shd̈q)!.Je:9+R.O~m40ǿye٩鹪""j;d_гE[k{oi@n^ϐOm@W|EphAj nGRj*v/?&d{OV4i4*":X}:tN6;g'"/Tra’9wiD"o=`.UK:+ftrQJJ 9g5 Jqi5,/-,/5zw1y\0цDrtk5[3{ yYo$]Ze"')XjX-+6}J5Y,~y'.WY weǿ}xl|el"˕vzpmuF yy"=tWZ3:Mf&=G-[.F?e"Z μ<64MLYg?8wa]x$~Pޡ@by )ԛDxܨóRv "/R Ubi5҅ɉ@OeR,'ׄzH^1JN<|uu"MA^F4)kr׷xu&vYoKam>j&b}9/gtw<1ߎjt&֯onnNLYff/ B/ǟ.0pfzr>+y7 ylRC<ϻݮӿxg/_ |m\VgO6%cP@J( ya^CNx a^C;?DD~q6:4wݜ~&+=7'gp4wtu D>\QnwtFvUD&^PV({kˋ-&J926k±RH|h,;8zG%$qn#,FCI\Z ʴ|g78< [SUpVrD܏J""ɲ ɳ#;r!5޵ƠgN׻p 3iD``$$]'k'ntኞ>!%SyP.3vCt:׿Vh4f/7ݰ/_Rb/-)iԜ7~su қ|EPyZ@xjM jX\X@D־EKːzEY}y~`hHRlڡrw`tm"4H%l#) zL&e/7;gR]aLOWdCk?8//1Sr}cYlQaFE"1VbRB\Z U*%kW[ND7/7Y%宭*-_Xtj2dVeD4ykP3|ƠA=zhzBy::FǧӾ@CvѩN{-[3oFF!ťrk4*V^VED3 ?gHQ 91]RTm6Ldgs2"F/,:()iDVQ}]Y}]rRÍإt)QCwEcTPj9A Nqi5**-:FFEi2LQ6 O.)*(-6U铷fĒ/Jhbr:F&"Fv{h÷$$!L6 U_|/rlRVlkXĥʵS~A|ׇGnzezwDnڪZ)_U Dz5Ŧ1FoĕBk&LӦKam>jL#ַZҋ?}ԩ1ߎgzgḼtqob:#G/ B/7MjmC]x28jH IDAT@zИCDRCjbi5Zn"Oν/P+VCyOw.LNx,Je9&@egS)#`2ֶt'QV; zoM}}}sssb26M|ׅx!^x =evW_p],cYIQӵKTnؔT*).3r_vQ8IHmjnO%l`xb)kJOJ6gFˌw jV<?5-:”JKLD~h`}Ю""jiS=r =wlPmȄ0i[v]QA^f%?)l&"s._nIůn"Y~32Z ĜYC[R+==ؒ?2ƠcJID D`_5J":Pu*QUof=UEzV+ eex>pkfu%<_m ߞ:FRu(44r~sD)M=p_Ced|v1N[Vf.[Q]OޚZr鹍 JL5k+]`e4wK$+ݷzrDroz.I*/9yMAAX)+6}J5Y,~y'QwpmuIV~޿o`lOuF6n,3k4J/ԙ߽qT*!L* /3|=r٢Ýid23"j1LD*r6FN"!kHJ5Ŧ֭R[ Lں]e"sӂIʵ2F]}#{B+ӈHQj-BjLWF,.]*z$$N,˰,L W-@4bh53l b>qenNǟ4M:fW~0BO.֣2XjI/SN|;y띧y21~ֆƽ)=,B/ B'x[4aTyds!Źř9;|/)ƏAs{3<ϧb˳>'WW=V.1bh5Zmn+YP '*/R Ubi5҅ɉ@OeR,'ׄzH^P>u4[X$?BrVk[OwgVNgbnĔe6m6 B/ xI c,y7 N&mu쥟+1M^S uIw؁J( yI-g 9H ` bw(;LD~>26@~]]W]FD-%u%:ؙ@6BbbT*۝#c]߁l/+Q/Nʇ6K~2G~TB2pP _8=bbt:ĥPL; zq^05U%SCDepd+9HDDe"gyCGKwBj 2qi5kA8wpafz1iOp:(M% 3 VVna#,ؗ_H/v^R\6Tv &nj*sWMIQ~xj˪,6^5a+g7Kklz9=:;Eh+ܕV wzѯݺ=pryZ l۫ؔp9w5 y*,+vB_ ya/I\Z no~omyqR Hvs`S.}zek7 횸5id 2~zfz/¶zVgx> :,òL0)\+\1J^"FlabC'ƺh-Cḧ́xt)G`VKzϝ:u2[<̓64MLYg?8wa]x!^%8ۢI :CT١m C=)VCPYCcFI}~` ;UXZ 6ۅsK2T@P ޟˤRYN b|竫i %y93]ējt&֯onNffu!^x!^?]4a #%/\!5H #n/^K?W.H)b&g'RJ( y2BIm5Db('%sGLjK#wR}LܚKk ]uˈw00?"C'B7;go38< x;}~‚6:~ݺ Je'"'C%?e#?*!?8(s/e1:j@Lj54[*[2kxKv[GtV)h~a+r>FID6T65Si3rS~əf6bӥB-ûb̹cTPj9EͱAm1zPE5T[zG'";]nZ2Z"btnFu?ykFx)\.=l2³S.*55=GD.GVLYVKD.gtF4BwD"Fǧ Օ8_ܳT_|/rlRVlkX}aξ0wC7=G꒬LCC?)boh]MٞZm =X_YYfh>_ѩ33_{autȐmdw[.~JD=cjKʊU4"2gQR7j9*eKOu{}oeo}5Ŧm|bFUW[S>85-Pgz烙.2,UK@ $ ][Z.7-7|}'Z3a&86] kGQ/7?he:Ւ^sNF<;O?dbn {S9zX|ׅx!^x Nhѡ:o>Xl|>dČ_}_nVDj 0, |@Do"PeF%!5\r_maޔ+䘼av?{')E|8P.WqjJjrbzB ?HB- Ņ){0}Ee4wtu D>\QnwtFvU$s}[?xB![[^l1V*Α._O>!"k|b^S׀c`͒òLjZ G,yYN\T橡Rvǽa`kJVR$Mg6I#ZQIDp9Y!"y7t$r!5:#/~.m5=pÅE[Š?<(MDyFQ2yʵNKD ^+J.O[Be1:gE:g7ٲ2=EjUL&r]6#o~㮈?LDGEv`޷1I<5,., vkߢ%eHDs:Ք /39FtǥRiyؒ/>LDS҇G&nVЇU]Y4<2(FoLnR=ޱb1ge+-=D40|=4kX(I$u=y9D.#[S3sE9}#mEV6:~6zK(-`].$?`ٕ4 ;{F(7`6e|kmf2ZE?fdB^6m.[Q鴚 55ϬLCþJQȃXXʵV4?z3tܼg%1U,˂\dujKxoj_Xt2WA[W]|K}qKR^ "wwԐsb/ۄSXE VVna#,ؗ_H/v^R\6T/;M jU,箚0q_2=wМjctI$ӳiUK$֎͞eLFߋ >z%r,6M <=z_7O \0gw}xY]~^֩7)B_6;[ozreeS+zQ}ZFoܩS'cϼZv:뛛Sll. B/K);/涒DSï|xs嗈^7- :)$Y{}rQW-MC<3Z`秆r'y띄t5ae( B/ <éYC?)H !Ё\ׅx!^x vNe: ՠC!:P/ B/:ѡ 2ʷoF@R{yq\H ixD%@ӳ1@2 :P/ B/:ѡ eH5 l$H !^Ё\ׅx!^I/W$A2F2ljС  (u]x!^#ѡ B2PƔ/xJVm9"=*7yNhކ/g?83O& {v]Gu 6WR _%H;5xIX^HD`+/ BvuL?h5Oj Y#/ B#B/ .)ޡB/ .PHz@A/ B :0y މxWrP(1xELP:!F!^x!^#F!^x!^#XB/ .PHz@A/ B :XB/ .)ޡ)!3Ȕ 44MXY. B/KpTSFj/@J.x @C x!^]С ?|H]F!^x!^%G(Sc[L"? / .7wG?1N #b_ICG˛g_;7NQ/}QC7ndՍ7IDAT& %r" B/ <épg (<9&cUB/ .PJ4=`/ ep}D_ >gẅn>˓Wӿ<)J`D^ŋGx!^qʰ%G˛Ÿ _g7 <~JG:_YS?8_oܠ%%Ax!^q#e RÄ|mZcaIa78 4ȷͿjW&<'Px/K:bLXrR;%Y&7 >w~Ï|7e[ 9?BY( e,yTjat)`v 9^GGlAa+xTx:h5ܮ|1k m_ >']XYDa?a2l ` D}/<5ܾzIIfq'ωػnCZZZ˲,~ 0"5|ȋMAE@”אr!* ]Lޟ^I+S^_L:t$F`?2; CvsDzD)%`T6e;Zx߆"yaÌ( e,|&pC4mH @R*1{/D#Dʇ*@j+t(@:!.PRCcz fGY( e,\e9z8)ՠQBY( e%WYx @RAF($VH VB2C!JPPP_e,PVruWfGY( e,\eyTÍee `%P t( 5X e!*05fGY( eEA:DYw,  0#?BY( e*'I?P-`2hHf `%t(@:4@D$W`= fhOװ-e_/m`'- 鯞IQH a#o?~x0"_=`BrR?ؾCDۉ*!lsjxC{:7=2$vX5x[2-5t""Dj㾒ʾLD-X|P 156vwu|`ywW]ЉB! /Yt>?:ٿz{;Dl伜\+e7.! /6n۽۹y=-DTZ;5OTT#5;5Hzd?׫OÏ_wy"RC{; x GN!!;@NC-z[o5?X̿[\)CXH5D^x /z0rE/55D^*Wo㼐ydջ!$ * N!Dyl5뿢0BDz% ---[?e/y"RCy N ߾C/c8b>!l󟨋p0fIk|^U*M /5|b$ + Hoœ$V~h'HF/p} pF,FtIENDB`hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/PatternBase2.png000066400000000000000000000755751211146647700255210ustar00rootroot00000000000000PNG  IHDR^p pHYsutIME(h IDATxwxם/ߠw `XE[d[KbَKlݛ;):ٻY:flۉ;N*۲(V ,`I`CB HEQ7_{~zo@N D/A0r Q ()#Wl~_ #Ob`ƍ a?:^u!b=3k[MWөU91h"6VwdVCX5$^{k_'N{Ş₌G'cu hu&̜O7 ,:N?ex8`t'8/x[U!\uDUG~SO5c;'>sn2)aGs ʥG3~E~~PqAFmC{2,*ȟxv;xf~j6,=obkjnx".S뾛cՊ+s zSgU*M0+Œʪm DY˲ٳJK6huL۔=4􉴷ynD:o K\.ӟ ߨRk2_s͇ )+zMwpPt6t0mLb yYWH#ϟd5rKj6Vuv4w*(* .]_f^"zWGFSv}ӡٻM_CWpm޾䤿Ύ#m_ 9}??BZ=Lf[Μ z.;·cgN}ynH2ԯ'V︑syeG"9gŅ> cZ&'D:{sH.?R/9|#4ݎI(6n=MD%m/~׿Pc#gN}|;Ba`h87+-gN}?Ö!I)iL6'?wbrvCC%Xmqmܴ#3+_":h%NOD uL-_r  =㉲t{nr*+fFʱUƋsPa2f8yܮo34'2_Rl0 ]܉<Mw/텅fFD~ fyޤC6Μt2ħ{<`DY-;XQZ/~69aBܽ!eu# Jhdw㟾w1al{f]W+;HDO}]*vx/1۽==)Gϱkn5FZ3᧕*u˷GV1kϦemu1]\|p`h|3FFƈpH,v%1))QCL4dr"JNINkG^+7h!s1]PX,Iȱ a` n}#P=>sDU#u! n_rX*\#+ Z^{go /7~H ku}>oK~=Go[7⨣ܱSv:rLӯRcjMzD!ENT*" }&ˡQ Lp%+l{񆺳so|&/܉jPDDKKo~^RysD*zkK[GH7]+s7\8:|w?jZ j-8 =9vZ+6VRҚ\) ibD*%"ޞ 15ەX.4ܴC.WXGzM'D$S(NNX\.gzy4q\_.Q^vJ,hCcמ{t]۾J5 3sz* E Px{^~9X>?IӏNΝW]W 5 pUp#'T|0@!uwrӣ=(czǾC35VXhk֭woi5W)ͱ߿j cfOlܼj=}'^_GGAR|rD$_dHJhmv9W=u$f=7W?Dw~I*dEA)~9DM+=#[ӛ/1N?b ?F({̊Q9;p ~bC\5()7!tN!_ybd(`CCCVN c1*3sӖ]1ܿ}~~:dn/RBWrEJK;d$k#mCn'|\HDHBܿqӎ Fޯt9,dEh~>oˬ kkh:DXCa͗0&?߅ ?,{i(U3̜tDIW&˒S(kF]YqCCU"l,嫙pa/vuE좧jF&\H9V)W ˞{#ݕ\5|h|/kmǞO~/sX&TgM\SWy+yjАí`mV~_@鮇L2ޮW+xj;'" Zyӝ$`MD{QbqX!+^k`k珐 zMm#B>I Tj@>@!kUk[z6fǞ"V7Z]y^F&"H P!;s`y !4\bݼ{zQy_=O~xHdoy[$P(X=[bv >;PWչD9y+KRS,,YbbBJrRcc3beeJkinoTٲjⴛ7%@ cnȖU/6`aNPs`:4ܳgP(h5V칋ѷdس{{eEN$kDjq=}fͻV&!1C7.{bƿ7sJ0L|B_}ARSLD~=26f*GVrJ;^T\\x?t'wώrp;=;{Yݖ}f!t}xSvRkiYFAnDY[[pe}uTdb'rssgI۶QFzZhG}{wa4@Qϻݲ-;d ϻO\rt9{᫏>HD }}Gb0$ƠB,Zчu8O ֏AK[kGY>Kl.@r=. ȜՏachzB!8BM $-5 ?3Җ)IDCz,+ݐzәjL)P8opFDٳ-mCaDRYQJD$4*c^CDr3}>|By[@ O@3W/s_T"7V?eXd6d^Jrj~zjQ{a* y^ۣVXJHX/э{wхy?s?fqwА񶷛~?Y]>5?aM322Gm}CSNvfiIMLLotuF|CDS+Չl>C'0j0Lņ˿n܅lYlN' ɪ0T*Y/KDRv RSa&>>xV{6D#^MK9JB4rvu=[B3B;J"W ~C@cr/XJnz `C\-Q%OBC#B 4(p`\C"V7Z];6Dx.|'O]ko XW+xvۄݶZܱI(dX֋@[狊1kM>@@$|~ąF,YXp1q!mqQDD a^ c½ /#޹d]аr;uwML]:\~cg[fZt-t֢÷lF%[gqZ _ſ>տ_04YYMz;:<7*jsl3 rpx}{eƜ$ٖ/< |o-;7$xE"n%JCyar˿||94 99E*uwt\z=Dt~` f*gRjeQW'b22KK7DXz:"4 #~/u" EyyT*jooB"*)TRI'WTTWOzzNeJX"FTo؟Хgٯ?8?|K(.qCyX5aqa0Rqb[ SSl&sfgYJ'E \=9y,)=.?ϯ{Bq,9tf BCWņ,QB:HDCfs1INNdj kEk9.iX$?qÐP DJZz:(4 `e%r8wDJDNTh$ɉjA\xY"Ϭc߰P ,cҟ-?|9e9J(**@JZz:(4Vp\>J+FFzRBZGajKHK}ٳWÇ)+H'vW9K SJK7#cpe%!<pe54`LMfp ##ii9 beYZ|1f'23339;oټccT8߼ygeĥx/ \#F+VQ`=D40Ӎ @04ttS4Ǒ|||T(egetuآ,ɠ2MСPpݭd=Dk6,Yxӵ>. [j՝?8wC>C\ӊKXZ?yP^(/+v5g>ZFwU!"d@L&tx+( "C]lno Mi(E¡L&ݵ"#-E&>0kZs]=ՠ~pg2&i.sI69n/e$jjBػ53=r7u &!AgLNzw2 cC7ˈ.V!"Q7&7S.BCX84LKM"[1^ s&|OW"Bn(fn(TǍ=r&,My965Nr2t7>\Ah85jT;,ˤplC.-6c 3vl-#a˓azӆ k^/?\"\ 8Zb֤|{UA^fA^&=qNCöޮQZ{Ϝo"bYTjѱɣ'.zY?p9X(o.g ."4wuɆ40?2l]LJFF'B5j%uvxY K] &"7O XXg9 )Cccч "TpUx_3t8̔UE,5<^QNƓo^j's>x&|cVh\;ofw YƼ,l'" NR!(L695mxɴ}kiQAR!s)I!ugu鎭@C*U夥8\]u#\ND >3/x-6S2Rbgk<"kغDU4_h6f|{捅;]?8dE\%Ni8f^ͅLVj5AO@hj :|?lV2!^ 8/t)/ݷ2i?WyKʤ޻G: ByP^@x2Z" Ic}Iq#ASSBFR IDAT@X\ɑw!`]6:eiA LJNC>+#=QRR!ivLXGEl2φK;tzwoH$?HWȟ 4{7glSS][kTYrR(NseqUUUMMʤۻaDU|^(:/ uxҘ{o:-|q;|dLˊ>"hiBõrv^Է ֕~J̆"BCgP 2C&[uq!DObɲ ^lZ ךƖSCDt+6qn0Ype?XL&ݵ"#-E&>0kZ}n"| o^-ޖ'jqDdϼߛeLj5]惏ʹ9n/e$jj޺uiHmVdb!.|`݆nLOqmIH+4dfynC% ~9\NVCDDopMn8].VGGѣ1II,d_t`Y84LKM"[XN*;%5ŐG׌ۈ(%9aR. =^v`p\MBDR :oZVY<0R-/VȥBFF'^n%;Gja?8Zƪ^曎#BCCeGG(ګo{ݸzˢk Cé)Vڱܘ`7X&mAdV):zǶ=AD*rw ¼,H$V%Y=}}z¼M/i6$fU ѓuяM.=1a2Ҍ "6"2 !AT<~F!J(R]{UH+R wkY\xĩq=}>߯_yq /X =s`oV*,$'.WoqbLGW͂kSFG&Ƭ&ADRr[UKk: 27o[!V*M-]#E1=mX JZI4j֍ w_ޏZ%T0LmcubjhQNƓo^j's>x&|c߄u+;;+[~,yۍ6c2edC</d@QVFB!LO^0ξt\*E^󻷎Go0 2IJ>tQBHpq*}fn%oNGSTD1J('-rj I!Ƣdۜg^Ka^'0nI{"Xа͘"Xg>[xEm'NUo.ѨU^Rʢ詴\~Njf>l77n4; i"q:*][!tZNqBIhp'O۶ *ą~]+n"wY'?c2af³ ^}]=՟z͖^%R?IDzНw;LIZÐ,!ufGLG@po6dWG),5*K>}+sTLZ{kP^(/lyŴ'|(W7ҨD4isOڣYz 7Uz=uz-:a-# Gh"ąbòʝ^tizDbQѷ*N?ߕ 덠vE\CӸ#Bd@ i=P{2ttS? ? B~4Iiزz_q(G{B,|v|w^&lhCv4ˬO~**+&lzY/T,z\5 \AUUUMMʤۻ ByP^<_s{Mx?1-+bh/ĢEx jhqz?S/XW+94DL& 1TC  ?! M8.4BC01;x. &eDZiubG$٨Q+Xpe^at;^FDp9Z 5t86U̼$5 );U H3n/=mDTnLNH6" [7mHzً v^ZQ+\nGj\./?FfblCB. ,5x~"DnLLhT Yzf<kEi`izyBârmEy9ibsKr;JNڶe;~FD她y9>`hlCNDRrya>5ω4cH$8w#BNfU,ʪg[iz w Wf;˷9;* +4t]m-Q]jF"jnk4T޼}ޝd"r8Pc5C^ܞҜ&tS4Vwo+V)eb\ju )rzh5X;8j?MDۉ"N/Oh8 aG 7$Tbijڈ˲D$L#Kl!˥JlTŅZB${D"a Swh)p Ro t$rA04d|֌M<.We #f\VSZV\}kYx:ߍ[ˣPȴExvgI1-JގycL*i03 eřa+2" F/V+DQNƓo^j's>x&|c_$Xowmh(`DiT*dY)3XZ0[.tVklNJӨܸybe}~J}19^.&'UvfL*ǩhTJrR.r9m,N68\N^ 9~)xpx64d͎rFu[7mXV2$+#٘Pر}KɼyO/$vv]|CR)c}Œ: ZL2as7pk!;Ni8.d˅LVj5AOXϘe!\KpNݼjMC AHjHԬO~**+æғnu^}V?WyKʤ޻G: ByP^~Js7v)cg>2eEZPix{$|O$^{ 덠ν ?9@ DV+S? ? B~4IiX-eǞ()KĴF{(/!z(dlSS][kTYrR(N YUUUSS2ieddByP^(/\PPv9 Pf~EXAhkn ?~,Kh(X}P`d2eȌ|XWBDx ,5Րn[NDz-#ktj[ZLfWĹƊ\ ͆ 2t׶L|vdmh.g|>nwuZ A-ޖ'@8Y3fZM{$s3u?~/+%QV#ֹo(ػ0?#gLNX!{pjSm*P*d(P/e>̯DDWn"_E~y*Ӆab? Z0-5^hjnc9D/z/$Cbfw=^36n#mKTJH$xفs5nKDw 5^J5&贪_q[^Nja^Z%g}~H]C'뛿DwИX,ja*9V7cr|nvF`]) J)8>:S )zsr{cfe 2>Z`DY k¡ԔSQZnLN ,6Ghc_eYAɬRuZmo{T y9YFHJz,6tSVa^Bm4r*ɺHG0L^CDM$#Ͱ,㸁!+UBay`2RJ3hxtUƅ):njz w  =s`oV*,$'.Wo~%Q:>UZ^VGm1Z)JrR.r9m,N68\N̼:phXfLIHE,3ixDƝ9qzsFz} :7WEOsR3 G)gi6.k#cK eg$$1)Wwpo(@k Yx C9lo"(X!{d,VCNi8n:#ij5Zf:( 󣟼L3wW9kƒ7\gߡӋpNhހ8Z𓟊4}EJŦw[rzW|辕nR2iByP^(/﹟s܀{MSg>2eEZP0Db2xucː9 G@|XWG{B,z(@e65յ6K%-Bt:WWUUԬLZkP^(/ 1MP/<q{(3O?H,5 >n ?Z$ :&B.Ĝf9BCd2eȼFNq!\ aE-˻+0x D):&C5a9Ah4 .N(']᷉s3:XIݸ*-~/FZ_/~y3}#(i1~_DB}:>EDnoMDnc,MOnL&iqjӭKFvn5YB"^~32Z FwG_ZjƧ1$Yaʄn1>_$ W0B.#I)"+_e326׫q:u^-mՏ>@!M?pO N RRKʓz[2yMB)KVi;LDz-?3t.Ɏ;ˣTtZ%yYU3CCÌDT2j8J3OcuU9r2|;|TC?3R.}ą1K]]UhXԱk[EYIR)#T"jl6]镗go4E"j4o,IˤDfL tI܊i8J&"pCߏU夥8\]3A9)r"Xlpִ Z;n%CݼjMCC7QmcedrUSwoR/NY$Ve>x. x }Y)zBp۶+pH i!-:wEYEQ,d÷i,3e8m%Y(k ceDDS(\NkCÎΣG?%b ׶ȑBZH i!-XVC[S!]vTWd87pn ?~רqWtO%Ү"!3`[MkVʫ]"3Za8XMDk;-Y9j[ZLfWĹƊ\|b2P^84c_^w'n%"Pxb>;lEGbmyB y7˘jڻ%S B_VJFFĢm5klQOߐ6E3=4>4H(·xKKH/#"rZDL p\ bԊ8}؅ [ۻMkrRKq븭RgWFDS##'6oL K-M-]I8Zi;sR^D28?w,*KsҌ ^w2t7>@_WI{$zz{l*M]$w|I?+.N3dJ%: 759IV+L=Q8?-3@D#yDbVrOR#EztCmCTQCS MDty6Vuijo+ېaO|/ qZ<7nNff$k4*:LE鑎!=@DvVqW9--~7#` X-j'Y'H S&DN9,8P1H(L:]&hAD}vWd;=ER/E}ՖW&@`X;BHH IRf2SL75&#ycj0 pVB$k˖қz{\jK@]_ߵ=}=xu#^]Bцwѭ5*RJ 'nŜc;-"밅3 n/^1<32x4l sU?J;9LmUOEҒ| Z)h9}MfTUHsk0 YY/n ?xaMuimUѐ렍4l*+vXSLFl,*p]J]!e-`Ѵ"AP+nXWUQ^""#NuGhcNfrZ;2ʊ [7u6 iCbYm6TPx8ąXXjя=3,yǥNcV_3"L!.$Nuo43_虞޷{%g}/ȣ%hų߰>#3Ch<ʾI_K,wd2\< MMM9Wyyy___]Ez^TƱO?y aq?x5v^G. ZГ p-8<@<[(s71^?@SB99xϗvßSD;?xd^涶藂V_W+"G[;;Wԯei*| yC.^N?Dց%{nj8>X0aՈfֵey+Ӌ-#VbvPj;o $ټFDv5>;JsWkDG35{OPWYi˻sBB>Cq͊ 䌩]":22XC VWK {ύM|.M26"r[vևZ̗Y"2:6!"ccCٷnu-zT-3(PaK>[*Pڑ\kҊB" FuJQvGȱm۷$\_;k]w]G]ҋJg~BEŅ#5`)c([5}~n(z BXE.I{{|Æ 4Z(&}--;[t%gSrH444455%\}}}w]Ez^R]hʚ>>CO5QSǽS VyM%gQu}=msJГ p-8<4}`g er)@-˱RPNw|6x"`.Mmm]/\UVDvvvGWW._[ͭ@By}aUwܝ"ޡ ʒ/|pYi5: oO'aq]6UD-C9vH)z.6ZjG]аl󚪊k9VhF.L8=>_DzN;{9J3}nxǵ, `Zd r`) bR j1Nˀ:l3 uUOyMiA2S[USѝה۸oJ)5Gȱm۷$\_;k]w]Ez^♟0ے谯mCxNC*c! +RѢ5t ;xnRÖ{jt" ıP;AOCď{{|Æ 4Z(&}--;[t%gSrH444455%\}}}w]Ez^R]hʚ>>CO5QSǽS Vy͢4k>CO& /-  k)lL1Mmm]/\UVDvvvGWW._[ͭ@Xjl6nߺ|Uh/\>q$\]D>8rj>[DGm.}ᦎC!"NI{ktSD w`c>_@D'D䩮G:>pqR7fF@ZjX^V$"@@˰ԙ-2r/Lz3y9wݾ?_c(ZbǶ ^dkGoQcM*K鍷PW7d6lV:2g(/˵ s ӛ-#Vbv Y"tyK\yjw'ZN7owXv%apJ9zotg>ukqaݖ=:6wdgMeَmrs} <1㧃G'sFL!՟RCk2&Cx85\}kM1dKb6Ed ;ooi67|e\D&}>jIGi XnZ; Egv$kMYZȵA4jájI-5^SnM婶n ("Uwwҕf6kvx*"nGD\.Oxe\ }^ VqVWU+ѝהNVTt5%6?S`IZjxիs?{ 6kvYi|pd =iCd(*+GFET{ύ ֭Ym6Ŝg_[Ӱv*c5+ C!1"v)ur';ˊ,٦ /ὣJ֬\] ظK4f[COfl֩)Pظh4}4r+N#3}/^/8__>}oY$KH]":22h6Ϻ6;("FƔ^lQ빡KՕGoPAD$5؄KD1)"&c46^=8KhH'<ǵ, sP2phsV栥EZj;i}ͦ5g&ebV j1:DDr6e١Օ5Ue&c`0T]QjEdhRY&ZL_=IqfT{K"ш^Ƶʟx%҂e;)ɷq .T n?79,%=9r杛76 ʻ"ڥ{n袈m"*D򌍻"F-5FCA]DƜJyfp˦ڪR,&G^Cƺb۩լ, d4ֺʢۥ%OR5Jj3zs˦5UeZf|2u*KDdة}FD.ؘj59= CF:7uK{OiQd42aP(H@0PSY $ $vn "?%jYk@uXjя-`:cw\4j8 2kRB2Tk~Q{:F3}Yr6K?7z=܄J-$RCRÖtGT\ցWZ+_K spxh d4Dh ʸ|l7lZ(Oor5K]r65L.+9DCCCSSSrU^^חz׵K"^@Jo Kua[(k~ =FM=ޟ>'O1@ZQc5"2>ve|ʼYvW>w1 8<4}D[~n/+\y @HlhPD3v"E S,k ~9эȽ";MC乤ijnk~)xmu"r;zuIjn mF-t| yݽ?wwtiںonydHD\S()٬Q-@8<{+ w'^/pF ?Go*zύ; rcNyWIX9 >?eYED?y5MMhq!$Jt:!a[GOW`VfOmJh?):c;6WWzGYSjݚ tk&N_|k9j߼ܷkGW^oL0d8!Hp\Ž#~nj4< CFƮݠaڵ5~`܅-k#W[z ^_[g_a,l|>јL^j5U zGZEtYш 'lxJºzJdeq-#Vbvdh?/Q__q ?yMʌ;'.H5e"rԙg-jJ9za7mWF1N7pHn۲ o-"RZWUQ?ܪ,on"?p# sƈG'sFL!)D?}|9YĻ^du媬̪Y1lܶ>Вm:WmzT4\PPcP5a: 9<}kMYZ%srKA4jáY B`RZ(+w /q۶5g]MF5[DU.OxP_4p.7m_o4djm쫬(ٺj+6yupSňmtcFӗF5iJ]UDw^SZVTt5%6'TޯaMr5D=5PvjPX\޻l6AŔkci)-3J"Wݼc}^79yV9yWDvnuNǑȱh4֟V٢ac]UYTj+b2Edk]meQR꒧x)kC$jlw׭Ņyf>thȪ(-+)x7ՇWu5š;;#6t_P_k1@+2E$lȮ,V(!+CD&CS[ΰmv5 PļlV:^3T6e:pח" |;Wtܱ?b&p*3g.޾@x_yiDEęD{G}(9jygt(3+vh ߋi`0 p|eC`葯uGʪ >b.|\pڗz_n(!@_"=0JKKDdv9ں_ ^[~]m쎮&^]R[CK8ȂBÌ Mk*llV3>~ `j5:Q~D p9FCAqw e$ (.ҋ"H/KA2ʘ-! u]Ez^饠B ẻ e@B 4D"Q"H/ҋ"T(S9Q H7i^LH_)3y. ̳?Rh(qDhJΘ(Gm۾%9Wvߕs%#>zו|sjz|^+$w g$$_WҾ|]*UӋZ  4DJEj TEW/+qҼ2!R(GPAEz%!R(GPAEz%ʀQ|T( <_WP 5ŋU>$jh(N#"_7X <Ѥʵq 8ҦEnthX}"oh.x"] -BW/+qh !FQ.TPF|aP (GPAEz%!R(GPAEz%NW(3 +9#CTT%mm۷$\ɼ]JJf>LR5xH^\Lhbd[>$jh(Q|T( <_WPcߥEBY]hEz%NP _Om {? ]|-_֡9ZW]`fyx<^=}O^<ޣ*ryx [ι2DAAAF$|xX~P@~('R 6y]*UӋZ u=s!&Pd(r8=vvv|d\(GPAEz%H@zk--zOl8s-vյnjxZ( -^y0~hg*"wcąn8c|SJ x+~/<Jŕ BY]ˌ e,g .'Ah~{/) ^jA/=쏾 q¸$|kȢ{b /Ľ09#C"oRrꍆBW/+Q -r)/ňU̻gO~ j BY]" e!^k>q˕AT*Յ J/+qPcm\r,:n+@Eט']-V,pc n\(Ow?~eY\ʷUݔGu"F3!~MnYRZ_$mom;lXK[M7Tv"~zX rdg2wZ(c)k nq}͜Y5|kWuvv1B! !8㷹jUYΦٗ6 nᵛocz&}U%D .ԏ:@nC\-뎄nm7! 7#\Gym᥆?Qfo<<\~y`փ:OhC E,B5\4HD}-]Ò"}ZD|Օ52w At F\}Ŏ eW^ez*5nGkm!ZWXT/\f+0ѣ f-sGBCHko}oDd;"I_Wow.|'HoCoZvѼA8nF IENDB`hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/Riff1b.png000066400000000000000000000735311211146647700243260ustar00rootroot00000000000000PNG  IHDR^ pHYsutIME6v IDATxy|?%˶l˶|_$  @ZB)~,v e[6lZ^3$ܗ3K>C>d#iȲ%;XCxf4yF[g=PsNWcSXecs.iDEn6xESkj IQa!Xe'OsnQaHabwz#twa %%2 @LGTE8Qp1"Qyz]_ 7\L DA QfQ\R>2jGo|_oiELb`H a?Z,a7̞nsc[>w'u7wov>gO\<+/77֚ۛݹ[\X,TTnMHL&"_eO>SRN'NLCSHk%'O886jKJ6nvD"ss .\'  \sJ!"@ocS(ۚ:[ou[Ptk^{nZXs}Dtw].gpC囈|SC]Q`߿vJ*߿/, _c^"z/o 'DGR%kJ&7?O]Eo{>Eĵ5~9d.1Br*44 \`ZN8ħ}}]SñSn|P${dlrqa?G"p }lՙcccƴ N "mKrOJUN^qc|?)u\ң]5v^~ W\=DPFN?;Ba`j8;־Sz=/u|j;XRJ15s|ID|D}. `5Vyjh>kx\7l̓HzIQ]s{׾\SDCUD5{7>fa#ElE养}uvv*4M\` ~ӭwFO}ťjNЅS+twܙ b "?Xd3y7퍒U @tz\/(vn"j֎״9OEDDI K|ȧ=0eϝ3WFGۯ%x*z|?sv߾o^{9tWֽ=v/͹#vuNBH\~0~s?1_Vԡ/<)FVNM˼fǮ_OFGtq_@e;SC' Qk[ "XtCVkbRRW5{m_P!E&QrJv'2*cg60`I6+J"%l%+ \[e[(C_]w?9[#u 7j79,L -Muo-}wnu{S~+w"5+RC׾|_}w= l^?Oֆ?xgێ]w V_zNy P(z#S'Y|QaUo3z}bWgP(=[  E>KWhfD$z/O8&.D&kb3zz&"^BRCQTr:(t].NODa 2YPlں#u5Go|$/BVC|kPDDMo_).۸qu TzYG?|W .n*r\pp."|w~}w=p_'^NZ%l <;bn|[QZ*BiY,HR"bYX,jS3, gB rmx}BD2t􉁀r^#W(^엔y%'}١'IZ2=ku>)#vmMDPҙ׭Ti(z(B/Œ(H"trv_`v|kZh5Ż|o8z@v} 7_LD[ݸg2 mw~wp)tgGlhp߿Së̟ۿSiYw"6exh>$l>KDRKYĶFx3\G\hIK~-D"1w_JeD$QPJA_Qnʾw׈ drs^Zi+ "X|׽Ѽ//, %` z;* ̕[`p!\=S v_c_!CIxZ ;Z)b12aӎFl7aů&RBamrEJJ[[d$m#mΗt}vl$2\4843 s߸y>s2>!Y,G Eh<Yw5V/T,ZHO_VØ1̟`FI[iYYO/^6*uXfvDٮL&%QXl6NYķN V/gzŅaΟ?V]A"T~|hBo5V}j8ڕO/s.[B07Z'&.Yu+|:SC y`ܲ"jw-3`*wxZ]׉o Ήév<ķc;߼U 5VmfkRp\5V-q:-#BV%ӅVCF*p5!Bo ժc͇ 953<5woޟdm8_]˲}!F}\u}C؜Oyt{Bĸeٛv]p-##60XX֎.qR)srt qܙ3oadŚO:uN('''Ԑwfhh /7'Ϸ'DwDDI~$C"}r'(rFMD}Im]Cm綶ul޴T_߈P|BtB|Mu*7#,+.N1~X"] ] aY,=lVwn ek9Sß;qB!~&Ҍ|j־`;>їyhm<̶0Ɣ4wt/84cD"IMMO"1!;;/b)1Yd7PX,}E 3|"]=sU5}>>yE XFrǏ~ .rOZEDQFm9&>vБa[Rpo5;;S,!GN>|[W^w{K~~x7ч~aJ{_1-͘fFFFl]=e T)߹e[[EEɊ548 1|"E@X+%I^IT^d [ U|zS*[l\7@D}:(V_XRZj 2f5TebXTL&\nuuo޸sǧoд^T_ZRT~{\/{Z[+&cz:x$ W6a]|ްaY&->O( yوɊ0T:sD$J1Jpn0EEEkvn h$\1wb`m]3iGXϿZ\}kM_Ꮢ2%W/XmVIj!/\un4cv 5KՂq !c pۯ߳T}۶o ;~7oͷ^G4`My7be'c.]p B!ò^ܼBmT/\XPD^}.yw1HBXd 6<BB"ڸ荋""B^s  5/%)$.1M$8꧆Qgg,KtS6qF"zóGfͽvs[7"tfV^p܌V~/>5 MAffFDz޶Ǎitӳ~VӶIM_IY@pL{4m_d#z*>[ 0p_=g=K BJ.x"jh8GD~?Zh3Rvht|OX3tP5c.DQS] bL%%pOhկ?~  ET*jmmB"*.P\A ˷m+슊k*b Q aBTl?Dlo/qq} sVXj@h^YagVL@r9}l"eYJ'E_ \>9y)=ѥ8Pqz|nI 9"k]J "FI # X,D'99]&;v '(EV"D>A 8"b8c sVPjXK*es722825H&6JEJKǾADqq@j2/,qT*ۿ{0|n J eװG$$$xTPl!"b&4;نҲ~Fr\؛Ӕk)ۼJJG?x_8 Xkht0ްҲb ˲j|pĨ>q Ux%qmG'æiUD+"΅y?B @jHDӍF@  ;;QE>9, Xn(DǎCw@Yo˿uA LJNC+..K4}k3&,)s ϴms)\й C[6NDB:zI"!@`1%`xxdl6fHKZU9`MXy^Q*,R(Nsyʪٖd^0" /Wl r<~is}Ν7q;gO}bLˌ>"hqR՚rvO=O1 H SCHN0Ln <D"0,58>Vզ~QpAVzyQolm?Ma,/A.guQ5d[Mi)2vgR]|U^nNmAͩ\ԷGDNݙ$VaH t3ߓQ=B^k65ܵssFznl0LBΘT!0KsbBd,Q0#rj"%zKrGBjue0-5Nkhls9DzwQUMSj!1A7aw>R52:AD) S9 IDAT[7rH}gV"БjLiUyԂtJv7O7xmYqB. ^74<^Dtۭ~@i}׮CH/M}s!XrK>j89jT6>#d@(o3[TJN޶/%"Bt;AA);( 9|VqQfWu>5hAnmir2*M.=a2MIiPx| D֐U*dH?=CD%k ˮCH+R wkr?5z.@mC ynHk殾VGtoRږ3盂CM䙈2տgז$CV;6Kpe_]_g54u1$b!dC)-1JEosY*֑7~~B.f4e4tZm#q"p6T4b&3SƊ*c( N^CuI C^+1%`xxdl6ft֖ "tT85MJT# N^ǩo5heIavZVW},z9:QKs#@O aRr[6l1x8R9 +..K4WY݇9hC |v4ˌG|I8B3 +t64Դ47JE t.۠jye2W~P_/Kc.tywy=>1eFL yUX jM 9s]_y/XS^x鍵 A5L&[,@ >^W}9GLn\.U*dO&4YZҢTJL]DawI5촏 Ƙ qDe׸H+ ee Y)e2we+Ȓe];4jŭ7lX_'ky؜/Ø/If*+#I&D4pGiu%i)WtN e%.'.y?b<9\~zjۖ2F5m7[ȳjd2I)٘PSvͦ9z5LMI5l쟽dUm[ٺ,R|mu; ZL26mVEv:Vp\ɖ )Vj5SIGX˘~:.qƄE?qfǽl"Zؼ۠`&5clj#_TUE~`Xy[z}lڛgToT<Z}B}P_/ /s\sܮOXOi=`  *,ťa"WsGgg2yyXqqX"UCy'G64Դ47JE[ \#+++g[&{ B}x4BwI2ĢU̧21}mQWx(/O%"r09@lo^&s |.'HY|"iJM1$&&GFF'(%9abR. =^LUJD:R :7oזZVY7TS370"nu 0j᜺19>'+YR0 M]殁SSY&J)8>:Uu)zsr{c|S\@1&RXuO ''Zj2crupgp6U淙-*\UoZJ!s]} הi>(:aj*MPQ-CB\NQ>VU1 q+1֗fs7`#"c,G()5DD/^3/O՘/v+U+ֳXGcfjx];h5܌ "jn:|\pچ3U 2V]}f toRږ3盂 LDTwm߳kK!NQNqBխ.;sDdhhaxܬ>5L"npCs0as2 弐ln!En.piu߽K6gg y-#q"xY".^LLPQӈES[{hdFw`z+ UJe}iXdLr)B>u[. 9  ) |1ߨc(~' uD.3jM>ƔᑱxT*29r;*riu]kmC[AnƖfxM!/e}l5D-M ޱ c:edC</d@Q)Ye'ϻʲt\*E^9se07+EUi ξuYٙ2z"2wY]%i2eGN56lF'KKD%i)WtN e%.'L7jX]bLI4"YzOW5x<^h=QecFz}u7VFJSKef8V7mhھ8^ILttY.˔G']݃ݽ|ae(d5|尵\cٺΡXu:Nḩ̏ˤjZTR82湟NgW8c¢hC |̕М 7q4#_TUE~`Xy[z}lڛgToT<Z}B}P_/ /s\sy>1eFZP0Dba<7Kۀs!7C>{E<" 5 {t]_y_ D \DB̉k"5 I&[,dgՁՒܻ@ 1h2XbMU}S9<":~8'X^ri{9Ҭ_Ҿ{)B,N©8"rg?4&iGrH`{2S5j57cGOE­[7#ύ˄0VSÚVnYIu LLLteX 26MY/#"rZDtΫO$CV>ˣ2HN.mjxy~`>5ln4wL-+iblu;'>t^":_ے=vl]vfFJ ]hlh긤ךfLIjĄ?BDeYC4UvyY߇}SH(8zq|¹v*U/M}s!,(֛o}ϗ)X4䅗z(eڹ)1^ݗ 9˔猎=69) {vi6D,O^L[7T}#}#:rseAFFƉHf&^!"XQ+H(`Y߄ݹ*U+k~йB?Oa|yS'O#2 X!&'Ɨd=IWQ]Cs DtyJ唗浴ih쨪m)]aCg|w$ qZKQB'=l^ 'g>r2DUǩNB.S "ٹ58fs )rvh5\D(bfzpC$`'8!>7`5>YW*5TD42:ƉHHSDe}D4p"Px)\FDcI"+ne342׫lq:u^Ϳmk R$ !xzd[o8_ݦtD+AJjVqYRwg)pW$5t4je|,DCBhs=OD-ey٩rҌ Df24zERÆF(.46:q#BQ'u,1%!;;z.wV)e!ìųDiu: i2iV3znٺ @ XiՐyg߮>FZ^gL8 yR%* L ғ?/޼{-qLM˳?{Ϯ_n"l [B}^z#RC:(@,!H b%]kOX yw$^QNIDܩըnaC'tQk觃[H[wFF!@^W9[ ].R)W.Rʉ6:9b'"Ry 6W>HDJ6/ܴ0tUv\&!I'']ѷwCojr-asPỡb=vB* uD.3w@L[VCsWouݓ7?QVNopj>N9utwTrF}KiNV*:nR^184_( GlDr{rF 7l IDAT"J_lӓ^j yi=>x1Q*jx\}ܽ~iƔė_cؒuڷm)-)V(dDTh}ǍCcK,I$bOon,MW*d>_R$o3kQ /].&#}Yʒ߫qˉh}a^Vr7x BX3O*JҲ2S c;P;|~qaVfz ;[{6՘FljZg5t$#}YS&Ғ;7/X &*ZLJN47tZVJ g=@YVC湟ND|>FZ^gL8 yR%* L ғ?/޼{-qLM˳?{Ϯշ_/ 1^R^hFI ѯ -=Ķ%Pc}( 5n 1Ё!B-eGZ,!?¤4`[>XqqX"&Pʬmhiin =>L \DeeeUUld2uwwB}P_/\j=gU$aank+/>)kJ,^R]9ΦH"0L&Xo){(# .? ,=W;oAD5 fݾ{ nQUd( +(7v&0}rYݱ{)/9Q70LD"׈"":y7ꏮ\!d~؝iLj5ݏ?)uLIԨՈ@,ZVÚVnYIu LLLt+$?'O 3MYe Ðq ceDDS(\>.RCGOvSNsg_pԲ\}!6:QwC%-Iqqꡡcegf܅Ά9I8Z9awez>d͛h@ (N3&xY߅Ŏ]Dw:|S;5>_+ra^Ʈu]} ېLYqa⿰gG\fjJqs7SwQ~Njr^Vt .rOUu|h~د\:W~ݐbJ\QV@Du ?;wsf"*/ ]N"bЙG}>?sި}6aJ^Wq\7kHO3Q|VDds mnHȿй~0glQ2@ljUm5TD42:9b'"R>#MM]8p8>5 "n" 㵽NW{ɤb"t `+yE6g4:z  ]l5|r[ /kIKViBDzm0K .vQ'rz6HKZU'_~aч믽y,[ꍛ*g[`]oP_/ {7b.5T.);l*C q [q }H@a)[ jnb ay   ,aK Aȏ0)9 qX?V\\. =2ejZBϢSBt:-QYYYUU<2LݫoP_/ 1.ae_EaأʋO?8~\x׶k!"&ɭ2@ Xʈ&DOb5)KCyy^_CDVw[,v7ѱS=Cũoj2_\^^GD[[;Od piX{2GO] ɳa~ʾۉtUso?w jLDgGd~boDwqg?4&iGrHBĺd$jjb%2 uCY&z.M){wI% ce>̧27Ax8/S. {ՐiI_6Xl0{DTTۻฮ- ` D% "Eʒ,E&#Y&ْhb{&9kgK&byO 5%"-QlU `Ѷ%vQX~?.o[{sN况56?t%Neۆ2]9nn7z _>zפ]Rb8,G(2d~Qjh]Lj("8_z"a]ͭ7y⢼U捫WVs6Fl2ݾaVSWS^YQĜEyF4.(/wX,,D-uVp4fWM ?y- E4Պc=}\Dmu4v;ȵ~ol;sNdض1$jŅv/ \RC,ZX!?y75??6>/]7l6m;nYj1_0Edl|RDǝѻϷoT[%Kߠ4CQ-nY4CQ>s{&_ZSVD$/9(+ȷE /=k3䘚N _VFEM5GDVs>~&1dٖm[hWW~}C֊,4Z(}:/SrRhllljjJ{UTTq/ERx٪K BY󃧟g鼆0qɳ}d5v^c]Pr_O[]iYz.\`0 pXBy-߆<~ *Яa:1p X.c(]D><6xAֽþޛ%egC AvE ",g Vq[c8TĻ>~;:Gٴd(.F'GVnTw~ȕkw[ ϞBaJԲX1i% l޴FDN=Qލj6E-M';6iFxH zw:Gm԰8oLHNG'J `4F\,RCKQD._SyydLDri脈tz&:vsf(J?s<К"S:}AYaFRC+ /IJ\J 'nŜk;#")3g|p61%R_]īה*u?yMiz-RÓ-gnѰq}l2in"B7P۩KEk _2[(s6 k)lL3Mmm]ZٰNDvvvV׬*mXSé@Xj8l6n۲beh.^9qSD>8rz}Sȡ_}M.+Kع]D?s~x$3/o_(_\S,-٬;^#T'xpoeIb-԰>A3SCKsc2'[;zl֜E+ˋh~ "OeYED_\n7!*RÛo`2F Cضq۾g0 mσ"t}eYavidiM]ź5UV tȣ_:U\sX'&n26Atp}Syl]JK +ʋE; *}6>yjClwTgmUks9aqa.Č/ \RC?d4MqjԚEr> l6Ȏmwl[YӒcvetBD|~hq{Q(|cN7Ch4];>'lN_(zsPV qP ]Ut[w kE_<Yf͉˓c6h>3|aDW/+KU(DUWW8|* F޸l2ĥ19ssڵW嘍@j1WoTiP_]^t;ᰘFR_WU\tRF"/Ji/}`u+ˋ֮ .hډSŖKW~1%hi WU* e|GnۭTdbYm6TRx+Ph4yk:cO#33}n___혷z72s?$" ) /?CyGoݶ95߁I"^ċx/^ )IC@ݒagy_T"# xNg --'<71y[^ju dvᡁPA+*.<%P竏_ߐ"KbZx̲b_-V== ӱK^f*Ss4Ú7--':[uE_&r#ԔK"^ċx/U.(/<(5H 55 {O kXLDNt EdtlB^S[ᮞAMue~^8wj5Bdʵ[t:^WF'"~MeopvvVz<"^]SeS?=XgZUl6Y΅-+Qbvtκt"rCG[4ٸac]g1 y[Qc|i1tz0#f[Gݹ]lZedt|um4 ؝wm-,[-kqUD]/ \RC@JK nlg]c#?/H٨嚪BGQ0^Tt"Ӛx|%"`X!"&c4656]}GqԐNxOhMZsPV"ġERZj;q]ug&ebVIj19gDD6eڹK5Ue&cP(\SYjEdhrXsL"bz<>qft{c"ш^Ƶ+x5\eb;)-q /T0nOv-"Z޺cu5fAyPD[m]-GDp}}\ WԨRzh(,S:nXSW]f6%ȵhP_]^t;ᰘFR_WU\tRF)-5x|77o\]]U^UYh&&\-_K[W ܰTDFn8ӧhD;Vظ _5Ѕؾ[{ʊ&Ue+ t>Gdvk8<)lV:^ T'EQ2yΘ hyn8s'2kV22ozA:J3s=^~чR8zmS^ع;.E"^g~RKþx"p RCREaA:kyN2@ !QJfaK Mu5Vǩ& _Xjho}C!GVWT\y`Kf =_}|YB iP--':[uE_yIDAT&r#ԔKZ'kx-o0[ua[(k~,=אƼzje:9[M\aM ңu]/Dщ';{"ޡ\kuS#"]_eif#_7Tjr|,)Y.c(V "c#2?ŰXG9Uڍohxpn|_WьpP;=5~K--'<7'1y[^ju ɜ$;[@( ޴Z]Qq9ЯfW_!kE45<6ež&Z7zz^[cxxUM/hW_^if51so[ZNtf뼋L&J͇)5UQQח~E"^K f.)<7s罻ɣ,-YD ?RLJ g73' wz45u>je:9[M\aM 3 yYYWWW۬9Zfb?8ޡ`j:Q~E>"=5 F.'xpoeIb0N ?uW{\ۆu5צZ& ADvlV^CW&5@ݩa8 Ν|ӆ\r򛃓NK}*ڞE\_"RZcۆQy}s/Hqaݞj]nb|urGWF' "8 o6YPtj%5LIa29rfV2ѱȴ4lf=jWVTWioi0{=_N ozs|n"̋`JԲX1M FLL:sC'#Fw Ftoݱ(o*/Dő17c3'Vnkϵ$~`pȔ,VousyЛRCc6-9\8ςܭ[,;>6ָVgف#M G&DVK:?5ek"x9(+Hjw8c=5TҾ85|;9'ע$]Hbz&xч8 CoNbI 5{S^GO{w -x/Eo5D"ϿId*RC,%*Pu\ċx/ET(SPd*RC,%*Pu\ċx/ET(SBҥK@*$sI5L"*T@Qq/ERPL2⢅2 B 5RE]E"^KA2ʈ e@B 5RE]E"^KA2ʈ e@ eRIPW&;"ogFCI"RC,,JiK p<BYTG~/zZALκ~(O?p~oÏW(.TVxIR/Ji~6ͯp V >/W~?>%efK r*zZDgPH $1fit}|1 #sXj߁x" - S3-^rBxq ^ |erVC 入\ʃ} rd .z?snvIBY]E%"^7 e$!_K#㭟`?Dg2oj+[vb/ѷsURC$|rw|V~WDd+pC(VK:v䝅a[."h4"EhmsҲ| ovۺjp%lX?疛Ddq&@RCX?df,CrTg*7LZ(c1>N\7mMw>?4T~g5gm߱E 6L aPjBFmn#uUiMH{wz^oLϯ^(2g ! P[xxH'[~m[Ȣ7$5D~㕭&c#N9nGiڍF5Nhȋ˚[(NIENDB`hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/Riff1c.png000066400000000000000000000740361211146647700243300ustar00rootroot00000000000000PNG  IHDR^p pHYsutIMEʮ IDATxy|?%˶lmg#@I (GRZvZv[_~˲ e[m(,(gH/g|˗|ȇ|:G|[eKvDZь[o}f>a]DZHsgSs3yW4⢢)3`D"z5ujpz|0D'OwiqQHqbsx#ta%%2Ϋ =RB.…B'yWE,'|ۿ{ 'y7xb:1 ̓C@TGXvX@Ii qW^ݷɗoieh 1Xš8y~@E{0kZL㶩WөU9Q_xtVwfVCX5$^{jx|wqAFtcwqUIhtT0mS~W!EXt'/[ r{ _Z*.KksݘuXqU  gXD"~6ͺc\ri?|O(.Ȩo wP%} q붛vZ Xv1Kዏ~ fo/ED-nӟV+*--MuvV4V%U[&leӧϔtS'}KɉS'Y[$HBKDNC#Ã-ܨRk2W}خ=w BS{swWۍ;oSCnحRkz;Zjoٽ쨬byX7Hw?b<5mݲ낢/5!>>q6IDyb:U?@r;H/okk[ijD\G{Ӂ͜>C"PVOg+!K԰ܙ#|j8>>z!/9-}z}m7s.,655T'B/[}1-H½[N/R_R}XgGx"xOJot+o _?GD%Ο|{?R(TSNPg>{, ŐKw=l;}0Ο=fLt }ys O O emnsmYNw/tz"=ch7|jhHovKe&ƭr"dfp̉1"r!oHelC}@>re:yΟ;3imDаlu澥S9o%eUG?vKDղNx3o5ɉqO {gN8"dB 4_ٴuVp~; ˮ۱-u 5m/QQRC|%oó?gf5sel?]KDuR\.xW?з1˵-n#Gꚛgֹ`|~CT?=_xRDTWs:5-kw?2>67.`杻I D4<p;_/\ !M_o~m` B5~ۮ9iuU^ה^P` w":uб? ^7V>#='vw pk`2H499olnB_I)$6wksߒX,q[:=@15gvyܢT*9v"=&ӮQ Lr!8{H}ȑ_D{[jO MEDaT{Xw~\q@ He_tz{L~1 9 \ =o";|_;|y9jsÂ܈\Ζ[Vm-GhM\` BoeX"JebcbjL4t&$&7ԝ ·*7l֑S  á'x=GDWIg<NIԒEs 'ƭ^/KDRJE&{Գ\ؚhI[~7SHL~WRIfRX1C}g{D e21/ش "X|т+()(* %` {uSW/7ħ@p!\*uHf~CDدL&%QHl6NYħ@LDXʗ3?ϟ EOF.i~Eo0*GZp5Pjw%O O ^Ҷ]Vu Z憢5b;5piˆc/eZfpUvΉåt<_Eu' X=Cѷy/ΫA|jlfkR?p^>5b`kop^A.S+Ljdw8jH~ZZ[1x ,11>l~7`~ÞHz{?kP ]ˇ/H $\0͋RC其7U ["_|ɳDT^Vo>dHdGS\ToHL3=fV85?5O{ill|ޗ<_t)&*sB䄍eٛwހrmV0\XZnqR)st*qܙ3mnad՚M:uN(?$''Ԑwvxx0?/7_͓OZ٦Ւ DϏG˨&HRSSlSET b8##1Yd'PUvEc ԐAqQ|޹kO":W];hDnN>72j]wo>op:VVZ*% >Lֱ1F}٧g|>F] 1\jinV+ 2=r E1cw˯]{O M|jLJ.,awܾ>/hrJFG]UU*T)oرaLɪ5<4 Q|!E@_+%I^ITt 9W]ّ^WTlݲqevODmm&Gχ?%WX QA"gggZ-Ū: !ϿL,+ "dCCCkԽx^K?^}nqmɺ@%lG^2m`rBKYxD#9?^Nr;WUё#'GV9Z a汇^Dȉ/ޙuWew@y6 }7ڽ름xxYٺ=5ՉW_"0e0uUTtZDcX8XvM.!1Y*k){͛08jx\.ZbY3!a~fg⢂d @c$~!~q-+k8#n3 Ss/",䄭 "!!/?1YJ|D$J1js].70kk,8œ#"Z1_'D=.% Q_|W˵enJ¯@}Շn[3_3b9CHjư%̩a@`<k`~Þڔ{o߾mHz"{7[oG4`My7m&m ]p B!ò<mT/ZTPDE^㖽 yw1 HBXd4#6<bB"ڸȍ""B^} 5ex($n1E$8꧆QWWts7yF"zG,ns[7"tfb(8nVw˟'v +@cYO{{ɴ|~Jt{?zy$/x$ނǿD/|VV]jjW჏20'Hx< χ"Z]%#"?V^*TZ Կup58GןZP(S(T.z%%(b^"9N{[[Cvsng{ōR "֯bpG/}Cv,5ћ[7|S,@t;:s"cYJ7/|rznR~qP(8e=={v!8jRCړŦFG-R:HD##fs'1INNvdj+I"U]]X$~qÐP Dd`v;RyZZqC#H N]d29Y 4K .fYCBRÏ- _5##ߞeYREE Ԑ[q zU*MBBrzz@ Je j&"aCu8..!--b+EO:glb*d~VED{wm^v),wWB@jHDӍ @08tdS4C9cc#B(--;+y2#`ɒ #D^ s IJlG55'jjN.9|^jni=UWw*0rM:##55'jkO"/yo߭ؾ^|?cP_/ S.ZBl;nٻȕnC׋d`, ,6yܼ>`Hg5F^ ~4Ii<ؓ%%bfmq:k^2 :?L{iٳ|)\6~ʑ8_Ôak[[¥?pYP89Wf_===w\/ }D~s׎[.SӲ¦ϽH,ZZ𪥆 t!q.s/^O)/ZN "1:) rU747Bo .N('Mmms3,dkVdd&sM} [|>ݏhͦo?'˘j:ͻ%/̺|f$jjDv؜pZ 3&'Ry?0 rUaeDDvC(X9N'RCX85LKM"Z:1^ 9>n 辻n ʹ٩ u:qcc Ŗ y96ǡ#r2t7\Bj85jT6,Cc~ĤBGٺ\"1[&my_^ms 9 C[6I5lm5:_F"F NEiF8|1H %pv< v2E7~AB.f4g6vYفR)'JVQGWp 7=>Su1XljhLIN̏>tIu}vSR$kM]}1vtdl*bYoyqr2y/tTC_IkZ ڭиwv>hl!Xh2;\J0٠Niyy5K 2 II_ Z۷n\ ^/SUiQNZi<}pˉh}Q~vt9~)q 5ƔĬXIJ^sF{37贪8K ۺ}~,1BWπT"޸ڭV.N4G3ʤjZtR8g H #9v^0̥;:::Bn2f0D洴v/|辕357U̾>=;cP_/ g(ĊFfH/E$a.ۅ 5Zˉ@@H^xXSD-MǏ ~oq^w~ԧƴs/&!5Ԑ8˹/٧ ֔^y#jSCv#rj(I!-fbϳAx !,~ H ɲ ^xh55 ͦЛ +|S[[geLcEa.Bpi_P&^"#-E&^h7k[۽QT޼M=Oߖ''˘j:ͻ%isf]zR5j5X aю=! ncܱ93=t5v &!AgLNXԐa0A 2(^FDdw:Z =53t"5XvF$%bf_Sô$":} IDյͩ)ݤ~H7 IDAT$$'lXRE"nrY"z[Bg1AU~ky9yjõwnl\* dLJbR2t7BK 9oν}2Zr|/NM9նИ21i* MfRӪm-GH9~@Pe82i0/}Ceöv qYFB~Xm&K]nO(0YIiPx|+D֐U*dnH?]D%k ޙGJz;6 ѣfzoΝ7nW{Wr_N >sFUYID-m݇ PqBQ~u*Z~dQõ}KYJR|f[{Ϝo 5]ADL==;$ὙGzC&.x 1&e'ymV3%2^߹ZSU%->0\Wa 0" ]DY+/Ypj8h}$ 9iiFCa~fSkeʯ0j "-p"&&m,iĢ]g=<:R!#+ 3UJyPZW(DtG$r9;[19 SuI `mfsRzlj7#3=Y+/J )##։vч "T|1C-v\[Kk 2l\?UK76w OCD$ GmTfnH*_w7KVl^0Lu]U 9 4tYǧbFr2y/tTC_IkZ&,{7&+`wv>hl!Xh2 G `(+#Ye'/ުt\*E^?>EO0D$)E[6DBåS4s)ySeH$t8zR"XѪҢ?y&}'\ND vosy3/س0pUÝ;oVr_SÚVcJbVFX,bYotu!=QecFx:6VEKskf8lS6ShVtb]R)gY_[GIQF`eTLDJ,;CSCSf*J Ht  *Vj5I)Wݖbr_"zW|d 1 3M'i?ϝz̖%B'_$_QF:&]ZÐ>]# Z̆FM]}ܽzVf_glT2쌽B}P_K#juQʗҨD41iEn 7lqSr,:f-cM]Gh"ròt@je"(R]?~+v!kr]Eh^x"5kE.G&jmi:~eiA LJNCˆ-7+G<ؓ%%b;g}x/KFZ\^ ^3K^fMR%m*tfXR^嬇mlmmi K>5 X_WFFFOOO B}xn4~s׎[zq3>{ScZV_EKjjqSkKSCA>(drˠq"5kG.G&!  7l–|jO X3J+]VEWIDGO -U{oND[8M7fWĹƊ\ \[_<">~_=>9t:0 ?0/=͘R;\j.fSӷ =QO1Iմuw?KB_IuJIԨՈ@Tk=ND"D"FXOQeFf3eDDvC(X9N'RC(ц-7gf|SCcJejB$ݬԹFCD>xԷⵓ6uI" 7Hxm6^ZQ+.ϧW;~|Z1wxmٺ,\* X;42]4Ѩ6G݅n^9=!gA+J+ ˓d$'>X;.SW@ (*IE P^կTuZM$z}Ѳu9v@D>HDyL.l@ L7E"r2bHUV;nZGY,ԣ1\^j2Nsk{ߞg;ViLN^\MKAnƶ-8Lf$SN]̻qLBDvj=~k]Y`궴*u[UJFtjZ]B "^|22Z bG u'I g0 C]DxV,ޔxڣI", cR"⓳I[RBTŅZB${D"a SvWp)c R v?x$rA 5d~*Č [nr;ːs rYumKM}kqA5B.:nB((̽ikb&;Ni8.dIhp2慟'EMgX :?Oo۵LC փݷ2357U̾>=;cP_/ {7.7we˹EQ/˞=1-+ eX4<= &,ǭa"/c9A|s/Ânk]{p Ё!BZ[9h4x~}ih-eǞ,)K=|!z(ϝI*t/R( YUUU]]2鉽B}P_/F]RPv: z#Pf{5Xà 5\5.s/^OK);xͲK&-f`MA^aSh`kVCڵ.X'bpM7fWĹƊ\ Qn N e2[+2Rd2 lvw\({}>7`\h6<}[S'˘j:ͻ%9yXެDZq _P޹csa~G\Sk#Θ\_J-֎)WN@"dl̫y2^KSg-J>qODD'=n"-hVô$":} IDյͩ)ݤ~H$$'lXRE"nrY"z[Bg1AU~ky9yjõwn]Cb[0 V駺s5*Фi 05EaP)٦C 55Eow՚.OzwX>`\DZ 1gpjʡըm.7&'XI{pc_eYAɬRuZ(2/ 2r"БWguZ&mMYy* lH2jý+a"8nbf#ie9ZȘ* DPZADC#n7^7/M՚<7z+U+ԳXGc值fjx;h5̂L"ji>|\`Ǝ33V3Mm&3pmR3 3<=g$CV3x֍E|egkڜ'v50v9Yy)|jDD=Ɩ^aBef%)҉IGu}y!Y]B "^|22Z RA !^lNK3 3Z,Cӝ?FDD$L߼Pw!=+ 7VfySAzӌ bȘoR" 4"|\&! r*R"zQ&PHA^j#\H Y`9|N )##։vч "T|mp;Rȥ5muy[6 Y*åT;'!"Vۼophdbce~fxdtNR!ժf%"Z_tyrVҜ0c)I|# GYQ{פB~Nχ^cL R;oqfzX6OD, 4#0DP2ӓKKGoUyA~nB.|j"^?Ѓ<Ӫӏ6QGW윬dLBDd=-Ң̴DTq#[ڬcSe~hd2JOҢ?y&}'\ND v?yfK`[85o5$fe"NW7H=QecFx:6VEKskf8lS6ml޾$^INvv[~.;#)%)M9zzFJ7$k![Eyu5 ]ãњtZNqәΔIhp2慟Κ.ui1py/7a&8pKT+NCʋ3?sko=}+s=SqS޳3 B}P_^y#~s׎[ڧl gO}jL  H `6"B. ,GAcc˅Bh^xXSD-MǏ ~Ngg$oXSU" "}ax$bFj"e6ǚTا ?'ңŽ=o~zaۧNFd`X\V&]Y^HD5.[[QXl]BOzuH$icS.]TNDm ]Dr9ܴ!۔dV;\ 4>N- hjX%->'#p'B03Æ3"c?Ξt+_Pt:j "R>+MєŲ^"DB|*2"?NLL\1(щ8M^=0hөj{:Ώ^@!MphG lNJ6;^8Xfd#2f't5gd-rzER)SViLDz-?3x.Ɏ;ӭTtZ%yYU3SÌDT2b9J3O5urd<^58ZPvvֽoBXUZG-6uYa]c[+JrJdQC2$(?#pQky}y^~N\&%4c LVLQnV2\|WUZbwg5$夐ˉh}Q~vtגgKWDWsvsMVeYES+66|>IqNVc;o4\J1wf{g6SIkw_ty.R6ewz<,2ZLD:Vp\ *Vj5IvxvM22/t?jΚ.ui1py/7a&8pKT+NCʋ3?to=}++qLM+?8{r\." ]DžB}^y#RC:%@4!H %kOzY/ s. *,gaccDL!$/ojk Li(E2.*5Ee9YiZJ `l6Goة/\CD[,V~7ٚvm$:8t뉨2<{'G'"=QO1Iմuw?KB73כQ.0#(B7SCLtvv{X6>N[.wa3X@Gzj5D$JfӉ Jh q:|O.~8iDNl]>NMČO64u.4''o(Bt=/I-P,344㭿Љ_!N}!Dm5L%)3 ܇/e\8Sw?CiqzHn2TAˣRt 36V=lkِ6CGk8+;3[ 3"ό4C^ixNED3#H=z;Xf~eYm5eDd/feY>54N0.-)/SCHHD ۔_UADu=!S lM2͞DD-m-]Zj׍"=٠Ԑ]C_\B "^|22Z Bֵ⊶:.RV)\Sulq:AD* n*l=} mZ_i}Q&mvLBDS"M9#?[B0 wCa6Bf IDAT* /D.Ï_zuye:z.~F>nw }1^%"c:W:jT>5t8\JshxQ,Z'(RJADjE9ϼ:xM!/}|5D-1X+V4!NwiƔW_CȚ:m)+-Q(dDd{MCvS,I$boiﭪ((KW*d^OR$s^KqAFa~\.MG(UE9i)vV3?H!d\<䅰fhy珟Vdeg fs4$|.tz}"5tvy zm1Z'նjjiIG)G[tVCSL*HKJNkhڴpx8FNi8n:32iV3Ι@YVC慟'">{[t֌%pHˋ|м 7q/+_ҦO^iv:R^잞w_}%_[_gj6n\}}{vqP_/+oD]jxIyu!5D:趌PFjݖ^C"0Br66ֺ\NBC규=[[9h4x~}io9{(?ؓ%%bCyz(I*t/4U(ce~%Wf_===w\/ }ҨK 2܋" ^0dr9?רqtM9ܦ"'%-f`[ʈ&O5i+ Uۯ%S!ؽִXknhn6\^QOD:C/f+ s{©wJE?=ﺙ/9Q?8BD"׈"":y?ꏬmyB'˘j:ͻ%oS כQ=h m||"WHAnfe$ty3 C<% % ~ٝVCDDO`Mn p8H Ԋ=q؅O [ںL]krRKqd~>xkMOMS;P.'+3.4w56wλGM2iI#?'J$nD3AeiN1z/ ";GrQ~u=]= ڛPNyI؄f⿴ڸ8͠*חo'$Z0uDxi"/KADZO+i%/}"OG7dZz(WQ}c\C*il9tGD87fNdf$+8=t|N"Vp4_RU V<( ]l5|䪶Ur"NJ)ۈ Xq an ھ3ҳdR1MٝqrQM0Y="[hu {m k905@j^5SvFӶ@]1@r7trike>U)e89r2y/TC_IА@Z-5_$WQNV*/qJ%#B 2I}l('-j')r"Z_l;|x=Y;}FtN)"~Op߮ʒG 5SaEe}n(|ɞs'Nsܷ6C°hypC""tO7A_;Yy>/h,q9jVCEk{wg!;;?$+7$"+WTYYc}@wt[6,|m~"͍fQy}Kv|>⚴QZ E,/sPє+^_D֬u:U\W_̒cڳcYvڊ@ 8pbÚ1 nwHՔWVt>:6X(aՈfڥkŖgAc h5ݷD_Ѭ[U+"tu5]e%v+c"rvGsr{dM].My% W+.sfLt$~`pȴb1X4_o5;72:/^;l6m[nYj1_2f2f踈:*?߾a]n'r,n6A醢 [T醢,L>?ƴlH8,"N_(zs@ow+' @^ 0fT9m15ku.^k6lZOG37in.ߴ&Q}uœo޼0W.؛ה8n׍Z'OkVV[rL@f)Wvșuk׮6 ES ZFD*ʋL&CEY!L5%NSYh uUŅNK%OV5:|: ZQUSU.eёCv򒂦mYꃃ'on\i@skuuD4vn '2?%jY'k$P㟼$S ̘}LX3zzN}6a +MpaQ7=8JSپғ?;_éH>tty=n۾5xhE'^|ׂy/.5S^8|i( ,S%q eRCuKⵆڀ?ŵ^UHfas1sMVǡ`Kf74 1~~4huEv~ןX!kICy=>slwާdr\H466655***z{{o"^ċx)lեI졬3/ܼ0qsd5޼&ǒ;rowk`8%2GF[U྆!cb||uENxNv^ji:9[&YVڰCJ%̩_|K]{ wN \P|;ECϒJkgwIHD/.Vl֎m߬]pSܷjpP;١]NDzGGer*"O-aH$ADvlVR9\n7!a/d.Jj}6rʲukjVh/8u笲v'"G/-+͵\p'׭\V Ov7vifIYAYa$nH !Bdra}ݲ;nk ÝJxއ3}u֭9g2>+CK 7;7tqO[ ϞFaJԳX1i% _BDN49I޵jE-]M׮i F~P z w:Gm԰8oo&$ˆG'[W0bXZ -9FtyD1)WDȸD4@P:G醢Ԭ|3܆'oLk֊L\p􅢗:dQI G 惼bi5ws^Hæ̜b4H}uœo޼0W.؛ה8nbi5<|- kWט,-Dj\S_]^t;'r1"v)?v'x+K-V`0zeueE _=}!nf[H3m8jZl6fH yVC͏(p+FOréO"&La .,3>*STg^ij:3=Wz;zg}+;{85Çnܴ>5gm۷~/ER<ӗUXrv{*:o[[ I mN:?74^UHfas11EL^7Zn" $P{C!OCԏʏիd ='C77koky}L&˕DcccSSSj^7x/EV]jʚ=>KkH c==O1@FQktKC nyg9 p-84q`Kfe&ST`B2{(s4L؋WT-mXY'"GZ::b5JVpP$*546XZl2 l?{b vK)":vD'.}Oo,">74'GkgwIHD/.Vl֎m߬]pSܷj,BN۲lRsj5O eВcz&adtfYZ^hw|] ~H'٬"/E O.>}fߋh *t+Ji71 ×G?!FlZ~Om^= "tmiYavqxӊU+h8Y\sXl<2g !0M'N XykpXDBC?8E"b ڲ%W^s#An?|~4F x\.C8]{bhzͧ9r;>{fw.\JDTlBlv)m5Z^~yթ֮@0$"WVpJd55'("nGD\.OxʸzYYB!ڭ7bo^S6ٰZW]ӱ7)-qpiE`ʇ~/*"淕'˖9l_ցl֜B`0zxP\'"WF.ȩW\,l V9?o5^1qM}uyTjVfb2EdC}]UqRjɓ9 VP%հ B  Z]Qq9/ǿ YK$g41bYnxm5<΍]eʣ2ozNOq敦ް&fz>slwާdr\H466655***z{{o"^ċx)lեs / %J  ,2?/׶fU UhDr?qDDnf}/fx pݤTk8sjxMkrVo;=ʝ^rWӈʲ5Vh/l9}VDVeӚwny۽>hzͷ?<+cWYo(;;+a} /)߰(ȳU-+6 }|RΉ-+Qb~wNt"rԙ5Yam]Gg1 y[Qcti1tz:?#fk{S][7[f2|etyml?{+{gXX`ZLcS>Yu~xtE08|uddZ H)m5t=fђcviNQD. *4<""9fsjʊ E|{QCӉHLoqDr>a"PPwiRCnoLk֊L\pMIĨ~i5 -/VΞj׮8;(3;V9a=)")3^*.7BRV+"C_ŚcŤ5 z.^шF:pTתx؛ה*uo={ 0 BHiONڭtO9oYJK "r̭[֭]Uc6k EdK"b刈3:X/3 vu*_Ǚkk&C g@kKn2V23("몊 nRK9,jVC~2F36jL[;Օ"2|yT[w^F#"NgtiGFop8hޛ8l2\p8H`(X[U0,q鮳Fvn^4IDATNNf٬I5@ujO^%p+FOréO"&La .,3>*STg^ij:3=Wz;zg}+;{85Çnܴ>5gm۷~/ER<ӗUXrv{*oS7,Il5$5JXt#(Qj8 ,Rzd67x1y{ju ~/~Il5Է|޾PA+*.8%_bꆬ%YBIPZuy&r#ԔתMZ'kx-o0[ua{(k~ ,=7!5yxܻ~6?E7+cWf\b[DY\ӎi ơ~$zyqo$V5O!/lBٸč4LJֲP( 9_ojuĎnȻ5 rΥL؋WT-mXY'"GZ::b5JVp+= 85)2._;zg`!v/-"87pt~Z;{{_n{dXD\ӿ,-٬]۾Y#`{vUX-L\^ թV$?5Ts7#NyWO<B_ADvlVCg&5@SV×GJvk ak{wg@%_{~Fc(ᗿ,(tOm^WSY_ڥ+WZ-&?;p pnXWk6t:pN? ";5f_ܿms7:igE MRvwStVtsPєH(4:""ΊF4E9f;38V&7#3mYz; -SÐzJrjoQ&^;?KCjJIeraXL1h戈b17:?fM%Z{Z;z*K7zռeJF{bTuj1ܸ\|r1MƥR_]7)+U&z:56>N>5 m{֮)ظ7otgÚuk&CQ#zQK[Ϧ S~%nj5"RVo4fG/u,nwX"rTlX.#7Ǒkh/N5%NSy\("몊 nRK9,jN Sjq^R_VR0pn Օe奅kȢ֮`($1g[GlƦlOZ,fSl=ݷnUUdeC1rJ9JjhPx2̰mv5pԴlV:^H ~$mc_^Wf/:( ã}tLq/zö޶jod*g/Ytd'҈o35{Wv>pj^7Okٽw_ċx-xm=ċ׍/I,1of5ȕ+c2?X3Uڍoph3pfilʜVN>'xmoB3nA@-g, jyirj %ᾆǿ YK$[=g41bYnxm;΍]eʣ2ozNOq敦ް&fz>slwdr\0466655***z{{o"^ċx)l%ggG08s39~;qS=>K(aR#5̤0{<]?{O};ij2˳?}Ya ׮؟2qڙ𽘑 `?ǁP8 _Vfe-SpCSI_բߗpRC I C}D*zf8jFK9:/ G ?wzG5K?Y7>ɩ֯ԸRkCM- Sߘ֔U~>7,1j#PIffP?E<EXҮs4 2#?Ė> 5{WRZMkٽ7-x/E{o5D"ϿAd !u"^ċx/e ʈ2 PPH (k"^ċx)((SPF\SPx"ʯo=7tPP9Q㵆IDA x/E2eEe@2@jDE]E"^KAA2⢠ 4RC,$ (/E"^ e@2BIP~W&{!}Ǫ %H P޻SZݸi}*.5cr^z񕴌מ{mߚ~EZxe7e$BA9_LÞ+DPAeH{Cy|߾Ʃ#y#=+W[w>!G tZ31j ̏w/_~y_ɓ=LemB¾+%y'~SZ w|+@//=_JŹJJ*QJ'efKO|%e\Ϧ556 ?h xW_*3j`4;E)ܱDRC95Ѓ2)!=^"^sW&g5P[ʥ\ؗ LV ⼟g =S}z9:\յ_"^KAAI:x'x|e"5G (P[h(ꊷf;_g,x< ^׏%"^kR]ac *J ,  [^k%/"^ċx)2 exAVCLZC,/P ]1 R3^{H.52H 衬%"^ċx)LeEPGe "^ċx)((SPF\cPPGA 5BE"^ rw8= m6J9FCBa41 ((k(x/E2eEPGe "^ċx)((SPF\cPPGAHwkPBj=JE\QP((Ǡ i/ :"۴ %C2ٳXu$7YA2jo޻SZݸi}*.5r^z񕴌מ{mߚ~EZxerBAPPAA=nA*bpku=("^5^BD((Ǡ i2@jDAY]Ex/E)(#. 1((@ڣ pԸSd5ԈPg^f\j,(OzJ|  RC,z(kAI"^ PLCC9= C 5BE"^ nyMAqQPAAeR39Z HEA`<LSqkp^2-VrennMyrURC$|rglV"2˕!ovSVge9\؆M64ͤHQjx=;[f\&2=H=j6nw;[_5vrSo$^HjgL[~"dX"GOtrd2 u滮NtLHlVszz,ok=y&0Yh5y!p#6XZjoh~tRwz+x^3+.̙v/DjB@*vKz<j鎖ɜ{[hN+P5 ;i{[_v߼>xm>di]\ܐoٷ~L|o<2BV×~w'vd@5\k8g0G 6k K˖HOi˪jejy!-q^(q.㵋p$ZC@EnYmƿ~2]S)H'G6:7$5@:ٰ'JD!!Ru7n{D8 @|>j78!*\n`IENDB`hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/Riff1d.png000066400000000000000000000730071211146647700243260ustar00rootroot00000000000000PNG  IHDR^ pHYsutIMEz IDATxy|[՝7}l˶vYIB-PJKiJy~S:C7<haJ22! Wk˛ȋlKz%k+lɎ8y>{ι:sy{biIB.cYxdw8[Z[@}OMZ\AU KKJ]!Dϯ Ғ" }#@~>}v%%B\kIѩ8׋(J'JW1]{ L ґO}Kߺ  QJt|ɻoz?y=u-7LV'M#(%| ^ew5֝ I k܈֜?ɣF^ * 8i^t5JY]sMf jk}O.qg.e w>=q;K@s aMmoe8H^[qqrtV9pU[??LXF՚[vU]sO_zOk>W?%?}}dæ9w1vCW,o/=;qJ;eJOA.?nu/̼GT*MHl'Vbglix#ncۭ͕GVs鶖cW;w+@V5[Sls0ٳiL-8 f:s%%հeۭbd.(dDt:Ξ:<6:MHr-JOܱ>@`le]ኢpƛw+Uޮw##t:;DD=.x!(\vk:[?[TRXxv.{\&-2wԑU/X|>Rݦs:s۹T[T\qDin\isr mrzP !4?X><(۴u{21ޟ~KDLL>W\.݁_7~I˵-rw_0ˑKGֹ?B ^w\≧f"97xrb\Xovw64t8utv:v"D3j6'D8[HC4TFDi?Zg"*0 ,oxؔjȔD$3æG(x<ͷ~]28x1pGOX׍"0ؙVCa2#@ hom|_lᖠ{߻.Qˮ_K\ !M_=~O{m`~L,uv4v욟e}:4Z*k/(_}a g?DtG? ^׾5\DXVKM w|g` PhNz#!"%~vjv8HMb6D"= YD49e^~3:v6Bgb֝k?F7;}'¶S ~C!r-7,>_~j2FDڄt~톋5t~{౻7jZ U* ed9엇 sm- U뷬ZКH"X,øE"Q_oԤŐmNJNmj8Uo&-c#}"CKNxn\- gRASv5>_ "s+Īs`*JU8qCݙ삷rnmD$Whԓ?4اP(rQݟk/Dyy}D$:9?P>5Z S*}$pC!t,ցQKD豻eۭ{f;j֬\Mႂc:1)U$E(cOl{s D,ڷf9_™ ,^p/zaL.1.]}(3y aRLND!]՚&Zϒq!c)_ C\x;l=FpEÕXJ)Ë&~W|!׮m7~yuw a-憒ȈuڶwljO  Y\0ĸc=w 3E.Ox^]ħ@~Bbqi"9?͘$G`o"y5O 1x \':+@05D༂`=v'D9%ÉVCDw6w 񪭽"pzSV޶v }BX߼'Z"[o@!"Kr8!+sfxQ p"z񥟝:}*+ʾGS<'.-)W''s}9} `CC. ~3 g)u }OժꚚ[&&&|]va$*&vy9gD4qCIhƱe0Q NI@hr(k*=ڔK޵}7e^ o>5埽mNڬRkUjmp a?'HN`Oggɴ=|r=ݺm}^^wlW~X_Rqz߭u(= [ .:|䉿\| /TNx\M\\|:X=4| HD415-e$@0#AR/( ‚urrvu]b7l],钓ӤR˒ih Nff^bb켼.%?R  CC?ڿc]F|.[$&df:0R`\y#pd)4*("x Y"z+\F|"7Gz LDě;(NjjT*mFcE];vV@v;%YFF˲# #K]RY, 5K\_;"//8(1x ph_T'%ffxx?xؘ''Zr'&aFFnNNQww5#`RF^ h:,>a]ݩSK&n,XF44 \p]ݩӈ [}x+~ B}bJ=%ګ `b:}K\'Fh8zJ081bRm+O Dž!/@Q)7˿yPpK_rXSx?LYYH,GEΙ,N#-~¹!m7 3{KK_ѦOY담;Lz}0E"XrX󸦦veB}P_/틽'zv޾oϟԐ64|ׄ""<-4\l Yuʏ>?Xˡ!_(B'eXT*3Pk B *r`-X=|YZ?nGl0.zSpqnfUi!]lLm*G⡡T*ٱ*+#M*3^4۸x":x\w Js5h5=@@{CF6~*@3ߟVPz k4񒒴Ԥ@hr3(B/eo7INF&"a'&;{8NxhBDg/4uscHbnS_w6|%~?CNAsjJe'&l<-J ҭ6crtRLܷ\Ah8=Ш6WR#A xb]>V}fm\AD#N;-51x)G[6+K:VxpWӈ", .HGڹEVddQ[G.4l 5:[f"?g|J16>uE!,KY< ~"%7~AR6UafG,KفB!#ѱəcfBV)gx^-6\犛Re)8(1XjhhHKLuMOe=^5.Q񋡃5(7XB޻>l0L>h2;\ 8UcNk yy% KrIKI ,6[o)߶oE^򒼌4=y\aI.TNgNꝉ"' IDATCk~dY";>t{'c_1B/ bK1vH%bCj.A<pq 7/%nhxL&U NGDi)J382:''Ua (9Ik}&30s=(Ӓt ~s늳48fvQRF!'lZRRʥDtǾb |!_uEs}pqy;*lCeǫkLN_e=^5.Q񋡃5Q<ܜ7&kƾb |!_{oqäa&p|dE_SYT)|>J)Oԩ/"y<"JOɤT]-B%(u *:_(8nVKPQ[`Fk׭|>oWGVN#/ (u톴䜬4H0^fC)j;~~2Jx/um.>-KԳ,٦ƭBCWպB0RrinÅ\{\.ɖ'DVj,((6(MZQѲe/[v|]#.")kGuA}//1ww>d,m%o}.SC:x}Lokfdael{0ѿ|t6ks`|z Qwysu7U̾>=/_/k.) 4n_1 "\=BjCU5j)[6KX+2V\(9\-zI̅,f0}̧ /& !4АeY˹W)/썵#A5L*M(Xwdtd|"ObwpÖ[Y6l!@XLy69٪vӍ#KվۉlmB@mSk1̪B"z8?PU5T\'HD}z3gs dBytɈ sBX"r0?1h4nI 4)3.ߡ9ij ӚOQyն$niZ%g1ӨDD:)hD$LdgӉ ƱDa˭٧K_АmsJ) n7c9s%CjRRjs?`߼a]NV\lJty>=Ztze*55r2@gȘ;6Qq(9IVʭ6Gå^N== A/ʫn KrRB`TNgeeDƒGV,T(dZrur* ҽ>xźp;HK"NQ$".73043Dbg`aH(j5y'ζiDz tw Wfg-8ǵURWhnPVmK.A=ɘU~ܸT*&"c5>7.KҩW0;C*ƭJTOYZ·,VCRS)"*(l::l7G||}nSMiN#lJ4w q< CD|X92j \LK=s^9SCFN eGąh&2^(>>?1,v~sskiN5>>/@Q)M~?A_ @`qEϔU"ʋ=O\"}nrcƏ]}eee_P_/ q$1r=k=y/P$k.o˹WK);xMTBC~|AeJea`MA\aSXk05@!ݱ.G ;MЛs3J bKGGwelCUq>fCCTckUVFT*f^i45]ٜ]Cf ΅Vc߳{ "G}9FmT> |ø|%U*];7ĶXb IP2lt MO5E L/e^ԫtR_>maG}D0'K'"r819@lc[ 3S斶n.ܢz/ַ铓Vȱ +&mXTȄB mq"z;Rw!IQAnky*L]wn=#";x_\c ] 4l4edn.v{.>)!?ǠˎwT</I&"ef7__Dzఅ |48NDYIYD426v{uB۴BxcR5H=:;ą6CÃGڹEVddQ[G+44wTR}$i0vkͶw\\ED}ޡ=4jն[7p p:gQo "cps[?Gn7Zƅy9)Dgknx!ײsRrɔQr\HD·,VCp;0wŁJlpl0 CH$4&G'2\B.-hrjf,G 'ޘoT>I"{K$!mxhhHKLuMOJ)Oԩ/"`3i5cD3X.7/'U*!UGD^3w$3;#Y*{_XSm-'2~Is3=mDzlʼ^zM(b!S˹W7 >AQJ!5  JeaSdq!\ aEET`A!@\5 MmSk1̪B"z8?PUԃ+O~1ܢ_ctn#gFQ7j{vo`:ŏr )۴|+dJ0VCney![4CV! nSINF&"a'&;{8N*\eE膆O]vBöc``𚼜]G<˄RWw 'KD3ST'6UNK=ͭWttZAEDKԩH,Ur>/k9TjDz tw oS?4,&3tW˯(  [k+o.^& t KeQqRLa8?6tP _r&ܟSSD$=VK\D [B}P_?{#BC*ኢ bEl5Dhۮ^C]bJxQ0B!Ąh67׻\N)ą P1YQl5SVV%=g2aZ$OS\pӫkjjjkkWf_YYY}}}/ B}q>I̅Q{ׄ"!Ah2uʏ>\xזqs!B''&CAY졌҄ppiLAYfDU79;x}7Cc8 ©mjm5\YUZHD[::C/gQt1*K E"auEQ^NFy6|Lr' Dt}lܽ{3{F"m0LrKܶẓSwr[ ?q_ŏr )۴|AdJ@,VìP RnMЪ= ;aMe9kN/eDDvCQ0X=N'BC7'hv?^ y9uobМHU |=9i;|"0/0K148Z0>" 33R7*~;-Drx ĊeQcsxm nVͲwGmعcP(4d2IoQ*dIIZUŅYӤO DT^#uY3+CS{"D!QUQD}`µ2lE׬($ x<./ͫ,BCP@Dщ)۴^URED ]}csoM4jfL!Zy-"=UTYC_\|GDB+jt JXtMBFD +e 96/\SB )R"ڴdMYmvTLDi٦uCjr-!KPx< %r hC>@b?2?Q1mE[  *ttM]LJa>nwTr]3Q!"c&T*eZrt.4t8\ {dtQ$[Dty2Z)'"R_ &]% 2>~1t? IDATCq7g/4e ZxFeHK~?xkۖ<\kHDM-Fn:2:iw8E"X,rL\TJyNΟxo.-*.̔$I_$/#sjf,e2"Z_R;ܿ=/_/ 7b.42n_@l3Ķ(k2^(vP1!.e !qm-'2~-?F7cw8vqpx]oDt|ip Yٽ^/ǐѨ;M'oS ߟVPzhE[ :D?lNlk(? sRE:ʼ9^"О8qr]^Nv^jin^pOPV0/sso |>Ke|bh5(7صZ5lhܱ,_Q^N:q˲HcS-O/3ȤDRMyI^Fi<[$Ɉh}Iantp=PfrK h[>4/'@D drj'r /2ҒR-+1t3iVͲfZ6(MZQsjO7<sf,˝FZN/s7B L,ҢS..}E ?]|`Hz{z~՗}xG}hemT2슿|P_/ވPJ谯5ܦ eضZ5.z9XۍbC4[ ].'B16@ bCaߏAЗ %5EO>SVV%=g2aZ$OS\p8V-QSSS[[2닿|P_/Ib.4be /& 1x BÐW~U ֔Xƻ# y8 `>Tfb@4{(4!~ 0!̈f9ǿ3 GXn#gFQSj )87.ttt^&6T*O?@a#cg7MdDt|ipov":[604~n Cf ݛ|]Z;9Z}-/G}9FmT> |3RdJ@,VìHPKV==-yRհjLԫzuRNPٝ3&=BO%>Y:ÉabՊrZ{=R䫏%z]_JsK5j yp\՝_/zQ/je66&B $&&IL^0Iգ{^MM„*H=7ȐeL`!a-˛dmvْY[JV[Zj몿u9EDޱmCey;~-Pkf^CWNv|>⚴Qj gEZykh sy/"Uݹ}kn*,ȩYe2 ֭( etll[v!rUqiQ^vlѦZ-f?ڽeS M.f[Oflɤ)P$j~Wez;q qD?Ȍ SX ˬSe.:F3^za髯Sh8vrͩyڽsRyu|H|EO^S]j8pPy X")%q eRCuK⽆ڀ?@F^B@Yk|a\zKQ,}C!OCԏr`O))u+2SOd LM&JG15UVVۻ΋x/ET]jʚ<>CkH c{O_ 5Yy)v;V" `?җʔ歶t;s)s EnRC9}nu.xZ[;co ^Snmhm&ZU\@CyxH=E#M}%_y^ su|6׷D"+/ʳZ,jZSMJMjDopllBz(9*"~oM/aq]6UDyȖ+vXV"|] mON(vQRö TlPȶjD3|m]=8ݾ ;r򵏎6mZWY( mnni?B\~:yL2'BWװf=wՇ%Mﳷ}|_dM:{.L‚/kdlbphxeIM5 _r)\>lz;`YIia73oۻq]Uƚ԰tuUm^; BO|~^ȶ͘,̈́Dw$~`pz9Qk Q,KВeF^,qZ22.">@D&? zN9J7_woDkMZPZ瀬0j#`! d,Z j1dI8li!cV=fkJ򳕙ҷ}xMqr@Jsw۸l6Hey4t[~CmeiTjJd4Ȗښ|ۥ؝9jTj [:e"2|mlkW􍆸%vn #մy٬6u2)a T'UQO3 qD?Ȍ SX ˬSe.:F3^za髯Sh8vrͩyڽs"^ċx/ ?yMua%{^aowkCy@ݒXkHjnБS(5 0fz(T!ͧ<7eCoiCkH c{O_ 5zա3\`XCD<~ *\CLJfeJsiljm팽)xMʺ5"r+jUqݚ*JbRCٸm˺&\|dSWRp_y^ //%"G\?#"G/ ^U>k4տbEF~n{Ǜ ֔oߺ;VWdy!r]ff5o}c3[w㰈D=02,9w ZC!SD.Od=9o4\\s=_n:l;{uO.*ȱ۲F&Z{O騮(ݾum=+{(*I &t$~`pSYkzMFd,1'=w)^$3 rUfض~Ƕ--YfFEVI:J7eG;fT7F#_ܽo\kԊLp:dQI %ְ`hug[_[)"^Ցf6kVd*"nGD\.OxХae\ }^VIV[Y̛)X,}؇(7zZ~U+rǾse5$_D>9z& F޸l2Q9}{ڵWe@j1rWP[YZt;ᰘFR[SQtZV"/Jiį~shu+K ֮.j٩3e,+ %hn WU* elKnۭddSbYm6dRxNJk Edly4r?_d3-D\;#Kz/ׇvy?>?~LȌB{|<5pmSZڵ{;/E"^1I -}fK/&ˀP$kmn>)SzKQ,}ɬ5lokC!GVWPXJ9%PO__"CbzsLwdr\H766z{{y/ERxK _Jex55 {O_ T,jSnw(MAY,[`0 S,}i\C=QUๆ1{@D>to;Ehcū"r0GcSkkgMk*V֭-]UTQt,eIC9#CyR5KՌ>:rH,A{Z'!Q~[^\`Y;w}JtN)"~OɶmXWEjd"OeYEDl\n7!*Ξ~ۆlrNl4nCuvU#kcM-;/5wlpaۇmYm85i; +JV%<1>unpx2S2y٬6u2)a T'UQ29L-X &Z=?DfLJ\Xf*su7 L_}O>Dñ[mNk;b( ~/}I5Է|PA+(,XCy7^.cECy =>sLwdr\H766z{{y-xPEzkHE7*MuIDAT0=5?xe}אL=gO1@ZQkDd|ld|ld,VjO\=혁`$s( }`Ϭ[Jo^HB%/O\H!HweQ[ %6M 9эAcO \46vbe9L\nMEH[ˣu_"ͯDۻz㔞"ё\ u#"}oyqf*#<(jPz@2q{!Tj _?=Pwq|YX7sk~t"88 ""Nf>w\n7!dR/?PýOݝ+V<nRRï?yjP鴟پ5}^kW[-&?;p@`8 l6 : ]vȞ7o}*"ͷpyL2,p^?x<5h4E" ݸA5k`˛7DZfy֎ނ22,0,"O7syk*Vff,/ӱhѱ ٱuݎ" -Yĩaúi]ݖOf3˱mR4_OUsG߸֔UqݔFm$5B|Xa(%=ʽgk}lr{&͚%"Vy*'l<|~ҰR \e8;3Vmi(/޲VlVmk5ƶ+QVsW5iJme3o>$?[,}؇80ٸ*/7{k߾Asuj62 U-m=kkkfC ZL9_q8qV\1(7z՝euNOÚc3g{DdZ^tyYlF#ͭ}iuYo,-rXS׊FR[SQtZ0GuwQAnIQiOlj8vrͩyڽs"^K#^ukK&Fr2wڬ'1,jo87VAjm7zg·auym ;}ƭOCqKx =swHV|qS ;V(XNf%QCygMRE(j}2VdHLޙ= ;.thgw;΃]=eT7?CşξϾon>֒.2L.+5ԼVYYYoo;/E"^ o0SuI{ ^vN4y~#a^[F: 5\hjh4Dd|™`m9yjtg~h4N r&ND.]uMx}Fk;w|uEl[1^aNL!ˀj7n-ko*5t=fђeNͥ޺֑mO?cGmmk?qdt\D|hE<wm_C2 ʈe@A 5bE]E"^KA2 ʈf ֯?tX F, Pu^ċx/E4(Ӡ^>D_P4<٠Ka{GN]]o˷(1{ _rƬ7<{l_Yx}8'"n|~r呅'b겓g:]ɺ^}O>._ Nnݶ95ڽ35ײ;/E|w]ڦkSɥI#Y/4`8'/D$eRE"^K9/z(az^o5iKKx>/l8޸cx<=U*z뼈RuċWyeB?Sig_/y1A^8z4wJǾ~o,Oy+u"^xJq?VY8LfRD=}/}MYZCFC /Hu.-KILcj0|F$CSyуx/E"J笆KɪA\qf3vYE]E"^KA2/FuƵOpre&=G (PP?oKv#h@Qy/EKuI(1c(c(#cC7,"^ċx/HG^ӠDhP4oPPjh(ͥ$AXdSy/ERCʈtCeu"^ċx/ 4(#.eu"^ċx/ 4(#iPf4Z6J9FCba41 (h@Qy/ERРL2⢇2 C 5bE]E"^KA2 ʈe@AX;j@ %hRy/E|ѠL2AnҼAG^^$>gh(5zn4&+H@Z>xj^ɭ6v޹W^'^ċx/%` AР E),aP u 1_HRC,z뼈"^kƫ\衜B4(#eu"^ċx/ 4(#.e@G^ƽ"Y3 @ <\BP56(OyVٛ< ó7RC,z뼈"^ċx)LeEe@2@jD΋x/Ee tC2T)H$ۢX⮍u(yY.񱑹llEdpKXvվHnU]>HDl;o7PMXq}c[-" h4"Eioiu⒪\ ovۺ#vw^6kn Y؎I?0n5yKa<ӑXpB]Ǚol̰;V6ݸ# DvLj A^ i-V{bw4μ|yvgw ^Y鍫"Kf1 P?l%=s\Gdm:sBDkFo?㎳Ƥ /ԁ{ 5~%c*7no?~}>㎤g7!Hn~_xnɷk ?D C3|yRC\)^yӈ),ַۼ5,.Y%"=]D󯪨~kCXdXoyĹe*Wq!T$^C@Enslʿ~2SUiXNN85m6MHjɖmw?Z^"I ychϷ[Ñw-Vh^I ya?IENDB`hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/Verse8th.png000066400000000000000000000751671211146647700247340ustar00rootroot00000000000000PNG  IHDR_ז$ pHYsutIME1w IDATxy|[՝7վKmٖM5BIZ@;i;O;̯cg: ӁNÔBЅa HBv&/"ے/ڊ,[8%/뻝{9{eˤ,K!BD%%t}ͻZ)73h!bz5uJP=~y؝lȸ"-v7M:zL_oQ.Y$Q^u o@>=RL7{߸'0K<4\{El0PV^56nG>+weGo @†,CX{{~Nu_ =3ZMW(ƸKWC4;8 aU?pU;M|;eGx>8~;ILs3aMe}oɤ8]pN_N,q^8>=>DtWyu:R'ݸm#C>c':[Ck~~(}Мx`æYO4v;"/m;O}94sw^懔e5G;)ݒ.܉~ݺ}[1;P*9ē/ +}7N"l2v.?Ϟ$ZIiU^~17\ol~>BBfkJj:I|O)/[hB3mS'=$mԉ'ƭi-wDyӝWDDr9OhtdHeۍ ,Cg߼N>ohnqmѲX)ޞ 7;@DG>xrDD^_+_r#_<;q@"GܝecR~Mk:;_T}/^"z/ iS6"w%w5ЯWWpcm޾䤿LjΎQ/͜>g~9&)VO+ÖS'>ÁsgrةO?ܸz@ɇ2ԯզn~#7|A[K}scD4as 3g'&&'vHQ6\./S\_XV{xWgC_NxOȓ o>NDemϟ|?ֱS~;|~Pt87+->q·,COC2 Io;19;.j$,Y+ ǵ~BH'4-5\8clW+ʸ0U~x<Kg&'R,bf[U07@ ).cfNN튘;s~,Ce.D+מ9Lǯ\sglv{qq@nQe,#{7=S~r:D"-9;.V:Vo6'''O^n͡{D؏M|{|mnWnC_n:?s׼;Ǯ_xm+@OME?p? }6ם4n۱Ӊ1MRrh?y ohмw3ѡFFƈp@(t}#KjZZ422ːHDu׽_N6T=^w)Т,LNDB(+h28hY0v?R28!׹юWxׅ,hwK%_W^Ŗm7]Wdݍ{o{?)7qF4Ek:pC~w7 =|b-{?);o߱w);S9hWy)\{g3#S'>:ɻwUm J.jS{|Ac7Z/l&AvrDX cs6B3zD41gE~/=QXr:( \.FLD23YشuG.\KpCs'L!>_Vq㖝,x7P(DyBaoOUcJIMo?Uo.ʬ}W"dNSM -.3z=L-fRA6<'?~f]<H)Y4Wɺ㟼W_w*;Cv~qJ"0wg*"|>g>B(9" ;0_ +CBo+x p!uw,L>Dûe36VXxgo'|{Bsp^<7FxjafMx?9 6.?zW %3;>'U n|wdPs]ZaçgD˱8uaӎFۮ۳=taQl_ B+|B]zE_( ֕wIDBQ@FۼtӾwdO$iSАDтln ''*ukf{rӾNTrJP(yCߌ~ϳ2D$7z)\58>yW !,h/{a\1n $ m_>ߕ!W(#:0sҍ#]D*I$*uJtglj@ Vad~ăΟ?ӞZNLr,~3SG &=wE+?j$Ј6 B/gڶ2:VeZ %a۔}5U{qlj@"GAY5$!}yQk!3tk k 'z}g $$ӕE!D%湚:@jmk)*4C`;vbb|پsu㷑 u7_W!`M\M9?,; :-pK7n&?ί.д|?9z"޼u4;W/fޕ3WiIL&u-m~ٌx6i|{ހ Y:Ƭnax))EBٲj Zz^/˒B!/KJ [V9eϜ9ow0 2d՚O:usPV~y~@ {s,#ƼoWM]=pJCCf:}td߲'ZtwV>cttӓg6ܸ:##͏QkHjjJFzZcc3b droinoX ٲji E`0cnȖU/ 8`au ;!ZҨj*O9{#?qL&e&5%y wΐ1>>uG 5j5?~x];k4jRDS)dE\0s PmCfIŰdR*x恒Ңs p豓ios];+).&vSŖyW۲yА 5U2 bāi]!RDSgJ^_<\iBAy]cGOQjjjqq@vD "4UWkI"/w)t߆7L~bY]YR"bK"m~1kOw_MM%b+7556JK'h LKQpX"޺m\.y5[{y{v$>B};wnvM͞x_+_awͻND:]"oUow/j_+JUjr#.D¼ːYj΢>*2P(ˈH" ,ؾueg;#uuQLmlyR)]soٳ=|irzn2fQWw4uQNDH`p-m$F<] :^.;WGD,ѣ'JKRSS90\P&,{"̐QTm3Ì4"=}WXQΐzә([W:-sȍڎ.zʋV0  "0e4uWUW\X$PxLnq%Wȯ۱rԝoؼ#Ff^( ՕDt??Y?{ {n>Ft=wxMƬfp <322{F=܃ܽbύ;>>鋇^M܌OL}x4|f ԝoȖU6ioo|@K)(4"OV-ab17H,c,d/6aKKKt޾s|${dr@|q+zW˻kք'zUo].z>Ĉ׋k#Bv_0Foh <5\s:U/stxI%~~ʟ165Oxop7Uϕ"+"4uӁ<\{5@hBeȌ|x-{(@h @t?e{k$85M$`YvUDۈmbbJցƻg?91s;nHD{蜥o.9pFdY8 v/Uc;[R%|ގ&Ǎ|rt~8Ҳ}1M=zK? .2kui:2Ɵ?3%JCyaR_=<x|DPy^Q w"jެ]!!"?tY\kx7윬u(&Vg,t_//wWz!/((XPnW{{QYن *UVZ\\YUrKaadeV "Uy#~—eLۿeY 쉧/D+VQ`DA `[q9Effx<O$'eef znh{'p䍱/\y7Xy,|7\`Ŭd=DDtߗ{ZTthl#D4::d6w3{,DpM܉lvYC|</ ,1,2 y| Yx\b`0,;66<:"Ω6D":jrYaHvi\Ƥ?[~>eYX" Cve;S(T))YY<oddh:^G,d u ֑!/chg9fMEQ7q~2giq2@y޷'Yejl :>33a+  ƔtPJusRmn))dYvrҊReɩIjyuQ.pk X=D5@O0HOy_`0uu?X464.oBA5u)2mmN՝ 2ss0b:Z©Ss0::TWw… ?XZ^|uzHByP^(/WR4gO}Js!)d@&vt`+y<|> <O+a-fW<074|wx`M<з-C`0K_xt` bHH3ヒ9k6gå~Z> ghavgٳ?hӗ, Z7i mb_,ɜNT⚚ڕI+;;7 ByP^O@Lfܽ|zCZZE t!˲n)O%D!H-Cf>0?< ?k&=!@~ۈO E[{n&O>뷠8QmcK)⼬B":y8?G_UEEx֪lCD"vdkh?OD@V-Z`[x\}Zj2{$P۳`_nFJD]s2.ws[7aRR4Pt8>0n{M$G""˩VH Bt iDt\Ssk7X$=wD_ODt7Q؝uyeqۇOE$eCi1fw~tHV#ãCˋjbJ}zex<`9.vV'^fw̻yqaD?ry2ғ×2 mٰ9>ahCWN-טEOdR}9wJQTSTCD=G#OOsa[GoW@! -61<ެuUJc罾p9X$`/% ,c/dM.٘g0uŅ9mݖab.KhdtbYSr"h5\.}vL㲛`RG?P-91P:84::61f0~v"0R!KMV5Gj0dl)aƕ+1f?f6$nhxmj@[F1d|d"C-IjuZƈ/m./)ʑ$N7#-s4`tbnK`C Ք {tuaI&¼tjKYn)a]C>#57;C(|~s&g3 7iԊ$[{\>BwX$ܸxONYQ$WHQk4*qaӤVjt\8`:103/Iꏘ_/9|Naы_~{W&g6n^y{P^(/  Ԉ6C!3a.ǍLXxn G 5Hpg,C`/X/ <~Z1?P$|2]<.3bEn {q^Xn@䦢M_֮.Ql"55]hkm=KX2tL%]{{{=ȿ _ByO@w܀{M3n'= aF,˺ݮ?ǾO<6:-":t.&:DD" kFQTxmj@aBmli1E>#rs& IDAT\UUZHDۻ"諊uP"ZmȐHD>nwvu Xz":ye`h %7Sn-S&f/Ļ4ZeH>L`_nFJDYǏ [nFV* `UG{wmpmPGZ TUD$Hdgr!:\:::IK"Cuo0K7ъםCCf>Ņsb[_ADZ23t)qhظ2Sn,Sȥ mv{|DнQŮL}Fk3 0\h,˓I|>N6z>"oio%{GH}"?G GxDx|7X=ޅ $|h:[DZta¾@)'m\Mj5NuEѤmh[+ r7\Yc~Js'm^0kqADiv8붔/xRZ;Y Z|euڦ\hUe9,˞oOߒ_.|>0!tLAvTgɤ@ TȒhv=QfV*ekmP,N6IMR=Mh5rmZ;8kK y&'TJDK uk|y 4-5{ܻw7ҕvA.,G_ɭV{tXЦH >?| ܎ecJz ;7VN7` 9Y:%<Z+K}@{@YIvheXHDr$/[CS&RĊHQk4* e6MjJVMDžs>amڲu2!Q!4\:[7UiYKu\X0L67Bw  -5[z͖Ƌ]$wwi0g'1k ]fBGX,֙1]aǷ?8Oi$sġ_~{W&g6n^y{P^(/HZDT7Q)D4isOc\Zq5/\-^ŜNPVx<>xCs7!:g:6}ѡȿ*?~+q#&튺ЏYG 8Pwx|ː9 Kn@>ė [vn"G^S/EB'ŋd k1o"7{:h/ME]E\x٣DL/kj,{\;e2\ڕI+;;7 ByP^O@w္{Mx*=ސ@t䳇!:LeYug~% ֔C%H-Cf@iӋѡd(*@nnزeN#:DkU֐;b\/޽l^VnN׶ YQBjLeU9|dA?o~ D'Lܜ?|thU<8 ˠOUȥ 8nF-Sn-OE%"/Ļ4ZeH>e;܌TRk>%1H$ܳsJ)>@Ʀf= "J.Z""A7&;SN !@chÖݞDѡ>#u B&=y`Թ&KD?p+5SR6؉z넍< rӽ^h;//U)e.Oj]./7J)fjb]L*y>x֛7Qi05ERlvg˛UC+ԐyYEyնPmz٢Ò܌ȗ+Rmx%E9FP(8|Lhʲ\Q+nZ'<*%jH!SW$"<&_ Ɯ!P Ш5[čX}ZD+s2enZ۫)+4tk-޾\D}єQ|m\"ùpXy TSL=vӠR!~kB.Q)e6gͧ륷' qX+E^pW 0 ץj7Ք&kB~Y;ڈ7=zT*&".>٣FinW*eOQgU2:+L9ၦX$Lg<`RG?Pts06lqbO/Ot͞6ʤ u mE6WDFu<2DQ9BcfQcf%GdknUDK(hzD%Gߌ&SM =9>U%xUnsτѦztcxD$3X^8O*R4VklNKMR)eܸqbJ45Y= }zT"NOK4XMRє2Ք {LN2֗.'wSy%,<>\W~|vJJ.4vlްn1[7vH$t}zʅƎm]7afF 7ag5k;*aXWBgא.U-&l6heC l4*Z5`|׭df,ny6\gܿ7o"zĂiP(3Z@5듛6}YJ#ˆŦsO/bzwe*3u7ULZ}xw^(/ <.0w۵QwzCn=pI|ψ%xt{g;y n>s?}^_SӅf1߳%ɜWveMByP^(/]\Yv9 g9GAtmncW1XSwDe1 C"Z5#(*@<0r矿WDwИP(- (RsotB0dL=CC 33y:\ʲ}u#b233ʡ|`x5%r)$é)ZؾRb7X&m&ꊢY!j[+1"R$NgdsC[Yl€ ӬKI+d#/D;*aR*"bYvrf' #˲CV"ҧkk*negfO* SsL^?~KT-טEOdltxȩU"jm9r\h3K s^Us3M=&3wt_"#-9|m}gη-fQESygp-i$Jn3֍%܄?[rMϣ(_OD>!gM/CcnGZ&'mچn_T"", eb"iΓyI _'} ,3RFG&Ƭ&NDbґvȤ⺆ₜ-E tҦIb>!qNn. وebRf1"R+eLn++jYtHӔ}DVcoFhK& FFwzy}t]2|Pa4<CD2$'+}h쫩,*ϒI@@%kU}{y0XuvT3K$""ҧkc7 dR%bKNR=ۨn*/ͪ( ã85%FC<L*%%y:՟@Rú6}FjnvP(ӵM(`4N\زLTxKb̜,˒}nZ%M-=m)K֪R#cK0ee%1)Wwpo(Lk Ydg9bo!@_.{d,^DFѨXv:iRUjj:. cYv1}1 y>ncOo@<"/n\B܉m/:DD" dV2#@ Ih;7 ÄRb|F8/7wE/W#`%u*@tͯ}!ڢ<}w!GP0KbѭGX"rOۛOSU]}?vs><ؗR*{bqtx[Y^HD=}C6YUH'7.k%DDSV Z)~˅V+$O^谵=ƘYY^MR1Xm ;z ~V":_ߖ?~r17'#d/t7t]ցEjٜ1"2W卌N~zY޸a-0c'mεSZ:P V+fZIa ;jX5us~o SYo$iɟۿc65dfeWZFSP7/bY<0JD}ᑱI"&)I֪H$2'|>\S%kע'2@M谺:Ok""S.0<:ljoXa#Ij"oPeQb7=B87lr^DQ˓[&'')y|Zk"]0`d$Js_*FJƧc1$)Yʄ>?M9>ϻeR ML:_''H*~dVfjr*Y&iZ%EVE>ODmLDLD} u{NҥL;R~n:^WS^b4d8\}3q9ɤR"Z_RsM噗@U`\eٹ%S65`Y17[ODqŖF͝5 dfwvv sK]níK. o+FhT,jeæIVժp絆-{!䳇ֵE|ΚMpsO/r;yc&kciOn*e*+͎#ң?s=zŗxޕ8{nI띷ۿwHO>#\P1˂aW C"Zȇэ,XgVE+5 %gJ/y":|LW>nNmE=pq^VUi!ono_*Gĩeo;\8: E\Zo9~~)߽w>mDtmbܾo3DT[o߳-#W?ZL?OA"z8}'էժ.G`gHU)xǏ [n^SFZH i!՜ ܒ{,J$NҨ>_WπKNR_bttQ(#r*"zCk3t1:{ 8/۷Tde8p+L`HU*M]eW,Ó|)=+=Y!G޺,^}# [3 $/i!-VmZNicEɉ+o~H$k5f{<^n谸0g׎T;8igd8n븍M*E_ex< h.t1%EٛjJ4 Ď$ewab0408&> IDAT cD|>_QR5TMFEnzf^_0 KAǻ*Z=iH Yw\WC-K GK:n~NB.^ܰxsM)k[gsD$IhMKwe;٦Ddr-׶ Z\D, Ja땒߫k ie꒒TJB μiy®OUkz0)Ii764wUEZH i!Xk|^m5$7 z>ZH}?DpsRL&arDls % D"vTde TR PO(0K*$Q_hpYID0/]p93/f%//w<"-VT?/AuE1ϐc4Jr2h|5 [SL}J0Nm 9Yi,K)g{p͍0ېܽi}2"ZQ,<[ÆMZRUqe;_ZieyC1,5cq̳R?c- ^s,GT>hӗ 4;"^lJ[=k_~{W왺W&w>o;/ ByqKq^Vhh,@[,#:c!CF&ąo;t]V ?:GV~gX` 4i}HH<}}^_SӅf1߳*ɜNU֮LZٽw^(/ x⸋2FAt8ϧ:3?yBkJMVw=Ot";܌TRkǏ [nN`A+vx[Y^HD=}C6YJ \t΅z ÐGmN# 9\NZEDTohMv.CyDLZ.//7a҂Xc'spak{{ 417@b.vv p>Dt-+3-)I922~tc:cnNF0^lnj7EחKR)6ИEY6̝eW]n4S>֥^Xwſ@H'56~kD|dZK\RwצdMO`w@Jz EYTO=_zZHJR Ybp}e6iƪ"*LO*2S`c(-4dhxd sg$TQ ja@- ~ڀ@رO_~aa~o^z,*\]YLD M~rO560|'[a9VH ɜu9,vcCAGD 3Q?[+?VL w:0,D,Nj`.~ZYV*D46>:f$"\:+RM?#8p|~"|~a޾,5YmqbM"єɚEh/Zn IHINӐӦM{r=M)&}!o)&%KiY `[țdmvْZf?463}?p:y\f"m%9-Yl6f …qZ-VeMM?yalx}Rʣ=ɭ6'g_ٵ{g"^ċx/ž0Ӝ5%igbKC,%!RC@CnQ;G^j({aځQ ?K_,W m'f55jkmy}Fә!9*--I"^ċx/2Tƽ2=ڐN1t]^ç2m{æU 8,}YF(*@!mny=}1{ G{/ihli~F|5"r3rUѦO ZŽptW%]"Q}s߅+ʔ{nc >DXC!en.][nGKGT_ /o{ʊVK{g߮oU.0FE}0b6swFs*;,-OދgΞuu>cXl߮>Pbq;SHف@ZvP,"t#:jCEK[WGW>#~vEzz^wPDԔ_Si>WţM~@Dt:mW{ޏOFn ~k]dH<^^Er)ۃ' {l;h49ʸk+o߾6tgV2gHD6oX_i}UvLFj5Օ%e:]{ZmhD3Ғeˋ5=V[c);{/]l\[%"';. _=ŅY6U%"qt=^{ٱmmA}60by6.nL_.d1o!,E);8<2\3d2;6ݱcSxItѐ!"#c"22TNmj͜6fV)KM;*Rھ/Q1C+" m rSaH `X^;p̙ƆSWiiW1VKX,M}CM-U%۶8(}m󲔑ꊒ7Ѧ(y@Û5=ۭ֯0g}~Ւo}UmX[a4s'k)-7yD4V:\}PHl./sJKC\FSv8MښPHGζv*Nn3*V6ncZknlM-][6V٬6%O$pb\Vj oՉ{١FVN0UXqX?#gȔ9SH) ɌCel9mj Mg'zW}Onݶ99:|Ȯ;S︈K}Efߏ_V]v8p`|z,e=d*1I@_vv]Dy]q*Xf A^ Z]~A -.gHYѳ/H,OͲkj:ڜJ5N39wE]]]CCCrUZZӓzE"^K d.;{ez!;bvO}deE=dT{Jz@6)f6 QTTSSb g9ɾ"Q}K+\ihli~F|5"r3rUѦJN*63d/M7#_WD>8Y@F8+-=?S(aӿ)+ʷZ-}U)x;޲\@]vx]iͻq}tDd͛DsĖ?ED.j\oxD.!&d %;lmѦx*{E#k#gΞ쾠Gȉm+̗/_XƵe ٖ9*,?M% 5bY}/kWuG](W2{>y{е /q]eGEQ_w\ZYec+Cnll[ҋ&S5=V[cdưyci:&q<VnP65w6n۰5q?MKٳSfE0A <~u2}``yO?X*P١9 "W +:4,"&äLx}~s}>tک;QZ(_ݳ0t;5fhE>txs  g>g3Aj%c 9\);zND$nU&Nwn4(}m󲔑ꊒ7Ѧ(y@Pswشa]ɤbil Hn}mEIP<`-yS;2*;ljTе-bQlV kCbZVx^xN5MM?yalx}Rʣ=ɭ6'g_ٵ{g"^ċx/ž0Ӝ5%ibq/;$;P9=wh';|xKm$< *!nei*ihli~F|5"r3rUѦJN*ÙCɰmҕF_|dcۅWp_znپ g_?!". \U>kԟ; m1e涞gګKo]e˜3gyY\~@u2}``ۓ); \vxɨO1O) _83rUL&ضnǶu%͙b׮vھuV)LQs'Zh4\"ZcVdC79/+ pvs9cZWW]]~Ⱥ5"._^j Et4N54x/==-r`ҫ8(}m'W+Jx:G\+ O+Odilpj,) oXWi2 E蕡a9ukݚ5We ~b6Xo`ԭ()t R[]^p9J剗@b"5Jv/~ud떵+KԔ N5_\ԙҒskv45wիWB22hm!fYm6K(4)IĸX24CuFy/<\3%D\+7Sz.G"Vz7jw7L^ׇȔB|G{89?~rCGvޙzE"^Kx2n{Tl޳/*6)qsP?wu]VDy]q*X_vx} /XCď.C͏}1}ED+zxL|f+FrśŧeN`& 紩3/4Wy}MMZ3ty_Ft&箨khhHξJKK{zzR︈"^ċx)< esJ Μ>%ydB!u?|{ ,+~>s9kN=]-7$,8^o<-QTTpÒp}"G{.~{nc >DXC!ƖgkWnZS-"';+WmR3vV=i7(+Z2Z訳 =U:  <۞|ٷ[ Qo-+̵͜=hÊx+~,uv_|Yk+uADԔݶm+o}f|;=^^}K<{tеQe#fSʞe>v[*ˊ*&p@)\ Sۃ!PW;XU,"g΍9\J"r}xT^u[BPGW%Mkpdi5˺u\$d*w?7ZdԿQkaXmuvZ"R]vh0Edt1-Vș7i4˽am }#cNhgۭyQ9ӘӥॡP(N7[ںO̲e޹b1m#JDΌgk^b6:b]"nL_.dH.;t&irnfAD(:4,"&׋W+ˋyށ[~]ӉHT1>~ "RnS= djZ`\G0h١[B ]vݿamՆU{nelRR1b6e-:DDVe؅+U%FCॡ9IDAT`0TYVjEd`j^,F_n8]Qah$Mj+J|-G,e䍧{)ʵrS 5Td(/fOu^z}60%"g߾cㆵ&^yPD;u/\5SDp]m8Qgěv*Ak߼dsўeCrPr(sV&Bb4DdKmuyAT*'^R5Jv١ybF3:lZ:5eE"2tmlkW۹F#"{daGnwP(h.Ew[U\c2|T6 i4z7 T, IhluWl6f Ɠ?% bZ›@u^vy湃J27 [e;5[3r|+NވL38TƦӦμ0j|{zO8`i{!|q 0dIX8D~|.B#k:NNɗxa@_0 A/(<ſ}1}Efym}^_Sө gWht:V쫴'k)+-Ŀ^x%'0mцp:>=~5h#"#GGϸb3[lyD } Nxb@Sû;#^6˘Cj lRCٺ1Rv`Jq{yA7PD{; xt^Cw]44tD?#\SrӚj9]_\hSM%lFEDg/}~'Ouv'½"\=U!qO(jwV}0b6sxQC'zO&!١訣 ?'/'?g9<[z|dDn|ED.j\h"N3RCI7돔ouÖ+fTï>iY鴟ؾ֟Ggu5,f6;sl2:^v=G-?vmTHv8Q4L9O75MaAC#7/P]ycu55߲ګ+J2M~q= nVXUXZx "eenxyXGDfi3eYiMXg%2)E/KWg6e1S ;RUe9{T==wg)gڻ{}{a~͚y}c=}{.ͫrƻ9)"Ņ9e>ǚ"R]^Z6-ËcȭC7ޞL!)D?75=oeʌeES4C6"2<2&"#>I/";ݱumx9;;̶[6-Y3f[mG[FFod9v-*CӗQ1C\&"NzF/+ pvsH06 þܵvuY Wq&j4iӝi2n:?xiH) LKKruo۶֠_qhˆX-h4c W"-fu5ǧ],Pj+J|-G,e䍧{)ʵrG0ް27'kkݚ_^s}Wo\Wi2쑳[VLz?h1s?{{ZFDs œYo_ss얜l9-";֦N=+ӞehwY]uk+J .>El./sJKC\0eaG캳0?0^ Ne%EyjMYM-`0QGk{tҦ( ۱[6UMF/rw"ig*SP."&bUĮ{aYm6K(>qZ-VeiC&9|_zNξꏟܺmsruБ]wq/4/=.֖{wjыᱡ%~aꏾ5Ցf nw`pP fit1A\Oydg, I@-o,|Wg\Fv8J 9VTJfxbځszZoOmZ.ZqPg_L_.Q }F*S8aʟ\iz{ICel9mj M&j|}^_Sө ght:ɹҞ;.E"^ O Cuyᅾ\r}lʙSv nׁ-b^G ˾K?xOFq;3쐯eI7 q BУ~㯕Y)QTᄯ~FWPC<C6[Y~;E_& pMMkEDs{{gt}q媢M5:TN*|䏿;M͜mްjj5& KPKGTDq/o{ʊVK{g߮oU.~|z s-f3gg=,?Cvׯ{l}egYׯ9;j4/nkz:;- ;\@vh0Edtc]8z:ܡtGW>h4 S4\sK!K$m_O&m_I"^ċx/⥸CL;UN`YfY(;!u"^ċx/5B2bfP, GMx/Eef1,fʕ+@*>ps9ޕ$TG5HjRu\ċx/E, 5ˈ66B!pԤ븈"^ċx)Yj5冚edH8jRu\ċx/E, 5ˈerCͲ6/wl`]ڷս+%@ycJ[mN>tdW2K<éw\ɼTZ"zL5Oa+i_]I>T"^K~ !Bhpڦ2Ux%m IY8jՅJ/8,fY]"^C2!R5) GͲPSEeCLBoH+WpCy@xW25"!.EwTK:Ѥʱ=qM $Sa'BͲx%m8)P-mՅ6_+qh,YSIY8jՅ(i_{?,"Pp, 5_+qY&;!R 5) GͲPSEe])H7$i/غmsڵ{gJW2d+UEH\&;D,kP;ޕ",#Pp, 5_+qY?p>];(-mՅ6_+qV/9)b859"^k+8v֬.=y}!///חF$ɤ<|H~.'JҊ7y\*UEqaDfKkn{{{JAQp, 5_+qH [x<Oj9- ~ Y>vx󬛷v~ᄏ6D'Yj m6B(~/=,Hڼneg_~/iqx1Fj8򱷣=G=pC_?U&~o}k2jReuo2/=j8x]\хd1>Wo{21eI~%!vӕGT8}Cߵ;DMy}Y)S{Gd 5R6ʿb'nQ xF>49!"Uk"riaCsb$QE}k7G.?_|7>dXߵH[,8Ev}㏕? G.0]rSHyL#, Qnszxtw׷J&Å]d AH oةLQ7ϊs 1[*vbST~YDC 8qs[Hv)Te۝O7籖{EC$7_ݺٯ262VJϷ[ѷ`y qIENDB`hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/VerseAll.png000066400000000000000000000220621211146647700247230ustar00rootroot00000000000000PNG  IHDR1! pHYsutIME \z'qtEXtCommentCreated with The GIMPd%n IDATxyT[׽ᅭ<1C8N{u>(ر #^>l>O5A*  ƌm @8B>LͱLp3ǾG}d^f2˲ZI`y^,&e!\{ǧQTAᮅ>k'b`0L cry_^N//E_`e?NF&T12s_ՅX,G|첬CO_vya$D?Uŀ0RAL&bL¡9 V///cA^p (]Le,c[?p"*ULk4 dCmrr1qFF?+A,bڊUUW27; ՜4|>Py\y3j}qA (VV}&G~x`!^l2?} M]ؚg5רBxx8C1X5u) 7H̃l!oI'p8ؾ Blkמ:Vg9v wmBբ 5{RRsAQNhmu rVz7H Uˡ>q>!}33VڣGhmkǣE;[}z>z]Wf{P(hmm[u{%}EVCVuvN?rz:>=CE9UZ;:ǝzwF$9ܟWv~vnĕku{m]yhJt^g:5#ry\ 'Ԍ >u1qGeerrVjJLg LLL΍? >|^ǷpWJF3#8Dn(̝)5UjUC1>嘳=ϓ> rTWV䷏(}0?]l8&&&lݼi1x&Rlk31O$?K?gbBx{{Gl$ (5fhSou5csOWHJIw: y /~5eOAls:(k&O,OWHe͛։ϻ?o:8 y41?(J~~U m/###ؔ Xʀ^e˝7jLV!g~`a/=Z1ni}|[(1>QFDB1w3 '?%#bV:]s~ާMy_|} ?+GBBXL,C``L͖T|ٲ/C"'AwݷaO*loj=Z(tB"mOB1׫ʸ gʋNXX,XL6`bjw188dgAwϚyxT*E+{BB|e ;tbxҽ04,oSyc{aiMNNQrl/~k{/v؎͛ekFPbaJJahH쬽 BR]]R@@inZYWW!DEEnNlmppƼcbbn=;ü#EK /lޭݻk+/0z,[/Z2 3u-IkyB5Xs?x-. W¢y-_{ ɲ|B" 苫~ {qX%ܭ~ϑ7/>zbNbBX(£/8xeiR? oyr~-缩 Xw9䑗F &|k`2`X*&dZRLN]pO e?*&ʭCl|2:Zpg2@\\UA+(;bێǩ&LFcsn'Yo;#Z(7_ ;tvS%0  yP$$P1A@{;Y&1kAIHH@j r0R_* <I=ֹ%;Y_Kr%Y//-[o 8#446,Z\ bqXuL&3 X t- QrMxGDB&/3$^soX| ׯ#%%!8u'E"l-DHh0`7Q_z x}IxoYWVV+W@nn.<0KXq%lٲPS]p ..}N@iY9`ll PTUW;W]}jjСÈvD1e!(} `b/gN}kaΈcv#$4 >>SF}r ,^5LdN'u3'B,PӶ\>2_G>o5" 1عDGG`0xطo? nwzH$2t&K)-5\Q!X+.9F! 2⊊[x4Kqe/`dxAABܸ P|khl{^}}iη UssslA,,WxIR# HP,8>#A! F*AF:"[kPUBW)?@5BBBaQ {jb5 UX"Aͣ!W~!HLR1<ظ=G?6mx.gzA,VFUX?sbbc0ƇyuŲZPҥbH6-ۧO u$;c9/%% ````w*o||< t@b S!G+K 4:O,b t6o T*]u:::PUUesl*< uKL$a F[[;Z["}!JO (p!B371!%PJ\+lܸ{A0&hhw8RSSWwN6*+p5BMy74;wB/xAAA DG- FPBJ_ճ(Lye).00 a 3uoFdc~T L [X.tK ai['gblt xۣcnh[)UJj=IJ0>A,Q*_[""<be;صkrssHII6ݱ#7|i044~j=Ċ5+(%׮a{v|[RSSNl$%%,jչ#xp\H$(Td݃Ak^P|kii{^sSiηssy-j-A+BYHw" HP,$A Ɛ 0qf=6ĪPzc#AX,*GDAsN@Ta\$᩠L֚FHz}ǎcC@e6Z(//Emm>>>VPԴTA`2Y ş9{7zを}AS,qHNJgdf, --(//Op6ojn/>, !(ii`0 hni,BbB"!c(|I=$}q⫈P W'& Stf9?)Ʈ J bҌ?M+'_EpHsVEwO7JW1*;R;40~rVkʶُlA,|_;]ah4\qzm 5bfO  HP2} AgX<6r6DWgyl$Z(*%yl$䱑 (?" QT 1[ACwO/A @_yl$OĄ fB7J8>mHHH0v+ܹk܊kkZd2TUU۔DbB. bكаPx`T*ڊ7oBxT|ɧ%muP(hoқA,:яA\\eCZLGitttR!!!ػ r/?lz.m{* Y.qF0L455 ~~޽{/4!@,.AC}p\;v)R Fm]H$pU$X( n0bi`2~v hiiۇW* \.)((@R?=1%w>B (^YEggZZZgkA|}}Q__˗/SK&by `B.TD"%=]HK$xiDc[MUpknGF䳮{ľ}LH׳1ؘhrIx@"Uة;d EP0f?J PTTdO,t&r8Fr|HHH@-6yu6d~:I S_{Pknc.SDD  g~wA̻PL d2P`HKOy ʧ~6@}}$>qU*#` χVŅ מ~̜˱jXf#,< ]]]njfЀ+Ww"""I  )~LN"EPN>2=:dⶵ#++ Yٙh`œDlL,r9.\0c/ bcbWQ&bu JRR >lFxy >n#PzRiRDEG#ljDGG4j5|DEE}`[sρz{{Ђrŋ/.( 1x D ==, B Z6ASPD^x&ĉDn y EA'AYiƜ3g)ɉHJJɂ\.GuukRSSm<:"66:())VUC|((( ܄k%סe:>Cp+Ze(-+8th|Z1AkGPVg! AY؛]EB>!Tanm yl$Z(}=䱑 LFX bNb^V :4{ ( Q_UJH Ā<6kcrO~qlH(ypϗ[omh108Rֺ >?L& ##23qss7akAx\V1 GYyfU 'N|pyZŚ7|T EcQ=6#9)ٲ&ӳ,4> S_P|2]BF$'ر݄;qWT ^ okmśo6,۷{<Hמ^s^2302<ڜ[}q(=3tVqmjANAHqy̤33k3?N6ݻ͛93Vt{|d-jhhll}KR!!88uMN` x&afm=In߮l V6zllnie!]DfC&'I".>B'_>ZZZ@ @l\5°l^^HJL(Jff)⒫\8t֣.O*?Ԓ X>Co )fUAc/Ǐj LtuvF2RF0A bb#" !(yT#V zl S3y饶BBB#C SA!1!FχE>w5k6Z2 UUhlt76!)9`XcG~۷@dDl5Z"GVAccqy dz֧с!IDATjHR`'dZ8sZ\:T*dggFzh5ԂXA,RQ6 a|;1d202< _?8'4 ~U0 p\BAA|( Y)>#}mgFDxOXxb0,DƦ{"--"#AIO!""&?> >v'1VSUc#& 5qv¶m C\\CI WÂ3ւ1X<6FPm5䱑 fkF0A bb#" OZWIENDB`hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/VerseBridge.png000066400000000000000000000255521211146647700254160ustar00rootroot00000000000000PNG  IHDR pHYsutIME nK(7tEXtCommentCreated with The GIMPd%n IDATxyTWo,PP  "n11&jt;1i{n>s;};wwzͤ$14qaET(vdz(X*6~s<ֳ{~uz{[zxMKF# bkFMHFtZKc !O>x`fT*60Uh.8;)qqq3c9}4{w~O[m[RHa7g؊y^U~0a4mT>S.䌛}}}8;g`шiVůoNV15Auw0+prr?xg޻ǎ6ػ+j? pN ^^˶ 7] !''9`ggg\]XyZ0 !ĘAuTs/-?vXgk@eμ^>h/>B1=U_]S}>~ݘr.>n}*1]e e3KX:Ƣ}bZ/.q1&+BDE?uFNƔ|]TTD-?溺e;$N>mI#߳|C_] Czcw{AKYak`IQLO\߿lmT (x ===/G?84_sOos/[cKwG2L"##G-;I'sD܋@ cK8yʲNaHmz_G _o66ފMu}&S~96pˎT:C{]T{֮M8SprRZ^7[E 򢡡WWWV'sz|xzxAVON::##éݍII(7TKU6`1O6LOՑKmc}lnL8~r;ǯ+#^ϗUٲy 0PUUMP]B|*hnj!=,MsζwFÆɃ+QjNNs㛆T)=ill$$$)/=eԺl 6rQyENyTs/ҷzW Um헙yKYY9Ow-S Pk4G ?ʎ5kw3ԑ- !&Ǟ 4@y0aĵ,+9Jt<*3T5>:{ilh/h6Yz YctO*ʔoB{S@?{ƲlW);l ehge{qvvX!Ĭ7fPT*qrrҀ*& Ri7KߖBLmOu,J`m-","ΞH @xx4y'7?,-1hQ@(R`xki艹?wJZBQTTܐFBM)M BLaO,2R~? !&T###J{xف^w[CXP*Hz}=;vǩt5c>wӯO:^Kzp*ʫ;XZ!b̹JJ!ĽqO}3@ϦAPb_NWcSly?~9XHˑ#?GʆTP@דqO`磏ル ]]ݸɏO!g~mOuSfhoGѰ{˶̻\'3:KRȲ.1q5O=y@]ڵ"yɧX8nT޴_~6VZʙ#Ĝ AoT.\OHJJhv ֯@nNΘ^t'ܴy .ɩhkk#%e#c\NGxD9B!fgPVwXlYx1mm@ wwsu3G!y3G`4]bPظ ow |2nz)BBq<ʈB1zikoCPŖ-[ h4rqeddknR6l@p!qqqmΏc"B+V#bvTsiinFѐx.]ǨճbE 1+bx\tiǏ??5|r!=U#0_AAP99dOׯsz: B!yPyQsyY!:X% !p"eN#fBTVTjP|>@4sف^_/-"jLLqAubP BܳVZD +_ Bܻi!m@0jBǂѽ|J3z}=;vǩt֧lfCoM8s}%3Hd7!圫R!s\Y˪PyV^p%hhiiĉس1^{jŋϟ_ݲ_tt4IIkhP(7r%2׋]NZO?v:N 11a4^rvvqfiR4BBB}{Ϳ'+@W&- h5~ݍ?aa9?n.9hec&gB KK?XՒdWP5j0"= wZ[m7Os1YRazNKD尰pk B!f4_®<,lKoo/igHK?p[!yefoB!$cTB8JyLr!L*+*j5T>B{]"BZim`4:D! IIkE.K#!&TRU]#-" F_[^w[CXP*Hz}=;vǩt֧l$}:ߚpz-Lٷod]Bٳv{ MMMdggQT4q...]eQKIIkk+bǎ탓3픖ryz{{z:ܖ>>ޤnDP,p‚Bg(r&AxxeyyL J¡<ΡVΝ78X9lHBe\Ogg' sʕ(J)++ӋիWsQ{6,(( --t GR3^MSs3yyWtB{ĪPhƢT*hinO""")++;JJJqsuタB@R8fj;ѣ[O;PU]mYN^LT""'唔N8)((ԩSr& !l FXCl\E%&fqqq8HczGW*i.5]nε ]Ӿ CN-v|]Փv~[j>|WWtΤQ_/ !ĬN@{%5<=<`۶mVҬ#""g3Gdd$300`U^PX3DtRq~cw>:S\\FaqHO>W!4TK`/Ʀ&ZZ[͍X._6=h&nPZZFDDcժUՎ/xOFBAJJ  {7oZ?uoXo~nnRYYiw>C/nnnri<t:.d\f.6k׬eiR-[RDkk+99yPVXaѠOXXaa(//'==[yIIIa(^s ș-s5{cn{7Þ¶ 2.dq!ᴎa履~:%ܸq7nY,)9<ўB hwJPBEF0!0VAB8SVHc&զ'Ovqqaժx8B1jEyy}gՄDB,!0 **+*mY>8ŋ*׵F5kqrrfɒ%u27oV::IxxxNn^B1W!hMi PeQxyynG'mym4g3-M.o,au=:sYv x9))JR6pB2Bݠj[N&Y` \94p<{3$)i W3m{G;*||.Yi)/C܈O`׮0%Ս8@Ks3{{jMIHLѷGm3ח\,gbE} ...ŭL7 c5qjKPUdw\h3mk[̺u\˱Vij݃usuC顨]vz>Y{VȑG38ɺYPPղ#lLMKtwwBs(11a4^rz:84r) !!!ܾ=T~~Lv4?]JJJߟ0 qf%M88l2:::uCm1<`LHBB߻ƍ IDATT͗~\:j/H%11ɮjM`0PU]EzLo~TccXŋ=7 $<4c{[9;>+z7zyyY-s9_bB=hfoBqq$n[ B!HټY9&hT*i !=ծzi!4P60DCxPA"b,}/g®VZD +KFv}lGB޾:;RU]#-" F_[^w[CXP*Hz}=;vǩt֧l$5I#242Q֕+=kW_|j`0DvvEEO5kYoo_RQQIZ!~j6m`\5PS]͹shB R<=<,/Atyy99աjٹ;} )XRqW$11acݳz `%""<&g>"mL7Ba pXJ-͸{zADD$eeevQXX@II)nnP(T*=Ɣj;ѣ텪մF4=Ûq!xg{3TF%Nظ8KL  q/fVU6,]jܜkP4oԍGzzAB!lTC`` ~j$%5<=<`۶m--j9""K@}]=}6zxx:l6c}6UՄj*n޼IU*FOu Rhlj܈esi ~eDDDo>VZEAA>:]i;;Zʾ{ܹl޼xvoH!Ƞ:]\\^nĝqqkh֭eqJ[Vv)Vhu Ǜ=X溺: >TB!f8.[Fragg'–VDMʚS```:i222 OСR^^NoOj5!!yR7n$  B1A5ne,`zV:?qqqvUoCZ2.f3MWWG~kֲ4j)˖-Etqyf˖-rJVTY;B1 (bF{77|Ӯ<,l` B2Nɉ'Bq!S- ~B!AuB9<T!Z;`Car5/VJ%_=kEZRi !AuB!&TS 1ݸqCA1IVZDÓ:Y`P+ {CaQ^z}=;vǩt֧l$*Ox }r{  ///8$BՄBСZ&i/4&=ՙTRrf e/QSSC};J%F rՄHM̒%ar !թCaQ!nnnP(P__o͞;w(-rȏދhsrvfݬ[EWW'|zzıF)x=5k֐???zzzvS>g̶m۷?$gBQʙ>`Bb"<(y**+9lڔJ]]EEEcmVVNuϪDg|Aڙ3hi9 $$9o' |y}6OLgHi{X`o: B̟'AwߡZQQ>fӹss3ӓdΝyLrg~ݿI3t'Y'"n,PAbdQRRŢP@ssηNQ1l Il6aPčXfnX0OiKSDfC0}r=nj ܑ;m?`y _遷 7g[Kiނ%j ZaT^ܳKe~fцx//o:n>dlxz\&-}9+5q5ӡ| OOO7ozXnDm]l|Q_osKu\PMwO,IMe˖{-zm^2c;11|y6---o Pug+g32 3Xo!qhƓy^#mrGZ~2cM~ޘ_c쇫}Z?G[f<4:ϔ y񨯯/z][^gONx'^mko:zǮ绫 |痕IwL"nb4!88={>f``.N'3s Ik_0 ^1!""#f>-[@wOC>g]]ݜ>}3}w#}]=[^+|1>oqh.+8IZ:F7gd׾,d=1Uiϧ('Jtwf⾻߿>^EO[l-/(d۽[gLHϋ7g+f{?x)GAA[ރ &i|ߔG|;ߑ(7/i^%.;_߁;W:.{{"b8《?b}7ғ4/\^'ȨXiB8v.70|]'F7y$&&=C ͛={?qNMM2c4l600p 6E 8[ok{G0`0ϣN'c}>fھ߿>7'È{~༱__~y7ڛj_^42I~fzh׿HO`shOR=I?zn\ F-@:::Β%|g3ìY~؄\qOLRM-]gٲLUsMTT$3,8SVN ˓Kp߃<==p#d1`7횤;ݍfe=7ғ4wՓtmp}m|t]Iqy1rrmhHF ~[=m|nճۮDD w0>:.oIDDdR!)o;&Da~ a==7^}KqN6p3ӏߥH=H"""I!bwll6i빓mhoOL~Q7oxzzԀ$?;ǿ[^xjp}Qxӷ!gq ITUG:2D5X^Us2kb`.3k! %DFp\ADMy DDDDs61Q_TTIDD!iH@T[fϦKE5;$$,F6LWyWylt_)o&%%SVVDDDd2f܅]DDDnm}`Ql?? #~i_|Arrsyᅿr,J֚ubb!7'ܾmߎdۛ.VT=tvt m7ZxH"2.w[OCS3턅s.ǼÎΐwiQ__OiicZFF&|Q"8}NWcn106>|#GDDd#N ~ff6(ش+WZ0 {kk˘Ï3/ÇO_S%"""3tȶ6s}͛fc=ceǎdYqRSS;A^Z(#-#""&|1-/ƪU(#޻YXh1-bѣcwi|PBC8x71e=I컚VRZ2r'Ge*(ȧ R|iΜ94MAIDDD!-wt($XSHqol`깈Ulh41DDܔ'A-"a1j wICDDDDXlZD8qADD!Z@QXj^TcsHR@ٳ> ~@YYX, &Vgmty9***?MO78VDDDdy̸0]s)ԓd0f>|y0ž={8-k_z%G!11P^~er,[  M?q3ό{;y05SP޽{|˹Ԉ"r1ㆨv/T\:;; aMyמVYYI~~ӴkukRSSٹs's9{aܱԔ l*vxGwr"2G7wv}8dnܰydffPRR<5IE۷9ܬZ߿v/_ի).)?~\BƓ $$p3uPw5*ݮzH==xzzNaF7WO54;c\alj~nĀf;v aCzrmdi vL#wۤ?""ʴ8N@֬^CTd61?qM6lY&$'']w|/.q]|9DGGD]EGL[[Ddk]0TXXH__,X0l 8y丿8=B||FںZ{NM I컚VVV>rgN漼#:ZDDDƍG>*QHPH Ys9 Ѥgb=8RWҠ0ψ5_ """" IC$&&ED 5BҵtI"`l:;^TcsHR@bih47:kä樼ʫʫm*??n&/ A>q{ş:Zihl //16k/"88OZZ)/?޽,_#:&Cq~MJJK"DDDf)}e@@I җ1M(+;C^^uDFFCBX 18}tttjժ1å-""r8MiORP{hJJS㮣|}}y`0`2hh}!,4+Whr1/44tu?=07KDD I7EѭNBzz: IK32KDx5TrYfE9r) 466(c +9YLp=$-XD@@wvr{qzfaeـ\n;."""wVH|FZBCc͗Ϗ:tի׸ Io&JIJJwlrS]]3jvsG($ Mjîtɘl6*+ 7{eO:ʕXj%_8r Y=L""2Ӻ'dZUfL]]FLL /=p5I!!P[WLv> 㩧DYY=݄ /kJss3'(-=5fyoooV,_Akk+Uzɭ[)Є픗s!z{{'@Yy~d dڻ;??_;().P!%lc.13ߟ녋aPP__lf۶̚5O<518[Η_csɒ%x<8}4gϞe233ٶmۈˇ:!;; c4y$/Lec`{'`vKV8%-/3k?IHHٳ㮣r|}|yG`00455Z&++`;o<:zMkjW\ź֑?8wI_ŬY(..O>ё,""r+Cfs[!%5ӧ0x"RSS'RRRfn}ںZ.^vYf|B<:ZZZ'۶mgǥK&,.v`QzꩧihxW"""75$ʀA^g0CR||`ƍN岳^'$$8\#11UW300mC7 08M\cy+_Wޞq3OQQQ>}0cb _+%""".Bҭ:zfZZ[ח));f&33eH(/?KBB> iiinԲ!1 deej*V+>ϟw̿~Oܖ{5ǴKDdUUUjח>3g>,8wnnoo/&+%5^z1l\p-_}heϞ`ҥ,HT)7)pffbʻ; :/h J5<ںZbF^k_l,HFee;//Ob &22r\ ^.3o!<7`bbG !C=F.]DZZc=]cwMUU/nooҥ sQbŒ'aa475sFGtIKRӼ'|PRSSIZpa\W0?i> ÓV \`@XhӼ'OG\\<}}V*++jXυ yb…X8}4s```@GtIo^q1pXVr{8we'Q{>R@EE:EDDkH3nD{DDDD!iF2$eZݗEa&5r$YjX4Rlq4ADDDD!iDAT[fϦKE5;$$,F6Lܜ.7._oʫOS>cfaBrO?W_kkr)*{lfcEIKK3gٻ#e-[Κ,LF^^PopaJJJ&'&~MJJ'^2DIGDDd5: ()-חK &ч/ظBhk/_}+WBCC\5ka05vb{#6m6ݻwwooo8x蠎n2j]t̜PHZX"#\2 >ȑN Gа0V,_p1ΟP𾝷 IDATÏpB4Tf2iooPGtI1O,&8,H" voS=%IIɎm6:\ @Iodb5==wt`ن{,4mp[v܅#o} dpp.}}:EDDCH|6ZBCc͗Ϗzzhh) ֛*%))Ͳe?Nuuͨe;11b -//Kٱc'[Kyy} nKzRZ._f;-,7~;b;VߠԔLAAp1">ГHe$oooRS#+#3sGf`gqYS\VeQ)`]0@OO%رSzu5yO ϏX)(SPӴH`u;vn"o2ph-^/63egY&/o/'',4.^{kCBe}'$SO2z %.>ep|/ł j`` DDD:EDDKH,ɫ},Z}#GΊ "#"?؟sGڬ]kE*,*MGt IQ?W7:0boo/97ᲿZbwj"5V}u$Lǐ4\gܠ/$2d I"""ː~ O=sUa&5r$uuv`4ED>9"F!"!iF#eHZlZD8qB˸lN#6Od2eVP]sI-"ã`q琤$2ҀhbuֆIב**Ӵ?$&G>q89ܳ>jL~ JKOYۛW i>AxzzʹsUdg`28$ZOtT>ZTS_|ASS҄ 1+O||ŋ9J l6m}\}hf͚'`MT-/OIF1ɓX{{IHH]iD$Xl6-Y<< \̬'!!gώb=`h4"$8v~; glRs)..&55{w[JD?5dCfs[!%5ӧ0x"RSS'RRRfn}ںZ.^vYf|BXfdi&֮[KDD X}qt+RDD!>)OGg'7nt(NB]C}}.:mx"55Ǒ穮֝O"""nni6ԫH457JOO,NI14.C҇~@yYxIKK$ul' `;wNaa!_|7ti:;w䷿}CGLI  vZJj#$Kcgٸp΍V .]ҌtJO8r3iiq4xjz}_B4Bdlr`d|}|lTVV2_I\l!DFFrc5 ^.3o!<7`bby|ͥK̛úk g! .(iSR{=yO>$+$ ^dQ[Wô,-+`~|,'='w}7qqq,Y.Nc< rz{yi8WV+s=;ٻWGt$wbH3n$c%""$s$""2:Cm6?\D,*lhTqW$K] KZD0;#b""~15?,X[Oc-3thބmu IWqwjw$r>7aq,{kh@T[@?,z>?TPu-$M?ޤdˈҀhbuֆIבYߥ?:m7d?Wyw-G^n 0`Y{446KQQwG11' O>MT݄envU7q S>NRY/ɼyx?ҥK44 Ã^~FBXn=q:DDDFVXP@Ii <_b00L4448z ; /?~πk=0^^ܱ%ituu [װe>S=˗/gժ5éS|`hWTT7Cvٴi:icW4#ǟsUNu:)--6 P~,=l{6l/g+βa=ÖYz5v=@@@Gre˖G)?… U8p@G41=IIIɎm6:9z({|䲞 ${>s<3,]j_}p~çY: }|~G$$&2lbݹs~~~?`""7էf~MJOfٲƱLuط]d4l9446'0fvb]N󂃂n8$/evuwgiFo[""㦀$38$`}gq?fW 4  48d2mW0274ܹÖiJ)/p|c/ޜ1rLAAEFFQHfiFbc jj'\ɢBݵkacd޼arYn=!aDL9½ncLBTL4o'=2+W")~wq?IDDD!iD$YVkǕ ׳/'.ayٟM҈?~W=]Z 7V+WFSS#ǎf8}$""" I.]ߣ2e{{VPs^d`Ŏy--;vcǎжv7 IC@lbf*URWwr}Gwa"23u84ڼn*UWZ9UZJ}7u=WQHMifS@Ys\fsFI!"=I]X, jlQc{H """4IJe+"""" IRu%`RWCDĝCpKFY&]G^nʫʫOS2#>BLt ϜiOlɓ|駷q֭Gc 4EGG;:t^e}a8DDD) I'Ka@HHfs}Ia`` d8}4~̟?L̙|0-.p[DDDiH2 l7w԰3ܳi#>$''_8%f.]KKK#33Շ͖/ޚ#G@HH(/211k:BC}ڣKƪ7ߤƱXw:ǽURVVKDDdfAVkgN -j/Rff[lߟ\i%--5Ε+WDy0cv"#8w_~YDCch@eݶm;O8_DDD{nb҈"d"0D@l\ 18Kٙ3o~y訯}=^ FuEhjjgHHZǦf/^ n桯|_KGOLÐtzjkkijn&$8))SS̙c`Ml޴ɩ)0)[cs=iEEE|`0ŪUZ?~}^s^PPw]|}JGt IZIq1ׯ'%%???+buc7j(Vٙ3>u9s̶mI֬Yl߱8Z[[ywijjiz5hMMJKJX. ‚Bn2f`4Ρ ??R mW,??:::&TOADS$9^/cbPVv֞ڣiSړ~55751; 9}Ը(,(___{/1 L&=:7CXhmmW嫯zc^hhnsQPOFF&>c:@B|۶od2MWgg+*:!AGByVo@f#=})`5.CoIRy,[TW׌Z#ImWQ=zO?{Ɗ+WWjf˦͘#qQ&""42oooRS0lvZFf#$=OƬfQYymٳ,{)V\U+[pp0ͮ{"bZtf2<s搳?_|eپ}0-^/63egvu^OOXh111\8}$?@m]2OH ,4eeetwJ\|//^ !>M6Er /8s,ZXGBkΔ{iO=\e I$YVkǕVe:;;yEat1lz/ / 3s9]1{]߷P9x[l&""4^~s}dpvy.9s4gΜvva""" Iw qQHr+$"2 @Af>Cm6?\DUa6a4""nѓفŢO1j wICDDDDXlZD8qADD!Z@QXj^Tcp ,nPVV@ll,7o!0Ј`g?Qlذ1_Q4KFY&]G^nʫOꫩO 0~YV9v(ee.n޼)UϽ[2ߟJΟ@GG:vݿȈ a""r'SaI(ܵ~]^}ze$eee2|Ο??z###c9zEDDdb!`0`ݺ%%Ŕ3O?APp#$}{ ڵkװ~a^z%}_͋aƍɡSG$JAtT46G)??JZZZ$==rnv͙c3e< /IgѢEx{{hqא4i׮w磏h2zvP! 86Ϝ񺽭[2o<)"""niAtw/III;whHZsvLё"""f!"""nvԩR2330d[[oyK׷m6K32HHH?'FO{fLJJ"  qSk6/ :*_BJJuLt̰i| ±G'tD'v >rOIEENӎ3DDD=;qggg;%$MDDDFo"beQ!fsFI!"=I,`6FĨ1DD=$ bQH"11Q-"r7I\SgفCDĝCҝ^|֛\ pٹsAAA o8m1M_/ #/7GU^U^i)`0 ZoHvEpp0g+r>|AgϦ*++ioksYǣ~s B"""2)' /_f޼XxGhjn.G O___g϶'#yTTs111`\hԻ."""w^H*,(??? B!pgh#|mX}Ɠf8%k&&Ǵ9:Z#IDDd}; ##;QBCC?Ct2&v/Xz s&~_=W^\d}yYk2'H\\, \"""FnIg @ll, t}Kftiu\\isb2Q]S;l672e=I#ݢ_YQ1lH]?{[dz~Wb8}=zEDD}CP I"""r Ys:WhRc)GORWgKZD0?#b""~1($ l p15­tDnKeVPE0GaR{Q!"!N H>,~ee}͛h`0h6lبwTn #/7GU^U^i)`0 Z455sQ\ݼy &S U8WYE{ne??u a""""כq*++imm%**p3;w_sW_}G@#' ??ϏHj?uXH2 9e%%Ŕ3O?APp#$}{ ڵkװ~a^z%}_g IDAT-Z2 ef7{)"""l6#(JQ hh}||233{/TKK P^^N[[Mٮ4l@EE̛DDDCT]wÞ>!';;B ¢".txXB>0(qCC_l[z AJKח;1FO5i6%"""BII1{> 55;W\ 2"Z'Iڠ67 IN*bn-_߶mضmҌaGYNOOd|Q"r D6'vfŁ|ᇉb޼y\pᖭ/%%uLt د?~222s&""" IH_8~~ZOwϘg#)..XGḆqggg IC($ȍ2dfSEˢB0FCDM9z,u5X, jlQc{H """4DbbZDDDD!.֩EDYR{Q!"!IId8 #/7綗I}~U^U^'[~ʇx,L^@|'*?uzm@^^.EEEcam:-^Dpp4S^~{?6 |'[oRRZ4!""2MHZxmBY򨭫%22\_p6l܈SUV{֭'66NGҞДӧ]GaA%%s`d207CXhmmW嫯zc^hhƍG6m22 l۾Ʉ7]]`{&""2LiORNqi`QG4#ǟsU.,\#G:$1?… U8p`匁qAr000@ZZ4ʠ&AMpSLYORtt ab%'  !== 43W^dYPl0mNH s3颧{j'˫Խw*5]k^ޢMwW'=TCjRԄӃlf 6¶}!A&eMϛptY(я`-~u|淜h^g[X @ WHǾu6f͚Ż| 9sMMԴ4}D*@fruFFڝN::;ppǬY/ȑ^&`HG֐;vRT^S s%c/ mO{ذn='mg2&""tH0nIeFCݿ^/--N+WrJΝ=wbrMy($ dB@/W|o_v|o=ߧEK6L&:CDdIx?3]ydOI) aQHKQ p uBҷ5`b.ζ8W""39$) M_O?3 !tv`2Y]Lۨ(v1zޟu:#{>@ii):y򯾚T188墪55GFFb 22O << ŋ(+ iCw_?)nN/Z @ő|/&6F  AeegNDk"2/''ǵI1#I3S=:`٪SPX[ع%Zr⥀58v_@pw\KpnӃfcm!1m#I`.U%1|23͛8rV֢?{^mmܾs;`mlL,]\}-駟Ν!>@uG˿PTT$=RyBȈQIGg.5k9rի I>cNSUu֫`3am ϖ榠nRyBRdd$yyKcZe!i_N=KK˷eU\sgO]rX,^6?23qO{{`hh聴($b4z7ԃwxdg`HIIʕ'+(,dXsgG#`MYARҰYmk444ׇjeaB|sw?c+W(*Z>nH($mR[}C=~o+/¢B=I^m 75os 3I:v HK.[$S\ "؇w}guoF0 e']{?[[]S}gFIDdfG'F3Rt?"""6ɸ'CM^\D|.]nd23DDfё[^`&>'3DDfzHADDDD!.EE+#"S' "" I֫z8ۮt\Qg䐤4u^u>444Fفdfu3!o\Y!;D?!OpIʿjRac .SNXɊ+ >>0n7/^,K.eYQ8"""zg'hhhPy MbIMM]^CXaRhii4v6mL{3{lvkg2ȹsx<LOSnjkk9<=$ϝ֭[to$`;%;%,@׍̎&&:tFu1FyW1 L&_>nMqq1 ==|w/=,˄<|YxW0 2 ,$%%g96"""2=F*? zyPZ<6W];Su/ \kIPRRۿ[8u$W[_f5]n7DoXR94Hiǜ@NN6iDGPRRWWVV淜:;svXnwo2XlOT_:Ē%Kظq#slsBj#"""!$MHȈQgg'].n1ro^wO?3MQZZҥKp<G۸OqLJ|.^bϞ=ddn:֮]KKKKK}#}Ry!iDFFh"V=O卆={L=7\]~xMMPPOMm%79#LQQQ @? [6P#wHV7gjUVׯoBRh}ou^P1 Rqcdxg0$= >7bVDDD>7s?"""d(^ ϹgmLfu 5:l١v;I) ayu'ta@ IY$t9#"nyzq:3Dṍz!IijW?:62L&3 yI;rcOp=ݎ,^#/_L*h Ξx쨨(~P$9X,墱+c0 SRShDC^naaӹX2F6ChhGd^xlo8MuM5F7W f/()yFwM[o]gZܹs))yfݺ !5IOǘFD,GD˴$L}YgOAa!7oa玗hʥ,ر~ s}FEEoġCB>.AoO6۶FDDD޴$͛,V}D"666oWwg~YYFzqq퀵1tpt[nc֬Y'xސ(_~ؾ'Bj#"SSFFڝN::;ppǬY/ȑ^&`HG֐;vRT^S s%c/ mO{j;m}L$y!)22%̱yRpٲѐ{/'ܞ륥bbֲr*VZɹ.Y,\G >KNNT? =6"""򘄤\F#^zs@Ddج6RRRre `DXSVvԴ4lV/ aZY7~lҜF""" Iȥz>`ߺW^~9v;EA{iJyAnk<o{ <@ H"}IOƍ{TՋ{/gG'&r^ yc?""0CM^\D/^na2""3H-O/NgzD}ړR""3=$ """tԩoRUm~Ϩ 'lqE!"2C҃q?_OLCCcmq:;0̬.leEUPv1zޟU?} R8u$_}51bppEU)jjj'ddfe@xxn/QV2_aEDD16;&55mtyqNaaӴcٴi3qٳK)^CDsS#ΝPXXWXܹzIDDd&I2|Nrrs 3uc&--Q]}FQF^}U &ׯ[S\\LBOoKww:~xN8“O>mOᙒMDFFwK/SV^-'$$XxIJJ>;@{smDDD$MU8@M]-M- 6r())ym\i XỼw_@p\322ի?> qLxz=8q yf Aߚ5rx<$&&~úڈ}zS]0}HTHJJ"qxԦsB99٤MHKII_]YYrZZ_hΝkcp!0ɺ:G{{ظq#z_U!,YƍcRy!XݠtW*##F\wrh4ˉyi-[0$}ill"--R.]ʅ q8ƭxz#>>>cvazW\Ennӟ`2O!22r]TTTjoz@xxxHmDDDŋZ<73^/|syt9zs655SPP@Aa>5~x&a'dv[#&6Grq.]³>;y mDDDI0Fz02^ IXHNNڵjcy$$$k***H?D]~JKK $X,׿cxn"66L}DDDƗ$=~uvjTH'ip66G+֭[}}V,_AFVv9};/7b}B5ɸ0ӱy0 k7ys9w v ɬFGmWq:;#"n3I1@wDDDDf.E{R'tѦfGpӋqE!"2C_>ȃtv`2Y]Lۨ(WUzՇX!;?Sݎ,$}zIDAT^#/_L*H Ξx쨨(~P$9X,墱+`mQrc6v'G+R]"""8֐KVf z\$''3|^x\v̋g?lVߏV0$%$vs梁 . e֦Q8_@XX׉E3OS]Sh7lJJf}?7GY ׿oy˿``֬if3Qܢ7sK&?9)Rp\|p\taӹϞ?K]]0,)(,d-W[tR;v/ tvv_[غu;???Oő\۷)>n>LW tR|%\7fu۶ڈyRY}0U%1|23͛8rV֢?{^mmܾs;`mlL,]7\!lf5z8EDD{rrr1x^;23Ymp2,ܹ3 iiج6^~5j0u!o;`˗/qu232+6<)Dvv]""" I\jo{WcSXXTH'ipp֫[͓CvN6a| 6&""4w}guoF0 e']{'lS__G}}g ܪk,6""3mE!id܈7_/"_2QWkJ}2A޾(.yIIENDB`hydrogen-0.9.6-beta3/data/new_tutorial/img_tutorial/warn.png000066400000000000000000000003331211146647700241520ustar00rootroot00000000000000PNG  IHDR('+ PLTE7^IDATx^ѱ a;%2QpC{QG`A .:>hf93NO`gflT =3L!F.Z0 RZYkTnxo-jEIENDB`hydrogen-0.9.6-beta3/data/new_tutorial/tutorial_en.html000066400000000000000000000356551211146647700232300ustar00rootroot00000000000000 Hydrogen Manual

    Hydrogen Tutorial

    Antonio Piraino

    You've just downloaded the latest version of Hydrogen and have it installed successfully. Hydrogen may come in handy for these tasks:
    • It can be used as an advanced "click" machine helping you practicing (in speed, precision and rudiments) drums, maybe with a custom pattern you wrote.
    • You want to learn how to properly play a song: you can "write it down" inside Hydrogen (or just a few difficult parts of it). Doing the effort of finding, splitting and reproducing the different parts of the songs will improve your understanding of it. Also, using Hydrogen with your songs will ensure that in future a quick glance at the songfile you have created will bring the song up immediately to mind.
    • You can play H2 with other software (Ardour, ...)
    This simple tutorial will guide you creating a complete song. We will work on "Georgy Porgy" of Toto which has a quite straight structure (therefore appropriate for a guide such as this) but this doesn't mean the song is actually easy to write down since the drummer (Jeff Porcaro) enriches the groove with his personal touch and fantasy. Remember that Hydrogen will not play better than the drummer working on the song since most of the task must be accomplished by the programmer's sensibility and experience.

    Table of contents


    Let's start
    Before starting make sure you have a few things:
    • The song to study on: either an audio-cd or (better) an .ogg or .mp3 for optimal flexibility.
    • Optionally a rough layout of the song on paper: it may be useful to count bars and different parts of the song that eventually wii get into Hydrogen.
    The song we will work on has the following structure:
    • Intro: 4 bars
    • Verse: 8 bars
    • Bridge: 8 bars
    • Verse: 8 bars
    • Bridge: 8 bars
    • Chorus: 8 bars
    • Riff: 4 bars
    • Verse (with guitar): 8 bars
    • Verse (with voice): 8 bars
    • Bridge: 8 bars
    • Chorus: 8 bars
    • Chorus: 8 bars
    • Chorus: 8 bars
    • Final Riff: 4 bars
    Looking at this scheme we can see that some pattern repeats, so we'll use this symbols in Hydrogen's Song Editor:
    • Verse -> A
    • Bridge -> B
    • Chorus -> C
    And to save up words on explainations we'll use two common TLA (Three Letters Acronym ^_^):
    • LMB: left mouse button
    • RMB: right mouse button
    Well, now unplug your phone and launch Hydrogen from the shell: let's get to work!

    Intro

    The base pattern (Fig. 1 and 2) is 4 bars long (divided in 2 different bars, each repeated 2 times, so it's [2a*2]+[2b*2]) and lasts for the whole song, from the beginning to the end, riff included; most of the time (intro and riff excluded) this base pattern is repeated 2 times to reach the commonly used 8 bars for each part of the song (A,B,C).

    Before starting let's set the speed to 98bpm (HINT HINT you can find out by yourself the speed of the song while playing it with your favourite media player and following the rhythm by clicking repeatedly the backslash key in Hydrogen) and from the menu "Grid Resolution" let's set '16'.

    To create a new pattern select the instrument "Closed HH", click on RMB and choose "Fill Notes": the first two bars will be filled up. Then insert manually the beats on Snare Jazz and Kick as indicated in the 2 pictures below and there we have the base pattern for our song. Note how the beats on the hi-hat have different velocity: beats falling on the beginning of the bar are set around at 75% of the full velocity bar, the others around at half of it, in order to give groove the song.
    Fig. x - Base pattern, first bar

    Fig. x - Base pattern, second bar

    Before we start writing down verses there are 4 intro bars, all equals to each other, except for the last one which at the end has an open hi-hat. We should do then:
    • Rename the first pattern in the Song Editor with RMB click on the name "Empty Pattern" and change it to "intro_a", for example.
    • Add two new patterns near the first one (second and third bars)
    • Create in Pattern Editor the base pattern (Fig. 1)
    For the fourth bar we'll instead open the hi-hat (Fig. 3):
    • RMB in Song Editor on the newly created pattern, choose "copy", then choose a name (ex. "intro_b") and automagically you will have a new one right under.
    • Select the pattern you've just created (IMPORTANT!)
    • Delete the last 2 beats of "Closed HH" and move them on "Open HH".
    • Select '32' from "Grid Resolution" and add another 2 beats right near the previous ones.
    • Adjust the velocity of these 4 beats so that the first is around 75% while the other three are at 25% to simulate a longer opening.
    Fig. x - Intro detail, fourth bar.

    First verse

    Since we have written the base pattern, now we should already know the basis. To create the first verse we just have to copy from the Song Editor the pattern "intro_a" and rename, say, to "A-B-C_1", because it is the first bar of the verse that eventually will also fit for the bridge (B) and the chorus (C).

    Pay attention, why can't we just add two new more patterns next to this? Because in the first bar there is a "Crash" beat which ends the previous intro, therefore the two bars are not completely equal; you have to copy the pattern "A-B-C_1" and rename it to "A-B-C_2", cutting the "Crash" beat cited before.

    Same thing for the following 2 bars: just copy into the Song Editor the pattern in Fig. 2, rename it according to the previous ones and add two patterns (because they're identical), you should reach number '8' as shown in Fig. 4.

    The 4 remaining bars of the verse are more or less the same of what we've just written, so why redo everything from scratch? Bars number 5,6,7 are virtually identical to the previous ones so we just have to add two pattern "A-B-C_2" and one "A-B-C_3+4" taking care of renaming the patterns logically (so to understand how the song moves around the Song Editor), while in the eighth bar there is a fill which closes the verse. We have to copy+paste in a new line a pattern already written (ex. "A-B-C_3+4"), rename it to "A-B-C_8" and modify it as in Fig. 4.
    Note how in this case too the three "Snare Jazz" beats on fourth bar have velocity properly tuned to a 10%, 20% and 75%; you can't see it in the picture but also the two final beats of "Tom Mid" are both 'touched' to 50%, after all it's only just a small fill, better not beat hard on the drums :)
    Fig. x - Eighth bar of the first verse.

    The result in the Song Editor should be something like Fig. X.
    Fig. x - Intro and first verse in the Song Editor.

    WARNING! if you reached this point without saving your work, NOW is the good time to do that. A simple [CTRL+S] followed by the name of the songfile and you'll be ok. If you want to add some more infos, LMB on 'S' button of the Song Editor and change the fields as you like: these infos will be shown upon opening of the file.

    Bridge and following

    Now that we're done with the first verse you should have an idea of how the whole thing works: the first bridge is made of the same 8 bars (4+4) with a slight change at the end of the fourth, which forces us to create a 'custom' fourth bar while the others are easily added adding patterns already defined.
    Let's take the latest pattern created as sample ("A-B-C_8"), copy and rename it to "Bridge1_4" (i.e. fourth bar of first bridge) and modify it as in Fig. 6. We have quickly completed the bridge!
    The Song Editor now should appear as follows in Fig. 7. Looking closely you may wonder why the fifth bar of the bridge (17th bar of the whole song) isn't assigned to the pattern "A-B-C_1"; the answer is that the pattern has also a "Crash" which is not present in "A-B-C_2+5+6".
    Fig. x - Fourth bar of the first bridge.

    Fig. x - The Song Editor with the first bridge.

    The riff

    Around at half song there are two riffs: each one is 2 bars long but actually the pattern is the same, just the other instruments play something that we will see in the last riff of this song (where drums too play the pattern of the riff).

    In this riff the drums play the same pattern we already know for one bar (see Fig. 1) while in the second bar only beats two times (Fig. 8), then the pattern again and then again two beats with a small final fill (Fig. 9); again the open hi-hat is done with beats of different velocity: 75% and 20%.
    Fig. x - Second bar of the riff.

    Fig. x - Fourth bar of the riff.

    The second half of the song

    After the riff we have half job done. We just have to write down two verses, one bridge, a chorus repeated 3 times and the same riff at the end.

    The second part of the song is slightly different from the previous one because we have a few hi-hat opening during the verses and every 4 bars there's a small fill almost everytime: it's easier to start from scratch a new set of pattern (i.e. "A-B-C-*") in the Song Editor copying them with a suffix like '_hh' to show the presence of the "Open HH".
    As noted in the introduction of this guide, Jeff Porcaro puts much of his skills playing the song and this makes the difference between a song played from a raw and "cold" transcription on paper (or on Hydrogen): therefore the following parts of the song will try to be faithful to the original piece, but another 'ear' could give another written layout of the same part: after all this doesn't matter so much since we are showing how Hydrogen work, not to play like Porcaro :)

    Fig. 10 shows the section in the Song Editor of the two verses and the bridge following the first riff; as you can see the first bars (48-50 according to the Song Editor's enumeration) are already written before while the others (51-71) are new. Moreover there a few pattern 'ad hoc' identified by "A-B-C-3a_hh" (Fig. 11 to see an example) and "A-B-C-4a_hh" since both have a few changes not present in any pattern written up to now.
    Fig. x - Third and fourth bars in the Song Editor.

    Fig. x - Seventh bar of the third bridge.

    After the third bridge we repeat the chorus: the first time the "Stick" is used instead of the "Snare Jazz" and we don't play the "Kick" (even if it may sound the opposite since the bass guitar does play here, so we have put the same the kick beats softly at 50% velocity), while the second and third time the chorus goes on there are a few bars different, as shown from patterns "C3_*". In Fig. 12 the pattern "C3_6+7 & C4_3" (slightly different ...) which criptycally identify the sixth and seventh bar of the third chorus AND the third bar of the fourth chorus: if you think this is confusing, you may find out your own naming method :-)
    Fig. x - Pattern "C3_6+7 &C4_3".

    The final riff

    The song ends repeating a slightly different riff we have met before: the first 2 bars are the same (i.e. pattern + 2 beats), while the in third bar the drum plays actually with the other instruments (Fig. 13) to finally end as always.
    Fig. x - The final riff.

    And this is the end. The goal of this little tutorial is giving a quick overview of the most common functions of Hydrogen: this piece of software can also run for other purposes, like an advanced 'click' played with the drum, or to loop playing some part of a song difficult to catch; however, as in other things, analyzing the song itself helps the comprehension and here too, Hydrogen can be helpful reducing the time needed to write down a pattern and tune it.

    For comments, suggestions, corrections, you can use the Hydrogen mailing lists (http://www.hydrogen-music.org). hydrogen-0.9.6-beta3/data/xsd/000077500000000000000000000000001211146647700160615ustar00rootroot00000000000000hydrogen-0.9.6-beta3/data/xsd/drumkit.xsd000066400000000000000000000107001211146647700202560ustar00rootroot00000000000000 hydrogen-0.9.6-beta3/data/xsd/drumkit_pattern.xsd000066400000000000000000000057161211146647700220260ustar00rootroot00000000000000 hydrogen-0.9.6-beta3/linux/000077500000000000000000000000001211146647700155115ustar00rootroot00000000000000hydrogen-0.9.6-beta3/linux/debian/000077500000000000000000000000001211146647700167335ustar00rootroot00000000000000hydrogen-0.9.6-beta3/linux/debian/changelog000066400000000000000000000073571211146647700206210ustar00rootroot00000000000000hydrogen (0.9.6svn2332) unstable; urgency=low * Release 0.9.6 svn2332 * new build system (cmake) * add undo for song/pattern editor * jack-session support * some bug fixes * Version 0.9.5 * load playlists at startup * midi-learn works now with shift-click on some gui elements * multi-track export * LADI support * maximum number of bars is now configurable * added czech translation * fixed serveral export song failures * added ogg, flac, aiff export support * added some new commandline parameter for no_gui version * added rubberband-cli support * several improvements on sample editor * added NO_GUI_SUPPORT to build a version of hydrogen without a gui * added support for app bundles on OSX * non destructive sample editor * piano roll editor * instrument midi out * destructive midi recording * support for midi "note off" messages * virtual patterns * time line to change song tempo and add tags * director * and at least several small changes * Xml handling is now done by QtXml instead of TinyXML * improved support for non-ascii filenames / strings * remove direct dependencies to libflac * added -k/--kit flag to hydrogen binary to open named drumkit on startup * Version 0.9.4 * added Catalonian translation * cleaned up the PlaylistBrowser and AudioFileBrowser UI's * fixed various issues with the AudioFileBrowser * fixed reading/saving instrument gain settings * Version 0.9.4 rc2 * fixed "fifth beat bug" * fixed jack zombifications on startup / drumkit loading * fixed segmentation fault after starting with alsa and a blocked audio device * fixed several smaller issues * added qmake files for building on windows / osx * improved scons for building on osx * Version 0.9.4 rc1 * fixed various buffer overflows * fixed segfault with jackdmp * fixed saving of layer filenames * fixed resizing of note durations * fixed several smaller gui annoyments * changed sort order in soundlibrary browser * added default pattern category * new manual / changed translation method for the new manual * Version 0.9.4 beta3 * over 39 bug fixes since beta2 * if file DefaultSong.h2song not accessible we create a simple default song * patternpropertiesdialog improvements * added portaudio v19 patch * added "patches" dir * added optflags option to Scons * change post masterfader fx_return to pre masterfader fx_return * Replace jack_client_new() with jack_client_open(). * added croation translation * added support for coreaudio / several osx improvements * keyboard now works with AZERTY and QWERTZ layouts * add desktop files * added new graphic: record icon for midi dialog * merge the audio-file-browser branch * add french translation files from Yan Morin * current loaded drumkit have different background color in soundlibrary * added label which displays the loaded soundlibrary * added "panic" midi event / shortcut (F12) * added russian translation * Version 0.9.4 beta2 * QT4 port * Autosave * Jack port follows instrument names * Mute groups for instruments * New drumkit manager (with downloadable drumkits) * Save and load patterns * Jack transport master * Beatcounter * Playlist editor * MMC * Lead / lag (pattern editor) * config option 'jack transport buffer offset' for ardour bug * fix broken lead / lag * several fixes into soundlibrary import * download class now supports http redirect correctly * config option 'adjust beatcounter offset' to get exact results with different hardware * new statusbar message to display longer messages than 30 chars setScrollStatusBarMessage( QString message, int ms ) -- Alessandro Cominu Mon, 15 Sep 2008 12:00:00 +0200 hydrogen-0.9.6-beta3/linux/debian/compat000066400000000000000000000000021211146647700201310ustar00rootroot000000000000004 hydrogen-0.9.6-beta3/linux/debian/control000066400000000000000000000013151211146647700203360ustar00rootroot00000000000000Source: hydrogen Section: Multimedia Priority: optional Maintainer: Alessandro Cominu Build-Depends: debhelper (>= 4.0.0), libsndfile1-dev, libjack-dev, libasound-dev, libflac++-dev, libtar-dev, libqt4-dev, liblrdf-dev, cmake, librubberband-dev Standards-Version: 3.6.2 Package: hydrogen Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Drum machine/step sequencer Hydrogen is an advanced drum machine. It's main goal is to bring professional yet simple and intuitive pattern-based drum programming. See http://www.hydrogen-music.org for details. . Warning: this package contains the development version (potentially unstable) released for testing purpose only. hydrogen-0.9.6-beta3/linux/debian/rules000077500000000000000000000043171211146647700200200ustar00rootroot00000000000000#!/usr/bin/make -f # Debian 'rules' file for the Hydrogen Drum Machine. # # To make the build more verbose, uncomment the following line: #export DH_VERBOSE=1 # # To enable scons PARALLEL BUILDS (e.g. -j 4), run like this: # $ H2_PARALLEL=4 dpkg-buildpackage -rfakeroot # ...or uncomment the following line: H2_PARALLEL=4 # ...or invoke dpkg-buildpackage like this: # $ dpkg-buildpackage -j4 -rfakeroot # However, the -j4 here will run more than gcc in parallel. # Check for parallel builds. # NUMJOBS script goodie courtesy of http://lists.debian.org/debian-policy/2007/08/msg00005.html NUMJOBS=$(patsubst parallel=%,%,$(filter parallel=%,$(subst $(,), ,$(DEB_BUILD_OPTIONS)))) ifneq ("$(H2_PARALLEL)","") H2_PARALLEL_BUILDS=-j $(H2_PARALLEL) else ifneq ("$(NUMJOBS)","") H2_PARALLEL_BUILDS=-j $(NUMJOBS) endif endif configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. mkdir ../builddebian cd ../builddebian; cmake .. -DCMAKE_INSTALL_PREFIX:PATH=$(CURDIR)/debian/hydrogen/usr touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir # Add here commands to compile the package. cd ../builddebian; $(MAKE) $(H2_PARALLEL_BUILDS) touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp configure-stamp -find . -name '*.py[co]' | xargs rm -f # Add here commands to clean up after the build process. rm -rf ../builddebian; dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs mkdir -p $(CURDIR)/debian/hydrogen/usr/bin cd ../builddebian; $(MAKE) install #remove not used .git dirs find $(CURDIR)/debian/hydrogen/ -name '.git' | xargs rm -rf docs: docs_install: # Build architecture-independent files here. binary-indep: build install docs docs_install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installchangelogs dh_installdocs dh_installman dh_link dh_strip dh_compress dh_compress -X.py dh_fixperms #dh_python dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure hydrogen-0.9.6-beta3/linux/hydrogen.desktop000066400000000000000000000013711211146647700207250ustar00rootroot00000000000000[Desktop Entry] Name=Hydrogen Drum Machine Name[de]=Hydrogen Drumsequencer Name[ru]=Драм-машина Hydrogen Name[hu]=Hydrogen Dobgép Name[tr]=Hydrogen Davul Makinası Comment=Create drum sequences Comment[de]=Schlagzeugsequenzen erstellen Comment[ru]=Создание партий ударных инструментов Comment[hu]=Dobszekvenciákat lehet vele készíteni Comment[tr]=Davul partisyonu yaz GenericName=Drum Machine GenericName[de]=Drumsequencer GenericName[ru]=Драм-машина GenericName[tr]=Davul Makinası Encoding=UTF-8 Version=1.0 Type=Application Categories=Application;AudioVideo;Sound;Audio;Qt; MimeType=text/xml FilePattern=hydrogen Exec=hydrogen %F TryExec=hydrogen Terminal=false StartupNotify=true Icon=h2-icon hydrogen-0.9.6-beta3/macos/000077500000000000000000000000001211146647700154545ustar00rootroot00000000000000hydrogen-0.9.6-beta3/macos/Hydrogen.icns000066400000000000000000001060151211146647700201140ustar00rootroot00000000000000icns it32KdTdqTqÀZTZqT\zqYTqT]߂݀܂ڃ؁ׂՀԃӂϜYTTd߂݀܂ڃ؁ׂՀԃӃп]TdTŃ߂݀܂ڃ؁ׂՀԃӃрϤTdT|߂݀܂ڃ؁ׂՀԃӃрЀkT߂݀܂ڃ؁ׂՀԃӃрЀΆT߂݀܂ڃ؁ׂՀԃӃрЀΜT߂݀܂ڃ؁׃րԃӃрЀπT߂݀܂ڃ؁׃րԃӃрЀρT߂݀܂ڃ؁׃րԃӃрЀςT߂݀܂ڃ؁׃րԃӃрЀσT߂݀܂ڃ؁׃րԃӃрЀσ͟T߂݀܂ڃ؁׃րԃӃрЀσ̟T߂݀܂ڃ؁׃րԃӃрЀσ̟T믙ƃ̀T}1?߃1]́TT1Â1͂TT1Á1͂˟TT1ŀ࠺1͂˟TT1ߠ12͂̀TU1ߡ12͂́TU112́ʞTV112́ʝTV1ޣ1_P13́ɝTV1ȃޤ19Ȅ14́ɝTV1Ȃ߀1J14́ˀɝTW1Ɂ߁1J14ˀʀTW1ʀ߂1J14ˀʁTW1߂ݦ1J15ˀʂTW1߂ܧ1J15ˀʂȜTW1߂ܨ1J15ʂǜTX1߂݀1J16ʂǜTX1΁߂݀۩1J16ʂȀTX1̀߂۪݀1J17ȁTX1߂݀܀1D17ɂTY1߂݀܁117ɃTY1Ђ݀܂1FJ18ɃƛTY1Ё݀܃118ɃƛTY1р݀܃٬118ɃǀTZ1݀܃٭119ǁTZ1݀܃ۀ119ǁśT[1EFGHHIJD119ǁŚT[119ǁĚT[15jq1:ǁĚT[1ݧ1;ǁŀT\1I1;ŁT\1J1;łT\1J1;ŃT\1J1<ŃÙT]1J1<Ń™T]1J1<Ń™T]1J1=ÀT]1J1=ÁT]1J1=ÂT^1J1>ÂT^1JdR1>ÂT^1J1>€T^1J1>T_1J1?T_1J1?T`1J1?T_1J1@T`1J1@T`1MONE1J~p71@T߀a1̂ՀԂ1J1AT߁`1ˁՀԃ1J1AT߁a1ʀՀԃў1J1AT߁a1Հԃў1J1AT߁a1ՀԃӀ1J1BT߂a1ՀԃӁ1J1BT߂݀b1ǀԃӂ1J1BT݀b1ԃӃ1J1CT݀c1ԃӃО1J1CT݀܀c1ăӃО1J1CT݀܁c1ÂӃр1C1DT݀܂c1ÁӃрϝ11DT݀܂c1€Ӄрϝ1?D:1DT܂c1ӃрЀ1DT܂d1ӃрЀΜ1ET܂ڀd1рЀΜ1ETځd1рЀπ1ETڂe1рЀρ1FTڃj1рЀς1ITڃج61cрЀσF14Tڃ‚рЀσʴTڃ؁ׂՀԃӃрЀσ΃́ʃȂǁŃ‚T؁ׂՀԃӃрЀσ͂́ʃȂǁŃ‚T؁׃րԃӃрЀσ͂́ʃȂǁŃ‚T؁׃րԃӃрЀσ͂́ʃȂǁŃ‚T؁׃րԃӃрЀσ͂́ʃȂǁŃÁ‚T؁׃րԃӃрЀσ͂́ʃȂǁŃÁ‚T؁׃րԃӃрЀσ͂́ʃȂǁŃÁ‚T؁׃րԃӃрЀσ͂́ʃȂǁŃÁ‚T؁׃րԃӃрЀσ͂́ʃȂǁŃÁ‚T׃ųЀɢ˺rqponnxƸponmllsT׃УУuqKJwǀzJIIj€~oonT׃̄рutt̀cKKJeǁlJIYvonT׃̃ϙuttúcKJeǁmJIY‚unTր̂ϚutúdJeǁmJIYunTր́ЀutveJemJIYunTր̀ΙutufJemJIZvnmTրԀ͢ΚutvgJeŀnJJI[xnmmTրԁ΢πutvʀhJeŁoJI[xnmTրԂΆuutwʁiJełoJI[xnmTԃϣut~ʁxJoŃ}IfnmTԃѿ́ȓʂn`qn_l|{TԃӃрЀσ͂́ˀʂȃǁńÁ‚TӃрЀσ͂́ˀʂȃǁńÁ‚TӃрЀσ͂́ˀʂȃǁńÁ‚TӃрЀσ͂́ˀʂȃǁńÁ‚TӃрЀσ͂́ˀʂȃǁńÁ‚TӃрЀσ͂́ˀʂȃǁńÁ‚TӃрЀσ͂́ˀʂȃǁńTрЀσ͂́ˀʃɃǁсTрЁς̓̀ˀʃɃǁсTрЁς̓̀ˀʃɃǁсTрЁς̓̀ˀʃɃǁсTрЁς̓̀ˀʃɃǁсoTdTT]ǀЁς̓̀ˀʃɃǁсXTTdT~Ѐς̓̀ˀʃɃǁсmTTɀς̓̀ˀʃɃǁсsTqTa\TqZTZÀqTqÃdTd ubu ;b;;ibi;bi|fb bjރ݀܀ۃق؂ւӤfb bqރ݀܀ۃق؂փjbubʃރ݀܀ۃق؂փՀӫbubރ݀܀ۃق؂փՀԀwbރ݀܀ۃق؂փՀԀҐbރ݀܀ۃق؂փՀԀҤbƀރ݀܀ۃق؂փՀԀӀbރ݀܀ۃق؂փՀԀӁbރ݀܀ۃق؂փՀԀӂbރ݀܀ۃق؂փՀԀӃbłރ݀܀ۃق؂փՀԀӃѧbŁރ݀܀ۃق؂փՀԀӃЧbŀރ݀܀ۃق؂փՀԀӃЧb 춡˃рbBOùBkсbŀbBBтbbB⧺BтϦbbBɃ⨺BтϦbĀbBɂBCтЀbcBʁBCтЁbcBʀBCЂbÀcBBCЂΥbcB᪆Bl^BDЂͥbdB̀ૅBĪBDЂͥbƒdBଅBYBDЂͥb‚eBBYBE΀bdBπBYBE΁b€dBBYBE΂beB߮BYBF΂̥beBЃ߯BYBF΂̥bƒfBЂBYBF΂̀bfBсBYBF΂́bfBҀBYBǴˤbfBޱBSBG̀ˤbgBݱBBG̀̀bgBݳBUYBH̀́bgBԂހBBH̀̂bgBԁށBBÌ̃bhBԀނBBĨʣbhBރBBĨʣbhBTUVWXXYSBBJ̃ˀbhBBJˁbhBEv}BJˁɢbhBߧBKˁɢbiBXBKˁȢbiBYBKˁȢbjBYBKˁɀbjBYBLɁbjBYBLɂbjBYBLɃbkBYBMɃǡbkBYBMɃǡbkBYBMɃơbkBYBNơbkBYqaBNǀblBYBNǁblBYBNǁŠblBYBOǁŠblBYBOǁƀbmBYBOǁƁbmBYBPǁƂbmBYBPƃbmB\^]TBY|GBPƃğbmBЀق؂BYBQƃğbmBق؂֦BYBQƃŀbnBق؂զBYBQŀßbnBق؂զBYBQŀßbnB͂؂րBYBQŀĀbnB́؂ցBYBRŀāboBˀ؂ւBYBRŀĂboB؂փBYBRŀăboB؂փԦBYBRăžboBɂփԦBYBSăbpBȁփՀBSBSăbpBȀփՀӥBBS€bހpBփՀӥBOSJBTbށpBփՀԀBT‚bނqBփՀԀҤBT‚bރqBŃՀԀҤBU‚bރqBÂՀԀӀBU‚bރqBÁՀԀӁBU‚bރ݀vBƀՀԀӂBXb݀۳FBpՀԀӃVBEb݀܀҃ƂłǀՀԀӃκb݀܀ۃق؂փՀԀӃтЂ΃̀̃ˁɃǁƃŀă‚b݀܀ۃق؂փՀԀӃтЂ΃̀̃ˁɃǁƃŀă‚b݀܀ۃق؂փՀԀӃтЂ΃̀̃ˁɃǁƃŀă‚b݀܀ۃق؂փՀԀӃтЂ΃̀̃ˁɃǁƃŀăb܀ۃق؂փՀԀӃтЂ΃̀̃ˁɃǁƃŀăb܀ۃق؂փՀԀӃтЂ΃̀̃ˁɃǁƃŀăb܀ۃق؂փՀԀӃтЂ΃̀̃ˁɃǁƃŀăbۃق؂փՀԀӃтЂ΃̀̃ˁɃǁƃŀăbۃق؂փՀԀӃтЂ΃̀̃ˁɃǁƃŁĂ‚bۃ˹Ԁͪ~}|{zŷ|{zyxw~ǀ ¶bԫԫ}ỸYXvǁ{z¿bـуՀЀpYrxYYXfǁŁ{zzbفтӡЁqYqyYXeŁ{zbقсӡЂqYqˀzXfƀ{z€bقрԀqYqˁzXfƁ{zbقѪҢsYq˂yXgƂ{zbق؀ѪҢsYq˂yXh{zb؁ҩӀ΀tYqzXh{{zyb؂у΁vYq{XhĄ{zyyb؂ӫ΁Y{ɀXsČzyb؂ŲЁ͜΂{nm|Ɂzmlxŀb؂փՀԀӃтЂ΂̀̃˂ɄǁƄŀă‚bփՀԀӃтЂ΂̀̃˂ɄǁƄŀă‚bփՀԀӃтЂ΂̀̃˂Ƀǁƃŀă‚bփՀԀӃсЂ΂́̂˂Ƀǁƃŀă‚b׃ՀԀӃсЂ΂́̂˂Ƀǁƃŀă‚b׃ՀԀӃсЂ΂́̂˂Ƀǁƃŀă‚b׃ՀԀӃсЂ΂́̂˂Ƀǁƃŀă‚bՀԀӃсЂ΃̀̂˂Ƀǁƃŀă‚bՀԁӂтЁ΃̀̂˂Ƀǁƃŀă‚bՀԁӂтЁ΃̀̂˂Ƀǁƃŀă‚bՀԁӂтЁ΃̀̂˂Ƀǁƃŀă‚bՀԁӂтЁ΃̀̂˂Ƀǁƃŀă‚{bubbk̀ԁӂтЂ΃̀̃ˁɃǁƃŀă‚fbbubԀӂтЂ΃̀̃ˁɃǁƃŀă‚yb b΀ӂтЂ΃̀̃ˁɃǁƃŀă‚b bnib;ibi;;b; ubu એࣃ߾‎Ք઀ـ€փւցր߀߁߂߃Յ˼ ؂҄ـ߃ՄwԹw߃ݿՃww߃ހԂwwހܿԁwwހܿԀwwހ݀wلwހ݁wكwxހ݂ԃwڂ¹wxހ݃Ԃwځ†w˥Njwx݃۾ԁwۀÅw|ڄwy݃۾ԀwÅwwy݄۾wąwwy܀w܃ąwwy܁Ԇw܂ąwwy܂҅w݁Ņwwz܂ھ҄w݀Ņwwz܂ھ҃wƅwwz܂ۀ҂wƅwwz܂ہҁwƅwwzۂҀw߅Džww{ۃwބdžwѧw{ۄw߃ȇww{ۄٽҁwȥww{ۄٽҀwȥww|ڀwɥww|ځwʥww|ڂwww|ڃww|ڃؼц퓬wyw}ڃؼх퓬ww}ڃـфww}ـ׼у쓫ww}ـ׼Ђ쓫ww}ـ؀Ёww~ـ؁Ѐww~ـ؂ww~ـ؃ww؃ֻЀ딫ww~؃ֻ딫ww؃׀wwׁЃw™wׂςwwׂպρwwׂպπwwׂր镫wwׂց镫wwւwwփ΃wwք΂ww̙{wքԺ΁w݀῅wɄwքԺ΀wwwՀwwwՁwۄwwՂΆ藓wڃwwՃͅ藓wڂwwՄ̈́wځwwՄӹ̓wـwwՄӹ̂w࿅wwҹ́痓w࿅wwҹ̀瘓wwwӀw߾wʦwӁw׆߾w}wӂ̂易wՅwӃ́易wՄwӄ̀wԃwӅwԂwӆwԁ޽wѸ́wրwѸˀzw߀ۅwyҀނօԂ׀߂܀̓̃˃ʃɀȉǃƄʄҀз߃ހ݃܃ۃڃـ؃׃փՄӆҀз˃߃ހ݃܃ۃڃـ؃׃փՄӆҀр˂߃ހ݃܃ۃڃـ؃׃փՄӆҀсˁ߃ހ݃܃ۃڃـ؃׃փՄӆҀтˀ߃ހ݃܃ۃڃـ؃׃փՄӆҀу߃ހ݃܃ۃڃـ؃׃փՄӆҀф߃ހ݃܃ۃڃـ؃׃փՄӆҀхʀ߃ހ݃܃ۃڃـ؃׃փՄӆҀц߃ހ݃܃ۃڃـ؃׃փՄӆҀч̀ހЪ͂ЫׂʹϷʃÀ„‡ހܢڀѸƄϷɂހ…݀ځգӀ΂ÃЀɁ†Ҁ߻݁ڂդӁρÂЀζɀ‡߻݂ڃրπÁЀζ߇؞ց϶ÀЀπކсۚ؟ւ϶ЀρɅ݅сۚـЈЀςɄ݄с܀ـנψÀσɃ݃р޽܁ـןԦΈσͶɂÁă܁ـ؀ԬзσͶɁƀŀ߀ڸ܂̀͟؁ΠĀՀɬҁƻ΀ɀ߃ހ݄܂ۄڂـ؄ׂքՃԀӅҁцЀσ΁߃ހ݄܂ۄڂـ؄ׂքՃԀӆҀцЀσ΂߃ހ݄܂ۄڂف؃ׂքՃԀӆҀцЀσ΃߂ހ݄܂ۄڂف؃ׂքՃԀӆҀцЀσ΄Ȇ߂ހ݄܂ۄڂف؃ׂքՃԀӆҀцЀσ΄̵Dž߂ހ݄܂ۄڂف؃ׂքՃԀӆҀцЀσ΅̵DŽ߂ހ݄܂ۄڂف؃ׂքՃԀӆҀцЀσ΅̵ǃ߂ހ݄܂ۄڃـ؃ׂքՃԀӆҀцЀσ΅̀ǂ߂ށ݃܂ۄڃـ؃ׂքՃԀӆҀцЀσ΅́ǁ߂ށ݃܂ۄڃـ؃ׂքՃԀӆҀцЀσ΅́˴߂ށ݃܂ۄڃـ؃ׂքՃԀӆҀцЀσ΅́ˬ߂ށ݃܂ۄڃـ؃ׂքՃԀӆҀцЀσ΅́̀ڀ߂ށ݃܂ۄڃـ؃ׂքՃԀӆҀцЀσ΅́̀đ‎߃ހ݃܂ۄڃـ؃ׂքՃԀӆҀцЀσ΅́́ࣁ܃߃ހ݃܂ۄڃـ؃ׂքՃԀӆҀцЀσ΅́̀ƢхҀуЂχ΁̂ͅ˄ʃɆȂLJƀņăÁએࣁt8mk@VӠVVVӟVVVӠVhydrogen-0.9.6-beta3/macos/Info.plist000066400000000000000000000012661211146647700174310ustar00rootroot00000000000000 CFBundleIconFile Hydrogen.icns CFBundlePackageType APPL CFBundleGetInfoString Created by the hydrogen development team CFBundleSignature ???? CFBundleExecutable Hydrogen CFBundleIdentifier org.hydrogen-music NOTE Created by the hydrogen development team hydrogen-0.9.6-beta3/macos/fixlibs.sh000077500000000000000000000122641211146647700174600ustar00rootroot00000000000000#!/bin/sh # # This script will prepare the application (.app) bundle for Mac OS X. # (c)2006 Alessandro Cominu, Artemiy Pavlov # # prepare the .app package icon #echo " *** Copying icon" #mkdir -p hydrogen.app/Contents/Resources #cp macos/Hydrogen.icns hydrogen.app/Contents/Resources/Hydrogen.icns #sed -e "s/Hydrogen.icns #include #include #include #ifdef H2CORE_HAVE_LASH #include #endif #include #include #include #include #include #include #include #include #include #include using namespace std; void showInfo(); void showUsage(); #define HAS_ARG 1 static struct option long_opts[] = { {"driver", required_argument, NULL, 'd'}, {"song", required_argument, NULL, 's'}, {"version", 0, NULL, 'v'}, {"nosplash", 0, NULL, 'n'}, {"verbose", optional_argument, NULL, 'V'}, {"help", 0, NULL, 'h'}, {"install", required_argument, NULL, 'i'}, {"drumkit", required_argument, NULL, 'k'}, {0, 0, 0, 0}, }; #define NELEM(a) ( sizeof(a)/sizeof((a)[0]) ) int main(int argc, char *argv[]) { try { // Options... char *cp; struct option *op; char opts[NELEM(long_opts) * 3 + 1]; // Build up the short option QString cp = opts; for (op = long_opts; op < &long_opts[NELEM(long_opts)]; op++) { *cp++ = op->val; if (op->has_arg) *cp++ = ':'; if (op->has_arg == optional_argument ) *cp++ = ':'; // gets another one } // Deal with the options QString songFilename; bool bNoSplash = false; QString sSelectedDriver; bool showVersionOpt = false; const char* logLevelOpt = "Error"; bool showHelpOpt = false; QString drumkitName; QString drumkitToLoad; int c; for (;;) { c = getopt_long(argc, argv, opts, long_opts, NULL); if (c == -1) break; switch(c) { case 'd': sSelectedDriver = QString::fromLocal8Bit(optarg); break; case 's': songFilename = QString::fromLocal8Bit(optarg); break; case 'i': //install h2drumkit drumkitName = QString::fromLocal8Bit(optarg); break; case 'k': //load Drumkit drumkitToLoad = QString::fromLocal8Bit(optarg); break; case 'v': showVersionOpt = true; break; case 'V': if( optarg ) { logLevelOpt = optarg; } else { logLevelOpt = "Warning"; } break; case 'n': bNoSplash = true; break; case 'h': case '?': showHelpOpt = true; break; } } if( showVersionOpt ) { std::cout << H2Core::get_version() << std::endl; exit(0); } showInfo(); if( showHelpOpt ) { showUsage(); exit(0); } // Man your battle stations... this is not a drill. H2Core::Logger* logger = H2Core::Logger::bootstrap( H2Core::Logger::parse_log_level( logLevelOpt ) ); H2Core::Object::bootstrap( logger, logger->should_log( H2Core::Logger::Debug ) ); H2Core::Filesystem::bootstrap( logger ); MidiMap::create_instance(); H2Core::Preferences::create_instance(); // See below for H2Core::Hydrogen. ___INFOLOG( QString("Using QT version ") + QString( qVersion() ) ); ___INFOLOG( "Using data path: " + H2Core::Filesystem::sys_data_path() ); H2Core::Preferences *pPref = H2Core::Preferences::get_instance(); #ifdef H2CORE_HAVE_LASH LashClient::create_instance("hydrogen", "Hydrogen", &argc, &argv); LashClient* lashClient = LashClient::get_instance(); #endif if( ! drumkitName.isEmpty() ){ H2Core::Drumkit::install( drumkitName ); exit(0); } if (sSelectedDriver == "auto") { pPref->m_sAudioDriver = "Auto"; } else if (sSelectedDriver == "jack") { pPref->m_sAudioDriver = "Jack"; } else if ( sSelectedDriver == "oss" ) { pPref->m_sAudioDriver = "Oss"; } else if ( sSelectedDriver == "alsa" ) { pPref->m_sAudioDriver = "Alsa"; } if (sSelectedDriver == "CoreAudio") { pPref->m_sAudioDriver = "CoreAudio"; } #ifdef H2CORE_HAVE_LASH if ( H2Core::Preferences::get_instance()->useLash() ){ if (lashClient->isConnected()) { lash_event_t* lash_event = lashClient->getNextEvent(); if (lash_event && lash_event_get_type(lash_event) == LASH_Restore_File) { // notify client that this project was not a new one lashClient->setNewProject(false); songFilename = ""; songFilename.append( QString::fromLocal8Bit(lash_event_get_string(lash_event)) ); songFilename.append("/hydrogen.h2song"); // H2Core::Logger::get_instance()->log("[LASH] Restore file: " + songFilename); lash_event_destroy(lash_event); } else if (lash_event) { // H2Core::Logger::get_instance()->log("[LASH] ERROR: Instead of restore file got event: " + lash_event_get_type(lash_event)); lash_event_destroy(lash_event); } } } #endif H2Core::Hydrogen::create_instance(); // Load default song H2Core::Song *song = NULL; if ( !songFilename.isEmpty() ) { song = H2Core::Song::load( songFilename ); if (song == NULL) { song = H2Core::Song::get_empty_song(); song->set_filename( "" ); } } else { H2Core::Preferences *pref = H2Core::Preferences::get_instance(); bool restoreLastSong = pref->isRestoreLastSongEnabled(); QString filename = pref->getLastSongFilename(); if ( restoreLastSong && ( !filename.isEmpty() )) { song = H2Core::Song::load( filename ); if (song == NULL) { ___INFOLOG("Starting with empty song"); song = H2Core::Song::get_empty_song(); song->set_filename( "" ); } } else { song = H2Core::Song::get_empty_song(); song->set_filename( "" ); } } H2Core::Hydrogen::get_instance()->setSong( song ); H2Core::Preferences::get_instance()->setLastSongFilename( songFilename); if( ! drumkitToLoad.isEmpty() ){ H2Core::Drumkit* drumkitInfo = H2Core::Drumkit::load( H2Core::Filesystem::drumkit_path_search( drumkitToLoad ), true ); H2Core::Hydrogen::get_instance()->loadDrumkit( drumkitInfo ); } while( true ){ } delete pPref; delete H2Core::EventQueue::get_instance(); delete H2Core::AudioEngine::get_instance(); delete MidiMap::get_instance(); delete MidiActionManager::get_instance(); ___INFOLOG( "Quitting..." ); cout << "\nBye..." << endl; delete H2Core::Logger::get_instance(); int nObj = H2Core::Object::objects_count(); if (nObj != 0) { std::cerr << "\n\n\n " << nObj << " alive objects\n\n" << std::endl << std::endl; H2Core::Object::write_objects_map_to_cerr(); } } catch ( const H2Core::H2Exception& ex ) { std::cerr << "[main] Exception: " << ex.what() << std::endl; } catch (...) { std::cerr << "[main] Unknown exception X-(" << std::endl; } return 0; } /** * Show some information */ void showInfo() { cout << "\nHydrogen " + H2Core::get_version() + " [" + __DATE__ + "] [http://www.hydrogen-music.org]" << endl; cout << "Copyright 2002-2008 Alessandro Cominu" << endl; // _INFOLOG( "Compiled modules: " + QString(COMPILED_FEATURES) << endl; if ( H2Core::Object::count_active() ) { cout << "\nObject counting active" << endl; } cout << "\nHydrogen comes with ABSOLUTELY NO WARRANTY" << endl; cout << "This is free software, and you are welcome to redistribute it" << endl; cout << "under certain conditions. See the file COPYING for details\n" << endl; } /** * Show the correct usage */ void showUsage() { std::cout << "Usage: hydrogen [-v] [-h] -s file" << std::endl; std::cout << " -d, --driver AUDIODRIVER - Use the selected audio driver (jack, alsa, oss)" << std::endl; std::cout << " -s, --song FILE - Load a song (*.h2song) at startup" << std::endl; std::cout << " -k, --kit drumkit_name - Load a drumkit at startup" << std::endl; std::cout << " -i, --install FILE - install a drumkit (*.h2drumkit)" << std::endl; #ifdef H2CORE_HAVE_LASH std::cout << " --lash-no-start-server - If LASH server not running, don't start" << endl << " it (LASH 0.5.3 and later)." << std::endl; std::cout << " --lash-no-autoresume - Tell LASH server not to assume I'm returning" << std::endl << " from a crash." << std::endl; #endif std::cout << " -n, --nosplash - Hide splash screen" << std::endl; std::cout << " -V[Level], --verbose[=Level] - Print a lot of debugging info" << std::endl; std::cout << " Level, if present, may be None, Error, Warning, Info, Debug or 0xHHHH" << std::endl; std::cout << " -v, --version - Show version info" << std::endl; std::cout << " -h, --help - Show this help message" << std::endl; } hydrogen-0.9.6-beta3/src/core/000077500000000000000000000000001211146647700160715ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/CMakeLists.txt000066400000000000000000000040241211146647700206310ustar00rootroot00000000000000 CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/include/hydrogen/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/include/hydrogen/config.h" @ONLY) FILE(GLOB_RECURSE hydrogen_INCLUDES include/*.h) FILE(GLOB_RECURSE hydrogen_SOURCES src/*.cpp src/*.cc src/*.c) LIST(APPEND hydrogen_INCLUDES ${CMAKE_CURRENT_BINARY_DIR}/include/hydrogen/config.h) ADD_LIBRARY( hydrogen-core-${VERSION} ${H2CORE_LIBRARY_TYPE} ${hydrogen_SOURCES}) INCLUDE_DIRECTORIES( include ${CMAKE_SOURCE_DIR}/include # regular headers ${CMAKE_CURRENT_BINARY_DIR}/include # generated config.h ${QT_INCLUDES} ${LIBTAR_INCLUDE_DIR} ${LIBARCHIVE_INCLUDE_DIR} ${LIBSNDFILE_INCLUDE_DIR} ${ALSA_INCLUDE_DIR} ${OSS_INCLUDE_DIR} ${JACK_INCLUDE_DIR} ${PORTAUDIO_INCLUDE_DIR} ${PORTMIDI_INCLUDE_DIR} ${COREAUDIO_INCLUDE_DIR} ${COREMIDI_INCLUDE_DIR} ${LASH_INCLUDE_DIR} ${LRDF_INCLUDE_DIR} ${RUBBERBAND_INCLUDE_DIR} ) TARGET_LINK_LIBRARIES(hydrogen-core-${VERSION} ${QT_QTCORE_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTXMLPATTERNS_LIBRARY} ${LIBTAR_LIBRARIES} ${LIBARCHIVE_LIBRARIES} ${LIBSNDFILE_LIBRARIES} ${ALSA_LIBRARIES} ${OSS_LIBRARIES} ${JACK_LIBRARIES} ${PORTAUDIO_LIBRARIES} ${PORTMIDI_LIBRARIES} ${AUDIOUNIT_LIBRARY} ${CORESERVICES_LIBRARY} ${COREAUDIO_LIBRARIES} ${COREMIDI_LIBRARIES} ${LASH_LIBRARIES} ${LRDF_LIBRARIES} ${RUBBERBAND_LIBRARIES} ) #SET_TARGET_PROPERTIES(hydrogen-core-${VERSION} PROPERTIES PUBLIC_HEADER "${hydrogen_INCLUDES}" ) INSTALL(TARGETS hydrogen-core-${VERSION} LIBRARY DESTINATION "lib${LIB_SUFFIX}" ARCHIVE DESTINATION "lib${LIB_SUFFIX}" # do not copy directory hierarchy #PUBLIC_HEADER DESTINATION include/hydrogen ) IF(NOT APPPLE AND NOT WIN32) INSTALL(DIRECTORY include DESTINATION "${CMAKE_INSTALL_PREFIX}" FILES_MATCHING PATTERN "*.h" PATTERN ".svn" EXCLUDE) INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/include/hydrogen/config.h" DESTINATION "${CMAKE_INSTALL_PREFIX}/include/hydrogen" ) ENDIF() hydrogen-0.9.6-beta3/src/core/include/000077500000000000000000000000001211146647700175145ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/include/hydrogen/000077500000000000000000000000001211146647700213335ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/include/hydrogen/IO/000077500000000000000000000000001211146647700216425ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/include/hydrogen/IO/AudioOutput.h000066400000000000000000000035721211146647700243040ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2_AUDIO_OUTPUT_H #define H2_AUDIO_OUTPUT_H #include "hydrogen/config.h" #include #include namespace H2Core { /// /// Base abstract class for audio output classes. /// class AudioOutput : public H2Core::Object { public: TransportInfo m_transport; // Transport info AudioOutput( const char* class_name ) : Object( class_name ) , __track_out_enabled( false ) { } virtual ~AudioOutput() { } virtual int init( unsigned nBufferSize ) = 0; virtual int connect() = 0; virtual void disconnect() = 0; virtual unsigned getBufferSize() = 0; virtual unsigned getSampleRate() = 0; virtual float* getOut_L() = 0; virtual float* getOut_R() = 0; virtual void updateTransportInfo() = 0; virtual void play() = 0; virtual void stop() = 0; virtual void locate( unsigned long nFrame ) = 0; virtual void setBpm( float fBPM ) = 0; bool has_track_outs() { return __track_out_enabled; } protected: bool __track_out_enabled; ///< True if is capable of per-track audio output }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/IO/CoreMidiDriver.h000066400000000000000000000035241211146647700246660ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * CoreMidi driver for Hydrogen * Copyright(c) 2005-2006 by Jonathan Dempsey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Some cleanup . . . (20060222 Jonathan Dempsey) * Removed some unused code (20060514 Jonathan Dempsey) */ #ifndef CORE_MIDI_DRIVER_H #define CORE_MIDI_DRIVER_H #include #include #ifdef H2CORE_HAVE_COREMIDI #include namespace H2Core { class CoreMidiDriver : public virtual MidiInput, public virtual MidiOutput { H2_OBJECT public: CoreMidiDriver(); ~CoreMidiDriver(); bool m_bRunning; virtual void open(); virtual void close(); virtual std::vector getOutputPortList(); virtual void handleQueueNote(Note* pNote); virtual void handleQueueNoteOff( int channel, int key, int velocity ); virtual void handleQueueAllNoteOff(); MIDIClientRef h2MIDIClient; ItemCount cmSources; MIDIEndpointRef cmH2Src; MIDIPortRef h2InputRef; MIDIPortRef h2OutputRef; MIDIEndpointRef cmH2Dst; }; } ; // namespace #endif // H2CORE_HAVE_COREMIDI #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/IO/JackOutput.h000066400000000000000000000103571211146647700241120ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2_JACK_OUTPUT_H #define H2_JACK_OUTPUT_H #include #include // check if jack support is enabled #ifdef H2CORE_HAVE_JACK #include #include #ifdef H2CORE_HAVE_JACKSESSION #include #endif #include #include #include namespace H2Core { class Song; class Instrument; /// /// Jack (Jack Audio Connection Kit) server driver. /// class JackOutput : public AudioOutput { H2_OBJECT public: jack_client_t *client; JackOutput( JackProcessCallback processCallback ); ~JackOutput(); int connect(); void disconnect(); void deactivate(); unsigned getBufferSize(); unsigned getSampleRate(); int getNumTracks(); jack_transport_state_t getTransportState() { return m_JackTransportState; } jack_position_t getTransportPos() { return m_JackTransportPos; } void makeTrackOutputs( Song * ); void setTrackOutput( int, Instrument * ); void setConnectDefaults( bool flag ) { connect_out_flag = flag; } bool getConnectDefaults() { return connect_out_flag; } float* getOut_L(); float* getOut_R(); float* getTrackOut_L( unsigned nTrack ); float* getTrackOut_R( unsigned nTrack ); int init( unsigned bufferSize ); virtual void play(); virtual void stop(); virtual void locate( unsigned long nFrame ); virtual void updateTransportInfo(); virtual void setBpm( float fBPM ); void calculateFrameOffset(); void locateInNCycles( unsigned long frame, int cycles_to_wait = 2 ); //jack timebase callback void initTimeMaster(); void com_release(); //~ jack timebase callback protected: //jack timebase callback static void jack_timebase_callback(jack_transport_state_t state, jack_nframes_t nframes, jack_position_t *pos, int new_pos, void *arg); void jack_timebase_callback_impl(jack_transport_state_t state, jack_nframes_t nframes, jack_position_t *pos, int new_pos); //~ jack timebase callback #ifdef H2CORE_HAVE_JACKSESSION static void jack_session_callback(jack_session_event_t *event, void *arg); void jack_session_callback_impl(jack_session_event_t *event); #endif private: H2Core::Hydrogen *m_pEngine; void relocateBBT(); long long bbt_frame_offset; int must_relocate; // A countdown to wait for valid information from another Time Master. int locate_countdown; // (Unrelated) countdown, for postponing a call to 'locate'. unsigned long locate_frame; // The frame to locate to (used in 'locateInNCycles'.) JackProcessCallback processCallback; jack_port_t *output_port_1; jack_port_t *output_port_2; QString output_port_name_1; QString output_port_name_2; int track_port_count; jack_port_t *track_output_ports_L[MAX_INSTRUMENTS]; jack_port_t *track_output_ports_R[MAX_INSTRUMENTS]; jack_transport_state_t m_JackTransportState; jack_position_t m_JackTransportPos; bool connect_out_flag; //jack timebase callback jack_nframes_t m_jack_frame_current, m_jack_frame_last; jack_transport_state_t m_JackTransportStateLast; double m_jack_tick; bool m_jack_running; bool m_jack_master; bool cond; //~ jack timebase callback }; #else namespace H2Core { class JackOutput : public NullDriver { H2_OBJECT public: JackOutput( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} }; #endif // H2CORE_HAVE_JACK }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/IO/MidiCommon.h000066400000000000000000000031121211146647700240430ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2_MIDI_COMMON_H #define H2_MIDI_COMMON_H #include "hydrogen/config.h" #include #include #include namespace H2Core { class MidiMessage { public: enum MidiMessageType { UNKNOWN, SYSEX, NOTE_ON, NOTE_OFF, POLYPHONIC_KEY_PRESSURE, CONTROL_CHANGE, PROGRAM_CHANGE, CHANNEL_PRESSURE, PITCH_WHEEL, SYSTEM_EXCLUSIVE, START, CONTINUE, STOP, SONG_POS, QUARTER_FRAME }; MidiMessageType m_type; int m_nData1; int m_nData2; int m_nChannel; std::vector m_sysexData; MidiMessage() : m_type( UNKNOWN ) , m_nData1( -1 ) , m_nData2( -1 ) , m_nChannel( -1 ) {} }; class MidiPortInfo { public: QString m_sName; int m_nClient; int m_nPort; }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/IO/MidiInput.h000066400000000000000000000033431211146647700237200ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2_MIDI_INPUT_H #define H2_MIDI_INPUT_H #include #include #include #include "MidiCommon.h" namespace H2Core { /** * MIDI input base class */ class MidiInput : public virtual Object { public: MidiInput( const char* class_name ); virtual ~MidiInput(); virtual void open() = 0; virtual void close() = 0; virtual std::vector getOutputPortList() = 0; void setActive( bool isActive ) { m_bActive = isActive; } void handleMidiMessage( const MidiMessage& msg ); void handleSysexMessage( const MidiMessage& msg ); void handleControlChangeMessage( const MidiMessage& msg ); protected: bool m_bActive; void handleNoteOnMessage( const MidiMessage& msg ); void handleNoteOffMessage( const MidiMessage& msg ); private: unsigned long __noteOnTick; unsigned long __noteOffTick; unsigned long computeDeltaNoteOnOfftime(); }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/IO/MidiOutput.h000066400000000000000000000026161211146647700241230ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2_MIDI_OUTPUT_H #define H2_MIDI_OUTPUT_H #include #include #include #include "MidiCommon.h" namespace H2Core { class Note; /** * MIDI input base class */ class MidiOutput : public virtual Object { public: MidiOutput( const char* class_name ); virtual ~MidiOutput(); virtual void handleQueueNote(Note* pNote) = 0; virtual void handleQueueNoteOff( int channel, int key, int velocity ) = 0; virtual void handleQueueAllNoteOff() = 0; //protected: // std::vector m_pendingMessages; }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/IO/NullDriver.h000066400000000000000000000027711211146647700241100ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef NULL_AUDIO_DRIVER_H #define NULL_AUDIO_DRIVER_H #include #include namespace H2Core { typedef int ( *audioProcessCallback )( uint32_t, void * ); class NullDriver : public AudioOutput { H2_OBJECT public: NullDriver( audioProcessCallback processCallback ); ~NullDriver(); int init( unsigned nBufferSize ); int connect(); void disconnect(); unsigned getBufferSize(); unsigned getSampleRate(); float* getOut_L(); float* getOut_R(); virtual void play(); virtual void stop(); virtual void locate( unsigned long nFrame ); virtual void updateTransportInfo(); virtual void setBpm( float fBPM ); }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/IO/TransportInfo.h000066400000000000000000000022721211146647700246260ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef TRANSPORT_INFO_H #define TRANSPORT_INFO_H #include namespace H2Core { class TransportInfo : public H2Core::Object { H2_OBJECT public: enum { STOPPED, ROLLING, BAD }; unsigned m_status; long long m_nFrames; float m_nTickSize; float m_nBPM; TransportInfo(); ~TransportInfo(); void printInfo(); }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/LashClient.h000066400000000000000000000036311211146647700235350ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2005 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "hydrogen/config.h" #ifdef H2CORE_HAVE_LASH #ifndef LASH_CLIENT #define LASH_CLIENT #include #include #include class LashClient { public: static LashClient* get_instance() { assert(__instance); return __instance;} static void create_instance( const char *lashClass, const char *viewName, int *argc, char ***argv ); LashClient(const char* lashClass, const char* viewName, int* argc, char ***argv); ~LashClient(); bool isConnected(); void sendEvent(LASH_Event_Type eventType, const char* value); void sendEvent(LASH_Event_Type eventType); void setJackClientName( const std::string& jackClientName ); void sendJackClientName(); void setAlsaClientId(unsigned char id); void sendAlsaClientId(); lash_event_t* getNextEvent(); lash_client_t* getConnection(); void setNewProject(bool value); bool isNewProject(); private: bool newProject; lash_client_t* lashClient; std::string jackClientName; unsigned char alsaClientId; static LashClient* __instance; }; #endif // LASH_CLIENT #endif // H2CORE_HAVE_LASH hydrogen-0.9.6-beta3/src/core/include/hydrogen/LocalFileMng.h000066400000000000000000000070111211146647700237770ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef LFILEMNG_H #define LFILEMNG_H #include #include #include #include #include #include namespace H2Core { class Note; class Instrument; class InstrumentList; class Sequence; class Pattern; class Song; class Drumkit; /** * */ class LocalFileMng : public H2Core::Object { H2_OBJECT public: LocalFileMng(); ~LocalFileMng(); static std::vector getDrumkitsFromDirectory( QString ); std::vector getPatternDirList(); std::vector getSongList(); std::vector getPatternsForDrumkit( const QString& ); std::vector getAllPatternNames(); int getPatternList( const QString& ); int mergeAllPatternList( std::vector ); std::vector getallPatternList(){ return m_allPatternList; } std::vector getAllCategoriesFromPattern(); QString getDrumkitNameForPattern( const QString& patternDir ); static void writeXmlString( QDomNode parent, const QString& name, const QString& text ); static void writeXmlBool( QDomNode parent, const QString& name, bool value ); Pattern* loadPattern( const QString& directory ); int savePattern( Song *song , const QString& drumkit_name, int selectedpattern , const QString& patternname, const QString& realpatternname, int mode); int savePlayList( const std::string& patternname ); int loadPlayList( const std::string& patternname); int writeTempPatternList( Song *song, const QString& filename);//used for undo/redo static QString readXmlString( QDomNode , const QString& nodeName, const QString& defaultValue, bool bCanBeEmpty = false, bool bShouldExists = true , bool tinyXmlCompatMode = false); static float readXmlFloat( QDomNode , const QString& nodeName, float defaultValue, bool bCanBeEmpty = false, bool bShouldExists = true , bool tinyXmlCompatMode = false); static int readXmlInt( QDomNode , const QString& nodeName, int defaultValue, bool bCanBeEmpty = false, bool bShouldExists = true , bool tinyXmlCompatMode = false); static bool readXmlBool( QDomNode , const QString& nodeName, bool defaultValue, bool bShouldExists = true , bool tinyXmlCompatMode = false ); static void convertFromTinyXMLString( QByteArray* str ); static bool checkTinyXMLCompatMode( const QString& filename ); static QDomDocument openXmlDocument( const QString& filename ); private: void fileCopy( const QString& sOrigFilename, const QString& sDestFilename ); std::vector m_allPatternList; }; /** * Write XML file of a song */ class SongWriter : public H2Core::Object { H2_OBJECT public: SongWriter(); ~SongWriter(); // Returns 0 on success. int writeSong( Song *song, const QString& filename ); }; }; #endif //LFILEMNG_H hydrogen-0.9.6-beta3/src/core/include/hydrogen/Preferences.h000066400000000000000000000356211211146647700237540ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PREFERENCES_H #define PREFERENCES_H #include //#include #include #include #include #include #include #include #include namespace H2Core { const float FALLOFF_SLOW = 1.08f; const float FALLOFF_NORMAL= 1.1f; const float FALLOFF_FAST = 1.5f; /** \ingroup H2CORE */ class WindowProperties : public H2Core::Object { H2_OBJECT public: int x; int y; int width; int height; bool visible; WindowProperties(); ~WindowProperties(); void set(int _x, int _y, int _width, int _height, bool _visible) { x = _x; y = _y; width = _width; height = _height; visible = _visible; } }; /** \ingroup H2CORE */ class H2RGBColor : public H2Core::Object { H2_OBJECT public: H2RGBColor( int r = -1, int g = -1, int b = -1 ); H2RGBColor( const QString& sColor ); ~H2RGBColor(); QString toStringFmt(); int getRed() const { return m_red; } int getGreen() const { return m_green; } int getBlue() const { return m_blue; } private: int m_red; int m_green; int m_blue; }; /** \ingroup H2CORE \brief Colors for hydrogen */ class UIStyle : public H2Core::Object { H2_OBJECT public: UIStyle(); H2RGBColor m_songEditor_backgroundColor; H2RGBColor m_songEditor_alternateRowColor; H2RGBColor m_songEditor_selectedRowColor; H2RGBColor m_songEditor_lineColor; H2RGBColor m_songEditor_textColor; H2RGBColor m_songEditor_pattern1Color; H2RGBColor m_patternEditor_backgroundColor; H2RGBColor m_patternEditor_alternateRowColor; H2RGBColor m_patternEditor_selectedRowColor; H2RGBColor m_patternEditor_textColor; H2RGBColor m_patternEditor_noteColor; H2RGBColor m_patternEditor_noteoffColor; H2RGBColor m_patternEditor_lineColor; H2RGBColor m_patternEditor_line1Color; H2RGBColor m_patternEditor_line2Color; H2RGBColor m_patternEditor_line3Color; H2RGBColor m_patternEditor_line4Color; H2RGBColor m_patternEditor_line5Color; }; /** \ingroup H2CORE \brief Manager for User Preferences File (singleton) */ class Preferences : public H2Core::Object { H2_OBJECT public: enum { USE_JACK_TRANSPORT = 0, USE_JACK_TIME_MASTER = 0, POST_FADER = 0, SET_PLAY_ON = 0, BC_ON = 0, NO_JACK_TRANSPORT = 1, NO_JACK_TIME_MASTER = 1, PRE_FADER = 1, SET_PLAY_OFF = 1, BC_OFF = 1 }; enum UI_LAYOUT_TYPES { UI_LAYOUT_SINGLE_PANE, UI_LAYOUT_TABBED }; int m_nDefaultUILayout; QString m_sPreferencesFilename; QString m_sPreferencesDirectory; QString __lastspatternDirectory; QString __lastsampleDirectory; // audio file browser bool __playsamplesonclicking; // audio file browser bool __playselectedinstrument; // midi keys and keys play instrument or drumset int m_nRecPreDelete; //index of record note pre delete function 0 = off int m_nRecPostDelete; bool m_bFollowPlayhead; // switch to enable / disable lash, only on h2 startup bool m_brestartLash; bool m_bsetLash; //soundlibrarypanel expand song and pattern item bool __expandSongItem; bool __expandPatternItem; //beatcounter bool m_bbc; bool m_mmcsetplay; int m_countOffset; int m_startOffset; //~ beatcounter std::list sServerList; std::list m_patternCategories; //___ audio engine properties ___ QString m_sAudioDriver; ///< Audio Driver bool m_bUseMetronome; ///< Use metronome? float m_fMetronomeVolume; ///< Metronome volume FIXME: remove this volume!! unsigned m_nMaxNotes; ///< max notes unsigned m_nBufferSize; ///< Audio buffer size unsigned m_nSampleRate; ///< Audio sample rate //___ oss driver properties ___ QString m_sOSSDevice; ///< Device used for output //___ MIDI Driver properties QString m_sMidiDriver; QString m_sMidiPortName; int m_nMidiChannelFilter; bool m_bMidiNoteOffIgnore; bool m_bMidiDiscardNoteAfterAction; //___ alsa audio driver properties ___ QString m_sAlsaAudioDevice; //___ jack driver properties ___ QString m_sJackPortName1; QString m_sJackPortName2; bool m_bJackTransportMode; bool m_bJackConnectDefaults; bool m_bJackTrackOuts; int m_nJackTrackOutputMode; //jack time master bool m_bJackMasterMode ; //~ jack time master ///Default text editor (used by Playlisteditor) QString m_sDefaultEditor; ///Rubberband CLI QString m_rubberBandCLIexecutable; /// Returns an instance of PreferencesMng class static void create_instance(); static Preferences* get_instance() { assert(__instance); return __instance; } ~Preferences(); /// Load the preferences file void loadPreferences( bool bGlobal ); /// Save the preferences file void savePreferences(); const QString& getDemoPath() { return demoPath; } const QString& getDataDirectory() { return m_sDataDirectory; } const QString& getTmpDirectory(){ return m_sTmpDirectory; } const QString& getDefaultEditor() { return m_sDefaultEditor; } void setDefaultEditor( QString editor){ m_sDefaultEditor = editor; } int getDefaultUILayout(){ return m_nDefaultUILayout; } void setDefaultUILayout( int layout){ m_nDefaultUILayout = layout; } void setShowExportWarning( bool value ) { m_bShowExportWarning = value; } bool getShowExportWarning() { return m_bShowExportWarning; } // General void setRestoreLastSongEnabled( bool restore ) { m_brestoreLastSong = restore; } void setRestoreLastPlaylistEnabled( bool restore ) { m_brestoreLastPlaylist = restore; } void setShowDevelWarning( bool value ) { m_bShowDevelWarning = value; } bool getShowDevelWarning() { return m_bShowDevelWarning; } bool isRestoreLastSongEnabled() { return m_brestoreLastSong; } bool isRestoreLastPlaylistEnabled() { return m_brestoreLastPlaylist; } void setLastSongFilename( const QString& filename ) { m_lastSongFilename = filename; } const QString& getLastSongFilename() { return m_lastSongFilename; } void setLastPlaylistFilename( const QString& filename ) { m_lastPlaylistFilename = filename; } const QString& getLastPlaylistFilename() { return m_lastPlaylistFilename; } void setHearNewNotes( bool value ) { hearNewNotes = value; } bool getHearNewNotes() { return hearNewNotes; } void setRecordEvents( bool value ) { recordEvents = value; } bool getRecordEvents() { return recordEvents; } void setDestructiveRecord ( bool value ) { destructiveRecord = value; } bool getDestructiveRecord() { return destructiveRecord; } void setPunchInPos ( unsigned pos ) { punchInPos = pos; } int getPunchInPos() { return punchInPos; } void setPunchOutPos ( unsigned pos ) { punchOutPos = pos; } int getPunchOutPos() { return punchOutPos; } bool inPunchArea (int pos) { // Return true if punch area not defined if ( punchInPos <= punchOutPos ) { if ( pos < punchInPos || punchOutPos < pos ) { return false; } } return true; } void unsetPunchArea () { punchInPos = 0; punchOutPos = -1; } void setQuantizeEvents( bool value ) { quantizeEvents = value; } bool getQuantizeEvents() { return quantizeEvents; } std::vector getRecentFiles() { return m_recentFiles; } void setRecentFiles( std::vector recentFiles ); QStringList getRecentFX() { return m_recentFX; } void setMostRecentFX( QString ); std::vector getLadspaPath() { return m_ladspaPathVect; } void setLadspaPath( std::vector pathVect ) { m_ladspaPathVect = pathVect; } QString getLastNews() { return m_sLastNews; } void setLastNews( const QString& sNews ) { m_sLastNews = sNews; } // GUI Properties const QString& getQTStyle() { return m_sQTStyle; } void setQTStyle( const QString& sStyle ) { m_sQTStyle = sStyle; } const QString& getApplicationFontFamily() { return applicationFontFamily; } void setApplicationFontFamily( const QString& family ) { applicationFontFamily = family; } int getApplicationFontPointSize() { return applicationFontPointSize; } void setApplicationFontPointSize( int size ) { applicationFontPointSize = size; } QString getMixerFontFamily() { return mixerFontFamily; } void setMixerFontFamily( const QString& family ) { mixerFontFamily = family; } int getMixerFontPointSize() { return mixerFontPointSize; } void setMixerFontPointSize( int size ) { mixerFontPointSize = size; } float getMixerFalloffSpeed() { return mixerFalloffSpeed; } void setMixerFalloffSpeed( float value ) { mixerFalloffSpeed = value; } bool showInstrumentPeaks() { return m_bShowInstrumentPeaks; } void setInstrumentPeaks( bool value ) { m_bShowInstrumentPeaks = value; } int getPatternEditorGridResolution() { return m_nPatternEditorGridResolution; } void setPatternEditorGridResolution( int value ) { m_nPatternEditorGridResolution = value; } bool isPatternEditorUsingTriplets() { return m_bPatternEditorUsingTriplets; } void setPatternEditorUsingTriplets( bool value ) { m_bPatternEditorUsingTriplets = value; } bool isFXTabVisible() { return m_bIsFXTabVisible; } void setFXTabVisible( bool value ) { m_bIsFXTabVisible = value; } unsigned getPatternEditorGridHeight() { return m_nPatternEditorGridHeight; } void setPatternEditorGridHeight( unsigned value ) { m_nPatternEditorGridHeight = value; } unsigned getPatternEditorGridWidth() { return m_nPatternEditorGridWidth; } void setPatternEditorGridWidth( unsigned value ) { m_nPatternEditorGridWidth = value; } WindowProperties getMainFormProperties() { return mainFormProperties; } void setMainFormProperties( const WindowProperties& prop ) { mainFormProperties = prop; } WindowProperties getMixerProperties() { return mixerProperties; } void setMixerProperties( const WindowProperties& prop ) { mixerProperties = prop; } WindowProperties getPatternEditorProperties() { return patternEditorProperties; } void setPatternEditorProperties( const WindowProperties& prop ) { patternEditorProperties = prop; } WindowProperties getSongEditorProperties() { return songEditorProperties; } void setSongEditorProperties( const WindowProperties& prop ) { songEditorProperties = prop; } WindowProperties getAudioEngineInfoProperties() { return audioEngineInfoProperties; } void setAudioEngineInfoProperties( const WindowProperties& prop ) { audioEngineInfoProperties = prop; } WindowProperties getLadspaProperties( unsigned nFX ) { return m_ladspaProperties[nFX]; } void setLadspaProperties( unsigned nFX, const WindowProperties& prop ) { m_ladspaProperties[nFX] = prop; } UIStyle* getDefaultUIStyle() { return m_pDefaultUIStyle; } bool patternModePlaysSelected() { return m_bPatternModePlaysSelected; } void setPatternModePlaysSelected( bool b ) { m_bPatternModePlaysSelected = b; } bool useLash(){ return m_bUseLash; } void setUseLash( bool b ){ m_bUseLash = b; } void setMaxBars( int bars ){ maxBars = bars; } int getMaxBars(){ return maxBars; } void setWaitForSessionHandler(bool value){ waitingForSessionHandler = value; } bool getWaitForSessionHandler(){ return waitingForSessionHandler; } #ifdef H2CORE_HAVE_JACKSESSION QString getJackSessionUUID(){ return jackSessionUUID; } void setJackSessionUUID( QString uuid ){ jackSessionUUID = uuid; } QString getJackSessionApplicationPath(){ return jackSessionApplicationPath; } void setJackSessionApplicationPath( QString path ){ jackSessionApplicationPath = path; } #endif bool getUseTimelineBpm(){ return __useTimelineBpm; } void setUseTimelineBpm( bool val ){ __useTimelineBpm = val; } int getRubberBandCalcTime(){ return __rubberBandCalcTime; } void setRubberBandCalcTime( int val ){ __rubberBandCalcTime = val; } int getRubberBandBatchMode(){ return m_useTheRubberbandBpmChangeEvent; } void setRubberBandBatchMode( int val ){ m_useTheRubberbandBpmChangeEvent = val; } int getLastOpenTab(){ return m_nLastOpenTab; } void setLastOpenTab(int n){ m_nLastOpenTab = n; } private: static Preferences *__instance; QString m_sDataDirectory; QString m_sTmpDirectory; /** directory of demo songs */ QString demoPath; //___ General properties ___ int __rubberBandCalcTime; ///rubberband bpm change queue bool m_useTheRubberbandBpmChangeEvent; bool m_bPatternModePlaysSelected; /// Behaviour of Pattern Mode bool m_brestoreLastSong; ///< Restore last song? bool m_brestoreLastPlaylist; bool m_bUseLash; bool m_bShowDevelWarning; ///< Show development version warning? bool m_bShowExportWarning; QString m_lastSongFilename; ///< Last song used QString m_lastPlaylistFilename; bool hearNewNotes; std::vector m_recentFiles; QStringList m_recentFX; std::vector m_ladspaPathVect; bool quantizeEvents; bool recordEvents; bool destructiveRecord; bool readPrefFileforotherplaces; int punchInPos; int punchOutPos; QString m_sLastNews; int maxBars; #ifdef H2CORE_HAVE_JACKSESSION QString jackSessionUUID; QString jackSessionApplicationPath; #endif bool waitingForSessionHandler; bool __useTimelineBpm; //___ GUI properties ___ QString m_sQTStyle; int m_nLastOpenTab; QString applicationFontFamily; int applicationFontPointSize; QString mixerFontFamily; int mixerFontPointSize; float mixerFalloffSpeed; int m_nPatternEditorGridResolution; bool m_bPatternEditorUsingTriplets; bool m_bShowInstrumentPeaks; bool m_bIsFXTabVisible; unsigned m_nPatternEditorGridHeight; unsigned m_nPatternEditorGridWidth; WindowProperties mainFormProperties; WindowProperties mixerProperties; WindowProperties patternEditorProperties; WindowProperties songEditorProperties; WindowProperties drumkitManagerProperties; WindowProperties audioEngineInfoProperties; WindowProperties m_ladspaProperties[MAX_FX]; UIStyle* m_pDefaultUIStyle; Preferences(); /// Create preferences directory void createPreferencesDirectory(); /// Create data directory void createDataDirectory(); /// Create soundLibrary directory void createSoundLibraryDirectories(); WindowProperties readWindowProperties( QDomNode parent, const QString& windowName, WindowProperties defaultProp ); void writeWindowProperties( QDomNode parent, const QString& windowName, const WindowProperties& prop ); void writeUIStyle( QDomNode parent ); void readUIStyle( QDomNode parent ); }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/audio_engine.h000066400000000000000000000053441211146647700241400ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef AUDIO_ENGINE_H #define AUDIO_ENGINE_H #include "hydrogen/config.h" #include #include #include #include #include #include #ifndef RIGHT_HERE #define RIGHT_HERE __FILE__, __LINE__, __PRETTY_FUNCTION__ #endif namespace H2Core { /// /// Audio Engine main class (Singleton). /// class AudioEngine : public H2Core::Object { H2_OBJECT public: static void create_instance(); static AudioEngine* get_instance() { assert(__instance); return __instance; } ~AudioEngine(); /* Mutex locking and unlocking * * Easy usage: Use the RIGHT_HERE macro like this... * AudioEngine::get_instance()->lock( RIGHT_HERE ); * * More complex usage: The parameters file and function * need to be pointers to null-terminated strings that are * persistent for the entire session. This does *not* * include the return value of std::string::c_str(), or * QString::toLocal8Bit().data(). * * Tracing the locks: Enable the Logger::AELockTracing * logging level. When you do, there will be a performance * penalty because the strings will be converted to a * QString. At the moment, you'll have to do that with * your debugger. * * Notes: The order of the parameters match GCC's * implementation of the assert() macros. */ void lock( const char* file, unsigned int line, const char* function ); bool try_lock( const char* file, unsigned int line, const char* function ); /// Return true on success (locked). void unlock(); Sampler* get_sampler(); Synth* get_synth(); private: static AudioEngine* __instance; Sampler* __sampler; Synth* __synth; /// Mutex for syncronized access to the Song object and the AudioEngine. pthread_mutex_t __engine_mutex; struct _locker_struct { const char* file; unsigned int line; const char* function; } __locker; AudioEngine(); }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/basics/000077500000000000000000000000001211146647700225775ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/include/hydrogen/basics/adsr.h000066400000000000000000000065561211146647700237150ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_ADSR_H #define H2C_ADSR_H #include namespace H2Core { /** * Attack Decay Sustain Release envelope. */ class ADSR : private Object { H2_OBJECT public: /** * constructor * \param attack tick duration * \param decay tick duration * \param sustain level * \paramrelease tick duration */ ADSR ( float attack = 0.0, float decay = 0.0, float sustain = 1.0, float release = 1000 ); /** copy constructor */ ADSR( const ADSR* other ); /** destructor */ ~ADSR(); /** * __attack setter * \param value the new value */ void set_attack( float value ); /** __attack accessor */ float get_attack(); /** * __decay setter * \param value the new value */ void set_decay( float value ); /** __decay accessor */ float get_decay(); /** * __sustain setter * \param value the new value */ void set_sustain( float value ); /** __sustain accessor */ float get_sustain(); /** * __release setter * \param value the new value */ void set_release( float value ); /** __release accessor */ float get_release(); /** * sets state to ATTACK */ void attack(); /** * compute the value and return it * \param step the increment to be added to __ticks */ float get_value( float step ); /** * sets state to RELEASE, * returns 0 if the state is IDLE, * __value if the state is RELEASE, * set state to RELEASE, save __release_value and return it. * */ float release(); private: float __attack; ///< Attack tick count float __decay; ///< Decay tick count float __sustain; ///< Sustain level float __release; ///< Release tick count /** possible states */ enum ADSRState { ATTACK=0, DECAY, SUSTAIN, RELEASE, IDLE }; ADSRState __state; ///< current state float __ticks; ///< current tick count float __value; ///< current value float __release_value; ///< value when the release state was entered }; // DEFINITIONS inline void ADSR::set_attack( float value ) { __attack = value; } inline float ADSR::get_attack() { return __attack; } inline void ADSR::set_decay( float value ) { __decay = value; } inline float ADSR::get_decay() { return __decay; } inline void ADSR::set_sustain( float value ) { __sustain = value; } inline float ADSR::get_sustain() { return __sustain; } inline void ADSR::set_release( float value ) { __release = value; } inline float ADSR::get_release() { return __release; } }; #endif // H2C_ADRS_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/basics/drumkit.h000066400000000000000000000150431211146647700244320ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_DRUMKIT_H #define H2C_DRUMKIT_H #include namespace H2Core { class XMLNode; class InstrumentList; /** * Drumkit info */ class Drumkit : public H2Core::Object { H2_OBJECT public: /** drumkit constructor, does nothing */ Drumkit(); /** copy constructor */ Drumkit( Drumkit* other ); /** drumkit destructor, delete__ instruments */ ~Drumkit(); /** * load drumkit information from a directory * \param dk_dir like one returned by Filesystem::drumkit_path * \param load_samples automatically load sample data if set to true * \return a Drumkit on success, 0 otherwise */ static Drumkit* load( const QString& dk_dir, bool load_samples=false ); /** * load drumkit information from a file * \param dk_path is a path to an xml file * \param load_samples automatically load sample data if set to true * \return a Drumkit on success, 0 otherwise */ static Drumkit* load_file( const QString& dk_path, bool load_samples=false ); /** * load the instrument samples */ void load_samples( ); /** * unload the instrument samples */ void unload_samples(); /** * save a drumkit, xml file and samples * \param overwrite allows to write over existing drumkit files * \return true on success */ bool save( bool overwrite=false ); /** * save a drumkit, xml file and samples * neither __path nor __name are updated * \param dk_dir the directory to save the drumkit into * \param overwrite allows to write over existing drumkit files * \return true on success */ bool save( const QString& dk_dir, bool overwrite=false ); /** * save a drumkit into an xml file * \param dk_path the path to save the drumkit into * \param overwrite allows to write over existing drumkit file * \return true on success */ bool save_file( const QString& dk_path, bool overwrite=false ); /** * save a drumkit instruments samples into a directory * \param dk_dir the directory to save the samples into * \param overwrite allows to write over existing drumkit samples files * \return true on success */ bool save_samples( const QString& dk_dir, bool overwrite=false ); /** * save a drumkit using given parameters and an instrument list * \param name the name of the drumkit * \param author the author of the drumkit * \param info the info of the drumkit * \param license the license of the drumkit * \þaram instruments the instruments to be saved within the drumkit * \oaram overwrite allows to write over existing drumkit files * \return true on success */ static bool save( const QString& name, const QString& author, const QString& info, const QString& license, InstrumentList* instruments, bool overwrite=false ); /** * install a drumkit from a filename * \param path the path to the new drumkit archive * \return true on success */ static bool install( const QString& path ); /** * remove a drumkit from the disk * \param dk_name the drumkit name * \return true on success */ static bool remove( const QString& dk_name ); /** set __instruments, delete existing one */ void set_instruments( InstrumentList* instruments ); /** returns __instruments */ InstrumentList* get_instruments() const; /** __path setter */ void set_path( const QString& path ); /** __path accessor */ const QString& get_path() const; /** __name setter */ void set_name( const QString& name ); /** __name accessor */ const QString& get_name() const; /** __author setter */ void set_author( const QString& author ); /** __author accessor */ const QString& get_author() const; /** __info setter */ void set_info( const QString& info ); /** __info accessor */ const QString& get_info() const; /** __license setter */ void set_license( const QString& license ); /** __license accessor */ const QString& get_license() const; /** return true if the samples are loaded */ const bool samples_loaded() const; void dump(); private: QString __path; ///< absolute drumkit path QString __name; ///< drumkit name QString __author; ///< drumkit author QString __info; ///< drumkit free text QString __license; ///< drumkit license description bool __samples_loaded; ///< true if the instrument samples are loaded InstrumentList* __instruments; ///< the list of instruments /* * save the drumkit within the given XMLNode * \param node the XMLNode to feed */ void save_to( XMLNode* node ); /** * load a drumkit from an XMLNode * \param node the XMLDode to read from * \param dk_path the directory holding the drumkit data */ static Drumkit* load_from( XMLNode* node, const QString& dk_path ); }; // DEFINITIONS inline InstrumentList* Drumkit::get_instruments() const { return __instruments; } inline void Drumkit::set_path( const QString& path ) { __path = path; } inline const QString& Drumkit::get_path() const { return __path; } inline void Drumkit::set_name( const QString& name ) { __name = name; } inline const QString& Drumkit::get_name() const { return __name; } inline void Drumkit::set_author( const QString& author ) { __author = author; } inline const QString& Drumkit::get_author() const { return __author; } inline void Drumkit::set_info( const QString& info ) { __info = info; } inline const QString& Drumkit::get_info() const { return __info; } inline void Drumkit::set_license( const QString& license ) { __license = license; } inline const QString& Drumkit::get_license() const { return __license; } inline const bool Drumkit::samples_loaded() const { return __samples_loaded; } }; #endif // H2C_DRUMKIT_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/basics/instrument.h000066400000000000000000000330751211146647700251700ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_INSTRUMENT_H #define H2C_INSTRUMENT_H #include #include #include #define EMPTY_INSTR_ID -1 #define METRONOME_INSTR_ID -2 namespace H2Core { class XMLNode; class ADSR; class Drumkit; class InstrumentLayer; /** Instrument class */ class Instrument : public H2Core::Object { H2_OBJECT public: /** * constructor * \param id the id of this instrument * \param name the name of the instrument * \param adsr attack decay sustain release instance */ Instrument( const int id=EMPTY_INSTR_ID, const QString& name="Empty Instrument", ADSR* adsr=0 ); /** copy constructor */ Instrument( Instrument* other ); /** destructor */ ~Instrument(); /** * creates a new Instrument, loads samples from a given instrument within a given drumkit * \param drumkit_name the drumkit to search the instrument in * \param instrument_name the instrument within the drumkit to load samples from * \return a new Instrument instance */ static Instrument* load_instrument( const QString& drumkit_name, const QString& instrument_name ); /** * loads instrument from a given instrument within a given drumkit into a `live` Instrument object. * \param drumkit_name the drumkit to search the instrument in * \param instrument_name the instrument within the drumkit to load samples from * \param is_live is it performed while playing */ void load_from( const QString& drumkit_name, const QString& instrument_name, bool is_live = true ); /** * loads instrument from a given instrument into a `live` Instrument object. * \param drumkit the drumkit the instrument belongs to * \param instrument to load samples and members from * \param is_live is it performed while playing */ void load_from( Drumkit* drumkit, Instrument* instrument, bool is_live = true ); /** * load samples data */ void load_samples(); /* * unload instrument samples */ void unload_samples(); /* * save the intrument within the given XMLNode * \param node the XMLNode to feed */ void save_to( XMLNode* node ); /** * load an instrument from an XMLNode * \param node the XMLDode to read from * \param dk_path the directory holding the drumkit data * \param dk_name the name of the drumkit * \return a new Instrument instance */ static Instrument* load_from( XMLNode* node, const QString& dk_path, const QString& dk_name ); /** * get an instrument layer from the list * \param idx the index to get the layer from * \return a pointer to the layer */ InstrumentLayer* operator[]( int idx ); /** * get an instrument layer from the list * \param idx the index to get the layer from * \return a pointer to the layer */ InstrumentLayer* get_layer( int idx ); /** * set a layer within the instrument's layer list * \param layer the layer to be set * \param idx the index within the list */ void set_layer( InstrumentLayer* layer, int idx ); ///< set the name of the instrument void set_name( const QString& name ); ///< get the name of the instrument const QString& get_name() const; ///< set the id of the instrument void set_id( const int id ); ///< get the id of the instrument int get_id() const; /** set the ADSR of the instrument */ void set_adsr( ADSR* adsr ); /** get the ADSR of the instrument */ ADSR* get_adsr() const; /** get a copy of the ADSR of the instrument */ ADSR* copy_adsr() const; /** set the mute group of the instrument */ void set_mute_group( int group ); /** get the mute group of the instrument */ int get_mute_group() const; /** set the midi out channel of the instrument */ void set_midi_out_channel( int channel ); /** get the midi out channel of the instrument */ int get_midi_out_channel() const; /** set the midi out note of the instrument */ void set_midi_out_note( int note ); /** get the midi out note of the instrument */ int get_midi_out_note() const; /** set muted status of the instrument */ void set_muted( bool muted ); /** get muted status of the instrument */ bool is_muted() const; /** set left pan of the instrument */ void set_pan_l( float val ); /** get left pan of the instrument */ float get_pan_l() const; /** set right pan of the instrument */ void set_pan_r( float val ); /** get right pan of the instrument */ float get_pan_r() const; /** set gain of the instrument */ void set_gain( float gain ); /** get gain of the instrument */ float get_gain() const; /** set the volume of the instrument */ void set_volume( float volume ); /** get the volume of the instrument */ float get_volume() const; /** activate the filter of the instrument */ void set_filter_active( bool active ); /** get the status of the filter of the instrument */ bool is_filter_active() const; /** set the filter resonance of the instrument */ void set_filter_resonance( float val ); /** get the filter resonance of the instrument */ float get_filter_resonance() const; /** set the filter cutoff of the instrument */ void set_filter_cutoff( float val ); /** get the filter cutoff of the instrument */ float get_filter_cutoff() const; /** set the left peak of the instrument */ void set_peak_l( float val ); /** get the left peak of the instrument */ float get_peak_l() const; /** set the right peak of the instrument */ void set_peak_r( float val ); /** get the right peak of the instrument */ float get_peak_r() const; /** set the fx level of the instrument */ void set_fx_level( float level, int index ); /** get the fx level of the instrument */ float get_fx_level( int index ) const; /** set the random pitch factor of the instrument */ void set_random_pitch_factor( float val ); /** get the random pitch factor of the instrument */ float get_random_pitch_factor() const; /** set the active status of the instrument */ void set_active( bool active ); /** get the active status of the instrument */ bool is_active() const; /** set the soloed status of the instrument */ void set_soloed( bool soloed ); /** get the soloed status of the instrument */ bool is_soloed() const; /** enqueue the instrument */ void enqueue(); /** dequeue the instrument */ void dequeue(); /** get the queued status of the instrument */ bool is_queued() const; /** set the stop notes status of the instrument */ void set_stop_notes( bool stopnotes ); /** get the stop notes of the instrument */ bool is_stop_notes() const; ///< set the name of the related drumkit void set_drumkit_name( const QString& name ); ///< get the name of the related drumkits const QString& get_drumkit_name() const; private: int __id; ///< instrument id, should be unique QString __name; ///< instrument name QString __drumkit_name; ///< the name of the drumkit this instrument belongs tos float __gain; ///< gain of the instrument float __volume; ///< volume of the instrument float __pan_l; ///< left pan of the instrument float __pan_r; ///< right pan of the instrument float __peak_l; ///< left current peak value float __peak_r; ///< right current peak value ADSR* __adsr; ///< attack delay sustain release instance bool __filter_active; ///< is filter active? float __filter_cutoff; ///< filter cutoff (0..1) float __filter_resonance; ///< filter resonant frequency (0..1) float __random_pitch_factor; ///< random pitch factor int __midi_out_note; ///< midi out note int __midi_out_channel; ///< midi out channel bool __stop_notes; ///< will the note automatically generate a note off after beeing on bool __active; ///< is the instrument active? bool __soloed; ///< is the instrument in solo mode? bool __muted; ///< is the instrument muted? int __mute_group; ///< mute group of the instrument int __queued; ///< count the number of notes queued within Sampler::__playing_notes_queue or std::priority_queue m_songNoteQueue float __fx_level[MAX_FX]; ///< Ladspa FX level array InstrumentLayer* __layers[MAX_LAYERS]; ///< InstrumentLayer array }; // DEFINITIONS inline void Instrument::set_name( const QString& name ) { __name = name; } inline const QString& Instrument::get_name() const { return __name; } inline void Instrument::set_id( const int id ) { __id = id; } inline int Instrument::get_id() const { return __id; } inline ADSR* Instrument::get_adsr() const { return __adsr; } inline ADSR* Instrument::copy_adsr() const { return new ADSR( __adsr ); } inline void Instrument::set_mute_group( int group ) { __mute_group = ( group<-1 ? -1 : group ); } inline int Instrument::get_mute_group() const { return __mute_group; } inline int Instrument::get_midi_out_channel() const { return __midi_out_channel; } inline void Instrument::set_midi_out_channel( int channel ) { if ( ( channel >= MIDI_OUT_CHANNEL_MIN ) && ( channel <= MIDI_OUT_CHANNEL_MAX ) ) { __midi_out_channel = channel; } else { ERRORLOG( QString( "midi out channel %1 out of bounds" ).arg( channel ) ); } } inline int Instrument::get_midi_out_note() const { return __midi_out_note; } inline void Instrument::set_midi_out_note( int note ) { if ( ( note >= MIDI_OUT_NOTE_MIN ) && ( note <= MIDI_OUT_NOTE_MAX ) ) { __midi_out_note = note; } else { ERRORLOG( QString( "midi out note %1 out of bounds" ).arg( note ) ); } } inline void Instrument::set_muted( bool muted ) { __muted = muted; } inline bool Instrument::is_muted() const { return __muted; } inline void Instrument::set_pan_l( float val ) { __pan_l = val; } inline float Instrument::get_pan_l() const { return __pan_l; } inline void Instrument::set_pan_r( float val ) { __pan_r = val; } inline float Instrument::get_pan_r() const { return __pan_r; } inline void Instrument::set_gain( float gain ) { __gain = gain; } inline float Instrument::get_gain() const { return __gain; } inline void Instrument::set_volume( float volume ) { __volume = volume; } inline float Instrument::get_volume() const { return __volume; } inline void Instrument::set_filter_active( bool active ) { __filter_active = active; } inline bool Instrument::is_filter_active() const { return __filter_active; } inline void Instrument::set_filter_resonance( float val ) { __filter_resonance = val; } inline float Instrument::get_filter_resonance() const { return __filter_resonance; } inline void Instrument::set_filter_cutoff( float val ) { __filter_cutoff = val; } inline float Instrument::get_filter_cutoff() const { return __filter_cutoff; } inline void Instrument::set_peak_l( float val ) { __peak_l = val; } inline float Instrument::get_peak_l() const { return __peak_l; } inline void Instrument::set_peak_r( float val ) { __peak_r = val; } inline float Instrument::get_peak_r() const { return __peak_r; } inline void Instrument::set_fx_level( float level, int index ) { __fx_level[index] = level; } inline float Instrument::get_fx_level( int index ) const { return __fx_level[index]; } inline void Instrument::set_random_pitch_factor( float val ) { __random_pitch_factor = val; } inline float Instrument::get_random_pitch_factor() const { return __random_pitch_factor; } inline void Instrument::set_active( bool active ) { __active = active; } inline bool Instrument::is_active() const { return __active; } inline void Instrument::set_soloed( bool soloed ) { __soloed = soloed; } inline bool Instrument::is_soloed() const { return __soloed; } inline void Instrument::enqueue() { __queued++; } inline void Instrument::dequeue() { assert( __queued > 0 ); __queued--; } inline bool Instrument::is_queued() const { return ( __queued > 0 ); } inline void Instrument::set_stop_notes( bool stopnotes ) { __stop_notes = stopnotes; } inline bool Instrument::is_stop_notes() const { return __stop_notes; } inline InstrumentLayer* Instrument::operator[]( int idx ) { assert( idx>=0 && idx =0 && idx =0 && idx Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_INSTRUMENT_LAYER_H #define H2C_INSTRUMENT_LAYER_H #include namespace H2Core { class XMLNode; class Sample; /** * InstrumentLayer is part of an instrument *
    each layer has it's own : *
    gain which is the ration between the input sample and the output signal, *
    pitch wich allows you to play the sample at a faster or lower frequency, *
    start velocity and end velocity which allows you to chose between a layer or another within an instrument * by changing the velocity of the played note. so the only layer of an instrument should start at 0.0 and end at 1.0. */ class InstrumentLayer : public H2Core::Object { H2_OBJECT public: /** constructor * \param sample the sample to use * */ InstrumentLayer( Sample* sample ); /** copy constructor, will be initialized with an empty sample * \param other the instrument layer to copy from */ InstrumentLayer( InstrumentLayer* other ); /** copy constructor * \param other the instrument layer to copy from * \param sample the sample to use */ InstrumentLayer( InstrumentLayer* other, Sample* sample ); /** destructor */ ~InstrumentLayer(); /** set the gain of the layer */ void set_gain( float gain ); /** get the gain of the layer */ float get_gain() const; /** set the pitch of the layer */ void set_pitch( float pitch ); /** get the pitch of the layer */ float get_pitch() const; /** set the start ivelocity of the layer */ void set_start_velocity( float start ); /** get the start velocity of the layer */ float get_start_velocity() const; /** set the end velocity of the layer */ void set_end_velocity( float end ); /** get the end velocity of the layer */ float get_end_velocity() const; /** set the sample of the layer */ void set_sample( Sample* sample ); /** get the sample of the layer */ Sample* get_sample() const; /** * load the sample data */ void load_sample(); /* * unload sample and replace it with an empty one */ void unload_sample(); /** * save the intrument layer within the given XMLNode * \param node the XMLNode to feed */ void save_to( XMLNode* node ); /** * load an instrument layer from an XMLNode * \param node the XMLDode to read from * \param dk_path the directory holding the drumkit data * \return a new InstrumentLayer instance */ static InstrumentLayer* load_from( XMLNode* node, const QString& dk_path ); private: float __gain; ///< ratio between the input sample and the output signal, 1.0 by default float __pitch; ///< the frequency of the sample, 0.0 by default which means output pitch is the same as input pitch float __start_velocity; ///< the start velocity of the sample, 0.0 by default float __end_velocity; ///< the end velocity of the sample, 1.0 by default Sample* __sample; ///< the underlaying sample }; // DEFINITIONS inline void InstrumentLayer::set_gain( float gain ) { __gain = gain; } inline float InstrumentLayer::get_gain() const { return __gain; } inline void InstrumentLayer::set_pitch( float pitch ) { __pitch = pitch; } inline float InstrumentLayer::get_pitch() const { return __pitch; } inline void InstrumentLayer::set_start_velocity( float start ) { __start_velocity = start; } inline float InstrumentLayer::get_start_velocity() const { return __start_velocity; } inline void InstrumentLayer::set_end_velocity( float end ) { __end_velocity = end; } inline float InstrumentLayer::get_end_velocity() const { return __end_velocity; } inline void InstrumentLayer::set_sample( Sample* sample ) { __sample = sample; } inline Sample* InstrumentLayer::get_sample() const { return __sample; } }; #endif // H2C_INSTRUMENT_LAYER_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/basics/instrument_list.h000066400000000000000000000103561211146647700262200ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_INSTRUMENT_LIST_H #define H2C_INSTRUMENT_LIST_H #include #include namespace H2Core { class XMLNode; class Instrument; /** * InstrumentList is a collection of instruments used within a song, a drumkit, ... */ class InstrumentList : public H2Core::Object { H2_OBJECT public: /** constructor */ InstrumentList(); /** destructor */ ~InstrumentList(); /** * copy constructor * \param other */ InstrumentList( InstrumentList* other ); /** returns the numbers of instruments */ int size() const; /** * add an instrument to the list * \param instrument a pointer to the instrument to add */ void operator<<( Instrument* instrument ); /** * get an instrument from the list * \param idx the index to get the instrument from */ Instrument* operator[]( int idx ); /** * add an instrument to the list * \param instrument a pointer to the instrument to add */ void add( Instrument* instrument ); /** * insert an instrument into the list * \param idx the index to insert the instrument at * \param instrument a pointer to the instrument to add */ void insert( int idx, Instrument* instrument ); /** * get an instrument from the list * \param idx the index to get the instrument from */ Instrument* get( int idx ); /** * remove the instrument at a given index, does not delete it * \param idx the index * \return a pointer to the removed instrument */ Instrument* del( int idx ); /** * remove an instrument from the list, does not delete it * \param instrument the instrument to be removed * \return a pointer to the removed instrument, 0 if not found */ Instrument* del( Instrument* instrument ); /** * get the index of an instrument within the instruments * \param instrument a pointer to the instrument to find * \return -1 if not found */ int index( Instrument* instrument ); /** * find an instrument within the instruments * \param id the id of the instrument to find * \return 0 if not found */ Instrument* find( const int i ); /** * find an instrument within the instruments * \param name the name of the instrument to find * \return 0 if not found */ Instrument* find( const QString& name ); /** * swap the instruments of two different indexes * \param idx_a the first index * \param idx_b the second index */ void swap( int idx_a, int idx_b ); /** * move an instrument from a position to another * \param idx_a the start index * \param idx_b the finish index */ void move( int idx_a, int idx_b ); /* * load instrument samples */ void load_samples(); /* * unload instrument samples */ void unload_samples(); /* * save the intrument list within the given XMLNode * \param node the XMLNode to feed */ void save_to( XMLNode* node ); /** * load an instrument list from an XMLNode * \param node the XMLDode to read from * \param dk_path the directory holding the drumkit data * \return a new InstrumentList instance */ static InstrumentList* load_from( XMLNode* node, const QString& dk_path, const QString& dk_name ); private: std::vector __instruments; ///< the list of instruments }; // DEFINITIONS inline int InstrumentList::size() const { return __instruments.size(); } }; #endif // H2C_INSTRUMENT_LIST_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/basics/note.h000066400000000000000000000323301211146647700237160ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_NOTE_H #define H2C_NOTE_H #include #include #define KEY_MIN 0 #define KEY_MAX 11 #define OCTAVE_MIN -3 #define OCTAVE_MAX 3 #define OCTAVE_OFFSET 3 #define OCTAVE_DEFAULT 0 #define KEYS_PER_OCTAVE 12 #define MIDI_MIDDLE_C 60 #define MIDI_FACTOR 127 #define VELOCITY_MIN 0.0f #define VELOCITY_MAX 1.0f #define PAN_MIN 0.0f #define PAN_MAX 0.5f #define LEAD_LAG_MIN -1.0f #define LEAD_LAG_MAX 1.0f namespace H2Core { class XMLNode; class ADSR; class Instrument; class InstrumentList; /** * A note plays an associated instrument with a velocity left and right pan */ class Note : public H2Core::Object { H2_OBJECT public: /** possible keys */ enum Key { C=KEY_MIN, Cs, D, Ef, E, F, Fs, G, Af, A, Bf, B }; /** possible octaves */ enum Octave { P8Z=-3, P8Y=-2, P8X=-1, P8=OCTAVE_DEFAULT, P8A=1, P8B=2, P8C=3 }; /** * constructor * \param instrument the instrument played by this note * \param position the position of the note within the pattern * \param velocity it's velocity * \param pan_l left pan * \param pan_r right pan * \param length it's length * \param pitch it's pitch */ Note( Instrument* instrument, int position, float velocity, float pan_l, float pan_r, int length, float pitch ); /** * copy constructor with an optional parameter * \param instrument, if set will be used as note instrument */ Note( Note* other, Instrument* instrument=0 ); /** destructor */ ~Note(); /* * save the note within the given XMLNode * \param node the XMLNode to feed */ void save_to( XMLNode* node ); /** * load a note from an XMLNode * \param node the XMLDode to read from * \param instruments the current instrument list to search instrument into * \return a new Note instance */ static Note* load_from( XMLNode* node, InstrumentList* instruments ); /** output details through logger with DEBUG severity */ void dump(); /** * find the corresponding instrument and point to it, or an empty instrument * \param instruments the list of instrument to look into */ void map_instrument( InstrumentList* instruments ); /** __instrument accessor */ Instrument* get_instrument(); /** return true if __instrument is set */ bool has_instrument() const; /** * __instrument_id setter * \param value the new value */ void set_instrument_id( int value ); /** __instrument_id accessor */ int get_instrument_id() const; /** * __position setter * \param value the new value */ void set_position( int value ); /** __position accessor */ int get_position() const; /** * __velocity setter * \param value the new value */ void set_velocity( float value ); /** __velocity accessor */ float get_velocity() const; /** * __pan_l setter * \param value the new value */ void set_pan_l( float value ); /** __pan_l accessor */ float get_pan_l() const; /** * __pan_r setter * \param value the new value */ void set_pan_r( float value ); /** __pan_r accessor */ float get_pan_r() const; /** * __lead_lag setter * \param value the new value */ void set_lead_lag( float value ); /** __lead_lag accessor */ float get_lead_lag() const; /** * __length setter * \param value the new value */ void set_length( int value ); /** __length accessor */ int get_length() const; /** * __pitch setter * \param value the new value */ void set_pitch( float value ); /** __pitch accessor */ float get_pitch() const; /** * __note_off setter * \param value the new value */ void set_note_off( bool value ); /** __note_off accessor */ bool get_note_off() const; /** __midi_msg accessor */ int get_midi_msg() const; /** * __pattern_idx setter * \param value the new value */ void set_pattern_idx( int value ); /** __pattern_idx accessor */ int get_pattern_idx() const; /** * __just_recorder setter * \param value the new value */ void set_just_recorded( bool value ); /** __just_recorder accessor */ bool get_just_recorded() const; /** __sample_position accessor */ float get_sample_position() const; /** * __humanize_delay setter * \param value the new value */ void set_humanize_delay( int value ); /** __humanize_delay accessor */ int get_humanize_delay() const; /** __cut_off accessor */ float get_cut_off() const; /** __resonance accessor */ float get_resonance() const; /** __bpfb_l accessor */ float get_bpfb_l() const; /** __bpfb_r accessor */ float get_bpfb_r() const; /** __lpfb_l accessor */ float get_lpfb_l() const; /** __lpfb_r accessor */ float get_lpfb_r() const; /** __key accessor */ Key get_key(); /** __octave accessor */ Octave get_octave(); /** return scaled key for midi output, !!! DO NOT CHECK IF INSTRUMENT IS SET !!! */ int get_midi_key() const; /** __midi_velocity accessor (__velocity*MIDI_FACTOR) */ int get_midi_velocity() const; /** __note_key_pitch accessor (__octave * KEYS_PER_OCTAVE + __key) */ float get_notekey_pitch() const; //* returns octave*12+key+pitch */ float get_total_pitch() const; /** return a string representation of key-actove */ QString key_to_string(); /** * parse str and set __key and __octave * \param str the string to be parsed */ void set_key_octave( const QString& str ); /** * set __key and __octave only if within acceptable range * \param key the key to set * \param octave the octave to be set */ void set_key_octave( Key key, Octave octave ); /** * set __key, __octave and __midi_msg only if within acceptable range * \param key the key to set * \param octave the octave to be set */ void set_midi_info( Key key, Octave octave, int msg ); /** get the ADSR of the note */ ADSR* get_adsr() const; /** call release on adsr */ //float release_adsr() const { return __adsr->release(); } /** call get value on adsr */ //float get_adsr_value(float v) const { return __adsr->get_value( v ); } /** * update sample_position with increment * \param incr the value to add to current sample position */ float update_sample_position( float incr ); /** return true if instrument, key and octave matches with internal * \param instrument the instrument to match with __instrument * \param key the key to match with __key * \param octave the octave to match with __octave */ bool match( Instrument* instrument, Key key, Octave octave ) const; /** * compute left and right output based on filters * \param val_l the left channel value * \param val_r the right channel value */ void compute_lr_values( float* val_l, float* val_r ); private: Instrument* __instrument; ///< the instrument to be played by this note int __instrument_id; ///< the id of the instrument played by this note int __position; ///< note position inside the pattern float __velocity; ///< velocity (intensity) of the note [0;1] float __pan_l; ///< pan of the note (left volume) [0;0.5] float __pan_r; ///< pan of the note (right volume) [0;0.5] int __length; ///< the length of the note float __pitch; ///< the frequency of the note Key __key; ///< the key, [0;11]==[C;B] Octave __octave; ///< the octave [-3;3] ADSR* __adsr; ///< attack decay sustain release float __lead_lag; ///< lead or lag offset of the note float __cut_off; ///< filter cutoff [0;1] float __resonance; ///< filter resonant frequency [0;1] int __humanize_delay; ///< used in "humanize" function float __sample_position; ///< place marker for overlapping process() cycles float __bpfb_l; ///< left band pass filter buffer float __bpfb_r; ///< right band pass filter buffer float __lpfb_l; ///< left low pass filter buffer float __lpfb_r; ///< right low pass filter buffer int __pattern_idx; ///< index of the pattern holding this note for undo actions int __midi_msg; ///< TODO bool __note_off; ///< note type on|off bool __just_recorded; ///< used in record+delete static const char* __key_str[]; ///< used to build QString from __key an __octave }; // DEFINITIONS inline ADSR* Note::get_adsr() const { return __adsr; } inline Instrument* Note::get_instrument() { return __instrument; } inline bool Note::has_instrument() const { return __instrument!=0; } inline void Note::set_instrument_id( int value ) { __instrument_id = value; } inline int Note::get_instrument_id() const { return __instrument_id; } inline void Note::set_position( int value ) { __position = value; } inline int Note::get_position() const { return __position; } inline float Note::get_velocity() const { return __velocity; } inline float Note::get_pan_l() const { return __pan_l; } inline float Note::get_pan_r() const { return __pan_r; } inline float Note::get_lead_lag() const { return __lead_lag; } inline void Note::set_length( int value ) { __length = value; } inline int Note::get_length() const { return __length; } inline void Note::set_pitch( float value ) { __pitch = value; } inline float Note::get_pitch() const { return __pitch; } inline void Note::set_note_off( bool value ) { __note_off = value; } inline bool Note::get_note_off() const { return __note_off; } inline int Note::get_midi_msg() const { return __midi_msg; } inline void Note::set_pattern_idx( int value ) { __pattern_idx = value; } inline int Note::get_pattern_idx() const { return __pattern_idx; } inline void Note::set_just_recorded( bool value ) { __just_recorded = value; } inline bool Note::get_just_recorded() const { return __just_recorded; } inline float Note::get_sample_position() const { return __sample_position; } inline void Note::set_humanize_delay( int value ) { __humanize_delay = value; } inline int Note::get_humanize_delay() const { return __humanize_delay; } inline float Note::get_cut_off() const { return __cut_off; } inline float Note::get_resonance() const { return __resonance; } inline float Note::get_bpfb_l() const { return __bpfb_l; } inline float Note::get_bpfb_r() const { return __bpfb_r; } inline float Note::get_lpfb_l() const { return __lpfb_l; } inline float Note::get_lpfb_r() const { return __lpfb_r; } inline Note::Key Note::get_key() { return __key; } inline Note::Octave Note::get_octave() { return __octave; } inline int Note::get_midi_key() const { /* TODO ??? if( !has_instrument() ) { return (__octave + OCTAVE_OFFSET ) * KEYS_PER_OCTAVE + __key; } */ return ( __octave + OCTAVE_OFFSET ) * KEYS_PER_OCTAVE + __key + __instrument->get_midi_out_note()-MIDI_MIDDLE_C; } inline int Note::get_midi_velocity() const { return __velocity * MIDI_FACTOR; } inline float Note::get_notekey_pitch() const { return __octave * KEYS_PER_OCTAVE + __key; } inline float Note::get_total_pitch() const { return __octave * KEYS_PER_OCTAVE + __key + __pitch; } inline void Note::set_key_octave( Key key, Octave octave ) { if( key>=KEY_MIN && key<=KEY_MAX ) __key = key; if( octave>=OCTAVE_MIN && octave<=OCTAVE_MAX ) __octave = octave; } inline void Note::set_midi_info( Key key, Octave octave, int msg ) { if( key>=KEY_MIN && key<=KEY_MAX ) __key = key; if( octave>=OCTAVE_MIN && octave<=OCTAVE_MAX ) __octave = octave; __midi_msg = msg; } inline float Note::update_sample_position( float incr ) { __sample_position += incr; return __sample_position; } inline bool Note::match( Instrument* instrument, Key key, Octave octave ) const { return ( ( __instrument==instrument ) && ( __key==key ) && ( __octave==octave ) ); } inline void Note::compute_lr_values( float* val_l, float* val_r ) { /* TODO ??? if( !has_instrument() ) { *val_l = 0.0f; *val_r = 0.0f; return; } */ float cut_off = __instrument->get_filter_cutoff(); float resonance = __instrument->get_filter_resonance(); __bpfb_l = resonance * __bpfb_l + cut_off * ( *val_l - __lpfb_l ); __lpfb_l += cut_off * __bpfb_l; __bpfb_r = resonance * __bpfb_r + cut_off * ( *val_r - __lpfb_r ); __lpfb_r += cut_off * __bpfb_r; *val_l = __lpfb_l; *val_r = __lpfb_r; } }; #endif // H2C_NOTE_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/basics/pattern.h000066400000000000000000000234661211146647700244400ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_PATTERN_H #define H2C_PATTERN_H #include #include #include namespace H2Core { class XMLNode; class Instrument; class InstrumentList; class PatternList; /** Pattern class is a Note container */ class Pattern : public H2Core::Object { H2_OBJECT public: ///< multimap note type typedef std::multimap notes_t; ///< multimap note iterator type typedef notes_t::iterator notes_it_t; ///< multimap note const iterator type typedef notes_t::const_iterator notes_cst_it_t; ///< note set type; typedef std::set virtual_patterns_t; ///< note set iterator type; typedef virtual_patterns_t::iterator virtual_patterns_it_t; ///< note set const iterator type; typedef virtual_patterns_t::const_iterator virtual_patterns_cst_it_t; /** * constructor * \param name the name of the pattern * \param category the name of the pattern * \param length the length of the pattern */ Pattern( const QString& name="Pattern", const QString& info="", const QString& category="not_categorized", int length=MAX_NOTES ); /** copy constructor */ Pattern( Pattern* other ); /** destructor */ ~Pattern(); /** * load a pattern from a file * \param pattern_path the path to the file to load the pattern from * \param instruments the current instrument list to search instrument into */ static Pattern* load_file( const QString& pattern_path, InstrumentList* instruments ); /** * save a pattern into an xml file * \param pattern_path the path to save the pattern into * \param overwrite allows to write over existing pattern file * \return true on success */ bool save_file( const QString& pattern_path, bool overwrite=false ); ///< set the name of the pattern void set_name( const QString& name ); ///< get the name of the pattern const QString& get_name() const; ///< set the category of the pattern void set_category( const QString& category ); ///< set the info of the pattern void set_info( const QString& info ); ///< get the info of the pattern const QString& get_info() const; ///< get the category of the pattern const QString& get_category() const; ///< set the length of the pattern void set_length( int length ); ///< get the length of the pattern int get_length() const; ///< get the note multimap const notes_t* get_notes() const; ///< get the virtual pattern set const virtual_patterns_t* get_virtual_patterns() const; ///< get the flattened virtual pattern set const virtual_patterns_t* get_flattened_virtual_patterns() const; /** * insert a new note within __notes * \param note the note to be inserted * \param position if not -1 will be used as std::pair first element, otherwise note position will be used */ void insert_note( Note* note, int position=-1 ); /** * search for a note at a given index within __notes wich correspond to the given arguments * \param idx_a the first __notes index to search in * \param idx_b the second __notes index to search in, will be omitted if is -1 * \param instrument the instrument the note should be playing * \param strict if set to false, will search for a note around the given idx * \return the note if found, 0 otherwise */ Note* find_note( int idx_a, int idx_b, Instrument* instrument, bool strict=true ); /** * search for a note at a given index within __notes wich correspond to the given arguments * \param idx_a the first __notes index to search in * \param idx_b the second __notes index to search in, will be omitted if is -1 * \param instrument the instrument the note should be playing * \param key the key that should be set to the note * \param octave the octave that should be set to the note * \param strict if set to false, will search for a note around the given idx * \return the note if found, 0 otherwise */ Note* find_note( int idx_a, int idx_b, Instrument* instrument, Note::Key key, Note::Octave octave, bool strict=true ); /** * removes a given note from __notes, it's not deleted * \param note the note to be removed */ void remove_note( Note* note ); /** * check if this pattern contains a note referencing the given instrument * \param instr the instrument */ bool references( Instrument* instr ); /** * delete the notes referencing the given instrument * The function is thread safe (it locks the audio data while deleting notes) * \param instr the instrument */ void purge_instrument( Instrument* instr ); /** * mark all notes as old */ void set_to_old(); ///< return true if __virtual_patterns is empty bool virtual_patterns_empty() const; ///< clear __virtual_patterns void virtual_patterns_clear(); /** * add a pattern to __virtual_patterns * \param pattern the pattern to add */ void virtual_patterns_add( Pattern* pattern ); /** * remove a pattern from virtual_pattern set, flattened virtual patterns have to be rebuilt * */ void virtual_patterns_del( Pattern* pattern ); ///< clear flattened_virtual_patterns void flattened_virtual_patterns_clear(); /** * compute virtual_pattern_transitive_closure_set based on virtual_pattern_transitive_closure_set * virtual_pattern_transitive_closure_set must have been cleared before which is the case is called * from PatternList::compute_flattened_virtual_patterns */ void flattened_virtual_patterns_compute(); /** * add content of __flatteened_virtual_patterns into patterns * \param patterns the pattern list to feed */ void extand_with_flattened_virtual_patterns( PatternList* patterns ); private: int __length; ///< the length of the pattern QString __name; ///< the name of thepattern QString __category; ///< the category of the pattern QString __info; ///< a description of the pattern notes_t __notes; ///< a multimap (hash with possible multiple values for one key) of note virtual_patterns_t __virtual_patterns; ///< a list of patterns directly referenced by this one virtual_patterns_t __flattened_virtual_patterns; ///< the complete list of virtual patterns /** * save the pattern within the given XMLNode * \param node the XMLNode to feed */ void save_to( XMLNode* node ); /** * load a pattern from an XMLNode * \param node the XMLDode to read from * \param instruments the current instrument list to search instrument into * \return a new Pattern instance */ static Pattern* load_from( XMLNode* node, InstrumentList* instruments ); }; #define FOREACH_NOTE_CST_IT_BEGIN_END(_notes,_it) \ for( Pattern::notes_cst_it_t (_it)=(_notes)->begin(); (_it)!=(_notes)->end(); (_it)++ ) #define FOREACH_NOTE_CST_IT_BOUND(_notes,_it,_bound) \ for( Pattern::notes_cst_it_t (_it)=(_notes)->lower_bound((_bound)); (_it)!=(_notes)->upper_bound((_bound)); (_it)++ ) #define FOREACH_NOTE_IT_BEGIN_END(_notes,_it) \ for( Pattern::notes_it_t (_it)=(_notes)->begin(); (_it)!=(_notes)->end(); (_it)++ ) #define FOREACH_NOTE_IT_BOUND(_notes,_it,_bound) \ for( Pattern::notes_it_t (_it)=(_notes)->lower_bound((_bound)); (_it)!=(_notes)->upper_bound((_bound)); (_it)++ ) // DEFINITIONS inline void Pattern::set_name( const QString& name ) { __name = name; } inline const QString& Pattern::get_name() const { return __name; } inline void Pattern::set_info( const QString& info ) { __info = info; } inline const QString& Pattern::get_info() const { return __info; } inline void Pattern::set_category( const QString& category ) { __category = category; } inline const QString& Pattern::get_category() const { return __category; } inline void Pattern::set_length( int length ) { __length = length; } inline int Pattern::get_length() const { return __length; } inline const Pattern::notes_t* Pattern::get_notes() const { return &__notes; } inline const Pattern::virtual_patterns_t* Pattern::get_virtual_patterns() const { return &__virtual_patterns; } inline const Pattern::virtual_patterns_t* Pattern::get_flattened_virtual_patterns() const { return &__flattened_virtual_patterns; } inline void Pattern::insert_note( Note* note, int position ) { __notes.insert( std::make_pair( ( position==-1 ? note->get_position() : position ), note ) ); } inline bool Pattern::virtual_patterns_empty() const { return __virtual_patterns.empty(); } inline void Pattern::virtual_patterns_clear() { __virtual_patterns.clear(); } inline void Pattern::virtual_patterns_add( Pattern* pattern ) { __virtual_patterns.insert( pattern ); } inline void Pattern::virtual_patterns_del( Pattern* pattern ) { virtual_patterns_cst_it_t it = __virtual_patterns.find( pattern ); if ( it!=__virtual_patterns.end() ) __virtual_patterns.erase( it ); } inline void Pattern::flattened_virtual_patterns_clear() { __flattened_virtual_patterns.clear(); } }; #endif // H2C_PATTERN_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/basics/pattern_list.h000066400000000000000000000077641211146647700254760ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_PATTERN_LIST_H #define H2C_PATTERN_LIST_H #include #include namespace H2Core { class Pattern; /** * PatternList is a collection of patterns */ class PatternList : public H2Core::Object { H2_OBJECT public: /** constructor */ PatternList(); /** destructor */ ~PatternList(); /** * copy constructor * \param other */ PatternList( PatternList* other ); /** returns the numbers of patterns */ int size() const; /** * add a pattern to the list * \param pattern a pointer to the pattern to add */ void operator<<( Pattern* new_pattern ); /** * get a pattern from the list * \param idx the index to get the pattern from */ Pattern* operator[]( int idx ); /** * add a pattern to the list * \param pattern a pointer to the pattern to add */ void add( Pattern* pattern ); /** * insert a pattern into the list * \param idx the index to insert the pattern at * \param pattern a pointer to the pattern to add */ void insert( int idx, Pattern* pattern ); /** * get a pattern from the list * \param idx the index to get the pattern from */ Pattern* get( int idx ); /** * remove the pattern at a given index, does not delete it * \param idx the index * \return a pointer to the removed pattern */ Pattern* del( int idx ); /** * remove a pattern from the list, does not delete it * \param pattern the pattern to be removed * \return a pointer to the removed pattern, 0 if not found */ Pattern* del( Pattern* pattern ); /** * get the index of the pattern within the patterns * \param pattern a pointer to the pattern to find * \return -1 if not found */ int index( Pattern* pattern ); /** * replace the pattern at a given index with a new one * \param idx the index * \param pattern the new pattern to insert * \return a pointer to the removed pattern, 0 if index out of bounds */ Pattern* replace( int idx, Pattern* pattern ); /** * empty the pattern list */ void clear(); /** * mark all patterns as old */ void set_to_old(); /** * find a pattern within the patterns * \param name the name of the pattern to find * \return 0 if not found */ Pattern* find( const QString& name ); /** * swap the patterns of two different indexes * \param idx_a the first index * \param idx_b the second index */ void swap( int idx_a, int idx_b ); /** * move a pattern from a position to another * \param idx_a the start index * \param idx_b the finish index */ void move( int idx_a, int idx_b ); /** * call compute_flattened_virtual_patterns on each pattern */ void flattened_virtual_patterns_compute(); /** * call del_virtual_pattern on each pattern * \param pattern the pattern to remove where it's found */ void virtual_pattern_del( Pattern* pattern ); private: std::vector __patterns; ///< the list of patterns }; // DEFINITIONS inline int PatternList::size() const { return __patterns.size(); } inline void PatternList::clear() { __patterns.clear(); } }; #endif // H2C_PATTERN_LIST_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/basics/sample.h000066400000000000000000000252031211146647700242330ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_SAMPLE_H #define H2C_SAMPLE_H #include #include #include namespace H2Core { /** * A container for a sample, beeing able to apply modifications on it */ class Sample : public H2Core::Object { H2_OBJECT public: /** an envelope point within a frame */ class EnvelopePoint { public: int frame; ///< frame index int value; ///< value /** to be able to sort velocity points vectors */ struct Comparator { bool operator()( Sample::EnvelopePoint const& a, Sample::EnvelopePoint const& b ) { return a.frame < b.frame; } }; /** default constructor */ EnvelopePoint() : frame( 0 ), value( 0 ) { }; /** * constructor * \param f the frame index * \param v the value associated with the frame */ EnvelopePoint( int f, int v ) : frame( f ), value( v ) { }; /** copy constructor */ EnvelopePoint( EnvelopePoint* other ) { frame = other->frame; value = other->value; }; }; /** define the type used to store pan enveloppe points */ typedef std::vector PanEnvelope; /** define the type used to store velocity enveloppe points */ typedef std::vector VelocityEnvelope; /** set of loop configuration flags */ class Loops { public: /** possible sample editing loop mode */ enum LoopMode { FORWARD=0, REVERSE, PINGPONG }; int start_frame; ///< the frame index where to start the new sample from int loop_frame; ///< the frame index where to start the loop from int end_frame; ///< the frame index where to end the new sample to int count; ///< the counts of loops to apply LoopMode mode; ///< one of the possible loop modes /** constructor */ Loops() : start_frame( 0 ), loop_frame( 0 ), end_frame( 0 ), count( 0 ), mode( FORWARD ) { }; /** copy constructor */ Loops( const Loops* other ) : start_frame( other->start_frame ), loop_frame( other->loop_frame ), end_frame( other->end_frame ), count( other->count ), mode( other->mode ) { }; /** equal to operator */ bool operator ==( const Loops& b ) const { return ( start_frame==b.start_frame && loop_frame==b.loop_frame && end_frame==b.end_frame && count==b.count && mode==b.mode ); } }; /** set of rubberband configuration flags */ class Rubberband { public: bool use; ///< is rubberband enabled float divider; ///< TODO should be ratio : desired time ratio float pitch; ///< desired pitch int c_settings; ///< TODO should be crispness, see rubberband -h /** constructor */ Rubberband() : use( false ), divider ( 1.0 ), pitch( 1.0 ), c_settings( 4 ) { }; /** copy constructor */ Rubberband( const Rubberband* other ) : use( other->use ), divider ( other->divider ), c_settings( other->c_settings ), pitch( other->pitch ) { }; /** equal to operator */ bool operator ==( const Rubberband& b ) const { return ( use==b.use && divider==b.divider && c_settings==b.c_settings && pitch==b.pitch ); } }; /** * Sample constructor * \param filepath the path to the sample * \param frames the number of frames per channel in the sample * \param sample_rate the sample rate of the sample * \param data_l the left channel array of data * \param data_l the right channel array of data */ Sample( const QString& filepath, int frames=0, int sample_rate=0, float* data_l=0, float* data_r=0 ); /** copy constructor */ Sample( Sample* other ); /** destructor */ ~Sample(); /** * write sample to a file * \param path the path to write the sample to * \format the format of the output */ bool write( const QString& path, int format= ( SF_FORMAT_WAV|SF_FORMAT_PCM_16 ) ); /** * load a sample from a file * \param filepath the file to load audio data from */ static Sample* load( const QString& filepath ); /** * load a sample from a file and apply the transformations to the sample data * \param filepath the file to load audio data from * \param loops transformation parameters * \param rubber band transformation parameters * \param velocity envelope points * \param pan envelope points */ static Sample* load( const QString& filepath, const Loops& loops, const Rubberband& rubber, const VelocityEnvelope& velocity, const PanEnvelope& pan ); /** * load sample data */ void load(); /** * unload sample data */ void unload(); /** * apply the transformations to the sample data * \param loops transformation parameters * \param rubber band transformation parameters * \param velocity envelope points * \param pan envelope points */ void apply( const Loops& loops, const Rubberband& rubber, const VelocityEnvelope& velocity, const PanEnvelope& pan ); /** * aplly loop transformation to the sample * \param lo loops parameters */ bool apply_loops( const Loops& lo ); /** * aplly velocity transformation to the sample * \param v the velocity vector */ void apply_velocity( const VelocityEnvelope& v ); /** * aplly velocity transformation to the sample * \param p the pan vector */ void apply_pan( const PanEnvelope& p ); /** * aplly rubberband transformation to the sample * \param r rubberband parameters */ void apply_rubberband( const Rubberband& rb ); /** * call rubberband cli to modify the sample * \param r rubberband parameters */ bool exec_rubberband_cli( const Rubberband& rb ); /** return true if both data channels are null pointers */ bool is_empty() const; /** __filepath accessor */ const QString get_filepath() const; /** return filename part of __filepath */ const QString get_filename() const; /** set the filename part of __filepath*/ void set_filename( const QString& filename ); /** * __frames setter * \parama value the new value for __frames */ void set_frames( int value ); /** __frames accessor */ int get_frames() const; /** * __sample_rate setter * \parama value the new value for __sample_rate */ void set_sample_rate( int value ); /** __sample_rate accessor */ int get_sample_rate() const; /** return sample duration in seconds */ double get_sample_duration( ) const; /** return data size */ int get_size() const; /** __data_l accessor */ float* get_data_l() const; /** __data_r accessor */ float* get_data_r() const; /** * __is_modified setter * \parama value the new value for __is_modified */ void set_is_modified( bool value ); /** __is_modified accessor */ bool get_is_modified() const; /** __pan_envelope accessor */ PanEnvelope* get_pan_envelope(); /** __velocity_envelope accessor */ VelocityEnvelope* get_velocity_envelope(); /** __loops parameters accessor */ Loops get_loops() const; /** __rubberband parameters accessor */ Rubberband get_rubberband() const; /** * parse the given string and rturn the corresponding lopp_mode * \param string the loop mode text to be parsed */ static Loops::LoopMode parse_loop_mode( const QString& string ); /** return __loops.mode as a string */ QString get_loop_mode_string() const; private: QString __filepath; ///< filepath of the sample int __frames; ///< number of frames in this sample int __sample_rate; ///< samplerate for this sample float* __data_l; ///< left channel data float* __data_r; ///< right channel data bool __is_modified; ///< true if sample is modified PanEnvelope __pan_envelope; ///< pan envelope vector VelocityEnvelope __velocity_envelope; ///< velocity envelope vector Loops __loops; ///< set of loop parameters Rubberband __rubberband; ///< set of rubberband parameters /** loop modes string */ static const char* __loop_modes[]; }; // DEFINITIONS inline void Sample::unload() { if( __data_l ) delete __data_l; if( __data_r ) delete __data_r; __frames = __sample_rate = 0; __data_l = __data_r = 0; // __is_modified = false; leave this unchanged as pan, velocity, loop and rubberband are kept unchanged } inline bool Sample::is_empty() const { return ( __data_l==__data_r==0 ); } inline const QString Sample::get_filepath() const { return __filepath; } inline const QString Sample::get_filename() const { return __filepath.section( "/", -1 ); } inline void Sample::set_filename( const QString& filename ) { __filepath.chop( __filepath.section( "/", -1 ).length()); __filepath.append( filename ); } inline void Sample::Sample::set_frames( int frames ) { __frames = frames; } inline int Sample::get_frames() const { return __frames; } inline int Sample::get_sample_rate() const { return __sample_rate; } inline double Sample::get_sample_duration() const { return ( double )__frames / ( double )__sample_rate; } inline int Sample::get_size() const { return __frames * sizeof( float ) * 2; } inline float* Sample::get_data_l() const { return __data_l; } inline float* Sample::get_data_r() const { return __data_r; } inline void Sample::set_is_modified( bool is_modified ) { __is_modified = is_modified; } inline bool Sample::get_is_modified() const { return __is_modified; } inline QString Sample::get_loop_mode_string() const { return __loop_modes[__loops.mode]; } inline Sample::PanEnvelope* Sample::get_pan_envelope() { return &__pan_envelope; } inline Sample::VelocityEnvelope* Sample::get_velocity_envelope() { return &__velocity_envelope; } inline Sample::Loops Sample::get_loops() const { return __loops; } inline Sample::Rubberband Sample::get_rubberband() const { return __rubberband; } }; #endif // H2C_SAMPLE_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/basics/song.h000066400000000000000000000117271211146647700237260ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SONG_H #define SONG_H #include #include #include #include #include class TiXmlNode; namespace H2Core { class ADSR; class Sample; class Note; class Instrument; class InstrumentList; class Pattern; class Song; class PatternList; /** \ingroup H2CORE \brief Song class */ class Song : public H2Core::Object { H2_OBJECT public: enum SongMode { PATTERN_MODE, SONG_MODE }; bool __is_muted; unsigned __resolution; ///< Resolution of the song (number of ticks per quarter) float __bpm; ///< Beats per minute bool __is_modified; QString __name; ///< song name QString __author; ///< author of the song QString __license; ///< license of the song /* // internal delay FX bool m_bDelayFXEnabled; float m_fDelayFXWetLevel; float m_fDelayFXFeedback; unsigned m_nDelayFXTime; //~ internal delay fx */ static Song* get_empty_song(); static Song* get_default_song(); Song( const QString& name, const QString& author, float bpm, float volume ); ~Song(); /** Remove all the notes in the song that play on instrument I. The function is real-time safe (it locks the audio data while deleting notes) */ void purge_instrument( Instrument* I ); void set_volume( float volume ) { __volume = volume; } float get_volume() { return __volume; } void set_metronome_volume( float volume ) { __metronome_volume = volume; } float get_metronome_volume() { return __metronome_volume; } PatternList* get_pattern_list() { return __pattern_list; } void set_pattern_list( PatternList* pattern_list ) { __pattern_list = pattern_list; } std::vector* get_pattern_group_vector() { return __pattern_group_sequence; } void set_pattern_group_vector( std::vector* vect ) { __pattern_group_sequence = vect; } static Song* load( const QString& sFilename ); bool save( const QString& sFilename ); InstrumentList* get_instrument_list() { return __instrument_list; } void set_instrument_list( InstrumentList* list ) { __instrument_list = list; } void set_notes( const QString& notes ) { __notes = notes; } const QString& get_notes() { return __notes; } void set_license( const QString& license ) { __license = license; } const QString& get_license() { return __license; } const QString& get_author() { return __author; } const QString& get_filename() { return __filename; } void set_filename( const QString& filename ) { __filename = filename; } bool is_loop_enabled() { return __is_loop_enabled; } void set_loop_enabled( bool enabled ) { __is_loop_enabled = enabled; } float get_humanize_time_value() { return __humanize_time_value; } void set_humanize_time_value( float value ) { __humanize_time_value = value; } float get_humanize_velocity_value() { return __humanize_velocity_value; } void set_humanize_velocity_value( float value ) { __humanize_velocity_value = value; } float get_swing_factor() { return __swing_factor; } void set_swing_factor( float factor ); SongMode get_mode() { return __song_mode; } void set_mode( SongMode mode ) { __song_mode = mode; } void readTempPatternList( QString filename ); private: float __volume; ///< volume of the song (0.0..1.0) float __metronome_volume; ///< Metronome volume QString __notes; PatternList* __pattern_list; ///< Pattern list std::vector* __pattern_group_sequence; ///< Sequence of pattern groups InstrumentList* __instrument_list; ///< Instrument list QString __filename; bool __is_loop_enabled; float __humanize_time_value; float __humanize_velocity_value; float __swing_factor; SongMode __song_mode; }; /** \ingroup H2CORE \brief Read XML file of a song */ class SongReader : public H2Core::Object { H2_OBJECT public: SongReader(); ~SongReader(); Song* readSong( const QString& filename ); private: QString m_sSongVersion; /// Dato un XmlNode restituisce un oggetto Pattern Pattern* getPattern( QDomNode pattern, InstrumentList* instrList ); }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/config.h.in000066400000000000000000000032301211146647700233540ustar00rootroot00000000000000#ifndef HYD_CONFIG_H #define HYD_CONFIG_H #include #ifndef QT_BEGIN_NAMESPACE # define QT_BEGIN_NAMESPACE #endif #ifndef QT_END_NAMESPACE # define QT_END_NAMESPACE #endif #define USR_DATA_PATH "@USR_DATA_PATH@" #define SYS_DATA_PATH "@SYS_DATA_PATH@" #define CONFIG_PREFIX "@CMAKE_INSTALL_PREFIX@" #define H2CORE_VERSION_MAJOR @VERSION_MAJOR@ #define H2CORE_VERSION_MINOR @VERSION_MINOR@ #define H2CORE_VERSION_PATCH @VERSION_PATCH@ #define H2CORE_GIT_REVISION @GIT_REVISION@ #define H2CORE_VERSION "@DISPLAY_VERSION@" #cmakedefine HAVE_SSCANF #cmakedefine HAVE_RTCLOCK #ifndef H2CORE_HAVE_DEBUG #cmakedefine H2CORE_HAVE_DEBUG #endif #ifndef H2CORE_HAVE_BUNDLE #cmakedefine H2CORE_HAVE_BUNDLE #endif #ifndef H2CORE_HAVE_LIBSNDFILE #cmakedefine H2CORE_HAVE_LIBSNDFILE #endif #ifndef H2CORE_HAVE_LIBARCHIVE #cmakedefine H2CORE_HAVE_LIBARCHIVE #endif #ifndef H2CORE_HAVE_OSS #cmakedefine H2CORE_HAVE_OSS #endif #ifndef H2CORE_HAVE_ALSA #cmakedefine H2CORE_HAVE_ALSA #endif #ifndef H2CORE_HAVE_JACK #cmakedefine H2CORE_HAVE_JACK #endif #ifndef H2CORE_HAVE_LASH #cmakedefine H2CORE_HAVE_LASH #endif #ifndef H2CORE_HAVE_JACKSESSION #cmakedefine H2CORE_HAVE_JACKSESSION #endif #ifndef H2CORE_HAVE_PORTAUDIO #cmakedefine H2CORE_HAVE_PORTAUDIO #endif #ifndef H2CORE_HAVE_PORTMIDI #cmakedefine H2CORE_HAVE_PORTMIDI #endif #ifndef H2CORE_HAVE_COREAUDIO #cmakedefine H2CORE_HAVE_COREAUDIO #endif #ifndef H2CORE_HAVE_COREMIDI #cmakedefine H2CORE_HAVE_COREMIDI #endif #ifndef H2CORE_HAVE_LRDF #cmakedefine H2CORE_HAVE_LRDF #endif #ifndef H2CORE_HAVE_LADSPA #cmakedefine H2CORE_HAVE_LADSPA #endif #ifndef H2CORE_HAVE_RUBBERBAND #cmakedefine H2CORE_HAVE_RUBBERBAND #endif #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/event_queue.h000066400000000000000000000044401211146647700240330ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef EVENT_QUEUE_H #define EVENT_QUEUE_H #include #include #include #define MAX_EVENTS 1024 namespace H2Core { enum EventType { EVENT_NONE, EVENT_STATE, EVENT_PATTERN_CHANGED, EVENT_PATTERN_MODIFIED, EVENT_SELECTED_PATTERN_CHANGED, EVENT_SELECTED_INSTRUMENT_CHANGED, EVENT_MIDI_ACTIVITY, EVENT_XRUN, EVENT_NOTEON, EVENT_ERROR, EVENT_METRONOME, EVENT_RECALCULATERUBBERBAND, EVENT_PROGRESS, EVENT_JACK_SESSION, EVENT_PLAYLIST_LOADSONG, EVENT_UNDO_REDO }; class Event { public: EventType type; int value; }; /// /// Event queue: is the way the engine talks to the GUI /// class EventQueue : public H2Core::Object { H2_OBJECT public: static void create_instance(); static EventQueue* get_instance() { assert(__instance); return __instance; } ~EventQueue(); void push_event( EventType type, int nValue ); Event pop_event(); struct AddMidiNoteVector { int m_column; //position int m_row; //instrument row int m_pattern; // pattern number int m_length; float f_velocity; float f_pan_L; float f_pan_R; Note::Key nk_noteKeyVal; Note::Octave no_octaveKeyVal; bool b_isMidi; bool b_isInstrumentMode; bool b_noteExist; }; std::vector m_addMidiNoteVector; private: EventQueue(); static EventQueue *__instance; int __read_index; int __write_index; Event __events_buffer[ MAX_EVENTS ]; }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/fx/000077500000000000000000000000001211146647700217505ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/include/hydrogen/fx/Effects.h000066400000000000000000000035251211146647700235050ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef EFFECTS_H #define EFFECTS_H #include "hydrogen/config.h" #ifdef H2CORE_HAVE_LADSPA #include #include #include #include #include namespace H2Core { /** * */ class Effects : public H2Core::Object { H2_OBJECT public: static void create_instance(); static Effects* get_instance() { assert(__instance); return __instance; } ~Effects(); LadspaFX* getLadspaFX( int nFX ); void setLadspaFX( LadspaFX* pFX, int nFX ); std::vector getPluginList(); LadspaFXGroup* getLadspaFXGroup(); private: static Effects* __instance; std::vector m_pluginList; LadspaFXGroup* m_pRootGroup; LadspaFXGroup* m_pRecentGroup; void updateRecentGroup(); LadspaFX* m_FXList[ MAX_FX ]; Effects(); void RDFDescend( const QString& sBase, LadspaFXGroup *pGroup, std::vector pluginList ); void getRDF( LadspaFXGroup *pGroup, std::vector pluginList ); }; }; #endif #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/fx/LadspaFX.h000066400000000000000000000101221211146647700235570ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef LADSPA_FX_H #define LADSPA_FX_H #include "hydrogen/config.h" #ifdef H2CORE_HAVE_LADSPA #include #include #include #include "ladspa.h" #include namespace H2Core { class LadspaFXInfo : public H2Core::Object { H2_OBJECT public: LadspaFXInfo( const QString& sName ); ~LadspaFXInfo(); QString m_sFilename; ///< plugin filename QString m_sID; QString m_sLabel; QString m_sName; QString m_sMaker; QString m_sCopyright; unsigned m_nICPorts; ///< input control port unsigned m_nOCPorts; ///< output control port unsigned m_nIAPorts; ///< input audio port unsigned m_nOAPorts; ///< output audio port static bool alphabeticOrder( LadspaFXInfo* a, LadspaFXInfo* b ); }; class LadspaFXGroup : public H2Core::Object { H2_OBJECT public: LadspaFXGroup( const QString& sName ); ~LadspaFXGroup(); const QString& getName() { return m_sName; } void addLadspaInfo( LadspaFXInfo *pInfo ); std::vector getLadspaInfo() { return m_ladspaList; } void addChild( LadspaFXGroup *pChild ); std::vector getChildList() { return m_childGroups; } void clear() { m_childGroups.clear(); m_ladspaList.clear(); } static bool alphabeticOrder( LadspaFXGroup*, LadspaFXGroup* ); void sort(); private: QString m_sName; std::vector m_ladspaList; std::vector m_childGroups; }; class LadspaControlPort : public H2Core::Object { H2_OBJECT public: QString sName; bool isToggle; bool m_bIsInteger; LADSPA_Data fControlValue; LADSPA_Data fLowerBound; LADSPA_Data fUpperBound; LadspaControlPort() : Object( "LadspaControlPort" ) { } }; class LadspaFX : public H2Core::Object { H2_OBJECT public: enum { MONO_FX, STEREO_FX, UNDEFINED }; //unsigned m_nBufferSize; float* m_pBuffer_L; float* m_pBuffer_R; std::vector inputControlPorts; std::vector outputControlPorts; ~LadspaFX(); void connectAudioPorts( float* pIn_L, float* pIn_R, float* pOut_L, float* pOut_R ); void activate(); void deactivate(); void processFX( unsigned nFrames ); const QString& getPluginLabel() { return m_sLabel; } const QString& getPluginName() { return m_sName; } void setPluginName( const QString& sName ) { m_sName = sName; } const QString& getLibraryPath() { return m_sLibraryPath; } bool isEnabled() { return m_bEnabled; } void setEnabled( bool value ) { m_bEnabled = value; } static LadspaFX* load( const QString& sLibraryPath, const QString& sPluginLabel, long nSampleRate ); int getPluginType() { return m_pluginType; } void setVolume( float fValue ); float getVolume() { return m_fVolume; } private: bool m_pluginType; bool m_bEnabled; bool m_bActivated; // Guard against plugins that can't be deactivated before being activated ( QString m_sLabel; QString m_sName; QString m_sLibraryPath; QLibrary *m_pLibrary; const LADSPA_Descriptor * m_d; LADSPA_Handle m_handle; float m_fVolume; unsigned m_nICPorts; ///< input control port unsigned m_nOCPorts; ///< output control port unsigned m_nIAPorts; ///< input audio port unsigned m_nOAPorts; ///< output audio port LadspaFX( const QString& sLibraryPath, const QString& sPluginLabel ); }; }; #endif #endif // H2CORE_HAVE_LADSPA hydrogen-0.9.6-beta3/src/core/include/hydrogen/fx/ladspa.h000066400000000000000000000655061211146647700234010ustar00rootroot00000000000000/* ladspa.h Linux Audio Developer's Simple Plugin API Version 1.1[LGPL]. Copyright (C) 2000-2002 Richard W.E. Furse, Paul Barton-Davis, Stefan Westerfeld. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #ifndef LADSPA_INCLUDED #define LADSPA_INCLUDED #define LADSPA_VERSION "1.1" #define LADSPA_VERSION_MAJOR 1 #define LADSPA_VERSION_MINOR 1 #ifdef __cplusplus extern "C" { #endif /*****************************************************************************/ /* Overview: There is a large number of synthesis packages in use or development on the Linux platform at this time. This API (`The Linux Audio Developer's Simple Plugin API') attempts to give programmers the ability to write simple `plugin' audio processors in C/C++ and link them dynamically (`plug') into a range of these packages (`hosts'). It should be possible for any host and any plugin to communicate completely through this interface. This API is deliberately short and simple. To achieve compatibility with a range of promising Linux sound synthesis packages it attempts to find the `greatest common divisor' in their logical behaviour. Having said this, certain limiting decisions are implicit, notably the use of a fixed type (LADSPA_Data) for all data transfer and absence of a parameterised `initialisation' phase. See below for the LADSPA_Data typedef. Plugins are expected to distinguish between control and audio data. Plugins have `ports' that are inputs or outputs for audio or control data and each plugin is `run' for a `block' corresponding to a short time interval measured in samples. Audio data is communicated using arrays of LADSPA_Data, allowing a block of audio to be processed by the plugin in a single pass. Control data is communicated using single LADSPA_Data values. Control data has a single value at the start of a call to the `run()' or `run_adding()' function, and may be considered to remain this value for its duration. The plugin may assume that all its input and output ports have been connected to the relevant data location (see the `connect_port()' function below) before it is asked to run. Plugins will reside in shared object files suitable for dynamic linking by dlopen() and family. The file will provide a number of `plugin types' that can be used to instantiate actual plugins (sometimes known as `plugin instances') that can be connected together to perform tasks. This API contains very limited error-handling. */ /*****************************************************************************/ /* Fundamental data type passed in and out of plugin. This data type is used to communicate audio samples and control values. It is assumed that the plugin will work sensibly given any numeric input value although it may have a preferred range (see hints below). For audio it is generally assumed that 1.0f is the `0dB' reference amplitude and is a `normal' signal level. */ typedef float LADSPA_Data; /*****************************************************************************/ /* Special Plugin Properties: Optional features of the plugin type are encapsulated in the LADSPA_Properties type. This is assembled by ORing individual properties together. */ typedef int LADSPA_Properties; /* Property LADSPA_PROPERTY_REALTIME indicates that the plugin has a real-time dependency (e.g. listens to a MIDI device) and so its output must not be cached or subject to significant latency. */ #define LADSPA_PROPERTY_REALTIME 0x1 /* Property LADSPA_PROPERTY_INPLACE_BROKEN indicates that the plugin may cease to work correctly if the host elects to use the same data location for both input and output (see connect_port()). This should be avoided as enabling this flag makes it impossible for hosts to use the plugin to process audio `in-place.' */ #define LADSPA_PROPERTY_INPLACE_BROKEN 0x2 /* Property LADSPA_PROPERTY_HARD_RT_CAPABLE indicates that the plugin is capable of running not only in a conventional host but also in a `hard real-time' environment. To qualify for this the plugin must satisfy all of the following: (1) The plugin must not use malloc(), free() or other heap memory management within its run() or run_adding() functions. All new memory used in run() must be managed via the stack. These restrictions only apply to the run() function. (2) The plugin will not attempt to make use of any library functions with the exceptions of functions in the ANSI standard C and C maths libraries, which the host is expected to provide. (3) The plugin will not access files, devices, pipes, sockets, IPC or any other mechanism that might result in process or thread blocking. (4) The plugin will take an amount of time to execute a run() or run_adding() call approximately of form (A+B*SampleCount) where A and B depend on the machine and host in use. This amount of time may not depend on input signals or plugin state. The host is left the responsibility to perform timings to estimate upper bounds for A and B. */ #define LADSPA_PROPERTY_HARD_RT_CAPABLE 0x4 #define LADSPA_IS_REALTIME(x) ((x) & LADSPA_PROPERTY_REALTIME) #define LADSPA_IS_INPLACE_BROKEN(x) ((x) & LADSPA_PROPERTY_INPLACE_BROKEN) #define LADSPA_IS_HARD_RT_CAPABLE(x) ((x) & LADSPA_PROPERTY_HARD_RT_CAPABLE) /*****************************************************************************/ /* Plugin Ports: Plugins have `ports' that are inputs or outputs for audio or data. Ports can communicate arrays of LADSPA_Data (for audio inputs/outputs) or single LADSPA_Data values (for control input/outputs). This information is encapsulated in the LADSPA_PortDescriptor type which is assembled by ORing individual properties together. Note that a port must be an input or an output port but not both and that a port must be a control or audio port but not both. */ typedef int LADSPA_PortDescriptor; /* Property LADSPA_PORT_INPUT indicates that the port is an input. */ #define LADSPA_PORT_INPUT 0x1 /* Property LADSPA_PORT_OUTPUT indicates that the port is an output. */ #define LADSPA_PORT_OUTPUT 0x2 /* Property LADSPA_PORT_CONTROL indicates that the port is a control port. */ #define LADSPA_PORT_CONTROL 0x4 /* Property LADSPA_PORT_AUDIO indicates that the port is a audio port. */ #define LADSPA_PORT_AUDIO 0x8 #define LADSPA_IS_PORT_INPUT(x) ((x) & LADSPA_PORT_INPUT) #define LADSPA_IS_PORT_OUTPUT(x) ((x) & LADSPA_PORT_OUTPUT) #define LADSPA_IS_PORT_CONTROL(x) ((x) & LADSPA_PORT_CONTROL) #define LADSPA_IS_PORT_AUDIO(x) ((x) & LADSPA_PORT_AUDIO) /*****************************************************************************/ /* Plugin Port Range Hints: The host may wish to provide a representation of data entering or leaving a plugin (e.g. to generate a GUI automatically). To make this more meaningful, the plugin should provide `hints' to the host describing the usual values taken by the data. Note that these are only hints. The host may ignore them and the plugin must not assume that data supplied to it is meaningful. If the plugin receives invalid input data it is expected to continue to run without failure and, where possible, produce a sensible output (e.g. a high-pass filter given a negative cutoff frequency might switch to an all-pass mode). Hints are meaningful for all input and output ports but hints for input control ports are expected to be particularly useful. More hint information is encapsulated in the LADSPA_PortRangeHintDescriptor type which is assembled by ORing individual hint types together. Hints may require further LowerBound and UpperBound information. All the hint information for a particular port is aggregated in the LADSPA_PortRangeHint structure. */ typedef int LADSPA_PortRangeHintDescriptor; /* Hint LADSPA_HINT_BOUNDED_BELOW indicates that the LowerBound field of the LADSPA_PortRangeHint should be considered meaningful. The value in this field should be considered the (inclusive) lower bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also specified then the value of LowerBound should be multiplied by the sample rate. */ #define LADSPA_HINT_BOUNDED_BELOW 0x1 /* Hint LADSPA_HINT_BOUNDED_ABOVE indicates that the UpperBound field of the LADSPA_PortRangeHint should be considered meaningful. The value in this field should be considered the (inclusive) upper bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also specified then the value of UpperBound should be multiplied by the sample rate. */ #define LADSPA_HINT_BOUNDED_ABOVE 0x2 /* Hint LADSPA_HINT_TOGGLED indicates that the data item should be considered a Boolean toggle. Data less than or equal to zero should be considered `off' or `false,' and data above zero should be considered `on' or `true.' LADSPA_HINT_TOGGLED may not be used in conjunction with any other hint except LADSPA_HINT_DEFAULT_0 or LADSPA_HINT_DEFAULT_1. */ #define LADSPA_HINT_TOGGLED 0x4 /* Hint LADSPA_HINT_SAMPLE_RATE indicates that any bounds specified should be interpreted as multiples of the sample rate. For instance, a frequency range from 0Hz to the Nyquist frequency (half the sample rate) could be requested by this hint in conjunction with LowerBound = 0 and UpperBound = 0.5. Hosts that support bounds at all must support this hint to retain meaning. */ #define LADSPA_HINT_SAMPLE_RATE 0x8 /* Hint LADSPA_HINT_LOGARITHMIC indicates that it is likely that the user will find it more intuitive to view values using a logarithmic scale. This is particularly useful for frequencies and gains. */ #define LADSPA_HINT_LOGARITHMIC 0x10 /* Hint LADSPA_HINT_INTEGER indicates that a user interface would probably wish to provide a stepped control taking only integer values. Any bounds set should be slightly wider than the actual integer range required to avoid floating point rounding errors. For instance, the integer set {0,1,2,3} might be described as [-0.1, 3.1]. */ #define LADSPA_HINT_INTEGER 0x20 /* The various LADSPA_HINT_HAS_DEFAULT_* hints indicate a `normal' value for the port that is sensible as a default. For instance, this value is suitable for use as an initial value in a user interface or as a value the host might assign to a control port when the user has not provided one. Defaults are encoded using a mask so only one default may be specified for a port. Some of the hints make use of lower and upper bounds, in which case the relevant bound or bounds must be available and LADSPA_HINT_SAMPLE_RATE must be applied as usual. The resulting default must be rounded if LADSPA_HINT_INTEGER is present. Default values were introduced in LADSPA v1.1. */ #define LADSPA_HINT_DEFAULT_MASK 0x3C0 /* This default values indicates that no default is provided. */ #define LADSPA_HINT_DEFAULT_NONE 0x0 /* This default hint indicates that the suggested lower bound for the port should be used. */ #define LADSPA_HINT_DEFAULT_MINIMUM 0x40 /* This default hint indicates that a low value between the suggested lower and upper bounds should be chosen. For ports with LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.75 + log(upper) * 0.25). Otherwise, this should be (lower * 0.75 + upper * 0.25). */ #define LADSPA_HINT_DEFAULT_LOW 0x80 /* This default hint indicates that a middle value between the suggested lower and upper bounds should be chosen. For ports with LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.5 + log(upper) * 0.5). Otherwise, this should be (lower * 0.5 + upper * 0.5). */ #define LADSPA_HINT_DEFAULT_MIDDLE 0xC0 /* This default hint indicates that a high value between the suggested lower and upper bounds should be chosen. For ports with LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.25 + log(upper) * 0.75). Otherwise, this should be (lower * 0.25 + upper * 0.75). */ #define LADSPA_HINT_DEFAULT_HIGH 0x100 /* This default hint indicates that the suggested upper bound for the port should be used. */ #define LADSPA_HINT_DEFAULT_MAXIMUM 0x140 /* This default hint indicates that the number 0 should be used. Note that this default may be used in conjunction with LADSPA_HINT_TOGGLED. */ #define LADSPA_HINT_DEFAULT_0 0x200 /* This default hint indicates that the number 1 should be used. Note that this default may be used in conjunction with LADSPA_HINT_TOGGLED. */ #define LADSPA_HINT_DEFAULT_1 0x240 /* This default hint indicates that the number 100 should be used. */ #define LADSPA_HINT_DEFAULT_100 0x280 /* This default hint indicates that the Hz frequency of `concert A' should be used. This will be 440 unless the host uses an unusual tuning convention, in which case it may be within a few Hz. */ #define LADSPA_HINT_DEFAULT_440 0x2C0 #define LADSPA_IS_HINT_BOUNDED_BELOW(x) ((x) & LADSPA_HINT_BOUNDED_BELOW) #define LADSPA_IS_HINT_BOUNDED_ABOVE(x) ((x) & LADSPA_HINT_BOUNDED_ABOVE) #define LADSPA_IS_HINT_TOGGLED(x) ((x) & LADSPA_HINT_TOGGLED) #define LADSPA_IS_HINT_SAMPLE_RATE(x) ((x) & LADSPA_HINT_SAMPLE_RATE) #define LADSPA_IS_HINT_LOGARITHMIC(x) ((x) & LADSPA_HINT_LOGARITHMIC) #define LADSPA_IS_HINT_INTEGER(x) ((x) & LADSPA_HINT_INTEGER) #define LADSPA_IS_HINT_HAS_DEFAULT(x) ((x) & LADSPA_HINT_DEFAULT_MASK) #define LADSPA_IS_HINT_DEFAULT_MINIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_MINIMUM) #define LADSPA_IS_HINT_DEFAULT_LOW(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_LOW) #define LADSPA_IS_HINT_DEFAULT_MIDDLE(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_MIDDLE) #define LADSPA_IS_HINT_DEFAULT_HIGH(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_HIGH) #define LADSPA_IS_HINT_DEFAULT_MAXIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_MAXIMUM) #define LADSPA_IS_HINT_DEFAULT_0(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_0) #define LADSPA_IS_HINT_DEFAULT_1(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_1) #define LADSPA_IS_HINT_DEFAULT_100(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_100) #define LADSPA_IS_HINT_DEFAULT_440(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_440) typedef struct _LADSPA_PortRangeHint { /* Hints about the port. */ LADSPA_PortRangeHintDescriptor HintDescriptor; /* Meaningful when hint LADSPA_HINT_BOUNDED_BELOW is active. When LADSPA_HINT_SAMPLE_RATE is also active then this value should be multiplied by the relevant sample rate. */ LADSPA_Data LowerBound; /* Meaningful when hint LADSPA_HINT_BOUNDED_ABOVE is active. When LADSPA_HINT_SAMPLE_RATE is also active then this value should be multiplied by the relevant sample rate. */ LADSPA_Data UpperBound; } LADSPA_PortRangeHint; /*****************************************************************************/ /* Plugin Handles: This plugin handle indicates a particular instance of the plugin concerned. It is valid to compare this to NULL (0 for C++) but otherwise the host should not attempt to interpret it. The plugin may use it to reference internal instance data. */ typedef void * LADSPA_Handle; /*****************************************************************************/ /* Descriptor for a Type of Plugin: This structure is used to describe a plugin type. It provides a number of functions to examine the type, instantiate it, link it to buffers and workspaces and to run it. */ typedef struct _LADSPA_Descriptor { /* This numeric identifier indicates the plugin type uniquely. Plugin programmers may reserve ranges of IDs from a central body to avoid clashes. Hosts may assume that IDs are below 0x1000000. */ unsigned long UniqueID; /* This identifier can be used as a unique, case-sensitive identifier for the plugin type within the plugin file. Plugin types should be identified by file and label rather than by index or plugin name, which may be changed in new plugin versions. Labels must not contain white-space characters. */ const char * Label; /* This indicates a number of properties of the plugin. */ LADSPA_Properties Properties; /* This member points to the null-terminated name of the plugin (e.g. "Sine Oscillator"). */ const char * Name; /* This member points to the null-terminated string indicating the maker of the plugin. This can be an empty string but not NULL. */ const char * Maker; /* This member points to the null-terminated string indicating any copyright applying to the plugin. If no Copyright applies the string "None" should be used. */ const char * Copyright; /* This indicates the number of ports (input AND output) present on the plugin. */ unsigned long PortCount; /* This member indicates an array of port descriptors. Valid indices vary from 0 to PortCount-1. */ const LADSPA_PortDescriptor * PortDescriptors; /* This member indicates an array of null-terminated strings describing ports (e.g. "Frequency (Hz)"). Valid indices vary from 0 to PortCount-1. */ const char * const * PortNames; /* This member indicates an array of range hints for each port (see above). Valid indices vary from 0 to PortCount-1. */ const LADSPA_PortRangeHint * PortRangeHints; /* This may be used by the plugin developer to pass any custom implementation data into an instantiate call. It must not be used or interpreted by the host. It is expected that most plugin writers will not use this facility as LADSPA_Handle should be used to hold instance data. */ void * ImplementationData; /* This member is a function pointer that instantiates a plugin. A handle is returned indicating the new plugin instance. The instantiation function accepts a sample rate as a parameter. The plugin descriptor from which this instantiate function was found must also be passed. This function must return NULL if instantiation fails. Note that instance initialisation should generally occur in activate() rather than here. */ LADSPA_Handle ( *instantiate )( const struct _LADSPA_Descriptor * Descriptor, unsigned long SampleRate ); /* This member is a function pointer that connects a port on an instantiated plugin to a memory location at which a block of data for the port will be read/written. The data location is expected to be an array of LADSPA_Data for audio ports or a single LADSPA_Data value for control ports. Memory issues will be managed by the host. The plugin must read/write the data at these locations every time run() or run_adding() is called and the data present at the time of this connection call should not be considered meaningful. connect_port() may be called more than once for a plugin instance to allow the host to change the buffers that the plugin is reading or writing. These calls may be made before or after activate() or deactivate() calls. connect_port() must be called at least once for each port before run() or run_adding() is called. When working with blocks of LADSPA_Data the plugin should pay careful attention to the block size passed to the run function as the block allocated may only just be large enough to contain the block of samples. Plugin writers should be aware that the host may elect to use the same buffer for more than one port and even use the same buffer for both input and output (see LADSPA_PROPERTY_INPLACE_BROKEN). However, overlapped buffers or use of a single buffer for both audio and control data may result in unexpected behaviour. */ void ( *connect_port )( LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation ); /* This member is a function pointer that initialises a plugin instance and activates it for use. This is separated from instantiate() to aid real-time support and so that hosts can reinitialise a plugin instance by calling deactivate() and then activate(). In this case the plugin instance must reset all state information dependent on the history of the plugin instance except for any data locations provided by connect_port() and any gain set by set_run_adding_gain(). If there is nothing for activate() to do then the plugin writer may provide a NULL rather than an empty function. When present, hosts must call this function once before run() (or run_adding()) is called for the first time. This call should be made as close to the run() call as possible and indicates to real-time plugins that they are now live. Plugins should not rely on a prompt call to run() after activate(). activate() may not be called again unless deactivate() is called first. Note that connect_port() may be called before or after a call to activate(). */ void ( *activate )( LADSPA_Handle Instance ); /* This method is a function pointer that runs an instance of a plugin for a block. Two parameters are required: the first is a handle to the particular instance to be run and the second indicates the block size (in samples) for which the plugin instance may run. Note that if an activate() function exists then it must be called before run() or run_adding(). If deactivate() is called for a plugin instance then the plugin instance may not be reused until activate() has been called again. If the plugin has the property LADSPA_PROPERTY_HARD_RT_CAPABLE then there are various things that the plugin should not do within the run() or run_adding() functions (see above). */ void ( *run )( LADSPA_Handle Instance, unsigned long SampleCount ); /* This method is a function pointer that runs an instance of a plugin for a block. This has identical behaviour to run() except in the way data is output from the plugin. When run() is used, values are written directly to the memory areas associated with the output ports. However when run_adding() is called, values must be added to the values already present in the memory areas. Furthermore, output values written must be scaled by the current gain set by set_run_adding_gain() (see below) before addition. run_adding() is optional. When it is not provided by a plugin, this function pointer must be set to NULL. When it is provided, the function set_run_adding_gain() must be provided also. */ void ( *run_adding )( LADSPA_Handle Instance, unsigned long SampleCount ); /* This method is a function pointer that sets the output gain for use when run_adding() is called (see above). If this function is never called the gain is assumed to default to 1. Gain information should be retained when activate() or deactivate() are called. This function should be provided by the plugin if and only if the run_adding() function is provided. When it is absent this function pointer must be set to NULL. */ void ( *set_run_adding_gain )( LADSPA_Handle Instance, LADSPA_Data Gain ); /* This is the counterpart to activate() (see above). If there is nothing for deactivate() to do then the plugin writer may provide a NULL rather than an empty function. Hosts must deactivate all activated units after they have been run() (or run_adding()) for the last time. This call should be made as close to the last run() call as possible and indicates to real-time plugins that they are no longer live. Plugins should not rely on prompt deactivation. Note that connect_port() may be called before or after a call to deactivate(). Deactivation is not similar to pausing as the plugin instance will be reinitialised when activate() is called to reuse it. */ void ( *deactivate )( LADSPA_Handle Instance ); /* Once an instance of a plugin has been finished with it can be deleted using the following function. The instance handle passed ceases to be valid after this call. If activate() was called for a plugin instance then a corresponding call to deactivate() must be made before cleanup() is called. */ void ( *cleanup )( LADSPA_Handle Instance ); } LADSPA_Descriptor; /**********************************************************************/ /* Accessing a Plugin: */ /* The exact mechanism by which plugins are loaded is host-dependent, however all most hosts will need to know is the name of shared object file containing the plugin types. To allow multiple hosts to share plugin types, hosts may wish to check for environment variable LADSPA_PATH. If present, this should contain a colon-separated path indicating directories that should be searched (in order) when loading plugin types. A plugin programmer must include a function called "ladspa_descriptor" with the following function prototype within the shared object file. This function will have C-style linkage (if you are using C++ this is taken care of by the `extern "C"' clause at the top of the file). A host will find the plugin shared object file by one means or another, find the ladspa_descriptor() function, call it, and proceed from there. Plugin types are accessed by index (not ID) using values from 0 upwards. Out of range indexes must result in this function returning NULL, so the plugin count can be determined by checking for the least index that results in NULL being returned. */ const LADSPA_Descriptor * ladspa_descriptor( unsigned long Index ); /* Datatype corresponding to the ladspa_descriptor() function. */ typedef const LADSPA_Descriptor * ( *LADSPA_Descriptor_Function )( unsigned long Index ); /**********************************************************************/ #ifdef __cplusplus } #endif #endif /* LADSPA_INCLUDED */ /* EOF */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/globals.h000066400000000000000000000025321211146647700231310ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_GLOBALS_H #define H2C_GLOBALS_H #define MAX_INSTRUMENTS 1000 #define MAX_NOTES 192 #define MAX_LAYERS 16 #define MAX_FX 4 #define MAX_BUFFER_SIZE 8192 #define MIDI_OUT_NOTE_MIN 0 #define MIDI_OUT_NOTE_MAX 127 #define MIDI_OUT_CHANNEL_MIN -1 #define MIDI_OUT_CHANNEL_MAX 15 #define SAMPLE_CHANNELS 2 #define TWOPI 6.28318530717958647692 #define UNUSED( v ) (v = v) #endif // H2C_GLOBALS_H hydrogen-0.9.6-beta3/src/core/include/hydrogen/h2_exception.h000066400000000000000000000021701211146647700240730ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2EXCEPTION_H #define H2EXCEPTION_H #include #include #include namespace H2Core { class H2Exception : public std::runtime_error { public: H2Exception( const QString& msg ) : std::runtime_error( msg.toLocal8Bit().constData() ) { } }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/helpers/000077500000000000000000000000001211146647700227755ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/include/hydrogen/helpers/filesystem.h000066400000000000000000000204521211146647700253350ustar00rootroot00000000000000 #ifndef H2C_FILESYSTEM_H #define H2C_FILESYSTEM_H #include #include namespace H2Core { /** * Filesystem is a thin layer over QDir, QFile and QFileInfo */ class Filesystem : public H2Core::Object { H2_OBJECT public: /** flags available for Filesystem::check_permissions */ enum file_perms { is_dir =0x01, is_file=0x02, is_readable=0x04, is_writable=0x08, is_executable=0x10 }; /** * check user and system filesystem usability * \param logger is a pointer to the logger instance which will be used * \param sys_path an alternate system data path */ static bool bootstrap( Logger* logger, const QString& sys_path=0 ); /** returns system data path */ static QString sys_data_path(); /** returns user data path */ static QString usr_data_path(); /** returns system core config path */ static QString sys_core_config(); /** returns user core config path */ static QString usr_core_config(); /** returns system gui config path */ static QString sys_gui_config(); /** returns user gui config path */ static QString usr_gui_config(); /** returns system empty sample file path */ static QString empty_sample(); /** returns system empty song file path */ static QString empty_song(); /** returns system click file path */ static QString click_file(); /** returns click file path from user directory if exists, otherwise from system */ static QString usr_click_file(); /** returns the path to the drumkit XSD (xml schema definition) file */ static QString drumkit_xsd( ); /** returns the path to the drumkit pattern XSD (xml schema definition) file */ static QString drumkit_pattern_xsd( ); /** returns the path to the pattern XSD (xml schema definition) file */ static QString pattern_xsd( ); /** returns gui image path */ static QString img_dir(); /** returns documentation path */ static QString doc_dir(); /** returns internationalization path */ static QString i18n_dir(); /** returns user songs path */ static QString songs_dir(); /** returns user patterns path */ static QString patterns_dir(); /** returns system drumkits path */ static QString sys_drumkits_dir(); /** returns user drumkits path */ static QString usr_drumkits_dir(); /** returns user playlist path */ static QString playlists_dir(); /** returns system demos path */ static QString demos_dir(); /** returns system xsd path */ static QString xsd_dir(); /** returns temp path */ static QString tmp_dir(); /** * touch a temporary file and return it's path * file path will be constructed like this : tmp_dir()/base.xxxxxx * \param base, part of the path */ static QString tmp_file( const QString& base ); /* DRUMKIT */ /** Checks if a given file is part of a kit in the soundlibrary or external */ static bool file_is_partof_drumkit( const QString& fname); /** returns list of usable system drumkits ( see Filesystem::drumkits_list ) */ static QStringList sys_drumkits_list( ); /** returns list of usable user drumkits ( see Filesystem::drumkits_list ) */ static QStringList usr_drumkits_list( ); /** * returns true if the drumkit exists within usable system or user drumkits * \param dk_name the drumkit name */ static bool drumkit_exists( const QString& dk_name ); /** * returns path for a drumkit within user drumkit path * \param dk_name the drumkit name */ static QString drumkit_usr_path( const QString& dk_name ); /** * returns path for a drumkit searching within user then system drumkits * \param dk_name the drumkit name */ static QString drumkit_path_search( const QString& dk_name ); /** * returns the directory holding the named drumkit searching within user then system drumkits * \param dk_name the drumkit name */ static QString drumkit_dir_search( const QString& dk_name ); /** * returns true if the path contains a usable drumkit * \param dk_location the root drumkit location */ static bool drumkit_valid( const QString& dk_path ); /** * returns the path to the xml file within a suposed drumkit path * \param dk_path the path to the drumkit */ static QString drumkit_file( const QString& dk_path ); /* PATTERNS */ /** returns a list of existing patterns */ static QStringList patterns_list( ); /* SONGS */ /** returns a list of existing songs */ static QStringList songs_list( ); /** * returns true if the song file exists * \param sg_name the song name */ static bool song_exists( const QString& sg_name ); /** send current settings information to logger with INFO severity */ static void info(); /** * returns true if the given path is an existing regular file * \param path the path to the file to check * \param silent output not messages if set to true */ static bool file_exists( const QString& path, bool silent=false ); /** * returns true if the given path is an existing readable regular file * \param path the path to the file to check * \param silent output not messages if set to true */ static bool file_readable( const QString& path, bool silent=false ); /** * returns true if the given path is a possibly writable file (may exist or not) * \param path the path to the file to check * \param silent output not messages if set to true */ static bool file_writable( const QString& path, bool silent=false ); /** * returns true if the given path is an existing executable regular file * \param path the path to the file to check * \param silent output not messages if set to true */ static bool file_executable( const QString& path, bool silent=false ); /** * returns true if the given path is a readable regular directory * \param path the path to the file to check * \param silent output not messages if set to true */ static bool dir_readable( const QString& path, bool silent=false ); /** * returns true if the given path is a writable regular directory * \param path the path to the file to check * \param silent output not messages if set to true */ static bool dir_writable( const QString& path, bool silent=false ); /** * returns true if the path is a readable and writable regular directory, create if it not exists * \param path the path to the file to check * \param create will try to create path if not exists and set to true * \param silent output not messages if set to true */ static bool path_usable( const QString& path, bool create=true, bool silent=false ); /** * writes to a file * \param dst the destination path * \param content then string to write */ static bool write_to_file( const QString& dst, const QString& content ); /** * copy a source file to a destination * \param src source file path * \param dsr destination file path * \param overwrite allow to overwrite an existing file if set to true */ static bool file_copy( const QString& src, const QString& dst, bool overwrite=false ); /** * remove a path * \param path the path to be removed * \param recursive performe recursive removal if set to true */ static bool rm( const QString& path, bool recursive=false ); /** * create a path * \param path the path to the directory to be created */ static bool mkdir( const QString& path ); private: static Logger* __logger; ///< a pointer to the logger static bool check_sys_paths(); ///< returns true if the system path is consistent static bool check_usr_paths(); ///< returns true if the user path is consistent static bool rm_fr( const QString& path ); ///< recursively remove a path /** * returns a list of usable drumkits, which means having a readable drumkit.xml file * \param path the path to search in for drumkits */ static QStringList drumkits_list( const QString& path ); /** * return true if all the asked permissions are ok * \param path the path to the file to check * \param perms bit mask of file_perms * \param silent output not messages if set to true */ static bool check_permissions( const QString& path, const int perms, bool silent ); static QString __sys_data_path; ///< the path to the system files static QString __usr_data_path; ///< the path to the user files }; }; #endif // H2C_FILESYSTEM_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/helpers/legacy.h000066400000000000000000000013561211146647700244170ustar00rootroot00000000000000 #ifndef H2C_LEGACY_H #define H2C_LEGACY_H #include namespace H2Core { class Drumkit; class Pattern; /** * Legacy is a container for legacy code which should be once removed */ class Legacy : public H2Core::Object { H2_OBJECT public: /** * load drumkit information from a file * \param dk_path is a path to an xml file * \return a Drumkit on success, 0 otherwise */ static Drumkit* load_drumkit( const QString& dk_path ); /** * load pattern from a file * \param pattern_path is a path to an xml file * \return a Pattern on success, 0 otherwise */ static Pattern* load_drumkit_pattern( const QString& pattern_path ); }; }; #endif // H2C_LEGACY_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/helpers/xml.h000066400000000000000000000107611211146647700237530ustar00rootroot00000000000000 #ifndef H2C_XML_H #define H2C_XML_H #include #include #include namespace H2Core { /** * XMLNode is a subclass of QDomNode with read and write values methods */ class XMLNode : public H2Core::Object, public QDomNode { H2_OBJECT public: /** basic constructor */ XMLNode( ); /** to wrap a QDomNode */ XMLNode( QDomNode node ); /** * reads an integer stored into a child node * \param node the name of the child node to read into * \param default_value the value returned if something goes wrong * \param inexistent_ok if set to false output a DEBUG log line if the node dosen't exists * \param empty_ok if set to false output a DEBUG log lline if the child node is empty */ int read_int( const QString& node, int default_value, bool inexistent_ok=true, bool empty_ok=true ); /** * reads a boolean stored into a child node * \param node the name of the child node to read into * \param default_value the value returned if something goes wrong * \param inexistent_ok if set to false output a DEBUG log line if the node dosen't exists * \param empty_ok if set to false output a DEBUG log lline if the child node is empty */ bool read_bool( const QString& node, bool default_value, bool inexistent_ok=true, bool empty_ok=true ); /** * reads a float stored into a child node * \param node the name of the child node to read into * \param default_value the value returned if something goes wrong * \param inexistent_ok if set to false output a DEBUG log line if the node dosen't exists * \param empty_ok if set to false output a DEBUG log lline if the child node is empty */ float read_float( const QString& node, float default_value, bool inexistent_ok=true, bool empty_ok=true ); /** * reads a string stored into a child node * \param node the name of the child node to read into * \param default_value the value returned if something goes wrong * \param inexistent_ok if set to false output a DEBUG log line if the node dosen't exists * \param empty_ok if set to false output a DEBUG log lline if the child node is empty */ QString read_string( const QString& node, const QString& default_value, bool inexistent_ok=true, bool empty_ok=true ); /** * write an integer into a child node * \param node the name of the child node to create * \param value the value to write */ void write_int( const QString& node, const int value ); /** * write a boolean into a child node * \param node the name of the child node to create * \param value the value to write */ void write_bool( const QString& node, const bool value ); /** * write a float into a child node * \param node the name of the child node to create * \param value the value to write */ void write_float( const QString& node, const float value ); /** * write a string into a child node * \param node the name of the child node to create * \param value the value to write */ void write_string( const QString& node, const QString& value ); private: /** * reads a string stored into a child node * \param node the name of the child node to read into * \param inexistent_ok if set to false output a DEBUG log line if the node dosen't exists * \param empty_ok if set to false output a DEBUG log lline if the child node is empty */ QString read_child_node( const QString& node, bool inexistent_ok, bool empty_ok ); /** * write a string into a child node * \param node the name of the child node to create * \param text the text to write */ void write_child_node( const QString& node, const QString& text ); }; /** * XMLDoc is a subclass of QDomDocument with read and write methods */ class XMLDoc : public H2Core::Object, public QDomDocument { H2_OBJECT public: /** basic constructor */ XMLDoc( ); /** * read the content of an xml file * \param filepath the path to the file to read from * \param schema_path the path to the XML Schema file */ bool read( const QString& filepath, const QString& schemapath=0 ); /** * write itself into a file * \param filepath the path to the file to write to */ bool write( const QString& filepath ); /** * create the xml header and root node * \param node_name, the name of the rootnode to build * \param xmlns, the xml namespace prefix to add after XMLNS_BASE */ void set_root( const QString& node_name, const QString& xmlns ); }; }; #endif // H2C_XML_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/hydrogen.h000066400000000000000000000164301211146647700233270ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef HYDROGEN_H #define HYDROGEN_H #include // for uint32_t et al #include "hydrogen/config.h" #include #include #include #include #include #include #include #include #include // Engine states (It's ok to use ==, <, and > when testing) #define STATE_UNINITIALIZED 1 // Not even the constructors have been called. #define STATE_INITIALIZED 2 // Not ready, but most pointers are now valid or NULL #define STATE_PREPARED 3 // Drivers are set up, but not ready to process audio. #define STATE_READY 4 // Ready to process audio #define STATE_PLAYING 5 // Currently playing a sequence. inline int randomValue( int max ); namespace H2Core { /// /// Hydrogen Audio Engine. /// class Hydrogen : public H2Core::Object { H2_OBJECT public: /// Return the Hydrogen instance static void create_instance(); // Also creates other instances, like AudioEngine static Hydrogen* get_instance() { assert(__instance); return __instance; }; ~Hydrogen(); // ***** SEQUENCER ******** /// Start the internal sequencer void sequencer_play(); /// Stop the internal sequencer void sequencer_stop(); void midi_noteOn( Note *note ); ///Last received midi message QString lastMidiEvent; int lastMidiEventParameter; void sequencer_setNextPattern( int pos, bool appendPattern, bool deletePattern ); void togglePlaysSelected( void ); // ***** ~SEQUENCER ******** /// Set current song void setSong( Song *newSong ); /// Return the current song Song* getSong(); void removeSong(); void addRealtimeNote ( int instrument, float velocity, float pan_L=1.0, float pan_R=1.0, float pitch=0.0, bool noteoff=false, bool forcePlay=false, int msg1=0 ); float getMasterPeak_L(); void setMasterPeak_L( float value ); float getMasterPeak_R(); void setMasterPeak_R( float value ); void getLadspaFXPeak( int nFX, float *fL, float *fR ); void setLadspaFXPeak( int nFX, float fL, float fR ); unsigned long getTickPosition(); unsigned long getRealtimeTickPosition(); unsigned long getTotalFrames(); unsigned long getRealtimeFrames(); PatternList * getCurrentPatternList(); void setCurrentPatternList( PatternList * pPatternList ); PatternList * getNextPatterns(); int getPatternPos(); void setPatternPos( int pos ); void triggerRelocateDuringPlay(); long getTickForPosition( int ); void restartDrivers(); void startExportSong( const QString& filename, int rate, int depth ); void stopExportSong( bool reconnectOldDriver ); AudioOutput* getAudioOutput(); MidiInput* getMidiInput(); MidiOutput* getMidiOutput(); int getState(); float getProcessTime(); float getMaxProcessTime(); int loadDrumkit( Drumkit *drumkitInfo ); /// delete an instrument. If `conditional` is true, and there are patterns that /// use this instrument, it's not deleted anyway void removeInstrument( int instrumentnumber, bool conditional ); //return the name of the current drumkit QString m_currentDrumkit; const QString& getCurrentDrumkitname() { return m_currentDrumkit; } void setCurrentDrumkitname( const QString& currentdrumkitname ) { this->m_currentDrumkit = currentdrumkitname; } void raiseError( unsigned nErrorCode ); void previewSample( Sample *pSample ); void previewInstrument( Instrument *pInstr ); enum ErrorMessages { UNKNOWN_DRIVER, ERROR_STARTING_DRIVER, JACK_SERVER_SHUTDOWN, JACK_CANNOT_ACTIVATE_CLIENT, JACK_CANNOT_CONNECT_OUTPUT_PORT, JACK_ERROR_IN_PORT_REGISTER }; void onTapTempoAccelEvent(); void setTapTempo( float fInterval ); void setBPM( float fBPM ); void restartLadspaFX(); void setSelectedPatternNumberWithoutGuiEvent( int nPat ); int getSelectedPatternNumber(); void setSelectedPatternNumber( int nPat ); int getSelectedInstrumentNumber(); void setSelectedInstrumentNumber( int nInstrument ); #ifdef H2CORE_HAVE_JACK void renameJackPorts(); #endif ///playlist vector struct HPlayListNode { QString m_hFile; QString m_hScript; QString m_hScriptEnabled; }; std::vector m_PlayList; ///beatconter void setbeatsToCount( int beatstocount); int getbeatsToCount(); void setNoteLength( float notelength); float getNoteLength(); int getBcStatus(); void handleBeatCounter(); void setBcOffsetAdjust(); /// jack time master unsigned long getHumantimeFrames(); void setHumantimeFrames(unsigned long hframes); void offJackMaster(); void onJackMaster(); unsigned long getTimeMasterFrames(); long getTickForHumanPosition( int humanpos ); float getNewBpmJTM(); void setNewBpmJTM( float bpmJTM); void ComputeHumantimeFrames(uint32_t nFrames); void __panic(); int __get_selected_PatterNumber(); unsigned int __getMidiRealtimeNoteTickPosition(); ///sample editor vectors void sortTimelineVector(); void sortTimelineTagVector(); /// timeline vector struct HTimelineVector { int m_htimelinebeat; //beat position in timeline // int m_htimelinebar; //bar position from current beat float m_htimelinebpm; //BPM // bool m_htimelineslide; //true if slide into new tempo // int m_htimelineslidebeatbegin; //position of slide begin (only beats, no bars) // int m_htimelineslideend; //position of slide end (only beats, no bars) // int m_htimelineslidetype; // 0 = slide up, 1 = slide down }; std::vector m_timelinevector; struct TimelineComparator { bool operator()( HTimelineVector const& lhs, HTimelineVector const& rhs) { return lhs.m_htimelinebeat < rhs.m_htimelinebeat; } }; void setTimelineBpm(); /// timeline tag vector struct HTimelineTagVector { int m_htimelinetagbeat; //beat position in timeline // int m_htimelineintensity; //intensity QString m_htimelinetag; // tag }; std::vector m_timelinetagvector; struct TimelineTagComparator { bool operator()( HTimelineTagVector const& lhs, HTimelineTagVector const& rhs) { return lhs.m_htimelinetagbeat < rhs.m_htimelinetagbeat; } }; ///midi lookuptable int m_nInstrumentLookupTable[128]; //void editInstrumentLookupTable( int instrument, int index); private: static Hydrogen* __instance; // used for song export Song::SongMode m_oldEngineMode; bool m_bOldLoopEnabled; std::list __instrument_death_row; /// Deleting instruments too soon leads to potential crashes. /// Private constructor Hydrogen(); void __kill_instruments(); }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/logger.h000066400000000000000000000077211211146647700227720ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_LOGGER_H #define H2C_LOGGER_H #include #include #include #include "hydrogen/config.h" class QString; class QStringList; namespace H2Core { /** * Class for writing logs to the console */ class Logger { public: /** possible logging bits */ enum log_levels { None = 0x00, Error = 0x01, Warning = 0x02, Info = 0x04, Debug = 0x08, Constructors = 0x10, AELockTracing = 0x20 }; /** mesage queue type */ typedef std::list queue_t; /** * create the logger instance if not exists, set the log level and return the instance * \param msk the logging level bitmask */ static Logger* bootstrap( unsigned msk ); /** create the logger instance if not exists */ static Logger* create_instance(); /** return the logger instance */ static Logger* get_instance() { assert(__instance); return __instance; } /** destructor */ ~Logger(); /** * return true if the level is set in the bitmask * \param lvl the level to check */ bool should_log( unsigned lvl ) const { return (lvl&__bit_msk); } /** * set the bitmask * \param msk the new bitmask to set */ static void set_bit_mask( unsigned msk ) { __bit_msk = msk; } /** return the current log level bit mask */ static unsigned bit_mask() { return __bit_msk; } /** * set use file flag * \param use the flag status */ void set_use_file( bool use ) { __use_file = use; } /** return __use_file */ bool use_file() const { return __use_file; } /** * parse a log level string and return the corresponding bit mask * \param lvl the log level string */ static unsigned parse_log_level( const char* lvl ); /** * the log function * \param level used to output the corresponding level string * \param class_name the name of the calling class * \param func_name the name of the calling function/method * \param msg the message to log */ void log( unsigned level, const QString& class_name, const char* func_name, const QString& msg ); /** * needed for beeing able to access logger internal * \param param is a pointer to the logger instance */ friend void* loggerThread_func( void* param ); private: static Logger* __instance; ///< logger private static instance bool __use_file; ///< write log to file if set to true bool __running; ///< set to true when the logger thread is running pthread_mutex_t __mutex; ///< lock for adding or removing elements only queue_t __msg_queue; ///< the message queue static unsigned __bit_msk; ///< the bitmask of log_level_t static const char* __levels[]; ///< levels strings /** constructor */ Logger(); #ifndef HAVE_SSCANF /** * convert an hex string to an integer. * returns -1 on failure. * \param str the hex string to convert * \param len the length of the string */ static int hextoi( const char* str, long len ); #endif // HAVE_SSCANF }; }; #endif // H2C_LOGGER_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/midi_action.h000066400000000000000000000037701211146647700237720ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef ACTION_H #define ACTION_H #include #include #include #include using namespace std; class MidiAction : public H2Core::Object { H2_OBJECT public: MidiAction( QString ); void setParameter1( QString text ){ parameter1 = text; } void setParameter2( QString text ){ parameter2 = text; } QString getParameter1(){ return parameter1; } QString getParameter2(){ return parameter2; } QString getType(){ return type; } private: QString type; QString parameter1; QString parameter2; }; bool setAbsoluteFXLevel( int nLine, int fx_channel , int fx_param); class MidiActionManager : public H2Core::Object { H2_OBJECT private: static MidiActionManager *__instance; QStringList actionList; QStringList eventList; int lastBpmChangeCCParameter; public: bool handleAction( MidiAction * ); static void create_instance(); static MidiActionManager* get_instance() { assert(__instance); return __instance; } QStringList getActionList(){ return actionList; } QStringList getEventList(){ return eventList; } MidiActionManager(); ~MidiActionManager(); }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/midi_map.h000066400000000000000000000034511211146647700232660ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef MIDIMAP_H #define MIDIMAP_H #include #include #include #include class MidiAction; class MidiMap : public H2Core::Object { H2_OBJECT public: typedef std::map< QString, MidiAction* > map_t; static MidiMap* __instance; ~MidiMap(); static void create_instance(); static void reset_instance(); // convenience accessor to reset() static MidiMap* get_instance() { assert(__instance); return __instance; } void reset(); // Reinitializes the object. void registerMMCEvent( QString, MidiAction* ); void registerNoteEvent( int , MidiAction* ); void registerCCEvent( int , MidiAction * ); map_t getMMCMap(); MidiAction* getMMCAction( QString ); MidiAction* getNoteAction( int note ); MidiAction * getCCAction( int parameter ); void setupNoteArray(); private: MidiMap(); MidiAction* __note_array[ 128 ]; MidiAction* __cc_array[ 128 ]; map_t mmcMap; QMutex __mutex; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/object.h000066400000000000000000000136321211146647700227570ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2C_OBJECT_H #define H2C_OBJECT_H #include "hydrogen/logger.h" #include "hydrogen/config.h" #include "hydrogen/globals.h" #include #include #include namespace H2Core { /** * Base class. */ class Object { public: /** destructor */ ~Object(); /** copy constructor */ Object( const Object& obj ); /** constructor */ Object( const char* class_name ); const char* class_name( ) const { return __class_name; } ///< return the class name /** * enable/disable class instances counting * \param flag the counting status to set */ static void set_count( bool flag ); static bool count_active() { return __count; } ///< return true if class instances counting is enabled static unsigned objects_count() { return __objects_count; } ///< return the number of objects /** * output the full objects map to a given ostream * \param out the ostream to write to */ static void write_objects_map_to( std::ostream& out ); static void write_objects_map_to_cerr() { Object::write_objects_map_to( std::cerr ); } ///< ouput objects map to stderr /** * must be called before any Object instanciation ! * \param logger the logger instance used to send messages to * \param count should we count objects instances or not */ static int bootstrap( Logger* logger, bool count=false ); static Logger* logger() { return __logger; } ///< return the logger instance private: /** * search for the class name within __objects_map, decrease class and global counts * \param obj the object to be taken into account */ static void del_object( const Object* obj ); /** * search for the clas name within __objects_map, create it if doesn't exists, increase class and global counts * \param obj the object to be taken into account * \param copy is it called from a copy constructor */ static void add_object( const Object* obj, bool copy ); /** an objects class map item type */ typedef struct { unsigned constructed; unsigned destructed; } obj_cpt_t; /** the objects class map type */ typedef std::map object_map_t; const char* __class_name; ///< the object class name static bool __count; ///< should we count class instances static unsigned __objects_count; ///< total objects count static object_map_t __objects_map; ///< objects classes and instances count structure static pthread_mutex_t __mutex; ///< yeah this has to be thread safe protected: static Logger* __logger; ///< logger instance pointer }; // Object inherited class declaration macro #define H2_OBJECT \ public: static const char* class_name() { return __class_name; } \ private: static const char* __class_name; \ // LOG MACROS #define __LOG_METHOD( lvl, msg ) if( __logger->should_log( (lvl) ) ) { __logger->log( (lvl), class_name(), __FUNCTION__, msg ); } #define __LOG_CLASS( lvl, msg ) if( logger()->should_log( (lvl) ) ) { logger()->log( (lvl), class_name(), __FUNCTION__, msg ); } #define __LOG_OBJ( lvl, msg ) if( __object->logger()->should_log( (lvl) ) ) { __object->logger()->log( (lvl), 0, __PRETTY_FUNCTION__, msg ); } #define __LOG_STATIC( lvl, msg ) if( H2Core::Logger::get_instance()->should_log( (lvl) ) ) { H2Core::Logger::get_instance()->log( (lvl), 0, __PRETTY_FUNCTION__, msg ); } #define __LOG( logger, lvl, msg ) if( (logger)->should_log( (lvl) ) ) { (logger)->log( (lvl), 0, 0, msg ); } // Object instance method logging macros #define DEBUGLOG(x) __LOG_METHOD( H2Core::Logger::Debug, (x) ); #define INFOLOG(x) __LOG_METHOD( H2Core::Logger::Info, (x) ); #define WARNINGLOG(x) __LOG_METHOD( H2Core::Logger::Warning, (x) ); #define ERRORLOG(x) __LOG_METHOD( H2Core::Logger::Error, (x) ); // Object class method logging macros #define _DEBUGLOG(x) __LOG_CLASS( H2Core::Logger::Debug, (x) ); #define _INFOLOG(x) __LOG_CLASS( H2Core::Logger::Info, (x) ); #define _WARNINGLOG(x) __LOG_CLASS( H2Core::Logger::Warning, (x) ); #define _ERRORLOG(x) __LOG_CLASS( H2Core::Logger::Error, (x) ); // logging macros using an Object *__object ( thread : Object* __object = ( Object* )param; ) #define __DEBUGLOG(x) __LOG_OBJ( H2Core::Logger::Debug, (x) ); #define __INFOLOG(x) __LOG_OBJ( H2Core::Logger::Info, (x) ); #define __WARNINGLOG(x) __LOG_OBJ( H2Core::Logger::Warning, (x) ); #define __ERRORLOG(x) __LOG_OBJ( H2Core::Logger::Error, (x) ); // logging macros using ( thread : Object* __object = ( Object* )param; ) #define ___DEBUGLOG(x) __LOG_STATIC( H2Core::Logger::Debug, (x) ); #define ___INFOLOG(x) __LOG_STATIC( H2Core::Logger::Info, (x) ); #define ___WARNINGLOG(x) __LOG_STATIC(H2Core::Logger::Warning, (x) ); #define ___ERRORLOG(x) __LOG_STATIC( H2Core::Logger::Error, (x) ); }; #endif // H2C_OBJECT_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/include/hydrogen/playlist.h000066400000000000000000000033061211146647700233470ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PLAYLIST_H #define PLAYLIST_H #include #include #include #include #include #include #include /// /// handle playlist /// class Playlist : public H2Core::Object { H2_OBJECT public: static void create_instance(); static Playlist* get_instance() { assert(__instance); return __instance; } ~Playlist(); // std::vector m_PlayList; void setNextSongByNumber(int SongNumber); void setSelectedSongNr( int songNumber); int selectedSongNumber; int activeSongNumber; int getSelectedSongNr(); void setActiveSongNumber( int ActiveSongNumber); int getActiveSongNumber(); QString __playlistName; private: static Playlist* __instance; /// Constructor Playlist(); void execScript( int index); }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/rt_clock.h000066400000000000000000000037271211146647700233150ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2_RTCLOCK_H #define H2_RTCLOCK_H #include "hydrogen/config.h" /* RTCLOCK_SETUP RTCLOCK_START ... code to be benchmarked ... RTCLOCK_STOP DEBUGLOG(QString("elapsed time : %1 [ns]").arg(RTCLOCK_NS)) DEBUGLOG(QString("elapsed time : %1 [us]").arg(RTCLOCK_US)) DEBUGLOG(QString("elapsed time : %1 [ms]").arg(RTCLOCK_MS)) */ #if defined(H2CORE_HAVE_DEBUG) and defined(HAVE_RTCLOCK) #include //#include #define RTCLOCK_SETUP struct timespec __t0,__t1; //uint64_t __dt; #define RTCLOCK_START clock_gettime(CLOCK_MONOTONIC, &__t0); #define RTCLOCK_STOP clock_gettime(CLOCK_MONOTONIC, &__t1); #define RTCLOCK_NS (((__t1.tv_sec * 1000000000) + __t1.tv_nsec) - ((__t0.tv_sec * 1000000000) + __t0.tv_nsec)) #define RTCLOCK_US (((__t1.tv_sec * 1000000000) + __t1.tv_nsec) - ((__t0.tv_sec * 1000000000) + __t0.tv_nsec))/1000 #define RTCLOCK_MS (((__t1.tv_sec * 1000000000) + __t1.tv_nsec) - ((__t0.tv_sec * 1000000000) + __t0.tv_nsec))/1000000 #else #define RTCLOCK_SETUP #define RTCLOCK_START #define RTCLOCK_STOP #define RTCLOCK_NS -1 #define RTCLOCK_US -1 #define RTCLOCK_MS -1 #endif #endif // H2_RTCLOCK_H hydrogen-0.9.6-beta3/src/core/include/hydrogen/sampler/000077500000000000000000000000001211146647700227765ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/include/hydrogen/sampler/Sampler.h000066400000000000000000000131021211146647700245470ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SAMPLER_H #define SAMPLER_H #include #include #include #include namespace H2Core { class Note; class Song; class Sample; class Instrument; class AudioOutput; /// /// Waveform based sampler. /// class Sampler : public H2Core::Object { H2_OBJECT public: float *__main_out_L; ///< sampler main out (left channel) float *__main_out_R; ///< sampler main out (right channel) Sampler(); ~Sampler(); void process( uint32_t nFrames, Song* pSong ); /// Start playing a note void note_on( Note *note ); /// Stop playing a note. void note_off( Note *note ); void midi_keyboard_note_off( int key ); void stop_playing_notes( Instrument *instr = NULL ); int get_playing_notes_number() { return __playing_notes_queue.size(); } void preview_sample( Sample* sample, int length ); void preview_instrument( Instrument* instr ); void setPlayingNotelength( Instrument* instrument, unsigned long ticks, unsigned long noteOnTick ); bool is_instrument_playing( Instrument* pInstr ); enum InterpolateMode { LINEAR, COSINE, THIRD, CUBIC, HERMITE }; void setInterpolateMode( InterpolateMode mode ){ __interpolateMode = mode; } InterpolateMode getInterpolateMode(){ return __interpolateMode; } private: std::vector __playing_notes_queue; std::vector __queuedNoteOffs; /// Instrument used for the preview feature. Instrument* __preview_instrument; unsigned __render_note( Note* pNote, unsigned nBufferSize, Song* pSong ); InterpolateMode __interpolateMode; /* double Interpolate( float y0, float y1, float y2, float y3, double mu ) { switch( __interpolateMode ){ case LINEAR: return linear_Interpolate( y1, y2, (float) mu ); case COSINE: return cosine_Interpolate( y1, y2, mu ); case THIRD: return third_Interpolate( y0, y1, y2, y3, mu ); case CUBIC: return cubic_Interpolate( y0, y1, y2, y3, mu ); case HERMITE: return hermite_Interpolate( y0, y1, y2, y3, mu ); } };*/ inline static float linear_Interpolate( float y1, float y2, float mu ) { /* * mu defines where to estimate the value on the interpolated line * y1 = buffervalue on position * y2 = buffervalue on position +1 */ return y1 * ( 1 - mu ) + y2 * mu; }; inline static float cosine_Interpolate( float y1, float y2, double mu ) { /* * mu defines where to estimate the value on the interpolated line * y1 = buffervalue on position * y2 = buffervalue on position +1 */ double mu2; mu2 = ( 1 - cos ( mu * 3.14159 ) ) / 2; return( y1 * (1 - mu2 ) + y2 * mu2 ); }; inline static float third_Interpolate( float y0, float y1, float y2, float y3, double mu ) { /* * mu defines where to estimate the value on the interpolated line * y0 = buffervalue on position -1 * y1 = buffervalue on position * y2 = buffervalue on position +1 * y3 = buffervalue on position +2 */ float c0 = y1; float c1 = 0.5f * ( y2 - y0 ); float c3 = 1.5f * ( y1 - y2 ) + 0.5f * ( y3 - y0 ); float c2 = y0 - y1 + c1 - c3; return ( ( c3 * mu + c2 ) * mu + c1 ) * mu + c0; }; inline static float cubic_Interpolate( float y0, float y1, float y2, float y3, double mu) { /* * mu defines where to estimate the value on the interpolated line * y0 = buffervalue on position -1 * y1 = buffervalue on position * y2 = buffervalue on position +1 * y3 = buffervalue on position +2 */ double a0, a1, a2, a3, mu2; mu2 = mu * mu; a0 = y3 - y2 - y0 + y1; a1 = y0 - y1 - a0; a2 = y2 - y0; a3 = y1; return( a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3 ); }; inline static float hermite_Interpolate( float y0, float y1, float y2, float y3, double mu ) { /* * mu defines where to estimate the value on the interpolated line * y0 = buffervalue on position -1 * y1 = buffervalue on position * y2 = buffervalue on position +1 * y3 = buffervalue on position +2 */ double a0, a1, a2, a3, mu2; mu2 = mu * mu; a0 = -0.5 * y0 + 1.5 * y1 - 1.5 * y2 + 0.5 * y3; a1 = y0 - 2.5 * y1 + 2 * y2 - 0.5 * y3; a2 = -0.5 * y0 + 0.5 * y2; a3 = y1; return( a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3 ); }; int __render_note_no_resample( Sample *pSample, Note *pNote, int nBufferSize, int nInitialSilence, float cost_L, float cost_R, float cost_track_L, float cost_track_R, Song* pSong ); int __render_note_resample( Sample *pSample, Note *pNote, int nBufferSize, int nInitialSilence, float cost_L, float cost_R, float cost_track_L, float cost_track_R, float fLayerPitch, Song* pSong ); }; } // namespace #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/smf/000077500000000000000000000000001211146647700221205ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/include/hydrogen/smf/SMF.h000066400000000000000000000037661211146647700227320ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2004 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SMF_H #define SMF_H #include #include #include #include #include #include namespace H2Core { class SMFHeader : public SMFBase, public H2Core::Object { H2_OBJECT public: SMFHeader( int nFormat, int nTracks, int nTPQN ); ~SMFHeader(); int m_nFormat; ///< SMF format int m_nTracks; ///< number of tracks int m_nTPQN; ///< ticks per quarter note virtual std::vector getBuffer(); }; class SMFTrack : public SMFBase, public H2Core::Object { H2_OBJECT public: SMFTrack( const QString& sTrackName ); ~SMFTrack(); void addEvent( SMFEvent *pEvent ); virtual std::vector getBuffer(); private: std::vector m_eventList; }; class SMF : public SMFBase, public H2Core::Object { H2_OBJECT public: SMF(); ~SMF(); void addTrack( SMFTrack *pTrack ); virtual std::vector getBuffer(); private: std::vector m_trackList; SMFHeader* m_pHeader; }; class SMFWriter : Object { H2_OBJECT public: SMFWriter(); ~SMFWriter(); void save( const QString& sFilename, Song *pSong ); private: FILE *m_file; }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/smf/SMFEvent.h000066400000000000000000000051051211146647700237210ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SMF_EVENT_H #define SMF_EVENT_H #include #include namespace H2Core { class SMFBuffer : public H2Core::Object { H2_OBJECT public: std::vector getBuffer() { return m_buffer; } void writeByte( short int nByte ); void writeWord( int nVal ); void writeDWord( long nVal ); void writeString( const QString& sMsg ); void writeVarLen( long nVal ); std::vector m_buffer; SMFBuffer(); }; enum SMFEventType { NOTE_OFF = 128, NOTE_ON = 144 }; enum SMFMetaEventType { SEQUENCE_NUMBER = 0, TEXT_EVENT, COPYRIGHT_NOTICE, TRACK_NAME, INSTRUMENT_NAME, LYRIC, MARKER, CUE_POINT, END_OF_TRACK = 0x2f, SET_TEMPO = 0x51, TIME_SIGNATURE = 0x58, KEY_SIGNATURE }; class SMFBase { public: virtual ~SMFBase() {} virtual std::vector getBuffer() = 0; }; class SMFEvent : public SMFBase, public H2Core::Object { H2_OBJECT public: SMFEvent( const char* sEventName, unsigned nTicks ); virtual ~SMFEvent(); int m_nTicks; int m_nDeltaTime; }; class SMFTrackNameMetaEvent : public SMFEvent { H2_OBJECT public: SMFTrackNameMetaEvent( const QString& sTrackName, unsigned nDeltaTime ); virtual std::vector getBuffer(); private: QString m_sTrackName; }; class SMFNoteOnEvent : public SMFEvent { H2_OBJECT public: SMFNoteOnEvent( unsigned nTicks, int nChannel, int nPitch, int nVelocity ); virtual std::vector getBuffer(); protected: unsigned m_nChannel; unsigned m_nPitch; unsigned m_nVelocity; }; class SMFNoteOffEvent : public SMFEvent { H2_OBJECT public: SMFNoteOffEvent( unsigned nTicks, int nChannel, int nPitch, int nVelocity ); virtual std::vector getBuffer(); protected: unsigned m_nChannel; unsigned m_nPitch; unsigned m_nVelocity; }; }; #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/synth/000077500000000000000000000000001211146647700225005ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/include/hydrogen/synth/Synth.h000066400000000000000000000032201211146647700237530ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SYNTH_H #define SYNTH_H #include // For uint32_t et al #include #include #include #include #include namespace H2Core { /// /// A simple synthetizer... /// class Synth : public H2Core::Object { H2_OBJECT public: float *m_pOut_L; float *m_pOut_R; Synth(); ~Synth(); /// Start playing a note void noteOn( Note* pNote ); /// Stop playing a note. void noteOff( Note* pNote ); void process( uint32_t nFrames ); void setAudioOutput( AudioOutput* pAudioOutput ); int getPlayingNotesNumber() { return m_playingNotesQueue.size(); } private: std::vector m_playingNotesQueue; float m_fTheta; AudioOutput *m_pAudioOutput; }; } // namespace H2Core #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/timehelper.h000066400000000000000000000015661211146647700236520ustar00rootroot00000000000000#ifdef WIN32 #include #include #ifndef TIMEHELPER_H #define TIMEHELPER_H #if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) #define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 #else #define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL #endif #ifndef timersub # define timersub(a, b, result) \ do { \ (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ if ((result)->tv_usec < 0) { \ --(result)->tv_sec; \ (result)->tv_usec += 1000000; \ } \ } while (0) #endif struct timezone { int tz_minuteswest; /* minutes W of Greenwich */ int tz_dsttime; /* type of dst correction */ }; int gettimeofday(struct timeval *tv, struct timezone *tz); #endif #endif hydrogen-0.9.6-beta3/src/core/include/hydrogen/version.h000066400000000000000000000005561211146647700231770ustar00rootroot00000000000000 #ifndef H2C_VERSION_H #define H2C_VERSION_H #include namespace H2Core { /// Returns the current Hydrogen version string std::string get_version(); /** * return true of the current version is older than the given values */ bool version_older_than( int major, int minor, int patch ); #endif // H2C_VERSION }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/000077500000000000000000000000001211146647700166605ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/src/IO/000077500000000000000000000000001211146647700171675ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/src/IO/AlsaAudioDriver.h000066400000000000000000000041371211146647700223630ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef ALSA_AUDIO_DRIVER_H #define ALSA_AUDIO_DRIVER_H #include #include #ifdef H2CORE_HAVE_ALSA #include #include namespace H2Core { typedef int ( *audioProcessCallback )( uint32_t, void * ); class AlsaAudioDriver : public AudioOutput { H2_OBJECT public: snd_pcm_t *m_pPlayback_handle; bool m_bIsRunning; unsigned long m_nBufferSize; float* m_pOut_L; float* m_pOut_R; int m_nXRuns; QString m_sAlsaAudioDevice; audioProcessCallback m_processCallback; AlsaAudioDriver( audioProcessCallback processCallback ); ~AlsaAudioDriver(); virtual int init( unsigned nBufferSize ); virtual int connect(); virtual void disconnect(); virtual unsigned getBufferSize(); virtual unsigned getSampleRate(); virtual float* getOut_L(); virtual float* getOut_R(); virtual void updateTransportInfo(); virtual void play(); virtual void stop(); virtual void locate( unsigned long nFrame ); virtual void setBpm( float fBPM ); private: unsigned int m_nSampleRate; }; #else namespace H2Core { class AlsaAudioDriver : public NullDriver { H2_OBJECT public: AlsaAudioDriver( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} }; #endif // H2CORE_HAVE_ALSA }; #endif hydrogen-0.9.6-beta3/src/core/src/IO/AlsaMidiDriver.h000066400000000000000000000033131211146647700221770ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef ALSA_MIDI_DRIVER_H #define ALSA_MIDI_DRIVER_H #include #include #ifdef H2CORE_HAVE_ALSA #include #include #include namespace H2Core { /// /// Alsa Midi Driver /// Based on Matthias Nagorni alsa sequencer example /// class AlsaMidiDriver : public virtual MidiInput, public virtual MidiOutput { H2_OBJECT public: AlsaMidiDriver(); virtual ~AlsaMidiDriver(); virtual void open(); virtual void close(); virtual std::vector getOutputPortList(); void midi_action( snd_seq_t *seq_handle ); void getPortInfo( const QString& sPortName, int& nClient, int& nPort ); virtual void handleQueueNote(Note* pNote); virtual void handleQueueNoteOff( int channel, int key, int velocity ); virtual void handleQueueAllNoteOff(); private: }; }; #endif // H2CORE_HAVE_ALSA #endif hydrogen-0.9.6-beta3/src/core/src/IO/CoreAudioDriver.h000066400000000000000000000047111211146647700223710ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://hydrogen.sourceforge.net * * CoreAudio Driver for Hydrogen * Copyright(c) 2005 by Jonathan Dempsey [jonathandempsey@fastmail.fm] * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Rewrote CoreAudio driver, now using AUHAL (2005/03/02 Jonathan Dempsey) * Cleaned up the code a bit and updated (2005/11/29 Jonathan Dempsey) * More cleaning . . . (2005/12/31 Jonathan Dempsey) */ #ifndef COREAUDIO_DRIVER_H #define COREAUDIO_DRIVER_H #include #include #ifdef H2CORE_HAVE_COREAUDIO #include #include #endif #include #include typedef int ( *audioProcessCallback )( uint32_t, void * ); namespace H2Core { #ifdef H2CORE_HAVE_COREAUDIO class CoreAudioDriver : public AudioOutput { H2_OBJECT public: audioProcessCallback mProcessCallback; UInt32 m_nBufferSize; AudioUnit m_outputUnit; AudioDeviceID m_outputDevice; CoreAudioDriver( audioProcessCallback processCallback ); virtual ~CoreAudioDriver(); int init( unsigned bufferSize ); unsigned getSampleRate(); unsigned getBufferSize(); int connect(); void disconnect(); float* getOut_L(); float* getOut_R(); float* m_pOut_L; float* m_pOut_R; virtual void play(); virtual void stop(); virtual void locate( unsigned long nFrame ); virtual void updateTransportInfo(); virtual void setBpm( float fBPM ); private: bool m_bIsRunning; unsigned m_nSampleRate; unsigned oSampleRate; }; #else class CoreAudioDriver : public NullDriver { H2_OBJECT public: CoreAudioDriver( audioProcessCallback processCallback ) : NullDriver ( processCallback ) {} }; #endif // H2CORE_HAVE_COREAUDIO } #endif hydrogen-0.9.6-beta3/src/core/src/IO/DiskWriterDriver.h000066400000000000000000000041111211146647700226000ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef DISK_WRITER_DRIVER_H #define DISK_WRITER_DRIVER_H #include #include #include #include namespace H2Core { typedef int ( *audioProcessCallback )( uint32_t, void * ); /// /// Driver for export audio to disk /// class DiskWriterDriver : public AudioOutput { H2_OBJECT public: unsigned m_nSampleRate; QString m_sFilename; unsigned m_nBufferSize; int m_nSampleDepth; audioProcessCallback m_processCallback; float* m_pOut_L; float* m_pOut_R; DiskWriterDriver( audioProcessCallback processCallback, unsigned nSamplerate, const QString& sFilename, int nSampleDepth ); ~DiskWriterDriver(); int init( unsigned nBufferSize ); int connect(); void disconnect(); void write( float* buffer_L, float* buffer_R, unsigned int bufferSize ); void audioEngine_process_checkBPMChanged(); unsigned getBufferSize() { return m_nBufferSize; } unsigned getSampleRate(); float* getOut_L() { return m_pOut_L; } float* getOut_R() { return m_pOut_R; } virtual void play(); virtual void stop(); virtual void locate( unsigned long nFrame ); virtual void updateTransportInfo(); virtual void setBpm( float fBPM ); private: }; }; #endif hydrogen-0.9.6-beta3/src/core/src/IO/FakeDriver.h000066400000000000000000000032561211146647700213700ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef FAKE_DRIVER_H #define FAKE_DRIVER_H #include #include namespace H2Core { typedef int ( *audioProcessCallback )( uint32_t, void * ); /** * Fake audio driver. Used only for profiling. */ class FakeDriver : public AudioOutput { H2_OBJECT public: FakeDriver( audioProcessCallback processCallback ); ~FakeDriver(); int init( unsigned nBufferSize ); int connect(); void disconnect(); unsigned getBufferSize() { return m_nBufferSize; } unsigned getSampleRate(); float* getOut_L(); float* getOut_R(); virtual void play(); virtual void stop(); virtual void locate( unsigned long nFrame ); virtual void updateTransportInfo(); virtual void setBpm( float fBPM ); private: audioProcessCallback m_processCallback; unsigned m_nBufferSize; float* m_pOut_L; float* m_pOut_R; }; }; #endif hydrogen-0.9.6-beta3/src/core/src/IO/JackMidiDriver.h000066400000000000000000000051361211146647700221740ustar00rootroot00000000000000/*- * Copyright (c) 2011 Hans Petter Selasky * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. */ #ifndef JACK_MIDI_DRIVER_H #define JACK_MIDI_DRIVER_H #include #include #ifdef H2CORE_HAVE_JACK #include #include #include #include #include #include #define JACK_MIDI_BUFFER_MAX 64 /* events */ namespace H2Core { class JackMidiDriver : public virtual MidiInput, public virtual MidiOutput { H2_OBJECT public: JackMidiDriver(); virtual ~JackMidiDriver(); virtual void open(); virtual void close(); virtual std::vector getOutputPortList(); void getPortInfo( const QString& sPortName, int& nClient, int& nPort ); void JackMidiWrite(jack_nframes_t nframes); void JackMidiRead(jack_nframes_t nframes); virtual void handleQueueNote(Note* pNote); virtual void handleQueueNoteOff( int channel, int key, int velocity ); virtual void handleQueueAllNoteOff(); private: void JackMidiOutEvent(uint8_t *buf, uint8_t len); void lock(); void unlock(); jack_port_t *output_port; jack_port_t *input_port; jack_client_t *jack_client; pthread_mutex_t mtx; int running; uint8_t jack_buffer[JACK_MIDI_BUFFER_MAX * 4]; uint32_t rx_in_pos; uint32_t rx_out_pos; }; }; #endif /* H2CORE_HAVE_JACK */ #endif hydrogen-0.9.6-beta3/src/core/src/IO/OssDriver.h000066400000000000000000000045451211146647700212700ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef OSS_AUDIO_DRIVER_H #define OSS_AUDIO_DRIVER_H #include #include // check if OSS support is enabled #ifdef H2CORE_HAVE_OSS #ifdef __NetBSD__ #include #else #include #endif #include #include #include #include #include #include #include #include #include /* #ifdef __NetBSD__ #define AUDIO_DEVICE "/dev/audio" #else #define AUDIO_DEVICE "/dev/dsp" #endif */ namespace H2Core { typedef int ( *audioProcessCallback )( uint32_t, void * ); /// /// OSS Audio Driver /// class OssDriver : public AudioOutput { H2_OBJECT public: OssDriver( audioProcessCallback processCallback ); ~OssDriver(); int init( unsigned bufferSize ); int connect(); void disconnect(); void write(); unsigned getBufferSize(); unsigned getSampleRate(); float* getOut_L(); float* getOut_R(); virtual void play(); virtual void stop(); virtual void locate( unsigned long nFrame ); virtual void updateTransportInfo(); virtual void setBpm( float fBPM ); private: /** file descriptor, for writing to /dev/dsp */ int fd; short* audioBuffer; float* out_L; float* out_R; audioProcessCallback processCallback; int log2( int n ); }; #else namespace H2Core { class OssDriver : public NullDriver { H2_OBJECT public: OssDriver( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} }; #endif // OSS support }; #endif hydrogen-0.9.6-beta3/src/core/src/IO/PortAudioDriver.h000066400000000000000000000040341211146647700224230ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PORT_AUDIO_DRIVER_H #define PORT_AUDIO_DRIVER_H #include #include #include #ifdef H2CORE_HAVE_PORTAUDIO #include #include namespace H2Core { typedef int ( *audioProcessCallback )( uint32_t, void * ); class PortAudioDriver : public AudioOutput { H2_OBJECT public: audioProcessCallback m_processCallback; float* m_pOut_L; float* m_pOut_R; unsigned m_nBufferSize; PortAudioDriver( audioProcessCallback processCallback ); virtual ~PortAudioDriver(); virtual int init( unsigned nBufferSize ); virtual int connect(); virtual void disconnect(); virtual unsigned getBufferSize(); virtual unsigned getSampleRate(); virtual float* getOut_L(); virtual float* getOut_R(); virtual void updateTransportInfo(); virtual void play(); virtual void stop(); virtual void locate( unsigned long nFrame ); virtual void setBpm( float fBPM ); private: PaStream *m_pStream; unsigned m_nSampleRate; }; }; #else namespace H2Core { class PortAudioDriver : public NullDriver { H2_OBJECT public: PortAudioDriver( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} }; }; #endif #endif hydrogen-0.9.6-beta3/src/core/src/IO/PortMidiDriver.h000066400000000000000000000030121211146647700222370ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PORT_MIDI_DRIVER_H #define PORT_MIDI_DRIVER_H #include #include #ifdef H2CORE_HAVE_PORTMIDI #include namespace H2Core { class PortMidiDriver : public virtual MidiInput, public virtual MidiOutput { H2_OBJECT public: PmStream *m_pMidiIn; PmStream *m_pMidiOut; bool m_bRunning; PortMidiDriver(); virtual ~PortMidiDriver(); virtual void open(); virtual void close(); virtual std::vector getOutputPortList(); virtual void handleQueueNote(Note* pNote); virtual void handleQueueNoteOff( int channel, int key, int velocity ); virtual void handleQueueAllNoteOff(); private: }; }; #endif #endif hydrogen-0.9.6-beta3/src/core/src/IO/alsa_audio_driver.cpp000066400000000000000000000230601211146647700233500ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "AlsaAudioDriver.h" #ifdef H2CORE_HAVE_ALSA #include #include #include namespace H2Core { pthread_t alsaAudioDriverThread; static int alsa_xrun_recovery( snd_pcm_t *handle, int err ) { if ( err == -EPIPE ) { /* under-run */ err = snd_pcm_prepare( handle ); } else if ( err == -ESTRPIPE ) { while ( ( err = snd_pcm_resume( handle ) ) == -EAGAIN ) sleep( 1 ); /* wait until the suspend flag is released */ if ( err < 0 ) { err = snd_pcm_prepare( handle ); if ( err < 0 ) std::cerr << "Can't recovery from suspend, prepare failed: " << snd_strerror( err ) << std::endl; } return 0; } return err; } void* alsaAudioDriver_processCaller( void* param ) { Object *__object = (Object*)param; AlsaAudioDriver *pDriver = ( AlsaAudioDriver* )param; // stolen from amSynth struct sched_param sched; sched.sched_priority = 50; int res = sched_setscheduler( 0, SCHED_FIFO, &sched ); sched_getparam( 0, &sched ); if ( res ) { __ERRORLOG( "Can't set realtime scheduling for ALSA Driver" ); } __INFOLOG( QString( "Scheduling priority = %1" ).arg( sched.sched_priority ) ); sleep( 1 ); int err; if ( ( err = snd_pcm_prepare( pDriver->m_pPlayback_handle ) ) < 0 ) { __ERRORLOG( QString( "Cannot prepare audio interface for use: %1" ).arg( snd_strerror ( err ) ) ); } int nFrames = pDriver->m_nBufferSize; // _INFOLOG( "nFrames: " + to_string( nFrames ) ); short pBuffer[ nFrames * 2 ]; float *pOut_L = pDriver->m_pOut_L; float *pOut_R = pDriver->m_pOut_R; while ( pDriver->m_bIsRunning ) { // prepare the audio data pDriver->m_processCallback( nFrames, NULL ); for ( int i = 0; i < nFrames; ++i ) { pBuffer[ i * 2 ] = ( short )( pOut_L[ i ] * 32768.0 ); pBuffer[ i * 2 + 1 ] = ( short )( pOut_R[ i ] * 32768.0 ); } if ( ( err = snd_pcm_writei( pDriver->m_pPlayback_handle, pBuffer, nFrames ) ) < 0 ) { __ERRORLOG( "XRUN" ); if ( alsa_xrun_recovery( pDriver->m_pPlayback_handle, err ) < 0 ) { __ERRORLOG( "Can't recovery from XRUN" ); } // retry if ( ( err = snd_pcm_writei( pDriver->m_pPlayback_handle, pBuffer, nFrames ) ) < 0 ) { __ERRORLOG( "XRUN 2" ); if ( alsa_xrun_recovery( pDriver->m_pPlayback_handle, err ) < 0 ) { __ERRORLOG( "Can't recovery from XRUN" ); } } pDriver->m_nXRuns++; } } return 0; } const char* AlsaAudioDriver::__class_name = "AlsaAudioDriver"; AlsaAudioDriver::AlsaAudioDriver( audioProcessCallback processCallback ) : AudioOutput( __class_name ) , m_bIsRunning( false ) , m_pOut_L( NULL ) , m_pOut_R( NULL ) , m_nXRuns( 0 ) , m_processCallback( processCallback ) { INFOLOG( "INIT" ); m_nSampleRate = Preferences::get_instance()->m_nSampleRate; m_sAlsaAudioDevice = Preferences::get_instance()->m_sAlsaAudioDevice; } AlsaAudioDriver::~AlsaAudioDriver() { if ( m_nXRuns > 0 ) { WARNINGLOG( QString( "%1 xruns" ).arg( m_nXRuns ) ); } INFOLOG( "DESTROY" ); } int AlsaAudioDriver::init( unsigned nBufferSize ) { INFOLOG( "init" ); m_nBufferSize = nBufferSize; return 0; // ok } int AlsaAudioDriver::connect() { INFOLOG( "alsa device: " + m_sAlsaAudioDevice ); int nChannels = 2; int period_size = m_nBufferSize / 2; int err; // provo ad aprire il device per verificare se e' libero ( non bloccante ) if ( ( err = snd_pcm_open( &m_pPlayback_handle, m_sAlsaAudioDevice.toLocal8Bit(), SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK ) ) < 0 ) { ERRORLOG( QString( "ALSA: cannot open audio device %1:%2" ).arg( m_sAlsaAudioDevice ).arg( snd_strerror( err ) ) ); // il dispositivo e' occupato..provo con "default" m_sAlsaAudioDevice = "default"; if ( ( err = snd_pcm_open( &m_pPlayback_handle, m_sAlsaAudioDevice.toLocal8Bit(), SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK ) ) < 0 ) { ERRORLOG( QString( "ALSA: cannot open audio device %1:%2" ).arg( m_sAlsaAudioDevice ) .arg( QString::fromLocal8Bit(snd_strerror(err)) ) ); return 1; } WARNINGLOG( "Using alsa device: " + m_sAlsaAudioDevice ); } snd_pcm_close( m_pPlayback_handle ); // Apro il device ( bloccante ) if ( ( err = snd_pcm_open( &m_pPlayback_handle, m_sAlsaAudioDevice.toLocal8Bit(), SND_PCM_STREAM_PLAYBACK, 0 ) ) < 0 ) { ERRORLOG( QString( "ALSA: cannot open audio device %1:%2" ).arg( m_sAlsaAudioDevice ).arg( QString::fromLocal8Bit(snd_strerror(err)) ) ); return 1; } snd_pcm_hw_params_t *hw_params; snd_pcm_hw_params_alloca( &hw_params ); if ( hw_params == NULL ) { ERRORLOG( "error in snd_pcm_hw_params_alloca" ); return 1; } if ( ( err = snd_pcm_hw_params_any( m_pPlayback_handle, hw_params ) ) < 0 ) { ERRORLOG( QString( "error in snd_pcm_hw_params_any: %1" ).arg( QString::fromLocal8Bit(snd_strerror(err)) ) ); return 1; } // snd_pcm_hw_params_set_access( m_pPlayback_handle, hw_params, SND_PCM_ACCESS_MMAP_INTERLEAVED ); if ( ( err = snd_pcm_hw_params_set_access( m_pPlayback_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED ) ) < 0 ) { ERRORLOG( QString( "error in snd_pcm_hw_params_set_access: %1" ).arg( QString::fromLocal8Bit(snd_strerror(err)) ) ); return 1; } if ( ( err = snd_pcm_hw_params_set_format( m_pPlayback_handle, hw_params, SND_PCM_FORMAT_S16_LE ) ) < 0 ) { ERRORLOG( QString( "error in snd_pcm_hw_params_set_format: %1" ).arg( QString::fromLocal8Bit(snd_strerror(err)) ) ); return 1; } snd_pcm_hw_params_set_rate_near( m_pPlayback_handle, hw_params, &m_nSampleRate, 0 ); if ( ( err = snd_pcm_hw_params_set_channels( m_pPlayback_handle, hw_params, nChannels ) ) < 0 ) { ERRORLOG( QString( "error in snd_pcm_hw_params_set_channels: %1" ).arg( QString::fromLocal8Bit(snd_strerror(err)) ) ); return 1; } unsigned nPeriods = 2; if ( ( err = snd_pcm_hw_params_set_periods_near( m_pPlayback_handle, hw_params, &nPeriods, 0 ) ) < 0 ) { ERRORLOG( QString( "error in snd_pcm_hw_params_set_periods: %1" ).arg( QString::fromLocal8Bit(snd_strerror(err)) ) ); return 1; } INFOLOG( QString( "nPeriods: %1" ).arg( nPeriods ) ); // Set buffer size (in frames). The resulting latency is given by // latency = periodsize * periods / (rate * bytes_per_frame) // m_nBufferSize = period_size * 2; // infoLog( "buffer size preferita:" + to_string( m_nBufferSize ) ); // if ( ( err = snd_pcm_hw_params_set_buffer_size_near( m_pPlayback_handle, hw_params, &m_nBufferSize ) ) < 0 ) { // errorLog( "[connect] error in snd_pcm_hw_params_set_buffer_size: " + string( QString::fromLocal8Bit(snd_strerror(err)) ) ); // return 1; // } // infoLog( "buffer size scelta:" + to_string( m_nBufferSize ) ); if ( ( err = snd_pcm_hw_params_set_period_size( m_pPlayback_handle, hw_params, period_size, 0 ) ) < 0 ) { ERRORLOG( QString( "error in snd_pcm_hw_params_set_period_size: %1" ).arg( QString::fromLocal8Bit(snd_strerror(err)) ) ); } if ( ( err = snd_pcm_hw_params( m_pPlayback_handle, hw_params ) ) < 0 ) { ERRORLOG( QString( "error in snd_pcm_hw_params: %1" ).arg( QString::fromLocal8Bit(snd_strerror(err)) ) ); return 1; } snd_pcm_hw_params_get_rate( hw_params, &m_nSampleRate, 0 ); snd_pcm_hw_params_get_buffer_size( hw_params, &m_nBufferSize ); INFOLOG( QString( "*** PERIOD SIZE: %1" ).arg( period_size ) ); INFOLOG( QString( "*** SAMPLE RATE: %1" ).arg( m_nSampleRate ) ); INFOLOG( QString( "*** BUFFER SIZE: %1" ).arg( m_nBufferSize ) ); //snd_pcm_hw_params_free( hw_params ); m_pOut_L = new float[ m_nBufferSize ]; m_pOut_R = new float[ m_nBufferSize ]; memset( m_pOut_L, 0, m_nBufferSize * sizeof( float ) ); memset( m_pOut_R, 0, m_nBufferSize * sizeof( float ) ); m_bIsRunning = true; // start the main thread pthread_attr_t attr; pthread_attr_init( &attr ); pthread_create( &alsaAudioDriverThread, &attr, alsaAudioDriver_processCaller, this ); return 0; // OK } void AlsaAudioDriver::disconnect() { INFOLOG( "[disconnect]" ); m_bIsRunning = false; pthread_join( alsaAudioDriverThread, NULL ); snd_pcm_close( m_pPlayback_handle ); delete[] m_pOut_L; m_pOut_L = NULL; delete[] m_pOut_R; m_pOut_R = NULL; } unsigned AlsaAudioDriver::getBufferSize() { return m_nBufferSize; } unsigned AlsaAudioDriver::getSampleRate() { return m_nSampleRate; } float* AlsaAudioDriver::getOut_L() { return m_pOut_L; } float* AlsaAudioDriver::getOut_R() { return m_pOut_R; } void AlsaAudioDriver::updateTransportInfo() { //errorLog( "[updateTransportInfo] not implemented yet" ); } void AlsaAudioDriver::play() { INFOLOG( "play" ); m_transport.m_status = TransportInfo::ROLLING; } void AlsaAudioDriver::stop() { INFOLOG( "stop" ); m_transport.m_status = TransportInfo::STOPPED; } void AlsaAudioDriver::locate( unsigned long nFrame ) { // infoLog( "[locate] " + to_string( nFrame ) ); m_transport.m_nFrames = nFrame; // m_transport.printInfo(); } void AlsaAudioDriver::setBpm( float fBPM ) { // warningLog( "[setBpm] " + to_string(fBPM) ); m_transport.m_nBPM = fBPM; } }; #endif // H2CORE_HAVE_ALSA hydrogen-0.9.6-beta3/src/core/src/IO/alsa_midi_driver.cpp000066400000000000000000000327001211146647700231720ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "AlsaMidiDriver.h" #ifdef H2CORE_HAVE_ALSA #include #include #include #include #include #include #include #include #ifdef H2CORE_HAVE_LASH #include #endif using namespace std; namespace H2Core { pthread_t midiDriverThread; bool isMidiDriverRunning = false; snd_seq_t *seq_handle = NULL; int npfd; struct pollfd *pfd; int portId; int clientId; int outPortId; void* alsaMidiDriver_thread( void* param ) { Object* __object = ( Object* )param; AlsaMidiDriver *pDriver = ( AlsaMidiDriver* )param; __INFOLOG( "starting" ); if ( seq_handle != NULL ) { __ERRORLOG( "seq_handle != NULL" ); pthread_exit( NULL ); } int err; if ( ( err = snd_seq_open( &seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0 ) ) < 0 ) { __ERRORLOG( QString( "Error opening ALSA sequencer: %1" ).arg( QString::fromLocal8Bit(snd_strerror(err)) ) ); pthread_exit( NULL ); } snd_seq_set_client_name( seq_handle, "Hydrogen" ); if ( ( portId = snd_seq_create_simple_port( seq_handle, "Hydrogen Midi-In", SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE, SND_SEQ_PORT_TYPE_APPLICATION ) ) < 0 ) { __ERRORLOG( "Error creating sequencer port." ); pthread_exit( NULL ); } if ( ( outPortId = snd_seq_create_simple_port( seq_handle, "Hydrogen Midi-Out", SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ, SND_SEQ_PORT_TYPE_APPLICATION ) ) < 0 ) { __ERRORLOG( "Error creating sequencer port." ); pthread_exit( NULL ); } clientId = snd_seq_client_id( seq_handle ); #ifdef H2CORE_HAVE_LASH if ( Preferences::get_instance()->useLash() ){ LashClient* lashClient = LashClient::get_instance(); if (lashClient && lashClient->isConnected()) { lashClient->setAlsaClientId((unsigned char) clientId); } } #endif int m_local_addr_port = portId; int m_local_addr_client = clientId; QString sPortName = Preferences::get_instance()->m_sMidiPortName; int m_dest_addr_port = -1; int m_dest_addr_client = -1; pDriver->getPortInfo( sPortName, m_dest_addr_client, m_dest_addr_port ); __INFOLOG( "MIDI port name: " + sPortName ); __INFOLOG( "MIDI addr client: " + m_dest_addr_client ); __INFOLOG( "MIDI addr port: " + m_dest_addr_port ); if ( ( m_dest_addr_port != -1 ) && ( m_dest_addr_client != -1 ) ) { snd_seq_port_subscribe_t *subs; snd_seq_port_subscribe_alloca( &subs ); snd_seq_addr_t sender, dest; sender.client = m_dest_addr_client; sender.port = m_dest_addr_port; dest.client = m_local_addr_client; dest.port = m_local_addr_port; /* set in and out ports */ snd_seq_port_subscribe_set_sender( subs, &sender ); snd_seq_port_subscribe_set_dest( subs, &dest ); /* subscribe */ int ret = snd_seq_subscribe_port( seq_handle, subs ); if ( ret < 0 ) { __ERRORLOG( QString( "snd_seq_subscribe_port(%1:%2) error" ).arg( m_dest_addr_client ).arg( m_dest_addr_port ) ); } } __INFOLOG( QString( "Midi input port at %1:%2" ).arg( clientId ).arg( portId ) ); npfd = snd_seq_poll_descriptors_count( seq_handle, POLLIN ); pfd = ( struct pollfd* )alloca( npfd * sizeof( struct pollfd ) ); snd_seq_poll_descriptors( seq_handle, pfd, npfd, POLLIN ); __INFOLOG( "MIDI Thread INIT" ); while ( isMidiDriverRunning ) { if ( poll( pfd, npfd, 100 ) > 0 ) { pDriver->midi_action( seq_handle ); } } snd_seq_close ( seq_handle ); seq_handle = NULL; __INFOLOG( "MIDI Thread DESTROY" ); pthread_exit( NULL ); return NULL; } const char* AlsaMidiDriver::__class_name = "AlsaMidiDriver"; AlsaMidiDriver::AlsaMidiDriver() : MidiInput( __class_name ), MidiOutput( __class_name ), Object( __class_name ) { // infoLog("INIT"); } AlsaMidiDriver::~AlsaMidiDriver() { if ( isMidiDriverRunning ) { close(); } // infoLog("DESTROY"); } void AlsaMidiDriver::open() { // start main thread isMidiDriverRunning = true; pthread_attr_t attr; pthread_attr_init( &attr ); pthread_create( &midiDriverThread, &attr, alsaMidiDriver_thread, ( void* )this ); } void AlsaMidiDriver::close() { isMidiDriverRunning = false; pthread_join( midiDriverThread, NULL ); } void AlsaMidiDriver::midi_action( snd_seq_t *seq_handle ) { Hydrogen *engine = Hydrogen::get_instance(); int nState = engine->getState(); if ( ( nState != STATE_READY ) && ( nState != STATE_PLAYING ) ) { // ERRORLOG( "Skipping midi event! Audio engine not ready." ); return; } // bool useMidiTransport = true; snd_seq_event_t *ev; do { if ( !seq_handle ) { break; } snd_seq_event_input( seq_handle, &ev ); if ( m_bActive ) { MidiMessage msg; switch ( ev->type ) { case SND_SEQ_EVENT_NOTEON: msg.m_type = MidiMessage::NOTE_ON; msg.m_nData1 = ev->data.note.note; msg.m_nData2 = ev->data.note.velocity; msg.m_nChannel = ev->data.control.channel; break; case SND_SEQ_EVENT_NOTEOFF: msg.m_type = MidiMessage::NOTE_OFF; msg.m_nData1 = ev->data.note.note; msg.m_nData2 = ev->data.note.velocity; msg.m_nChannel = ev->data.control.channel; break; case SND_SEQ_EVENT_CONTROLLER: msg.m_type = MidiMessage::CONTROL_CHANGE; msg.m_nData1 = ev->data.control.param; msg.m_nData2 = ev->data.control.value; msg.m_nChannel = ev->data.control.channel; break; case SND_SEQ_EVENT_SYSEX: { msg.m_type = MidiMessage::SYSEX; snd_midi_event_t *seq_midi_parser; if ( snd_midi_event_new( 32, &seq_midi_parser ) ) { ERRORLOG( "Error creating midi event parser" ); } unsigned char midi_event_buffer[ 256 ]; int _bytes_read = snd_midi_event_decode( seq_midi_parser, midi_event_buffer, 32, ev ); for ( int i = 0; i < _bytes_read; ++i ) { msg.m_sysexData.push_back( midi_event_buffer[ i ] ); } } break; case SND_SEQ_EVENT_QFRAME: msg.m_type = MidiMessage::QUARTER_FRAME; break; case SND_SEQ_EVENT_CLOCK: //cout << "!!! Midi CLock" << endl; break; case SND_SEQ_EVENT_SONGPOS: msg.m_type = MidiMessage::SONG_POS; break; case SND_SEQ_EVENT_START: msg.m_type = MidiMessage::START; break; case SND_SEQ_EVENT_CONTINUE: msg.m_type = MidiMessage::CONTINUE; break; case SND_SEQ_EVENT_STOP: msg.m_type = MidiMessage::STOP; break; case SND_SEQ_EVENT_PITCHBEND: break; case SND_SEQ_EVENT_PGMCHANGE: msg.m_type = MidiMessage::PROGRAM_CHANGE; msg.m_nData1 = ev->data.control.value; break; case SND_SEQ_EVENT_CLIENT_EXIT: INFOLOG( "SND_SEQ_EVENT_CLIENT_EXIT" ); break; case SND_SEQ_EVENT_PORT_SUBSCRIBED: INFOLOG( "SND_SEQ_EVENT_PORT_SUBSCRIBED" ); break; case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: INFOLOG( "SND_SEQ_EVENT_PORT_UNSUBSCRIBED" ); break; case SND_SEQ_EVENT_SENSING: break; default: WARNINGLOG( QString( "Unknown MIDI Event. type = %1" ).arg( ( int )ev->type ) ); } if ( msg.m_type != MidiMessage::UNKNOWN ) { handleMidiMessage( msg ); } } snd_seq_free_event( ev ); } while ( snd_seq_event_input_pending( seq_handle, 0 ) > 0 ); } std::vector AlsaMidiDriver::getOutputPortList() { vector outputList; if ( seq_handle == NULL ) { return outputList; } snd_seq_client_info_t *cinfo; // client info snd_seq_port_info_t *pinfo; // port info snd_seq_client_info_alloca( &cinfo ); snd_seq_client_info_set_client( cinfo, -1 ); /* while the next client one the sequencer is avaiable */ while ( snd_seq_query_next_client( seq_handle, cinfo ) >= 0 ) { // get client from cinfo int client = snd_seq_client_info_get_client( cinfo ); // fill pinfo snd_seq_port_info_alloca( &pinfo ); snd_seq_port_info_set_client( pinfo, client ); snd_seq_port_info_set_port( pinfo, -1 ); // while the next port is available while ( snd_seq_query_next_port( seq_handle, pinfo ) >= 0 ) { /* get its capability */ int cap = snd_seq_port_info_get_capability( pinfo ); if ( snd_seq_client_id( seq_handle ) != snd_seq_port_info_get_client( pinfo ) && snd_seq_port_info_get_client( pinfo ) != 0 ) { // output ports if ( ( cap & SND_SEQ_PORT_CAP_SUBS_READ ) != 0 && snd_seq_client_id( seq_handle ) != snd_seq_port_info_get_client( pinfo ) ) { INFOLOG( snd_seq_port_info_get_name( pinfo ) ); outputList.push_back( snd_seq_port_info_get_name( pinfo ) ); //info.m_nClient = snd_seq_port_info_get_client(pinfo); //info.m_nPort = snd_seq_port_info_get_port(pinfo); } } } } return outputList; } void AlsaMidiDriver::getPortInfo( const QString& sPortName, int& nClient, int& nPort ) { if ( seq_handle == NULL ) { ERRORLOG( "seq_handle = NULL " ); return; } if ( sPortName == "None" ) { nClient = -1; nPort = -1; return; } snd_seq_client_info_t *cinfo; // client info snd_seq_port_info_t *pinfo; // port info snd_seq_client_info_alloca( &cinfo ); snd_seq_client_info_set_client( cinfo, -1 ); /* while the next client one the sequencer is avaiable */ while ( snd_seq_query_next_client( seq_handle, cinfo ) >= 0 ) { // get client from cinfo int client = snd_seq_client_info_get_client( cinfo ); // fill pinfo snd_seq_port_info_alloca( &pinfo ); snd_seq_port_info_set_client( pinfo, client ); snd_seq_port_info_set_port( pinfo, -1 ); // while the next port is avail while ( snd_seq_query_next_port( seq_handle, pinfo ) >= 0 ) { int cap = snd_seq_port_info_get_capability( pinfo ); if ( snd_seq_client_id( seq_handle ) != snd_seq_port_info_get_client( pinfo ) && snd_seq_port_info_get_client( pinfo ) != 0 ) { // output ports if ( ( cap & SND_SEQ_PORT_CAP_SUBS_READ ) != 0 && snd_seq_client_id( seq_handle ) != snd_seq_port_info_get_client( pinfo ) ) { QString sName = snd_seq_port_info_get_name( pinfo ); if ( sName == sPortName ) { nClient = snd_seq_port_info_get_client( pinfo ); nPort = snd_seq_port_info_get_port( pinfo ); INFOLOG( QString( "nClient %1" ).arg( nClient ) ); INFOLOG( QString( "nPort %1" ).arg( nPort ) ); return; } } } } } ERRORLOG( "Midi port " + sPortName + " not found" ); } void AlsaMidiDriver::handleQueueNote(Note* pNote) { if ( seq_handle == NULL ) { ERRORLOG( "seq_handle = NULL " ); return; } int channel = pNote->get_instrument()->get_midi_out_channel(); if (channel < 0) { return; } int key = (pNote->get_octave() +3 ) * 12 + pNote->get_key() + pNote->get_instrument()->get_midi_out_note() - 60; //int key = pNote->get_instrument()->get_midi_out_note(); int velocity = pNote->get_midi_velocity(); snd_seq_event_t ev; //Note off snd_seq_ev_clear(&ev); snd_seq_ev_set_source(&ev, outPortId); snd_seq_ev_set_subs(&ev); snd_seq_ev_set_direct(&ev); snd_seq_ev_set_noteoff(&ev, channel, key, velocity); snd_seq_event_output(seq_handle, &ev); snd_seq_drain_output(seq_handle); //Note on //snd_seq_event_input(seq_handle, &ev); snd_seq_ev_clear(&ev); snd_seq_ev_set_source(&ev, outPortId); snd_seq_ev_set_subs(&ev); snd_seq_ev_set_direct(&ev); //snd_seq_event_output_direct( seq_handle, ev ); snd_seq_ev_set_noteon(&ev, channel, key, velocity); snd_seq_event_output(seq_handle, &ev); //snd_seq_free_event(ev); snd_seq_drain_output(seq_handle); } void AlsaMidiDriver::handleQueueNoteOff( int channel, int key, int velocity ) { if ( seq_handle == NULL ) { ERRORLOG( "seq_handle = NULL " ); return; } // channel = pNote->get_instrument()->get_midi_out_channel(); if (channel < 0) { return; } // key = (pNote->m_noteKey.m_nOctave +3 ) * 12 + pNote->m_noteKey.m_key; // int velocity = pNote->get_midi_velocity(); snd_seq_event_t ev; //Note off snd_seq_ev_clear(&ev); snd_seq_ev_set_source(&ev, outPortId); snd_seq_ev_set_subs(&ev); snd_seq_ev_set_direct(&ev); snd_seq_ev_set_noteoff(&ev, channel, key, velocity); snd_seq_event_output(seq_handle, &ev); snd_seq_drain_output(seq_handle); } void AlsaMidiDriver::handleQueueAllNoteOff() { if ( seq_handle == NULL ) { ERRORLOG( "seq_handle = NULL " ); return; } InstrumentList *instList = Hydrogen::get_instance()->getSong()->get_instrument_list(); unsigned int numInstruments = instList->size(); for (int index = 0; index < numInstruments; ++index) { Instrument *curInst = instList->get(index); int channel = curInst->get_midi_out_channel(); if (channel < 0) { continue; } int key = curInst->get_midi_out_note(); snd_seq_event_t ev; //Note off snd_seq_ev_clear(&ev); snd_seq_ev_set_source(&ev, outPortId); snd_seq_ev_set_subs(&ev); snd_seq_ev_set_direct(&ev); snd_seq_ev_set_noteoff(&ev, channel, key, 0); snd_seq_event_output(seq_handle, &ev); snd_seq_drain_output(seq_handle); } } }; #endif // H2CORE_HAVE_ALSA hydrogen-0.9.6-beta3/src/core/src/IO/coreaudio_driver.cpp000066400000000000000000000204261211146647700232240ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://hydrogen.sourceforge.net * * CoreAudio Driver for Hydrogen * Copyright(c) 2005 by Jonathan Dempsey [jonathandempsey@fastmail.fm] * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Rewrote CoreAudio driver, now using AUHAL (2005/03/02 Jonathan Dempsey) * Set Hydrogen to detect hardware device buffer size (2005/03/06 Jonathan Dempsey) * Cleaned up the code a bit (2005/11/29 Jonathan Dempsey) * More cleaning . . . (2005/12/28 Jonathan Dempsey) */ #include "CoreAudioDriver.h" #ifdef H2CORE_HAVE_COREAUDIO #include "CoreServices/CoreServices.h" /// /// The Render Callback /// static OSStatus renderProc( void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData ) { H2Core::CoreAudioDriver* pDriver = ( H2Core::CoreAudioDriver * )inRefCon; pDriver->mProcessCallback( pDriver->m_nBufferSize, NULL ); for ( unsigned i = 0; i < ioData->mNumberBuffers; i++ ) { AudioBuffer &outData = ioData->mBuffers[ i ]; Float32* pOutData = ( float* )( outData.mData ); float *pAudioSource; if ( i == 0 ) { pAudioSource = pDriver->m_pOut_L; } else { pAudioSource = pDriver->m_pOut_R; } for ( unsigned j = 0; j < inNumberFrames; ++j ) { pOutData[ j ] = pAudioSource[ j ]; } } return noErr; } namespace H2Core { const char* CoreAudioDriver::__class_name = "CoreAudioDriver"; CoreAudioDriver::CoreAudioDriver( audioProcessCallback processCallback ) : H2Core::AudioOutput( __class_name ) , m_bIsRunning( false ) , mProcessCallback( processCallback ) , m_pOut_L( NULL ) , m_pOut_R( NULL ) { //INFOLOG( "INIT" ); m_nSampleRate = Preferences::get_instance()->m_nSampleRate; // m_nBufferSize = Preferences::get_instance()->m_nBufferSize; // BufferSize is currently set to match the default audio device. OSStatus err; UInt32 size = sizeof( AudioDeviceID ); err = AudioHardwareGetProperty( kAudioHardwarePropertyDefaultOutputDevice, &size, &m_outputDevice ); if ( err != noErr ) { ERRORLOG( "Could not get Default Output Device" ); } UInt32 dataSize = sizeof( m_nBufferSize ); err = AudioDeviceGetProperty( m_outputDevice, 0, false, kAudioDevicePropertyBufferFrameSize, &dataSize, ( void * )&m_nBufferSize ); if ( err != noErr ) { ERRORLOG( "get BufferSize error" ); } INFOLOG( QString( "Buffersize: %1" ).arg( m_nBufferSize ) ); // print some info AudioStreamBasicDescription outputStreamBasicDescription; UInt32 propertySize = sizeof( outputStreamBasicDescription ); err = AudioDeviceGetProperty( m_outputDevice, 0, 0, kAudioDevicePropertyStreamFormat, &propertySize, &outputStreamBasicDescription ); if ( err ) { printf( "AudioDeviceGetProperty: returned %d when getting kAudioDevicePropertyStreamFormat", err ); } INFOLOG( QString("SampleRate: %1").arg( outputStreamBasicDescription.mSampleRate ) ); INFOLOG( QString("BytesPerPacket: %1").arg( outputStreamBasicDescription.mBytesPerPacket ) ); INFOLOG( QString("FramesPerPacket: %1").arg( outputStreamBasicDescription.mFramesPerPacket ) ); INFOLOG( QString("BytesPerFrame: %1").arg( outputStreamBasicDescription.mBytesPerFrame ) ); INFOLOG( QString("ChannelsPerFrame: %1").arg( outputStreamBasicDescription.mChannelsPerFrame ) ); INFOLOG( QString("BitsPerChannel: %1").arg( outputStreamBasicDescription.mBitsPerChannel ) ); } CoreAudioDriver::~CoreAudioDriver() { //INFOLOG( "DESTROY" ); disconnect(); } int CoreAudioDriver::init( unsigned bufferSize ) { OSStatus err = noErr; m_pOut_L = new float[ m_nBufferSize ]; m_pOut_R = new float[ m_nBufferSize ]; memset ( m_pOut_L, 0, m_nBufferSize * sizeof( float ) ); memset ( m_pOut_R, 0, m_nBufferSize * sizeof( float ) ); // Get Component Component compOutput; ComponentDescription descAUHAL; descAUHAL.componentType = kAudioUnitType_Output; descAUHAL.componentSubType = kAudioUnitSubType_HALOutput; descAUHAL.componentManufacturer = kAudioUnitManufacturer_Apple; descAUHAL.componentFlags = 0; descAUHAL.componentFlagsMask = 0; compOutput = FindNextComponent( NULL, &descAUHAL ); if ( compOutput == NULL ) { ERRORLOG( "Error in FindNextComponent" ); //exit (-1); } err = OpenAComponent( compOutput, &m_outputUnit ); if ( err != noErr ) { ERRORLOG( "Error Opening Component" ); } // Get Current Output Device UInt32 size = sizeof( AudioDeviceID ); err = AudioHardwareGetProperty( kAudioHardwarePropertyDefaultOutputDevice, &size, &m_outputDevice ); if ( err != noErr ) { ERRORLOG( "Could not get Default Output Device" ); } // Set AUHAL to Current Device err = AudioUnitSetProperty( m_outputUnit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, &m_outputDevice, sizeof( m_outputDevice ) ); if ( err != noErr ) { ERRORLOG( "Could not set Current Device" ); } // UInt32 dataSize = sizeof(cBufferSize); /* err = AudioDeviceGetProperty(outputDevice, 0, false, kAudioDevicePropertyBufferFrameSize, &dataSize, (void *) &cBufferSize); if (err != noErr ) { printf( "Coud not get BufferSize" ); } else{ fprintf(stderr, "%lu\n", cBufferSize); } */ AudioStreamBasicDescription asbdesc; asbdesc.mSampleRate = ( Float64 )m_nSampleRate; asbdesc.mFormatID = kAudioFormatLinearPCM; asbdesc.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved; asbdesc.mBytesPerPacket = sizeof( Float32 ); asbdesc.mFramesPerPacket = 1; asbdesc.mBytesPerFrame = sizeof( Float32 ); asbdesc.mChannelsPerFrame = 2; // comix: was set to 1 asbdesc.mBitsPerChannel = 32; err = AudioUnitSetProperty( m_outputUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &asbdesc, sizeof( AudioStreamBasicDescription ) ); // Set Render Callback AURenderCallbackStruct out; out.inputProc = renderProc; out.inputProcRefCon = ( void * )this; err = AudioUnitSetProperty( m_outputUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Global, 0, &out, sizeof( out ) ); if ( err != noErr ) { ERRORLOG( "Could not Set Render Callback" ); } //Initialize AUHAL err = AudioUnitInitialize( m_outputUnit ); if ( err != noErr ) { ERRORLOG( "Could not Initialize AudioUnit" ); } return 0; } int CoreAudioDriver::connect() { OSStatus err; err = AudioOutputUnitStart( m_outputUnit ); if ( err != noErr ) { ERRORLOG( "Could not start AudioUnit" ); } m_bIsRunning = true; return 0; } void CoreAudioDriver::disconnect() { OSStatus err = noErr; err = AudioOutputUnitStop( m_outputUnit ); err = AudioUnitUninitialize( m_outputUnit ); err = CloseComponent( m_outputUnit ); } void CoreAudioDriver::play() { //INFOLOG( "play" ); m_transport.m_status = TransportInfo::ROLLING; } void CoreAudioDriver::stop() { //INFOLOG( "stop" ); m_transport.m_status = TransportInfo::STOPPED; } float* CoreAudioDriver::getOut_L() { return m_pOut_L; } float* CoreAudioDriver::getOut_R() { return m_pOut_R; } unsigned CoreAudioDriver::getBufferSize() { return m_nBufferSize; } unsigned CoreAudioDriver::getSampleRate() { return m_nSampleRate; } void CoreAudioDriver::updateTransportInfo() { // INFOLOG( "nothing"); } void CoreAudioDriver::locate( unsigned long nFrame ) { //INFOLOG( "locate: " + to_string( nFrame ) ); m_transport.m_nFrames = nFrame; //fprintf ( stderr, "m_transport.m_nFrames = %lu\n", m_transport.m_nFrames ); } void CoreAudioDriver::setBpm( float fBPM ) { //INFOLOG( "[setBpm]" + to_string( fBPM )); m_transport.m_nBPM = fBPM; } } #endif // H2CORE_HAVE_COREAUDIO hydrogen-0.9.6-beta3/src/core/src/IO/coremidi_driver.cpp000066400000000000000000000215701211146647700230460ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * CoreMidi driver for Hydrogen * Copyright(c) 2005-2006 by Jonathan Dempsey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Code cleanup (20060222 Jonathan Dempsey) * More cleaning (20060511 Jonathan Dempsey) * ... and a little bit more cleaning . . . (20060512 Jonathan Dempsey) * Added CFRelease code (20060514 Jonathan Dempsey) */ #include #include #include #include #include #include "hydrogen/IO/CoreMidiDriver.h" #ifdef H2CORE_HAVE_COREMIDI namespace H2Core { static void midiProc ( const MIDIPacketList * pktlist, void * readProcRefCon, void * srcConnRefCon ) { UNUSED( srcConnRefCon ); MIDIPacket* packet = ( MIDIPacket * )pktlist->packet; //_ERRORLOG( QString( "MIDIPROC packets # %1" ).arg( pktlist->numPackets ) ); CoreMidiDriver *instance = ( CoreMidiDriver * )readProcRefCon; MidiMessage msg; for ( uint i = 0; i < pktlist->numPackets; i++ ) { int nEventType = packet->data[0]; if ( ( nEventType >= 128 ) && ( nEventType < 144 ) ) { // note off msg.m_nChannel = nEventType - 128; msg.m_type = MidiMessage::NOTE_OFF; } else if ( ( nEventType >= 144 ) && ( nEventType < 160 ) ) { // note on msg.m_nChannel = nEventType - 144; msg.m_type = MidiMessage::NOTE_ON; } else if ( ( nEventType >= 160 ) && ( nEventType < 176 ) ) { // Polyphonic Key Pressure (After-touch) msg.m_nChannel = nEventType - 160; msg.m_type = MidiMessage::POLYPHONIC_KEY_PRESSURE; } else if ( ( nEventType >= 176 ) && ( nEventType < 192 ) ) { // Control Change msg.m_nChannel = nEventType - 176; msg.m_type = MidiMessage::CONTROL_CHANGE; } else if ( ( nEventType >= 192 ) && ( nEventType < 208 ) ) { // Program Change msg.m_nChannel = nEventType - 192; msg.m_type = MidiMessage::PROGRAM_CHANGE; } else if ( ( nEventType >= 208 ) && ( nEventType < 224 ) ) { // Channel Pressure (After-touch) msg.m_nChannel = nEventType - 208; msg.m_type = MidiMessage::CHANNEL_PRESSURE; } else if ( ( nEventType >= 224 ) && ( nEventType < 240 ) ) { // Pitch Wheel Change msg.m_nChannel = nEventType - 224; msg.m_type = MidiMessage::PITCH_WHEEL; } else if ( ( nEventType >= 240 ) && ( nEventType < 256 ) ) { // System Exclusive msg.m_type = MidiMessage::SYSEX; for(int i = 0; i< packet->length;i++){ msg.m_sysexData.push_back(packet->data[i]); } instance->handleMidiMessage( msg ); packet = MIDIPacketNext( packet ); return; } else { ___ERRORLOG( QString( "Unhandled midi message type: %1" ).arg( nEventType ) ); ___INFOLOG( "MIDI msg: " ); // instance->errorLog( "Unhandled midi message type: " + to_string( nEventType ) ); // instance->infoLog( "MIDI msg: " ); } msg.m_nData1 = packet->data[1]; msg.m_nData2 = packet->data[2]; instance->handleMidiMessage( msg ); packet = MIDIPacketNext( packet ); } } const char* CoreMidiDriver::__class_name = "CoreMidiDriver"; CoreMidiDriver::CoreMidiDriver() : MidiInput( __class_name ) ,MidiOutput( __class_name ), Object( __class_name ) , m_bRunning( false ) { INFOLOG( "INIT" ); OSStatus err = noErr; QString sMidiPortName = Preferences::get_instance()->m_sMidiPortName; err = MIDIClientCreate ( CFSTR( "h2MIDIClient" ), NULL, NULL, &h2MIDIClient ); err = MIDIInputPortCreate ( h2MIDIClient, CFSTR( "h2InputPort" ), midiProc, this, &h2InputRef ); err = MIDIOutputPortCreate ( h2MIDIClient, CFSTR( "h2OutputPort" ), &h2OutputRef ); } CoreMidiDriver::~CoreMidiDriver() { /*if ( isMidiDriverRunning ) { close(); } */ close(); INFOLOG( "DESTROY" ); } void CoreMidiDriver::open() { INFOLOG( "open" ); OSStatus err = noErr; QString sMidiPortName = Preferences::get_instance()->m_sMidiPortName; cmSources = MIDIGetNumberOfSources(); unsigned i; for ( i = 0; i < cmSources; i++ ) { CFStringRef H2MidiNames; cmH2Src = MIDIGetSource( i ); if ( cmH2Src ) { err = MIDIObjectGetStringProperty( cmH2Src, kMIDIPropertyName, &H2MidiNames ); char cmName[64]; err = CFStringGetCString( H2MidiNames, cmName, 64, kCFStringEncodingASCII ); QString h2MidiPortName = cmName; if ( h2MidiPortName == sMidiPortName ) { MIDIPortConnectSource ( h2InputRef, cmH2Src, NULL ); m_bRunning = true; } } CFRelease ( H2MidiNames ); } int n = MIDIGetNumberOfDestinations(); if (n > 0) { cmH2Dst = MIDIGetDestination(0); } if (cmH2Dst != NULL) { CFStringRef H2MidiNames; MIDIObjectGetStringProperty(cmH2Dst, kMIDIPropertyName, &H2MidiNames); //CFStringGetCString(pname, name, sizeof(name), 0); //MIDIPortConnectSource ( h2OutputRef, cmH2Dst, NULL ); MIDIPortConnectSource ( h2OutputRef, cmH2Dst, NULL ); if( H2MidiNames != NULL){ CFRelease( H2MidiNames ); } } } void CoreMidiDriver::close() { OSStatus err = noErr; err = MIDIPortDisconnectSource( h2InputRef, cmH2Src ); err = MIDIPortDispose( h2InputRef ); //err = MIDIPortDisconnectSource( h2OutputRef, cmH2Dst ); //err = MIDIPortDispose( h2OutputRef ); err = MIDIClientDispose( h2MIDIClient ); } std::vector CoreMidiDriver::getOutputPortList() { INFOLOG( "retrieving output list" ); OSStatus err = noErr; std::vector cmPortList; cmSources = MIDIGetNumberOfSources(); INFOLOG ( "Getting number of MIDI sources . . .\n" ); unsigned i; for ( i = 0; i < cmSources; i++ ) { CFStringRef H2MidiNames; cmH2Src = MIDIGetSource( i ); if ( cmH2Src == NULL ) { ERRORLOG( "Could not open input device" ); } if ( cmH2Src ) { err = MIDIObjectGetStringProperty( cmH2Src, kMIDIPropertyName, &H2MidiNames ); INFOLOG ( "Getting MIDI object string property . . .\n" ); char cmName[ 64 ]; CFStringGetCString( H2MidiNames, cmName, 64, kCFStringEncodingASCII ); INFOLOG ( "Getting MIDI object name . . .\n" ); QString h2MidiPortName = cmName; cmPortList.push_back( h2MidiPortName ); } CFRelease( H2MidiNames ); } return cmPortList; } void CoreMidiDriver::handleQueueNote(Note* pNote) { if (cmH2Dst == NULL ) { ERRORLOG( "cmH2Dst = NULL " ); return; } int channel = pNote->get_instrument()->get_midi_out_channel(); if (channel < 0) { return; } int key = pNote->get_midi_key(); int velocity = pNote->get_midi_velocity(); MIDIPacketList packetList; packetList.numPackets = 1; packetList.packet->timeStamp = 0; packetList.packet->length = 3; packetList.packet->data[0] = 0x80 | channel; packetList.packet->data[1] = key; packetList.packet->data[2] = velocity; MIDISend(h2OutputRef, cmH2Dst, &packetList); packetList.packet->data[0] = 0x90 | channel; packetList.packet->data[1] = key; packetList.packet->data[2] = velocity; MIDISend(h2OutputRef, cmH2Dst, &packetList); } void CoreMidiDriver::handleQueueNoteOff( int channel, int key, int velocity ) { if (cmH2Dst == NULL ) { ERRORLOG( "cmH2Dst = NULL " ); return; } // int channel = pNote->get_instrument()->get_midi_out_channel(); if (channel < 0) { return; } // int key = pNote->get_instrument()->get_midi_out_note(); // int velocity = pNote->get_velocity() * 127; MIDIPacketList packetList; packetList.numPackets = 1; packetList.packet->timeStamp = 0; packetList.packet->length = 3; packetList.packet->data[0] = 0x80 | channel; packetList.packet->data[1] = key; packetList.packet->data[2] = velocity; MIDISend(h2OutputRef, cmH2Dst, &packetList); } void CoreMidiDriver::handleQueueAllNoteOff() { if (cmH2Dst == NULL ) { ERRORLOG( "cmH2Dst = NULL " ); return; } InstrumentList *instList = Hydrogen::get_instance()->getSong()->get_instrument_list(); unsigned int numInstruments = instList->size(); for (int index = 0; index < numInstruments; ++index) { Instrument *curInst = instList->get(index); int channel = curInst->get_midi_out_channel(); if (channel < 0) { continue; } int key = curInst->get_midi_out_note(); MIDIPacketList packetList; packetList.numPackets = 1; packetList.packet->timeStamp = 0; packetList.packet->length = 3; packetList.packet->data[0] = 0x80 | channel; packetList.packet->data[1] = key; packetList.packet->data[2] = 0; MIDISend(h2OutputRef, cmH2Dst, &packetList); } } } // namespace H2CORE #endif hydrogen-0.9.6-beta3/src/core/src/IO/disk_writer_driver.cpp000066400000000000000000000271371211146647700236060ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include "DiskWriterDriver.h" #include #include #include #include #include #include #include namespace H2Core { pthread_t diskWriterDriverThread; void* diskWriterDriver_thread( void* param ) { Object* __object = ( Object* )param; DiskWriterDriver *pDriver = ( DiskWriterDriver* )param; EventQueue::get_instance()->push_event( EVENT_PROGRESS, 0 ); pDriver->setBpm( Hydrogen::get_instance()->getSong()->__bpm ); pDriver->audioEngine_process_checkBPMChanged(); __INFOLOG( "DiskWriterDriver thread start" ); // always rolling, no user interaction pDriver->m_transport.m_status = TransportInfo::ROLLING; SF_INFO soundInfo; soundInfo.samplerate = pDriver->m_nSampleRate; // soundInfo.frames = -1;//getNFrames(); ///\todo: da terminare soundInfo.channels = 2; //default format int sfformat = 0x010000; //wav format (default) int bits = 0x0002; //16 bit PCM (default) //sf_format switch if( pDriver->m_sFilename.endsWith(".aiff") || pDriver->m_sFilename.endsWith(".AIFF") ){ sfformat = 0x020000; //Apple/SGI AIFF format (big endian) } if( pDriver->m_sFilename.endsWith(".flac") || pDriver->m_sFilename.endsWith(".FLAC") ){ sfformat = 0x170000; //FLAC lossless file format } if( ( pDriver->m_nSampleDepth == 8 ) && ( pDriver->m_sFilename.endsWith(".aiff") || pDriver->m_sFilename.endsWith(".AIFF") ) ){ bits = 0x0001; //Signed 8 bit data works with aiff } if( ( pDriver->m_nSampleDepth == 8 ) && ( pDriver->m_sFilename.endsWith(".wav") || pDriver->m_sFilename.endsWith(".WAV") ) ){ bits = 0x0005; //Unsigned 8 bit data needed for Microsoft WAV format } if( pDriver->m_nSampleDepth == 16 ){ bits = 0x0002; //Signed 16 bit data } if( pDriver->m_nSampleDepth == 24 ){ bits = 0x0003; //Signed 24 bit data } if( pDriver->m_nSampleDepth == 32 ){ bits = 0x0004; ////Signed 32 bit data } soundInfo.format = sfformat|bits; // #ifdef HAVE_OGGVORBIS //ogg vorbis option if( pDriver->m_sFilename.endsWith( ".ogg" ) | pDriver->m_sFilename.endsWith( ".OGG" ) ) soundInfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS; // #endif ///formats // SF_FORMAT_WAV = 0x010000, /* Microsoft WAV format (little endian). */ // SF_FORMAT_AIFF = 0x020000, /* Apple/SGI AIFF format (big endian). */ // SF_FORMAT_AU = 0x030000, /* Sun/NeXT AU format (big endian). */ // SF_FORMAT_RAW = 0x040000, /* RAW PCM data. */ // SF_FORMAT_PAF = 0x050000, /* Ensoniq PARIS file format. */ // SF_FORMAT_SVX = 0x060000, /* Amiga IFF / SVX8 / SV16 format. */ // SF_FORMAT_NIST = 0x070000, /* Sphere NIST format. */ // SF_FORMAT_VOC = 0x080000, /* VOC files. */ // SF_FORMAT_IRCAM = 0x0A0000, /* Berkeley/IRCAM/CARL */ // SF_FORMAT_W64 = 0x0B0000, /* Sonic Foundry's 64 bit RIFF/WAV */ // SF_FORMAT_MAT4 = 0x0C0000, /* Matlab (tm) V4.2 / GNU Octave 2.0 */ // SF_FORMAT_MAT5 = 0x0D0000, /* Matlab (tm) V5.0 / GNU Octave 2.1 */ // SF_FORMAT_PVF = 0x0E0000, /* Portable Voice Format */ // SF_FORMAT_XI = 0x0F0000, /* Fasttracker 2 Extended Instrument */ // SF_FORMAT_HTK = 0x100000, /* HMM Tool Kit format */ // SF_FORMAT_SDS = 0x110000, /* Midi Sample Dump Standard */ // SF_FORMAT_AVR = 0x120000, /* Audio Visual Research */ // SF_FORMAT_WAVEX = 0x130000, /* MS WAVE with WAVEFORMATEX */ // SF_FORMAT_SD2 = 0x160000, /* Sound Designer 2 */ // SF_FORMAT_FLAC = 0x170000, /* FLAC lossless file format */ // SF_FORMAT_CAF = 0x180000, /* Core Audio File format */ // SF_FORMAT_OGG ///bits // SF_FORMAT_PCM_S8 = 0x0001, /* Signed 8 bit data */ // SF_FORMAT_PCM_16 = 0x0002, /* Signed 16 bit data */ // SF_FORMAT_PCM_24 = 0x0003, /* Signed 24 bit data */ // SF_FORMAT_PCM_32 = 0x0004, /* Signed 32 bit data */ ///used for ogg // SF_FORMAT_VORBIS if ( !sf_format_check( &soundInfo ) ) { __ERRORLOG( "Error in soundInfo" ); return 0; } SNDFILE* m_file = sf_open( pDriver->m_sFilename.toLocal8Bit(), SFM_WRITE, &soundInfo ); float *pData = new float[ pDriver->m_nBufferSize * 2 ]; // always stereo float *pData_L = pDriver->m_pOut_L; float *pData_R = pDriver->m_pOut_R; Hydrogen* engine = Hydrogen::get_instance(); std::vector *pPatternColumns = Hydrogen::get_instance()->getSong()->get_pattern_group_vector(); int nColumns = pPatternColumns->size(); int nPatternSize; int validBpm = engine->getSong()->__bpm; float oldBPM = 0; float ticksize = 0; for ( int patternposition = 0; patternposition < nColumns; ++patternposition ) { PatternList *pColumn = ( *pPatternColumns )[ patternposition ]; if ( pColumn->size() != 0 ) { nPatternSize = pColumn->get( 0 )->get_length(); } else { nPatternSize = MAX_NOTES; } ticksize = pDriver->m_nSampleRate * 60.0 / engine->getSong()->__bpm / engine->getSong()->__resolution; // check pattern bpm if timeline bpm is in use if(Preferences::get_instance()->getUseTimelineBpm() ){ if( engine->m_timelinevector.size() >= 1 ){ for ( int t = 0; t < engine->m_timelinevector.size(); t++){ if(engine->m_timelinevector[t].m_htimelinebeat == patternposition && engine->m_timelinevector[t].m_htimelinebpm != validBpm){ validBpm = engine->m_timelinevector[t].m_htimelinebpm; } } } pDriver->setBpm(validBpm); ticksize = pDriver->m_nSampleRate * 60.0 / validBpm / Hydrogen::get_instance()->getSong()->__resolution; pDriver->audioEngine_process_checkBPMChanged(); engine->setPatternPos(patternposition); // delay needed time to calculate all rubberband samples if( Preferences::get_instance()->getRubberBandBatchMode() && validBpm != oldBPM ){ EventQueue::get_instance()->push_event( EVENT_RECALCULATERUBBERBAND, -1); int sleepTime = Preferences::get_instance()->getRubberBandCalcTime()+1; while ((sleepTime = sleep(sleepTime)) > 0); } oldBPM = validBpm; } else { ticksize = pDriver->m_nSampleRate * 60.0 / Hydrogen::get_instance()->getSong()->__bpm / Hydrogen::get_instance()->getSong()->__resolution; //pDriver->m_transport.m_nTickSize = ticksize; } //here we have the pattern length in frames dependent from bpm and samplerate unsigned patternLengthInFrames = ticksize * nPatternSize; unsigned frameNumber = 0; int lastRun = 0; while ( frameNumber < patternLengthInFrames ) { int usedBuffer = pDriver->m_nBufferSize; //this will calculate the the size from -last- (end of pattern) used frame buffer, //which is mostly smaller than pDriver->m_nBufferSize if( patternLengthInFrames - frameNumber < pDriver->m_nBufferSize ){ lastRun = patternLengthInFrames - frameNumber; usedBuffer = lastRun; }; frameNumber += usedBuffer; int ret = pDriver->m_processCallback( usedBuffer, NULL ); for ( unsigned i = 0; i < usedBuffer; i++ ) { if(pData_L[i] > 1){ pData[i * 2] = 1; } else if(pData_L[i] < -1){ pData[i * 2] = -1; }else { pData[i * 2] = pData_L[i]; } if(pData_R[i] > 1){ pData[i * 2 + 1] = 1; } else if(pData_R[i] < -1){ pData[i * 2 + 1] = -1; }else { pData[i * 2 + 1] = pData_R[i]; } } int res = sf_writef_float( m_file, pData, usedBuffer ); if ( res != ( int )usedBuffer ) { __ERRORLOG( "Error during sf_write_float" ); } } // this progress bar methode is not exact but ok enough to give users a usable visible progress feedback float fPercent = ( float )(patternposition +1) / ( float )nColumns * 100.0; EventQueue::get_instance()->push_event( EVENT_PROGRESS, ( int )fPercent ); } delete[] pData; pData = NULL; sf_close( m_file ); __INFOLOG( "DiskWriterDriver thread end" ); pthread_exit( NULL ); return NULL; } const char* DiskWriterDriver::__class_name = "DiskWriterDriver"; DiskWriterDriver::DiskWriterDriver( audioProcessCallback processCallback, unsigned nSamplerate, const QString& sFilename, int nSampleDepth ) : AudioOutput( __class_name ) , m_nSampleRate( nSamplerate ) , m_sFilename( sFilename ) , m_nSampleDepth ( nSampleDepth ) , m_processCallback( processCallback ) { INFOLOG( "INIT" ); } DiskWriterDriver::~DiskWriterDriver() { INFOLOG( "DESTROY" ); } int DiskWriterDriver::init( unsigned nBufferSize ) { INFOLOG( QString( "Init, %1 samples" ).arg( nBufferSize ) ); m_nBufferSize = nBufferSize; m_pOut_L = new float[nBufferSize]; m_pOut_R = new float[nBufferSize]; return 0; } /// /// Connect /// return 0: Ok /// int DiskWriterDriver::connect() { INFOLOG( "[connect]" ); pthread_attr_t attr; pthread_attr_init( &attr ); pthread_create( &diskWriterDriverThread, &attr, diskWriterDriver_thread, this ); return 0; } /// disconnect void DiskWriterDriver::disconnect() { INFOLOG( "[disconnect]" ); delete[] m_pOut_L; m_pOut_L = NULL; delete[] m_pOut_R; m_pOut_R = NULL; } unsigned DiskWriterDriver::getSampleRate() { return m_nSampleRate; } void DiskWriterDriver::play() { m_transport.m_status = TransportInfo::ROLLING; } void DiskWriterDriver::stop() { m_transport.m_status = TransportInfo::STOPPED; } void DiskWriterDriver::locate( unsigned long nFrame ) { INFOLOG( QString( "Locate: %1" ).arg( nFrame ) ); m_transport.m_nFrames = nFrame; } void DiskWriterDriver::updateTransportInfo() { // errorLog( "[updateTransportInfo] not implemented yet" ); } void DiskWriterDriver::setBpm( float fBPM ) { INFOLOG( QString( "SetBpm: %1" ).arg( fBPM ) ); m_transport.m_nBPM = fBPM; } void DiskWriterDriver::audioEngine_process_checkBPMChanged() { float fNewTickSize = getSampleRate() * 60.0 / Hydrogen::get_instance()->getSong()->__bpm / Hydrogen::get_instance()->getSong()->__resolution; if ( fNewTickSize != m_transport.m_nTickSize ) { // cerco di convertire ... float fTickNumber = ( float )m_transport.m_nFrames / ( float )m_transport.m_nTickSize; m_transport.m_nTickSize = fNewTickSize; if ( m_transport.m_nTickSize == 0 ) { return; } // update frame position m_transport.m_nFrames = ( long long )( fTickNumber * fNewTickSize ); // currently unuseble here //EventQueue::get_instance()->push_event( EVENT_RECALCULATERUBBERBAND, -1); } } }; hydrogen-0.9.6-beta3/src/core/src/IO/fake_driver.cpp000066400000000000000000000044661211146647700221660ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "FakeDriver.h" namespace H2Core { const char* FakeDriver::__class_name = "FakeDiskDriver"; FakeDriver::FakeDriver( audioProcessCallback processCallback ) : AudioOutput( __class_name ) , m_processCallback( processCallback ) , m_pOut_L( NULL ) , m_pOut_R( NULL ) { INFOLOG( "INIT" ); } FakeDriver::~FakeDriver() { INFOLOG( "DESTROY" ); } int FakeDriver::init( unsigned nBufferSize ) { INFOLOG( QString( "Init, %1 samples" ).arg( nBufferSize ) ); m_nBufferSize = nBufferSize; m_pOut_L = new float[nBufferSize]; m_pOut_R = new float[nBufferSize]; return 0; } int FakeDriver::connect() { INFOLOG( "connect" ); // // always rolling, no user interaction m_transport.m_status = TransportInfo::ROLLING; return 0; } void FakeDriver::disconnect() { INFOLOG( "disconnect" ); delete[] m_pOut_L; m_pOut_L = NULL; delete[] m_pOut_R; m_pOut_R = NULL; } unsigned FakeDriver::getSampleRate() { return 44100; } float* FakeDriver::getOut_L() { return m_pOut_L; } float* FakeDriver::getOut_R() { return m_pOut_R; } void FakeDriver::play() { m_transport.m_status = TransportInfo::ROLLING; while ( m_processCallback( m_nBufferSize, NULL ) == 0 ) { // process... } } void FakeDriver::stop() { m_transport.m_status = TransportInfo::STOPPED; } void FakeDriver::locate( unsigned long nFrame ) { m_transport.m_nFrames = nFrame; } void FakeDriver::updateTransportInfo() { // not used } void FakeDriver::setBpm( float fBPM ) { m_transport.m_nBPM = fBPM; } }; hydrogen-0.9.6-beta3/src/core/src/IO/jack_midi_driver.cpp000066400000000000000000000233161211146647700231650ustar00rootroot00000000000000/*- * Copyright (c) 2011 Hans Petter Selasky * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. */ #include "JackMidiDriver.h" #ifdef H2CORE_HAVE_JACK #include #include #include #include #include #include #include #ifdef H2CORE_HAVE_LASH #include #endif using namespace std; namespace H2Core { const char* JackMidiDriver::__class_name = "JackMidiDriver"; void JackMidiDriver::lock(void) { pthread_mutex_lock(&mtx); } void JackMidiDriver::unlock(void) { pthread_mutex_unlock(&mtx); } void JackMidiDriver::JackMidiWrite(jack_nframes_t nframes) { int error; int events; int i; void *buf; jack_midi_event_t event; uint8_t buffer[13];// 13 is needed if we get sysex goto messages if (input_port == NULL) return; buf = jack_port_get_buffer(input_port, nframes); if (buf == NULL) return; #ifdef JACK_MIDI_NEEDS_NFRAMES events = jack_midi_get_event_count(buf, nframes); #else events = jack_midi_get_event_count(buf); #endif for (i = 0; i < events; i++) { MidiMessage msg; #ifdef JACK_MIDI_NEEDS_NFRAMES error = jack_midi_event_get(&event, buf, i, nframes); #else error = jack_midi_event_get(&event, buf, i); #endif if (error) continue; if (running < 1) continue; error = event.size; if (error > (int)sizeof(buffer)) error = (int)sizeof(buffer); memset(buffer, 0, sizeof(buffer)); memcpy(buffer, event.buffer, error); switch (buffer[0] >> 4) { case 0x8: /* note off */ msg.m_type = MidiMessage::NOTE_OFF; msg.m_nData1 = buffer[1]; msg.m_nData2 = buffer[2]; msg.m_nChannel = buffer[0] & 0xF; handleMidiMessage(msg); break; case 0x9: /* note on */ msg.m_type = MidiMessage::NOTE_ON; msg.m_nData1 = buffer[1]; msg.m_nData2 = buffer[2]; msg.m_nChannel = buffer[0] & 0xF; handleMidiMessage(msg); break; case 0xB: /* control change */ msg.m_type = MidiMessage::CONTROL_CHANGE; msg.m_nData1 = buffer[1]; msg.m_nData2 = buffer[2]; msg.m_nChannel = buffer[0] & 0xF; handleMidiMessage(msg); break; case 0xC: /* program change */ msg.m_type = MidiMessage::PROGRAM_CHANGE; msg.m_nData1 = buffer[1]; msg.m_nData2 = buffer[2]; msg.m_nChannel = buffer[0] & 0xF; handleMidiMessage(msg); break; case 0xF: switch (buffer[0]) { case 0xF0: /* system exclusive */ msg.m_type = MidiMessage::SYSEX; if(buffer[3] == 06 ){// MMC message for ( int i = 0; i < sizeof(buffer) && i<6; i++ ) { msg.m_sysexData.push_back( buffer[i] ); } }else { for ( int i = 0; i < sizeof(buffer); i++ ) { msg.m_sysexData.push_back( buffer[i] ); } } handleMidiMessage(msg); break; case 0xF1: msg.m_type = MidiMessage::QUARTER_FRAME; msg.m_nData1 = buffer[1]; msg.m_nData2 = buffer[2]; msg.m_nChannel = 0; handleMidiMessage(msg); break; case 0xF2: msg.m_type = MidiMessage::SONG_POS; msg.m_nData1 = buffer[1]; msg.m_nData2 = buffer[2]; msg.m_nChannel = 0; handleMidiMessage(msg); break; case 0xFA: msg.m_type = MidiMessage::START; msg.m_nData1 = buffer[1]; msg.m_nData2 = buffer[2]; msg.m_nChannel = 0; handleMidiMessage(msg); break; case 0xFB: msg.m_type = MidiMessage::CONTINUE; msg.m_nData1 = buffer[1]; msg.m_nData2 = buffer[2]; msg.m_nChannel = 0; handleMidiMessage(msg); break; case 0xFC: msg.m_type = MidiMessage::STOP; msg.m_nData1 = buffer[1]; msg.m_nData2 = buffer[2]; msg.m_nChannel = 0; handleMidiMessage(msg); break; default: break; } default: break; } } } void JackMidiDriver::JackMidiRead(jack_nframes_t nframes) { uint8_t *buffer; void *buf; jack_nframes_t t; uint8_t data[1]; uint8_t len; if (output_port == NULL) return; buf = jack_port_get_buffer(output_port, nframes); if (buf == NULL) return; #ifdef JACK_MIDI_NEEDS_NFRAMES jack_midi_clear_buffer(buf, nframes); #else jack_midi_clear_buffer(buf); #endif t = 0; lock(); while ((t < nframes) && (rx_out_pos != rx_in_pos)) { len = jack_buffer[4 * rx_in_pos]; if (len == 0) { rx_in_pos++; if (rx_in_pos >= JACK_MIDI_BUFFER_MAX) rx_in_pos = 0; continue; } #ifdef JACK_MIDI_NEEDS_NFRAMES buffer = jack_midi_event_reserve(buf, t, len, nframes); #else buffer = jack_midi_event_reserve(buf, t, len); #endif if (buffer == NULL) break; t++; rx_in_pos++; if (rx_in_pos >= JACK_MIDI_BUFFER_MAX) rx_in_pos = 0; memcpy(buffer, jack_buffer + (4 * rx_in_pos) + 1, len); } unlock(); } void JackMidiDriver::JackMidiOutEvent(uint8_t buf[4], uint8_t len) { uint32_t next_pos; lock(); next_pos = rx_out_pos + 1; if (next_pos >= JACK_MIDI_BUFFER_MAX) next_pos = 0; if (next_pos == rx_in_pos) { /* buffer is full */ unlock(); return; } if (len > 3) len = 3; jack_buffer[(4 * next_pos)] = len; jack_buffer[(4 * next_pos) + 1] = buf[0]; jack_buffer[(4 * next_pos) + 2] = buf[1]; jack_buffer[(4 * next_pos) + 3] = buf[2]; rx_out_pos = next_pos; unlock(); } static int JackMidiProcessCallback(jack_nframes_t nframes, void *arg) { JackMidiDriver *jmd = (JackMidiDriver *)arg; if (nframes <= 0) return (0); jmd->JackMidiRead(nframes); jmd->JackMidiWrite(nframes); return (0); } static void JackMidiShutdown(void *arg) { UNUSED(arg); Hydrogen::get_instance()->raiseError( Hydrogen::JACK_SERVER_SHUTDOWN ); } JackMidiDriver::JackMidiDriver() : MidiInput( __class_name ), MidiOutput( __class_name ), Object( __class_name ) { pthread_mutex_init(&mtx, NULL); running = 0; rx_in_pos = 0; rx_out_pos = 0; output_port = 0; input_port = 0; jack_client = jack_client_open("hydrogen-midi", JackNoStartServer, NULL); if (jack_client == NULL) return; jack_set_process_callback(jack_client, JackMidiProcessCallback, this); jack_on_shutdown(jack_client, JackMidiShutdown, 0); output_port = jack_port_register( jack_client, "TX", JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0); input_port = jack_port_register( jack_client, "RX", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0); jack_activate(jack_client); } JackMidiDriver::~JackMidiDriver() { if (jack_client != NULL) { jack_port_unregister( jack_client, input_port); jack_port_unregister( jack_client, output_port); jack_deactivate(jack_client); } pthread_mutex_destroy(&mtx); } void JackMidiDriver::open() { running ++; } void JackMidiDriver::close() { running --; } std::vector JackMidiDriver::getOutputPortList() { vector outputList; outputList.push_back("Default"); return outputList; } void JackMidiDriver::getPortInfo(const QString& sPortName, int& nClient, int& nPort) { if (sPortName == "None") { nClient = -1; nPort = -1; return; } nClient = 0; nPort = 0; } void JackMidiDriver::handleQueueNote(Note* pNote) { uint8_t buffer[4]; int channel; int key; int vel; channel = pNote->get_instrument()->get_midi_out_channel(); if (channel < 0 || channel > 15) return; key = (pNote->get_octave() +3 ) * 12 + pNote->get_key() + pNote->get_instrument()->get_midi_out_note() - 60; if (key < 0 || key > 127) return; vel = pNote->get_midi_velocity(); if (vel < 0 || vel > 127) return; buffer[0] = 0x80 | channel; /* note off */ buffer[1] = key; buffer[2] = 0; buffer[3] = 0; JackMidiOutEvent(buffer, 3); buffer[0] = 0x90 | channel; /* note on */ buffer[1] = key; buffer[2] = vel; buffer[3] = 0; JackMidiOutEvent(buffer, 3); } void JackMidiDriver::handleQueueNoteOff(int channel, int key, int vel) { uint8_t buffer[4]; if (channel < 0 || channel > 15) return; if (key < 0 || key > 127) return; if (vel < 0 || vel > 127) return; buffer[0] = 0x80 | channel; /* note off */ buffer[1] = key; buffer[2] = 0; buffer[3] = 0; JackMidiOutEvent(buffer, 3); } void JackMidiDriver::handleQueueAllNoteOff() { InstrumentList *instList = Hydrogen::get_instance()->getSong()->get_instrument_list(); Instrument *curInst; unsigned int numInstruments = instList->size(); unsigned int i; int channel; int key; for (i = 0; i < numInstruments; i++) { curInst = instList->get(i); channel = curInst->get_midi_out_channel(); if (channel < 0 || channel > 15) continue; key = curInst->get_midi_out_note(); if (key < 0 || key > 127) continue; handleQueueNoteOff(channel, key, 0); } } }; #endif /* H2CORE_HAVE_JACK */ hydrogen-0.9.6-beta3/src/core/src/IO/jack_output.cpp000066400000000000000000000665441211146647700222420ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #ifdef H2CORE_HAVE_JACK #include #include #include #include #include #include #include #include #include #include #include #ifdef H2CORE_HAVE_LASH #include #endif #ifdef H2CORE_HAVE_JACKSESSION #include #endif namespace H2Core { unsigned long jack_server_sampleRate = 0; jack_nframes_t jack_server_bufferSize = 0; JackOutput *jackDriverInstance = NULL; int jackDriverSampleRate( jack_nframes_t nframes, void *param ) { Object* __object = ( Object* )param; QString msg = QString("Jack SampleRate changed: the sample rate is now %1/sec").arg( QString::number( (int) nframes ) ); __INFOLOG( msg ); jack_server_sampleRate = nframes; return 0; } int jackDriverBufferSize( jack_nframes_t nframes, void * /*arg*/ ) { /* This function does _NOT_ have to be realtime safe. */ jack_server_bufferSize = nframes; return 0; } void jackDriverShutdown( void *arg ) { UNUSED( arg ); // jackDriverInstance->deactivate(); jackDriverInstance->client = NULL; Hydrogen::get_instance()->raiseError( Hydrogen::JACK_SERVER_SHUTDOWN ); } const char* JackOutput::__class_name = "JackOutput"; JackOutput::JackOutput( JackProcessCallback processCallback ) : AudioOutput( __class_name ) { INFOLOG( "INIT" ); __track_out_enabled = Preferences::get_instance()->m_bJackTrackOuts; // allow per-track output jackDriverInstance = this; this->processCallback = processCallback; must_relocate = 0; locate_countdown = 0; bbt_frame_offset = 0; track_port_count = 0; memset( track_output_ports_L, 0, sizeof(track_output_ports_L) ); memset( track_output_ports_R, 0, sizeof(track_output_ports_R) ); } JackOutput::~JackOutput() { INFOLOG( "DESTROY" ); disconnect(); } // return 0: ok // return 1: cannot activate client // return 2: cannot connect output port // return 3: Jack server not running // return 4: output port = NULL int JackOutput::connect() { INFOLOG( "connect" ); if ( jack_activate ( client ) ) { Hydrogen::get_instance()->raiseError( Hydrogen::JACK_CANNOT_ACTIVATE_CLIENT ); return 1; } bool connect_output_ports = connect_out_flag; memset( track_output_ports_L, 0, sizeof(track_output_ports_L) ); memset( track_output_ports_R, 0, sizeof(track_output_ports_R) ); #ifdef H2CORE_HAVE_LASH if ( Preferences::get_instance()->useLash() ){ LashClient* lashClient = LashClient::get_instance(); if (lashClient && lashClient->isConnected()) { // infoLog("[LASH] Sending Jack client name to LASH server"); lashClient->sendJackClientName(); if (!lashClient->isNewProject()) { connect_output_ports = false; } } } #endif if ( connect_output_ports ) { // if ( connect_out_flag ) { // connect the ports if ( jack_connect( client, jack_port_name( output_port_1 ), output_port_name_1.toLocal8Bit() ) == 0 && jack_connect ( client, jack_port_name( output_port_2 ), output_port_name_2.toLocal8Bit() ) == 0 ) { return 0; } INFOLOG( "Could not connect so saved out-ports. Connecting to first pair of in-ports" ); const char ** portnames = jack_get_ports ( client, NULL, NULL, JackPortIsInput ); if ( !portnames || !portnames[0] || !portnames[1] ) { ERRORLOG( "Could't locate two Jack input port" ); Hydrogen::get_instance()->raiseError( Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT ); return 2; } if ( jack_connect( client, jack_port_name( output_port_1 ), portnames[0] ) != 0 || jack_connect( client, jack_port_name( output_port_2 ), portnames[1] ) != 0 ) { ERRORLOG( "Could't connect to first pair of Jack input ports" ); Hydrogen::get_instance()->raiseError( Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT ); return 2; } free( portnames ); } return 0; } void JackOutput::disconnect() { INFOLOG( "disconnect" ); deactivate(); jack_client_t *oldClient = client; client = NULL; if ( oldClient ) { INFOLOG( "calling jack_client_close" ); int res = jack_client_close( oldClient ); if ( res ) { ERRORLOG( "Error in jack_client_close" ); // FIXME: raise exception } } client = NULL; } void JackOutput::deactivate() { INFOLOG( "[deactivate]" ); if ( client ) { INFOLOG( "calling jack_deactivate" ); int res = jack_deactivate( client ); if ( res ) { ERRORLOG( "Error in jack_deactivate" ); } } memset( track_output_ports_L, 0, sizeof(track_output_ports_L) ); memset( track_output_ports_R, 0, sizeof(track_output_ports_R) ); } unsigned JackOutput::getBufferSize() { return jack_server_bufferSize; } unsigned JackOutput::getSampleRate() { return jack_server_sampleRate; } void JackOutput::calculateFrameOffset() { bbt_frame_offset = m_JackTransportPos.frame - m_transport.m_nFrames; } int oldpo = 0; //int changer = 0; void JackOutput::locateInNCycles( unsigned long frame, int cycles_to_wait ) { locate_countdown = cycles_to_wait; locate_frame = frame; } /// Take beat-bar-tick info from the Jack system, and translate it to a new internal frame position and ticksize. void JackOutput::relocateBBT() { //wolke if hydrogen is jack time master this is not relevant if( Preferences::get_instance()->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER && m_transport.m_status != TransportInfo::ROLLING) { m_transport.m_nFrames = Hydrogen::get_instance()->getHumantimeFrames() - getBufferSize(); // have absolut nothing to do with the old ardour transport bug WARNINGLOG( "Relocate: Call it off" ); calculateFrameOffset(); return; } else { if ( m_transport.m_status != TransportInfo::ROLLING || !( m_JackTransportPos.valid & JackPositionBBT ) /**the last check is *probably* redundant*/ ){ calculateFrameOffset(); return; } INFOLOG( "..." ); Hydrogen * H = Hydrogen::get_instance(); Song * S = H->getSong(); float hydrogen_TPB = ( float )( S->__resolution / m_JackTransportPos.beat_type * 4 ); long bar_ticks = 0; //long beat_ticks = 0; if ( S->get_mode() == Song::SONG_MODE ) { bar_ticks = H->getTickForPosition( m_JackTransportPos.bar-1 ); // (Reasonable?) assumption that one pattern is _always_ 1 bar long! if ( bar_ticks < 0 ) bar_ticks = 0; // ignore error NOTE This is wrong -- if loop state is off, transport should just stop ?? } float hydrogen_ticks_to_locate = bar_ticks + ( m_JackTransportPos.beat-1 )*hydrogen_TPB + m_JackTransportPos.tick *( hydrogen_TPB/m_JackTransportPos.ticks_per_beat ) ; // INFOLOG( QString( "Position from Time Master: BBT [%1,%2,%3]" ) . arg( m_JackTransportPos.bar ) . arg( m_JackTransportPos.beat ) . arg( m_JackTransportPos.tick ) ); // WARNINGLOG( QString(bbt) + " -- Tx/Beat = "+to_string(m_JackTransportPos.ticks_per_beat)+", Meter "+to_string(m_JackTransportPos.beats_per_bar)+"/"+to_string(m_JackTransportPos.beat_type)+" =>tick " + to_string( hydrogen_ticks_to_locate ) ); float fNewTickSize = getSampleRate() * 60.0 / m_transport.m_nBPM / S->__resolution; // not S->m_fBPM !?? if ( fNewTickSize == 0 ) return; // ??!? // NOTE this _should_ prevent audioEngine_process_checkBPMChanged in Hydrogen.cpp from recalculating things. m_transport.m_nTickSize = fNewTickSize; long long nNewFrames = ( long long )( hydrogen_ticks_to_locate * fNewTickSize ); #ifndef JACK_NO_BBT_OFFSET if ( m_JackTransportPos.valid & JackBBTFrameOffset ) nNewFrames += m_JackTransportPos.bbt_offset ; #endif m_transport.m_nFrames = nNewFrames; /// offset between jack- and internal position calculateFrameOffset(); } } /// /// When jack_transport_start() is called, it takes effect from the next processing cycle. /// The location info from the timebase_master, if there is one, will not be available until the _next_ next cycle. /// The code must therefore wait one cycle before syncing up with timebase_master. /// void JackOutput::updateTransportInfo() { if ( locate_countdown == 1 ) locate( locate_frame ); if ( locate_countdown > 0 ) locate_countdown--; if ( Preferences::get_instance()->m_bJackTransportMode == Preferences::USE_JACK_TRANSPORT ) { m_JackTransportState = jack_transport_query( client, &m_JackTransportPos ); // update m_transport with jack-transport data switch ( m_JackTransportState ) { case JackTransportStopped: m_transport.m_status = TransportInfo::STOPPED; //infoLog( "[updateTransportInfo] STOPPED - frames: " + to_string(m_transportPos.frame) ); break; case JackTransportRolling: if ( m_transport.m_status != TransportInfo::ROLLING && ( m_JackTransportPos.valid & JackPositionBBT ) ) { must_relocate = 2; //WARNINGLOG( "Jack transport starting: Resyncing in 2 x Buffersize!!" ); } m_transport.m_status = TransportInfo::ROLLING; //infoLog( "[updateTransportInfo] ROLLING - frames: " + to_string(m_transportPos.frame) ); break; case JackTransportStarting: m_transport.m_status = TransportInfo::STOPPED; //infoLog( "[updateTransportInfo] STARTING (stopped) - frames: " + to_string(m_transportPos.frame) ); break; default: ERRORLOG( "Unknown jack transport state" ); } // FIXME // TickSize and BPM Hydrogen * H = Hydrogen::get_instance(); H->setTimelineBpm(); // dlr: fix #168, jack may have re-located us anywhere, check for bpm change every cycle if ( m_JackTransportPos.valid & JackPositionBBT ) { float bpm = ( float )m_JackTransportPos.beats_per_minute; if ( m_transport.m_nBPM != bpm ) { if ( Preferences::get_instance()->m_bJackMasterMode == Preferences::NO_JACK_TIME_MASTER ){ // WARNINGLOG( QString( "Tempo change from jack-transport: %1" ).arg( bpm ) ); m_transport.m_nBPM = bpm; must_relocate = 1; // The tempo change has happened somewhere during the previous cycle; relocate right away. // This commenting out is rude perhaps, but I cant't figure out what this bit is doing. // In any case, setting must_relocate = 1 here causes too many relocates. Jakob Lund /* } else { if ( m_transport.m_status == TransportInfo::STOPPED ) { oldpo = H->getPatternPos(); must_relocate = 1; //changer =1; }*/ } // Hydrogen::get_instance()->setBPM( m_JackTransportPos.beats_per_minute ); // unnecessary, as Song->m_BPM gets updated in audioEngine_process_transport (after calling this function) } } if ( m_transport.m_nFrames + bbt_frame_offset != m_JackTransportPos.frame ) { if ( ( m_JackTransportPos.valid & JackPositionBBT ) && must_relocate == 0 ) { WARNINGLOG( "Frame offset mismatch; triggering resync in 2 cycles" ); must_relocate = 2; } else { if ( Preferences::get_instance()->m_bJackMasterMode == Preferences::NO_JACK_TIME_MASTER ) { // If There's no timebase_master, and audioEngine_process_checkBPMChanged handled a tempo change during last cycle, the offset doesn't match, but hopefully it was calculated correctly: //this perform Jakobs mod in pattern mode, but both m_transport.m_nFrames works with the same result in pattern Mode // in songmode the first case dont work. //so we can remove this "if query" and only use this old mod: m_transport.m_nFrames = H->getHumantimeFrames(); //because to get the songmode we have to add this "H2Core::Hydrogen *m_pEngine" to the header file //if we remove this we also can remove *m_pEngine from header #if 0 // dlr: fix #169, why do we have a different behaviour for SONG_MODE? if ( m_pEngine->getSong()->get_mode() == Song::PATTERN_MODE ){ m_transport.m_nFrames = m_JackTransportPos.frame/* - bbt_frame_offset*/; ///see comment in svn changeset 753 } else { m_transport.m_nFrames = H->getHumantimeFrames(); } #else m_transport.m_nFrames = m_JackTransportPos.frame; bbt_frame_offset = 0; // dlr: stop re-syncing in every cycle when STOPPED #endif // In jack 'slave' mode, if there's no master, the following line is needed to be able to relocate by clicking the song ruler (wierd corner case, but still...) if ( m_transport.m_status == TransportInfo::ROLLING ) H->triggerRelocateDuringPlay(); } else { ///this is experimantal... but it works for the moment... fix me fix :-) wolke // ... will this actually happen? keeping it for now ( jakob lund ) m_transport.m_nFrames = H->getHumantimeFrames() - getBufferSize();// have nothing to do with the old ardour transport bug } } } // humantime fix if ( H->getHumantimeFrames() != m_JackTransportPos.frame ) { H->setHumantimeFrames(m_JackTransportPos.frame); //WARNINGLOG("fix Humantime " + to_string (m_JackTransportPos.frame)); } if ( must_relocate == 1 ) { //WARNINGLOG( "Resyncing!" ); relocateBBT(); if ( m_transport.m_status == TransportInfo::ROLLING ) { H->triggerRelocateDuringPlay(); } } if ( must_relocate > 0 ) must_relocate--; } } float* JackOutput::getOut_L() { jack_default_audio_sample_t *out = ( jack_default_audio_sample_t * ) jack_port_get_buffer ( output_port_1, jack_server_bufferSize ); return out; } float* JackOutput::getOut_R() { jack_default_audio_sample_t *out = ( jack_default_audio_sample_t * ) jack_port_get_buffer ( output_port_2, jack_server_bufferSize ); return out; } float* JackOutput::getTrackOut_L( unsigned nTrack ) { if(nTrack > (unsigned)track_port_count ) return 0; jack_port_t *p = track_output_ports_L[nTrack]; jack_default_audio_sample_t* out = 0; if( p ) { out = (jack_default_audio_sample_t*) jack_port_get_buffer( p, jack_server_bufferSize); } return out; } float* JackOutput::getTrackOut_R( unsigned nTrack ) { if(nTrack > (unsigned)track_port_count ) return 0; jack_port_t *p = track_output_ports_R[nTrack]; jack_default_audio_sample_t* out = 0; if( p ) { out = (jack_default_audio_sample_t*) jack_port_get_buffer( p, jack_server_bufferSize); } return out; } #define CLIENT_FAILURE(msg) { \ ERRORLOG("Could not connect to JACK server (" msg ")"); \ if (client) { \ ERRORLOG("...but JACK returned a non-null pointer?"); \ (client) = 0; \ } \ if (tries) ERRORLOG("...trying again."); \ } #define CLIENT_SUCCESS(msg) { \ assert(client); \ INFOLOG(msg); \ tries = 0; \ } int JackOutput::init( unsigned /*nBufferSize*/ ) { output_port_name_1 = Preferences::get_instance()->m_sJackPortName1; output_port_name_2 = Preferences::get_instance()->m_sJackPortName2; QString sClientName = "Hydrogen"; jack_status_t status; int tries = 2; // Sometimes jackd doesn't stop and start fast enough. while ( tries > 0 ) { --tries; #ifdef H2CORE_HAVE_JACKSESSION if (Preferences::get_instance()->getJackSessionUUID().isEmpty()){ client = jack_client_open( sClientName.toLocal8Bit(), JackNullOption, &status); } else { const QByteArray uuid = Preferences::get_instance()->getJackSessionUUID().toLocal8Bit(); client = jack_client_open( sClientName.toLocal8Bit(), JackSessionID, &status, uuid.constData()); } #else client = jack_client_open( sClientName.toLocal8Bit(), JackNullOption, &status); #endif switch(status) { case JackFailure: CLIENT_FAILURE("unknown error"); break; case JackInvalidOption: CLIENT_FAILURE("invalid option"); break; case JackNameNotUnique: if (client) { sClientName = jack_get_client_name(client); CLIENT_SUCCESS(QString("Jack assigned the client name '%1'") .arg(sClientName)); } else { CLIENT_FAILURE("name not unique"); } break; case JackServerStarted: CLIENT_SUCCESS("JACK Server started for Hydrogen."); break; case JackServerFailed: CLIENT_FAILURE("unable to connect"); break; case JackServerError: CLIENT_FAILURE("communication error"); break; case JackNoSuchClient: CLIENT_FAILURE("unknown client type"); break; case JackLoadFailure: CLIENT_FAILURE("can't load internal client"); break; case JackInitFailure: CLIENT_FAILURE("can't initialize client"); break; case JackShmFailure: CLIENT_FAILURE("unable to access shared memory"); break; case JackVersionError: CLIENT_FAILURE("client/server protocol version mismatch"); default: if (status) { ERRORLOG("Unknown status with JACK server."); if (client) { CLIENT_SUCCESS("Client pointer is *not* null..." " assuming we're OK"); } } else { CLIENT_SUCCESS("Connected to JACK server"); } } } if (client == 0) { return -1; } // Here, client should either be valid, or NULL. jack_server_sampleRate = jack_get_sample_rate ( client ); jack_server_bufferSize = jack_get_buffer_size ( client ); Preferences::get_instance()->m_nSampleRate = jack_server_sampleRate; Preferences::get_instance()->m_nBufferSize = jack_server_bufferSize; /* tell the JACK server to call `process()' whenever there is work to be done. */ jack_set_process_callback ( client, this->processCallback, 0 ); /* tell the JACK server to call `srate()' whenever the sample rate of the system changes. */ jack_set_sample_rate_callback ( client, jackDriverSampleRate, this ); /* tell JACK server to update us if the buffer size (frames per process cycle) changes. */ jack_set_buffer_size_callback ( client, jackDriverBufferSize, 0 ); /* tell the JACK server to call `jack_shutdown()' if it ever shuts down, either entirely, or if it just decides to stop calling us. */ jack_on_shutdown ( client, jackDriverShutdown, 0 ); /* create two ports */ output_port_1 = jack_port_register ( client, "out_L", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); output_port_2 = jack_port_register ( client, "out_R", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); if ( ( output_port_1 == NULL ) || ( output_port_2 == NULL ) ) { ( Hydrogen::get_instance() )->raiseError( Hydrogen::JACK_ERROR_IN_PORT_REGISTER ); return 4; } // clear buffers // jack_default_audio_sample_t *out_L = (jack_default_audio_sample_t *) jack_port_get_buffer (output_port_1, jack_server_bufferSize); // jack_default_audio_sample_t *out_R = (jack_default_audio_sample_t *) jack_port_get_buffer (output_port_2, jack_server_bufferSize); // memset( out_L, 0, nBufferSize * sizeof( float ) ); // memset( out_R, 0, nBufferSize * sizeof( float ) ); #ifdef H2CORE_HAVE_LASH if ( Preferences::get_instance()->useLash() ){ LashClient* lashClient = LashClient::get_instance(); if (lashClient->isConnected()) { lashClient->setJackClientName(sClientName.toLocal8Bit().constData()); } } #endif #ifdef H2CORE_HAVE_JACKSESSION jack_set_session_callback (client, jack_session_callback, (void*)this); #endif return 0; } /** * Make sure the number of track outputs match the instruments in @a song , and name the ports. */ void JackOutput::makeTrackOutputs( Song * song ) { /// Disable Track Outputs if( Preferences::get_instance()->m_bJackTrackOuts == false ) return; /// InstrumentList * instruments = song->get_instrument_list(); Instrument * instr; int nInstruments = ( int )instruments->size(); // create dedicated channel output ports WARNINGLOG( QString( "Creating / renaming %1 ports" ).arg( nInstruments ) ); for ( int n = nInstruments - 1; n >= 0; n-- ) { instr = instruments->get( n ); setTrackOutput( n, instr ); } // clean up unused ports jack_port_t *p_L, *p_R; for ( int n = nInstruments; n < track_port_count; n++ ) { p_L = track_output_ports_L[n]; p_R = track_output_ports_R[n]; track_output_ports_L[n] = 0; jack_port_unregister( client, p_L ); track_output_ports_R[n] = 0; jack_port_unregister( client, p_R ); } track_port_count = nInstruments; } /** * Give the @a n 'th port the name of @a instr . * If the n'th port doesn't exist, new ports up to n are created. */ void JackOutput::setTrackOutput( int n, Instrument * instr ) { QString chName; if ( track_port_count <= n ) { // need to create more ports for ( int m = track_port_count; m <= n; m++ ) { chName = QString( "Track_%1_" ).arg( m + 1 ); track_output_ports_L[m] = jack_port_register ( client, ( chName + "L" ).toLocal8Bit(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); track_output_ports_R[m] = jack_port_register ( client, ( chName + "R" ).toLocal8Bit(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); if ( track_output_ports_R[m] == NULL || track_output_ports_L[m] == NULL ) { Hydrogen::get_instance()->raiseError( Hydrogen::JACK_ERROR_IN_PORT_REGISTER ); } } track_port_count = n + 1; } // Now we're sure there is an n'th port, rename it. chName = QString( "Track_%1_%2_" ).arg( n + 1 ).arg( instr->get_name() ); jack_port_set_name( track_output_ports_L[n], ( chName + "L" ).toLocal8Bit() ); jack_port_set_name( track_output_ports_R[n], ( chName + "R" ).toLocal8Bit() ); } void JackOutput::play() { if ( ( Preferences::get_instance() )->m_bJackTransportMode == Preferences::USE_JACK_TRANSPORT || Preferences::get_instance()->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER ) { if ( client ) { INFOLOG( "jack_transport_start()" ); jack_transport_start( client ); } } else { m_transport.m_status = TransportInfo::ROLLING; } } void JackOutput::stop() { if ( ( Preferences::get_instance() )->m_bJackTransportMode == Preferences::USE_JACK_TRANSPORT || Preferences::get_instance()->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER ) { if ( client ) { INFOLOG( "jack_transport_stop()" ); jack_transport_stop( client ); } } else { m_transport.m_status = TransportInfo::STOPPED; } } void JackOutput::locate( unsigned long nFrame ) { if ( ( Preferences::get_instance() )->m_bJackTransportMode == Preferences::USE_JACK_TRANSPORT /*|| Preferences::get_instance()->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER*/ ) { if ( client ) { WARNINGLOG( QString( "Calling jack_transport_locate(%1)" ).arg( nFrame ) ); jack_transport_locate( client, nFrame ); } } else { m_transport.m_nFrames = nFrame; } } void JackOutput::setBpm( float fBPM ) { WARNINGLOG( QString( "setBpm: %1" ).arg( fBPM ) ); m_transport.m_nBPM = fBPM; } int JackOutput::getNumTracks() { // INFOLOG( "get num tracks()" ); return track_port_count; } #ifdef H2CORE_HAVE_JACKSESSION void JackOutput::jack_session_callback(jack_session_event_t *event, void *arg) { JackOutput *me = static_cast(arg); if(me) { me->jack_session_callback_impl(event); } } void JackOutput::jack_session_callback_impl(jack_session_event_t *event) { INFOLOG("jack session calback"); enum session_events{ SAVE_SESSION, SAVE_AND_QUIT, SAVE_TEMPLATE }; jack_session_event_t *ev = (jack_session_event_t *) event; /* Valid Song is needed */ if(Hydrogen::get_instance()->getSong()->get_filename().isEmpty()){ Hydrogen::get_instance()->getSong()->set_filename("Untitled_Song"); } if(Hydrogen::get_instance()->getSong()->get_filename().contains(" ")){ QStringList removeWhiteSpaces = Hydrogen::get_instance()->getSong()->get_filename().split(" "); Hydrogen::get_instance()->getSong()->set_filename( removeWhiteSpaces.join("_") ); } QString songfilename; QString jackSessionDirectory = (QString)ev->session_dir; QStringList list1 = Hydrogen::get_instance()->getSong()->get_filename().split("/"); QString realFillename = list1[list1.size()-1]; Hydrogen::get_instance()->getSong()->set_filename(jackSessionDirectory + realFillename); songfilename = "\"${SESSION_DIR}" + realFillename + "\""; QString retval = QString(Preferences::get_instance()->getJackSessionApplicationPath() + " -s" + songfilename + " --jacksessionid " + ev->client_uuid); const QByteArray filename = retval.toUtf8(); if (ev->type == JackSessionSave){ EventQueue::get_instance()->push_event(EVENT_JACK_SESSION, SAVE_SESSION); } if (ev->type == JackSessionSaveAndQuit) { EventQueue::get_instance()->push_event(EVENT_JACK_SESSION, SAVE_SESSION); EventQueue::get_instance()->push_event(EVENT_JACK_SESSION, SAVE_AND_QUIT); } ev->command_line = strdup(filename.constData()); jack_session_reply(client, ev ); jack_session_event_free (ev); } #endif //beginn jack time master void JackOutput::initTimeMaster() { if ( client == NULL) return; bool cond = false; if ( Preferences::get_instance()->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER) { cond = true; }else{ jack_release_timebase(client); } if ( Preferences::get_instance()->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER && jack_set_timebase_callback(client, cond, jack_timebase_callback, this) == 0) { Preferences::get_instance()->m_bJackMasterMode = Preferences::USE_JACK_TIME_MASTER ; cond = true; } else { Preferences::get_instance()->m_bJackMasterMode = Preferences::NO_JACK_TIME_MASTER ; cond = false; } } void JackOutput::com_release() { if ( client == NULL) return; jack_release_timebase(client); } void JackOutput::jack_timebase_callback(jack_transport_state_t state, jack_nframes_t nframes, jack_position_t *pos, int new_pos, void *arg) { JackOutput *me = static_cast(arg); if(me) { me->jack_timebase_callback_impl(state, nframes, pos, new_pos); } } void JackOutput::jack_timebase_callback_impl(jack_transport_state_t state, jack_nframes_t nframes, jack_position_t *pos, int new_pos) { Hydrogen * H = Hydrogen::get_instance(); //static double jack_tick; //static jack_nframes_t last_frame; static jack_nframes_t current_frame; static jack_transport_state_t state_current; static jack_transport_state_t state_last; state_current = state; current_frame = H->getTimeMasterFrames(); nframes = current_frame; int posi = H->getPatternPos(); if (posi <= 0) posi=1; new_pos = posi ; pos->valid = JackPositionBBT; pos->beats_per_bar = H->getTickForHumanPosition( posi )/48; pos->beat_type = 4; pos->ticks_per_beat = (long)H->getTickForHumanPosition( posi ); pos->beats_per_minute = H->getNewBpmJTM(); int ticksforbeat = H->getTickForHumanPosition( posi ); int beatperbar = H->getTickForHumanPosition( posi )/48 ; int ticker = (int)(H->getTickPosition()/ 48) ; int ptick = (int)(H->getTickPosition()); int ptickmax = ptick * beatperbar; int ptickreal2 = ptick * beatperbar; if (ptickmax > ( ticksforbeat )) { ptickreal2 = ptickmax -(ticksforbeat * ticker); } int ppos = H->getPatternPos() + 1; if (ppos == 0) ppos =1; pos->bar = ppos; pos->beat = ticker +1 ; pos->tick = ptickreal2 ; pos->bar_start_tick = pos->bar * pos->beats_per_bar * pos->ticks_per_beat; if (Hydrogen::get_instance()->getHumantimeFrames()<= 0){ pos->bar = 1; pos->beat = 1; pos->tick = 0; } state_last = state_current; } }; #endif // H2CORE_HAVE_JACK hydrogen-0.9.6-beta3/src/core/src/IO/midi_input.cpp000066400000000000000000000260731211146647700220440ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include #include #include namespace H2Core { MidiInput::MidiInput( const char* class_name ) : Object( class_name ) , m_bActive( false ) { //INFOLOG( "INIT" ); } MidiInput::~MidiInput() { //INFOLOG( "DESTROY" ); } void MidiInput::handleMidiMessage( const MidiMessage& msg ) { EventQueue::get_instance()->push_event( EVENT_MIDI_ACTIVITY, -1 ); // infoLog( "[handleMidiMessage]" ); // infoLog( "[handleMidiMessage] channel: " + to_string( msg.m_nChannel ) ); // infoLog( "[handleMidiMessage] val1: " + to_string( msg.m_nData1 ) ); // infoLog( "[handleMidiMessage] val2: " + to_string( msg.m_nData2 ) ); // midi channel filter for all messages bool bIsChannelValid = true; if ( Preferences::get_instance()->m_nMidiChannelFilter != -1 ) { bIsChannelValid = ( msg.m_nChannel == Preferences::get_instance()->m_nMidiChannelFilter); } // exclude all midi channel filter independent messages int type = msg.m_type; if(MidiMessage::SYSEX == type || MidiMessage::SYSTEM_EXCLUSIVE == type || MidiMessage::START == type || MidiMessage::CONTINUE == type || MidiMessage::STOP == type || MidiMessage::SONG_POS == type || MidiMessage::QUARTER_FRAME == type ){ bIsChannelValid =true; } if(!bIsChannelValid) return; switch ( type ) { case MidiMessage::SYSEX: handleSysexMessage( msg ); break; case MidiMessage::NOTE_ON: handleNoteOnMessage( msg ); break; case MidiMessage::NOTE_OFF: handleNoteOffMessage( msg ); break; case MidiMessage::POLYPHONIC_KEY_PRESSURE: ERRORLOG( "POLYPHONIC_KEY_PRESSURE event not handled yet" ); break; case MidiMessage::CONTROL_CHANGE: INFOLOG( QString( "[handleMidiMessage] CONTROL_CHANGE Parameter: %1, Value: %2").arg( msg.m_nData1 ).arg( msg.m_nData2 ) ); handleControlChangeMessage( msg ); break; case MidiMessage::PROGRAM_CHANGE: INFOLOG( QString( "[handleMidiMessage] PROGRAM_CHANGE event, seting next pattern to %1" ).arg( msg.m_nData1 ) ); Hydrogen::get_instance()->sequencer_setNextPattern(msg.m_nData1, false, false); break; case MidiMessage::CHANNEL_PRESSURE: ERRORLOG( "CHANNEL_PRESSURE event not handled yet" ); break; case MidiMessage::PITCH_WHEEL: ERRORLOG( "PITCH_WHEEL event not handled yet" ); break; case MidiMessage::SYSTEM_EXCLUSIVE: ERRORLOG( "SYSTEM_EXCLUSIVE event not handled yet" ); break; case MidiMessage::START: INFOLOG( "START event" ); if ( Hydrogen::get_instance()->getState() != STATE_PLAYING ) { Hydrogen::get_instance()->sequencer_play(); } break; case MidiMessage::CONTINUE: ERRORLOG( "CONTINUE event not handled yet" ); break; case MidiMessage::STOP: INFOLOG( "STOP event" ); if ( Hydrogen::get_instance()->getState() == STATE_PLAYING ) { Hydrogen::get_instance()->sequencer_stop(); } break; case MidiMessage::SONG_POS: ERRORLOG( "SONG_POS event not handled yet" ); break; case MidiMessage::QUARTER_FRAME: WARNINGLOG( "QUARTER_FRAME event not handled yet" ); break; case MidiMessage::UNKNOWN: ERRORLOG( "Unknown midi message" ); break; default: ERRORLOG( QString( "unhandled midi message type: %1" ).arg( msg.m_type ) ); } } void MidiInput::handleControlChangeMessage( const MidiMessage& msg ) { //INFOLOG( QString( "[handleMidiMessage] CONTROL_CHANGE Parameter: %1, Value: %2" ).arg( msg.m_nData1 ).arg( msg.m_nData2 ) ); Hydrogen *pEngine = Hydrogen::get_instance(); MidiActionManager * aH = MidiActionManager::get_instance(); MidiMap * mM = MidiMap::get_instance(); MidiAction * pAction; pAction = mM->getCCAction( msg.m_nData1 ); pAction->setParameter2( QString::number( msg.m_nData2 ) ); aH->handleAction( pAction ); pEngine->lastMidiEvent = "CC"; pEngine->lastMidiEventParameter = msg.m_nData1; } void MidiInput::handleNoteOnMessage( const MidiMessage& msg ) { // INFOLOG( "handleNoteOnMessage" ); int nNote = msg.m_nData1; float fVelocity = msg.m_nData2 / 127.0; if ( fVelocity == 0 ) { handleNoteOffMessage( msg ); return; } MidiActionManager * aH = MidiActionManager::get_instance(); MidiMap * mM = MidiMap::get_instance(); Hydrogen *pEngine = Hydrogen::get_instance(); pEngine->lastMidiEvent = "NOTE"; pEngine->lastMidiEventParameter = msg.m_nData1; bool action = aH->handleAction( mM->getNoteAction( msg.m_nData1 ) ); if ( action && Preferences::get_instance()->m_bMidiDiscardNoteAfterAction) { return; } bool bPatternSelect = false; if ( bPatternSelect ) { int patternNumber = nNote - 36; //INFOLOG( QString( "next pattern = %1" ).arg( patternNumber ) ); pEngine->sequencer_setNextPattern( patternNumber, false, false ); } else { static const float fPan_L = 1.0f; static const float fPan_R = 1.0f; int nInstrument = nNote - 36; if ( nInstrument < 0 ) { nInstrument = 0; } if ( nInstrument > ( MAX_INSTRUMENTS -1 ) ) { nInstrument = MAX_INSTRUMENTS - 1; } pEngine->addRealtimeNote( nInstrument, fVelocity, fPan_L, fPan_R, 0.0, false, true, nNote ); } __noteOnTick = pEngine->__getMidiRealtimeNoteTickPosition(); } void MidiInput::handleNoteOffMessage( const MidiMessage& msg ) { // INFOLOG( "handleNoteOffMessage" ); if ( Preferences::get_instance()->m_bMidiNoteOffIgnore ) { return; } Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); __noteOffTick = pEngine->getTickPosition(); unsigned long notelength = computeDeltaNoteOnOfftime(); int nNote = msg.m_nData1; //float fVelocity = msg.m_nData2 / 127.0; //we need this in future to controll release velocity int nInstrument = nNote - 36; if ( nInstrument < 0 ) { nInstrument = 0; } if ( nInstrument > ( MAX_INSTRUMENTS -1 ) ) { nInstrument = MAX_INSTRUMENTS - 1; } Instrument *pInstr = pSong->get_instrument_list()->get( nInstrument ); float fStep = pow( 1.0594630943593, (nNote -36) ); if ( !Preferences::get_instance()->__playselectedinstrument ) fStep = 1; if ( Preferences::get_instance()->__playselectedinstrument ){ nInstrument = pEngine->getSelectedInstrumentNumber(); pInstr= pEngine->getSong()->get_instrument_list()->get( pEngine->getSelectedInstrumentNumber()); } bool use_note_off = AudioEngine::get_instance()->get_sampler()->is_instrument_playing( pInstr ); if(use_note_off){ if ( Preferences::get_instance()->__playselectedinstrument ){ AudioEngine::get_instance()->get_sampler()->midi_keyboard_note_off( msg.m_nData1 ); }else { if ( pSong->get_instrument_list()->size() < nInstrument +1 ) return; Note *offnote = new Note( pInstr, 0.0, 0.0, 0.0, 0.0, -1, 0 ); offnote->set_note_off( true ); AudioEngine::get_instance()->get_sampler()->note_on( offnote ); delete offnote; } if(Preferences::get_instance()->getRecordEvents()) AudioEngine::get_instance()->get_sampler()->setPlayingNotelength( pInstr, notelength * fStep, __noteOnTick ); } } unsigned long MidiInput::computeDeltaNoteOnOfftime() { unsigned long __notelengthTicks = __noteOffTick - __noteOnTick; return __notelengthTicks; } void MidiInput::handleSysexMessage( const MidiMessage& msg ) { /* General MMC message 0 1 2 3 4 5 F0 7F id 6 cmd 247 cmd: 1 stop 2 play 3 Deferred play 4 Fast Forward 5 Rewind 6 Record strobe (punch in) 7 Record exit (punch out) 8 Record ready 9 Pause Goto MMC message 0 1 2 3 4 5 6 7 8 9 10 11 12 240 127 id 6 68 6 1 hr mn sc fr ff 247 */ MidiActionManager * aH = MidiActionManager::get_instance(); MidiMap * mM = MidiMap::get_instance(); Hydrogen *pEngine = Hydrogen::get_instance(); pEngine->lastMidiEventParameter = msg.m_nData1; if ( msg.m_sysexData.size() == 6 ) { if ( ( msg.m_sysexData[0] == 240 ) && ( msg.m_sysexData[1] == 127 ) && //( msg.m_sysexData[2] == 0 ) && ( msg.m_sysexData[3] == 6 ) ) { switch ( msg.m_sysexData[4] ) { case 1: // STOP { pEngine->lastMidiEvent = "MMC_STOP"; aH->handleAction(mM->getMMCAction("MMC_STOP")); break; } case 2: // PLAY { pEngine->lastMidiEvent = "MMC_PLAY"; aH->handleAction(mM->getMMCAction("MMC_PLAY")); break; } case 3: //DEFERRED PLAY { pEngine->lastMidiEvent = "MMC_PLAY"; aH->handleAction(mM->getMMCAction("MMC_PLAY")); break; } case 4: // FAST FWD pEngine->lastMidiEvent = "MMC_FAST_FORWARD"; aH->handleAction(mM->getMMCAction("MMC_FAST_FORWARD")); break; case 5: // REWIND pEngine->lastMidiEvent = "MMC_REWIND"; aH->handleAction(mM->getMMCAction("MMC_REWIND")); break; case 6: // RECORD STROBE (PUNCH IN) pEngine->lastMidiEvent = "MMC_RECORD_STROBE"; aH->handleAction(mM->getMMCAction("MMC_RECORD_STROBE")); break; case 7: // RECORD EXIT (PUNCH OUT) pEngine->lastMidiEvent = "MMC_RECORD_EXIT"; aH->handleAction(mM->getMMCAction("MMC_RECORD_EXIT")); break; case 8: // RECORD READY pEngine->lastMidiEvent = "MMC_RECORD_READY"; aH->handleAction(mM->getMMCAction("MMC_RECORD_READY")); break; case 9: //PAUSE pEngine->lastMidiEvent = "MMC_PAUSE"; aH->handleAction(mM->getMMCAction("MMC_PAUSE")); break; default: WARNINGLOG( "Unknown MMC Command" ); // midiDump( buf, nBytes ); } } } else if ( msg.m_sysexData.size() == 13 ) { ERRORLOG( "MMC GOTO Message not implemented yet" ); // midiDump( buf, nBytes ); //int id = buf[2]; int hr = msg.m_sysexData[7]; int mn = msg.m_sysexData[8]; int sc = msg.m_sysexData[9]; int fr = msg.m_sysexData[10]; int ff = msg.m_sysexData[11]; char tmp[200]; sprintf( tmp, "[handleSysexMessage] GOTO %d:%d:%d:%d:%d", hr, mn, sc, fr, ff ); INFOLOG( tmp ); } else { // sysex dump QString sDump; char tmpChar[64]; for ( int i = 0; i < ( int )msg.m_sysexData.size(); ++i ) { sprintf( tmpChar, "%X ", ( int )msg.m_sysexData[ i ] ); sDump += tmpChar; } WARNINGLOG( QString( "Unknown SysEx message: (%1) [%2]" ).arg( msg.m_sysexData.size() ).arg( sDump ) ); } } }; hydrogen-0.9.6-beta3/src/core/src/IO/midi_output.cpp000066400000000000000000000030301211146647700222310ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include namespace H2Core { MidiOutput::MidiOutput( const char* class_name ) : Object( class_name ) { //INFOLOG( "INIT" ); } MidiOutput::~MidiOutput() { //INFOLOG( "DESTROY" ); } /* void MidiOutput::queueMidiMessage( const MidiMessage& msg ) { m_pendingMessages.push_back(msg); } bool MidiOutput::hasQueuedMessages() { return !m_pendingMessages.empty(); } void MidiOutput::processQueuedMessages() { /// Do something... } */ }; hydrogen-0.9.6-beta3/src/core/src/IO/null_driver.cpp000066400000000000000000000042261211146647700222240ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include namespace H2Core { const char* NullDriver::__class_name = "NullDriver"; NullDriver::NullDriver( audioProcessCallback processCallback ) : AudioOutput( __class_name ) { UNUSED( processCallback ); // INFOLOG( "INIT" ); } NullDriver::~NullDriver() { // INFOLOG( "DESTROY" ); } int NullDriver::init( unsigned nBufferSize ) { UNUSED( nBufferSize ); return 0; } int NullDriver::connect() { INFOLOG( "connect" ); return 0; } void NullDriver::disconnect() { INFOLOG( "disconnect" ); } unsigned NullDriver::getBufferSize() { // infoLog( "[getBufferSize()] not implemented yet"); return 0; } unsigned NullDriver::getSampleRate() { // infoLog("[getSampleRate()] not implemented yet"); return 0; } float* NullDriver::getOut_L() { INFOLOG( "not implemented yet" ); return NULL; } float* NullDriver::getOut_R() { INFOLOG( "not implemented yet" ); return NULL; } void NullDriver::play() { INFOLOG( "not implemented" ); } void NullDriver::stop() { INFOLOG( "not implemented" ); } void NullDriver::locate( unsigned long nFrame ) { UNUSED( nFrame ); INFOLOG( "not implemented" ); } void NullDriver::updateTransportInfo() { INFOLOG( "not implemented" ); } void NullDriver::setBpm( float fBPM ) { UNUSED( fBPM ); ERRORLOG( "not implemented yet" ); } }; hydrogen-0.9.6-beta3/src/core/src/IO/oss_driver.cpp000066400000000000000000000146121211146647700220560ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "OssDriver.h" // check if OSS support is enabled #ifdef H2CORE_HAVE_OSS #include #include namespace H2Core { audioProcessCallback ossDriver_audioProcessCallback; bool ossDriver_running; pthread_t ossDriverThread; int oss_driver_bufferSize = -1; OssDriver *m_pOssDriverInstance = NULL; unsigned nNextFrames = 0; void* ossDriver_processCaller( void* param ) { Object* __object = ( Object* )param; // stolen from amSynth struct sched_param sched; sched.sched_priority = 50; int res = sched_setscheduler( 0, SCHED_FIFO, &sched ); sched_getparam( 0, &sched ); if ( res ) { __WARNINGLOG( "Can't set realtime scheduling for OSS Driver" ); } __INFOLOG( QString( "Scheduling priority = %1" ).arg( sched.sched_priority ) ); OssDriver *ossDriver = ( OssDriver* )param; sleep( 1 ); while ( ossDriver_running ) { ossDriver_audioProcessCallback( oss_driver_bufferSize, NULL ); ossDriver->write(); } pthread_exit( NULL ); return NULL; } const char* OssDriver::__class_name = "OssDriver"; OssDriver::OssDriver( audioProcessCallback processCallback ) : AudioOutput( __class_name ) { INFOLOG( "INIT" ); audioBuffer = NULL; ossDriver_running = false; this->processCallback = processCallback; ossDriver_audioProcessCallback = processCallback; m_pOssDriverInstance = this; } OssDriver::~OssDriver() { INFOLOG( "DESTROY" ); } int OssDriver::init( unsigned nBufferSize ) { oss_driver_bufferSize = nBufferSize; delete[] audioBuffer; audioBuffer = NULL; audioBuffer = new short[nBufferSize * 2]; out_L = new float[nBufferSize]; out_R = new float[nBufferSize]; // clear buffers memset( out_L, 0, nBufferSize * sizeof( float ) ); memset( out_R, 0, nBufferSize * sizeof( float ) ); return 0; } /// Connect /// return 0: Ok /// return 1: Generic error int OssDriver::connect() { INFOLOG( "connect" ); Preferences *preferencesMng = Preferences::get_instance(); // initialize OSS int bits = 16; int speed = preferencesMng->m_nSampleRate; int stereo = 1; int bs; QString audioDevice; #ifdef __NetBSD__ audioDevice = "/dev/audio"; #else audioDevice = preferencesMng->m_sOSSDevice; #endif // Non blocking OSS open code stolen from GLAME fd = open( audioDevice.toLocal8Bit(), O_WRONLY | O_NONBLOCK ); // test with non blocking open int arg = fcntl( fd, F_GETFL, 0 ); if ( arg != -1 ) { // back to blocking mode... fcntl( fd, F_SETFL, arg & ~O_NONBLOCK ); } if ( fd == -1 ) { ERRORLOG( "DSP ERROR_OPEN" ); return 1; } if ( ioctl( fd, SNDCTL_DSP_SYNC, NULL ) < 0 ) { ERRORLOG( "ERROR_IOCTL" ); close( fd ); return 1; } if ( ioctl( fd, SNDCTL_DSP_SAMPLESIZE, &bits ) < 0 ) { ERRORLOG( "ERROR_IOCTL" ); close( fd ); return 1; } if ( ioctl( fd, SNDCTL_DSP_SPEED, &speed ) < 0 ) { ERRORLOG( "ERROR_IOCTL" ); close( fd ); return 1; } if ( ioctl( fd, SNDCTL_DSP_STEREO, &stereo ) < 0 ) { ERRORLOG( "ERROR_IOCTL" ); close( fd ); return 1; } unsigned bufferBits = log2( speed / 60 ); int fragSize = 0x00200000 | bufferBits; ioctl( fd, SNDCTL_DSP_SETFRAGMENT, &fragSize ); if ( ioctl( fd, SNDCTL_DSP_GETBLKSIZE, &bs ) < 0 ) { ERRORLOG( "ERROR_IOCTL" ); close( fd ); return 1; } INFOLOG( QString( "Blocksize audio = %1" ).arg( bs ) ); /* commenting this is a fix against buffersize problems described in ticket 119 if ( bs != ( 1 << bufferBits ) ) { ERRORLOG( "ERROR_IOCTL: unable to set BlockSize" ); close( fd ); return 1; } */// end comment int format = AFMT_S16_LE; if ( ioctl( fd, SNDCTL_DSP_SETFMT, &format ) == -1 ) { ERRORLOG( "ERROR_IOCTL unable to set format" ); close( fd ); return 1; } // start main thread ossDriver_running = true; pthread_attr_t attr; pthread_attr_init( &attr ); pthread_create( &ossDriverThread, &attr, ossDriver_processCaller, this ); return 0; } void OssDriver::disconnect() { INFOLOG( "disconnect" ); ossDriver_running = false; // join ossDriverThread pthread_join( ossDriverThread, NULL ); if ( fd != -1 ) { if ( close( fd ) ) { ERRORLOG( "Error closing audio device" ); } } delete [] out_L; out_L = NULL; delete [] out_R; out_R = NULL; delete[] audioBuffer; audioBuffer = NULL; } /// Write the audio data void OssDriver::write() { // infoLog("write"); unsigned size = oss_driver_bufferSize * 2; // prepare the 2-channel array of short for ( unsigned i = 0; i < ( unsigned )oss_driver_bufferSize; ++i ) { audioBuffer[i * 2] = ( short )( out_L[i] * 32768.0 ); audioBuffer[i * 2 + 1] = ( short )( out_R[i] * 32768.0 ); } unsigned long written = ::write( fd, audioBuffer, size * 2 ); if ( written != ( size * 2 ) ) { ERRORLOG( "OssDriver: Error writing samples to audio device." ); // std::cerr << "written = " << written << " of " << (size*2) << endl; } } int OssDriver::log2( int n ) { int result = 0; while ( ( n >>= 1 ) > 0 ) result++; return result; } unsigned OssDriver::getBufferSize() { return oss_driver_bufferSize; } unsigned OssDriver::getSampleRate() { Preferences *preferencesMng = Preferences::get_instance(); return preferencesMng->m_nSampleRate; } float* OssDriver::getOut_L() { return out_L; } float* OssDriver::getOut_R() { return out_R; } void OssDriver::play() { m_transport.m_status = TransportInfo::ROLLING; } void OssDriver::stop() { m_transport.m_status = TransportInfo::STOPPED; } void OssDriver::locate( unsigned long nFrame ) { m_transport.m_nFrames = nFrame; } void OssDriver::updateTransportInfo() { // not used } void OssDriver::setBpm( float fBPM ) { INFOLOG( QString( "setBpm: %1" ).arg( fBPM ) ); m_transport.m_nBPM = fBPM; } }; #endif // OSS support hydrogen-0.9.6-beta3/src/core/src/IO/portaudio_driver.cpp000066400000000000000000000064101211146647700232550ustar00rootroot00000000000000 #include "PortAudioDriver.h" #ifdef H2CORE_HAVE_PORTAUDIO #include #include namespace H2Core { int portAudioCallback( const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData ) { PortAudioDriver *pDriver = ( PortAudioDriver* )userData; pDriver->m_processCallback( pDriver->m_nBufferSize, NULL ); float *out = ( float* )outputBuffer; for ( unsigned i = 0; i < framesPerBuffer; i++ ) { *out++ = pDriver->m_pOut_L[ i ]; *out++ = pDriver->m_pOut_R[ i ]; } return 0; } const char* PortAudioDriver::__class_name = "PortAudioDriver"; PortAudioDriver::PortAudioDriver( audioProcessCallback processCallback ) : AudioOutput( __class_name ) , m_processCallback( processCallback ) , m_pOut_L( NULL ) , m_pOut_R( NULL ) { INFOLOG( "INIT" ); m_nBufferSize = Preferences::get_instance()->m_nBufferSize; m_nSampleRate = Preferences::get_instance()->m_nSampleRate; } PortAudioDriver::~PortAudioDriver() { INFOLOG( "DESTROY" ); } int PortAudioDriver::init( unsigned nBufferSize ) { return 0; } // // Connect // return 0: Ok // return 1: Generic error // int PortAudioDriver::connect() { INFOLOG( "[connect]" ); m_pOut_L = new float[ m_nBufferSize ]; m_pOut_R = new float[ m_nBufferSize ]; int err = Pa_Initialize(); if ( err != paNoError ) { ERRORLOG( "Portaudio error in Pa_Initialize: " + QString( Pa_GetErrorText( err ) ) ); return 1; } err = Pa_OpenDefaultStream( &m_pStream, /* passes back stream pointer */ 0, /* no input channels */ 2, /* stereo output */ paFloat32, /* 32 bit floating point output */ m_nSampleRate, // sample rate m_nBufferSize, // frames per buffer portAudioCallback, /* specify our custom callback */ this ); /* pass our data through to callback */ if ( err != paNoError ) { ERRORLOG( "Portaudio error in Pa_OpenDefaultStream: " + QString( Pa_GetErrorText( err ) ) ); return 1; } err = Pa_StartStream( m_pStream ); if ( err != paNoError ) { ERRORLOG( "Portaudio error in Pa_StartStream: " + QString( Pa_GetErrorText( err ) ) ); return 1; } return 0; } void PortAudioDriver::disconnect() { int err = Pa_StopStream( m_pStream ); if ( err != paNoError ) { ERRORLOG( "Err: " + QString( Pa_GetErrorText( err ) ) ); } err = Pa_CloseStream( m_pStream ); if ( err != paNoError ) { ERRORLOG( "Err: " + QString( Pa_GetErrorText( err ) ) ); } Pa_Terminate(); delete[] m_pOut_L; m_pOut_L = NULL; delete[] m_pOut_R; m_pOut_R = NULL; } unsigned PortAudioDriver::getBufferSize() { return m_nBufferSize; } unsigned PortAudioDriver::getSampleRate() { return m_nSampleRate; } float* PortAudioDriver::getOut_L() { return m_pOut_L; } float* PortAudioDriver::getOut_R() { return m_pOut_R; } void PortAudioDriver::updateTransportInfo() { } void PortAudioDriver::play() { m_transport.m_status = TransportInfo::ROLLING; } void PortAudioDriver::stop() { m_transport.m_status = TransportInfo::STOPPED; } void PortAudioDriver::locate( unsigned long nFrame ) { m_transport.m_nFrames = nFrame; } void PortAudioDriver::setBpm( float fBPM ) { m_transport.m_nBPM = fBPM; } }; #endif hydrogen-0.9.6-beta3/src/core/src/IO/portmidi_driver.cpp000066400000000000000000000203441211146647700231000ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "PortMidiDriver.h" #include #include #include #include #include #include #ifdef WIN32 #include #endif #ifdef H2CORE_HAVE_PORTMIDI #include #define TIME_PROC ((int32_t (*)(void *)) Pt_Time) #define TIME_START Pt_Start(1, 0, 0) /* timer started w/millisecond accuracy */ #include namespace H2Core { pthread_t PortMidiDriverThread; void* PortMidiDriver_thread( void* param ) { Object *__object = (Object*)param; PortMidiDriver *instance = ( PortMidiDriver* )param; __INFOLOG( "PortMidiDriver_thread starting" ); PmError status; int length; PmEvent buffer[1]; while ( instance->m_bRunning ) { status = Pm_Poll( instance->m_pMidiIn ); if ( status == TRUE ) { length = Pm_Read( instance->m_pMidiIn, buffer, 1 ); if ( length > 0 ) { MidiMessage msg; int nEventType = Pm_MessageStatus( buffer[0].message ); if ( ( nEventType >= 128 ) && ( nEventType < 144 ) ) { // note off msg.m_nChannel = nEventType - 128; msg.m_type = MidiMessage::NOTE_OFF; } else if ( ( nEventType >= 144 ) && ( nEventType < 160 ) ) { // note on msg.m_nChannel = nEventType - 144; msg.m_type = MidiMessage::NOTE_ON; } else if ( ( nEventType >= 160 ) && ( nEventType < 176 ) ) { // Polyphonic Key Pressure (After-touch) msg.m_nChannel = nEventType - 160; msg.m_type = MidiMessage::POLYPHONIC_KEY_PRESSURE; } else if ( ( nEventType >= 176 ) && ( nEventType < 192 ) ) { // Control Change msg.m_nChannel = nEventType - 176; msg.m_type = MidiMessage::CONTROL_CHANGE; } else if ( ( nEventType >= 192 ) && ( nEventType < 208 ) ) { // Program Change msg.m_nChannel = nEventType - 192; msg.m_type = MidiMessage::PROGRAM_CHANGE; } else if ( ( nEventType >= 208 ) && ( nEventType < 224 ) ) { // Channel Pressure (After-touch) msg.m_nChannel = nEventType - 208; msg.m_type = MidiMessage::CHANNEL_PRESSURE; } else if ( ( nEventType >= 224 ) && ( nEventType < 240 ) ) { // Pitch Wheel Change msg.m_nChannel = nEventType - 224; msg.m_type = MidiMessage::PITCH_WHEEL; } else if ( ( nEventType >= 240 ) && ( nEventType < 256 ) ) { // System Exclusive msg.m_nChannel = nEventType - 240; msg.m_type = MidiMessage::SYSTEM_EXCLUSIVE; } else { __ERRORLOG( "Unhandled midi message type: " + QString::number( nEventType ) ); __INFOLOG( "MIDI msg: " ); __INFOLOG( QString::number( buffer[0].timestamp ) ); __INFOLOG( QString::number( Pm_MessageStatus( buffer[0].message ) ) ); __INFOLOG( QString::number( Pm_MessageData1( buffer[0].message ) ) ); __INFOLOG( QString::number( Pm_MessageData2( buffer[0].message ) ) ); } msg.m_nData1 = Pm_MessageData1( buffer[0].message ); msg.m_nData2 = Pm_MessageData2( buffer[0].message ); instance->handleMidiMessage( msg ); } } else { #ifdef WIN32 Sleep( 1 ); #else usleep( 100 ); #endif } } __INFOLOG( "MIDI Thread DESTROY" ); pthread_exit( NULL ); return NULL; } const char* PortMidiDriver::__class_name = "PortMidiDriver"; PortMidiDriver::PortMidiDriver() : MidiInput( __class_name ), MidiOutput( __class_name ), Object( __class_name ) , m_bRunning( false ) { Pm_Initialize(); } PortMidiDriver::~PortMidiDriver() { Pm_Terminate(); } void PortMidiDriver::open() { INFOLOG( "[open]" ); int nInputBufferSize = 100; int nDeviceId = -1; int nOutDeviceId = -1; QString sMidiPortName = Preferences::get_instance()->m_sMidiPortName; int nDevices = Pm_CountDevices(); for ( int i = 0; i < nDevices; i++ ) { const PmDeviceInfo *info = Pm_GetDeviceInfo( i ); if ( info == NULL ) { ERRORLOG( "Could not open input device" ); } if ( info->input == TRUE ) { if ( info->name == sMidiPortName.toLocal8Bit().constData() ) { nDeviceId = i; } } if ( info->output == TRUE ) { if ( info->name == sMidiPortName.toStdString() ) { nOutDeviceId = i; } } } if ( nDeviceId == -1 ) { INFOLOG( "Midi input device not found." ); return; } if ( nOutDeviceId == -1 ) { INFOLOG( "Midi output device not found." ); return; } const PmDeviceInfo *info = Pm_GetDeviceInfo( nDeviceId ); if ( info == NULL ) { ERRORLOG( "Error opening midi input device" ); } //INFOLOG( string( "Device: " ).append( info->interf ).append( " " ).append( info->name ) ); TIME_START; PmError err = Pm_OpenInput( &m_pMidiIn, nDeviceId, NULL, nInputBufferSize, TIME_PROC, NULL ); if ( err != pmNoError ) { ERRORLOG( "Error in Pm_OpenInput" ); } err = Pm_OpenOutput( &m_pMidiOut, nOutDeviceId, NULL, nInputBufferSize, TIME_PROC, NULL, 0 ); if ( err != pmNoError ) { ERRORLOG( "Error in Pm_OpenInput" ); } m_bRunning = true; pthread_attr_t attr; pthread_attr_init( &attr ); pthread_create( &PortMidiDriverThread, &attr, PortMidiDriver_thread, ( void* )this ); } void PortMidiDriver::close() { INFOLOG( "[close]" ); if ( m_bRunning ) { m_bRunning = false; pthread_join( PortMidiDriverThread, NULL ); PmError err = Pm_Close( m_pMidiIn ); if ( err != pmNoError ) { ERRORLOG( "Error in Pm_OpenInput" ); } } } std::vector PortMidiDriver::getOutputPortList() { std::vector portList; int nDevices = Pm_CountDevices(); for ( int i = 0; i < nDevices; i++ ) { const PmDeviceInfo *info = Pm_GetDeviceInfo( i ); if ( info == NULL ) { ERRORLOG( "Could not open input device" ); } if ( info->input == TRUE ) { INFOLOG( info->name ); portList.push_back( info->name ); } } return portList; } void PortMidiDriver::handleQueueNote(Note* pNote) { if ( m_pMidiOut == NULL ) { ERRORLOG( "m_pMidiOut = NULL " ); return; } int channel = pNote->get_instrument()->get_midi_out_channel(); if (channel < 0) { return; } int key = (pNote->get_octave() +3 ) * 12 + pNote->get_key() + pNote->get_instrument()->get_midi_out_note() -60; int velocity = pNote->get_midi_velocity(); PmEvent event; event.timestamp = 0; //Note off event.message = Pm_Message(0x80 | channel, key, velocity); Pm_Write(m_pMidiOut, &event, 1); //Note on event.message = Pm_Message(0x90 | channel, key, velocity); Pm_Write(m_pMidiOut, &event, 1); } void PortMidiDriver::handleQueueNoteOff( int channel, int key, int velocity ) { if ( m_pMidiOut == NULL ) { ERRORLOG( "m_pMidiOut = NULL " ); return; } // int channel = pNote->get_instrument()->get_midi_out_channel(); if (channel < 0) { return; } // int velocity = pNote->get_midi_velocity(); PmEvent event; event.timestamp = 0; //Note off event.message = Pm_Message(0x80 | channel, key, velocity); Pm_Write(m_pMidiOut, &event, 1); } void PortMidiDriver::handleQueueAllNoteOff() { if ( m_pMidiOut == NULL ) { ERRORLOG( "m_pMidiOut = NULL " ); return; } InstrumentList *instList = Hydrogen::get_instance()->getSong()->get_instrument_list(); unsigned int numInstruments = instList->size(); for (int index = 0; index < numInstruments; ++index) { Instrument *curInst = instList->get(index); int channel = curInst->get_midi_out_channel(); if (channel < 0) { continue; } int key = curInst->get_midi_out_note(); PmEvent event; event.timestamp = 0; //Note off event.message = Pm_Message(0x80 | channel, key, 0); Pm_Write(m_pMidiOut, &event, 1); } } }; #endif // H2CORE_HAVE_PORTMIDI hydrogen-0.9.6-beta3/src/core/src/IO/transport_info.cpp000066400000000000000000000030771211146647700227510ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include namespace H2Core { const char* TransportInfo::__class_name = "TransportInfo"; TransportInfo::TransportInfo() : Object( __class_name ) { // infoLog( "INIT" ); m_status = STOPPED; m_nFrames = 0; m_nTickSize = 0; m_nBPM = 120; } TransportInfo::~TransportInfo() { // infoLog( "DESTROY" ); } void TransportInfo::printInfo() { switch ( m_status ) { case STOPPED: INFOLOG( "status = STOPPED" ); break; case ROLLING: INFOLOG( "status = ROLLING" ); break; case BAD: INFOLOG( "status = BAD" ); break; default: ERRORLOG( "status = unknown" ); } INFOLOG( QString( "frames = %1" ).arg( m_nFrames ) ); INFOLOG( QString( "tickSize = %1" ).arg( m_nTickSize ) ); } }; hydrogen-0.9.6-beta3/src/core/src/audio_engine.cpp000066400000000000000000000050141211146647700220120ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include // TODO: remove this line as soon as possible #include namespace H2Core { AudioEngine* AudioEngine::__instance = NULL; const char* AudioEngine::__class_name = "AudioEngine"; void AudioEngine::create_instance() { if( __instance == 0 ) { __instance = new AudioEngine; } } AudioEngine::AudioEngine() : Object( __class_name ) , __sampler( NULL ) , __synth( NULL ) { __instance = this; INFOLOG( "INIT" ); pthread_mutex_init( &__engine_mutex, NULL ); __sampler = new Sampler; __synth = new Synth; #ifdef H2CORE_HAVE_LADSPA Effects::create_instance(); #endif } AudioEngine::~AudioEngine() { INFOLOG( "DESTROY" ); #ifdef H2CORE_HAVE_LADSPA delete Effects::get_instance(); #endif // delete Sequencer::get_instance(); delete __sampler; delete __synth; } Sampler* AudioEngine::get_sampler() { assert(__sampler); return __sampler; } Synth* AudioEngine::get_synth() { assert(__synth); return __synth; } void AudioEngine::lock( const char* file, unsigned int line, const char* function ) { pthread_mutex_lock( &__engine_mutex ); __locker.file = file; __locker.line = line; __locker.function = function; } bool AudioEngine::try_lock( const char* file, unsigned int line, const char* function ) { int res = pthread_mutex_trylock( &__engine_mutex ); if ( res != 0 ) { // Lock not obtained return false; } __locker.file = file; __locker.line = line; __locker.function = function; return true; } void AudioEngine::unlock() { // Leave "__locker" dirty. pthread_mutex_unlock( &__engine_mutex ); } }; // namespace H2Core hydrogen-0.9.6-beta3/src/core/src/basics/000077500000000000000000000000001211146647700201245ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/src/basics/adsr.cpp000066400000000000000000000057161211146647700215720ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include "exponential_tables.h" namespace H2Core { const char* ADSR::__class_name = "ADSR"; inline static float linear_interpolation( float fVal_A, float fVal_B, double fVal ) { return fVal_A * ( 1 - fVal ) + fVal_B * fVal; //return fVal_A + fVal * ( fVal_B - fVal_A ); //return fVal_A + ((fVal_B - fVal_A) * fVal); } ADSR::ADSR( float attack, float decay, float sustain, float release ) : Object( __class_name ), __attack( attack ), __decay( decay ), __sustain( sustain ), __release( release ), __state( ATTACK ), __ticks( 0.0 ), __value( 0.0 ) { } ADSR::ADSR( const ADSR* other ) : Object( __class_name ), __attack( other->__attack ), __decay( other->__decay ), __sustain( other->__sustain ), __release( other->__release ), __state( other->__state ), __ticks( other->__ticks ), __value( other->__value ) { } ADSR::~ADSR() { } float ADSR::get_value( float step ) { switch ( __state ) { case ATTACK: if ( __attack == 0 ) { __value = 1.0; } else { __value = convex_exponant( linear_interpolation( 0.0, 1.0, ( __ticks * 1.0 / __attack ) ) ); } __ticks += step; if ( __ticks > __attack ) { __state = DECAY; __ticks = 0; } break; case DECAY: if ( __decay == 0 ) { __value = __sustain; } else { __value = concave_exponant( linear_interpolation( 1.0, __sustain, ( __ticks * 1.0 / __decay ) ) ); } __ticks += step; if ( __ticks > __decay ) { __state = SUSTAIN; __ticks = 0; } break; case SUSTAIN: __value = __sustain; break; case RELEASE: if ( __release < 256 ) { __release = 256; } __value = concave_exponant( linear_interpolation( __release_value, 0.0, ( __ticks * 1.0 / __release ) ) ); __ticks += step; if ( __ticks > __release ) { __state = IDLE; __ticks = 0; } break; case IDLE: default: __value = 0; }; return __value; } void ADSR::attack() { __state = ATTACK; __ticks = 0; } float ADSR::release() { if ( __state == IDLE ) return 0; if ( __state == RELEASE ) return __value; __release_value = __value; __state = RELEASE; __ticks = 0; return __release_value; } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/basics/drumkit.cpp000066400000000000000000000263311211146647700223140ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #ifdef H2CORE_HAVE_LIBARCHIVE #include #include #else #ifndef WIN32 #include #include #include #include #endif #endif #include #include #include #include #include #include #include namespace H2Core { const char* Drumkit::__class_name = "Drumkit"; Drumkit::Drumkit() : Object( __class_name ), __samples_loaded( false ), __instruments( 0 ) { } Drumkit::Drumkit( Drumkit* other ) : Object( __class_name ), __path( other->get_path() ), __name( other->get_name() ), __author( other->get_author() ), __info( other->get_info() ), __license( other->get_license() ), __samples_loaded( other->samples_loaded() ) { __instruments = new InstrumentList( other->get_instruments() ); } Drumkit::~Drumkit() { if( __instruments ) delete __instruments; } Drumkit* Drumkit::load( const QString& dk_dir, bool load_samples ) { INFOLOG( QString( "Load drumkit %1" ).arg( dk_dir ) ); if( !Filesystem::drumkit_valid( dk_dir ) ) { ERRORLOG( QString( "%1 is not valid drumkit" ).arg( dk_dir ) ); return 0; } return load_file( Filesystem::drumkit_file( dk_dir ), load_samples ); } Drumkit* Drumkit::load_file( const QString& dk_path, bool load_samples ) { XMLDoc doc; if( !doc.read( dk_path, Filesystem::drumkit_xsd() ) ) { return Legacy::load_drumkit( dk_path ); } XMLNode root = doc.firstChildElement( "drumkit_info" ); if ( root.isNull() ) { ERRORLOG( "drumkit_info node not found" ); return 0; } Drumkit* drumkit = Drumkit::load_from( &root, dk_path.left( dk_path.lastIndexOf( "/" ) ) ); if( load_samples ) drumkit->load_samples(); return drumkit; } Drumkit* Drumkit::load_from( XMLNode* node, const QString& dk_path ) { QString drumkit_name = node->read_string( "name", "", false, false ); if ( drumkit_name.isEmpty() ) { ERRORLOG( "Drumkit has no name, abort" ); return 0; } Drumkit* drumkit = new Drumkit(); drumkit->__path = dk_path; drumkit->__name = drumkit_name; drumkit->__author = node->read_string( "author", "undefined author" ); drumkit->__info = node->read_string( "info", "No information available." ); drumkit->__license = node->read_string( "license", "undefined license" ); XMLNode instruments_node = node->firstChildElement( "instrumentList" ); if ( instruments_node.isNull() ) { WARNINGLOG( "instrumentList node not found" ); drumkit->set_instruments( new InstrumentList() ); } else { drumkit->set_instruments( InstrumentList::load_from( &instruments_node, dk_path, drumkit_name ) ); } return drumkit; } void Drumkit::load_samples( ) { INFOLOG( QString( "Loading drumkit %1 instrument samples" ).arg( __name ) ); if( !__samples_loaded ) { __instruments->load_samples(); __samples_loaded = true; } } void Drumkit::unload_samples( ) { INFOLOG( QString( "Unloading drumkit %1 instrument samples" ).arg( __name ) ); if( __samples_loaded ) { __instruments->unload_samples(); __samples_loaded = false; } } bool Drumkit::save( const QString& name, const QString& author, const QString& info, const QString& license, InstrumentList* instruments, bool overwrite ) { Drumkit* drumkit = new Drumkit(); drumkit->set_name( name ); drumkit->set_author( author ); drumkit->set_info( info ); drumkit->set_license( license ); drumkit->set_instruments( new InstrumentList( instruments ) ); // FIXME: why must we do that ? there is something weird with updateInstrumentLines bool ret = drumkit->save( overwrite ); delete drumkit; return ret; } bool Drumkit::save( bool overwrite ) { return save( QString( Filesystem::usr_drumkits_dir() + "/" + __name ), overwrite ); } bool Drumkit::save( const QString& dk_dir, bool overwrite ) { INFOLOG( QString( "Saving drumkit %1 into %2" ).arg( __name ).arg( dk_dir ) ); if( !Filesystem::mkdir( dk_dir ) ) { return false; } bool ret = save_samples( dk_dir, overwrite ); if ( ret ) { ret = save_file( Filesystem::drumkit_file( dk_dir ), overwrite ); } return ret; } bool Drumkit::save_file( const QString& dk_path, bool overwrite ) { INFOLOG( QString( "Saving drumkit definition into %1" ).arg( dk_path ) ); if( Filesystem::file_exists( dk_path, true ) && !overwrite ) { ERRORLOG( QString( "drumkit %1 already exists" ).arg( dk_path ) ); return false; } XMLDoc doc; doc.set_root( "drumkit_info", "drumkit" ); XMLNode root = doc.firstChildElement( "drumkit_info" ); save_to( &root ); return doc.write( dk_path ); } void Drumkit::save_to( XMLNode* node ) { node->write_string( "name", __name ); node->write_string( "author", __author ); node->write_string( "info", __info ); node->write_string( "license", __license ); __instruments->save_to( node ); } bool Drumkit::save_samples( const QString& dk_dir, bool overwrite ) { INFOLOG( QString( "Saving drumkit %1 samples into %2" ).arg( __name ).arg( dk_dir ) ); if( !Filesystem::mkdir( dk_dir ) ) { return false; } InstrumentList* instruments = get_instruments(); for( int i=0; isize(); i++ ) { Instrument* instrument = ( *instruments )[i]; for ( int n = 0; n < MAX_LAYERS; n++ ) { InstrumentLayer* layer = instrument->get_layer( n ); if( layer ) { QString src = layer->get_sample()->get_filepath(); QString dst = dk_dir + "/" + layer->get_sample()->get_filename(); //if a file with the filename already exists, try to rename it to filename_1 etc. int tries = 1; while( Filesystem::file_exists( dst )){ QString new_name = dst; int insertPosition = new_name.length(); if( new_name.lastIndexOf(".") > 0 ) insertPosition = new_name.lastIndexOf("."); new_name.insert( insertPosition, QString("_%1").arg(tries) ); tries++; dst = new_name; } if( dst != layer->get_sample()->get_filename() ) layer->get_sample()->set_filename( dst ); if( !Filesystem::file_copy( src, dst ) ) { return false; } } } } return true; } void Drumkit::set_instruments( InstrumentList* instruments ) { if( __instruments!=0 ) delete __instruments; __instruments = instruments; } bool Drumkit::remove( const QString& dk_name ) { QString dk_dir = Filesystem::drumkit_path_search( dk_name ); if( !Filesystem::drumkit_valid( dk_dir ) ) { ERRORLOG( QString( "%1 is not valid drumkit" ).arg( dk_dir ) ); return false; } _INFOLOG( QString( "Removing drumkit: %1" ).arg( dk_dir ) ); if( !Filesystem::rm( dk_dir, true ) ) { _ERRORLOG( QString( "Unable to remove drumkit: %1" ).arg( dk_dir ) ); return false; } return true; } void Drumkit::dump() { DEBUGLOG( "Drumkit dump" ); DEBUGLOG( " |- Path = " + __path ); DEBUGLOG( " |- Name = " + __name ); DEBUGLOG( " |- Author = " + __author ); DEBUGLOG( " |- Info = " + __info ); DEBUGLOG( " |- Instrument list" ); for ( int i=0; i<__instruments->size(); i++ ) { Instrument* instrument = ( *__instruments )[i]; DEBUGLOG( QString( " |- (%1 of %2) Name = %3" ) .arg( i ) .arg( __instruments->size()-1 ) .arg( instrument->get_name() ) ); for ( int j=0; jget_layer( j ); if ( layer ) { Sample* sample = layer->get_sample(); if ( sample ) { DEBUGLOG( QString( " |- %1 [%2]" ).arg( sample->get_filepath() ).arg( sample->is_empty() ) ); } else { DEBUGLOG( " |- NULL sample" ); } } } } } bool Drumkit::install( const QString& path ) { _INFOLOG( QString( "Install drumkit %1" ).arg( path ) ); #ifdef H2CORE_HAVE_LIBARCHIVE int r; struct archive* arch; struct archive_entry* entry; char newpath[1024]; arch = archive_read_new(); archive_read_support_compression_all( arch ); archive_read_support_format_all( arch ); if ( ( r = archive_read_open_file( arch, path.toLocal8Bit(), 10240 ) ) ) { _ERRORLOG( QString( "archive_read_open_file() [%1] %2" ).arg( archive_errno( arch ) ).arg( archive_error_string( arch ) ) ); archive_read_close( arch ); archive_read_finish( arch ); return false; } bool ret = true; QString dk_dir = Filesystem::usr_drumkits_dir() + "/"; while ( ( r = archive_read_next_header( arch, &entry ) ) != ARCHIVE_EOF ) { if ( r != ARCHIVE_OK ) { _ERRORLOG( QString( "archive_read_next_header() [%1] %2" ).arg( archive_errno( arch ) ).arg( archive_error_string( arch ) ) ); ret = false; break; } QString np = dk_dir + archive_entry_pathname( entry ); strncpy( newpath, np.toLocal8Bit(), 1024 ); archive_entry_set_pathname( entry, newpath ); r = archive_read_extract( arch, entry, 0 ); if ( r == ARCHIVE_WARN ) { _WARNINGLOG( QString( "archive_read_extract() [%1] %2" ).arg( archive_errno( arch ) ).arg( archive_error_string( arch ) ) ); } else if ( r != ARCHIVE_OK ) { _ERRORLOG( QString( "archive_read_extract() [%1] %2" ).arg( archive_errno( arch ) ).arg( archive_error_string( arch ) ) ); ret = false; break; } } archive_read_close( arch ); archive_read_finish( arch ); return ret; #else // H2CORE_HAVE_LIBARCHIVE #ifndef WIN32 // GUNZIP QString gzd_name = path.left( path.indexOf( "." ) ) + ".tar"; FILE* gzd_file = fopen( gzd_name.toLocal8Bit(), "wb" ); gzFile gzip_file = gzopen( path.toLocal8Bit(), "rb" ); if ( !gzip_file ) { _ERRORLOG( QString( "Error reading drumkit file: %1" ).arg( path ) ); gzclose( gzip_file ); fclose( gzd_file ); return false; } uchar buf[4096]; while ( gzread( gzip_file, buf, 4096 ) > 0 ) { fwrite( buf, sizeof( uchar ), 4096, gzd_file ); } gzclose( gzip_file ); fclose( gzd_file ); // UNTAR TAR* tar_file; char tar_path[1024]; strncpy( tar_path, gzd_name.toLocal8Bit(), 1024 ); if ( tar_open( &tar_file, tar_path, NULL, O_RDONLY, 0, TAR_GNU ) == -1 ) { _ERRORLOG( QString( "tar_open(): %1" ).arg( QString::fromLocal8Bit( strerror( errno ) ) ) ); return false; } bool ret = true; char dst_dir[1024]; QString dk_dir = Filesystem::usr_drumkits_dir() + "/"; strncpy( dst_dir, dk_dir.toLocal8Bit(), 1024 ); if ( tar_extract_all( tar_file, dst_dir ) != 0 ) { _ERRORLOG( QString( "tar_extract_all(): %1" ).arg( QString::fromLocal8Bit( strerror( errno ) ) ) ); ret = false; } if ( tar_close( tar_file ) != 0 ) { _ERRORLOG( QString( "tar_close(): %1" ).arg( QString::fromLocal8Bit( strerror( errno ) ) ) ); ret = false; } return ret; #else // WIN32 _ERRORLOG( "WIN32 NOT IMPLEMENTED" ); return false; #endif #endif } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/basics/exponential_tables.h000066400000000000000000004513631211146647700241710ustar00rootroot00000000000000 #ifndef H2C_EXPONENTIAL_TABLES_H #define H2C_EXPONENTIAL_TABLES_H static inline float compute_exponant( const float input, const float* table, const int table_size ) { int idx = ( int )( input * table_size ); if ( idx < 0 ) { idx = 0; } else if ( idx >= table_size ) { idx = table_size-1; } return ( table[idx] * input ) / ( ( float )(idx+1) / ( float )table_size ); }; static int concave_exponant_table_size = 4096; static float concave_exponant_table[4096] = { 1.5156104658808E-10, 9.9740596827554E-10, 3.0028776133939E-09, 6.5638149639822E-09, 1.2038851488192E-08, 1.9761595218725E-08, 3.0047077767325E-08, 4.3195717944104E-08, 5.9495986363365E-08, 7.9226309106588E-08, 1.02656489298E-07, 1.3004880513507E-07, 1.6165888092569E-07, 1.9773639315002E-07, 2.3852565311928E-07, 2.8426609509032E-07, 3.3519269046365E-07, 3.9153630318046E-07, 4.5352399763331E-07, 5.213793077196E-07, 5.9532247372657E-07, 6.7557065230827E-07, 7.6233810374495E-07, 8.5583635986203E-07, 9.5627437535876E-07, 1.0638586648075E-06, 1.1787934271983E-06, 1.3012806595954E-06, 1.4315202612247E-06, 1.5697101291111E-06, 1.7160462462169E-06, 1.8707227629012E-06, 2.0339320724036E-06, 2.2058648809638E-06, 2.3867102731093E-06, 2.5766557725752E-06, 2.7758873992656E-06, 2.9845897226155E-06, 3.2029459116722E-06, 3.4311377821785E-06, 3.6693458409091E-06, 3.9177493274853E-06, 4.1765262538692E-06, 4.4458534417183E-06, 4.7259065577629E-06, 5.0168601473543E-06, 5.3188876663161E-06, 5.6321615112198E-06, 5.956853048194E-06, 6.2931326403679E-06, 6.64116967404E-06, 7.0011325836549E-06, 7.3731888756662E-06, 7.7575051513535E-06, 8.154247128661E-06, 8.5635796631137E-06, 8.9856667678688E-06, 9.420671632952E-06, 9.8687566437245E-06, 1.0330083398626E-05, 1.0804812726233E-05, 1.1293104701668E-05, 1.1795118662398E-05, 1.2311013223455E-05, 1.2840946292098E-05, 1.3385075081963E-05, 1.3943556126712E-05, 1.4516545293213E-05, 1.5104197794269E-05, 1.5706668200924E-05, 1.6324110454361E-05, 1.6956677877416E-05, 1.7604523185716E-05, 1.826779849847E-05, 1.8946655348926E-05, 1.9641244694497E-05, 2.0351716926584E-05, 2.1078221880112E-05, 2.182090884277E-05, 2.2579926563991E-05, 2.3355423263671E-05, 2.4147546640639E-05, 2.4956443880884E-05, 2.5782261665568E-05, 2.6625146178798E-05, 2.7485243115207E-05, 2.8362697687318E-05, 2.9257654632723E-05, 3.0170258221064E-05, 3.1100652260842E-05, 3.2048980106047E-05, 3.301538466262E-05, 3.4000008394759E-05, 3.5002993331058E-05, 3.6024481070506E-05, 3.7064612788337E-05, 3.8123529241735E-05, 3.9201370775412E-05, 4.029827732705E-05, 4.1414388432615E-05, 4.2549843231552E-05, 4.3704780471863E-05, 4.4879338515063E-05, 4.6073655341034E-05, 4.7287868552767E-05, 4.8522115381001E-05, 4.9776532688759E-05, 5.1051256975792E-05, 5.2346424382923E-05, 5.3662170696303E-05, 5.4998631351575E-05, 5.6355941437951E-05, 5.7734235702213E-05, 5.9133648552623E-05, 6.0554314062759E-05, 6.1996365975273E-05, 6.3459937705577E-05, 6.4945162345451E-05, 6.6452172666588E-05, 6.7981101124065E-05, 6.9532079859749E-05, 7.1105240705638E-05, 7.2700715187144E-05, 7.4318634526304E-05, 7.5959129644943E-05, 7.7622331167772E-05, 7.9308369425429E-05, 8.1017374457472E-05, 8.2749476015308E-05, 8.450480356508E-05, 8.6283486290497E-05, 8.8085653095613E-05, 8.9911432607564E-05, 9.1760953179253E-05, 9.363434289199E-05, 9.5531729558084E-05, 9.7453240723402E-05, 9.9399003669869E-05, 0.00010136914541794, 0.00010336379272903, 0.00010538307210788, 0.00010742710980493, 0.00010949603181864, 0.00011158996389769, 0.00011370903154331, 0.00011585336001143, 0.00011802307431483, 0.00012021829922532, 0.00012243915927582, 0.00012468577876239, 0.00012695828174634, 0.00012925679205617, 0.00013158143328955, 0.00013393232881532, 0.00013630960177533, 0.0001387133750864, 0.0001411437714421, 0.00014360091331466, 0.00014608492295674, 0.00014859592240318, 0.00015113403347283, 0.00015369937777019, 0.00015629207668719, 0.00015891225140483, 0.00016156002289484, 0.00016423551192134, 0.0001669388390424, 0.00016967012461169, 0.00017242948878002, 0.00017521705149686, 0.00017803293251191, 0.00018087725137658, 0.0001837501274455, 0.00018665167987795, 0.00018958202763931, 0.00019254128950253, 0.00019552958404948, 0.00019854702967239, 0.0002015937445752, 0.00020466984677489, 0.00020777545410288, 0.00021091068420629, 0.00021407565454928, 0.00021727048241431, 0.00022049528490343, 0.00022375017893956, 0.00022703528126767, 0.00023035070845605, 0.00023369657689752, 0.00023707300281058, 0.00024048010224068, 0.00024391799106127, 0.00024738678497506, 0.00025088659951509, 0.0002544175500459, 0.00025797975176461, 0.00026157331970202, 0.00026519836872374, 0.0002688550135312, 0.00027254336866277, 0.00027626354849477, 0.00028001566724253, 0.00028379983896141, 0.0002876161775478, 0.00029146479674014, 0.00029534581011993, 0.00029925933111265, 0.0003032054729888, 0.0003071843488648, 0.000311196071704, 0.00031524075431755, 0.00031931850936538, 0.0003234294493571, 0.0003275736866529, 0.00033175133346446, 0.00033596250185584, 0.00034020730374436, 0.00034448585090146, 0.00034879825495356, 0.00035314462738292, 0.00035752507952849, 0.00036193972258674, 0.00036638866761246, 0.00037087202551964, 0.00037538990708219, 0.00037994242293482, 0.0003845296835738, 0.00038915179935773, 0.00039380888050836, 0.00039850103711131, 0.00040322837911686, 0.0004079910163407, 0.00041278905846467, 0.0004176226150375, 0.00042249179547557, 0.00042739670906357, 0.00043233746495528, 0.00043731417217426, 0.00044232693961454, 0.00044737587604133, 0.00045246109009173, 0.00045758269027536, 0.00046274078497509, 0.00046793548244769, 0.00047316689082449, 0.00047843511811206, 0.00048374027219282, 0.00048908246082574, 0.00049446179164693, 0.00049987837217032, 0.00050533230978826, 0.00051082371177214, 0.00051635268527304, 0.00052191933732228, 0.00052752377483211, 0.00053316610459623, 0.00053884643329044, 0.00054456486747321, 0.00055032151358626, 0.00055611647795516, 0.00056194986678986, 0.00056782178618532, 0.00057373234212203, 0.00057968164046658, 0.00058566978697224, 0.00059169688727947, 0.00059776304691649, 0.0006038683712998, 0.00061001296573476, 0.00061619693541606, 0.00062242038542831, 0.00062868342074651, 0.00063498614623659, 0.00064132866665593, 0.00064771108665387, 0.00065413351077218, 0.00066059604344562, 0.00066709878900238, 0.00067364185166462, 0.00068022533554893, 0.0006868493446668, 0.00069351398292516, 0.00070021935412679, 0.00070696556197084, 0.00071375271005326, 0.00072058090186731, 0.00072745024080399, 0.0007343608301525, 0.00074131277310071, 0.0007483061727356, 0.0007553411320437, 0.00076241775391155, 0.00076953614112613, 0.00077669639637532, 0.00078389862224827, 0.00079114292123592, 0.00079842939573135, 0.00080575814803024, 0.00081312928033128, 0.0008205428947366, 0.00082799909325218, 0.00083549797778822, 0.00084303965015963, 0.00085062421208635, 0.0008582517651938, 0.00086592241101328, 0.00087363625098232, 0.00088139338644514, 0.00088919391865298, 0.00089703794876453, 0.00090492557784626, 0.00091285690687288, 0.00092083203672763, 0.00092885106820274, 0.00093691410199974, 0.00094502123872984, 0.00095317257891433, 0.00096136822298491, 0.00096960827128409, 0.00097789282406548, 0.00098622198149424, 0.00099459584364735, 0.001003014510514, 0.001011478081996, 0.001019986657908, 0.0010285403379778, 0.0010371392218471, 0.0010457834090712, 0.0010544729991198, 0.0010632080913772, 0.0010719887851427, 0.0010808151796308, 0.0010896873739715, 0.0010986054672109, 0.0011075695583113, 0.0011165797461514, 0.0011256361295269, 0.0011347388071508, 0.0011438878776535, 0.0011530834395831, 0.0011623255914062, 0.0011716144315074, 0.0011809500581905, 0.001190332569678, 0.0011997620641119, 0.0012092386395539, 0.0012187623939855, 0.0012283334253088, 0.0012379518313459, 0.0012476177098403, 0.0012573311584563, 0.0012670922747797, 0.001276901156318, 0.0012867579005008, 0.0012966626046798, 0.0013066153661293, 0.0013166162820465, 0.0013266654495518, 0.0013367629656887, 0.0013469089274247, 0.001357103431651, 0.0013673465751831, 0.0013776384547609, 0.0013879791670492, 0.0013983688086377, 0.0014088074760413, 0.0014192952657007, 0.001429832273982, 0.0014404185971777, 0.0014510543315065, 0.0014617395731136, 0.0014724744180711, 0.0014832589623782, 0.0014940933019612, 0.0015049775326744, 0.0015159117502995, 0.0015268960505465, 0.0015379305290537, 0.0015490152813879, 0.0015601504030447, 0.0015713359894489, 0.0015825721359542, 0.0015938589378443, 0.0016051964903323, 0.0016165848885615, 0.0016280242276053, 0.0016395146024676, 0.001651056108083, 0.001662648839317, 0.0016742928909662, 0.0016859883577586, 0.001697735334354, 0.0017095339153436, 0.0017213841952511, 0.0017332862685321, 0.0017452402295748, 0.0017572461727003, 0.0017693041921624, 0.0017814143821481, 0.0017935768367776, 0.0018057916501051, 0.0018180589161181, 0.0018303787287384, 0.0018427511818219, 0.0018551763691589, 0.0018676543844743, 0.0018801853214278, 0.0018927692736144, 0.001905406334564, 0.0019180965977421, 0.0019308401565498, 0.0019436371043241, 0.0019564875343379, 0.0019693915398006, 0.0019823492138579, 0.0019953606495919, 0.002008425940022, 0.0020215451781044, 0.0020347184567323, 0.0020479458687367, 0.0020612275068859, 0.0020745634638863, 0.002087953832382, 0.0021013987049554, 0.0021148981741272, 0.0021284523323568, 0.0021420612720421, 0.0021557250855201, 0.0021694438650669, 0.0021832177028978, 0.0021970466911675, 0.0022109309219705, 0.002224870487341, 0.0022388654792533, 0.0022529159896218, 0.0022670221103013, 0.0022811839330872, 0.0022954015497153, 0.0023096750518628, 0.0023240045311475, 0.0023383900791285, 0.0023528317873066, 0.0023673297471238, 0.002381884049964, 0.0023964947871529, 0.0024111620499586, 0.002425885929591, 0.0024406665172026, 0.0024555039038886, 0.0024703981806867, 0.0024853494385776, 0.0025003577684852, 0.0025154232612763, 0.0025305460077614, 0.0025457260986943, 0.0025609636247727, 0.0025762586766381, 0.0025916113448759, 0.0026070217200159, 0.0026224898925319, 0.0026380159528426, 0.002653599991311, 0.0026692420982451, 0.0026849423638977, 0.0027007008784668, 0.0027165177320956, 0.0027323930148728, 0.0027483268168326, 0.0027643192279548, 0.0027803703381652, 0.0027964802373355, 0.0028126490152836, 0.0028288767617737, 0.0028451635665164, 0.0028615095191689, 0.0028779147093352, 0.002894379226566, 0.0029109031603591, 0.0029274866001596, 0.0029441296353598, 0.0029608323552992, 0.0029775948492654, 0.0029944172064931, 0.0030112995161654, 0.0030282418674131, 0.0030452443493152, 0.003062307050899, 0.0030794300611402, 0.0030966134689631, 0.0031138573632404, 0.0031311618327941, 0.0031485269663946, 0.0031659528527619, 0.0031834395805649, 0.0032009872384219, 0.0032185959149007, 0.0032362656985186, 0.0032539966777429, 0.0032717889409905, 0.0032896425766285, 0.003307557672974, 0.0033255343182943, 0.0033435726008072, 0.0033616726086811, 0.0033798344300347, 0.0033980581529378, 0.0034163438654109, 0.0034346916554256, 0.0034531016109044, 0.0034715738197215, 0.0034901083697021, 0.0035087053486229, 0.0035273648442125, 0.003546086944151, 0.0035648717360705, 0.003583719307555, 0.0036026297461406, 0.0036216031393156, 0.0036406395745208, 0.0036597391391493, 0.0036789019205468, 0.0036981280060118, 0.0037174174827953, 0.0037367704381017, 0.0037561869590881, 0.0037756671328647, 0.0037952110464953, 0.0038148187869968, 0.0038344904413397, 0.0038542260964481, 0.0038740258391998, 0.0038938897564264, 0.0039138179349135, 0.0039338104614009, 0.0039538674225822, 0.0039739889051057, 0.0039941749955737, 0.0040144257805432, 0.0040347413465258, 0.0040551217799877, 0.0040755671673502, 0.0040960775949892, 0.0041166531492357, 0.0041372939163759, 0.0041579999826514, 0.0041787714342588, 0.0041996083573505, 0.0042205108380342, 0.0042414789623735, 0.0042625128163874, 0.0042836124860512, 0.004304778057296, 0.0043260096160088, 0.0043473072480331, 0.0043686710391684, 0.0043901010751708, 0.0044115974417526, 0.0044331602245831, 0.0044547895092878, 0.0044764853814494, 0.0044982479266072, 0.0045200772302576, 0.0045419733778541, 0.0045639364548072, 0.004585966546485, 0.0046080637382126, 0.0046302281152729, 0.004652459762906, 0.00467475876631, 0.0046971252106406, 0.0047195591810113, 0.0047420607624937, 0.0047646300401172, 0.0047872670988696, 0.0048099720236968, 0.0048327448995029, 0.0048555858111506, 0.0048784948434611, 0.0049014720812141, 0.0049245176091479, 0.0049476315119599, 0.004970813874306, 0.0049940647808013, 0.0050173843160198, 0.0050407725644949, 0.005064229610719, 0.0050877555391437, 0.0051113504341804, 0.0051350143801997, 0.0051587474615319, 0.0051825497624669, 0.0052064213672545, 0.0052303623601041, 0.0052543728251853, 0.0052784528466277, 0.0053026025085207, 0.0053268218949143, 0.0053511110898186, 0.005375470177204, 0.0053998992410014, 0.0054243983651023, 0.0054489676333588, 0.0054736071295836, 0.0054983169375503, 0.0055230971409934, 0.0055479478236082, 0.0055728690690511, 0.0055978609609397, 0.0056229235828528, 0.0056480570183303, 0.0056732613508737, 0.0056985366639457, 0.0057238830409708, 0.005749300565335, 0.0057747893203858, 0.0058003493894327, 0.0058259808557469, 0.0058516838025617, 0.0058774583130723, 0.0059033044704359, 0.005929222357772, 0.0059552120581623, 0.0059812736546507, 0.0060074072302437, 0.0060336128679101, 0.0060598906505814, 0.0060862406611516, 0.0061126629824775, 0.0061391576973785, 0.0061657248886372, 0.0061923646389988, 0.0062190770311716, 0.0062458621478271, 0.0062727200715997, 0.0062996508850874, 0.0063266546708512, 0.0063537315114156, 0.0063808814892685, 0.0064081046868615, 0.0064354011866095, 0.0064627710708913, 0.0064902144220494, 0.00651773132239, 0.0065453218541835, 0.0065729860996639, 0.0066007241410294, 0.0066285360604423, 0.0066564219400292, 0.0066843818618806, 0.0067124159080517, 0.0067405241605619, 0.0067687067013951, 0.0067969636124997, 0.0068252949757887, 0.0068537008731398, 0.0068821813863954, 0.0069107365973627, 0.006939366587814, 0.0069680714394861, 0.0069968512340812, 0.0070257060532664, 0.007054635978674, 0.0070836410919015, 0.0071127214745117, 0.0071418772080328, 0.0071711083739583, 0.0072004150537472, 0.0072297973288241, 0.0072592552805793, 0.0072887889903685, 0.0073183985395136, 0.0073480840093018, 0.0073778454809866, 0.0074076830357872, 0.0074375967548889, 0.007467586719443, 0.0074976530105671, 0.0075277957093448, 0.0075580148968261, 0.0075883106540273, 0.0076186830619311, 0.0076491322014865, 0.0076796581536093, 0.0077102609991818, 0.0077409408190527, 0.0077716976940377, 0.0078025317049192, 0.0078334429324463, 0.0078644314573351, 0.0078954973602688, 0.0079266407218972, 0.0079578616228377, 0.0079891601436744, 0.0080205363649589, 0.0080519903672099, 0.0080835222309134, 0.008115132036523, 0.0081468198644594, 0.0081785857951111, 0.008210429908834, 0.0082423522859517, 0.0082743530067554, 0.0083064321515042, 0.0083385898004248, 0.0083708260337119, 0.0084031409315279, 0.0084355345740035, 0.0084680070412373, 0.0085005584132957, 0.0085331887702138, 0.0085658981919944, 0.0085986867586089, 0.0086315545499967, 0.008664501646066, 0.008697528126693, 0.0087306340717227, 0.0087638195609685, 0.0087970846742124, 0.0088304294912051, 0.0088638540916661, 0.0088973585552834, 0.0089309429617142, 0.0089646073905843, 0.0089983519214885, 0.0090321766339906, 0.0090660816076236, 0.0091000669218893, 0.0091341326562588, 0.0091682788901726, 0.0092025057030402, 0.0092368131742405, 0.0092712013831217, 0.0093056704090017, 0.0093402203311676, 0.0093748512288761, 0.0094095631813535, 0.0094443562677958, 0.0094792305673686, 0.0095141861592073, 0.0095492231224171, 0.009584341536073, 0.0096195414792199, 0.0096548230308728, 0.0096901862700164, 0.0097256312756059, 0.0097611581265662, 0.0097967669017925, 0.0098324576801504, 0.0098682305404754, 0.0099040855615735, 0.0099400228222213, 0.0099760424011654, 0.010012144377123, 0.010048328828782, 0.010084595834801, 0.010120945473808, 0.010157377824404, 0.010193892965158, 0.010230490974612, 0.010267171931278, 0.010303935913638, 0.010340783000146, 0.010377713269227, 0.010414726799276, 0.010451823668661, 0.010489003955718, 0.010526267738758, 0.010563615096059, 0.010601046105874, 0.010638560846426, 0.010676159395908, 0.010713841832486, 0.010751608234296, 0.010789458679448, 0.010827393246022, 0.010865412012068, 0.01090351505561, 0.010941702454643, 0.010979974287134, 0.01101833063102, 0.011056771564213, 0.011095297164593, 0.011133907510016, 0.011172602678306, 0.011211382747263, 0.011250247794655, 0.011289197898225, 0.011328233135688, 0.011367353584728, 0.011406559323006, 0.011445850428153, 0.01148522697777, 0.011524689049434, 0.011564236720693, 0.011603870069068, 0.011643589172051, 0.011683394107107, 0.011723284951676, 0.011763261783167, 0.011803324678964, 0.011843473716424, 0.011883708972874, 0.011924030525617, 0.011964438451927, 0.012004932829052, 0.012045513734212, 0.0120861812446, 0.012126935437383, 0.012167776389701, 0.012208704178665, 0.012249718881362, 0.01229082057485, 0.012332009336161, 0.012373285242302, 0.01241464837025, 0.012456098796958, 0.012497636599352, 0.012539261854329, 0.012580974638763, 0.0126227750295, 0.012664663103359, 0.012706638937133, 0.01274870260759, 0.012790854191469, 0.012833093765485, 0.012875421406326, 0.012917837190653, 0.012960341195103, 0.013002933496285, 0.013045614170783, 0.013088383295153, 0.013131240945928, 0.013174187199613, 0.013217222132688, 0.013260345821607, 0.013303558342797, 0.013346859772661, 0.013390250187575, 0.013433729663891, 0.013477298277932, 0.013520956106, 0.013564703224366, 0.013608539709281, 0.013652465636967, 0.013696481083621, 0.013740586125415, 0.013784780838495, 0.013829065298984, 0.013873439582976, 0.013917903766543, 0.01396245792573, 0.014007102136556, 0.014051836475018, 0.014096661017084, 0.0141415758387, 0.014186581015785, 0.014231676624235, 0.014276862739919, 0.014322139438681, 0.014367506796342, 0.014412964888697, 0.014458513791516, 0.014504153580545, 0.014549884331504, 0.014595706120089, 0.014641619021971, 0.014687623112798, 0.014733718468191, 0.014779905163748, 0.014826183275042, 0.014872552877621, 0.01491901404701, 0.014965566858707, 0.015012211388188, 0.015058947710905, 0.015105775902283, 0.015152696037724, 0.015199708192608, 0.015246812442286, 0.015294008862091, 0.015341297527325, 0.015388678513272, 0.015436151895189, 0.015483717748308, 0.015531376147839, 0.015579127168967, 0.015626970886854, 0.015674907376637, 0.01572293671343, 0.015771058972322, 0.01581927422838, 0.015867582556647, 0.015915984032139, 0.015964478729853, 0.016013066724759, 0.016061748091805, 0.016110522905915, 0.01615939124199, 0.016208353174906, 0.016257408779517, 0.016306558130653, 0.01635580130312, 0.016405138371701, 0.016454569411157, 0.016504094496223, 0.016553713701614, 0.016603427102018, 0.016653234772103, 0.016703136786512, 0.016753133219866, 0.016803224146762, 0.016853409641773, 0.016903689779452, 0.016954064634326, 0.0170045342809, 0.017055098793657, 0.017105758247056, 0.017156512715532, 0.0172073622735, 0.01725830699535, 0.017309346955449, 0.017360482228144, 0.017411712887755, 0.017463039008584, 0.017514460664906, 0.017565977930976, 0.017617590881026, 0.017669299589265, 0.017721104129879, 0.017773004577032, 0.017825001004866, 0.0178770934875, 0.01792928209903, 0.017981566913532, 0.018033948005056, 0.018086425447632, 0.018138999315268, 0.018191669681949, 0.018244436621637, 0.018297300208273, 0.018350260515775, 0.018403317618039, 0.01845647158894, 0.01850972250233, 0.018563070432038, 0.018616515451873, 0.018670057635619, 0.018723697057042, 0.018777433789883, 0.018831267907863, 0.018885199484679, 0.018939228594008, 0.018993355309505, 0.019047579704801, 0.019101901853509, 0.019156321829217, 0.019210839705493, 0.019265455555883, 0.019320169453911, 0.01937498147308, 0.01942989168687, 0.019484900168741, 0.019540006992132, 0.019595212230457, 0.019650515957114, 0.019705918245474, 0.019761419168889, 0.019817018800692, 0.01987271721419, 0.019928514482673, 0.019984410679406, 0.020040405877635, 0.020096500150584, 0.020152693571457, 0.020208986213434, 0.020265378149677, 0.020321869453325, 0.020378460197496, 0.020435150455288, 0.020491940299777, 0.020548829804018, 0.020605819041044, 0.020662908083871, 0.020720097005489, 0.02077738587887, 0.020834774776964, 0.020892263772702, 0.020949852938992, 0.021007542348721, 0.021065332074758, 0.021123222189948, 0.021181212767117, 0.021239303879071, 0.021297495598593, 0.021355787998447, 0.021414181151377, 0.021472675130105, 0.021531270007332, 0.02158996585574, 0.021648762747991, 0.021707660756723, 0.021766659954558, 0.021825760414095, 0.021884962207912, 0.021944265408569, 0.022003670088604, 0.022063176320534, 0.022122784176858, 0.022182493730053, 0.022242305052575, 0.022302218216863, 0.022362233295333, 0.02242235036038, 0.022482569484383, 0.022542890739696, 0.022603314198656, 0.02266383993358, 0.022724468016762, 0.02278519852048, 0.02284603151699, 0.022906967078526, 0.022968005277307, 0.023029146185526, 0.023090389875362, 0.02315173641897, 0.023213185888487, 0.02327473835603, 0.023336393893695, 0.02339815257356, 0.023460014467682, 0.023521979648099, 0.023584048186829, 0.02364622015587, 0.023708495627201, 0.023770874672781, 0.023833357364549, 0.023895943774425, 0.02395863397431, 0.024021428036083, 0.024084326031608, 0.024147328032724, 0.024210434111256, 0.024273644339004, 0.024336958787754, 0.024400377529269, 0.024463900635293, 0.024527528177553, 0.024591260227754, 0.024655096857582, 0.024719038138707, 0.024783084142775, 0.024847234941416, 0.02491149060624, 0.024975851208838, 0.02504031682078, 0.025104887513619, 0.02516956335889, 0.025234344428105, 0.02529923079276, 0.025364222524331, 0.025429319694275, 0.025494522374031, 0.025559830635017, 0.025625244548635, 0.025690764186264, 0.025756389619267, 0.025822120918989, 0.025887958156753, 0.025953901403865, 0.026019950731614, 0.026086106211265, 0.026152367914071, 0.02621873591126, 0.026285210274045, 0.026351791073619, 0.026418478381158, 0.026485272267816, 0.026552172804732, 0.026619180063024, 0.026686294113793, 0.02675351502812, 0.026820842877068, 0.026888277731681, 0.026955819662987, 0.027023468741991, 0.027091225039685, 0.027159088627038, 0.027227059575002, 0.027295137954512, 0.027363323836483, 0.027431617291813, 0.02750001839138, 0.027568527206045, 0.02763714380665, 0.027705868264019, 0.027774700648959, 0.027843641032256, 0.027912689484681, 0.027981846076984, 0.028051110879898, 0.028120483964139, 0.028189965400404, 0.028259555259371, 0.028329253611701, 0.028399060528036, 0.028468976079001, 0.028539000335204, 0.028609133367232, 0.028679375245656, 0.028749726041029, 0.028820185823886, 0.028890754664744, 0.028961432634102, 0.02903221980244, 0.029103116240224, 0.029174122017897, 0.029245237205887, 0.029316461874606, 0.029387796094444, 0.029459239935777, 0.029530793468961, 0.029602456764335, 0.02967422989222, 0.029746112922921, 0.029818105926724, 0.029890208973896, 0.029962422134689, 0.030034745479337, 0.030107179078054, 0.03017972300104, 0.030252377318474, 0.030325142100521, 0.030398017417326, 0.030471003339016, 0.030544099935704, 0.030617307277483, 0.030690625434428, 0.030764054476598, 0.030837594474034, 0.030911245496762, 0.030985007614786, 0.031058880898097, 0.031132865416667, 0.03120696124045, 0.031281168439385, 0.03135548708339, 0.031429917242371, 0.031504458986212, 0.031579112384782, 0.031653877507934, 0.031728754425501, 0.031803743207302, 0.031878843923136, 0.031954056642787, 0.03202938143602, 0.032104818372586, 0.032180367522217, 0.032256028954627, 0.032331802739515, 0.032407688946563, 0.032483687645434, 0.032559798905776, 0.032636022797219, 0.032712359389378, 0.032788808751848, 0.032865370954211, 0.032942046066029, 0.033018834156848, 0.033095735296198, 0.033172749553592, 0.033249876998526, 0.033327117700479, 0.033404471728913, 0.033481939153275, 0.033559520042993, 0.033637214467481, 0.033715022496134, 0.033792944198332, 0.033870979643437, 0.033949128900795, 0.034027392039735, 0.034105769129572, 0.034184260239601, 0.034262865439101, 0.034341584797338, 0.034420418383557, 0.034499366266989, 0.034578428516847, 0.034657605202331, 0.034736896392621, 0.034816302156881, 0.034895822564261, 0.034975457683891, 0.035055207584889, 0.035135072336354, 0.035215052007368, 0.035295146666999, 0.035375356384296, 0.035455681228296, 0.035536121268014, 0.035616676572455, 0.035697347210602, 0.035778133251427, 0.035859034763881, 0.035940051816903, 0.036021184479413, 0.036102432820316, 0.036183796908501, 0.036265276812842, 0.036346872602194, 0.036428584345399, 0.036510412111281, 0.036592355968649, 0.036674415986295, 0.036756592232997, 0.036838884777514, 0.036921293688592, 0.03700381903496, 0.03708646088533, 0.0371692193084, 0.037252094372851, 0.037335086147348, 0.037418194700541, 0.037501420101062, 0.037584762417532, 0.03766822171855, 0.037751798072704, 0.037835491548564, 0.037919302214686, 0.038003230139607, 0.038087275391851, 0.038171438039927, 0.038255718152326, 0.038340115797524, 0.038424631043982, 0.038509263960145, 0.038594014614443, 0.038678883075289, 0.038763869411083, 0.038848973690205, 0.038934195981024, 0.039019536351892, 0.039104994871144, 0.039190571607101, 0.039276266628068, 0.039362080002335, 0.039448011798176, 0.03953406208385, 0.039620230927601, 0.039706518397655, 0.039792924562226, 0.039879449489512, 0.039966093247693, 0.040052855904936, 0.040139737529393, 0.0402267381892, 0.040313857952476, 0.040401096887328, 0.040488455061846, 0.040575932544103, 0.04066352940216, 0.040751245704062, 0.040839081517837, 0.040927036911498, 0.041015111953046, 0.041103306710464, 0.04119162125172, 0.041280055644768, 0.041368609957545, 0.041457284257975, 0.041546078613967, 0.041634993093413, 0.041724027764191, 0.041813182694164, 0.04190245795118, 0.041991853603073, 0.042081369717659, 0.042171006362743, 0.042260763606112, 0.042350641515538, 0.042440640158782, 0.042530759603584, 0.042620999917675, 0.042711361168767, 0.042801843424559, 0.042892446752735, 0.042983171220964, 0.0430740168969, 0.043164983848181, 0.043256072142434, 0.043347281847266, 0.043438613030274, 0.043530065759038, 0.043621640101122, 0.043713336124078, 0.043805153895442, 0.043897093482735, 0.043989154953464, 0.044081338375121, 0.044173643815184, 0.044266071341114, 0.04435862102036, 0.044451292920356, 0.04454408710852, 0.044637003652258, 0.044730042618958, 0.044823204075996, 0.044916488090733, 0.045009894730514, 0.045103424062673, 0.045197076154525, 0.045290851073374, 0.045384748886507, 0.045478769661199, 0.045572913464709, 0.045667180364283, 0.045761570427149, 0.045856083720526, 0.045950720311614, 0.046045480267601, 0.04614036365566, 0.046235370542951, 0.046330500996616, 0.046425755083787, 0.046521132871579, 0.046616634427094, 0.046712259817419, 0.046808009109627, 0.046903882370777, 0.046999879667913, 0.047096001068067, 0.047192246638253, 0.047288616445475, 0.047385110556719, 0.04748172903896, 0.047578471959157, 0.047675339384256, 0.047772331381187, 0.047869448016868, 0.047966689358202, 0.048064055472078, 0.048161546425371, 0.048259162284942, 0.048356903117637, 0.04845476899029, 0.04855275996972, 0.04865087612273, 0.048749117516113, 0.048847484216645, 0.048945976291089, 0.049044593806193, 0.049143336828694, 0.049242205425312, 0.049341199662754, 0.049440319607715, 0.049539565326872, 0.049638936886893, 0.049738434354428, 0.049838057796116, 0.04993780727858, 0.050037682868432, 0.050137684632268, 0.05023781263667, 0.050338066948207, 0.050438447633435, 0.050538954758894, 0.050639588391114, 0.050740348596607, 0.050841235441875, 0.050942248993403, 0.051043389317664, 0.051144656481119, 0.051246050550212, 0.051347571591376, 0.051449219671028, 0.051550994855574, 0.051652897211405, 0.051754926804897, 0.051857083702416, 0.051959367970312, 0.05206177967492, 0.052164318882566, 0.052266985659557, 0.052369780072192, 0.052472702186751, 0.052575752069506, 0.052678929786711, 0.052782235404608, 0.052885668989427, 0.052989230607383, 0.053092920324678, 0.0531967382075, 0.053300684322025, 0.053404758734415, 0.053508961510817, 0.053613292717367, 0.053717752420187, 0.053822340685385, 0.053927057579055, 0.05403190316728, 0.054136877516128, 0.054241980691654, 0.0543472127599, 0.054452573786894, 0.054558063838652, 0.054663682981175, 0.054769431280453, 0.054875308802461, 0.054981315613161, 0.055087451778502, 0.055193717364422, 0.055300112436841, 0.055406637061671, 0.055513291304807, 0.055620075232133, 0.055726988909519, 0.055834032402823, 0.055941205777888, 0.056048509100544, 0.056155942436611, 0.056263505851893, 0.056371199412182, 0.056479023183256, 0.05658697723088, 0.056695061620809, 0.05680327641878, 0.056911621690522, 0.057020097501747, 0.057128703918157, 0.057237441005438, 0.057346308829267, 0.057455307455304, 0.057564436949198, 0.057673697376586, 0.057783088803091, 0.057892611294323, 0.058002264915879, 0.058112049733343, 0.058221965812288, 0.058332013218272, 0.058442192016841, 0.058552502273528, 0.058662944053854, 0.058773517423325, 0.058884222447437, 0.058995059191672, 0.059106027721498, 0.059217128102373, 0.059328360399739, 0.059439724679028, 0.059551221005658, 0.059662849445035, 0.059774610062551, 0.059886502923587, 0.059998528093509, 0.060110685637673, 0.060222975621421, 0.060335398110082, 0.060447953168974, 0.0605606408634, 0.060673461258652, 0.060786414420009, 0.060899500412738, 0.061012719302092, 0.061126071153313, 0.061239556031629, 0.061353174002258, 0.061466925130402, 0.061580809481252, 0.061694827119988, 0.061808978111775, 0.061923262521767, 0.062037680415106, 0.06215223185692, 0.062266916912325, 0.062381735646425, 0.062496688124312, 0.062611774411064, 0.062726994571748, 0.062842348671419, 0.062957836775118, 0.063073458947874, 0.063189215254704, 0.063305105760614, 0.063421130530595, 0.063537289629628, 0.063653583122679, 0.063770011074705, 0.063886573550649, 0.064003270615441, 0.064120102333999, 0.06423706877123, 0.064354169992028, 0.064471406061274, 0.064588777043839, 0.064706283004578, 0.064823924008337, 0.064941700119949, 0.065059611404235, 0.065177657926002, 0.065295839750047, 0.065414156941154, 0.065532609564095, 0.06565119768363, 0.065769921364506, 0.065888780671458, 0.06600777566921, 0.066126906422474, 0.066246172995948, 0.066365575454319, 0.066485113862263, 0.066604788284441, 0.066724598785507, 0.066844545430097, 0.066964628282838, 0.067084847408347, 0.067205202871224, 0.067325694736062, 0.067446323067438, 0.06756708792992, 0.067687989388062, 0.067809027506407, 0.067930202349486, 0.068051513981819, 0.068172962467911, 0.068294547872258, 0.068416270259343, 0.068538129693637, 0.0686601262396, 0.06878225996168, 0.068904530924311, 0.069026939191918, 0.069149484828912, 0.069272167899694, 0.069394988468652, 0.069517946600161, 0.069641042358588, 0.069764275808283, 0.06988764701359, 0.070011156038835, 0.070134802948338, 0.070258587806404, 0.070382510677326, 0.070506571625386, 0.070630770714856, 0.070755108009994, 0.070879583575047, 0.071004197474249, 0.071128949771825, 0.071253840531987, 0.071378869818934, 0.071504037696856, 0.071629344229929, 0.071754789482318, 0.071880373518177, 0.072006096401648, 0.072131958196862, 0.072257958967936, 0.072384098778979, 0.072510377694085, 0.072636795777339, 0.072763353092813, 0.072890049704567, 0.073016885676652, 0.073143861073105, 0.073270975957952, 0.073398230395208, 0.073525624448875, 0.073653158182946, 0.073780831661401, 0.073908644948208, 0.074036598107325, 0.074164691202697, 0.074292924298259, 0.074421297457933, 0.074549810745631, 0.074678464225253, 0.074807257960687, 0.07493619201581, 0.075065266454488, 0.075194481340576, 0.075323836737916, 0.07545333271034, 0.075582969321668, 0.075712746635709, 0.07584266471626, 0.075972723627108, 0.076102923432027, 0.076233264194781, 0.076363745979122, 0.076494368848791, 0.076625132867517, 0.07675603809902, 0.076887084607005, 0.077018272455169, 0.077149601707196, 0.077281072426759, 0.077412684677521, 0.077544438523132, 0.077676334027232, 0.077808371253449, 0.0779405502654, 0.078072871126692, 0.078205333900919, 0.078337938651665, 0.078470685442502, 0.078603574336991, 0.078736605398683, 0.078869778691116, 0.079003094277819, 0.079136552222308, 0.079270152588089, 0.079403895438656, 0.079537780837494, 0.079671808848073, 0.079805979533856, 0.079940292958292, 0.080074749184821, 0.080209348276871, 0.080344090297859, 0.080478975311191, 0.080614003380261, 0.080749174568455, 0.080884488939144, 0.081019946555691, 0.081155547481447, 0.081291291779752, 0.081427179513934, 0.081563210747312, 0.081699385543193, 0.081835703964873, 0.081972166075638, 0.08210877193876, 0.082245521617505, 0.082382415175124, 0.082519452674859, 0.082656634179941, 0.082793959753588, 0.082931429459011, 0.083069043359407, 0.083206801517964, 0.083344703997857, 0.083482750862252, 0.083620942174304, 0.083759277997156, 0.083897758393941, 0.084036383427782, 0.08417515316179, 0.084314067659066, 0.084453126982699, 0.084592331195767, 0.084731680361341, 0.084871174542476, 0.08501081380222, 0.085150598203609, 0.085290527809667, 0.08543060268341, 0.08557082288784, 0.085711188485952, 0.085851699540728, 0.085992356115139, 0.086133158272145, 0.086274106074699, 0.086415199585739, 0.086556438868193, 0.086697823984982, 0.086839354999011, 0.086981031973179, 0.087122854970371, 0.087264824053464, 0.087406939285322, 0.087549200728801, 0.087691608446744, 0.087834162501984, 0.087976862957345, 0.088119709875638, 0.088262703319666, 0.088405843352219, 0.088549130036079, 0.088692563434014, 0.088836143608785, 0.08897987062314, 0.089123744539819, 0.089267765421549, 0.089411933331047, 0.08955624833102, 0.089700710484166, 0.089845319853169, 0.089990076500706, 0.090134980489442, 0.090280031882031, 0.090425230741117, 0.090570577129335, 0.090716071109307, 0.090861712743646, 0.091007502094956, 0.091153439225827, 0.091299524198842, 0.091445757076573, 0.091592137921579, 0.091738666796412, 0.091885343763611, 0.092032168885707, 0.092179142225219, 0.092326263844657, 0.092473533806518, 0.092620952173292, 0.092768519007456, 0.092916234371479, 0.093064098327818, 0.093212110938921, 0.093360272267223, 0.093508582375153, 0.093657041325126, 0.093805649179549, 0.093954406000817, 0.094103311851316, 0.094252366793422, 0.0944015708895, 0.094550924201904, 0.09470042679298, 0.094850078725061, 0.094999880060473, 0.095149830861529, 0.095299931190534, 0.09545018110978, 0.095600580681553, 0.095751129968124, 0.095901829031758, 0.096052677934707, 0.096203676739214, 0.096354825507513, 0.096506124301826, 0.096657573184365, 0.096809172217334, 0.096960921462923, 0.097112820983317, 0.097264870840686, 0.097417071097193, 0.09756942181499, 0.097721923056219, 0.097874574883012, 0.09802737735749, 0.098180330541766, 0.098333434497941, 0.098486689288107, 0.098640094974346, 0.098793651618729, 0.098947359283318, 0.099101218030164, 0.09925522792131, 0.099409389018787, 0.099563701384617, 0.099718165080812, 0.099872780169372, 0.10002754671229, 0.10018246477155, 0.10033753440912, 0.10049275568697, 0.10064812866704, 0.10080365341127, 0.10095932998161, 0.10111515843998, 0.10127113884827, 0.10142727126841, 0.10158355576227, 0.10173999239175, 0.10189658121871, 0.10205332230503, 0.10221021571254, 0.1023672615031, 0.10252445973854, 0.10268181048068, 0.10283931379134, 0.10299696973232, 0.10315477836541, 0.10331273975241, 0.10347085395507, 0.10362912103518, 0.10378754105447, 0.10394611407471, 0.10410484015762, 0.10426371936493, 0.10442275175836, 0.1045819373996, 0.10474127635037, 0.10490076867234, 0.10506041442719, 0.10522021367659, 0.1053801664822, 0.10554027290566, 0.10570053300862, 0.1058609468527, 0.10602151449951, 0.10618223601068, 0.10634311144779, 0.10650414087244, 0.10666532434621, 0.10682666193067, 0.10698815368738, 0.10714979967788, 0.10731159996373, 0.10747355460646, 0.10763566366757, 0.1077979272086, 0.10796034529104, 0.10812291797638, 0.10828564532611, 0.10844852740171, 0.10861156426463, 0.10877475597634, 0.10893810259827, 0.10910160419187, 0.10926526081856, 0.10942907253975, 0.10959303941687, 0.10975716151129, 0.10992143888441, 0.11008587159762, 0.11025045971227, 0.11041520328974, 0.11058010239136, 0.11074515707848, 0.11091036741243, 0.11107573345454, 0.11124125526611, 0.11140693290845, 0.11157276644285, 0.1117387559306, 0.11190490143296, 0.11207120301121, 0.11223766072661, 0.11240427464038, 0.11257104481379, 0.11273797130804, 0.11290505418437, 0.11307229350397, 0.11323968932804, 0.11340724171779, 0.11357495073438, 0.11374281643899, 0.11391083889278, 0.11407901815691, 0.11424735429251, 0.11441584736071, 0.11458449742266, 0.11475330453945, 0.11492226877219, 0.11509139018198, 0.11526066882991, 0.11543010477706, 0.11559969808449, 0.11576944881326, 0.11593935702443, 0.11610942277903, 0.11627964613809, 0.11645002716264, 0.11662056591369, 0.11679126245224, 0.11696211683929, 0.11713312913581, 0.1173042994028, 0.11747562770121, 0.117647114092, 0.11781875863613, 0.11799056139452, 0.11816252242811, 0.11833464179781, 0.11850691956455, 0.11867935578922, 0.11885195053271, 0.11902470385591, 0.1191976158197, 0.11937068648493, 0.11954391591247, 0.11971730416316, 0.11989085129785, 0.12006455737735, 0.12023842246248, 0.12041244661407, 0.12058662989291, 0.12076097235979, 0.1209354740755, 0.12111013510081, 0.12128495549648, 0.12145993532328, 0.12163507464194, 0.12181037351321, 0.12198583199782, 0.12216145015648, 0.1223372280499, 0.1225131657388, 0.12268926328385, 0.12286552074574, 0.12304193818516, 0.12321851566275, 0.12339525323919, 0.12357215097511, 0.12374920893116, 0.12392642716796, 0.12410380574614, 0.1242813447263, 0.12445904416906, 0.12463690413499, 0.1248149246847, 0.12499310587874, 0.1251714477777, 0.12534995044212, 0.12552861393256, 0.12570743830956, 0.12588642363364, 0.12606556996533, 0.12624487736514, 0.12642434589357, 0.12660397561113, 0.12678376657829, 0.12696371885554, 0.12714383250334, 0.12732410758215, 0.12750454415242, 0.1276851422746, 0.12786590200912, 0.1280468234164, 0.12822790655685, 0.12840915149089, 0.12859055827891, 0.1287721269813, 0.12895385765844, 0.1291357503707, 0.12931780517844, 0.12950002214202, 0.12968240132178, 0.12986494277806, 0.13004764657118, 0.13023051276146, 0.13041354140921, 0.13059673257474, 0.13078008631833, 0.13096360270026, 0.13114728178082, 0.13133112362026, 0.13151512827885, 0.13169929581683, 0.13188362629444, 0.13206811977191, 0.13225277630947, 0.13243759596732, 0.13262257880568, 0.13280772488473, 0.13299303426466, 0.13317850700566, 0.13336414316789, 0.13354994281151, 0.13373590599668, 0.13392203278354, 0.13410832323222, 0.13429477740285, 0.13448139535555, 0.13466817715042, 0.13485512284758, 0.1350422325071, 0.13522950618907, 0.13541694395357, 0.13560454586066, 0.1357923119704, 0.13598024234284, 0.13616833703801, 0.13635659611595, 0.13654501963669, 0.13673360766023, 0.13692236024658, 0.13711127745574, 0.13730035934769, 0.13748960598243, 0.13767901741991, 0.1378685937201, 0.13805833494295, 0.13824824114841, 0.13843831239643, 0.13862854874691, 0.1388189502598, 0.13900951699499, 0.13920024901239, 0.13939114637189, 0.13958220913339, 0.13977343735675, 0.13996483110185, 0.14015639042855, 0.14034811539669, 0.14054000606613, 0.1407320624967, 0.14092428474822, 0.14111667288051, 0.14130922695338, 0.14150194702664, 0.14169483316008, 0.14188788541347, 0.1420811038466, 0.14227448851923, 0.14246803949112, 0.14266175682203, 0.14285564057169, 0.14304969079984, 0.1432439075662, 0.1434382909305, 0.14363284095243, 0.1438275576917, 0.14402244120801, 0.14421749156102, 0.14441270881043, 0.14460809301589, 0.14480364423707, 0.14499936253361, 0.14519524796516, 0.14539130059135, 0.1455875204718, 0.14578390766613, 0.14598046223395, 0.14617718423485, 0.14637407372844, 0.14657113077429, 0.14676835543198, 0.14696574776107, 0.14716330782113, 0.1473610356717, 0.14755893137232, 0.14775699498253, 0.14795522656186, 0.14815362616982, 0.14835219386591, 0.14855092970965, 0.14874983376051, 0.14894890607799, 0.14914814672157, 0.1493475557507, 0.14954713322485, 0.14974687920346, 0.14994679374599, 0.15014687691187, 0.15034712876051, 0.15054754935135, 0.15074813874378, 0.15094889699722, 0.15114982417105, 0.15135092032467, 0.15155218551743, 0.15175361980873, 0.15195522325791, 0.15215699592433, 0.15235893786734, 0.15256104914627, 0.15276332982044, 0.15296577994918, 0.1531683995918, 0.15337118880761, 0.15357414765589, 0.15377727619594, 0.15398057448704, 0.15418404258845, 0.15438768055945, 0.15459148845928, 0.15479546634718, 0.15499961428241, 0.1552039323242, 0.15540842053175, 0.15561307896429, 0.15581790768103, 0.15602290674116, 0.15622807620387, 0.15643341612835, 0.15663892657376, 0.15684460759928, 0.15705045926407, 0.15725648162726, 0.15746267474802, 0.15766903868546, 0.15787557349872, 0.15808227924691, 0.15828915598914, 0.15849620378452, 0.15870342269213, 0.15891081277107, 0.15911837408041, 0.15932610667922, 0.15953401062657, 0.1597420859815, 0.15995033280307, 0.16015875115031, 0.16036734108225, 0.16057610265791, 0.16078503593631, 0.16099414097645, 0.16120341783734, 0.16141286657795, 0.16162248725728, 0.1618322799343, 0.16204224466797, 0.16225238151725, 0.1624626905411, 0.16267317179845, 0.16288382534825, 0.16309465124941, 0.16330564956085, 0.1635168203415, 0.16372816365024, 0.16393967954598, 0.1641513680876, 0.16436322933399, 0.164575263344, 0.16478747017652, 0.16499984989039, 0.16521240254446, 0.16542512819757, 0.16563802690855, 0.16585109873624, 0.16606434373943, 0.16627776197696, 0.1664913535076, 0.16670511839016, 0.16691905668343, 0.16713316844618, 0.16734745373717, 0.16756191261518, 0.16777654513895, 0.16799135136724, 0.16820633135878, 0.1684214851723, 0.16863681286652, 0.16885231450016, 0.16906799013193, 0.16928383982052, 0.16949986362464, 0.16971606160295, 0.16993243381414, 0.17014898031688, 0.17036570116983, 0.17058259643164, 0.17079966616096, 0.17101691041642, 0.17123432925665, 0.17145192274028, 0.17166969092592, 0.17188763387218, 0.17210575163765, 0.17232404428093, 0.17254251186061, 0.17276115443525, 0.17297997206342, 0.17319896480369, 0.17341813271461, 0.17363747585473, 0.17385699428257, 0.17407668805668, 0.17429655723557, 0.17451660187776, 0.17473682204175, 0.17495721778605, 0.17517778916914, 0.17539853624951, 0.17561945908564, 0.175840557736, 0.17606183225904, 0.17628328271322, 0.17650490915699, 0.17672671164878, 0.17694869024702, 0.17717084501014, 0.17739317599655, 0.17761568326467, 0.17783836687288, 0.17806122687959, 0.17828426334318, 0.17850747632202, 0.17873086587449, 0.17895443205894, 0.17917817493374, 0.17940209455723, 0.17962619098775, 0.17985046428363, 0.1800749145032, 0.18029954170477, 0.18052434594666, 0.18074932728716, 0.18097448578457, 0.18119982149717, 0.18142533448326, 0.18165102480109, 0.18187689250893, 0.18210293766504, 0.18232916032767, 0.18255556055506, 0.18278213840545, 0.18300889393706, 0.18323582720811, 0.18346293827681, 0.18369022720137, 0.18391769403998, 0.18414533885084, 0.18437316169213, 0.18460116262201, 0.18482934169867, 0.18505769898025, 0.18528623452491, 0.1855149483908, 0.18574384063605, 0.18597291131879, 0.18620216049715, 0.18643158822923, 0.18666119457316, 0.18689097958702, 0.18712094332891, 0.18735108585692, 0.18758140722913, 0.1878119075036, 0.1880425867384, 0.18827344499158, 0.18850448232119, 0.18873569878528, 0.18896709444188, 0.18919866934901, 0.1894304235647, 0.18966235714695, 0.18989447015377, 0.19012676264315, 0.19035923467309, 0.19059188630157, 0.19082471758656, 0.19105772858603, 0.19129091935795, 0.19152428996025, 0.1917578404509, 0.19199157088782, 0.19222548132896, 0.19245957183222, 0.19269384245553, 0.1929282932568, 0.19316292429393, 0.19339773562482, 0.19363272730734, 0.19386789939939, 0.19410325195883, 0.19433878504353, 0.19457449871134, 0.19481039302012, 0.19504646802772, 0.19528272379196, 0.19551916037067, 0.19575577782169, 0.19599257620282, 0.19622955557186, 0.19646671598663, 0.19670405750491, 0.19694158018449, 0.19717928408314, 0.19741716925864, 0.19765523576876, 0.19789348367124, 0.19813191302384, 0.19837052388429, 0.19860931631035, 0.19884829035972, 0.19908744609014, 0.19932678355931, 0.19956630282495, 0.19980600394475, 0.2000458869764, 0.20028595197759, 0.20052619900599, 0.20076662811929, 0.20100723937513, 0.20124803283118, 0.20148900854508, 0.20173016657447, 0.201971506977, 0.20221302981029, 0.20245473513195, 0.20269662299961, 0.20293869347087, 0.20318094660332, 0.20342338245456, 0.20366600108217, 0.20390880254373, 0.20415178689681, 0.20439495419898, 0.20463830450779, 0.20488183788079, 0.20512555437552, 0.20536945404952, 0.20561353696031, 0.20585780316542, 0.20610225272236, 0.20634688568863, 0.20659170212174, 0.20683670207917, 0.20708188561842, 0.20732725279696, 0.20757280367226, 0.2078185383018, 0.20806445674301, 0.20831055905336, 0.20855684529029, 0.20880331551123, 0.20904996977361, 0.20929680813486, 0.20954383065239, 0.20979103738361, 0.21003842838592, 0.21028600371671, 0.21053376343337, 0.21078170759328, 0.21102983625381, 0.21127814947233, 0.2115266473062, 0.21177532981277, 0.21202419704938, 0.21227324907337, 0.21252248594208, 0.21277190771283, 0.21302151444293, 0.2132713061897, 0.21352128301044, 0.21377144496244, 0.21402179210299, 0.21427232448938, 0.21452304217888, 0.21477394522876, 0.21502503369628, 0.2152763076387, 0.21552776711326, 0.2157794121772, 0.21603124288777, 0.21628325930217, 0.21653546147765, 0.2167878494714, 0.21704042334063, 0.21729318314255, 0.21754612893434, 0.21779926077319, 0.21805257871628, 0.21830608282078, 0.21855977314386, 0.21881364974267, 0.21906771267436, 0.21932196199608, 0.21957639776497, 0.21983102003816, 0.22008582887276, 0.2203408243259, 0.22059600645469, 0.22085137531622, 0.2211069309676, 0.22136267346591, 0.22161860286824, 0.22187471923167, 0.22213102261325, 0.22238751307005, 0.22264419065914, 0.22290105543755, 0.22315810746232, 0.2234153467905, 0.22367277347911, 0.22393038758517, 0.22418818916569, 0.22444617827769, 0.22470435497816, 0.2249627193241, 0.22522127137249, 0.22548001118031, 0.22573893880455, 0.22599805430215, 0.22625735773009, 0.22651684914532, 0.22677652860479, 0.22703639616542, 0.22729645188416, 0.22755669581794, 0.22781712802366, 0.22807774855825, 0.22833855747861, 0.22859955484164, 0.22886074070423, 0.22912211512327, 0.22938367815563, 0.22964542985819, 0.22990737028781, 0.23016949950136, 0.23043181755568, 0.23069432450762, 0.23095702041402, 0.23121990533171, 0.23148297931752, 0.23174624242825, 0.23200969472074, 0.23227333625177, 0.23253716707816, 0.23280118725668, 0.23306539684413, 0.23332979589729, 0.23359438447292, 0.23385916262779, 0.23412413041866, 0.23438928790228, 0.2346546351354, 0.23492017217476, 0.23518589907707, 0.23545181589909, 0.23571792269751, 0.23598421952905, 0.23625070645042, 0.23651738351831, 0.23678425078942, 0.23705130832044, 0.23731855616803, 0.23758599438888, 0.23785362303965, 0.23812144217699, 0.23838945185757, 0.23865765213802, 0.23892604307498, 0.23919462472509, 0.23946339714498, 0.23973236039125, 0.24000151452053, 0.24027085958942, 0.24054039565452, 0.24081012277242, 0.24108004099971, 0.24135015039297, 0.24162045100878, 0.24189094290369, 0.24216162613427, 0.24243250075707, 0.24270356682864, 0.24297482440552, 0.24324627354424, 0.24351791430133, 0.24378974673332, 0.2440617708967, 0.24433398684801, 0.24460639464372, 0.24487899434035, 0.24515178599437, 0.24542476966227, 0.24569794540053, 0.24597131326561, 0.24624487331397, 0.24651862560207, 0.24679257018636, 0.24706670712328, 0.24734103646927, 0.24761555828076, 0.24789027261416, 0.24816517952591, 0.2484402790724, 0.24871557131004, 0.24899105629522, 0.24926673408435, 0.2495426047338, 0.24981866829995, 0.25009492483917, 0.25037137440782, 0.25064801706228, 0.25092485285887, 0.25120188185396, 0.25147910410388, 0.25175651966497, 0.25203412859354, 0.25231193094593, 0.25258992677844, 0.25286811614737, 0.25314649910904, 0.25342507571973, 0.25370384603573, 0.25398281011333, 0.25426196800879, 0.25454131977839, 0.25482086547839, 0.25510060516504, 0.2553805388946, 0.2556606667233, 0.25594098870738, 0.25622150490307, 0.2565022153666, 0.25678312015418, 0.25706421932203, 0.25734551292634, 0.25762700102332, 0.25790868366916, 0.25819056092004, 0.25847263283214, 0.25875489946164, 0.25903736086469, 0.25932001709747, 0.25960286821613, 0.2598859142768, 0.26016915533564, 0.26045259144878, 0.26073622267234, 0.26102004906245, 0.26130407067522, 0.26158828756677, 0.26187269979319, 0.26215730741058, 0.26244211047503, 0.26272710904263, 0.26301230316946, 0.26329769291158, 0.26358327832505, 0.26386905946595, 0.26415503639032, 0.26444120915421, 0.26472757781365, 0.26501414242469, 0.26530090304334, 0.26558785972563, 0.26587501252758, 0.26616236150519, 0.26644990671446, 0.26673764821139, 0.26702558605198, 0.26731372029219, 0.26760205098802, 0.26789057819543, 0.26817930197039, 0.26846822236885, 0.26875733944677, 0.26904665326009, 0.26933616386475, 0.26962587131669, 0.26991577567184, 0.2702058769861, 0.27049617531541, 0.27078667071566, 0.27107736324276, 0.27136825295261, 0.27165933990109, 0.27195062414409, 0.27224210573749, 0.27253378473716, 0.27282566119896, 0.27311773517875, 0.27341000673238, 0.27370247591571, 0.27399514278457, 0.27428800739479, 0.27458106980221, 0.27487433006264, 0.2751677882319, 0.2754614443658, 0.27575529852014, 0.27604935075072, 0.27634360111334, 0.27663804966377, 0.27693269645779, 0.27722754155118, 0.2775225849997, 0.27781782685912, 0.27811326718518, 0.27840890603364, 0.27870474346023, 0.27900077952069, 0.27929701427076, 0.27959344776615, 0.27989008006258, 0.28018691121576, 0.2804839412814, 0.2807811703152, 0.28107859837285, 0.28137622551003, 0.28167405178242, 0.28197207724571, 0.28227030195556, 0.28256872596762, 0.28286734933757, 0.28316617212104, 0.28346519437368, 0.28376441615112, 0.28406383750901, 0.28436345850296, 0.2846632791886, 0.28496329962154, 0.28526351985738, 0.28556393995173, 0.28586455996018, 0.28616537993832, 0.28646639994174, 0.28676762002601, 0.2870690402467, 0.28737066065938, 0.2876724813196, 0.28797450228293, 0.2882767236049, 0.28857914534106, 0.28888176754694, 0.28918459027807, 0.28948761358997, 0.28979083753816, 0.29009426217816, 0.29039788756545, 0.29070171375556, 0.29100574080395, 0.29130996876613, 0.29161439769758, 0.29191902765376, 0.29222385869015, 0.2925288908622, 0.29283412422539, 0.29313955883514, 0.29344519474692, 0.29375103201616, 0.29405707069829, 0.29436331084873, 0.29466975252292, 0.29497639577626, 0.29528324066416, 0.29559028724203, 0.29589753556525, 0.29620498568923, 0.29651263766935, 0.29682049156098, 0.29712854741951, 0.29743680530028, 0.29774526525868, 0.29805392735004, 0.29836279162973, 0.29867185815308, 0.29898112697543, 0.29929059815212, 0.29960027173846, 0.29991014778978, 0.30022022636139, 0.3005305075086, 0.3008409912867, 0.30115167775101, 0.3014625669568, 0.30177365895935, 0.30208495381396, 0.30239645157588, 0.30270815230039, 0.30302005604275, 0.3033321628582, 0.30364447280201, 0.3039569859294, 0.30426970229563, 0.30458262195591, 0.30489574496547, 0.30520907137954, 0.30552260125332, 0.30583633464203, 0.30615027160086, 0.30646441218501, 0.30677875644966, 0.30709330445002, 0.30740805624124, 0.30772301187851, 0.30803817141698, 0.30835353491183, 0.3086691024182, 0.30898487399124, 0.3093008496861, 0.30961702955791, 0.30993341366181, 0.31025000205291, 0.31056679478634, 0.31088379191722, 0.31120099350065, 0.31151839959172, 0.31183601024555, 0.31215382551721, 0.3124718454618, 0.31279007013439, 0.31310849959006, 0.31342713388386, 0.31374597307087, 0.31406501720614, 0.31438426634472, 0.31470372054165, 0.31502337985197, 0.31534324433071, 0.3156633140329, 0.31598358901356, 0.31630406932771, 0.31662475503035, 0.31694564617648, 0.31726674282111, 0.31758804501923, 0.31790955282582, 0.31823126629587, 0.31855318548434, 0.31887531044621, 0.31919764123644, 0.31952017790998, 0.3198429205218, 0.32016586912682, 0.32048902378001, 0.32081238453628, 0.32113595145056, 0.32145972457779, 0.32178370397287, 0.32210788969072, 0.32243228178624, 0.32275688031434, 0.32308168532991, 0.32340669688783, 0.32373191504299, 0.32405733985026, 0.32438297136452, 0.32470880964064, 0.32503485473347, 0.32536110669786, 0.32568756558867, 0.32601423146073, 0.32634110436889, 0.32666818436797, 0.32699547151281, 0.32732296585822, 0.32765066745901, 0.32797857637, 0.32830669264598, 0.32863501634176, 0.32896354751213, 0.32929228621186, 0.32962123249575, 0.32995038641856, 0.33027974803507, 0.33060931740004, 0.33093909456822, 0.33126907959438, 0.33159927253324, 0.33192967343956, 0.33226028236807, 0.3325910993735, 0.33292212451057, 0.33325335783399, 0.3335847993985, 0.33391644925878, 0.33424830746954, 0.33458037408548, 0.33491264916128, 0.33524513275163, 0.33557782491121, 0.33591072569469, 0.33624383515674, 0.33657715335202, 0.33691068033519, 0.33724441616089, 0.33757836088377, 0.33791251455847, 0.33824687723963, 0.33858144898187, 0.33891622983982, 0.33925121986808, 0.33958641912128, 0.33992182765402, 0.3402574455209, 0.34059327277651, 0.34092930947544, 0.34126555567227, 0.34160201142159, 0.34193867677797, 0.34227555179597, 0.34261263653014, 0.34294993103506, 0.34328743536527, 0.34362514957531, 0.34396307371972, 0.34430120785303, 0.34463955202978, 0.34497810630448, 0.34531687073165, 0.3456558453658, 0.34599503026144, 0.34633442547307, 0.34667403105518, 0.34701384706226, 0.34735387354879, 0.34769411056926, 0.34803455817813, 0.34837521642987, 0.34871608537894, 0.3490571650798, 0.3493984555869, 0.34973995695468, 0.35008166923759, 0.35042359249004, 0.35076572676648, 0.35110807212133, 0.351450628609, 0.35179339628391, 0.35213637520045, 0.35247956541304, 0.35282296697607, 0.35316657994392, 0.35351040437098, 0.35385444031163, 0.35419868782024, 0.35454314695118, 0.35488781775882, 0.35523270029751, 0.35557779462159, 0.35592310078542, 0.35626861884334, 0.35661434884968, 0.35696029085877, 0.35730644492494, 0.35765281110249, 0.35799938944576, 0.35834618000904, 0.35869318284664, 0.35904039801284, 0.35938782556196, 0.35973546554826, 0.36008331802603, 0.36043138304955, 0.36077966067308, 0.36112815095089, 0.36147685393724, 0.36182576968638, 0.36217489825256, 0.36252423969002, 0.362873794053, 0.36322356139573, 0.36357354177243, 0.36392373523733, 0.36427414184463, 0.36462476164857, 0.36497559470332, 0.3653266410631, 0.3656779007821, 0.36602937391451, 0.3663810605145, 0.36673296063627, 0.36708507433397, 0.36743740166178, 0.36778994267385, 0.36814269742435, 0.36849566596742, 0.36884884835721, 0.36920224464786, 0.3695558548935, 0.36990967914827, 0.37026371746628, 0.37061796990165, 0.3709724365085, 0.37132711734094, 0.37168201245306, 0.37203712189897, 0.37239244573275, 0.37274798400849, 0.37310373678028, 0.37345970410218, 0.37381588602827, 0.37417228261261, 0.37452889390927, 0.37488571997229, 0.37524276085572, 0.37560001661362, 0.37595748730001, 0.37631517296893, 0.3766730736744, 0.37703118947046, 0.37738952041111, 0.37774806655036, 0.37810682794223, 0.37846580464072, 0.37882499669981, 0.37918440417351, 0.37954402711578, 0.37990386558063, 0.38026391962201, 0.38062418929389, 0.38098467465025, 0.38134537574504, 0.38170629263222, 0.38206742536572, 0.38242877399949, 0.38279033858748, 0.38315211918361, 0.38351411584181, 0.383876328616, 0.3842387575601, 0.38460140272801, 0.38496426417365, 0.38532734195091, 0.38569063611369, 0.38605414671587, 0.38641787381135, 0.38678181745401, 0.38714597769771, 0.38751035459632, 0.38787494820372, 0.38823975857375, 0.38860478576027, 0.38897002981712, 0.38933549079816, 0.38970116875722, 0.39006706374812, 0.39043317582471, 0.39079950504079, 0.39116605145018, 0.3915328151067, 0.39189979606415, 0.39226699437633, 0.39263441009704, 0.39300204328007, 0.3933698939792, 0.39373796224821, 0.39410624814088, 0.39447475171098, 0.39484347301227, 0.3952124120985, 0.39558156902344, 0.39595094384084, 0.39632053660442, 0.39669034736794, 0.39706037618513, 0.39743062310971, 0.39780108819541, 0.39817177149594, 0.39854267306501, 0.39891379295634, 0.39928513122363, 0.39965668792057, 0.40002846310085, 0.40040045681815, 0.40077266912617, 0.40114510007858, 0.40151774972904, 0.40189061813123, 0.4022637053388, 0.40263701140541, 0.40301053638471, 0.40338428033034, 0.40375824329594, 0.40413242533516, 0.40450682650161, 0.40488144684892, 0.40525628643071, 0.40563134530061, 0.4060066235122, 0.4063821211191, 0.40675783817491, 0.40713377473322, 0.40750993084762, 0.4078863065717, 0.40826290195902, 0.40863971706316, 0.4090167519377, 0.40939400663619, 0.40977148121219, 0.41014917571926, 0.41052709021094, 0.41090522474077, 0.4112835793623, 0.41166215412905, 0.41204094909454, 0.41241996431232, 0.41279919983588, 0.41317865571874, 0.4135583320144, 0.41393822877638, 0.41431834605816, 0.41469868391324, 0.41507924239511, 0.41546002155723, 0.4158410214531, 0.41622224213618, 0.41660368365993, 0.41698534607783, 0.41736722944331, 0.41774933380984, 0.41813165923087, 0.41851420575982, 0.41889697345014, 0.41927996235525, 0.41966317252859, 0.42004660402357, 0.4204302568936, 0.42081413119211, 0.42119822697248, 0.42158254428813, 0.42196708319245, 0.42235184373882, 0.42273682598064, 0.42312202997128, 0.42350745576412, 0.42389310341253, 0.42427897296987, 0.4246650644895, 0.42505137802478, 0.42543791362905, 0.42582467135567, 0.42621165125797, 0.42659885338928, 0.42698627780293, 0.42737392455226, 0.42776179369058, 0.4281498852712, 0.42853819934743, 0.42892673597259, 0.42931549519996, 0.42970447708284, 0.43009368167452, 0.43048310902829, 0.43087275919743, 0.4312626322352, 0.43165272819489, 0.43204304712975, 0.43243358909304, 0.43282435413803, 0.43321534231795, 0.43360655368605, 0.43399798829558, 0.43438964619976, 0.43478152745183, 0.43517363210501, 0.43556596021252, 0.43595851182758, 0.4363512870034, 0.43674428579317, 0.43713750825011, 0.4375309544274, 0.43792462437823, 0.4383185181558, 0.43871263581327, 0.43910697740383, 0.43950154298065, 0.43989633259688, 0.4402913463057, 0.44068658416025, 0.44108204621369, 0.44147773251916, 0.44187364312981, 0.44226977809876, 0.44266613747915, 0.4430627213241, 0.44345952968674, 0.44385656262017, 0.44425382017752, 0.44465130241189, 0.44504900937637, 0.44544694112407, 0.44584509770807, 0.44624347918146, 0.44664208559733, 0.44704091700875, 0.44743997346879, 0.44783925503051, 0.44823876174698, 0.44863849367126, 0.4490384508564, 0.44943863335544, 0.44983904122143, 0.4502396745074, 0.45064053326639, 0.45104161755143, 0.45144292741553, 0.45184446291171, 0.45224622409299, 0.45264821101237, 0.45305042372286, 0.45345286227746, 0.45385552672916, 0.45425841713094, 0.45466153353579, 0.4550648759967, 0.45546844456662, 0.45587223929854, 0.45627626024541, 0.4566805074602, 0.45708498099586, 0.45748968090533, 0.45789460724157, 0.45829976005752, 0.4587051394061, 0.45911074534024, 0.45951657791288, 0.45992263717694, 0.46032892318532, 0.46073543599094, 0.46114217564671, 0.46154914220552, 0.46195633572028, 0.46236375624386, 0.46277140382917, 0.46317927852908, 0.46358738039647, 0.46399570948421, 0.46440426584516, 0.4648130495322, 0.46522206059817, 0.46563129909593, 0.46604076507833, 0.46645045859821, 0.46686037970841, 0.46727052846176, 0.46768090491109, 0.46809150910922, 0.46850234110898, 0.46891340096318, 0.46932468872462, 0.46973620444612, 0.47014794818046, 0.47055991998046, 0.47097211989889, 0.47138454798854, 0.47179720430219, 0.47221008889263, 0.47262320181261, 0.47303654311491, 0.47345011285228, 0.47386391107749, 0.47427793784329, 0.47469219320242, 0.47510667720762, 0.47552138991164, 0.4759363313672, 0.47635150162704, 0.47676690074387, 0.47718252877042, 0.4775983857594, 0.47801447176352, 0.47843078683548, 0.47884733102798, 0.47926410439372, 0.47968110698539, 0.48009833885567, 0.48051580005724, 0.48093349064278, 0.48135141066496, 0.48176956017644, 0.4821879392299, 0.48260654787797, 0.48302538617333, 0.4834444541686, 0.48386375191645, 0.48428327946949, 0.48470303688038, 0.48512302420173, 0.48554324148617, 0.48596368878631, 0.48638436615478, 0.48680527364418, 0.48722641130712, 0.4876477791962, 0.488069377364, 0.48849120586313, 0.48891326474617, 0.4893355540657, 0.48975807387429, 0.49018082422452, 0.49060380516896, 0.49102701676017, 0.4914504590507, 0.49187413209311, 0.49229803593995, 0.49272217064376, 0.49314653625707, 0.49357113283243, 0.49399596042237, 0.4944210190794, 0.49484630885605, 0.49527182980484, 0.49569758197827, 0.49612356542885, 0.49654978020909, 0.49697622637147, 0.4974029039685, 0.49782981305266, 0.49825695367642, 0.49868432589228, 0.4991119297527, 0.49953976531016, 0.49996783261711, 0.50039613172602, 0.50082466268933, 0.50125342555951, 0.501682420389, 0.50211164723024, 0.50254110613565, 0.50297079715769, 0.50340072034877, 0.50383087576131, 0.50426126344773, 0.50469188346045, 0.50512273585188, 0.50555382067441, 0.50598513798045, 0.50641668782239, 0.50684847025262, 0.50728048532353, 0.5077127330875, 0.5081452135969, 0.5085779269041, 0.50901087306148, 0.50944405212138, 0.50987746413618, 0.51031110915823, 0.51074498723987, 0.51117909843344, 0.51161344279129, 0.51204802036574, 0.51248283120914, 0.5129178753738, 0.51335315291205, 0.5137886638762, 0.51422440831856, 0.51466038629144, 0.51509659784714, 0.51553304303796, 0.5159697219162, 0.51640663453413, 0.51684378094405, 0.51728116119824, 0.51771877534896, 0.5181566234485, 0.51859470554911, 0.51903302170305, 0.51947157196259, 0.51991035637997, 0.52034937500744, 0.52078862789725, 0.52122811510162, 0.52166783667281, 0.52210779266303, 0.52254798312451, 0.52298840810946, 0.52342906767012, 0.52386996185867, 0.52431109072734, 0.52475245432832, 0.52519405271381, 0.52563588593601, 0.52607795404709, 0.52652025709925, 0.52696279514466, 0.5274055682355, 0.52784857642394, 0.52829181976214, 0.52873529830226, 0.52917901209646, 0.52962296119689, 0.5300671456557, 0.53051156552503, 0.53095622085702, 0.5314011117038, 0.53184623811751, 0.53229160015026, 0.53273719785417, 0.53318303128137, 0.53362910048396, 0.53407540551404, 0.53452194642373, 0.53496872326512, 0.53541573609029, 0.53586298495135, 0.53631046990037, 0.53675819098943, 0.53720614827061, 0.53765434179597, 0.53810277161759, 0.53855143778752, 0.53900034035783, 0.53944947938056, 0.53989885490776, 0.54034846699147, 0.54079831568374, 0.5412484010366, 0.54169872310208, 0.5421492819322, 0.54260007757898, 0.54305111009445, 0.54350237953061, 0.54395388593946, 0.54440562937303, 0.54485760988329, 0.54530982752225, 0.5457622823419, 0.54621497439422, 0.54666790373118, 0.54712107040478, 0.54757447446698, 0.54802811596974, 0.54848199496503, 0.54893611150481, 0.54939046564103, 0.54984505742564, 0.55029988691059, 0.55075495414782, 0.55121025918926, 0.55166580208684, 0.55212158289249, 0.55257760165814, 0.5530338584357, 0.55349035327709, 0.55394708623421, 0.55440405735898, 0.55486126670328, 0.55531871431903, 0.5557764002581, 0.55623432457239, 0.55669248731377, 0.55715088853414, 0.55760952828536, 0.55806840661929, 0.55852752358782, 0.55898687924279, 0.55944647363606, 0.55990630681949, 0.56036637884492, 0.5608266897642, 0.56128723962916, 0.56174802849164, 0.56220905640347, 0.56267032341647, 0.56313182958246, 0.56359357495327, 0.5640555595807, 0.56451778351656, 0.56498024681266, 0.56544294952078, 0.56590589169274, 0.56636907338031, 0.56683249463529, 0.56729615550945, 0.56776005605458, 0.56822419632244, 0.5686885763648, 0.56915319623344, 0.56961805598009, 0.57008315565653, 0.5705484953145, 0.57101407500575, 0.57147989478202, 0.57194595469505, 0.57241225479657, 0.57287879513832, 0.573345575772, 0.57381259674935, 0.57427985812208, 0.57474735994191, 0.57521510226053, 0.57568308512966, 0.57615130860098, 0.5766197727262, 0.577088477557, 0.57755742314508, 0.5780266095421, 0.57849603679975, 0.57896570496969, 0.57943561410361, 0.57990576425315, 0.58037615546998, 0.58084678780576, 0.58131766131213, 0.58178877604074, 0.58226013204324, 0.58273172937125, 0.58320356807642, 0.58367564821037, 0.58414796982473, 0.58462053297111, 0.58509333770113, 0.58556638406641, 0.58603967211855, 0.58651320190916, 0.58698697348982, 0.58746098691214, 0.58793524222771, 0.58840973948811, 0.58888447874493, 0.58935946004973, 0.5898346834541, 0.5903101490096, 0.5907858567678, 0.59126180678025, 0.59173799909851, 0.59221443377413, 0.59269111085866, 0.59316803040364, 0.59364519246061, 0.59412259708111, 0.59460024431666, 0.59507813421878, 0.59555626683901, 0.59603464222885, 0.59651326043982, 0.59699212152342, 0.59747122553117, 0.59795057251456, 0.59843016252508, 0.59890999561423, 0.59939007183349, 0.59987039123435, 0.60035095386828, 0.60083175978676, 0.60131280904126, 0.60179410168324, 0.60227563776417, 0.6027574173355, 0.60323944044868, 0.60372170715517, 0.6042042175064, 0.60468697155381, 0.60516996934885, 0.60565321094295, 0.60613669638752, 0.60662042573399, 0.60710439903379, 0.60758861633832, 0.608073077699, 0.60855778316724, 0.60904273279442, 0.60952792663196, 0.61001336473124, 0.61049904714365, 0.61098497392058, 0.6114711451134, 0.61195756077351, 0.61244422095225, 0.61293112570101, 0.61341827507115, 0.61390566911402, 0.61439330788099, 0.61488119142339, 0.61536931979259, 0.61585769303991, 0.61634631121671, 0.61683517437431, 0.61732428256403, 0.61781363583722, 0.61830323424519, 0.61879307783925, 0.61928316667072, 0.61977350079091, 0.62026408025111, 0.62075490510265, 0.62124597539679, 0.62173729118485, 0.62222885251811, 0.62272065944784, 0.62321271202534, 0.62370501030187, 0.6241975543287, 0.62469034415711, 0.62518337983835, 0.62567666142368, 0.62617018896436, 0.62666396251164, 0.62715798211676, 0.62765224783096, 0.62814675970548, 0.62864151779155, 0.62913652214041, 0.62963177280327, 0.63012726983136, 0.6306230132759, 0.63111900318809, 0.63161523961915, 0.63211172262027, 0.63260845224266, 0.63310542853751, 0.63360265155602, 0.63410012134937, 0.63459783796874, 0.63509580146532, 0.63559401189028, 0.63609246929478, 0.63659117373, 0.63709012524709, 0.63758932389722, 0.63808876973154, 0.6385884628012, 0.63908840315734, 0.63958859085111, 0.64008902593364, 0.64058970845606, 0.64109063846951, 0.64159181602511, 0.64209324117399, 0.64259491396724, 0.643096834456, 0.64359900269137, 0.64410141872445, 0.64460408260634, 0.64510699438813, 0.64561015412093, 0.64611356185582, 0.64661721764387, 0.64712112153618, 0.64762527358381, 0.64812967383784, 0.64863432234933, 0.64913921916935, 0.64964436434895, 0.6501497579392, 0.65065539999113, 0.6511612905558, 0.65166742968425, 0.65217381742752, 0.65268045383664, 0.65318733896264, 0.65369447285655, 0.65420185556939, 0.65470948715217, 0.65521736765592, 0.65572549713163, 0.65623387563033, 0.65674250320299, 0.65725137990063, 0.65776050577424, 0.65826988087481, 0.65877950525331, 0.65928937896074, 0.65979950204806, 0.66030987456626, 0.6608204965663, 0.66133136809914, 0.66184248921574, 0.66235385996707, 0.66286548040406, 0.66337735057768, 0.66388947053887, 0.66440184033856, 0.66491446002769, 0.66542732965719, 0.665940449278, 0.66645381894103, 0.6669674386972, 0.66748130859743, 0.66799542869264, 0.66850979903372, 0.66902441967159, 0.66953929065713, 0.67005441204126, 0.67056978387485, 0.6710854062088, 0.67160127909398, 0.67211740258129, 0.67263377672158, 0.67315040156574, 0.67366727716463, 0.67418440356911, 0.67470178083004, 0.67521940899828, 0.67573728812468, 0.67625541826008, 0.67677379945533, 0.67729243176127, 0.67781131522872, 0.67833044990852, 0.67884983585151, 0.67936947310849, 0.67988936173029, 0.68040950176772, 0.68092989327159, 0.68145053629271, 0.68197143088189, 0.68249257708991, 0.68301397496758, 0.68353562456568, 0.68405752593501, 0.68457967912633, 0.68510208419044, 0.6856247411781, 0.68614765014009, 0.68667081112717, 0.6871942241901, 0.68771788937965, 0.68824180674656, 0.68876597634159, 0.68929039821548, 0.68981507241897, 0.69033999900281, 0.69086517801772, 0.69139060951444, 0.69191629354369, 0.6924422301562, 0.69296841940269, 0.69349486133386, 0.69402155600042, 0.69454850345309, 0.69507570374257, 0.69560315691955, 0.69613086303473, 0.6966588221388, 0.69718703428244, 0.69771549951635, 0.69824421789118, 0.69877318945763, 0.69930241426635, 0.69983189236803, 0.70036162381331, 0.70089160865286, 0.70142184693733, 0.70195233871737, 0.70248308404363, 0.70301408296675, 0.70354533553737, 0.70407684180613, 0.70460860182365, 0.70514061564056, 0.70567288330749, 0.70620540487505, 0.70673818039385, 0.70727120991452, 0.70780449348765, 0.70833803116385, 0.70887182299372, 0.70940586902785, 0.70994016931683, 0.71047472391125, 0.7110095328617, 0.71154459621875, 0.71207991403298, 0.71261548635496, 0.71315131323526, 0.71368739472443, 0.71422373087305, 0.71476032173166, 0.71529716735082, 0.71583426778107, 0.71637162307296, 0.71690923327704, 0.71744709844382, 0.71798521862386, 0.71852359386766, 0.71906222422577, 0.71960110974869, 0.72014025048695, 0.72067964649106, 0.72121929781153, 0.72175920449885, 0.72229936660354, 0.72283978417608, 0.72338045726698, 0.72392138592671, 0.72446257020577, 0.72500401015464, 0.72554570582379, 0.72608765726369, 0.72662986452482, 0.72717232765764, 0.72771504671262, 0.7282580217402, 0.72880125279085, 0.72934473991501, 0.72988848316313, 0.73043248258565, 0.73097673823301, 0.73152125015565, 0.73206601840399, 0.73261104302846, 0.73315632407948, 0.73370186160748, 0.73424765566286, 0.73479370629604, 0.73534001355743, 0.73588657749742, 0.73643339816642, 0.73698047561482, 0.73752780989302, 0.73807540105139, 0.73862324914034, 0.73917135421023, 0.73971971631144, 0.74026833549434, 0.7408172118093, 0.74136634530669, 0.74191573603687, 0.74246538405019, 0.74301528939701, 0.74356545212767, 0.74411587229252, 0.7446665499419, 0.74521748512615, 0.7457686778956, 0.74632012830059, 0.74687183639143, 0.74742380221845, 0.74797602583196, 0.74852850728229, 0.74908124661974, 0.74963424389462, 0.75018749915723, 0.75074101245787, 0.75129478384684, 0.75184881337442, 0.7524031010909, 0.75295764704657, 0.75351245129171, 0.75406751387658, 0.75462283485148, 0.75517841426665, 0.75573425217237, 0.7562903486189, 0.75684670365648, 0.75740331733539, 0.75796018970586, 0.75851732081814, 0.75907471072247, 0.75963235946909, 0.76019026710824, 0.76074843369013, 0.761306859265, 0.76186554388308, 0.76242448759457, 0.76298369044969, 0.76354315249866, 0.76410287379168, 0.76466285437895, 0.76522309431068, 0.76578359363705, 0.76634435240827, 0.76690537067451, 0.76746664848597, 0.76802818589281, 0.76858998294523, 0.76915203969339, 0.76971435618745, 0.7702769324776, 0.77083976861397, 0.77140286464675, 0.77196622062607, 0.77252983660208, 0.77309371262494, 0.77365784874479, 0.77422224501176, 0.77478690147599, 0.77535181818761, 0.77591699519674, 0.77648243255352, 0.77704813030805, 0.77761408851046, 0.77818030721085, 0.77874678645935, 0.77931352630604, 0.77988052680103, 0.78044778799442, 0.78101530993629, 0.78158309267675, 0.78215113626588, 0.78271944075374, 0.78328800619044, 0.78385683262603, 0.7844259201106, 0.78499526869419, 0.78556487842689, 0.78613474935875, 0.78670488153982, 0.78727527502015, 0.7878459298498, 0.7884168460788, 0.7889880237572, 0.78955946293504, 0.79013116366234, 0.79070312598914, 0.79127534996546, 0.79184783564132, 0.79242058306674, 0.79299359229174, 0.79356686336632, 0.79414039634049, 0.79471419126426, 0.79528824818762, 0.79586256716057, 0.7964371482331, 0.7970119914552, 0.79758709687685, 0.79816246454804, 0.79873809451873, 0.79931398683891, 0.79989014155853, 0.80046655872758, 0.801043238396, 0.80162018061376, 0.80219738543082, 0.80277485289711, 0.80335258306259, 0.8039305759772, 0.80450883169089, 0.80508735025358, 0.80566613171521, 0.8062451761257, 0.80682448353499, 0.80740405399299, 0.80798388754962, 0.80856398425479, 0.80914434415841, 0.80972496731039, 0.81030585376063, 0.81088700355903, 0.81146841675549, 0.81205009339988, 0.81263203354211, 0.81321423723206, 0.8137967045196, 0.81437943545461, 0.81496243008697, 0.81554568846654, 0.81612921064319, 0.81671299666678, 0.81729704658716, 0.8178813604542, 0.81846593831774, 0.81905078022763, 0.81963588623371, 0.82022125638583, 0.82080689073381, 0.82139278932749, 0.82197895221669, 0.82256537945125, 0.82315207108098, 0.8237390271557, 0.82432624772523, 0.82491373283936, 0.82550148254792, 0.8260894969007, 0.8266777759475, 0.82726631973811, 0.82785512832233, 0.82844420174995, 0.82903354007075, 0.82962314333451, 0.830213011591, 0.83080314489, 0.83139354328128, 0.83198420681461, 0.83257513553975, 0.83316632950645, 0.83375778876447, 0.83434951336356, 0.83494150335347, 0.83553375878394, 0.83612627970472, 0.83671906616554, 0.83731211821613, 0.83790543590622, 0.83849901928554, 0.83909286840381, 0.83968698331074, 0.84028136405606, 0.84087601068947, 0.84147092326068, 0.8420661018194, 0.84266154641532, 0.84325725709814, 0.84385323391755, 0.84444947692325, 0.84504598616491, 0.84564276169222, 0.84623980355487, 0.84683711180251, 0.84743468648483, 0.84803252765149, 0.84863063535215, 0.84922900963648, 0.84982765055413, 0.85042655815475, 0.851025732488, 0.85162517360351, 0.85222488155094, 0.85282485637992, 0.85342509814007, 0.85402560688105, 0.85462638265246, 0.85522742550394, 0.85582873548511, 0.85643031264558, 0.85703215703497, 0.85763426870288, 0.85823664769892, 0.8588392940727, 0.8594422078738, 0.86004538915184, 0.86064883795639, 0.86125255433704, 0.86185653834339, 0.86246079002501, 0.86306530943147, 0.86367009661236, 0.86427515161723, 0.86488047449566, 0.86548606529721, 0.86609192407144, 0.8666980508679, 0.86730444573615, 0.86791110872573, 0.86851803988619, 0.86912523926706, 0.86973270691789, 0.87034044288821, 0.87094844722756, 0.87155671998544, 0.8721652612114, 0.87277407095495, 0.8733831492656, 0.87399249619287, 0.87460211178626, 0.87521199609529, 0.87582214916945, 0.87643257105824, 0.87704326181115, 0.87765422147768, 0.87826545010732, 0.87887694774954, 0.87948871445382, 0.88010075026965, 0.8807130552465, 0.88132562943383, 0.88193847288112, 0.88255158563782, 0.88316496775339, 0.88377861927729, 0.88439254025897, 0.88500673074788, 0.88562119079346, 0.88623592044515, 0.88685091975239, 0.88746618876462, 0.88808172753126, 0.88869753610175, 0.88931361452549, 0.88992996285193, 0.89054658113046, 0.8911634694105, 0.89178062774147, 0.89239805617276, 0.89301575475378, 0.89363372353393, 0.8942519625626, 0.89487047188919, 0.89548925156308, 0.89610830163365, 0.89672762215028, 0.89734721316236, 0.89796707471926, 0.89858720687034, 0.89920760966498, 0.89982828315253, 0.90044922738236, 0.90107044240382, 0.90169192826626, 0.90231368501904, 0.90293571271149, 0.90355801139296, 0.9041805811128, 0.90480342192032, 0.90542653386487, 0.90604991699577, 0.90667357136235, 0.90729749701392, 0.90792169399981, 0.90854616236932, 0.90917090217177, 0.90979591345647, 0.91042119627271, 0.91104675066981, 0.91167257669704, 0.91229867440371, 0.9129250438391, 0.91355168505251, 0.91417859809321, 0.91480578301048, 0.91543323985359, 0.91606096867182, 0.91668896951444, 0.91731724243071, 0.91794578746989, 0.91857460468124, 0.91920369411401, 0.91983305581745, 0.92046268984082, 0.92109259623335, 0.92172277504428, 0.92235322632286, 0.92298395011831, 0.92361494647986, 0.92424621545674, 0.92487775709817, 0.92550957145338, 0.92614165857157, 0.92677401850196, 0.92740665129376, 0.92803955699618, 0.92867273565841, 0.92930618732965, 0.9299399120591, 0.93057390989595, 0.93120818088939, 0.9318427250886, 0.93247754254276, 0.93311263330105, 0.93374799741265, 0.93438363492672, 0.93501954589243, 0.93565573035895, 0.93629218837543, 0.93692891999104, 0.93756592525492, 0.93820320421622, 0.9388407569241, 0.93947858342768, 0.94011668377613, 0.94075505801856, 0.94139370620411, 0.94203262838191, 0.94267182460109, 0.94331129491077, 0.94395103936006, 0.94459105799809, 0.94523135087395, 0.94587191803677, 0.94651275953565, 0.94715387541968, 0.94779526573797, 0.94843693053961, 0.94907886987369, 0.9497210837893, 0.95036357233552, 0.95100633556143, 0.95164937351612, 0.95229268624865, 0.95293627380809, 0.95358013624352, 0.95422427360399, 0.95486868593856, 0.9555133732963, 0.95615833572626, 0.95680357327747, 0.957449085999, 0.95809487393989, 0.95874093714916, 0.95938727567587, 0.96003388956904, 0.9606807788777, 0.96132794365088, 0.9619753839376, 0.96262309978687, 0.96327109124772, 0.96391935836916, 0.96456790120019, 0.96521671978982, 0.96586581418706, 0.96651518444089, 0.96716483060032, 0.96781475271434, 0.96846495083193, 0.96911542500208, 0.96976617527377, 0.97041720169599, 0.97106850431769, 0.97172008318786, 0.97237193835547, 0.97302406986947, 0.97367647777883, 0.97432916213251, 0.97498212297945, 0.97563536036862, 0.97628887434896, 0.9769426649694, 0.9775967322789, 0.97825107632639, 0.9789056971608, 0.97956059483107, 0.98021576938612, 0.98087122087487, 0.98152694934625, 0.98218295484916, 0.98283923743254, 0.98349579714528, 0.98415263403628, 0.98480974815447, 0.98546713954873, 0.98612480826796, 0.98678275436105, 0.9874409778769, 0.98809947886439, 0.98875825737241, 0.98941731344982, 0.99007664714552, 0.99073625850836, 0.99139614758723, 0.99205631443099, 0.9927167590885, 0.99337748160862, 0.9940384820402, 0.9946997604321, 0.99536131683317, 0.99602315129226, 0.9966852638582, 0.99734765457984, 0.998010323506, 0.99867327068553, 0.99933649616726, 1, }; inline float concave_exponant( float value ) { return compute_exponant( value, concave_exponant_table, concave_exponant_table_size ); } static int convex_exponant_table_size = 4096; static float convex_exponant_table[4096] = { 0.046890735084968, 0.060510367089532, 0.070244146759565, 0.078085884528682, 0.084766399299554, 0.090646885757071, 0.095935918022615, 0.10076629271815, 0.10522846666912, 0.10938719406252, 0.11329063214116, 0.11697569515052, 0.12047138381695, 0.12380095142677, 0.12698336637053, 0.13003433090946, 0.13296700988896, 0.13579256402953, 0.13852054804987, 0.14115921312863, 0.1437157402818, 0.14619642294463, 0.14860681160019, 0.15095182963725, 0.15323586711087, 0.1554628573286, 0.15763633994212, 0.15975951333014, 0.16183527840461, 0.16386627548964, 0.16585491556127, 0.16780340686311, 0.16971377770443, 0.17158789608648, 0.17342748667809, 0.17523414556343, 0.17700935310772, 0.17875448522512, 0.18047082328378, 0.18215956284339, 0.18382182138835, 0.18545864519372, 0.18707101543914, 0.18865985366887, 0.19022602668079, 0.19177035091555, 0.19329359640666, 0.19479649034366, 0.19627972029366, 0.1977439371202, 0.19918975763326, 0.20061776700013, 0.20202852094263, 0.20342254774346, 0.20480035008141, 0.20616240671285, 0.20750917401484, 0.20884108740361, 0.2101585626402, 0.21146199703427, 0.21275177055533, 0.21402824686007, 0.21529177424328, 0.21654268651924, 0.21778130383952, 0.21900793345289, 0.2202228704121, 0.22142639823195, 0.22261878950286, 0.22380030646332, 0.22497120153468, 0.22613171782122, 0.2272820895781, 0.22842254264984, 0.2295532948814, 0.23067455650401, 0.23178653049755, 0.23288941293122, 0.23398339328412, 0.23506865474701, 0.23614537450672, 0.23721372401435, 0.23827386923838, 0.23932597090372, 0.24037018471754, 0.24140666158298, 0.24243554780127, 0.24345698526318, 0.24447111163043, 0.24547806050768, 0.24647796160566, 0.24747094089613, 0.24845712075893, 0.24943662012184, 0.2504095545935, 0.25137603658992, 0.25233617545488, 0.25329007757457, 0.2542378464869, 0.25517958298564, 0.25611538521981, 0.25704534878847, 0.25796956683127, 0.25888813011489, 0.2598011271157, 0.26070864409871, 0.26161076519316, 0.26250757246479, 0.26339914598504, 0.26428556389732, 0.26516690248049, 0.26604323620968, 0.26691463781467, 0.26778117833578, 0.26864292717761, 0.26949995216049, 0.27035231957004, 0.27120009420461, 0.27204333942098, 0.27288211717822, 0.27371648807992, 0.27454651141474, 0.27537224519548, 0.27619374619664, 0.27701106999062, 0.27782427098256, 0.27863340244388, 0.27943851654466, 0.2802396643848, 0.28103689602406, 0.28183026051108, 0.28261980591135, 0.28340557933416, 0.28418762695871, 0.28496599405919, 0.28574072502914, 0.28651186340489, 0.28727945188822, 0.28804353236828, 0.28880414594282, 0.28956133293859, 0.29031513293125, 0.29106558476448, 0.29181272656855, 0.29255659577828, 0.2932972291504, 0.29403466278042, 0.29476893211889, 0.29550007198725, 0.29622811659308, 0.29695309954495, 0.29767505386682, 0.29839401201195, 0.29911000587644, 0.29982306681234, 0.30053322564037, 0.30124051266227, 0.30194495767279, 0.30264658997128, 0.30334543837304, 0.30404153122028, 0.30473489639272, 0.305425561318, 0.30611355298169, 0.30679889793711, 0.30748162231476, 0.30816175183163, 0.3088393118001, 0.30951432713675, 0.31018682237079, 0.31085682165234, 0.31152434876047, 0.31218942711103, 0.31285207976424, 0.31351232943213, 0.31417019848572, 0.31482570896207, 0.3154788825711, 0.3161297407023, 0.31677830443114, 0.31742459452547, 0.31806863145166, 0.31871043538058, 0.31935002619349, 0.31998742348773, 0.32062264658228, 0.3212557145232, 0.32188664608892, 0.32251545979539, 0.32314217390113, 0.32376680641214, 0.32438937508668, 0.32500989743996, 0.32562839074873, 0.32624487205568, 0.32685935817386, 0.32747186569086, 0.32808241097303, 0.32869101016948, 0.32929767921605, 0.3299024338392, 0.33050528955976, 0.33110626169664, 0.33170536537043, 0.33230261550691, 0.33289802684053, 0.33349161391775, 0.33408339110036, 0.33467337256866, 0.33526157232465, 0.33584800419508, 0.3364326818345, 0.33701561872814, 0.33759682819487, 0.33817632338997, 0.33875411730788, 0.33933022278497, 0.3399046525021, 0.34047741898725, 0.34104853461804, 0.34161801162422, 0.3421858620901, 0.3427520979569, 0.34331673102509, 0.34387977295669, 0.34444123527747, 0.34500112937915, 0.34555946652156, 0.3461162578347, 0.34667151432084, 0.34722524685648, 0.34777746619439, 0.34832818296549, 0.34887740768077, 0.34942515073316, 0.34997142239933, 0.35051623284148, 0.35105959210911, 0.35160151014072, 0.35214199676549, 0.35268106170497, 0.35321871457465, 0.35375496488559, 0.35428982204593, 0.35482329536248, 0.35535539404219, 0.35588612719361, 0.35641550382837, 0.35694353286255, 0.35747022311812, 0.35799558332429, 0.35851962211881, 0.35904234804937, 0.3595637695748, 0.36008389506641, 0.3606027328092, 0.36112029100309, 0.36163657776411, 0.36215160112561, 0.36266536903939, 0.36317788937685, 0.36368916993009, 0.36419921841305, 0.36470804246253, 0.36521564963931, 0.36572204742913, 0.36622724324378, 0.36673124442203, 0.3672340582307, 0.36773569186555, 0.36823615245229, 0.36873544704751, 0.36923358263959, 0.36973056614959, 0.37022640443218, 0.37072110427648, 0.37121467240697, 0.37170711548426, 0.37219844010601, 0.37268865280768, 0.37317776006336, 0.3736657682866, 0.37415268383112, 0.37463851299161, 0.37512326200452, 0.37560693704872, 0.37608954424632, 0.37657108966331, 0.37705157931033, 0.37753101914332, 0.37800941506421, 0.37848677292164, 0.37896309851155, 0.37943839757789, 0.37991267581323, 0.38038593885941, 0.38085819230815, 0.38132944170167, 0.38179969253328, 0.382268950248, 0.38273722024311, 0.38320450786875, 0.38367081842848, 0.38413615717984, 0.38460052933487, 0.38506394006072, 0.3855263944801, 0.38598789767187, 0.38644845467151, 0.38690807047168, 0.38736675002267, 0.38782449823291, 0.38828131996948, 0.38873722005856, 0.38919220328593, 0.3896462743974, 0.39009943809931, 0.39055169905894, 0.39100306190499, 0.39145353122801, 0.39190311158081, 0.39235180747892, 0.39279962340099, 0.39324656378921, 0.39369263304972, 0.394137835553, 0.39458217563428, 0.39502565759394, 0.39546828569788, 0.39591006417789, 0.39635099723204, 0.39679108902508, 0.39723034368872, 0.3976687653221, 0.39810635799203, 0.39854312573345, 0.39897907254969, 0.39941420241284, 0.3998485192641, 0.40028202701409, 0.40071472954319, 0.40114663070185, 0.40157773431091, 0.40200804416193, 0.40243756401747, 0.40286629761141, 0.40329424864928, 0.40372142080848, 0.40414781773867, 0.40457344306197, 0.4049983003733, 0.40542239324066, 0.40584572520538, 0.40626829978239, 0.40669012046055, 0.40711119070284, 0.40753151394667, 0.40795109360413, 0.40836993306225, 0.40878803568324, 0.40920540480476, 0.40962204374014, 0.41003795577865, 0.41045314418572, 0.41086761220321, 0.4112813630496, 0.41169439992025, 0.41210672598763, 0.41251834440153, 0.4129292582893, 0.41333947075604, 0.41374898488486, 0.41415780373708, 0.41456593035241, 0.41497336774921, 0.41538011892465, 0.41578618685496, 0.41619157449558, 0.41659628478141, 0.41700032062698, 0.41740368492665, 0.41780638055478, 0.41820841036598, 0.41860977719522, 0.41901048385807, 0.41941053315088, 0.41980992785092, 0.42020867071661, 0.42060676448765, 0.42100421188524, 0.42140101561222, 0.42179717835324, 0.42219270277495, 0.42258759152616, 0.42298184723798, 0.42337547252401, 0.4237684699805, 0.4241608421865, 0.42455259170399, 0.4249437210781, 0.42533423283721, 0.42572412949311, 0.42611341354115, 0.42650208746043, 0.42689015371388, 0.42727761474844, 0.42766447299521, 0.42805073086956, 0.42843639077132, 0.42882145508485, 0.42920592617925, 0.42958980640844, 0.42997309811132, 0.43035580361188, 0.43073792521938, 0.4311194652284, 0.43150042591905, 0.43188080955705, 0.43226061839384, 0.43263985466676, 0.43301852059911, 0.43339661840033, 0.43377415026607, 0.43415111837833, 0.43452752490558, 0.43490337200286, 0.43527866181192, 0.4356533964613, 0.43602757806647, 0.43640120872993, 0.43677429054132, 0.43714682557752, 0.43751881590278, 0.43789026356879, 0.43826117061483, 0.43863153906783, 0.43900137094251, 0.43937066824143, 0.43973943295517, 0.44010766706235, 0.44047537252978, 0.44084255131254, 0.44120920535405, 0.44157533658622, 0.4419409469295, 0.442306038293, 0.44267061257457, 0.44303467166088, 0.44339821742753, 0.44376125173914, 0.44412377644942, 0.44448579340128, 0.44484730442689, 0.44520831134779, 0.44556881597498, 0.44592882010897, 0.4462883255399, 0.44664733404759, 0.44700584740166, 0.44736386736156, 0.44772139567671, 0.44807843408653, 0.44843498432055, 0.44879104809845, 0.44914662713019, 0.44950172311605, 0.44985633774669, 0.45021047270328, 0.45056412965752, 0.45091731027174, 0.45127001619897, 0.45162224908301, 0.45197401055849, 0.45232530225096, 0.45267612577693, 0.45302648274399, 0.45337637475082, 0.4537258033873, 0.45407477023455, 0.45442327686502, 0.45477132484252, 0.45511891572233, 0.45546605105124, 0.4558127323676, 0.45615896120143, 0.45650473907442, 0.45685006750004, 0.45719494798358, 0.45753938202222, 0.45788337110509, 0.45822691671331, 0.45857002032009, 0.45891268339075, 0.45925490738277, 0.45959669374592, 0.45993804392221, 0.46027895934605, 0.46061944144423, 0.460959491636, 0.46129911133316, 0.46163830194005, 0.46197706485365, 0.46231540146362, 0.46265331315235, 0.46299080129501, 0.46332786725963, 0.4636645124071, 0.46400073809126, 0.46433654565894, 0.46467193645002, 0.46500691179744, 0.46534147302732, 0.46567562145893, 0.46600935840479, 0.46634268517071, 0.46667560305582, 0.46700811335262, 0.46734021734706, 0.46767191631853, 0.46800321153995, 0.4683341042778, 0.46866459579217, 0.46899468733679, 0.46932438015909, 0.46965367550024, 0.46998257459518, 0.47031107867269, 0.47063918895541, 0.47096690665987, 0.47129423299659, 0.47162116917004, 0.47194771637876, 0.47227387581533, 0.47259964866646, 0.47292503611303, 0.47325003933009, 0.47357465948692, 0.4738988977471, 0.4742227552685, 0.47454623320333, 0.47486933269822, 0.47519205489418, 0.47551440092673, 0.47583637192585, 0.47615796901608, 0.47647919331652, 0.47680004594088, 0.47712052799752, 0.47744064058947, 0.47776038481448, 0.47807976176506, 0.47839877252847, 0.47871741818683, 0.4790356998171, 0.4793536184911, 0.4796711752756, 0.47998837123232, 0.48030520741795, 0.4806216848842, 0.48093780467785, 0.48125356784075, 0.48156897540986, 0.48188402841729, 0.48219872789033, 0.48251307485147, 0.48282707031846, 0.4831407153043, 0.48345401081729, 0.48376695786107, 0.48407955743463, 0.48439181053237, 0.48470371814407, 0.48501528125501, 0.4853265008459, 0.48563737789297, 0.485947913368, 0.48625810823832, 0.48656796346684, 0.48687748001209, 0.48718665882827, 0.48749550086522, 0.48780400706849, 0.48811217837937, 0.48842001573489, 0.48872752006785, 0.48903469230687, 0.48934153337639, 0.48964804419673, 0.48995422568406, 0.49026007875049, 0.49056560430403, 0.49087080324867, 0.49117567648439, 0.49148022490715, 0.49178444940896, 0.49208835087789, 0.49239193019808, 0.49269518824979, 0.49299812590937, 0.49330074404936, 0.49360304353847, 0.49390502524158, 0.49420669001982, 0.49450803873055, 0.4948090722274, 0.49510979136027, 0.49541019697541, 0.49571028991536, 0.49601007101904, 0.49630954112173, 0.49660870105513, 0.49690755164733, 0.4972060937229, 0.49750432810282, 0.49780225560459, 0.4980998770422, 0.49839719322618, 0.49869420496357, 0.498990913058, 0.49928731830969, 0.49958342151544, 0.4998792234687, 0.50017472495954, 0.50046992677472, 0.50076482969765, 0.50105943450848, 0.50135374198405, 0.50164775289795, 0.50194146802055, 0.50223488811897, 0.50252801395713, 0.50282084629578, 0.5031133858925, 0.5034056335017, 0.5036975898747, 0.50398925575966, 0.50428063190168, 0.50457171904277, 0.50486251792189, 0.50515302927493, 0.50544325383479, 0.50573319233134, 0.50602284549147, 0.50631221403909, 0.50660129869514, 0.50689010017766, 0.50717861920172, 0.5074668564795, 0.50775481272031, 0.50804248863054, 0.50832988491376, 0.50861700227068, 0.50890384139919, 0.50919040299435, 0.50947668774845, 0.50976269635099, 0.51004842948868, 0.51033388784553, 0.51061907210276, 0.51090398293892, 0.51118862102982, 0.51147298704859, 0.5117570816657, 0.51204090554894, 0.51232445936345, 0.51260774377177, 0.51289075943379, 0.51317350700682, 0.51345598714556, 0.51373820050215, 0.51402014772616, 0.51430182946463, 0.51458324636205, 0.5148643990604, 0.51514528819914, 0.51542591441526, 0.51570627834325, 0.51598638061514, 0.51626622186053, 0.51654580270654, 0.51682512377789, 0.51710418569688, 0.51738298908342, 0.51766153455502, 0.51793982272681, 0.51821785421157, 0.51849562961973, 0.51877314955937, 0.51905041463625, 0.51932742545382, 0.51960418261324, 0.51988068671335, 0.52015693835075, 0.52043293811974, 0.5207086866124, 0.52098418441855, 0.52125943212578, 0.52153443031947, 0.52180917958278, 0.52208368049669, 0.52235793363999, 0.5226319395893, 0.52290569891908, 0.52317921220163, 0.52345248000712, 0.5237255029036, 0.52399828145699, 0.5242708162311, 0.52454310778766, 0.5248151566863, 0.5250869634846, 0.52535852873806, 0.52562985300011, 0.52590093682218, 0.52617178075363, 0.52644238534181, 0.52671275113208, 0.52698287866777, 0.52725276849023, 0.52752242113882, 0.52779183715096, 0.52806101706207, 0.52832996140564, 0.52859867071322, 0.52886714551442, 0.52913538633692, 0.52940339370652, 0.52967116814708, 0.52993871018059, 0.53020602032715, 0.53047309910498, 0.53073994703044, 0.53100656461803, 0.53127295238041, 0.53153911082841, 0.531805040471, 0.53207074181537, 0.53233621536687, 0.53260146162906, 0.53286648110371, 0.5331312742908, 0.53339584168853, 0.53366018379335, 0.53392430109994, 0.53418819410123, 0.53445186328842, 0.53471530915096, 0.53497853217659, 0.53524153285134, 0.5355043116595, 0.53576686908371, 0.53602920560487, 0.53629132170224, 0.53655321785338, 0.53681489453419, 0.5370763522189, 0.53733759138012, 0.53759861248879, 0.53785941601422, 0.5381200024241, 0.53838037218451, 0.53864052575988, 0.53890046361309, 0.53916018620538, 0.53941969399642, 0.53967898744431, 0.53993806700554, 0.54019693313509, 0.54045558628632, 0.54071402691109, 0.54097225545968, 0.54123027238085, 0.54148807812184, 0.54174567312834, 0.54200305784455, 0.54226023271316, 0.54251719817534, 0.54277395467077, 0.54303050263768, 0.54328684251276, 0.54354297473128, 0.54379889972702, 0.54405461793229, 0.54431012977796, 0.54456543569347, 0.54482053610679, 0.54507543144448, 0.54533012213166, 0.54558460859203, 0.5458388912479, 0.54609297052015, 0.54634684682827, 0.54660052059034, 0.54685399222308, 0.5471072621418, 0.54736033076047, 0.54761319849166, 0.5478658657466, 0.54811833293515, 0.54837060046582, 0.54862266874578, 0.54887453818088, 0.54912620917561, 0.54937768213314, 0.54962895745535, 0.54988003554276, 0.55013091679463, 0.55038160160888, 0.55063209038215, 0.55088238350979, 0.55113248138587, 0.55138238440318, 0.55163209295323, 0.55188160742626, 0.55213092821126, 0.55238005569596, 0.55262899026685, 0.55287773230915, 0.55312628220686, 0.55337464034275, 0.55362280709834, 0.55387078285396, 0.55411856798868, 0.55436616288041, 0.5546135679058, 0.55486078344034, 0.5551078098583, 0.55535464753278, 0.55560129683566, 0.55584775813768, 0.55609403180839, 0.55634011821614, 0.55658601772817, 0.55683173071051, 0.55707725752808, 0.5573225985446, 0.55756775412269, 0.5578127246238, 0.55805751040827, 0.55830211183529, 0.55854652926293, 0.55879076304815, 0.55903481354678, 0.55927868111355, 0.55952236610207, 0.55976586886487, 0.56000918975337, 0.56025232911789, 0.56049528730769, 0.56073806467093, 0.56098066155468, 0.56122307830496, 0.56146531526671, 0.56170737278381, 0.56194925119908, 0.56219095085428, 0.56243247209012, 0.56267381524627, 0.56291498066136, 0.56315596867298, 0.56339677961767, 0.56363741383097, 0.56387787164739, 0.56411815340039, 0.56435825942246, 0.56459819004504, 0.56483794559858, 0.56507752641254, 0.56531693281535, 0.56555616513448, 0.56579522369638, 0.56603410882653, 0.56627282084942, 0.56651136008858, 0.56674972686654, 0.56698792150488, 0.56722594432419, 0.56746379564414, 0.5677014757834, 0.56793898505971, 0.56817632378984, 0.56841349228965, 0.56865049087401, 0.56888731985689, 0.56912397955132, 0.56936047026937, 0.56959679232221, 0.5698329460201, 0.57006893167234, 0.57030474958734, 0.57054040007261, 0.57077588343472, 0.57101119997936, 0.5712463500113, 0.57148133383445, 0.57171615175177, 0.57195080406539, 0.57218529107651, 0.57241961308546, 0.5726537703917, 0.57288776329381, 0.57312159208949, 0.57335525707559, 0.57358875854806, 0.57382209680204, 0.57405527213176, 0.57428828483063, 0.57452113519119, 0.57475382350515, 0.57498635006337, 0.57521871515585, 0.57545091907177, 0.57568296209947, 0.57591484452648, 0.57614656663946, 0.57637812872429, 0.576609531066, 0.5768407739488, 0.57707185765611, 0.57730278247053, 0.57753354867383, 0.57776415654699, 0.57799460637021, 0.57822489842285, 0.57845503298351, 0.57868501032997, 0.57891483073924, 0.57914449448754, 0.5793740018503, 0.57960335310217, 0.57983254851703, 0.58006158836799, 0.58029047292737, 0.58051920246673, 0.58074777725689, 0.58097619756787, 0.58120446366895, 0.58143257582865, 0.58166053431474, 0.58188833939424, 0.58211599133342, 0.5823434903978, 0.58257083685217, 0.58279803096057, 0.58302507298631, 0.58325196319197, 0.58347870183939, 0.58370528918969, 0.58393172550327, 0.5841580110398, 0.58438414605822, 0.58461013081678, 0.584835965573, 0.58506165058368, 0.58528718610493, 0.58551257239215, 0.58573780970002, 0.58596289828256, 0.58618783839304, 0.58641263028408, 0.58663727420757, 0.58686177041475, 0.58708611915613, 0.58731032068158, 0.58753437524025, 0.58775828308063, 0.58798204445053, 0.58820565959709, 0.58842912876676, 0.58865245220535, 0.58887563015797, 0.5890986628691, 0.58932155058253, 0.5895442935414, 0.5897668919882, 0.58998934616477, 0.59021165631227, 0.59043382267124, 0.59065584548155, 0.59087772498246, 0.59109946141254, 0.59132105500977, 0.59154250601144, 0.59176381465425, 0.59198498117425, 0.59220600580685, 0.59242688878684, 0.59264763034839, 0.59286823072503, 0.5930886901497, 0.59330900885468, 0.59352918707167, 0.59374922503172, 0.5939691229653, 0.59418888110226, 0.59440849967183, 0.59462797890264, 0.59484731902273, 0.59506652025952, 0.59528558283985, 0.59550450698994, 0.59572329293543, 0.59594194090138, 0.59616045111223, 0.59637882379185, 0.59659705916352, 0.59681515744994, 0.59703311887322, 0.5972509436549, 0.59746863201593, 0.59768618417671, 0.59790360035702, 0.59812088077612, 0.59833802565267, 0.59855503520476, 0.59877190964993, 0.59898864920516, 0.59920525408685, 0.59942172451085, 0.59963806069245, 0.5998542628464, 0.60007033118687, 0.6002862659275, 0.60050206728137, 0.60071773546102, 0.60093327067843, 0.60114867314505, 0.60136394307179, 0.60157908066901, 0.60179408614653, 0.60200895971366, 0.60222370157913, 0.60243831195119, 0.60265279103751, 0.60286713904528, 0.60308135618111, 0.60329544265114, 0.60350939866094, 0.60372322441559, 0.60393692011965, 0.60415048597713, 0.60436392219156, 0.60457722896594, 0.60479040650276, 0.605003455004, 0.60521637467114, 0.60542916570514, 0.60564182830645, 0.60585436267504, 0.60606676901036, 0.60627904751136, 0.60649119837651, 0.60670322180376, 0.60691511799058, 0.60712688713394, 0.60733852943032, 0.60755004507572, 0.60776143426563, 0.60797269719509, 0.60818383405862, 0.60839484505026, 0.6086057303636, 0.60881649019172, 0.60902712472723, 0.60923763416227, 0.6094480186885, 0.6096582784971, 0.6098684137788, 0.61007842472383, 0.61028831152197, 0.61049807436255, 0.61070771343439, 0.61091722892589, 0.61112662102497, 0.61133588991908, 0.61154503579523, 0.61175405883996, 0.61196295923936, 0.61217173717906, 0.61238039284424, 0.61258892641964, 0.61279733808953, 0.61300562803775, 0.61321379644768, 0.61342184350227, 0.613629769384, 0.61383757427494, 0.61404525835669, 0.61425282181043, 0.61446026481691, 0.61466758755641, 0.61487479020881, 0.61508187295354, 0.61528883596959, 0.61549567943554, 0.61570240352953, 0.61590900842926, 0.61611549431204, 0.61632186135471, 0.61652810973372, 0.61673423962509, 0.6169402512044, 0.61714614464684, 0.61735192012716, 0.61755757781971, 0.61776311789841, 0.61796854053677, 0.6181738459079, 0.61837903418448, 0.6185841055388, 0.61878906014272, 0.61899389816771, 0.61919861978482, 0.61940322516472, 0.61960771447765, 0.61981208789347, 0.62001634558161, 0.62022048771113, 0.62042451445068, 0.62062842596851, 0.62083222243249, 0.62103590401009, 0.62123947086836, 0.621442923174, 0.62164626109329, 0.62184948479215, 0.62205259443607, 0.62225559019019, 0.62245847221926, 0.62266124068763, 0.62286389575928, 0.6230664375978, 0.62326886636641, 0.62347118222793, 0.62367338534484, 0.62387547587921, 0.62407745399274, 0.62427931984677, 0.62448107360226, 0.62468271541978, 0.62488424545956, 0.62508566388144, 0.62528697084491, 0.62548816650906, 0.62568925103265, 0.62589022457405, 0.62609108729128, 0.626291839342, 0.62649248088349, 0.62669301207269, 0.62689343306617, 0.62709374402015, 0.62729394509048, 0.62749403643267, 0.62769401820186, 0.62789389055286, 0.62809365364009, 0.62829330761765, 0.62849285263929, 0.62869228885839, 0.62889161642799, 0.6290908355008, 0.62928994622917, 0.62948894876509, 0.62968784326024, 0.62988662986593, 0.63008530873314, 0.63028388001252, 0.63048234385435, 0.6306807004086, 0.63087894982489, 0.63107709225251, 0.63127512784041, 0.63147305673721, 0.6316708790912, 0.63186859505031, 0.63206620476219, 0.63226370837411, 0.63246110603304, 0.63265839788561, 0.63285558407814, 0.63305266475659, 0.63324964006664, 0.63344651015361, 0.6336432751625, 0.63383993523802, 0.63403649052451, 0.63423294116604, 0.63442928730632, 0.63462552908877, 0.63482166665648, 0.63501770015222, 0.63521362971845, 0.63540945549733, 0.63560517763068, 0.63580079626002, 0.63599631152656, 0.63619172357121, 0.63638703253455, 0.63658223855687, 0.63677734177813, 0.636972342338, 0.63716724037585, 0.63736203603072, 0.63755672944138, 0.63775132074627, 0.63794581008353, 0.63814019759103, 0.63833448340628, 0.63852866766656, 0.6387227505088, 0.63891673206965, 0.63911061248547, 0.63930439189231, 0.63949807042594, 0.63969164822183, 0.63988512541515, 0.64007850214078, 0.64027177853332, 0.64046495472706, 0.64065803085603, 0.64085100705394, 0.64104388345422, 0.64123666019003, 0.64142933739423, 0.64162191519939, 0.6418143937378, 0.64200677314148, 0.64219905354214, 0.64239123507123, 0.64258331785991, 0.64277530203907, 0.6429671877393, 0.64315897509092, 0.64335066422399, 0.64354225526827, 0.64373374835326, 0.64392514360816, 0.64411644116192, 0.64430764114321, 0.64449874368043, 0.64468974890169, 0.64488065693484, 0.64507146790748, 0.6452621819469, 0.64545279918014, 0.645643319734, 0.64583374373496, 0.64602407130926, 0.64621430258289, 0.64640443768154, 0.64659447673066, 0.64678441985543, 0.64697426718077, 0.64716401883133, 0.6473536749315, 0.64754323560542, 0.64773270097697, 0.64792207116974, 0.6481113463071, 0.64830052651215, 0.64848961190773, 0.64867860261642, 0.64886749876055, 0.64905630046219, 0.64924500784317, 0.64943362102505, 0.64962214012916, 0.64981056527654, 0.64999889658802, 0.65018713418415, 0.65037527818525, 0.65056332871138, 0.65075128588235, 0.65093914981774, 0.65112692063686, 0.65131459845879, 0.65150218340236, 0.65168967558616, 0.65187707512851, 0.65206438214753, 0.65225159676106, 0.65243871908672, 0.65262574924189, 0.65281268734368, 0.652999533509, 0.65318628785449, 0.65337295049657, 0.65355952155141, 0.65374600113496, 0.65393238936291, 0.65411868635073, 0.65430489221366, 0.65449100706668, 0.65467703102456, 0.65486296420184, 0.6550488067128, 0.65523455867151, 0.65542022019182, 0.65560579138731, 0.65579127237136, 0.65597666325712, 0.6561619641575, 0.65634717518519, 0.65653229645265, 0.65671732807211, 0.65690227015558, 0.65708712281484, 0.65727188616145, 0.65745656030674, 0.65764114536181, 0.65782564143755, 0.65801004864464, 0.65819436709349, 0.65837859689435, 0.6585627381572, 0.65874679099183, 0.6589307555078, 0.65911463181445, 0.65929842002089, 0.65948212023605, 0.6596657325686, 0.65984925712702, 0.66003269401957, 0.66021604335429, 0.660399305239, 0.66058247978131, 0.66076556708864, 0.66094856726816, 0.66113148042685, 0.66131430667147, 0.66149704610858, 0.66167969884451, 0.6618622649854, 0.66204474463717, 0.66222713790553, 0.66240944489599, 0.66259166571384, 0.66277380046418, 0.66295584925189, 0.66313781218164, 0.66331968935791, 0.66350148088497, 0.66368318686688, 0.66386480740751, 0.66404634261049, 0.6642277925793, 0.66440915741718, 0.66459043722718, 0.66477163211215, 0.66495274217473, 0.66513376751739, 0.66531470824236, 0.6654955644517, 0.66567633624726, 0.66585702373069, 0.66603762700345, 0.6662181461668, 0.6663985813218, 0.66657893256933, 0.66675920001005, 0.66693938374444, 0.66711948387279, 0.66729950049519, 0.66747943371154, 0.66765928362153, 0.66783905032469, 0.66801873392034, 0.6681983345076, 0.66837785218541, 0.66855728705253, 0.66873663920752, 0.66891590874874, 0.66909509577437, 0.66927420038242, 0.66945322267069, 0.6696321627368, 0.66981102067818, 0.66998979659209, 0.67016849057557, 0.67034710272551, 0.6705256331386, 0.67070408191136, 0.67088244914009, 0.67106073492095, 0.67123893934989, 0.67141706252268, 0.67159510453493, 0.67177306548205, 0.67195094545927, 0.67212874456163, 0.67230646288402, 0.67248410052113, 0.67266165756747, 0.67283913411737, 0.673016530265, 0.67319384610433, 0.67337108172917, 0.67354823723315, 0.67372531270971, 0.67390230825213, 0.67407922395351, 0.67425605990677, 0.67443281620467, 0.67460949293979, 0.67478609020452, 0.67496260809109, 0.67513904669157, 0.67531540609784, 0.67549168640162, 0.67566788769444, 0.67584401006768, 0.67602005361255, 0.67619601842007, 0.67637190458111, 0.67654771218636, 0.67672344132635, 0.67689909209143, 0.6770746645718, 0.67725015885747, 0.67742557503831, 0.67760091320399, 0.67777617344405, 0.67795135584784, 0.67812646050455, 0.67830148750322, 0.6784764369327, 0.6786513088817, 0.67882610343874, 0.67900082069221, 0.67917546073032, 0.6793500236411, 0.67952450951246, 0.67969891843211, 0.67987325048761, 0.68004750576638, 0.68022168435565, 0.68039578634251, 0.68056981181388, 0.68074376085653, 0.68091763355707, 0.68109143000193, 0.68126515027742, 0.68143879446967, 0.68161236266464, 0.68178585494817, 0.68195927140592, 0.68213261212339, 0.68230587718594, 0.68247906667876, 0.6826521806869, 0.68282521929524, 0.68299818258852, 0.68317107065132, 0.68334388356808, 0.68351662142305, 0.68368928430038, 0.68386187228402, 0.6840343854578, 0.68420682390539, 0.68437918771031, 0.68455147695592, 0.68472369172543, 0.68489583210192, 0.68506789816831, 0.68523989000736, 0.6854118077017, 0.68558365133379, 0.68575542098597, 0.6859271167404, 0.68609873867912, 0.68627028688402, 0.68644176143682, 0.68661316241913, 0.68678448991238, 0.68695574399787, 0.68712692475676, 0.68729803227007, 0.68746906661865, 0.68764002788323, 0.68781091614438, 0.68798173148255, 0.68815247397802, 0.68832314371095, 0.68849374076134, 0.68866426520907, 0.68883471713384, 0.68900509661526, 0.68917540373276, 0.68934563856564, 0.68951580119307, 0.68968589169407, 0.68985591014752, 0.69002585663216, 0.69019573122662, 0.69036553400934, 0.69053526505866, 0.69070492445277, 0.69087451226973, 0.69104402858745, 0.69121347348372, 0.69138284703617, 0.69155214932232, 0.69172138041953, 0.69189054040506, 0.69205962935598, 0.69222864734929, 0.6923975944618, 0.69256647077021, 0.6927352763511, 0.69290401128089, 0.69307267563589, 0.69324126949224, 0.693409792926, 0.69357824601306, 0.69374662882919, 0.69391494145003, 0.69408318395109, 0.69425135640773, 0.69441945889521, 0.69458749148864, 0.694755454263, 0.69492334729315, 0.69509117065382, 0.6952589244196, 0.69542660866496, 0.69559422346424, 0.69576176889166, 0.69592924502129, 0.69609665192708, 0.69626398968288, 0.69643125836238, 0.69659845803916, 0.69676558878667, 0.69693265067823, 0.69709964378703, 0.69726656818615, 0.69743342394854, 0.69760021114702, 0.69776692985428, 0.69793358014291, 0.69810016208534, 0.69826667575391, 0.69843312122081, 0.69859949855814, 0.69876580783783, 0.69893204913173, 0.69909822251155, 0.69926432804888, 0.69943036581519, 0.69959633588183, 0.69976223832001, 0.69992807320085, 0.70009384059533, 0.70025954057432, 0.70042517320856, 0.70059073856867, 0.70075623672516, 0.70092166774842, 0.70108703170871, 0.70125232867619, 0.70141755872088, 0.7015827219127, 0.70174781832144, 0.70191284801678, 0.70207781106829, 0.7022427075454, 0.70240753751744, 0.70257230105362, 0.70273699822304, 0.70290162909468, 0.7030661937374, 0.70323069221994, 0.70339512461095, 0.70355949097893, 0.7037237913923, 0.70388802591934, 0.70405219462822, 0.70421629758702, 0.70438033486367, 0.70454430652602, 0.70470821264178, 0.70487205327857, 0.70503582850388, 0.7051995383851, 0.7053631829895, 0.70552676238424, 0.70569027663637, 0.70585372581284, 0.70601710998047, 0.70618042920598, 0.70634368355597, 0.70650687309695, 0.70666999789529, 0.70683305801729, 0.7069960535291, 0.70715898449678, 0.7073218509863, 0.70748465306348, 0.70764739079407, 0.70781006424368, 0.70797267347784, 0.70813521856195, 0.70829769956132, 0.70846011654114, 0.7086224695665, 0.70878475870239, 0.70894698401368, 0.70910914556513, 0.70927124342142, 0.70943327764709, 0.70959524830661, 0.70975715546431, 0.70991899918444, 0.71008077953115, 0.71024249656845, 0.71040415036028, 0.71056574097046, 0.71072726846272, 0.71088873290066, 0.71105013434781, 0.71121147286758, 0.71137274852327, 0.71153396137808, 0.71169511149513, 0.71185619893741, 0.71201722376781, 0.71217818604914, 0.7123390858441, 0.71249992321527, 0.71266069822514, 0.71282141093612, 0.71298206141048, 0.71314264971043, 0.71330317589806, 0.71346364003534, 0.71362404218419, 0.71378438240638, 0.71394466076361, 0.71410487731747, 0.71426503212946, 0.71442512526098, 0.71458515677331, 0.71474512672767, 0.71490503518515, 0.71506488220675, 0.71522466785339, 0.71538439218587, 0.7155440552649, 0.71570365715109, 0.71586319790498, 0.71602267758697, 0.71618209625739, 0.71634145397648, 0.71650075080436, 0.71665998680107, 0.71681916202656, 0.71697827654067, 0.71713733040316, 0.71729632367369, 0.71745525641181, 0.71761412867699, 0.71777294052862, 0.71793169202596, 0.71809038322821, 0.71824901419446, 0.71840758498371, 0.71856609565487, 0.71872454626675, 0.71888293687807, 0.71904126754746, 0.71919953833345, 0.7193577492945, 0.71951590048895, 0.71967399197506, 0.719832023811, 0.71998999605485, 0.7201479087646, 0.72030576199814, 0.72046355581327, 0.72062129026771, 0.72077896541909, 0.72093658132493, 0.72109413804269, 0.72125163562971, 0.72140907414326, 0.72156645364051, 0.72172377417855, 0.72188103581438, 0.7220382386049, 0.72219538260694, 0.72235246787722, 0.72250949447239, 0.722666462449, 0.72282337186352, 0.72298022277233, 0.72313701523172, 0.72329374929789, 0.72345042502697, 0.72360704247497, 0.72376360169785, 0.72392010275146, 0.72407654569158, 0.72423293057388, 0.72438925745397, 0.72454552638735, 0.72470173742946, 0.72485789063564, 0.72501398606114, 0.72517002376114, 0.72532600379071, 0.72548192620487, 0.72563779105853, 0.72579359840652, 0.72594934830359, 0.7261050408044, 0.72626067596354, 0.7264162538355, 0.7265717744747, 0.72672723793547, 0.72688264427204, 0.7270379935386, 0.72719328578921, 0.72734852107788, 0.72750369945853, 0.72765882098498, 0.727813885711, 0.72796889369024, 0.7281238449763, 0.72827873962269, 0.72843357768282, 0.72858835921005, 0.72874308425764, 0.72889775287877, 0.72905236512654, 0.72920692105397, 0.72936142071401, 0.72951586415951, 0.72967025144325, 0.72982458261793, 0.72997885773619, 0.73013307685054, 0.73028724001347, 0.73044134727734, 0.73059539869447, 0.73074939431708, 0.73090333419731, 0.73105721838724, 0.73121104693885, 0.73136481990405, 0.73151853733467, 0.73167219928247, 0.73182580579913, 0.73197935693625, 0.73213285274535, 0.73228629327787, 0.73243967858518, 0.73259300871857, 0.73274628372926, 0.73289950366838, 0.733052668587, 0.7332057785361, 0.73335883356658, 0.73351183372928, 0.73366477907497, 0.73381766965431, 0.73397050551791, 0.7341232867163, 0.73427601329995, 0.73442868531922, 0.73458130282443, 0.7347338658658, 0.73488637449349, 0.73503882875758, 0.73519122870807, 0.73534357439491, 0.73549586586794, 0.73564810317696, 0.73580028637167, 0.73595241550172, 0.73610449061666, 0.73625651176599, 0.73640847899912, 0.7365603923654, 0.73671225191411, 0.73686405769444, 0.73701580975552, 0.7371675081464, 0.73731915291607, 0.73747074411343, 0.73762228178734, 0.73777376598654, 0.73792519675974, 0.73807657415556, 0.73822789822256, 0.73837916900921, 0.73853038656393, 0.73868155093505, 0.73883266217084, 0.73898372031951, 0.73913472542917, 0.73928567754789, 0.73943657672364, 0.73958742300436, 0.73973821643789, 0.739888957072, 0.7400396449544, 0.74019028013272, 0.74034086265455, 0.74049139256737, 0.74064186991862, 0.74079229475567, 0.74094266712579, 0.74109298707622, 0.74124325465411, 0.74139346990655, 0.74154363288056, 0.74169374362309, 0.74184380218102, 0.74199380860117, 0.74214376293029, 0.74229366521505, 0.74244351550207, 0.74259331383789, 0.74274306026899, 0.74289275484178, 0.74304239760261, 0.74319198859775, 0.74334152787341, 0.74349101547575, 0.74364045145083, 0.74378983584466, 0.7439391687032, 0.74408845007233, 0.74423767999785, 0.74438685852551, 0.74453598570101, 0.74468506156994, 0.74483408617788, 0.74498305957029, 0.74513198179261, 0.74528085289019, 0.74542967290832, 0.74557844189224, 0.74572715988709, 0.74587582693798, 0.74602444308995, 0.74617300838797, 0.74632152287693, 0.74646998660168, 0.746618399607, 0.74676676193761, 0.74691507363815, 0.74706333475321, 0.74721154532731, 0.74735970540492, 0.74750781503044, 0.74765587424819, 0.74780388310246, 0.74795184163745, 0.7480997498973, 0.7482476079261, 0.74839541576788, 0.7485431734666, 0.74869088106614, 0.74883853861035, 0.74898614614301, 0.74913370370781, 0.74928121134843, 0.74942866910843, 0.74957607703136, 0.74972343516068, 0.7498707435398, 0.75001800221205, 0.75016521122073, 0.75031237060905, 0.75045948042018, 0.75060654069723, 0.75075355148322, 0.75090051282115, 0.75104742475394, 0.75119428732444, 0.75134110057545, 0.75148786454973, 0.75163457928994, 0.75178124483872, 0.75192786123862, 0.75207442853215, 0.75222094676175, 0.75236741596981, 0.75251383619865, 0.75266020749053, 0.75280652988768, 0.75295280343223, 0.75309902816628, 0.75324520413185, 0.75339133137094, 0.75353740992544, 0.75368343983721, 0.75382942114807, 0.75397535389974, 0.75412123813391, 0.75426707389222, 0.75441286121622, 0.75455860014743, 0.7547042907273, 0.75484993299723, 0.75499552699856, 0.75514107277258, 0.7552865703605, 0.75543201980349, 0.75557742114268, 0.7557227744191, 0.75586807967378, 0.75601333694763, 0.75615854628156, 0.75630370771639, 0.7564488212929, 0.7565938870518, 0.75673890503376, 0.75688387527939, 0.75702879782923, 0.75717367272378, 0.75731850000348, 0.75746327970872, 0.75760801187982, 0.75775269655706, 0.75789733378067, 0.75804192359079, 0.75818646602755, 0.758330961131, 0.75847540894114, 0.75861980949791, 0.75876416284122, 0.75890846901088, 0.75905272804669, 0.75919693998839, 0.75934110487563, 0.75948522274804, 0.7596292936452, 0.75977331760661, 0.75991729467174, 0.76006122487999, 0.76020510827071, 0.76034894488321, 0.76049273475673, 0.76063647793046, 0.76078017444356, 0.76092382433509, 0.76106742764411, 0.76121098440959, 0.76135449467047, 0.76149795846561, 0.76164137583385, 0.76178474681396, 0.76192807144465, 0.7620713497646, 0.76221458181243, 0.76235776762669, 0.76250090724591, 0.76264400070854, 0.76278704805298, 0.76293004931761, 0.76307300454073, 0.76321591376058, 0.76335877701539, 0.76350159434328, 0.76364436578238, 0.76378709137073, 0.76392977114633, 0.76407240514714, 0.76421499341103, 0.76435753597588, 0.76450003287947, 0.76464248415955, 0.76478488985382, 0.76492724999992, 0.76506956463545, 0.76521183379796, 0.76535405752495, 0.76549623585385, 0.76563836882207, 0.76578045646696, 0.76592249882581, 0.76606449593587, 0.76620644783434, 0.76634835455837, 0.76649021614505, 0.76663203263145, 0.76677380405456, 0.76691553045134, 0.76705721185869, 0.76719884831346, 0.76734043985247, 0.76748198651247, 0.76762348833017, 0.76776494534223, 0.76790635758527, 0.76804772509585, 0.76818904791049, 0.76833032606566, 0.76847155959778, 0.76861274854321, 0.7687538929383, 0.7688949928193, 0.76903604822246, 0.76917705918396, 0.76931802573992, 0.76945894792645, 0.76959982577957, 0.76974065933529, 0.76988144862954, 0.77002219369823, 0.77016289457721, 0.77030355130228, 0.77044416390921, 0.77058473243369, 0.77072525691141, 0.77086573737798, 0.77100617386896, 0.77114656641989, 0.77128691506625, 0.77142721984346, 0.77156748078693, 0.77170769793197, 0.77184787131391, 0.77198800096797, 0.77212808692937, 0.77226812923326, 0.77240812791476, 0.77254808300894, 0.77268799455081, 0.77282786257535, 0.77296768711749, 0.77310746821212, 0.77324720589408, 0.77338690019817, 0.77352655115912, 0.77366615881166, 0.77380572319044, 0.77394524433008, 0.77408472226514, 0.77422415703017, 0.77436354865963, 0.77450289718796, 0.77464220264957, 0.7747814650788, 0.77492068450995, 0.77505986097729, 0.77519899451503, 0.77533808515736, 0.77547713293838, 0.77561613789221, 0.77575510005286, 0.77589401945435, 0.77603289613063, 0.77617173011561, 0.77631052144316, 0.7764492701471, 0.77658797626121, 0.77672663981923, 0.77686526085487, 0.77700383940176, 0.77714237549353, 0.77728086916373, 0.77741932044589, 0.77755772937349, 0.77769609597997, 0.77783442029872, 0.77797270236311, 0.77811094220643, 0.77824913986196, 0.77838729536293, 0.77852540874251, 0.77866348003386, 0.77880150927006, 0.77893949648419, 0.77907744170925, 0.77921534497822, 0.77935320632403, 0.77949102577958, 0.77962880337771, 0.77976653915123, 0.7799042331329, 0.78004188535546, 0.78017949585158, 0.78031706465392, 0.78045459179506, 0.78059207730757, 0.78072952122397, 0.78086692357674, 0.78100428439831, 0.78114160372108, 0.78127888157741, 0.78141611799961, 0.78155331301996, 0.7816904666707, 0.781827578984, 0.78196464999204, 0.78210167972691, 0.7822386682207, 0.78237561550543, 0.7825125216131, 0.78264938657567, 0.78278621042503, 0.78292299319308, 0.78305973491163, 0.78319643561248, 0.78333309532739, 0.78346971408806, 0.78360629192618, 0.78374282887337, 0.78387932496124, 0.78401578022133, 0.78415219468517, 0.78428856838423, 0.78442490134995, 0.78456119361372, 0.78469744520692, 0.78483365616085, 0.78496982650681, 0.78510595627603, 0.78524204549973, 0.78537809420906, 0.78551410243515, 0.7856500702091, 0.78578599756194, 0.7859218845247, 0.78605773112835, 0.78619353740383, 0.78632930338202, 0.78646502909379, 0.78660071456996, 0.78673635984132, 0.7868719649386, 0.78700752989252, 0.78714305473374, 0.78727853949289, 0.78741398420058, 0.78754938888734, 0.78768475358371, 0.78782007832017, 0.78795536312715, 0.78809060803506, 0.78822581307428, 0.78836097827512, 0.7884961036679, 0.78863118928286, 0.78876623515022, 0.78890124130017, 0.78903620776286, 0.78917113456839, 0.78930602174683, 0.78944086932823, 0.78957567734257, 0.78971044581982, 0.78984517478992, 0.78997986428274, 0.79011451432814, 0.79024912495593, 0.79038369619591, 0.7905182280778, 0.79065272063132, 0.79078717388613, 0.79092158787189, 0.79105596261817, 0.79119029815455, 0.79132459451056, 0.79145885171568, 0.79159306979938, 0.79172724879106, 0.79186138872012, 0.79199548961591, 0.79212955150774, 0.79226357442488, 0.79239755839658, 0.79253150345204, 0.79266540962044, 0.79279927693092, 0.79293310541257, 0.79306689509446, 0.79320064600562, 0.79333435817505, 0.79346803163171, 0.79360166640453, 0.79373526252239, 0.79386882001416, 0.79400233890865, 0.79413581923465, 0.79426926102091, 0.79440266429616, 0.79453602908908, 0.79466935542831, 0.79480264334247, 0.79493589286014, 0.79506910400987, 0.79520227682016, 0.7953354113195, 0.79546850753634, 0.79560156549907, 0.79573458523607, 0.79586756677569, 0.79600051014624, 0.79613341537598, 0.79626628249317, 0.79639911152599, 0.79653190250264, 0.79666465545124, 0.79679737039991, 0.79693004737671, 0.79706268640969, 0.79719528752684, 0.79732785075615, 0.79746037612554, 0.79759286366294, 0.7977253133962, 0.79785772535317, 0.79799009956165, 0.79812243604942, 0.79825473484422, 0.79838699597376, 0.79851921946571, 0.7986514053477, 0.79878355364736, 0.79891566439226, 0.79904773760994, 0.79917977332792, 0.79931177157366, 0.79944373237462, 0.79957565575822, 0.79970754175183, 0.79983939038281, 0.79997120167846, 0.80010297566608, 0.80023471237292, 0.80036641182619, 0.8004980740531, 0.80062969908078, 0.80076128693638, 0.80089283764698, 0.80102435123964, 0.80115582774139, 0.80128726717923, 0.80141866958013, 0.80155003497101, 0.80168136337879, 0.80181265483032, 0.80194390935247, 0.80207512697202, 0.80220630771576, 0.80233745161043, 0.80246855868274, 0.80259962895939, 0.80273066246702, 0.80286165923225, 0.80299261928168, 0.80312354264185, 0.8032544293393, 0.80338527940053, 0.803516092852, 0.80364686972014, 0.80377761003137, 0.80390831381204, 0.80403898108852, 0.8041696118871, 0.80430020623408, 0.80443076415569, 0.80456128567817, 0.8046917708277, 0.80482221963044, 0.80495263211253, 0.80508300830006, 0.80521334821909, 0.80534365189568, 0.80547391935582, 0.8056041506255, 0.80573434573067, 0.80586450469724, 0.8059946275511, 0.80612471431811, 0.80625476502411, 0.80638477969488, 0.8065147583562, 0.80664470103381, 0.80677460775342, 0.8069044785407, 0.80703431342132, 0.80716411242088, 0.80729387556499, 0.80742360287921, 0.80755329438906, 0.80768295012005, 0.80781257009766, 0.80794215434733, 0.80807170289448, 0.80820121576449, 0.80833069298273, 0.80846013457451, 0.80858954056515, 0.80871891097991, 0.80884824584402, 0.80897754518272, 0.80910680902117, 0.80923603738454, 0.80936523029795, 0.80949438778651, 0.80962350987527, 0.80975259658928, 0.80988164795355, 0.81001066399306, 0.81013964473278, 0.81026859019762, 0.81039750041249, 0.81052637540226, 0.81065521519176, 0.81078401980582, 0.8109127892692, 0.81104152360669, 0.81117022284299, 0.81129888700282, 0.81142751611084, 0.81155611019171, 0.81168466927003, 0.8118131933704, 0.81194168251738, 0.8120701367355, 0.81219855604927, 0.81232694048317, 0.81245529006164, 0.81258360480911, 0.81271188474998, 0.8128401299086, 0.81296834030933, 0.81309651597647, 0.81322465693431, 0.81335276320711, 0.8134808348191, 0.81360887179448, 0.81373687415743, 0.81386484193209, 0.81399277514259, 0.81412067381303, 0.81424853796746, 0.81437636762993, 0.81450416282446, 0.81463192357502, 0.81475964990559, 0.81488734184009, 0.81501499940242, 0.81514262261648, 0.8152702115061, 0.81539776609512, 0.81552528640733, 0.81565277246651, 0.8157802242964, 0.81590764192072, 0.81603502536317, 0.81616237464741, 0.81628968979708, 0.81641697083579, 0.81654421778713, 0.81667143067467, 0.81679860952193, 0.81692575435243, 0.81705286518965, 0.81717994205703, 0.81730698497803, 0.81743399397603, 0.81756096907441, 0.81768791029653, 0.81781481766572, 0.81794169120527, 0.81806853093846, 0.81819533688853, 0.81832210907872, 0.81844884753221, 0.81857555227218, 0.81870222332177, 0.8188288607041, 0.81895546444227, 0.81908203455935, 0.81920857107838, 0.81933507402238, 0.81946154341434, 0.81958797927722, 0.81971438163398, 0.81984075050752, 0.81996708592074, 0.8200933878965, 0.82021965645765, 0.82034589162699, 0.82047209342733, 0.82059826188142, 0.82072439701201, 0.82085049884181, 0.82097656739352, 0.82110260268979, 0.82122860475327, 0.82135457360657, 0.82148050927229, 0.82160641177299, 0.82173228113122, 0.82185811736948, 0.82198392051028, 0.82210969057608, 0.82223542758932, 0.82236113157242, 0.82248680254777, 0.82261244053775, 0.8227380455647, 0.82286361765094, 0.82298915681877, 0.82311466309045, 0.82324013648824, 0.82336557703436, 0.82349098475101, 0.82361635966036, 0.82374170178456, 0.82386701114575, 0.82399228776601, 0.82411753166744, 0.82424274287209, 0.82436792140198, 0.82449306727913, 0.82461818052551, 0.82474326116309, 0.8248683092138, 0.82499332469955, 0.82511830764223, 0.8252432580637, 0.8253681759858, 0.82549306143036, 0.82561791441916, 0.82574273497397, 0.82586752311654, 0.82599227886859, 0.82611700225181, 0.8262416932879, 0.82636635199848, 0.82649097840521, 0.82661557252967, 0.82674013439346, 0.82686466401813, 0.82698916142521, 0.82711362663623, 0.82723805967266, 0.82736246055598, 0.82748682930762, 0.82761116594902, 0.82773547050155, 0.82785974298661, 0.82798398342553, 0.82810819183965, 0.82823236825028, 0.82835651267868, 0.82848062514614, 0.82860470567387, 0.8287287542831, 0.82885277099501, 0.82897675583078, 0.82910070881155, 0.82922462995845, 0.82934851929257, 0.82947237683499, 0.82959620260677, 0.82971999662894, 0.82984375892252, 0.82996748950849, 0.83009118840781, 0.83021485564144, 0.83033849123029, 0.83046209519525, 0.83058566755722, 0.83070920833704, 0.83083271755554, 0.83095619523354, 0.83107964139182, 0.83120305605115, 0.83132643923228, 0.83144979095591, 0.83157311124277, 0.83169640011351, 0.83181965758881, 0.83194288368929, 0.83206607843556, 0.83218924184822, 0.83231237394784, 0.83243547475495, 0.8325585442901, 0.83268158257377, 0.83280458962646, 0.83292756546861, 0.83305051012068, 0.83317342360308, 0.8332963059362, 0.83341915714041, 0.83354197723608, 0.83366476624353, 0.83378752418306, 0.83391025107498, 0.83403294693954, 0.83415561179699, 0.83427824566755, 0.83440084857143, 0.83452342052882, 0.83464596155986, 0.8347684716847, 0.83489095092346, 0.83501339929623, 0.83513581682309, 0.8352582035241, 0.83538055941929, 0.83550288452867, 0.83562517887224, 0.83574744246996, 0.83586967534178, 0.83599187750764, 0.83611404898745, 0.83623618980108, 0.83635829996842, 0.83648037950929, 0.83660242844354, 0.83672444679096, 0.83684643457133, 0.83696839180443, 0.83709031850999, 0.83721221470774, 0.83733408041738, 0.83745591565859, 0.83757772045102, 0.83769949481433, 0.83782123876812, 0.83794295233201, 0.83806463552557, 0.83818628836835, 0.8383079108799, 0.83842950307973, 0.83855106498734, 0.83867259662221, 0.8387940980038, 0.83891556915155, 0.83903701008487, 0.83915842082315, 0.83927980138578, 0.83940115179212, 0.83952247206149, 0.83964376221322, 0.8397650222666, 0.83988625224092, 0.84000745215542, 0.84012862202935, 0.84024976188192, 0.84037087173233, 0.84049195159976, 0.84061300150337, 0.84073402146229, 0.84085501149565, 0.84097597162254, 0.84109690186204, 0.84121780223321, 0.84133867275509, 0.8414595134467, 0.84158032432705, 0.84170110541511, 0.84182185672985, 0.84194257829021, 0.84206327011511, 0.84218393222346, 0.84230456463414, 0.84242516736601, 0.84254574043793, 0.84266628386871, 0.84278679767717, 0.84290728188209, 0.84302773650224, 0.84314816155637, 0.84326855706321, 0.84338892304148, 0.84350925950986, 0.84362956648702, 0.84374984399163, 0.84387009204232, 0.8439903106577, 0.84411049985637, 0.8442306596569, 0.84435079007786, 0.84447089113779, 0.84459096285521, 0.84471100524862, 0.8448310183365, 0.84495100213733, 0.84507095666954, 0.84519088195156, 0.84531077800181, 0.84543064483867, 0.84555048248051, 0.84567029094569, 0.84579007025254, 0.84590982041937, 0.8460295414645, 0.84614923340618, 0.84626889626268, 0.84638853005225, 0.84650813479311, 0.84662771050346, 0.84674725720149, 0.84686677490536, 0.84698626363324, 0.84710572340323, 0.84722515423347, 0.84734455614205, 0.84746392914704, 0.84758327326649, 0.84770258851846, 0.84782187492096, 0.847941132492, 0.84806036124956, 0.84817956121161, 0.8482987323961, 0.84841787482096, 0.84853698850411, 0.84865607346343, 0.84877512971681, 0.84889415728211, 0.84901315617717, 0.84913212641982, 0.84925106802785, 0.84936998101906, 0.84948886541122, 0.84960772122208, 0.84972654846937, 0.84984534717081, 0.84996411734411, 0.85008285900694, 0.85020157217697, 0.85032025687184, 0.85043891310918, 0.8505575409066, 0.85067614028171, 0.85079471125206, 0.85091325383523, 0.85103176804875, 0.85115025391014, 0.85126871143692, 0.85138714064657, 0.85150554155656, 0.85162391418434, 0.85174225854736, 0.85186057466303, 0.85197886254875, 0.85209712222191, 0.85221535369987, 0.85233355699999, 0.8524517321396, 0.85256987913602, 0.85268799800653, 0.85280608876843, 0.85292415143898, 0.85304218603542, 0.85316019257499, 0.8532781710749, 0.85339612155234, 0.85351404402449, 0.85363193850852, 0.85374980502157, 0.85386764358077, 0.85398545420323, 0.85410323690605, 0.8542209917063, 0.85433871862104, 0.85445641766732, 0.85457408886216, 0.85469173222257, 0.85480934776555, 0.85492693550808, 0.85504449546711, 0.85516202765959, 0.85527953210245, 0.85539700881259, 0.8555144578069, 0.85563187910228, 0.85574927271557, 0.85586663866362, 0.85598397696325, 0.85610128763129, 0.85621857068451, 0.85633582613971, 0.85645305401364, 0.85657025432304, 0.85668742708465, 0.85680457231518, 0.85692169003132, 0.85703878024975, 0.85715584298714, 0.85727287826013, 0.85738988608536, 0.85750686647944, 0.85762381945896, 0.85774074504051, 0.85785764324066, 0.85797451407595, 0.85809135756292, 0.85820817371809, 0.85832496255796, 0.858441724099, 0.85855845835771, 0.85867516535051, 0.85879184509386, 0.85890849760418, 0.85902512289786, 0.85914172099131, 0.85925829190089, 0.85937483564296, 0.85949135223386, 0.85960784168992, 0.85972430402746, 0.85984073926275, 0.85995714741209, 0.86007352849173, 0.86018988251793, 0.86030620950691, 0.86042250947489, 0.86053878243806, 0.86065502841262, 0.86077124741474, 0.86088743946056, 0.86100360456622, 0.86111974274785, 0.86123585402154, 0.8613519384034, 0.8614679959095, 0.8615840265559, 0.86170003035863, 0.86181600733374, 0.86193195749723, 0.8620478808651, 0.86216377745334, 0.86227964727791, 0.86239549035477, 0.86251130669984, 0.86262709632906, 0.86274285925832, 0.86285859550353, 0.86297430508055, 0.86308998800524, 0.86320564429345, 0.86332127396102, 0.86343687702374, 0.86355245349743, 0.86366800339787, 0.86378352674083, 0.86389902354206, 0.8640144938173, 0.86412993758228, 0.8642453548527, 0.86436074564426, 0.86447610997264, 0.8645914478535, 0.86470675930249, 0.86482204433525, 0.8649373029674, 0.86505253521453, 0.86516774109224, 0.86528292061611, 0.86539807380169, 0.86551320066453, 0.86562830122016, 0.86574337548409, 0.86585842347183, 0.86597344519887, 0.86608844068066, 0.86620340993268, 0.86631835297036, 0.86643326980913, 0.8665481604644, 0.86666302495157, 0.86677786328602, 0.86689267548313, 0.86700746155825, 0.86712222152671, 0.86723695540384, 0.86735166320496, 0.86746634494536, 0.86758100064032, 0.86769563030511, 0.86781023395498, 0.86792481160517, 0.8680393632709, 0.86815388896739, 0.86826838870983, 0.8683828625134, 0.86849731039326, 0.86861173236458, 0.86872612844249, 0.86884049864211, 0.86895484297855, 0.86906916146691, 0.86918345412226, 0.86929772095969, 0.86941196199423, 0.86952617724093, 0.86964036671481, 0.86975453043089, 0.86986866840416, 0.86998278064959, 0.87009686718217, 0.87021092801685, 0.87032496316855, 0.87043897265222, 0.87055295648277, 0.87066691467508, 0.87078084724405, 0.87089475420455, 0.87100863557143, 0.87112249135954, 0.8712363215837, 0.87135012625873, 0.87146390539943, 0.87157765902059, 0.87169138713698, 0.87180508976336, 0.87191876691448, 0.87203241860507, 0.87214604484984, 0.87225964566351, 0.87237322106075, 0.87248677105626, 0.8726002956647, 0.8727137949007, 0.87282726877892, 0.87294071731397, 0.87305414052046, 0.87316753841299, 0.87328091100614, 0.87339425831447, 0.87350758035255, 0.87362087713492, 0.87373414867609, 0.8738473949906, 0.87396061609293, 0.87407381199758, 0.87418698271901, 0.8743001282717, 0.87441324867008, 0.8745263439286, 0.87463941406167, 0.8747524590837, 0.87486547900908, 0.87497847385219, 0.87509144362741, 0.87520438834908, 0.87531730803156, 0.87543020268915, 0.87554307233618, 0.87565591698696, 0.87576873665576, 0.87588153135687, 0.87599430110454, 0.87610704591302, 0.87621976579655, 0.87633246076936, 0.87644513084564, 0.8765577760396, 0.87667039636542, 0.87678299183727, 0.87689556246931, 0.87700810827568, 0.87712062927052, 0.87723312546793, 0.87734559688203, 0.87745804352691, 0.87757046541664, 0.8776828625653, 0.87779523498694, 0.8779075826956, 0.8780199057053, 0.87813220403006, 0.87824447768389, 0.87835672668077, 0.87846895103468, 0.87858115075959, 0.87869332586943, 0.87880547637817, 0.87891760229971, 0.87902970364797, 0.87914178043685, 0.87925383268024, 0.87936586039202, 0.87947786358604, 0.87958984227616, 0.87970179647622, 0.87981372620003, 0.87992563146141, 0.88003751227415, 0.88014936865206, 0.88026120060889, 0.88037300815841, 0.88048479131438, 0.88059655009052, 0.88070828450056, 0.88081999455822, 0.88093168027718, 0.88104334167115, 0.88115497875379, 0.88126659153877, 0.88137818003973, 0.88148974427031, 0.88160128424414, 0.88171279997484, 0.88182429147599, 0.88193575876119, 0.88204720184402, 0.88215862073803, 0.88227001545679, 0.88238138601382, 0.88249273242266, 0.88260405469681, 0.88271535284979, 0.88282662689509, 0.88293787684617, 0.88304910271651, 0.88316030451955, 0.88327148226875, 0.88338263597754, 0.88349376565931, 0.8836048713275, 0.88371595299548, 0.88382701067664, 0.88393804438435, 0.88404905413196, 0.88416003993282, 0.88427100180027, 0.88438193974762, 0.88449285378818, 0.88460374393526, 0.88471461020214, 0.88482545260208, 0.88493627114836, 0.88504706585422, 0.88515783673289, 0.88526858379762, 0.8853793070616, 0.88549000653805, 0.88560068224015, 0.88571133418109, 0.88582196237402, 0.88593256683211, 0.88604314756849, 0.88615370459631, 0.88626423792867, 0.88637474757869, 0.88648523355947, 0.88659569588409, 0.88670613456562, 0.88681654961713, 0.88692694105166, 0.88703730888225, 0.88714765312194, 0.88725797378373, 0.88736827088062, 0.88747854442563, 0.88758879443171, 0.88769902091184, 0.88780922387898, 0.88791940334608, 0.88802955932606, 0.88813969183186, 0.88824980087638, 0.88835988647252, 0.88846994863318, 0.88857998737123, 0.88869000269953, 0.88879999463094, 0.8889099631783, 0.88901990835445, 0.8891298301722, 0.88923972864437, 0.88934960378375, 0.88945945560313, 0.88956928411528, 0.88967908933297, 0.88978887126895, 0.88989862993595, 0.89000836534672, 0.89011807751397, 0.89022776645041, 0.89033743216873, 0.89044707468162, 0.89055669400175, 0.89066629014179, 0.89077586311439, 0.89088541293218, 0.89099493960781, 0.89110444315387, 0.891213923583, 0.89132338090777, 0.89143281514078, 0.89154222629459, 0.89165161438178, 0.89176097941489, 0.89187032140647, 0.89197964036904, 0.89208893631513, 0.89219820925724, 0.89230745920786, 0.8924166861795, 0.89252589018461, 0.89263507123567, 0.89274422934513, 0.89285336452543, 0.892962476789, 0.89307156614826, 0.89318063261563, 0.8932896762035, 0.89339869692426, 0.89350769479029, 0.89361666981395, 0.8937256220076, 0.89383455138359, 0.89394345795425, 0.89405234173191, 0.89416120272887, 0.89427004095743, 0.8943788564299, 0.89448764915855, 0.89459641915565, 0.89470516643345, 0.89481389100422, 0.89492259288018, 0.89503127207357, 0.8951399285966, 0.89524856246147, 0.89535717368039, 0.89546576226553, 0.89557432822908, 0.89568287158319, 0.89579139234002, 0.89589989051172, 0.8960083661104, 0.89611681914821, 0.89622524963724, 0.89633365758959, 0.89644204301737, 0.89655040593265, 0.89665874634749, 0.89676706427396, 0.8968753597241, 0.89698363270996, 0.89709188324355, 0.89720011133691, 0.89730831700203, 0.89741650025092, 0.89752466109555, 0.8976327995479, 0.89774091561995, 0.89784900932364, 0.89795708067092, 0.89806512967373, 0.89817315634399, 0.89828116069361, 0.8983891427345, 0.89849710247855, 0.89860503993764, 0.89871295512366, 0.89882084804845, 0.89892871872388, 0.89903656716179, 0.89914439337401, 0.89925219737236, 0.89935997916865, 0.89946773877469, 0.89957547620227, 0.89968319146317, 0.89979088456917, 0.89989855553201, 0.90000620436347, 0.90011383107527, 0.90022143567915, 0.90032901818684, 0.90043657861003, 0.90054411696044, 0.90065163324976, 0.90075912748966, 0.90086659969183, 0.90097404986791, 0.90108147802956, 0.90118888418844, 0.90129626835615, 0.90140363054434, 0.9015109707646, 0.90161828902855, 0.90172558534777, 0.90183285973385, 0.90194011219836, 0.90204734275286, 0.9021545514089, 0.90226173817804, 0.90236890307179, 0.90247604610169, 0.90258316727925, 0.90269026661597, 0.90279734412334, 0.90290439981286, 0.90301143369599, 0.90311844578421, 0.90322543608895, 0.90333240462168, 0.90343935139383, 0.90354627641682, 0.90365317970207, 0.90376006126098, 0.90386692110496, 0.90397375924538, 0.90408057569364, 0.90418737046109, 0.9042941435591, 0.90440089499901, 0.90450762479217, 0.9046143329499, 0.90472101948352, 0.90482768440435, 0.90493432772368, 0.90504094945281, 0.90514754960302, 0.90525412818559, 0.90536068521176, 0.90546722069281, 0.90557373463997, 0.90568022706448, 0.90578669797757, 0.90589314739044, 0.90599957531431, 0.90610598176037, 0.90621236673981, 0.90631873026381, 0.90642507234354, 0.90653139299016, 0.90663769221481, 0.90674397002864, 0.90685022644278, 0.90695646146835, 0.90706267511647, 0.90716886739823, 0.90727503832474, 0.90738118790707, 0.90748731615631, 0.90759342308351, 0.90769950869974, 0.90780557301604, 0.90791161604346, 0.90801763779301, 0.90812363827573, 0.90822961750262, 0.90833557548469, 0.90844151223292, 0.90854742775831, 0.90865332207181, 0.90875919518441, 0.90886504710706, 0.90897087785069, 0.90907668742626, 0.90918247584469, 0.90928824311689, 0.90939398925379, 0.90949971426627, 0.90960541816524, 0.90971110096157, 0.90981676266615, 0.90992240328983, 0.91002802284347, 0.91013362133792, 0.91023919878401, 0.91034475519258, 0.91045029057445, 0.91055580494043, 0.91066129830131, 0.9107667706679, 0.91087222205097, 0.91097765246131, 0.91108306190968, 0.91118845040683, 0.91129381796352, 0.91139916459048, 0.91150449029845, 0.91160979509815, 0.91171507900029, 0.91182034201557, 0.91192558415469, 0.91203080542834, 0.9121360058472, 0.91224118542193, 0.9123463441632, 0.91245148208165, 0.91255659918793, 0.91266169549267, 0.91276677100651, 0.91287182574004, 0.91297685970389, 0.91308187290864, 0.9131868653649, 0.91329183708324, 0.91339678807424, 0.91350171834845, 0.91360662791644, 0.91371151678875, 0.91381638497592, 0.91392123248848, 0.91402605933694, 0.91413086553183, 0.91423565108365, 0.91434041600288, 0.91444516030002, 0.91454988398555, 0.91465458706992, 0.91475926956361, 0.91486393147707, 0.91496857282074, 0.91507319360505, 0.91517779384043, 0.9152823735373, 0.91538693270607, 0.91549147135713, 0.91559598950089, 0.91570048714772, 0.915804964308, 0.9159094209921, 0.91601385721037, 0.91611827297317, 0.91622266829084, 0.9163270431737, 0.91643139763209, 0.91653573167633, 0.91664004531671, 0.91674433856353, 0.9168486114271, 0.91695286391769, 0.91705709604558, 0.91716130782103, 0.9172654992543, 0.91736967035564, 0.91747382113529, 0.91757795160349, 0.91768206177045, 0.9177861516464, 0.91789022124154, 0.91799427056606, 0.91809829963018, 0.91820230844405, 0.91830629701787, 0.9184102653618, 0.91851421348599, 0.91861814140059, 0.91872204911576, 0.91882593664161, 0.91892980398828, 0.91903365116588, 0.91913747818453, 0.91924128505432, 0.91934507178534, 0.91944883838769, 0.91955258487143, 0.91965631124664, 0.91976001752337, 0.91986370371169, 0.91996736982162, 0.92007101586321, 0.92017464184649, 0.92027824778147, 0.92038183367817, 0.92048539954659, 0.92058894539672, 0.92069247123856, 0.92079597708208, 0.92089946293726, 0.92100292881405, 0.92110637472242, 0.92120980067231, 0.92131320667366, 0.9214165927364, 0.92151995887045, 0.92162330508573, 0.92172663139216, 0.92182993779962, 0.92193322431801, 0.92203649095721, 0.9221397377271, 0.92224296463755, 0.92234617169842, 0.92244935891955, 0.9225525263108, 0.922655673882, 0.92275880164297, 0.92286190960355, 0.92296499777353, 0.92306806616273, 0.92317111478095, 0.92327414363797, 0.92337715274357, 0.92348014210753, 0.92358311173962, 0.92368606164958, 0.92378899184718, 0.92389190234216, 0.92399479314424, 0.92409766426317, 0.92420051570864, 0.92430334749039, 0.9244061596181, 0.92450895210149, 0.92461172495023, 0.924714478174, 0.92481721178249, 0.92491992578535, 0.92502262019224, 0.92512529501282, 0.92522795025672, 0.92533058593358, 0.92543320205302, 0.92553579862467, 0.92563837565814, 0.92574093316303, 0.92584347114894, 0.92594598962546, 0.92604848860216, 0.92615096808863, 0.92625342809442, 0.9263558686291, 0.92645828970222, 0.92656069132331, 0.92666307350193, 0.92676543624759, 0.92686777956982, 0.92697010347813, 0.92707240798202, 0.92717469309099, 0.92727695881454, 0.92737920516215, 0.92748143214329, 0.92758363976743, 0.92768582804404, 0.92778799698256, 0.92789014659245, 0.92799227688313, 0.92809438786405, 0.92819647954462, 0.92829855193427, 0.92840060504239, 0.9285026388784, 0.92860465345169, 0.92870664877163, 0.92880862484762, 0.92891058168903, 0.92901251930521, 0.92911443770553, 0.92921633689934, 0.92931821689598, 0.92942007770478, 0.92952191933507, 0.92962374179617, 0.92972554509741, 0.92982732924807, 0.92992909425746, 0.93003084013488, 0.9301325668896, 0.93023427453091, 0.93033596306807, 0.93043763251034, 0.93053928286699, 0.93064091414726, 0.93074252636038, 0.9308441195156, 0.93094569362213, 0.93104724868921, 0.93114878472604, 0.93125030174182, 0.93135179974575, 0.93145327874703, 0.93155473875483, 0.93165617977833, 0.93175760182671, 0.93185900490912, 0.93196038903471, 0.93206175421265, 0.93216310045205, 0.93226442776207, 0.93236573615182, 0.93246702563043, 0.932568296207, 0.93266954789064, 0.93277078069045, 0.93287199461552, 0.93297318967494, 0.93307436587777, 0.9331755232331, 0.93327666174997, 0.93337778143746, 0.9334788823046, 0.93357996436044, 0.93368102761401, 0.93378207207435, 0.93388309775046, 0.93398410465137, 0.93408509278608, 0.93418606216359, 0.93428701279289, 0.93438794468298, 0.93448885784282, 0.93458975228139, 0.93469062800766, 0.93479148503057, 0.9348923233591, 0.93499314300217, 0.93509394396873, 0.9351947262677, 0.93529548990801, 0.93539623489858, 0.93549696124832, 0.93559766896612, 0.93569835806089, 0.93579902854151, 0.93589968041687, 0.93600031369584, 0.9361009283873, 0.93620152450009, 0.93630210204308, 0.93640266102512, 0.93650320145505, 0.9366037233417, 0.9367042266939, 0.93680471152047, 0.93690517783022, 0.93700562563197, 0.93710605493451, 0.93720646574664, 0.93730685807715, 0.93740723193481, 0.93750758732841, 0.9376079242667, 0.93770824275844, 0.9378085428124, 0.93790882443732, 0.93800908764194, 0.93810933243499, 0.9382095588252, 0.93830976682128, 0.93840995643197, 0.93851012766595, 0.93861028053194, 0.93871041503862, 0.93881053119468, 0.9389106290088, 0.93901070848966, 0.93911076964593, 0.93921081248626, 0.9393108370193, 0.93941084325372, 0.93951083119813, 0.9396108008612, 0.93971075225152, 0.93981068537774, 0.93991060024847, 0.9400104968723, 0.94011037525785, 0.94021023541371, 0.94031007734847, 0.9404099010707, 0.94050970658899, 0.9406094939119, 0.940709263048, 0.94080901400584, 0.94090874679398, 0.94100846142094, 0.94110815789528, 0.94120783622552, 0.94130749642018, 0.94140713848778, 0.94150676243684, 0.94160636827585, 0.94170595601331, 0.94180552565772, 0.94190507721756, 0.94200461070131, 0.94210412611743, 0.94220362347441, 0.94230310278068, 0.94240256404472, 0.94250200727496, 0.94260143247985, 0.94270083966781, 0.94280022884728, 0.94289960002668, 0.94299895321441, 0.9430982884189, 0.94319760564854, 0.94329690491173, 0.94339618621685, 0.9434954495723, 0.94359469498644, 0.94369392246764, 0.94379313202428, 0.94389232366471, 0.94399149739727, 0.94409065323033, 0.94418979117221, 0.94428891123124, 0.94438801341576, 0.94448709773409, 0.94458616419453, 0.9446852128054, 0.94478424357499, 0.94488325651161, 0.94498225162354, 0.94508122891906, 0.94518018840646, 0.945279130094, 0.94537805398994, 0.94547696010255, 0.94557584844007, 0.94567471901076, 0.94577357182285, 0.94587240688457, 0.94597122420415, 0.94607002378982, 0.94616880564979, 0.94626756979226, 0.94636631622544, 0.94646504495753, 0.94656375599672, 0.94666244935118, 0.94676112502911, 0.94685978303866, 0.94695842338802, 0.94705704608533, 0.94715565113875, 0.94725423855643, 0.94735280834651, 0.94745136051713, 0.94754989507642, 0.94764841203249, 0.94774691139347, 0.94784539316747, 0.9479438573626, 0.94804230398695, 0.94814073304861, 0.94823914455569, 0.94833753851624, 0.94843591493836, 0.94853427383011, 0.94863261519955, 0.94873093905475, 0.94882924540375, 0.94892753425459, 0.94902580561533, 0.94912405949399, 0.94922229589859, 0.94932051483717, 0.94941871631774, 0.9495169003483, 0.94961506693687, 0.94971321609143, 0.94981134781998, 0.94990946213052, 0.950007559031, 0.95010563852943, 0.95020370063375, 0.95030174535193, 0.95039977269194, 0.95049778266171, 0.9505957752692, 0.95069375052235, 0.95079170842908, 0.95088964899733, 0.95098757223502, 0.95108547815006, 0.95118336675036, 0.95128123804383, 0.95137909203837, 0.95147692874186, 0.9515747481622, 0.95167255030726, 0.95177033518493, 0.95186810280306, 0.95196585316953, 0.95206358629219, 0.95216130217889, 0.95225900083748, 0.9523566822758, 0.95245434650169, 0.95255199352296, 0.95264962334746, 0.95274723598299, 0.95284483143737, 0.95294240971839, 0.95303997083387, 0.9531375147916, 0.95323504159936, 0.95333255126494, 0.95343004379612, 0.95352751920067, 0.95362497748635, 0.95372241866092, 0.95381984273215, 0.95391724970777, 0.95401463959553, 0.95411201240318, 0.95420936813844, 0.95430670680903, 0.95440402842269, 0.95450133298712, 0.95459862051003, 0.95469589099913, 0.95479314446212, 0.95489038090669, 0.95498760034053, 0.95508480277131, 0.95518198820672, 0.95527915665442, 0.95537630812208, 0.95547344261736, 0.95557056014791, 0.95566766072138, 0.95576474434541, 0.95586181102765, 0.95595886077571, 0.95605589359723, 0.95615290949983, 0.95624990849112, 0.95634689057871, 0.95644385577021, 0.95654080407321, 0.95663773549531, 0.95673465004409, 0.95683154772713, 0.95692842855202, 0.95702529252632, 0.9571221396576, 0.95721896995341, 0.95731578342131, 0.95741258006886, 0.95750935990359, 0.95760612293304, 0.95770286916475, 0.95779959860623, 0.95789631126502, 0.95799300714863, 0.95808968626457, 0.95818634862035, 0.95828299422346, 0.9583796230814, 0.95847623520165, 0.95857283059172, 0.95866940925906, 0.95876597121115, 0.95886251645547, 0.95895904499947, 0.95905555685061, 0.95915205201634, 0.95924853050412, 0.95934499232136, 0.95944143747553, 0.95953786597403, 0.95963427782431, 0.95973067303377, 0.95982705160984, 0.95992341355991, 0.9600197588914, 0.96011608761171, 0.96021239972821, 0.96030869524831, 0.96040497417938, 0.96050123652881, 0.96059748230395, 0.96069371151219, 0.96078992416087, 0.96088612025736, 0.96098229980901, 0.96107846282315, 0.96117460930714, 0.96127073926831, 0.96136685271398, 0.96146294965147, 0.96155903008812, 0.96165509403123, 0.96175114148811, 0.96184717246606, 0.96194318697238, 0.96203918501437, 0.96213516659931, 0.96223113173449, 0.96232708042718, 0.96242301268465, 0.96251892851417, 0.962614827923, 0.96271071091841, 0.96280657750763, 0.96290242769792, 0.96299826149652, 0.96309407891066, 0.96318987994757, 0.96328566461449, 0.96338143291862, 0.96347718486719, 0.9635729204674, 0.96366863972647, 0.96376434265158, 0.96386002924994, 0.96395569952874, 0.96405135349515, 0.96414699115636, 0.96424261251955, 0.96433821759188, 0.96443380638051, 0.96452937889261, 0.96462493513533, 0.96472047511582, 0.96481599884123, 0.96491150631868, 0.96500699755532, 0.96510247255827, 0.96519793133466, 0.96529337389161, 0.96538880023623, 0.96548421037563, 0.96557960431691, 0.96567498206717, 0.9657703436335, 0.965865689023, 0.96596101824274, 0.96605633129981, 0.96615162820128, 0.96624690895422, 0.96634217356568, 0.96643742204274, 0.96653265439244, 0.96662787062183, 0.96672307073795, 0.96681825474785, 0.96691342265855, 0.9670085744771, 0.9671037102105, 0.96719882986578, 0.96729393344996, 0.96738902097003, 0.96748409243302, 0.96757914784591, 0.96767418721569, 0.96776921054937, 0.96786421785392, 0.96795920913633, 0.96805418440356, 0.96814914366259, 0.96824408692038, 0.96833901418389, 0.96843392546008, 0.9685288207559, 0.96862370007829, 0.96871856343419, 0.96881341083054, 0.96890824227427, 0.96900305777231, 0.96909785733157, 0.96919264095898, 0.96928740866143, 0.96938216044585, 0.96947689631914, 0.96957161628818, 0.96966632035987, 0.9697610085411, 0.96985568083875, 0.9699503372597, 0.97004497781082, 0.97013960249898, 0.97023421133104, 0.97032880431387, 0.9704233814543, 0.9705179427592, 0.97061248823541, 0.97070701788977, 0.97080153172911, 0.97089602976025, 0.97099051199004, 0.97108497842528, 0.97117942907279, 0.97127386393939, 0.97136828303187, 0.97146268635705, 0.97155707392171, 0.97165144573265, 0.97174580179666, 0.97184014212052, 0.971934466711, 0.97202877557488, 0.97212306871893, 0.97221734614991, 0.97231160787458, 0.9724058538997, 0.97250008423201, 0.97259429887825, 0.97268849784518, 0.97278268113953, 0.97287684876801, 0.97297100073737, 0.97306513705433, 0.97315925772559, 0.97325336275788, 0.9733474521579, 0.97344152593235, 0.97353558408794, 0.97362962663134, 0.97372365356927, 0.97381766490839, 0.97391166065539, 0.97400564081695, 0.97409960539973, 0.9741935544104, 0.97428748785563, 0.97438140574206, 0.97447530807636, 0.97456919486516, 0.97466306611512, 0.97475692183287, 0.97485076202504, 0.97494458669827, 0.97503839585917, 0.97513218951438, 0.9752259676705, 0.97531973033415, 0.97541347751193, 0.97550720921044, 0.97560092543629, 0.97569462619606, 0.97578831149635, 0.97588198134374, 0.9759756357448, 0.97606927470611, 0.97616289823425, 0.97625650633577, 0.97635009901725, 0.97644367628523, 0.97653723814627, 0.97663078460692, 0.97672431567372, 0.9768178313532, 0.97691133165191, 0.97700481657638, 0.97709828613312, 0.97719174032867, 0.97728517916953, 0.97737860266222, 0.97747201081325, 0.97756540362911, 0.97765878111632, 0.97775214328136, 0.97784549013072, 0.97793882167089, 0.97803213790835, 0.97812543884957, 0.97821872450103, 0.9783119948692, 0.97840524996054, 0.97849848978151, 0.97859171433856, 0.97868492363814, 0.9787781176867, 0.97887129649068, 0.97896446005652, 0.97905760839065, 0.9791507414995, 0.97924385938948, 0.97933696206703, 0.97943004953856, 0.97952312181047, 0.97961617888918, 0.97970922078108, 0.97980224749258, 0.97989525903006, 0.97998825539992, 0.98008123660853, 0.98017420266229, 0.98026715356757, 0.98036008933073, 0.98045300995815, 0.98054591545619, 0.9806388058312, 0.98073168108955, 0.98082454123758, 0.98091738628164, 0.98101021622807, 0.9811030310832, 0.98119583085337, 0.98128861554492, 0.98138138516415, 0.9814741397174, 0.98156687921097, 0.98165960365119, 0.98175231304435, 0.98184500739677, 0.98193768671473, 0.98203035100453, 0.98212300027247, 0.98221563452484, 0.9823082537679, 0.98240085800794, 0.98249344725123, 0.98258602150405, 0.98267858077265, 0.9827711250633, 0.98286365438225, 0.98295616873576, 0.98304866813008, 0.98314115257144, 0.98323362206609, 0.98332607662026, 0.98341851624018, 0.98351094093209, 0.9836033507022, 0.98369574555673, 0.9837881255019, 0.98388049054392, 0.98397284068898, 0.98406517594331, 0.98415749631309, 0.98424980180451, 0.98434209242377, 0.98443436817705, 0.98452662907054, 0.9846188751104, 0.98471110630281, 0.98480332265395, 0.98489552416998, 0.98498771085705, 0.98507988272132, 0.98517203976895, 0.98526418200608, 0.98535630943885, 0.98544842207342, 0.98554051991591, 0.98563260297245, 0.98572467124917, 0.9858167247522, 0.98590876348766, 0.98600078746165, 0.9860927966803, 0.98618479114971, 0.98627677087598, 0.98636873586521, 0.98646068612349, 0.98655262165692, 0.98664454247159, 0.98673644857357, 0.98682833996895, 0.9869202166638, 0.98701207866418, 0.98710392597618, 0.98719575860584, 0.98728757655923, 0.98737937984241, 0.98747116846142, 0.98756294242231, 0.98765470173112, 0.98774644639389, 0.98783817641665, 0.98792989180544, 0.98802159256628, 0.9881132787052, 0.9882049502282, 0.98829660714132, 0.98838824945055, 0.9884798771619, 0.98857149028138, 0.98866308881498, 0.98875467276871, 0.98884624214854, 0.98893779696046, 0.98902933721047, 0.98912086290453, 0.98921237404863, 0.98930387064872, 0.98939535271079, 0.98948682024078, 0.98957827324467, 0.9896697117284, 0.98976113569793, 0.9898525451592, 0.98994394011816, 0.99003532058075, 0.99012668655289, 0.99021803804053, 0.99030937504959, 0.99040069758599, 0.99049200565565, 0.99058329926449, 0.99067457841843, 0.99076584312336, 0.99085709338519, 0.99094832920983, 0.99103955060316, 0.99113075757109, 0.99122195011949, 0.99131312825426, 0.99140429198128, 0.99149544130641, 0.99158657623554, 0.99167769677454, 0.99176880292926, 0.99185989470558, 0.99195097210934, 0.9920420351464, 0.99213308382262, 0.99222411814383, 0.99231513811589, 0.99240614374462, 0.99249713503587, 0.99258811199546, 0.99267907462922, 0.99277002294297, 0.99286095694254, 0.99295187663373, 0.99304278202236, 0.99313367311425, 0.99322454991518, 0.99331541243097, 0.9934062606674, 0.99349709463028, 0.99358791432538, 0.9936787197585, 0.99376951093542, 0.99386028786191, 0.99395105054375, 0.99404179898671, 0.99413253319655, 0.99422325317903, 0.99431395893992, 0.99440465048497, 0.99449532781994, 0.99458599095056, 0.99467663988258, 0.99476727462174, 0.99485789517378, 0.99494850154443, 0.99503909373943, 0.99512967176448, 0.99522023562532, 0.99531078532766, 0.99540132087722, 0.99549184227971, 0.99558234954083, 0.99567284266629, 0.99576332166178, 0.99585378653299, 0.99594423728564, 0.99603467392539, 0.99612509645793, 0.99621550488895, 0.99630589922412, 0.99639627946911, 0.99648664562959, 0.99657699771124, 0.9966673357197, 0.99675765966065, 0.99684796953972, 0.99693826536259, 0.99702854713488, 0.99711881486225, 0.99720906855034, 0.99729930820478, 0.99738953383121, 0.99747974543525, 0.99756994302253, 0.99766012659867, 0.99775029616929, 0.99784045174, 0.99793059331643, 0.99802072090416, 0.99811083450881, 0.99820093413598, 0.99829101979126, 0.99838109148024, 0.99847114920852, 0.99856119298169, 0.99865122280531, 0.99874123868498, 0.99883124062626, 0.99892122863473, 0.99901120271595, 0.99910116287549, 0.99919110911892, 0.99928104145177, 0.99937095987962, 0.99946086440801, 0.99955075504248, 0.99964063178859, 0.99973049465185, 0.99982034363783, 0.99991017875203, 1, }; inline float convex_exponant( float value ) { return compute_exponant( value, convex_exponant_table, convex_exponant_table_size ); } #endif //H2C_EXPONENTIAL_TABLES_H /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/basics/instrument.cpp000066400000000000000000000241571211146647700230510ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include #include #include namespace H2Core { const char* Instrument::__class_name = "Instrument"; Instrument::Instrument( const int id, const QString& name, ADSR* adsr ) : Object( __class_name ) , __id( id ) , __name( name ) , __gain( 1.0 ) , __volume( 1.0 ) , __pan_l( 1.0 ) , __pan_r( 1.0 ) , __peak_l( 0.0 ) , __peak_r( 0.0 ) , __adsr( adsr ) , __filter_active( false ) , __filter_cutoff( 1.0 ) , __filter_resonance( 0.0 ) , __random_pitch_factor( 0.0 ) , __midi_out_note( MIDI_MIDDLE_C ) , __midi_out_channel( -1 ) , __stop_notes( false ) , __active( true ) , __soloed( false ) , __muted( false ) , __mute_group( -1 ) , __queued( 0 ) { if ( __adsr==0 ) __adsr = new ADSR(); for ( int i=0; iget_id() ) , __name( other->get_name() ) , __gain( other->__gain ) , __volume( other->get_volume() ) , __pan_l( other->get_pan_l() ) , __pan_r( other->get_pan_r() ) , __peak_l( other->get_peak_l() ) , __peak_r( other->get_peak_r() ) , __adsr( new ADSR( *( other->get_adsr() ) ) ) , __filter_active( other->is_filter_active() ) , __filter_cutoff( other->get_filter_cutoff() ) , __filter_resonance( other->get_filter_resonance() ) , __random_pitch_factor( other->get_random_pitch_factor() ) , __midi_out_note( other->get_midi_out_note() ) , __midi_out_channel( other->get_midi_out_channel() ) , __stop_notes( other->is_stop_notes() ) , __active( other->is_active() ) , __soloed( other->is_soloed() ) , __muted( other->is_muted() ) , __mute_group( other->get_mute_group() ) , __queued( other->is_queued() ) { for ( int i=0; iget_fx_level( i ); for ( int i=0; iget_layer( i ); if ( other_layer ) { __layers[i] = new InstrumentLayer( other_layer ); } else { __layers[i] = 0; } } } Instrument::~Instrument() { for ( int i=0; iload_from( drumkit_name, instrument_name, false ); return i; } void Instrument::load_from( Drumkit* drumkit, Instrument* instrument, bool is_live ) { for ( int i=0; iget_layer( i ); InstrumentLayer* my_layer = this->get_layer( i ); if( src_layer==0 ) { if ( is_live ) AudioEngine::get_instance()->lock( RIGHT_HERE ); this->set_layer( NULL, i ); if ( is_live ) AudioEngine::get_instance()->unlock(); } else { QString sample_path = drumkit->get_path() + "/" + src_layer->get_sample()->get_filename(); Sample* sample = Sample::load( sample_path ); if ( sample==0 ) { _ERRORLOG( QString( "Error loading sample %1. Creating a new empty layer." ).arg( sample_path ) ); if ( is_live ) AudioEngine::get_instance()->lock( RIGHT_HERE ); this->set_layer( NULL, i ); if ( is_live ) AudioEngine::get_instance()->unlock(); } else { if ( is_live ) AudioEngine::get_instance()->lock( RIGHT_HERE ); this->set_layer( new InstrumentLayer( src_layer, sample ), i ); if ( is_live ) AudioEngine::get_instance()->unlock(); } } delete my_layer; } if ( is_live ) AudioEngine::get_instance()->lock( RIGHT_HERE ); this->set_id( instrument->get_id() ); this->set_name( instrument->get_name() ); this->set_drumkit_name( drumkit->get_name() ); this->set_gain( instrument->get_gain() ); this->set_volume( instrument->get_volume() ); this->set_pan_l( instrument->get_pan_l() ); this->set_pan_r( instrument->get_pan_r() ); this->set_adsr( new ADSR( *( instrument->get_adsr() ) ) ); this->set_filter_active( instrument->is_filter_active() ); this->set_filter_cutoff( instrument->get_filter_cutoff() ); this->set_filter_resonance( instrument->get_filter_resonance() ); this->set_random_pitch_factor( instrument->get_random_pitch_factor() ); this->set_muted( instrument->is_muted() ); this->set_mute_group( instrument->get_mute_group() ); this->set_midi_out_channel( instrument->get_midi_out_channel() ); this->set_midi_out_note( instrument->get_midi_out_note() ); if ( is_live ) AudioEngine::get_instance()->unlock(); } void Instrument::load_from( const QString& drumkit_name, const QString& instrument_name, bool is_live ) { QString dir = Filesystem::drumkit_path_search( drumkit_name ); if ( dir.isEmpty() ) return; Drumkit* drumkit = Drumkit::load( dir ); assert( drumkit ); Instrument* instrument = drumkit->get_instruments()->find( instrument_name ); if ( instrument!=0 ) { load_from( drumkit, instrument, is_live ); } delete drumkit; } Instrument* Instrument::load_from( XMLNode* node, const QString& dk_path, const QString& dk_name ) { int id = node->read_int( "id", EMPTY_INSTR_ID, false, false ); if ( id==EMPTY_INSTR_ID ) return 0; Instrument* instrument = new Instrument( id, node->read_string( "name", "" ), 0 ); instrument->set_drumkit_name( dk_name ); instrument->set_volume( node->read_float( "volume", 1.0f ) ); instrument->set_muted( node->read_bool( "isMuted", false ) ); instrument->set_pan_l( node->read_float( "pan_L", 1.0f ) ); instrument->set_pan_r( node->read_float( "pan_R", 1.0f ) ); // may not exist, but can't be empty instrument->set_filter_active( node->read_bool( "filterActive", true, false ) ); instrument->set_filter_cutoff( node->read_float( "filterCutoff", 1.0f, true, false ) ); instrument->set_filter_resonance( node->read_float( "filterResonance", 0.0f, true, false ) ); instrument->set_random_pitch_factor( node->read_float( "randomPitchFactor", 0.0f, true, false ) ); float attack = node->read_float( "Attack", 0.0f, true, false ); float decay = node->read_float( "Decay", 0.0f, true, false ); float sustain = node->read_float( "Sustain", 1.0f, true, false ); float release = node->read_float( "Release", 1000.0f, true, false ); instrument->set_adsr( new ADSR( attack, decay, sustain, release ) ); instrument->set_gain( node->read_float( "gain", 1.0f, true, false ) ); instrument->set_mute_group( node->read_int( "muteGroup", -1, true, false ) ); instrument->set_midi_out_channel( node->read_int( "midiOutChannel", -1, true, false ) ); instrument->set_midi_out_note( node->read_int( "midiOutNote", MIDI_MIDDLE_C, true, false ) ); instrument->set_stop_notes( node->read_bool( "isStopNote", true ,false ) ); for ( int i=0; iset_fx_level( node->read_float( QString( "FX%1Level" ).arg( i+1 ), 0.0 ), i ); } int n = 0; XMLNode layer_node = node->firstChildElement( "layer" ); while ( !layer_node.isNull() ) { if ( n >= MAX_LAYERS ) { ERRORLOG( QString( "n >= MAX_LAYERS (%1)" ).arg( MAX_LAYERS ) ); break; } instrument->set_layer( InstrumentLayer::load_from( &layer_node, dk_path ), n ); n++; layer_node = layer_node.nextSiblingElement( "layer" ); } return instrument; } void Instrument::load_samples() { for ( int i=0; iload_sample( ); } } void Instrument::unload_samples() { for ( int i=0; iunload_sample(); } } void Instrument::save_to( XMLNode* node ) { XMLNode instrument_node = node->ownerDocument().createElement( "instrument" ); instrument_node.write_int( "id", __id ); instrument_node.write_string( "name", __name ); instrument_node.write_float( "volume", __volume ); instrument_node.write_bool( "isMuted", __muted ); instrument_node.write_float( "pan_L", __pan_l ); instrument_node.write_float( "pan_R", __pan_r ); instrument_node.write_float( "randomPitchFactor", __random_pitch_factor ); instrument_node.write_float( "gain", __gain ); instrument_node.write_bool( "filterActive", __filter_active ); instrument_node.write_float( "filterCutoff", __filter_cutoff ); instrument_node.write_float( "filterResonance", __filter_resonance ); instrument_node.write_float( "Attack", __adsr->get_attack() ); instrument_node.write_float( "Decay", __adsr->get_decay() ); instrument_node.write_float( "Sustain", __adsr->get_sustain() ); instrument_node.write_float( "Release", __adsr->get_release() ); instrument_node.write_int( "muteGroup", __mute_group ); instrument_node.write_int( "midiOutChannel", __midi_out_channel ); instrument_node.write_int( "midiOutNote", __midi_out_note ); instrument_node.write_bool( "isStopNote", __stop_notes ); for ( int i=0; isave_to( &instrument_node ); } } node->appendChild( instrument_node ); } void Instrument::set_adsr( ADSR* adsr ) { if( __adsr ) delete __adsr; __adsr = adsr; } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/basics/instrument_layer.cpp000066400000000000000000000056761211146647700242520ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include namespace H2Core { const char* InstrumentLayer::__class_name = "InstrumentLayer"; InstrumentLayer::InstrumentLayer( Sample* sample ) : Object( __class_name ), __start_velocity( 0.0 ), __end_velocity( 1.0 ), __pitch( 0.0 ), __gain( 1.0 ), __sample( sample ) { } InstrumentLayer::InstrumentLayer( InstrumentLayer* other ) : Object( __class_name ), __start_velocity( other->get_start_velocity() ), __end_velocity( other->get_end_velocity() ), __pitch( other->get_pitch() ), __gain( other->get_gain() ), __sample( new Sample( other->get_sample() ) ) { } InstrumentLayer::InstrumentLayer( InstrumentLayer* other, Sample* sample ) : Object( __class_name ), __start_velocity( other->get_start_velocity() ), __end_velocity( other->get_end_velocity() ), __pitch( other->get_pitch() ), __gain( other->get_gain() ), __sample( sample ) { } InstrumentLayer::~InstrumentLayer() { delete __sample; __sample = 0; } void InstrumentLayer::load_sample() { if( __sample ) __sample->load(); } void InstrumentLayer::unload_sample() { if( __sample ) __sample->unload(); } InstrumentLayer* InstrumentLayer::load_from( XMLNode* node, const QString& dk_path ) { Sample* sample = new Sample( dk_path+"/"+node->read_string( "filename", "" ) ); InstrumentLayer* layer = new InstrumentLayer( sample ); layer->set_start_velocity( node->read_float( "min", 0.0 ) ); layer->set_end_velocity( node->read_float( "max", 1.0 ) ); layer->set_gain( node->read_float( "gain", 1.0, true, false ) ); layer->set_pitch( node->read_float( "pitch", 0.0, true, false ) ); return layer; } void InstrumentLayer::save_to( XMLNode* node ) { XMLNode layer_node = node->ownerDocument().createElement( "layer" ); layer_node.write_string( "filename", get_sample()->get_filename() ); layer_node.write_float( "min", __start_velocity ); layer_node.write_float( "max", __end_velocity ); layer_node.write_float( "gain", __gain ); layer_node.write_float( "pitch", __pitch ); node->appendChild( layer_node ); } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/basics/instrument_list.cpp000066400000000000000000000134461211146647700241030ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include namespace H2Core { const char* InstrumentList::__class_name = "InstrumentList"; InstrumentList::InstrumentList() : Object( __class_name ) { } InstrumentList::InstrumentList( InstrumentList* other ) : Object( __class_name ) { assert( __instruments.size() == 0 ); for ( int i=0; isize(); i++ ) { ( *this ) << ( new Instrument( ( *other )[i] ) ); } } InstrumentList::~InstrumentList() { for ( int i = 0; i < __instruments.size(); ++i ) { delete __instruments[i]; } } void InstrumentList::load_samples() { for( int i=0; i<__instruments.size(); i++ ) { __instruments[i]->load_samples(); } } void InstrumentList::unload_samples() { for( int i=0; i<__instruments.size(); i++ ) { __instruments[i]->unload_samples(); } } InstrumentList* InstrumentList::load_from( XMLNode* node, const QString& dk_path, const QString& dk_name ) { InstrumentList* instruments = new InstrumentList(); XMLNode instrument_node = node->firstChildElement( "instrument" ); int count = 0; while ( !instrument_node.isNull() ) { count++; if ( count > MAX_INSTRUMENTS ) { ERRORLOG( QString( "instrument count >= %2, stop reading instruments" ).arg( MAX_INSTRUMENTS ) ); break; } Instrument* instrument = Instrument::load_from( &instrument_node, dk_path, dk_name ); if( instrument ) { ( *instruments ) << instrument; } else { ERRORLOG( QString( "Empty ID for instrument %1. The drumkit is corrupted. Skipping instrument" ).arg( count ) ); count--; } instrument_node = instrument_node.nextSiblingElement( "instrument" ); } return instruments; } void InstrumentList::save_to( XMLNode* node ) { XMLNode instruments_node = node->ownerDocument().createElement( "instrumentList" ); for ( int i = 0; i < size(); i++ ) { ( *this )[i]->save_to( &instruments_node ); } node->appendChild( instruments_node ); } void InstrumentList::operator<<( Instrument* instrument ) { // do nothing if already in __instruments for( int i=0; i<__instruments.size(); i++ ) { if( __instruments[i]==instrument ) return; } __instruments.push_back( instrument ); } void InstrumentList::add( Instrument* instrument ) { // do nothing if already in __instruments for( int i=0; i<__instruments.size(); i++ ) { if( __instruments[i]==instrument ) return; } __instruments.push_back( instrument ); } void InstrumentList::insert( int idx, Instrument* instrument ) { // do nothing if already in __instruments for( int i=0; i<__instruments.size(); i++ ) { if( __instruments[i]==instrument ) return; } __instruments.insert( __instruments.begin() + idx, instrument ); } Instrument* InstrumentList::operator[]( int idx ) { if ( idx < 0 || idx >= __instruments.size() ) { ERRORLOG( QString( "idx %1 out of [0;%2]" ).arg( idx ).arg( size() ) ); return 0; } assert( idx >= 0 && idx < __instruments.size() ); return __instruments[idx]; } Instrument* InstrumentList::get( int idx ) { if ( idx < 0 || idx >= __instruments.size() ) { ERRORLOG( QString( "idx %1 out of [0;%2]" ).arg( idx ).arg( size() ) ); return 0; } assert( idx >= 0 && idx < __instruments.size() ); return __instruments[idx]; } int InstrumentList::index( Instrument* instr ) { for( int i=0; i<__instruments.size(); i++ ) { if ( __instruments[i]==instr ) return i; } return -1; } Instrument* InstrumentList::find( const int id ) { for( int i=0; i<__instruments.size(); i++ ) { if ( __instruments[i]->get_id()==id ) return __instruments[i]; } return 0; } Instrument* InstrumentList::find( const QString& name ) { for( int i=0; i<__instruments.size(); i++ ) { if ( __instruments[i]->get_name()==name ) return __instruments[i]; } return 0; } Instrument* InstrumentList::del( int idx ) { assert( idx >= 0 && idx < __instruments.size() ); Instrument* instrument = __instruments[idx]; __instruments.erase( __instruments.begin() + idx ); return instrument; } Instrument* InstrumentList::del( Instrument* instrument ) { for( int i=0; i<__instruments.size(); i++ ) { if( __instruments[i]==instrument ) { __instruments.erase( __instruments.begin() + i ); return instrument; } } return 0; } void InstrumentList::swap( int idx_a, int idx_b ) { assert( idx_a >= 0 && idx_a < __instruments.size() ); assert( idx_b >= 0 && idx_b < __instruments.size() ); if( idx_a == idx_b ) return; //DEBUGLOG(QString("===>> SWAP %1 %2").arg(idx_a).arg(idx_b) ); Instrument* tmp = __instruments[idx_a]; __instruments[idx_a] = __instruments[idx_b]; __instruments[idx_b] = tmp; } void InstrumentList::move( int idx_a, int idx_b ) { assert( idx_a >= 0 && idx_a < __instruments.size() ); assert( idx_b >= 0 && idx_b < __instruments.size() ); if( idx_a == idx_b ) return; //DEBUGLOG(QString("===>> MOVE %1 %2").arg(idx_a).arg(idx_b) ); Instrument* tmp = __instruments[idx_a]; __instruments.erase( __instruments.begin() + idx_a ); __instruments.insert( __instruments.begin() + idx_b, tmp ); } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/basics/note.cpp000066400000000000000000000140071211146647700215770ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include namespace H2Core { const char* Note::__class_name = "Note"; const char* Note::__key_str[] = { "C", "Cs", "D", "Ef", "E", "F", "Fs", "G", "Af", "A", "Bf", "B" }; Note::Note( Instrument* instrument, int position, float velocity, float pan_l, float pan_r, int length, float pitch ) : Object( __class_name ), __instrument( instrument ), __instrument_id( 0 ), __position( position ), __velocity( velocity ), __pan_l( pan_l ), __pan_r( pan_r ), __length( length ), __pitch( pitch ), __key( C ), __octave( P8 ), __adsr( 0 ), __lead_lag( 0.0 ), __cut_off( 1.0 ), __resonance( 0.0 ), __humanize_delay( 0 ), __sample_position( 0.0 ), __bpfb_l( 0.0 ), __bpfb_r( 0.0 ), __lpfb_l( 0.0 ), __lpfb_r( 0.0 ), __pattern_idx( 0 ), __midi_msg( -1 ), __note_off( false ), __just_recorded( false ) { if ( __instrument != 0 ) { __adsr = __instrument->copy_adsr(); __instrument_id = __instrument->get_id(); } } Note::Note( Note* other, Instrument* instrument ) : Object( __class_name ), __instrument( other->get_instrument() ), __instrument_id( 0 ), __position( other->get_position() ), __velocity( other->get_velocity() ), __pan_l( other->get_pan_l() ), __pan_r( other->get_pan_r() ), __length( other->get_length() ), __pitch( other->get_pitch() ), __key( other->get_key() ), __octave( other->get_octave() ), __adsr( 0 ), __lead_lag( other->get_lead_lag() ), __cut_off( other->get_cut_off() ), __resonance( other->get_resonance() ), __humanize_delay( other->get_humanize_delay() ), __sample_position( other->get_sample_position() ), __bpfb_l( other->get_bpfb_l() ), __bpfb_r( other->get_bpfb_r() ), __lpfb_l( other->get_lpfb_l() ), __lpfb_r( other->get_lpfb_r() ), __pattern_idx( other->get_pattern_idx() ), __midi_msg( other->get_midi_msg() ), __note_off( other->get_note_off() ), __just_recorded( other->get_just_recorded() ) { if ( instrument != 0 ) __instrument = instrument; if ( __instrument != 0 ) { __adsr = __instrument->copy_adsr(); __instrument_id = __instrument->get_id(); } } Note::~Note() { delete __adsr; __adsr = 0; } static inline float check_boundary( float v, float min, float max ) { if ( v>max ) return max; if ( vfind( __instrument_id ); if( !instr ) { ERRORLOG( QString( "Instrument with ID: '%1' not found. Using empty instrument." ).arg( __instrument_id ) ); __instrument = new Instrument(); } else { __instrument = instr; } } QString Note::key_to_string() { return QString( "%1%2" ).arg( __key_str[__key] ).arg( __octave ); } void Note::set_key_octave( const QString& str ) { int l = str.length(); QString s_key = str.left( l-1 ); QString s_oct = str.mid( l-1, l ); if ( s_key.endsWith( "-" ) ) { s_key.replace( "-", "" ); s_oct.insert( 0, "-" ); } __octave = ( Octave )s_oct.toInt(); for( int i=KEY_MIN; i<=KEY_MAX; i++ ) { if( __key_str[i]==s_key ){ __key = ( Key )i; return; } } ___ERRORLOG( "Unhandled key: " + s_key ); } void Note::dump() { INFOLOG( QString( "Note : pos: %1\t humanize offset%2\t instr: %3\t key: %4\t pitch: %5" ) .arg( __position ) .arg( __humanize_delay ) .arg( __instrument->get_name() ) .arg( key_to_string() ) .arg( __pitch ) .arg( __note_off ) ); } void Note::save_to( XMLNode* node ) { node->write_int( "position", __position ); node->write_float( "leadlag", __lead_lag ); node->write_float( "velocity", __velocity ); node->write_float( "pan_L", __pan_l ); node->write_float( "pan_R", __pan_r ); node->write_float( "pitch", __pitch ); node->write_string( "key", key_to_string() ); node->write_int( "length", __length ); node->write_int( "instrument", get_instrument()->get_id() ); node->write_bool( "note_off", __note_off ); } Note* Note::load_from( XMLNode* node, InstrumentList* instruments ) { Note* note = new Note( 0, node->read_int( "position", 0 ), node->read_float( "velocity", 0.8f ), node->read_float( "pan_L", 0.5f ), node->read_float( "pan_R", 0.5f ), node->read_int( "length", -1 ), node->read_float( "pitch", 0.0f ) ); note->set_lead_lag( node->read_float( "leadlag", 0, false, false ) ); note->set_key_octave( node->read_string( "key", "C0", false, false ) ); note->set_note_off( node->read_bool( "note_off", false, false, false ) ); note->set_instrument_id( node->read_int( "instrument", EMPTY_INSTR_ID ) ); note->map_instrument( instruments ); return note; } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/basics/pattern.cpp000066400000000000000000000210151211146647700223040ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include namespace H2Core { const char* Pattern::__class_name = "Pattern"; Pattern::Pattern( const QString& name, const QString& info, const QString& category, int length ) : Object( __class_name ) , __length( length ) , __name( name ) , __info( info ) , __category( category ) { } Pattern::Pattern( Pattern* other ) : Object( __class_name ) , __length( other->get_length() ) , __name( other->get_name() ) , __info( other->get_info() ) , __category( other->get_category() ) { FOREACH_NOTE_CST_IT_BEGIN_END( other->get_notes(),it ) { __notes.insert( std::make_pair( it->first, new Note( it->second ) ) ); } } Pattern::~Pattern() { for( notes_cst_it_t it=__notes.begin(); it!=__notes.end(); it++ ) { delete it->second; } } Pattern* Pattern::load_file( const QString& pattern_path, InstrumentList* instruments ) { INFOLOG( QString( "Load pattern %1" ).arg( pattern_path ) ); if ( !Filesystem::file_readable( pattern_path ) ) return 0; XMLDoc doc; if( !doc.read( pattern_path, Filesystem::drumkit_pattern_xsd() ) ) { return Legacy::load_drumkit_pattern( pattern_path ); } XMLNode root = doc.firstChildElement( "drumkit_pattern" ); if ( root.isNull() ) { ERRORLOG( "drumkit_pattern node not found" ); return 0; } XMLNode pattern_node = root.firstChildElement( "pattern" ); if ( pattern_node.isNull() ) { ERRORLOG( "pattern node not found" ); return 0; } return load_from( &pattern_node, instruments ); } Pattern* Pattern::load_from( XMLNode* node, InstrumentList* instruments ) { Pattern* pattern = new Pattern( node->read_string( "name", "unknown", false, false ), node->read_string( "info", "", false, false ), node->read_string( "category", "unknown", false, false ), node->read_int( "size", -1, false, false ) ); XMLNode note_list_node = node->firstChildElement( "noteList" ); if ( !note_list_node.isNull() ) { XMLNode note_node = note_list_node.firstChildElement( "note" ); while ( !note_node.isNull() ) { Note* note = Note::load_from( ¬e_node, instruments ); if( note ) { pattern->insert_note( note ); } note_node = note_node.nextSiblingElement( "note" ); } } return pattern; } bool Pattern::save_file( const QString& pattern_path, bool overwrite ) { INFOLOG( QString( "Saving pattern into %1" ).arg( pattern_path ) ); if( Filesystem::file_exists( pattern_path, true ) && !overwrite ) { ERRORLOG( QString( "pattern %1 already exists" ).arg( pattern_path ) ); return false; } XMLDoc doc; doc.set_root( "drumkit_pattern", "drumkit_pattern" ); XMLNode root = doc.firstChildElement( "drumkit_pattern" ); save_to( &root ); return doc.write( pattern_path ); } void Pattern::save_to( XMLNode* node ) { // TODO drumkit_name !!!!!! node->write_string( "drumkit_name", "TODO" ); XMLNode pattern_node = node->ownerDocument().createElement( "pattern" ); pattern_node.write_string( "name", __name ); pattern_node.write_string( "info", __info ); pattern_node.write_string( "category", __category ); pattern_node.write_int( "size", __length ); XMLNode note_list_node = pattern_node.ownerDocument().createElement( "noteList" ); for( notes_it_t it=__notes.begin(); it!=__notes.end(); ++it ) { Note* note = it->second; if( note ) { XMLNode note_node = node->ownerDocument().createElement( "note" ); note->save_to( ¬e_node ); note_list_node.appendChild( note_node ); } } pattern_node.appendChild( note_list_node ); node->appendChild( pattern_node ); } Note* Pattern::find_note( int idx_a, int idx_b, Instrument* instrument, Note::Key key, Note::Octave octave, bool strict ) { for( notes_cst_it_t it=__notes.lower_bound( idx_a ); it!=__notes.upper_bound( idx_a ); it++ ) { Note* note = it->second; assert( note ); if ( note->match( instrument, key, octave ) ) return note; } if( idx_b==-1 ) return 0; for( notes_cst_it_t it=__notes.lower_bound( idx_b ); it!=__notes.upper_bound( idx_b ); it++ ) { Note* note = it->second; assert( note ); if ( note->match( instrument, key, octave ) ) return note; } if( strict ) return 0; // TODO maybe not start from 0 but idx_b-X for ( int n=0; nsecond; assert( note ); if ( note->match( instrument, key, octave ) && ( ( idx_b<=note->get_position()+note->get_length() ) && idx_b>=note->get_position() ) ) return note; } } return 0; } Note* Pattern::find_note( int idx_a, int idx_b, Instrument* instrument, bool strict ) { notes_cst_it_t it; for( it=__notes.lower_bound( idx_a ); it!=__notes.upper_bound( idx_a ); it++ ) { Note* note = it->second; assert( note ); if ( note->get_instrument() == instrument ) return note; } if( idx_b==-1 ) return 0; for( it=__notes.lower_bound( idx_b ); it!=__notes.upper_bound( idx_b ); it++ ) { Note* note = it->second; assert( note ); if ( note->get_instrument() == instrument ) return note; } if ( strict ) return 0; // TODO maybe not start from 0 but idx_b-X for ( int n=0; nsecond; assert( note ); if ( note->get_instrument() == instrument && ( ( idx_b<=note->get_position()+note->get_length() ) && idx_b>=note->get_position() ) ) return note; } return 0; } } void Pattern::remove_note( Note* note ) { for( notes_it_t it=__notes.begin(); it!=__notes.end(); ++it ) { if( it->second==note ) { __notes.erase( it ); break; } } } bool Pattern::references( Instrument* instr ) { for( notes_cst_it_t it=__notes.begin(); it!=__notes.end(); it++ ) { Note* note = it->second; assert( note ); if ( note->get_instrument() == instr ) { return true; } } return false; } void Pattern::purge_instrument( Instrument* instr ) { bool locked = false; std::list< Note* > slate; for( notes_it_t it=__notes.begin(); it!=__notes.end(); it++ ) { Note* note = it->second; assert( note ); if ( note->get_instrument() == instr ) { if ( !locked ) { H2Core::AudioEngine::get_instance()->lock( RIGHT_HERE ); locked = true; } slate.push_back( note ); __notes.erase( it ); } } if ( locked ) { H2Core::AudioEngine::get_instance()->unlock(); while ( slate.size() ) { delete slate.front(); slate.pop_front(); } } } void Pattern::set_to_old() { for( notes_cst_it_t it=__notes.begin(); it!=__notes.end(); it++ ) { Note* note = it->second; assert( note ); note->set_just_recorded( false ); } } void Pattern::flattened_virtual_patterns_compute() { // __flattened_virtual_patterns must have been cleared before if( __flattened_virtual_patterns.size() >= __virtual_patterns.size() ) return; // for each virtual pattern for( virtual_patterns_cst_it_t it0=__virtual_patterns.begin(); it0!=__virtual_patterns.end(); ++it0 ) { __flattened_virtual_patterns.insert( *it0 ); // add it ( *it0 )->flattened_virtual_patterns_compute(); // build it's flattened virtual patterns set // for each pattern of it's flattened virtual patern set for( virtual_patterns_cst_it_t it1=( *it0 )->get_flattened_virtual_patterns()->begin(); it1!=( *it0 )->get_flattened_virtual_patterns()->end(); ++it1 ) { // add the pattern __flattened_virtual_patterns.insert( *it1 ); } } } void Pattern::extand_with_flattened_virtual_patterns( PatternList* patterns ) { for( virtual_patterns_cst_it_t it=__flattened_virtual_patterns.begin(); it!=__flattened_virtual_patterns.end(); ++it ) { patterns->add( *it ); } } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/basics/pattern_list.cpp000066400000000000000000000122761211146647700233500ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include //#include #include namespace H2Core { const char* PatternList::__class_name = "PatternList"; PatternList::PatternList() : Object( __class_name ) { } PatternList::PatternList( PatternList* other ) : Object( __class_name ) { assert( __patterns.size() == 0 ); for ( int i=0; isize(); i++ ) { ( *this ) << ( new Pattern( ( *other )[i] ) ); } } PatternList::~PatternList() { for ( int i = 0; i < __patterns.size(); ++i ) { delete __patterns[i]; } } void PatternList::operator<<( Pattern* pattern ) { // do nothing if already in __patterns for( int i=0; i<__patterns.size(); i++ ) { if( __patterns[i]==pattern ) return; } __patterns.push_back( pattern ); } void PatternList::add( Pattern* pattern ) { // do nothing if already in __patterns for( int i=0; i<__patterns.size(); i++ ) { if( __patterns[i]==pattern ) return; } __patterns.push_back( pattern ); } void PatternList::insert( int idx, Pattern* pattern ) { // do nothing if already in __patterns for( int i=0; i<__patterns.size(); i++ ) { if( __patterns[i]==pattern ) return; } __patterns.insert( __patterns.begin() + idx, pattern ); } Pattern* PatternList::operator[]( int idx ) { if ( idx < 0 || idx >= __patterns.size() ) { ERRORLOG( QString( "idx %1 out of [0;%2]" ).arg( idx ).arg( size() ) ); return 0; } assert( idx >= 0 && idx < __patterns.size() ); return __patterns[idx]; } Pattern* PatternList::get( int idx ) { if ( idx < 0 || idx >= __patterns.size() ) { ERRORLOG( QString( "idx %1 out of [0;%2]" ).arg( idx ).arg( size() ) ); return 0; } assert( idx >= 0 && idx < __patterns.size() ); return __patterns[idx]; } int PatternList::index( Pattern* pattern ) { for( int i=0; i<__patterns.size(); i++ ) { if ( __patterns[i]==pattern ) return i; } return -1; } Pattern* PatternList::del( int idx ) { assert( idx >= 0 && idx < __patterns.size() ); Pattern* pattern = __patterns[idx]; __patterns.erase( __patterns.begin() + idx ); return pattern; } Pattern* PatternList::del( Pattern* pattern ) { for( int i=0; i<__patterns.size(); i++ ) { if( __patterns[i]==pattern ) { __patterns.erase( __patterns.begin() + i ); return pattern; } } return 0; } Pattern* PatternList::replace( int idx, Pattern* pattern ) { /* * if we insert a new pattern (copy, add new pattern, undo delete pattern and so on will do this) * idx is > __pattern.size(). thats why i add +1 to assert expression */ assert( idx >= 0 && idx <= __patterns.size() +1 ); if( idx < 0 || idx >= __patterns.size() ) { ERRORLOG( QString( "index out of bounds %1 (size:%2)" ).arg( idx ).arg( __patterns.size() ) ); return 0; } __patterns.insert( __patterns.begin() + idx, pattern ); __patterns.erase( __patterns.begin() + idx + 1 ); //create return pattern after patternlist tätatä to return the right one Pattern* ret = __patterns[idx]; return ret; } void PatternList::set_to_old() { for( int i=0; i<__patterns.size(); i++ ) { __patterns[i]->set_to_old(); } } Pattern* PatternList::find( const QString& name ) { for( int i=0; i<__patterns.size(); i++ ) { if ( __patterns[i]->get_name()==name ) return __patterns[i]; } return 0; } void PatternList::swap( int idx_a, int idx_b ) { assert( idx_a >= 0 && idx_a < __patterns.size() ); assert( idx_b >= 0 && idx_b < __patterns.size() ); if( idx_a == idx_b ) return; //DEBUGLOG(QString("===>> SWAP %1 %2").arg(idx_a).arg(idx_b) ); Pattern* tmp = __patterns[idx_a]; __patterns[idx_a] = __patterns[idx_b]; __patterns[idx_b] = tmp; } void PatternList::move( int idx_a, int idx_b ) { assert( idx_a >= 0 && idx_a < __patterns.size() ); assert( idx_b >= 0 && idx_b < __patterns.size() ); if( idx_a == idx_b ) return; //DEBUGLOG(QString("===>> MOVE %1 %2").arg(idx_a).arg(idx_b) ); Pattern* tmp = __patterns[idx_a]; __patterns.erase( __patterns.begin() + idx_a ); __patterns.insert( __patterns.begin() + idx_b, tmp ); } void PatternList::flattened_virtual_patterns_compute() { for ( int i=0 ; i<__patterns.size() ; i++ ) __patterns[i]->flattened_virtual_patterns_clear(); for ( int i=0 ; i<__patterns.size() ; i++ ) __patterns[i]->flattened_virtual_patterns_compute(); } void PatternList::virtual_pattern_del( Pattern* pattern ) { for( int i=0; i<__patterns.size(); i++ ) __patterns[i]->virtual_patterns_del( pattern ); } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/basics/sample.cpp000066400000000000000000000532611211146647700221200ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #ifdef H2CORE_HAVE_RUBBERBAND #include #define RUBBERBAND_BUFFER_OVERSIZE 500 #define RUBBERBAND_DEBUG 0 #endif namespace H2Core { const char* Sample::__class_name = "Sample"; const char* Sample::__loop_modes[] = { "forward", "reverse", "pingpong" }; #ifdef H2CORE_HAVE_RUBBERBAND static double compute_pitch_scale( const Sample::Rubberband& r ); static RubberBand::RubberBandStretcher::Options compute_rubberband_options( const Sample::Rubberband& r ); #endif Sample::Sample( const QString& filepath, int frames, int sample_rate, float* data_l, float* data_r ) : Object( __class_name ), __filepath( filepath ), __frames( frames ), __sample_rate( sample_rate ), __data_l( data_l ), __data_r( data_r ), __is_modified( false ) { /* if( !(filepath.lastIndexOf( "/" ) >0) ) { ERRORLOG( QString( "sample path : %1 is not ok" ).arg( filepath ) ); sleep(1); 0/0; } */ assert( filepath.lastIndexOf( "/" ) >0 ); } Sample::Sample( Sample* other ): Object( __class_name ), __filepath( other->get_filepath() ), __frames( other->get_frames() ), __sample_rate( other->get_sample_rate() ), __data_l( 0 ), __data_r( 0 ), __is_modified( other->get_is_modified() ), __loops( other->__loops ), __rubberband( other->__rubberband ) { __data_l = new float[__frames]; __data_r = new float[__frames]; memcpy( __data_l, other->get_data_l(), __frames ); memcpy( __data_r, other->get_data_r(), __frames ); EnvelopePoint pt; PanEnvelope* pan = other->get_pan_envelope(); for( int i=0; isize(); i++ ) __pan_envelope.push_back( pan->at( i ) ); PanEnvelope* velocity = other->get_velocity_envelope(); for( int i=0; isize(); i++ ) __velocity_envelope.push_back( velocity->at( i ) ); } Sample::~Sample() { if( __data_l!=0 ) delete[] __data_l; if( __data_r!=0 ) delete[] __data_r; } Sample* Sample::load( const QString& filepath ) { if( !Filesystem::file_readable( filepath ) ) { ERRORLOG( QString( "Unable to read %1" ).arg( filepath ) ); return 0; } Sample* sample = new Sample( filepath ); sample->load(); return sample; } Sample* Sample::load( const QString& filepath, const Loops& loops, const Rubberband& rubber, const VelocityEnvelope& velocity, const PanEnvelope& pan ) { Sample* sample = Sample::load( filepath ); if( !sample ) return 0; sample->apply( loops, rubber, velocity, pan ); return sample; } void Sample::apply( const Loops& loops, const Rubberband& rubber, const VelocityEnvelope& velocity, const PanEnvelope& pan ) { apply_loops( loops ); apply_velocity( velocity ); apply_pan( pan ); #ifdef H2CORE_HAVE_RUBBERBAND apply_rubberband( rubber ); #else exec_rubberband_cli( rubber ); #endif } void Sample::load() { SF_INFO sound_info; SNDFILE* file = sf_open( __filepath.toLocal8Bit(), SFM_READ, &sound_info ); if ( !file ) { ERRORLOG( QString( "[Sample::load] Error loading file %1" ).arg( __filepath ) ); return; } if ( sound_info.channels > SAMPLE_CHANNELS ) { WARNINGLOG( QString( "can't handle %1 channels, only 2 will be used" ).arg( sound_info.channels ) ); sound_info.channels = SAMPLE_CHANNELS; } if ( sound_info.frames > ( std::numeric_limits::max()/sound_info.channels ) ) { WARNINGLOG( QString( "sample frames count (%1) and channels (%2) are too much, truncate it." ).arg( sound_info.frames ).arg( sound_info.channels ) ); sound_info.frames = ( std::numeric_limits::max()/sound_info.channels ); } float* buffer = new float[ sound_info.frames * sound_info.channels ]; //memset( buffer, 0, sound_info.frames *sound_info.channels ); sf_count_t count = sf_read_float( file, buffer, sound_info.frames * sound_info.channels ); sf_close( file ); if( count==0 ) WARNINGLOG( QString( "%1 is an empty sample" ).arg( __filepath ) ); unload(); __data_l = new float[ sound_info.frames ]; __data_r = new float[ sound_info.frames ]; __frames = sound_info.frames; __sample_rate = sound_info.samplerate; if ( sound_info.channels == 1 ) { memcpy( __data_l, buffer, __frames * sizeof( float ) ); memcpy( __data_r, buffer, __frames * sizeof( float ) ); } else if ( sound_info.channels == SAMPLE_CHANNELS ) { for ( int i = 0; i < __frames; i++ ) { __data_l[i] = buffer[i * SAMPLE_CHANNELS]; __data_r[i] = buffer[i * SAMPLE_CHANNELS + 1]; } } delete[] buffer; } bool Sample::apply_loops( const Loops& lo ) { if( __loops == lo ) return true; if( lo.start_frame<0 ) { ERRORLOG( QString( "start_frame %1 < 0 is not allowed" ).arg( lo.start_frame ) ); return false; } if( lo.loop_frame__frames ) { ERRORLOG( QString( "end_frame %1 > __frames %2 is not allowed" ).arg( lo.end_frame ).arg( __frames ) ); return false; } if( lo.count<0 ) { ERRORLOG( QString( "count %1 < 0 is not allowed" ).arg( lo.count ) ); return false; } //if( lo == __loops ) return true; bool full_loop = lo.start_frame==lo.loop_frame; int full_length = lo.end_frame - lo.start_frame; int loop_length = lo.end_frame - lo.loop_frame; int new_length = full_length + loop_length * lo.count; float* new_data_l = new float[ new_length ]; float* new_data_r = new float[ new_length ]; // copy full_length frames to new_data if ( lo.mode==Loops::REVERSE && ( lo.count==0 || full_loop ) ) { if( full_loop ) { // copy end => start for( int i=0, j=lo.end_frame; i loop int to_loop = lo.loop_frame - lo.start_frame; memcpy( new_data_l, __data_l+lo.start_frame, sizeof( float )*to_loop ); memcpy( new_data_r, __data_r+lo.start_frame, sizeof( float )*to_loop ); // copy end => loop for( int i=to_loop, j=lo.end_frame; i end memcpy( new_data_l, __data_l+lo.start_frame, sizeof( float )*full_length ); memcpy( new_data_r, __data_r+lo.start_frame, sizeof( float )*full_length ); } // copy the loops if( lo.count>0 ) { int x = full_length; bool forward = ( lo.mode==Loops::FORWARD ); bool ping_pong = ( lo.mode==Loops::PINGPONG ); for( int i=0; i end memcpy( &new_data_l[x], __data_l+lo.loop_frame, sizeof( float )*loop_length ); memcpy( &new_data_r[x], __data_r+lo.loop_frame, sizeof( float )*loop_length ); } else { // copy end => loop for( int i=lo.end_frame, y=x; i>lo.loop_frame; i--, y++ ) new_data_l[y]=__data_l[i]; for( int i=lo.end_frame, y=x; i>lo.loop_frame; i--, y++ ) new_data_r[y]=__data_r[i]; } x+=loop_length; if( ping_pong ) forward=!forward; } assert( x==new_length ); } __loops = lo; delete __data_l; delete __data_r; __data_l = new_data_l; __data_r = new_data_r; __frames = new_length; __is_modified = true; return true; } void Sample::apply_velocity( const VelocityEnvelope& v ) { // TODO frame width (841) and height (91) should go out of here // the VelocityEnvelope should be processed within TargetWaveDisplay // so that we here have ( int frame_idx, float scale ) points // but that will break the xml storage if( v.empty() && __velocity_envelope.empty() ) return; __velocity_envelope.clear(); if ( v.size() > 0 ) { float inv_resolution = __frames / 841.0F; for ( int i = 1; i < v.size(); i++ ) { float y = ( 91 - v[i - 1].value ) / 91.0F; float k = ( 91 - v[i].value ) / 91.0F; int start_frame = v[i - 1].frame * inv_resolution; int end_frame = v[i].frame * inv_resolution; if ( i == v.size() -1 ) end_frame = __frames; int length = end_frame - start_frame ; float step = ( y - k ) / length;; for ( int z = start_frame ; z < end_frame; z++ ) { __data_l[z] = __data_l[z] * y; __data_r[z] = __data_r[z] * y; y-=step; } } __velocity_envelope = v; } __is_modified = true; } void Sample::apply_pan( const PanEnvelope& p ) { // TODO see apply_velocity if( p.empty() && __pan_envelope.empty() ) return; __pan_envelope.clear(); if ( p.size() > 0 ) { float inv_resolution = __frames / 841.0F; for ( int i = 1; i < p.size(); i++ ) { float y = ( 45 - p[i - 1].value ) / 45.0F; float k = ( 45 - p[i].value ) / 45.0F; int start_frame = p[i - 1].frame * inv_resolution; int end_frame = p[i].frame * inv_resolution; if ( i == p.size() -1 ) end_frame = __frames; int length = end_frame - start_frame ; float step = ( y - k ) / length;; for ( int z = start_frame ; z < end_frame; z++ ) { // seems wrong to modify only one channel ?!?! if( y < 0 ) { float k = 1 + y; __data_l[z] = __data_l[z] * k; __data_r[z] = __data_r[z]; } else if ( y > 0 ) { float k = 1 - y; __data_l[z] = __data_l[z]; __data_r[z] = __data_r[z] * k; } else if( y==0 ) { __data_l[z] = __data_l[z]; __data_r[z] = __data_r[z]; } y-=step; } } __pan_envelope = p; } __is_modified = true; } void Sample::apply_rubberband( const Rubberband& rb ) { // TODO see Rubberband declaration in sample.h #ifdef H2CORE_HAVE_RUBBERBAND //if( __rubberband == rb ) return; if( !rb.use ) return; // compute rubberband options double output_duration = 60.0 / Hydrogen::get_instance()->getNewBpmJTM() * rb.divider; double time_ratio = output_duration / get_sample_duration(); RubberBand::RubberBandStretcher::Options options = compute_rubberband_options( rb ); double pitch_scale = compute_pitch_scale( rb ); // output buffer int out_buffer_size = ( int )( __frames* time_ratio + 0.1 ); // instanciate rubberband RubberBand::RubberBandStretcher* rubber = new RubberBand::RubberBandStretcher( __sample_rate, 2, options, time_ratio, pitch_scale ); rubber->setDebugLevel( RUBBERBAND_DEBUG ); rubber->setExpectedInputDuration( __frames ); //DEBUGLOG( QString( "on %1\n\toptions\t\t: %2\n\ttime ratio\t: %3\n\tpitch\t\t: %4" ).arg( get_filename() ).arg( options ).arg( time_ratio ).arg( pitch_scale ) ); int block_size = Hydrogen::get_instance()->getAudioOutput()->getBufferSize(); float* ibuf[2]; int studied = 0; while( studied < __frames ) { bool final = (studied + block_size >= __frames); int ibs = (final ? (__frames-studied) : block_size ); //___DEBUGLOG( QString(" ibs : %1").arg( ibs ) ); float tempIbufL[ibs]; float tempIbufR[ibs]; for(int i = 0 ;i < ibs; i++){ tempIbufL[i] = __data_l[i + studied]; tempIbufR[i] = __data_r[i + studied]; } ibuf[0] = tempIbufL; ibuf[1] = tempIbufR; rubber->study( ibuf, ibs, final ); studied += ibs; if( final ) break; } //int buffer_free = out_buffer_size; float* out_data_l= new float[ out_buffer_size ]; float* out_data_r = new float[ out_buffer_size ]; // retrieve data float* obuf[2]; int processed = 0; int available = 0; int retrieved = 0; while( processed < __frames ) { bool final = (processed + block_size >= __frames); int ibs = (final ? (__frames-processed) : block_size ); float tempIbufL[ibs]; float tempIbufR[ibs]; for(int i = 0 ;i < ibs; i++){ tempIbufL[i] = __data_l[i + processed]; tempIbufR[i] = __data_r[i + processed]; } ibuf[0] = tempIbufL; ibuf[1] = tempIbufR; rubber->process( ibuf, ibs, final ); processed += ibs; // first run of stretcher.retrieve() frames. // we retrieve audio frames from stretcher until // available is >0. but important here is that stretcher // is not finished processing even available is 0. // stretcher finished with -1. but this status we // cannot reach here, because stretcher becomes new // inputbuffer in this while loop. // we need a final run of stretcher after input processing loop // is finished while( (available=rubber->available())>0) { obuf[0] = &out_data_l[retrieved]; obuf[1] = &out_data_r[retrieved]; int n = rubber->retrieve( obuf, available); retrieved += n; //buffer_free -= n; } if( final ) break; } // second run of stretcher to retrieve all last // frames until stretcher returns -1. while( (available=rubber->available())!= -1) { obuf[0] = &out_data_l[retrieved]; obuf[1] = &out_data_r[retrieved]; int n = rubber->retrieve( obuf, available); retrieved += n; //buffer_free -= n; } // qDebug()<<"outputbuffersize"<available(); // DEBUGLOG( QString( "%1 frames processed, %2 frames retrieved" ).arg( __frames ).arg( retrieved ) ); // final data buffers delete __data_l; delete __data_r; __data_l = new float[ retrieved ]; __data_r = new float[ retrieved ]; memcpy( __data_l, out_data_l, retrieved*sizeof( float ) ); memcpy( __data_r, out_data_r, retrieved*sizeof( float ) ); delete out_data_l; delete out_data_r; // update sample __rubberband = rb; __frames = retrieved; __is_modified = true; #endif } bool Sample::exec_rubberband_cli( const Rubberband& rb ) { //set the path to rubberband-cli QString program = Preferences::get_instance()->m_rubberBandCLIexecutable; //test the path. if test fails return NULL if ( QFile( program ).exists() == false && rb.use ) { ERRORLOG( QString( "Rubberband executable: File %1 not found" ).arg( program ) ); return false; } if( rb.use ) { QString outfilePath = QDir::tempPath() + "/tmp_rb_outfile.wav"; if( !write( outfilePath ) ) { ERRORLOG( "unable to write sample" ); return false; }; unsigned rubberoutframes = 0; double ratio = 1.0; double durationtime = 60.0 / Hydrogen::get_instance()->getNewBpmJTM() * rb.divider/*beats*/; double induration = get_sample_duration(); if ( induration != 0.0 ) ratio = durationtime / induration; rubberoutframes = int( __frames * ratio + 0.1 ); _INFOLOG( QString( "ratio: %1, rubberoutframes: %2, rubberinframes: %3" ).arg( ratio ).arg ( rubberoutframes ).arg ( __frames ) ); QObject* parent = 0; QProcess* rubberband = new QProcess( parent ); QStringList arguments; QString rCs = QString( " %1" ).arg( rb.c_settings ); float pitch = pow( 1.0594630943593, ( double )rb.pitch ); QString rPs = QString( " %1" ).arg( pitch ); QString rubberResultPath = QDir::tempPath() + "/tmp_rb_result_file.wav"; arguments << "-D" << QString( " %1" ).arg( durationtime ) //stretch or squash to make output file X seconds long << "--threads" //assume multi-CPU even if only one CPU is identified << "-P" //aim for minimal time distortion << "-f" << rPs //pitch << "-c" << rCs //"crispness" levels << outfilePath //infile << rubberResultPath; //outfile rubberband->start( program, arguments ); while( !rubberband->waitForFinished() ) { //_ERRORLOG( QString( "prozessing" )); } if ( QFile( rubberResultPath ).exists() == false ) { _ERRORLOG( QString( "Rubberband reimporter File %1 not found" ).arg( rubberResultPath ) ); return false; } Sample* rubberbanded = Sample::load( rubberResultPath.toLocal8Bit() ); if( rubberbanded==0 ) { return false; } if( QFile( outfilePath ).remove() ); // _INFOLOG("remove outfile"); if( QFile( rubberResultPath ).remove() ); // _INFOLOG("remove rubberResultFile"); __frames = rubberbanded->get_frames(); __data_l = rubberbanded->get_data_l(); __data_r = rubberbanded->get_data_r(); rubberbanded->__data_l = 0; rubberbanded->__data_r = 0; __is_modified = true; __rubberband = rb; delete rubberbanded; } return true; } Sample::Loops::LoopMode Sample::parse_loop_mode( const QString& string ) { char* mode = string.toLocal8Bit().data(); for( int i=Loops::FORWARD; i<=Loops::PINGPONG; i++ ) { if( 0 == strncasecmp( mode, __loop_modes[i], sizeof( __loop_modes[i] ) ) ) return ( Loops::LoopMode )i; } return Loops::FORWARD; } bool Sample::write( const QString& path, int format ) { float* obuf = new float[ SAMPLE_CHANNELS * __frames ]; for ( int i = 0; i < __frames; ++i ) { float value_l = __data_l[i]; float value_r = __data_r[i]; if ( value_l > 1.f ) value_l = 1.f; else if ( value_l < -1.f ) value_l = -1.f; else if ( value_r > 1.f ) value_r = 1.f; else if ( value_r < -1.f ) value_r = -1.f; obuf[ i* SAMPLE_CHANNELS + 0 ] = value_l; obuf[ i* SAMPLE_CHANNELS + 1 ] = value_r; } SF_INFO sf_info; sf_info.channels = SAMPLE_CHANNELS; sf_info.frames = __frames; sf_info.samplerate = __sample_rate; sf_info.format = format; if ( !sf_format_check( &sf_info ) ) { ___ERRORLOG( "SF_INFO error" ); return false; } SNDFILE* sf_file = sf_open( path.toLocal8Bit().data(), SFM_WRITE, &sf_info ) ; if ( sf_file==0 ) { ___ERRORLOG( QString( "sf_open error : %1" ).arg( sf_strerror( sf_file ) ) ); return false; } sf_count_t res = sf_writef_float( sf_file, obuf, __frames ); if ( res<=0 ) { ___ERRORLOG( QString( "sf_writef_float error : %1" ).arg( sf_strerror( sf_file ) ) ); return false; } sf_close( sf_file ); delete[] obuf; return true; } #ifdef H2CORE_HAVE_RUBBERBAND static double compute_pitch_scale( const Sample::Rubberband& rb ) { double pitchshift = rb.pitch; double frequencyshift = 1.0; if ( pitchshift != 0.0 ) { frequencyshift *= pow( 2.0, pitchshift / 12 ); } //float pitch = pow( 1.0594630943593, ( double )rb.pitch ); return frequencyshift; } static RubberBand::RubberBandStretcher::Options compute_rubberband_options( const Sample::Rubberband& rb ) { // default settings enum { CompoundDetector, PercussiveDetector, SoftDetector } detector = CompoundDetector; enum { NoTransients, BandLimitedTransients, Transients } transients = Transients; bool lamination = true; bool longwin = false; bool shortwin = false; RubberBand::RubberBandStretcher::Options options = RubberBand::RubberBandStretcher::DefaultOptions; // apply our settings int crispness = rb.c_settings; // compute result options switch ( crispness ) { case -1: crispness = 5; break; case 0: detector = CompoundDetector; transients = NoTransients; lamination = false; longwin = true; shortwin = false; break; case 1: detector = SoftDetector; transients = Transients; lamination = false; longwin = true; shortwin = false; break; case 2: detector = CompoundDetector; transients = NoTransients; lamination = false; longwin = false; shortwin = false; break; case 3: detector = CompoundDetector; transients = NoTransients; lamination = true; longwin = false; shortwin = false; break; case 4: detector = CompoundDetector; transients = BandLimitedTransients; lamination = true; longwin = false; shortwin = false; break; case 5: detector = CompoundDetector; transients = Transients; lamination = true; longwin = false; shortwin = false; break; case 6: detector = CompoundDetector; transients = Transients; lamination = false; longwin = false; shortwin = true; break; }; //if (realtime) options |= RubberBand::RubberBandStretcher::OptionProcessRealTime; //if (precise) options |= RubberBand::RubberBandStretcher::OptionStretchPrecise; if ( !lamination ) options |= RubberBand::RubberBandStretcher::OptionPhaseIndependent; if ( longwin ) options |= RubberBand::RubberBandStretcher::OptionWindowLong; if ( shortwin ) options |= RubberBand::RubberBandStretcher::OptionWindowShort; options |= RubberBand::RubberBandStretcher::OptionProcessOffline; options |= RubberBand::RubberBandStretcher::OptionStretchPrecise; //if (smoothing) options |= RubberBand::RubberBandStretcher::OptionSmoothingOn; //if (formant) options |= RubberBand::RubberBandStretcher::OptionFormantPreserved; //if (hqpitch) options |= RubberBand::RubberBandStretcher::OptionPitchHighQuality; options |= RubberBand::RubberBandStretcher::OptionPitchHighQuality; /* switch (threading) { case 0: options |= RubberBand::RubberBandStretcher::OptionThreadingAuto; break; case 1: options |= RubberBand::RubberBandStretcher::OptionThreadingNever; break; case 2: options |= RubberBand::RubberBandStretcher::OptionThreadingAlways; break; } */ switch ( transients ) { case NoTransients: options |= RubberBand::RubberBandStretcher::OptionTransientsSmooth; break; case BandLimitedTransients: options |= RubberBand::RubberBandStretcher::OptionTransientsMixed; break; case Transients: options |= RubberBand::RubberBandStretcher::OptionTransientsCrisp; break; } /* switch (detector) { case CompoundDetector: options |= RubberBand::RubberBandStretcher::OptionDetectorCompound; break; case PercussiveDetector: options |= RubberBand::RubberBandStretcher::OptionDetectorPercussive; break; case SoftDetector: options |= RubberBand::RubberBandStretcher::OptionDetectorSoft; break; } */ return options; } #endif }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/basics/song.cpp000066400000000000000000001011321211146647700215740ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "hydrogen/version.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace { }//anonymous namespace namespace H2Core { const char* Song::__class_name = "Song"; Song::Song( const QString& name, const QString& author, float bpm, float volume ) : Object( __class_name ) , __is_muted( false ) , __resolution( 48 ) , __bpm( bpm ) , __is_modified( false ) , __name( name ) , __author( author ) , __volume( volume ) , __metronome_volume( 0.5 ) , __pattern_list( NULL ) , __pattern_group_sequence( NULL ) , __instrument_list( NULL ) , __filename( "" ) , __is_loop_enabled( false ) , __humanize_time_value( 0.0 ) , __humanize_velocity_value( 0.0 ) , __swing_factor( 0.0 ) , __song_mode( PATTERN_MODE ) { INFOLOG( QString( "INIT '%1'" ).arg( __name ) ); //m_bDelayFXEnabled = false; //m_fDelayFXWetLevel = 0.8; //m_fDelayFXFeedback = 0.5; //m_nDelayFXTime = MAX_NOTES / 8; } Song::~Song() { // delete all patterns delete __pattern_list; if ( __pattern_group_sequence ) { for ( unsigned i = 0; i < __pattern_group_sequence->size(); ++i ) { PatternList* pPatternList = ( *__pattern_group_sequence )[i]; pPatternList->clear(); // pulisco tutto, i pattern non vanno distrutti qua delete pPatternList; } delete __pattern_group_sequence; } delete __instrument_list; INFOLOG( QString( "DESTROY '%1'" ).arg( __name ) ); } void Song::purge_instrument( Instrument* I ) { for ( int nPattern = 0; nPattern < ( int )__pattern_list->size(); ++nPattern ) { __pattern_list->get( nPattern )->purge_instrument( I ); } } ///Load a song from file Song* Song::load( const QString& filename ) { Song* song = NULL; SongReader reader; song = reader.readSong( filename ); return song; } /// Save a song to file bool Song::save( const QString& filename ) { SongWriter writer; int err; err = writer.writeSong( this, filename ); if( err ) { return false; } return QFile::exists( filename ); } /// Create default song Song* Song::get_default_song() { Song* song = new Song( "empty", "hydrogen", 120, 0.5 ); song->set_metronome_volume( 0.5 ); song->set_notes( "..." ); song->set_license( "" ); song->set_loop_enabled( false ); song->set_mode( Song::PATTERN_MODE ); song->set_humanize_time_value( 0.0 ); song->set_humanize_velocity_value( 0.0 ); song->set_swing_factor( 0.0 ); InstrumentList* pList = new InstrumentList(); Instrument* pNewInstr = new Instrument( EMPTY_INSTR_ID, "New instrument" ); pList->add( pNewInstr ); song->set_instrument_list( pList ); #ifdef H2CORE_HAVE_JACK Hydrogen::get_instance()->renameJackPorts(); #endif PatternList* patternList = new PatternList(); Pattern* emptyPattern = new Pattern(); emptyPattern->set_name( QString( "Pattern 1" ) ); emptyPattern->set_category( QString( "not_categorized" ) ); patternList->add( emptyPattern ); song->set_pattern_list( patternList ); std::vector* pPatternGroupVector = new std::vector; PatternList* patternSequence = new PatternList(); patternSequence->add( emptyPattern ); pPatternGroupVector->push_back( patternSequence ); song->set_pattern_group_vector( pPatternGroupVector ); song->__is_modified = false; song->set_filename( "empty_song" ); return song; } /// Return an empty song Song* Song::get_empty_song() { Song* song = Song::load( Filesystem::empty_song() ); /* if file DefaultSong.h2song not accessible * create a simple default song. */ if( !song ) { song = Song::get_default_song(); } return song; } void Song::set_swing_factor( float factor ) { if ( factor < 0.0 ) { factor = 0.0; } else if ( factor > 1.0 ) { factor = 1.0; } __swing_factor = factor; } void Song::readTempPatternList( QString filename ) { Hydrogen* engine = Hydrogen::get_instance(); //AudioEngine::get_instance()->lock( RIGHT_HERE ); Song* song = engine->getSong(); if ( QFile( filename ).exists() == false ) { ERRORLOG( "tep file " + filename + " not found." ); return; } QDomDocument doc = LocalFileMng::openXmlDocument( filename ); QDomNodeList nodeList = doc.elementsByTagName( "tempPatternList" ); if( nodeList.isEmpty() ) { ERRORLOG( "Error reading tmp file" ); return; } QDomNode songNode = nodeList.at( 0 ); // Virtual Patterns QDomNode virtualPatternListNode = songNode.firstChildElement( "virtualPatternList" ); QDomNode virtualPatternNode = virtualPatternListNode.firstChildElement( "pattern" ); if ( !virtualPatternNode.isNull() ) { while ( ! virtualPatternNode.isNull() ) { QString sName = ""; sName = LocalFileMng::readXmlString( virtualPatternNode, "name", sName ); Pattern* curPattern = NULL; unsigned nPatterns = song->get_pattern_list()->size(); for ( unsigned i = 0; i < nPatterns; i++ ) { Pattern* pat = song->get_pattern_list()->get( i ); if ( pat->get_name() == sName ) { curPattern = pat; break; }//if }//for if ( curPattern != NULL ) { QDomNode virtualNode = virtualPatternNode.firstChildElement( "virtual" ); while ( !virtualNode.isNull() ) { QString virtName = virtualNode.firstChild().nodeValue(); Pattern* virtPattern = NULL; for ( unsigned i = 0; i < nPatterns; i++ ) { Pattern* pat = song->get_pattern_list()->get( i ); if ( pat->get_name() == virtName ) { virtPattern = pat; break; }//if }//for if ( virtPattern != NULL ) { curPattern->virtual_patterns_add( virtPattern ); } else { ERRORLOG( "Song had invalid virtual pattern list data (virtual)" ); }//if virtualNode = ( QDomNode ) virtualNode.nextSiblingElement( "virtual" ); }//while } else { ERRORLOG( "Song had invalid virtual pattern list data (name)" ); }//if virtualPatternNode = ( QDomNode ) virtualPatternNode.nextSiblingElement( "pattern" ); }//while }//if song->get_pattern_list()->flattened_virtual_patterns_compute(); // Pattern sequence QDomNode patternSequenceNode = songNode.firstChildElement( "patternSequence" ); std::vector *pPatternGroupVector = song->get_pattern_group_vector(); pPatternGroupVector->clear(); PatternList* patternSequence; QDomNode groupNode = patternSequenceNode.firstChildElement( "group" ); while ( !groupNode.isNull() ) { patternSequence = new PatternList(); QDomNode patternId = groupNode.firstChildElement( "patternID" ); while ( !patternId.isNull() ) { QString patId = patternId.firstChild().nodeValue(); Pattern* pat = NULL; for ( unsigned i = 0; i < song->get_pattern_list()->size(); i++ ) { Pattern* tmp = song->get_pattern_list()->get( i ); if ( tmp ) { if ( tmp->get_name() == patId ) { pat = tmp; break; } } } if ( pat == NULL ) { WARNINGLOG( "patternid not found in patternSequence" ); patternId = ( QDomNode ) patternId.nextSiblingElement( "patternID" ); continue; } patternSequence->add( pat ); patternId = ( QDomNode ) patternId.nextSiblingElement( "patternID" ); } pPatternGroupVector->push_back( patternSequence ); groupNode = groupNode.nextSiblingElement( "group" ); } song->set_pattern_group_vector( pPatternGroupVector ); } //:::::::::::::::::::: //----------------------------------------------------------------------------- // Implementation of SongReader class //----------------------------------------------------------------------------- const char* SongReader::__class_name = "SongReader"; SongReader::SongReader() : Object( __class_name ) { // infoLog("init"); } SongReader::~SongReader() { // infoLog("destroy"); } /// /// Reads a song. /// return NULL = error reading song file. /// Song* SongReader::readSong( const QString& filename ) { INFOLOG( filename ); Song* song = NULL; if ( QFile( filename ).exists() == false ) { ERRORLOG( "Song file " + filename + " not found." ); return NULL; } QDomDocument doc = LocalFileMng::openXmlDocument( filename ); QDomNodeList nodeList = doc.elementsByTagName( "song" ); if( nodeList.isEmpty() ) { ERRORLOG( "Error reading song: song node not found" ); return NULL; } QDomNode songNode = nodeList.at( 0 ); m_sSongVersion = LocalFileMng::readXmlString( songNode , "version", "Unknown version" ); if ( m_sSongVersion != QString( get_version().c_str() ) ) { WARNINGLOG( "Trying to load a song created with a different version of hydrogen." ); WARNINGLOG( "Song [" + filename + "] saved with version " + m_sSongVersion ); } float fBpm = LocalFileMng::readXmlFloat( songNode, "bpm", 120 ); Hydrogen::get_instance()->setNewBpmJTM( fBpm ); float fVolume = LocalFileMng::readXmlFloat( songNode, "volume", 0.5 ); float fMetronomeVolume = LocalFileMng::readXmlFloat( songNode, "metronomeVolume", 0.5 ); QString sName( LocalFileMng::readXmlString( songNode, "name", "Untitled Song" ) ); QString sAuthor( LocalFileMng::readXmlString( songNode, "author", "Unknown Author" ) ); QString sNotes( LocalFileMng::readXmlString( songNode, "notes", "..." ) ); QString sLicense( LocalFileMng::readXmlString( songNode, "license", "Unknown license" ) ); bool bLoopEnabled = LocalFileMng::readXmlBool( songNode, "loopEnabled", false ); Preferences::get_instance()->setPatternModePlaysSelected( LocalFileMng::readXmlBool( songNode, "patternModeMode", true ) ); Song::SongMode nMode = Song::PATTERN_MODE; // Mode (song/pattern) QString sMode = LocalFileMng::readXmlString( songNode, "mode", "pattern" ); if ( sMode == "song" ) { nMode = Song::SONG_MODE; } float fHumanizeTimeValue = LocalFileMng::readXmlFloat( songNode, "humanize_time", 0.0 ); float fHumanizeVelocityValue = LocalFileMng::readXmlFloat( songNode, "humanize_velocity", 0.0 ); float fSwingFactor = LocalFileMng::readXmlFloat( songNode, "swing_factor", 0.0 ); song = new Song( sName, sAuthor, fBpm, fVolume ); song->set_metronome_volume( fMetronomeVolume ); song->set_notes( sNotes ); song->set_license( sLicense ); song->set_loop_enabled( bLoopEnabled ); song->set_mode( nMode ); song->set_humanize_time_value( fHumanizeTimeValue ); song->set_humanize_velocity_value( fHumanizeVelocityValue ); song->set_swing_factor( fSwingFactor ); /* song->m_bDelayFXEnabled = LocalFileMng::readXmlBool( songNode, "delayFXEnabled", false, false ); song->m_fDelayFXWetLevel = LocalFileMng::readXmlFloat( songNode, "delayFXWetLevel", 1.0, false, false ); song->m_fDelayFXFeedback= LocalFileMng::readXmlFloat( songNode, "delayFXFeedback", 0.4, false, false ); song->m_nDelayFXTime = LocalFileMng::readXmlInt( songNode, "delayFXTime", MAX_NOTES / 4, false, false ); */ // Instrument List InstrumentList* instrumentList = new InstrumentList(); QDomNode instrumentListNode = songNode.firstChildElement( "instrumentList" ); if ( ( ! instrumentListNode.isNull() ) ) { // INSTRUMENT NODE int instrumentList_count = 0; QDomNode instrumentNode; instrumentNode = instrumentListNode.firstChildElement( "instrument" ); while ( ! instrumentNode.isNull() ) { instrumentList_count++; int id = LocalFileMng::readXmlInt( instrumentNode, "id", -1 ); // instrument id QString sDrumkit = LocalFileMng::readXmlString( instrumentNode, "drumkit", "" ); // drumkit Hydrogen::get_instance()->setCurrentDrumkitname( sDrumkit ); QString sName = LocalFileMng::readXmlString( instrumentNode, "name", "" ); // name float fVolume = LocalFileMng::readXmlFloat( instrumentNode, "volume", 1.0 ); // volume bool bIsMuted = LocalFileMng::readXmlBool( instrumentNode, "isMuted", false ); // is muted float fPan_L = LocalFileMng::readXmlFloat( instrumentNode, "pan_L", 0.5 ); // pan L float fPan_R = LocalFileMng::readXmlFloat( instrumentNode, "pan_R", 0.5 ); // pan R float fFX1Level = LocalFileMng::readXmlFloat( instrumentNode, "FX1Level", 0.0 ); // FX level float fFX2Level = LocalFileMng::readXmlFloat( instrumentNode, "FX2Level", 0.0 ); // FX level float fFX3Level = LocalFileMng::readXmlFloat( instrumentNode, "FX3Level", 0.0 ); // FX level float fFX4Level = LocalFileMng::readXmlFloat( instrumentNode, "FX4Level", 0.0 ); // FX level float fGain = LocalFileMng::readXmlFloat( instrumentNode, "gain", 1.0, false, false ); // instrument gain int fAttack = LocalFileMng::readXmlInt( instrumentNode, "Attack", 0, false, false ); // Attack int fDecay = LocalFileMng::readXmlInt( instrumentNode, "Decay", 0, false, false ); // Decay float fSustain = LocalFileMng::readXmlFloat( instrumentNode, "Sustain", 1.0, false, false ); // Sustain int fRelease = LocalFileMng::readXmlInt( instrumentNode, "Release", 1000, false, false ); // Release float fRandomPitchFactor = LocalFileMng::readXmlFloat( instrumentNode, "randomPitchFactor", 0.0f, false, false ); bool bFilterActive = LocalFileMng::readXmlBool( instrumentNode, "filterActive", false ); float fFilterCutoff = LocalFileMng::readXmlFloat( instrumentNode, "filterCutoff", 1.0f, false ); float fFilterResonance = LocalFileMng::readXmlFloat( instrumentNode, "filterResonance", 0.0f, false ); QString sMuteGroup = LocalFileMng::readXmlString( instrumentNode, "muteGroup", "-1", false ); QString sMidiOutChannel = LocalFileMng::readXmlString( instrumentNode, "midiOutChannel", "-1", false, false ); QString sMidiOutNote = LocalFileMng::readXmlString( instrumentNode, "midiOutNote", "60", false, false ); int nMuteGroup = sMuteGroup.toInt(); bool isStopNote = LocalFileMng::readXmlBool( instrumentNode, "isStopNote", false ); int nMidiOutChannel = sMidiOutChannel.toInt(); int nMidiOutNote = sMidiOutNote.toInt(); if ( id==-1 ) { ERRORLOG( "Empty ID for instrument '" + sName + "'. skipping." ); instrumentNode = ( QDomNode ) instrumentNode.nextSiblingElement( "instrument" ); continue; } // create a new instrument Instrument* pInstrument = new Instrument( id, sName, new ADSR( fAttack, fDecay, fSustain, fRelease ) ); pInstrument->set_volume( fVolume ); pInstrument->set_muted( bIsMuted ); pInstrument->set_pan_l( fPan_L ); pInstrument->set_pan_r( fPan_R ); pInstrument->set_drumkit_name( sDrumkit ); pInstrument->set_fx_level( fFX1Level, 0 ); pInstrument->set_fx_level( fFX2Level, 1 ); pInstrument->set_fx_level( fFX3Level, 2 ); pInstrument->set_fx_level( fFX4Level, 3 ); pInstrument->set_random_pitch_factor( fRandomPitchFactor ); pInstrument->set_filter_active( bFilterActive ); pInstrument->set_filter_cutoff( fFilterCutoff ); pInstrument->set_filter_resonance( fFilterResonance ); pInstrument->set_gain( fGain ); pInstrument->set_mute_group( nMuteGroup ); pInstrument->set_stop_notes( isStopNote ); pInstrument->set_midi_out_channel( nMidiOutChannel ); pInstrument->set_midi_out_note( nMidiOutNote ); QString drumkitPath; if ( ( !sDrumkit.isEmpty() ) && ( sDrumkit != "-" ) ) { drumkitPath = Filesystem::drumkit_path_search( sDrumkit ); } QDomNode filenameNode = instrumentNode.firstChildElement( "filename" ); // back compatibility code ( song version <= 0.9.0 ) if ( ! filenameNode.isNull() ) { WARNINGLOG( "Using back compatibility code. filename node found" ); QString sFilename = LocalFileMng::readXmlString( instrumentNode, "filename", "" ); if ( !QFile( sFilename ).exists() && !drumkitPath.isEmpty() ) { sFilename = drumkitPath + "/" + sFilename; } Sample* pSample = Sample::load( sFilename ); if ( pSample == NULL ) { // nel passaggio tra 0.8.2 e 0.9.0 il drumkit di default e' cambiato. // Se fallisce provo a caricare il corrispettivo file in formato flac // warningLog( "[readSong] Error loading sample: " + sFilename + " not found. Trying to load a flac..." ); sFilename = sFilename.left( sFilename.length() - 4 ); sFilename += ".flac"; pSample = Sample::load( sFilename ); } if ( pSample == NULL ) { ERRORLOG( "Error loading sample: " + sFilename + " not found" ); pInstrument->set_muted( true ); } InstrumentLayer* pLayer = new InstrumentLayer( pSample ); pInstrument->set_layer( pLayer, 0 ); } //~ back compatibility code else { unsigned nLayer = 0; QDomNode layerNode = instrumentNode.firstChildElement( "layer" ); while ( ! layerNode.isNull() ) { if ( nLayer >= MAX_LAYERS ) { ERRORLOG( "nLayer > MAX_LAYERS" ); continue; } //bool sIsModified = false; QString sFilename = LocalFileMng::readXmlString( layerNode, "filename", "" ); bool sIsModified = LocalFileMng::readXmlBool( layerNode, "ismodified", false ); Sample::Loops lo; lo.mode = Sample::parse_loop_mode( LocalFileMng::readXmlString( layerNode, "smode", "forward" ) ); lo.start_frame = LocalFileMng::readXmlInt( layerNode, "startframe", 0 ); lo.loop_frame = LocalFileMng::readXmlInt( layerNode, "loopframe", 0 ); lo.count = LocalFileMng::readXmlInt( layerNode, "loops", 0 ); lo.end_frame = LocalFileMng::readXmlInt( layerNode, "endframe", 0 ); Sample::Rubberband ro; ro.use = LocalFileMng::readXmlInt( layerNode, "userubber", 0, false ); ro.divider = LocalFileMng::readXmlFloat( layerNode, "rubberdivider", 0.0 ); ro.c_settings = LocalFileMng::readXmlInt( layerNode, "rubberCsettings", 1 ); ro.pitch = LocalFileMng::readXmlFloat( layerNode, "rubberPitch", 0.0 ); float fMin = LocalFileMng::readXmlFloat( layerNode, "min", 0.0 ); float fMax = LocalFileMng::readXmlFloat( layerNode, "max", 1.0 ); float fGain = LocalFileMng::readXmlFloat( layerNode, "gain", 1.0 ); float fPitch = LocalFileMng::readXmlFloat( layerNode, "pitch", 0.0, false, false ); if ( !QFile( sFilename ).exists() && !drumkitPath.isEmpty() ) { sFilename = drumkitPath + "/" + sFilename; } QString program = Preferences::get_instance()->m_rubberBandCLIexecutable; //test the path. if test fails, disable rubberband if ( QFile( program ).exists() == false ) { ro.use = false; } Sample* pSample = NULL; if ( !sIsModified ) { pSample = Sample::load( sFilename ); } else { Sample::EnvelopePoint pt; Sample::VelocityEnvelope velocity; QDomNode volumeNode = layerNode.firstChildElement( "volume" ); while ( ! volumeNode.isNull() ) { pt.frame = LocalFileMng::readXmlInt( volumeNode, "volume-position", 0 ); pt.value = LocalFileMng::readXmlInt( volumeNode, "volume-value", 0 ); velocity.push_back( pt ); volumeNode = volumeNode.nextSiblingElement( "volume" ); //ERRORLOG( QString("volume-posi %1").arg(LocalFileMng::readXmlInt( volumeNode, "volume-position", 0)) ); } Sample::VelocityEnvelope pan; QDomNode panNode = layerNode.firstChildElement( "pan" ); while ( ! panNode.isNull() ) { pt.frame = LocalFileMng::readXmlInt( panNode, "pan-position", 0 ); pt.value = LocalFileMng::readXmlInt( panNode, "pan-value", 0 ); pan.push_back( pt ); panNode = panNode.nextSiblingElement( "pan" ); } pSample = Sample::load( sFilename, lo, ro, velocity, pan ); } if ( pSample == NULL ) { ERRORLOG( "Error loading sample: " + sFilename + " not found" ); pInstrument->set_muted( true ); } InstrumentLayer* pLayer = new InstrumentLayer( pSample ); pLayer->set_start_velocity( fMin ); pLayer->set_end_velocity( fMax ); pLayer->set_gain( fGain ); pLayer->set_pitch( fPitch ); pInstrument->set_layer( pLayer, nLayer ); nLayer++; layerNode = ( QDomNode ) layerNode.nextSiblingElement( "layer" ); } } instrumentList->add( pInstrument ); instrumentNode = ( QDomNode ) instrumentNode.nextSiblingElement( "instrument" ); } if ( instrumentList_count == 0 ) { WARNINGLOG( "0 instruments?" ); } song->set_instrument_list( instrumentList ); } else { ERRORLOG( "Error reading song: instrumentList node not found" ); delete song; return NULL; } // Pattern list QDomNode patterns = songNode.firstChildElement( "patternList" ); PatternList* patternList = new PatternList(); int pattern_count = 0; QDomNode patternNode = patterns.firstChildElement( "pattern" ); while ( !patternNode.isNull() ) { pattern_count++; Pattern* pat = getPattern( patternNode, instrumentList ); if ( pat ) { patternList->add( pat ); } else { ERRORLOG( "Error loading pattern" ); delete patternList; delete song; return NULL; } patternNode = ( QDomNode ) patternNode.nextSiblingElement( "pattern" ); } if ( pattern_count == 0 ) { WARNINGLOG( "0 patterns?" ); } song->set_pattern_list( patternList ); // Virtual Patterns QDomNode virtualPatternListNode = songNode.firstChildElement( "virtualPatternList" ); QDomNode virtualPatternNode = virtualPatternListNode.firstChildElement( "pattern" ); if ( !virtualPatternNode.isNull() ) { while ( ! virtualPatternNode.isNull() ) { QString sName = ""; sName = LocalFileMng::readXmlString( virtualPatternNode, "name", sName ); Pattern* curPattern = NULL; unsigned nPatterns = patternList->size(); for ( unsigned i = 0; i < nPatterns; i++ ) { Pattern* pat = patternList->get( i ); if ( pat->get_name() == sName ) { curPattern = pat; break; }//if }//for if ( curPattern != NULL ) { QDomNode virtualNode = virtualPatternNode.firstChildElement( "virtual" ); while ( !virtualNode.isNull() ) { QString virtName = virtualNode.firstChild().nodeValue(); Pattern* virtPattern = NULL; for ( unsigned i = 0; i < nPatterns; i++ ) { Pattern* pat = patternList->get( i ); if ( pat->get_name() == virtName ) { virtPattern = pat; break; }//if }//for if ( virtPattern != NULL ) { curPattern->virtual_patterns_add( virtPattern ); } else { ERRORLOG( "Song had invalid virtual pattern list data (virtual)" ); }//if virtualNode = ( QDomNode ) virtualNode.nextSiblingElement( "virtual" ); }//while } else { ERRORLOG( "Song had invalid virtual pattern list data (name)" ); }//if virtualPatternNode = ( QDomNode ) virtualPatternNode.nextSiblingElement( "pattern" ); }//while }//if patternList->flattened_virtual_patterns_compute(); // Pattern sequence QDomNode patternSequenceNode = songNode.firstChildElement( "patternSequence" ); std::vector* pPatternGroupVector = new std::vector; // back-compatibility code.. QDomNode pPatternIDNode = patternSequenceNode.firstChildElement( "patternID" ); while ( ! pPatternIDNode.isNull() ) { WARNINGLOG( "Using old patternSequence code for back compatibility" ); PatternList* patternSequence = new PatternList(); QString patId = pPatternIDNode.firstChildElement().text(); ERRORLOG( patId ); Pattern* pat = NULL; for ( unsigned i = 0; i < patternList->size(); i++ ) { Pattern* tmp = patternList->get( i ); if ( tmp ) { if ( tmp->get_name() == patId ) { pat = tmp; break; } } } if ( pat == NULL ) { WARNINGLOG( "patternid not found in patternSequence" ); pPatternIDNode = ( QDomNode ) pPatternIDNode.nextSiblingElement( "patternID" ); continue; } patternSequence->add( pat ); pPatternGroupVector->push_back( patternSequence ); pPatternIDNode = ( QDomNode ) pPatternIDNode.nextSiblingElement( "patternID" ); } QDomNode groupNode = patternSequenceNode.firstChildElement( "group" ); while ( !groupNode.isNull() ) { PatternList* patternSequence = new PatternList(); QDomNode patternId = groupNode.firstChildElement( "patternID" ); while ( !patternId.isNull() ) { QString patId = patternId.firstChild().nodeValue(); Pattern* pat = NULL; for ( unsigned i = 0; i < patternList->size(); i++ ) { Pattern* tmp = patternList->get( i ); if ( tmp ) { if ( tmp->get_name() == patId ) { pat = tmp; break; } } } if ( pat == NULL ) { WARNINGLOG( "patternid not found in patternSequence" ); patternId = ( QDomNode ) patternId.nextSiblingElement( "patternID" ); continue; } patternSequence->add( pat ); patternId = ( QDomNode ) patternId.nextSiblingElement( "patternID" ); } pPatternGroupVector->push_back( patternSequence ); groupNode = groupNode.nextSiblingElement( "group" ); } song->set_pattern_group_vector( pPatternGroupVector ); #ifdef H2CORE_HAVE_LADSPA // reset FX for ( int fx = 0; fx < MAX_FX; ++fx ) { //LadspaFX* pFX = Effects::get_instance()->getLadspaFX( fx ); //delete pFX; Effects::get_instance()->setLadspaFX( NULL, fx ); } #endif // LADSPA FX QDomNode ladspaNode = songNode.firstChildElement( "ladspa" ); if ( !ladspaNode.isNull() ) { int nFX = 0; QDomNode fxNode = ladspaNode.firstChildElement( "fx" ); while ( !fxNode.isNull() ) { QString sName = LocalFileMng::readXmlString( fxNode, "name", "" ); QString sFilename = LocalFileMng::readXmlString( fxNode, "filename", "" ); bool bEnabled = LocalFileMng::readXmlBool( fxNode, "enabled", false ); float fVolume = LocalFileMng::readXmlFloat( fxNode, "volume", 1.0 ); if ( sName != "no plugin" ) { // FIXME: il caricamento va fatto fare all'engine, solo lui sa il samplerate esatto #ifdef H2CORE_HAVE_LADSPA LadspaFX* pFX = LadspaFX::load( sFilename, sName, 44100 ); Effects::get_instance()->setLadspaFX( pFX, nFX ); if ( pFX ) { pFX->setEnabled( bEnabled ); pFX->setVolume( fVolume ); QDomNode inputControlNode = fxNode.firstChildElement( "inputControlPort" ); while ( !inputControlNode.isNull() ) { QString sName = LocalFileMng::readXmlString( inputControlNode, "name", "" ); float fValue = LocalFileMng::readXmlFloat( inputControlNode, "value", 0.0 ); for ( unsigned nPort = 0; nPort < pFX->inputControlPorts.size(); nPort++ ) { LadspaControlPort* port = pFX->inputControlPorts[ nPort ]; if ( QString( port->sName ) == sName ) { port->fControlValue = fValue; } } inputControlNode = ( QDomNode ) inputControlNode.nextSiblingElement( "inputControlPort" ); } /* TiXmlNode* outputControlNode; for ( outputControlNode = fxNode->FirstChild( "outputControlPort" ); outputControlNode; outputControlNode = outputControlNode->NextSibling( "outputControlPort" ) ) { }*/ } #endif } nFX++; fxNode = ( QDomNode ) fxNode.nextSiblingElement( "fx" ); } } else { WARNINGLOG( "ladspa node not found" ); } Hydrogen::get_instance()->m_timelinevector.clear(); Hydrogen::HTimelineVector tlvector; QDomNode bpmTimeLine = songNode.firstChildElement( "BPMTimeLine" ); if ( !bpmTimeLine.isNull() ) { QDomNode newBPMNode = bpmTimeLine.firstChildElement( "newBPM" ); while( !newBPMNode.isNull() ) { tlvector.m_htimelinebeat = LocalFileMng::readXmlInt( newBPMNode, "BAR", 0 ); tlvector.m_htimelinebpm = LocalFileMng::readXmlFloat( newBPMNode, "BPM", 120.0 ); Hydrogen::get_instance()->m_timelinevector.push_back( tlvector ); Hydrogen::get_instance()->sortTimelineVector(); newBPMNode = newBPMNode.nextSiblingElement( "newBPM" ); } } else { WARNINGLOG( "bpmTimeLine node not found" ); } Hydrogen::get_instance()->m_timelinetagvector.clear(); Hydrogen::HTimelineTagVector tltagvector; QDomNode timeLineTag = songNode.firstChildElement( "timeLineTag" ); if ( !timeLineTag.isNull() ) { QDomNode newTAGNode = timeLineTag.firstChildElement( "newTAG" ); while( !newTAGNode.isNull() ) { tltagvector.m_htimelinetagbeat = LocalFileMng::readXmlInt( newTAGNode, "BAR", 0 ); tltagvector.m_htimelinetag = LocalFileMng::readXmlString( newTAGNode, "TAG", "" ); Hydrogen::get_instance()->m_timelinetagvector.push_back( tltagvector ); Hydrogen::get_instance()->sortTimelineTagVector(); newTAGNode = newTAGNode.nextSiblingElement( "newTAG" ); } } else { WARNINGLOG( "TagTimeLine node not found" ); } song->__is_modified = false; song->set_filename( filename ); return song; } Pattern* SongReader::getPattern( QDomNode pattern, InstrumentList* instrList ) { Pattern* pPattern = NULL; QString sName; // name sName = LocalFileMng::readXmlString( pattern, "name", sName ); QString sInfo; sInfo = LocalFileMng::readXmlString( pattern, "info", sInfo ,false ,false ); QString sCategory; // category sCategory = LocalFileMng::readXmlString( pattern, "category", sCategory ,false ,false ); int nSize = -1; nSize = LocalFileMng::readXmlInt( pattern, "size", nSize, false, false ); pPattern = new Pattern( sName, sInfo, sCategory, nSize ); QDomNode pNoteListNode = pattern.firstChildElement( "noteList" ); if ( ! pNoteListNode.isNull() ) { // new code :) QDomNode noteNode = pNoteListNode.firstChildElement( "note" ); while ( ! noteNode.isNull() ) { Note* pNote = NULL; unsigned nPosition = LocalFileMng::readXmlInt( noteNode, "position", 0 ); float fLeadLag = LocalFileMng::readXmlFloat( noteNode, "leadlag", 0.0 , false , false ); float fVelocity = LocalFileMng::readXmlFloat( noteNode, "velocity", 0.8f ); float fPan_L = LocalFileMng::readXmlFloat( noteNode, "pan_L", 0.5 ); float fPan_R = LocalFileMng::readXmlFloat( noteNode, "pan_R", 0.5 ); int nLength = LocalFileMng::readXmlInt( noteNode, "length", -1, true ); float nPitch = LocalFileMng::readXmlFloat( noteNode, "pitch", 0.0, false, false ); QString sKey = LocalFileMng::readXmlString( noteNode, "key", "C0", false, false ); QString nNoteOff = LocalFileMng::readXmlString( noteNode, "note_off", "false", false, false ); int instrId = LocalFileMng::readXmlInt( noteNode, "instrument", -1 ); Instrument* instrRef = NULL; // search instrument by ref instrRef = instrList->find( instrId ); if ( !instrRef ) { ERRORLOG( QString( "Instrument with ID: '%1' not found. Note skipped." ).arg( instrId ) ); noteNode = ( QDomNode ) noteNode.nextSiblingElement( "note" ); continue; } //assert( instrRef ); bool noteoff = false; if ( nNoteOff == "true" ) noteoff = true; pNote = new Note( instrRef, nPosition, fVelocity, fPan_L, fPan_R, nLength, nPitch ); pNote->set_key_octave( sKey ); pNote->set_lead_lag( fLeadLag ); pNote->set_note_off( noteoff ); pPattern->insert_note( pNote ); noteNode = ( QDomNode ) noteNode.nextSiblingElement( "note" ); } } else { // Back compatibility code. Version < 0.9.4 QDomNode sequenceListNode = pattern.firstChildElement( "sequenceList" ); int sequence_count = 0; QDomNode sequenceNode = sequenceListNode.firstChildElement( "sequence" ); while ( ! sequenceNode.isNull() ) { sequence_count++; QDomNode noteListNode = sequenceNode.firstChildElement( "noteList" ); QDomNode noteNode = noteListNode.firstChildElement( "note" ); while ( !noteNode.isNull() ) { Note* pNote = NULL; unsigned nPosition = LocalFileMng::readXmlInt( noteNode, "position", 0 ); float fLeadLag = LocalFileMng::readXmlFloat( noteNode, "leadlag", 0.0 , false , false ); float fVelocity = LocalFileMng::readXmlFloat( noteNode, "velocity", 0.8f ); float fPan_L = LocalFileMng::readXmlFloat( noteNode, "pan_L", 0.5 ); float fPan_R = LocalFileMng::readXmlFloat( noteNode, "pan_R", 0.5 ); int nLength = LocalFileMng::readXmlInt( noteNode, "length", -1, true ); float nPitch = LocalFileMng::readXmlFloat( noteNode, "pitch", 0.0, false, false ); int instrId = LocalFileMng::readXmlInt( noteNode, "instrument", -1 ); Instrument* instrRef = instrList->find( instrId ); assert( instrRef ); pNote = new Note( instrRef, nPosition, fVelocity, fPan_L, fPan_R, nLength, nPitch ); pNote->set_lead_lag( fLeadLag ); //infoLog( "new note!! pos: " + toString( pNote->m_nPosition ) + "\t instr: " + instrId ); pPattern->insert_note( pNote ); noteNode = ( QDomNode ) noteNode.nextSiblingElement( "note" ); } sequenceNode = ( QDomNode ) sequenceNode.nextSiblingElement( "sequence" ); } } return pPattern; } }; hydrogen-0.9.6-beta3/src/core/src/event_queue.cpp000066400000000000000000000036461211146647700217220ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include namespace H2Core { EventQueue* EventQueue::__instance = NULL; void EventQueue::create_instance() { if ( __instance == 0 ) { __instance = new EventQueue; } } const char* EventQueue::__class_name = "EventQueue"; EventQueue::EventQueue() : Object( __class_name ) , __read_index( 0 ) , __write_index( 0 ) { __instance = this; for ( int i = 0; i < MAX_EVENTS; ++i ) { __events_buffer[ i ].type = EVENT_NONE; __events_buffer[ i ].value = 0; } } EventQueue::~EventQueue() { // infoLog( "DESTROY" ); } void EventQueue::push_event( EventType type, int nValue ) { int nIndex = ++__write_index; nIndex = nIndex % MAX_EVENTS; // infoLog( "[pushEvent] " + toString( nIndex ) ); Event ev; ev.type = type; ev.value = nValue; __events_buffer[ nIndex ] = ev; } Event EventQueue::pop_event() { if ( __read_index == __write_index ) { Event ev; ev.type = EVENT_NONE; ev.value = 0; return ev; } int nIndex = ++__read_index; nIndex = nIndex % MAX_EVENTS; // infoLog( "[popEvent] " + toString( nIndex ) ); return __events_buffer[ nIndex ]; } }; hydrogen-0.9.6-beta3/src/core/src/fx/000077500000000000000000000000001211146647700172755ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/src/fx/effects.cpp000066400000000000000000000240061211146647700214220ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #ifdef H2CORE_HAVE_LADSPA #include #include #include #include #include #include #include #ifdef H2CORE_HAVE_LRDF #include #endif using namespace std; namespace H2Core { // static data Effects* Effects::__instance = NULL; const char* Effects::__class_name = "Effects"; Effects::Effects() : Object( __class_name ) , m_pRootGroup( NULL ) , m_pRecentGroup( NULL ) { __instance = this; for ( int nFX = 0; nFX < MAX_FX; ++nFX ) { m_FXList[ nFX ] = NULL; } getPluginList(); } void Effects::create_instance() { if ( __instance == 0 ) { __instance = new Effects; } } Effects::~Effects() { //INFOLOG( "DESTROY" ); if ( m_pRootGroup != NULL ) delete m_pRootGroup; //INFOLOG( "destroying " + to_string( m_pluginList.size() ) + " LADSPA plugins" ); for ( unsigned i = 0; i < m_pluginList.size(); i++ ) { delete m_pluginList[i]; } m_pluginList.clear(); for ( int nFX = 0; nFX < MAX_FX; ++nFX ) { delete m_FXList[ nFX ]; } } LadspaFX* Effects::getLadspaFX( int nFX ) { assert( nFX < MAX_FX ); return m_FXList[ nFX ]; } void Effects::setLadspaFX( LadspaFX* pFX, int nFX ) { assert( nFX < MAX_FX ); //INFOLOG( "[setLadspaFX] FX: " + pFX->getPluginLabel() + ", " + to_string( nFX ) ); AudioEngine::get_instance()->lock( RIGHT_HERE ); if ( m_FXList[ nFX ] ) { ( m_FXList[ nFX ] )->deactivate(); delete m_FXList[ nFX ]; } m_FXList[ nFX ] = pFX; if ( pFX != NULL ) { Preferences::get_instance()->setMostRecentFX( pFX->getPluginName() ); updateRecentGroup(); } AudioEngine::get_instance()->unlock(); } /// /// Loads only usable plugins /// std::vector Effects::getPluginList() { if ( m_pluginList.size() != 0 ) { return m_pluginList; } vector ladspaPathVect = Preferences::get_instance()->getLadspaPath(); INFOLOG( QString( "PATHS: %1" ).arg( ladspaPathVect.size() ) ); for ( vector::iterator i = ladspaPathVect.begin(); i != ladspaPathVect.end(); i++ ) { QString sPluginDir = *i; INFOLOG( "*** [getPluginList] reading directory: " + sPluginDir ); QDir dir( sPluginDir ); if ( !dir.exists() ) { INFOLOG( "Directory " + sPluginDir + " not found" ); continue; } QFileInfoList list = dir.entryInfoList(); for ( int i = 0; i < list.size(); ++i ) { QString sPluginName = list.at( i ).fileName(); if ( ( sPluginName == "." ) || ( sPluginName == ".." ) ) { continue; } // if the file ends with .so or .dll is a plugin, else... #ifdef WIN32 int pos = sPluginName.indexOf( ".dll" ); #else #ifdef Q_OS_MACX int pos = sPluginName.indexOf( ".dylib" ); #else int pos = sPluginName.indexOf( ".so" ); #endif #endif if ( pos == -1 ) { continue; } //warningLog( "[getPluginList] Loading: " + sPluginName ); QString sAbsPath = QString( "%1/%2" ).arg( sPluginDir ).arg( sPluginName ); QLibrary lib( sAbsPath ); LADSPA_Descriptor_Function desc_func = ( LADSPA_Descriptor_Function )lib.resolve( "ladspa_descriptor" ); if ( desc_func == NULL ) { ERRORLOG( "Error loading the library. (" + sAbsPath + ")" ); continue; } const LADSPA_Descriptor * d; if ( desc_func ) { for ( unsigned i = 0; ( d = desc_func ( i ) ) != NULL; i++ ) { LadspaFXInfo* pFX = new LadspaFXInfo( QString::fromLocal8Bit(d->Name) ); pFX->m_sFilename = sAbsPath; pFX->m_sLabel = QString::fromLocal8Bit(d->Label); pFX->m_sID = QString::number(d->UniqueID); pFX->m_sMaker = QString::fromLocal8Bit(d->Maker); pFX->m_sCopyright = QString::fromLocal8Bit(d->Copyright); //INFOLOG( "Loading: " + pFX->m_sLabel ); for ( unsigned j = 0; j < d->PortCount; j++ ) { LADSPA_PortDescriptor pd = d->PortDescriptors[j]; if ( LADSPA_IS_PORT_INPUT( pd ) && LADSPA_IS_PORT_CONTROL( pd ) ) { pFX->m_nICPorts++; } else if ( LADSPA_IS_PORT_INPUT( pd ) && LADSPA_IS_PORT_AUDIO( pd ) ) { pFX->m_nIAPorts++; } else if ( LADSPA_IS_PORT_OUTPUT( pd ) && LADSPA_IS_PORT_CONTROL( pd ) ) { pFX->m_nOCPorts++; } else if ( LADSPA_IS_PORT_OUTPUT( pd ) && LADSPA_IS_PORT_AUDIO( pd ) ) { pFX->m_nOAPorts++; } else { // string sPortName = d->PortNames[ j ]; QString sPortName; ERRORLOG( QString( "%1::%2 unknown port type" ).arg( pFX->m_sLabel ).arg( sPortName ) ); } } if ( ( pFX->m_nIAPorts == 2 ) && ( pFX->m_nOAPorts == 2 ) ) { // Stereo plugin m_pluginList.push_back( pFX ); } else if ( ( pFX->m_nIAPorts == 1 ) && ( pFX->m_nOAPorts == 1 ) ) { // Mono plugin m_pluginList.push_back( pFX ); } else { // not supported plugin //WARNINGLOG( "Plugin not supported: " + sPluginName ); delete pFX; } } } else { ERRORLOG( "Error loading: " + sPluginName ); } } } INFOLOG( QString( "Loaded %1 LADSPA plugins" ).arg( m_pluginList.size() ) ); std::sort( m_pluginList.begin(), m_pluginList.end(), LadspaFXInfo::alphabeticOrder ); return m_pluginList; } LadspaFXGroup* Effects::getLadspaFXGroup() { INFOLOG( "[getLadspaFXGroup]" ); // LadspaFX::getPluginList(); // load the list if ( m_pRootGroup ) { return m_pRootGroup; } m_pRootGroup = new LadspaFXGroup( "Root" ); // Adding recent FX. m_pRecentGroup = new LadspaFXGroup( "Recently Used" ); m_pRootGroup->addChild( m_pRecentGroup ); updateRecentGroup(); LadspaFXGroup *pUncategorizedGroup = new LadspaFXGroup( "Uncategorized" ); m_pRootGroup->addChild( pUncategorizedGroup ); char C = 0; LadspaFXGroup* pGroup; for ( std::vector::iterator i = m_pluginList.begin(); i < m_pluginList.end(); i++ ) { char ch = (*i)->m_sName.toLocal8Bit().at(0); if ( ch != C ) { C = ch; pGroup = new LadspaFXGroup( QString( C ) ); pUncategorizedGroup->addChild( pGroup ); } pGroup->addLadspaInfo( *i ); } #ifdef H2CORE_HAVE_LRDF LadspaFXGroup *pLRDFGroup = new LadspaFXGroup( "Categorized(LRDF)" ); m_pRootGroup->addChild( pLRDFGroup ); getRDF( pLRDFGroup, m_pluginList ); #endif return m_pRootGroup; } void Effects::updateRecentGroup() { if ( m_pRecentGroup == NULL ) return; // Too early :s m_pRecentGroup->clear(); QString sRecent; // The recent fx names sit in the preferences object foreach ( sRecent, Preferences::get_instance()->getRecentFX() ) { for ( std::vector::iterator i = m_pluginList.begin(); i < m_pluginList.end(); i++ ) { if ( sRecent == (*i)->m_sName ) { m_pRecentGroup->addLadspaInfo( *i ); break; } } } } #ifdef H2CORE_HAVE_LRDF void Effects::getRDF( LadspaFXGroup *pGroup, vector pluginList ) { lrdf_init(); QString sDir = "/usr/share/ladspa/rdf"; QDir dir( sDir ); if ( !dir.exists() ) { WARNINGLOG( QString( "Directory %1 not found" ).arg( sDir ) ); return; } QFileInfoList list = dir.entryInfoList(); for ( int i = 0; i < list.size(); ++i ) { QString sFilename = list.at( i ).fileName(); int pos = sFilename.indexOf( ".rdf" ); if ( pos == -1 ) { continue; } QString sRDFFile = QString( "file://%1/%2" ).arg( sDir ).arg( sFilename ); int err = lrdf_read_file( sRDFFile.toLocal8Bit() ); if ( err ) { ERRORLOG( "Error parsing rdf file " + sFilename ); } QString sBase = "http://ladspa.org/ontology#Plugin"; RDFDescend( sBase, pGroup, pluginList ); } } // funzione ricorsiva void Effects::RDFDescend( const QString& sBase, LadspaFXGroup *pGroup, vector pluginList ) { //cout << "LadspaFX::RDFDescend " << sBase.toLocal8Bit().constData() << endl; lrdf_uris* uris = lrdf_get_subclasses( sBase.toLocal8Bit() ); if ( uris ) { for ( int i = 0; i < ( int )uris->count; i++ ) { QString sGroup = QString::fromLocal8Bit(lrdf_get_label( uris->items[ i ] )); LadspaFXGroup *pNewGroup = NULL; // verifico se esiste gia una categoria con lo stesso nome vector childGroups = pGroup-> getChildList(); for ( unsigned nGroup = 0; nGroup < childGroups.size(); nGroup++ ) { LadspaFXGroup *pOldGroup = childGroups[nGroup]; if ( pOldGroup->getName() == sGroup ) { pNewGroup = pOldGroup; break; } } if ( pNewGroup == NULL ) { // il gruppo non esiste, lo creo pNewGroup = new LadspaFXGroup( sGroup ); pGroup->addChild( pNewGroup ); } RDFDescend( QString::fromLocal8Bit(uris->items[i]), pNewGroup, pluginList ); } lrdf_free_uris ( uris ); } uris = lrdf_get_instances( sBase.toLocal8Bit() ); if ( uris ) { for ( int i = 0; i < ( int )uris->count; i++ ) { int uid = lrdf_get_uid ( uris->items[i] ); // verifico che il plugin non sia gia nella lista bool bExists = false; vector fxVect = pGroup->getLadspaInfo(); for ( unsigned nFX = 0; nFX < fxVect.size(); nFX++ ) { LadspaFXInfo *pFX = fxVect[nFX]; if ( pFX->m_sID.toInt() == uid ) { bExists = true; continue; } } if ( bExists == false ) { // find the ladspaFXInfo for ( unsigned i = 0; i < pluginList.size(); i++ ) { LadspaFXInfo *pInfo = pluginList[i]; if ( pInfo->m_sID.toInt() == uid ) { pGroup->addLadspaInfo( pInfo ); // copy the LadspaFXInfo } } } } lrdf_free_uris ( uris ); } pGroup->sort(); } #endif // H2CORE_HAVE_LRDF }; #endif // H2CORE_HAVE_LADSPA hydrogen-0.9.6-beta3/src/core/src/fx/ladspa_fx.cpp000066400000000000000000000314311211146647700217440ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #ifdef H2CORE_HAVE_LADSPA #include #include #include #include #include using namespace std; #define LADSPA_IS_CONTROL_INPUT(x) (LADSPA_IS_PORT_INPUT(x) && LADSPA_IS_PORT_CONTROL(x)) #define LADSPA_IS_AUDIO_INPUT(x) (LADSPA_IS_PORT_INPUT(x) && LADSPA_IS_PORT_AUDIO(x)) #define LADSPA_IS_CONTROL_OUTPUT(x) (LADSPA_IS_PORT_OUTPUT(x) && LADSPA_IS_PORT_CONTROL(x)) #define LADSPA_IS_AUDIO_OUTPUT(x) (LADSPA_IS_PORT_OUTPUT(x) && LADSPA_IS_PORT_AUDIO(x)) namespace H2Core { const char* LadspaFXGroup::__class_name = "LadspaFXGroup"; LadspaFXGroup::LadspaFXGroup( const QString& sName ) : Object( __class_name ) { // infoLog( "INIT - " + sName ); m_sName = sName; } LadspaFXGroup::~LadspaFXGroup() { // infoLog( "DESTROY - " + m_sName ); for ( int i = 0; i < ( int )m_childGroups.size(); ++i ) { delete m_childGroups[ i ]; } } void LadspaFXGroup::addLadspaInfo( LadspaFXInfo *pInfo ) { m_ladspaList.push_back( pInfo ); } void LadspaFXGroup::addChild( LadspaFXGroup *pChild ) { m_childGroups.push_back( pChild ); } bool LadspaFXGroup::alphabeticOrder( LadspaFXGroup* a, LadspaFXGroup* b ) { return ( a->getName() < b->getName() ); } void LadspaFXGroup::sort() { std::sort( m_ladspaList.begin(), m_ladspaList.end(), LadspaFXInfo::alphabeticOrder ); std::sort( m_childGroups.begin(), m_childGroups.end(), LadspaFXGroup::alphabeticOrder ); } //////////////// const char* LadspaFXInfo::__class_name = "LadspaFXInfo"; LadspaFXInfo::LadspaFXInfo( const QString& sName ) : Object( __class_name ) { // infoLog( "INIT - " + sName ); m_sFilename = ""; m_sLabel = ""; m_sName = sName; m_nICPorts = 0; m_nOCPorts = 0; m_nIAPorts = 0; m_nOAPorts = 0; } LadspaFXInfo::~LadspaFXInfo() { // infoLog( "DESTROY " + m_sName ); } bool LadspaFXInfo::alphabeticOrder( LadspaFXInfo* a, LadspaFXInfo* b ) { return ( a->m_sName < b->m_sName ); } /////////////////// const char* LadspaFX::__class_name = "LadspaFX"; // ctor LadspaFX::LadspaFX( const QString& sLibraryPath, const QString& sPluginLabel ) : Object( __class_name ) //, m_nBufferSize( 0 ) , m_pBuffer_L( NULL ) , m_pBuffer_R( NULL ) , m_pluginType( UNDEFINED ) , m_bEnabled( false ) , m_bActivated( false ) , m_sLabel( sPluginLabel ) , m_sLibraryPath( sLibraryPath ) , m_pLibrary( NULL ) , m_d( NULL ) , m_handle( NULL ) , m_fVolume( 1.0f ) , m_nICPorts( 0 ) , m_nOCPorts( 0 ) , m_nIAPorts( 0 ) , m_nOAPorts( 0 ) { INFOLOG( QString( "INIT - %1 - %2" ).arg( sLibraryPath ).arg( sPluginLabel ) ); m_pBuffer_L = new float[MAX_BUFFER_SIZE]; m_pBuffer_R = new float[MAX_BUFFER_SIZE]; // Touch all the memory (is this really necessary?) for ( unsigned i = 0; i < MAX_BUFFER_SIZE; ++i ) { m_pBuffer_L[ i ] = 0; m_pBuffer_R[ i ] = 0; } } // dtor LadspaFX::~LadspaFX() { // dealloca il plugin INFOLOG( QString( "DESTROY - %1 - %2" ).arg( m_sLibraryPath ).arg( m_sLabel ) ); if ( m_d ) { /* if ( m_d->deactivate ) { if ( m_handle ) { INFOLOG( "deactivate" ); m_d->deactivate( m_handle ); } }*/ deactivate(); if ( m_d->cleanup ) { if ( m_handle ) { INFOLOG( "Cleanup" ); m_d->cleanup( m_handle ); } } } delete m_pLibrary; for ( unsigned i = 0; i < inputControlPorts.size(); i++ ) { delete inputControlPorts[i]; } for ( unsigned i = 0; i < outputControlPorts.size(); i++ ) { delete outputControlPorts[i]; } delete[] m_pBuffer_L; delete[] m_pBuffer_R; } // Static LadspaFX* LadspaFX::load( const QString& sLibraryPath, const QString& sPluginLabel, long nSampleRate ) { LadspaFX* pFX = new LadspaFX( sLibraryPath, sPluginLabel ); _INFOLOG( "INIT - " + sLibraryPath + " - " + sPluginLabel ); pFX->m_pLibrary = new QLibrary( sLibraryPath ); LADSPA_Descriptor_Function desc_func = ( LADSPA_Descriptor_Function )pFX->m_pLibrary->resolve( "ladspa_descriptor" ); if ( desc_func == NULL ) { _ERRORLOG( "Error loading the library. (" + sLibraryPath + ")" ); delete pFX; return NULL; } if ( desc_func ) { for ( unsigned i = 0; ( pFX->m_d = desc_func( i ) ) != NULL; i++ ) { QString sName = QString::fromLocal8Bit(pFX->m_d->Name); QString sLabel = QString::fromLocal8Bit(pFX->m_d->Label); if ( sLabel != sPluginLabel ) { continue; } pFX->setPluginName( sName ); for ( unsigned j = 0; j < pFX->m_d->PortCount; j++ ) { LADSPA_PortDescriptor pd = pFX->m_d->PortDescriptors[j]; if ( LADSPA_IS_PORT_INPUT( pd ) && LADSPA_IS_PORT_CONTROL( pd ) ) { pFX->m_nICPorts++; } else if ( LADSPA_IS_PORT_INPUT( pd ) && LADSPA_IS_PORT_AUDIO( pd ) ) { pFX->m_nIAPorts++; } else if ( LADSPA_IS_PORT_OUTPUT( pd ) && LADSPA_IS_PORT_CONTROL( pd ) ) { pFX->m_nOCPorts++; } else if ( LADSPA_IS_PORT_OUTPUT( pd ) && LADSPA_IS_PORT_AUDIO( pd ) ) { pFX->m_nOAPorts++; } else { _ERRORLOG( "Unknown port type" ); } } break; } } else { _ERRORLOG( "Error in dlsym" ); delete pFX; return NULL; } if ( ( pFX->m_nIAPorts == 2 ) && ( pFX->m_nOAPorts == 2 ) ) { // Stereo plugin pFX->m_pluginType = STEREO_FX; } else if ( ( pFX->m_nIAPorts == 1 ) && ( pFX->m_nOAPorts == 1 ) ) { // Mono plugin pFX->m_pluginType = MONO_FX; } else { _ERRORLOG( "Wrong number of ports" ); _ERRORLOG( QString( "in audio = %1" ).arg( pFX->m_nIAPorts ) ); _ERRORLOG( QString( "out audio = %1" ).arg( pFX->m_nOAPorts ) ); } //pFX->infoLog( "[LadspaFX::load] instantiate " + pFX->getPluginName() ); pFX->m_handle = pFX->m_d->instantiate( pFX->m_d, nSampleRate ); for ( unsigned nPort = 0; nPort < pFX->m_d->PortCount; nPort++ ) { LADSPA_PortDescriptor pd = pFX->m_d->PortDescriptors[ nPort ]; if ( LADSPA_IS_CONTROL_INPUT( pd ) ) { QString sName = QString::fromLocal8Bit(pFX->m_d->PortNames[ nPort ]); float fMin = 0.0; float fMax = 0.0; float fDefault = 0.0; bool isToggle = false; bool isInteger = false; LADSPA_PortRangeHint rangeHints = pFX->m_d->PortRangeHints[ nPort ]; if ( LADSPA_IS_HINT_BOUNDED_BELOW( rangeHints.HintDescriptor ) ) { fMin = ( pFX->m_d->PortRangeHints[ nPort ] ).LowerBound; } if ( LADSPA_IS_HINT_BOUNDED_ABOVE( rangeHints.HintDescriptor ) ) { fMax = ( pFX->m_d->PortRangeHints[ nPort ] ).UpperBound; } if ( LADSPA_IS_HINT_TOGGLED( rangeHints.HintDescriptor ) ) { isToggle = true; // this way the fader will act like a toggle (0, 1) isInteger = true; fMin = 0.0; fMax = 1.0; } if ( LADSPA_IS_HINT_SAMPLE_RATE( rangeHints.HintDescriptor ) ) { _WARNINGLOG( "samplerate hint not implemented yet" ); } if ( LADSPA_IS_HINT_LOGARITHMIC( rangeHints.HintDescriptor ) ) { _WARNINGLOG( "logarithmic hint not implemented yet" ); } if ( LADSPA_IS_HINT_INTEGER( rangeHints.HintDescriptor ) ) { isInteger = true; } if ( LADSPA_IS_HINT_HAS_DEFAULT( rangeHints.HintDescriptor ) ) { if ( LADSPA_IS_HINT_DEFAULT_MINIMUM( rangeHints.HintDescriptor ) ) { fDefault = fMin; } if ( LADSPA_IS_HINT_DEFAULT_LOW( rangeHints.HintDescriptor ) ) { // TODO: bisogna gestire diversamente se viene specificato di usare la scala logaritmica fDefault = ( fMin * 0.75 + fMax * 0.25 ); } if ( LADSPA_IS_HINT_DEFAULT_MIDDLE( rangeHints.HintDescriptor ) ) { fDefault = ( fMax - fMin ) / 2.0; } if ( LADSPA_IS_HINT_DEFAULT_HIGH( rangeHints.HintDescriptor ) ) { // TODO: bisogna gestire diversamente se viene specificato di usare la scala logaritmica fDefault = ( fMin * 0.25 + fMax * 0.75 ); } if ( LADSPA_IS_HINT_DEFAULT_MAXIMUM( rangeHints.HintDescriptor ) ) { fDefault = fMax; } if ( LADSPA_IS_HINT_DEFAULT_0( rangeHints.HintDescriptor ) ) { fDefault = 0.0; } if ( LADSPA_IS_HINT_DEFAULT_1( rangeHints.HintDescriptor ) ) { fDefault = 1.0; } if ( LADSPA_IS_HINT_DEFAULT_100( rangeHints.HintDescriptor ) ) { fDefault = 100.0; } if ( LADSPA_IS_HINT_DEFAULT_440( rangeHints.HintDescriptor ) ) { fDefault = 440.0; } } LadspaControlPort* pControl = new LadspaControlPort(); pControl->sName = sName; pControl->fLowerBound = fMin; pControl->fUpperBound = fMax; pControl->fControlValue = fDefault; pControl->isToggle = isToggle; pControl->m_bIsInteger = isInteger; _INFOLOG( QString( "Input control port\t[%1]\tmin=%2,\tmax=%3,\tcontrolValue=%4" ).arg( sName ).arg( fMin ).arg( fMax ).arg( pControl->fControlValue ) ); pFX->inputControlPorts.push_back( pControl ); pFX->m_d->connect_port( pFX->m_handle, nPort, &( pControl->fControlValue ) ); } else if ( LADSPA_IS_CONTROL_OUTPUT( pd ) ) { QString sName = QString::fromLocal8Bit(pFX->m_d->PortNames[ nPort ]); float fMin = 0.0; float fMax = 0.0; float fDefault = 0.0; LADSPA_PortRangeHint rangeHints = pFX->m_d->PortRangeHints[ nPort ]; if ( LADSPA_IS_HINT_BOUNDED_BELOW( rangeHints.HintDescriptor ) ) { fMin = ( pFX->m_d->PortRangeHints[ nPort ] ).LowerBound; } if ( LADSPA_IS_HINT_BOUNDED_ABOVE( rangeHints.HintDescriptor ) ) { fMax = ( pFX->m_d->PortRangeHints[ nPort ] ).UpperBound; } /* LadspaControlPort* pControl = new LadspaControlPort(); pControl->sName = pFX->m_d->PortNames[ nPort ]; pControl->fLowerBound = ( pFX->m_d->PortRangeHints[ nPort ] ).LowerBound; pControl->fUpperBound = ( pFX->m_d->PortRangeHints[ nPort ] ).UpperBound; pControl->fControlValue = pControl->fUpperBound / 2.0; */ // always middle fDefault = ( fMax - fMin ) / 2.0; LadspaControlPort* pControl = new LadspaControlPort(); pControl->sName = sName; pControl->fLowerBound = fMin; pControl->fUpperBound = fMax; pControl->fControlValue = fDefault; //pFX->infoLog( "[LadspaFX::load] Output control port\t[" + sName + "]\tmin=" + to_string(fMin) + ",\tmax=" + to_string(fMax) + ",\tcontrolValue=" + to_string(pControl->fControlValue) ); pFX->outputControlPorts.push_back( pControl ); pFX->m_d->connect_port( pFX->m_handle, nPort, &( pControl->fControlValue ) ); } else if ( LADSPA_IS_AUDIO_INPUT( pd ) ) { } else if ( LADSPA_IS_AUDIO_OUTPUT( pd ) ) { } else { _ERRORLOG( "unknown port" ); } } return pFX; } void LadspaFX::connectAudioPorts( float* pIn_L, float* pIn_R, float* pOut_L, float* pOut_R ) { INFOLOG( "[connectAudioPorts]" ); unsigned nAIConn = 0; unsigned nAOConn = 0; for ( unsigned nPort = 0; nPort < m_d->PortCount; nPort++ ) { LADSPA_PortDescriptor pd = m_d->PortDescriptors[ nPort ]; if ( LADSPA_IS_CONTROL_INPUT( pd ) ) { } else if ( LADSPA_IS_CONTROL_OUTPUT( pd ) ) { } else if ( LADSPA_IS_AUDIO_INPUT( pd ) ) { if ( nAIConn == 0 ) { m_d->connect_port( m_handle, nPort, pIn_L ); //infoLog( "connect input port (L): " + string( m_d->PortNames[ nPort ] ) ); } else if ( nAIConn == 1 ) { m_d->connect_port( m_handle, nPort, pIn_R ); //infoLog( "connect input port (R): " + string( m_d->PortNames[ nPort ] ) ); } else { ERRORLOG( "too many input ports.." ); } nAIConn++; } else if ( LADSPA_IS_AUDIO_OUTPUT( pd ) ) { if ( nAOConn == 0 ) { m_d->connect_port( m_handle, nPort, pOut_L ); //infoLog( "connect output port (L): " + string( m_d->PortNames[ nPort ] ) ); } else if ( nAOConn == 1 ) { m_d->connect_port( m_handle, nPort, pOut_R ); //infoLog( "connect output port (R): " + string( m_d->PortNames[ nPort ] ) ); } else { ERRORLOG( "too many output ports.." ); } nAOConn++; } else { ERRORLOG( "unknown port" ); } } } void LadspaFX::processFX( unsigned nFrames ) { // infoLog( "[LadspaFX::applyFX()]" ); if( m_bActivated ) m_d->run( m_handle, nFrames ); } void LadspaFX::activate() { if ( m_d->activate ) { INFOLOG( "activate " + getPluginName() ); m_bActivated = true; m_d->activate( m_handle ); } } void LadspaFX::deactivate() { if ( m_d->deactivate && m_bActivated ) { INFOLOG( "deactivate " + getPluginName() ); m_bActivated = false; m_d->deactivate( m_handle ); } } void LadspaFX::setVolume( float fValue ) { if ( fValue > 2.0 ) { fValue = 2.0; } else if ( fValue < 0.0 ) { fValue = 0.0; } m_fVolume = fValue; } }; #endif // H2CORE_HAVE_LADSPA hydrogen-0.9.6-beta3/src/core/src/helpers/000077500000000000000000000000001211146647700203225ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/src/helpers/filesystem.cpp000066400000000000000000000357431211146647700232260ustar00rootroot00000000000000 #include #include #include #include #include #include // directories #define LOCAL_DATA_PATH "/data" #define IMG "/img" #define DOC "/doc" #define I18N "/i18n" #define SONGS "/songs" #define PATTERNS "/patterns" #define DRUMKITS "/drumkits" #define PLAYLISTS "/playlists" #define DEMOS "/demo_songs" #define XSD "/xsd" #define TMP "/hydrogen" // files #define GUI_CONFIG "/gui.conf" #define CORE_CONFIG "/core.conf" #define CLICK_SAMPLE "/click.wav" #define EMPTY_SAMPLE "/emptySample.wav" #define EMPTY_SONG "/DefaultSong.h2song" // filters #define SONG_FILTER "*.h2song" #define PATTERN_FILTER "*.h2pattern" #define DRUMKIT_XML "drumkit.xml" #define DRUMKIT_XSD "drumkit.xsd" #define DRUMPAT_XSD "drumkit_pattern.xsd" #define PATTERN_XSD "pattern.xsd" namespace H2Core { Logger* Filesystem::__logger = 0; const char* Filesystem::__class_name = "Filesystem"; QString Filesystem::__sys_data_path; QString Filesystem::__usr_data_path; /* TODO QCoreApplication is not instanciated */ bool Filesystem::bootstrap( Logger* logger, const QString& sys_path ) { if( __logger==0 && logger!=0 ) { __logger = logger; } else { return false; } #ifdef Q_OS_MACX #ifdef H2CORE_HAVE_BUNDLE //Bundle: Prepare hydrogen to use path names which are used in app bundles: http://en.wikipedia.org/wiki/Application_Bundle __sys_data_path = QCoreApplication::applicationDirPath().append( "/../Resources/data" ) ; #else __sys_data_path = QCoreApplication::applicationDirPath().append( "/data" ) ; #endif __usr_data_path = QDir::homePath().append( "/Library/Application Support/Hydrogen/data" ); #elif WIN32 __sys_data_path = QCoreApplication::applicationDirPath().append( "/data" ) ; __usr_data_path = QCoreApplication::applicationDirPath().append( "/hydrogen/data" ) ; #else __sys_data_path = SYS_DATA_PATH; __usr_data_path = QDir::homePath().append( "/"USR_DATA_PATH ); #endif if( sys_path!=0 ) __sys_data_path = sys_path; if( !dir_readable( __sys_data_path ) ) { __sys_data_path = QCoreApplication::applicationDirPath().append( LOCAL_DATA_PATH ); ERRORLOG( QString( "will use local data path : %1" ).arg( __sys_data_path ) ); } return check_sys_paths() && check_usr_paths(); } bool Filesystem::check_permissions( const QString& path, const int perms, bool silent ) { QFileInfo fi( path ); if( ( perms & is_file ) && ( perms & is_writable ) && !fi.exists() ) { QFileInfo folder( path.left( path.lastIndexOf( "/" ) ) ); if( !folder.isDir() ) { if( !silent ) ERRORLOG( QString( "%1 is not a directory" ).arg( folder.fileName() ) ); return false; } if( !folder.isWritable() ) { if( !silent ) ERRORLOG( QString( "%1 is not writable" ).arg( folder.fileName() ) ); return false; } return true; } if( ( perms & is_dir ) && !fi.isDir() ) { if( !silent ) ERRORLOG( QString( "%1 is not a directory" ).arg( path ) ); return false; } if( ( perms & is_file ) && !fi.isFile() ) { if( !silent ) ERRORLOG( QString( "%1 is not a file" ).arg( path ) ); return false; } if( ( perms & is_readable ) && !fi.isReadable() ) { if( !silent ) ERRORLOG( QString( "%1 is not readable" ).arg( path ) ); return false; } if( ( perms & is_writable ) && !fi.isWritable() ) { if( !silent ) ERRORLOG( QString( "%1 is not writable" ).arg( path ) ); return false; } if( ( perms & is_executable ) && !fi.isExecutable() ) { if( !silent ) ERRORLOG( QString( "%1 is not executable" ).arg( path ) ); return false; } return true; } bool Filesystem::file_exists( const QString& path, bool silent ) { return check_permissions( path, is_file, silent ); } bool Filesystem::file_readable( const QString& path, bool silent ) { return check_permissions( path, is_file|is_readable, silent ); } bool Filesystem::file_writable( const QString& path, bool silent ) { return check_permissions( path, is_file|is_writable, silent ); } bool Filesystem::file_executable( const QString& path, bool silent ) { return check_permissions( path, is_file|is_executable, silent ); } bool Filesystem::dir_readable( const QString& path, bool silent ) { return check_permissions( path, is_dir|is_readable|is_executable, silent ); } bool Filesystem::dir_writable( const QString& path, bool silent ) { return check_permissions( path, is_dir|is_writable, silent ); } bool Filesystem::mkdir( const QString& path ) { if ( !QDir( "/" ).mkpath( QDir( path ).absolutePath() ) ) { ERRORLOG( QString( "unable to create directory : %1" ).arg( path ) ); return false; } return true; } bool Filesystem::path_usable( const QString& path, bool create, bool silent ) { if( !QDir( path ).exists() ) { if( !silent ) INFOLOG( QString( "create user directory : %1" ).arg( path ) ); if( create && !QDir( "/" ).mkpath( path ) ) { if( !silent ) ERRORLOG( QString( "unable to create user directory : %1" ).arg( path ) ); return false; } } return dir_readable( path, silent ) && dir_writable( path, silent ); } bool Filesystem::write_to_file( const QString& dst, const QString& content ) { if ( !file_writable( dst ) ) { ERRORLOG( QString( "unable to write to %1" ).arg( dst ) ); return false; } QFile file( dst ); if ( !file.open( QIODevice::WriteOnly ) ) { ERRORLOG( QString( "unable to write to %1" ).arg( dst ) ); return false; } file.write( content.toUtf8().data() ); file.close(); } bool Filesystem::file_copy( const QString& src, const QString& dst, bool overwrite ) { if( file_exists( dst, true ) && !overwrite ) { WARNINGLOG( QString( "do not overwrite %1 with %2 has it already exists" ).arg( dst ).arg( src ) ); return true; } if ( !file_readable( src ) ) { ERRORLOG( QString( "unable to copy %1 to %2, %1 is not readable" ).arg( src ).arg( dst ) ); return false; } if ( !file_writable( dst ) ) { ERRORLOG( QString( "unable to copy %1 to %2, %2 is not writable" ).arg( src ).arg( dst ) ); return false; } INFOLOG( QString( "copy %1 to %2" ).arg( src ).arg( dst ) ); return QFile::copy( src,dst ); } bool Filesystem::rm( const QString& path, bool recursive ) { if ( check_permissions( path, is_file, true ) ) { QFile file( path ); bool ret = file.remove(); if( !ret ) { ERRORLOG( QString( "unable to remove file %1" ).arg( path ) ); } return ret; } if ( !check_permissions( path, is_dir, true ) ) { ERRORLOG( QString( "%1 is neither a file nor a directory ?!?!" ).arg( path ) ); return false; } if ( !recursive ) { QDir dir; bool ret = dir.rmdir( path ); if( !ret ) { ERRORLOG( QString( "unable to remove dir %1 without recursive argument, maybe it is not empty?" ).arg( path ) ); } return ret; } return rm_fr( path ); } bool Filesystem::rm_fr( const QString& path ) { bool ret = true; QDir dir( path ); QFileInfoList entries = dir.entryInfoList( QDir::NoDotAndDotDot | QDir::AllEntries ); for ( int idx = 0; ( ( idx < entries.size() ) && ret ); idx++ ) { QFileInfo entryInfo = entries[idx]; if ( entryInfo.isDir() && !entryInfo.isSymLink() ) { ret = rm_fr( entryInfo.absoluteFilePath() ); } else { QFile file( entryInfo.absoluteFilePath() ); if ( !file.remove() ) { ERRORLOG( QString( "unable to remove %1" ).arg( entryInfo.absoluteFilePath() ) ); ret = false; } } } if ( !dir.rmdir( dir.absolutePath() ) ) { ERRORLOG( QString( "unable to remove %1" ).arg( dir.absolutePath() ) ); ret = false; } return ret; } bool Filesystem::check_sys_paths() { if( !dir_readable( __sys_data_path ) ) return false; if( !dir_readable( img_dir() ) ) return false; if( !dir_readable( xsd_dir() ) ) return false; if( !dir_readable( doc_dir() ) ) return false; if( !dir_readable( i18n_dir() ) ) return false; if( !dir_readable( demos_dir() ) ) return false; if( !file_readable( click_file() ) ) return false; if( !file_readable( empty_song() ) ) return false; if( !file_readable( empty_sample() ) ) return false; //@Jeremy: Please check if those files are obsolote //if( !file_readable( sys_gui_config() ) ) return false; //if( !file_readable( sys_core_config() ) ) return false; //if( !file_readable( pattern_xsd() ) ) return false; if( !dir_readable( sys_drumkits_dir() ) ) return false; if( !file_readable( drumkit_xsd() ) ) return false; if( !file_readable( drumkit_pattern_xsd() ) ) return false; INFOLOG( QString( "system wide data path %1 is usable." ).arg( __sys_data_path ) ); return true; } bool Filesystem::check_usr_paths() { if( !path_usable( __usr_data_path ) ) return false; if( !path_usable( songs_dir() ) ) return false; if( !path_usable( patterns_dir() ) ) return false; if( !path_usable( playlists_dir() ) ) return false; if( !path_usable( usr_drumkits_dir() ) ) return false; INFOLOG( QString( "user path %1 is usable." ).arg( __usr_data_path ) ); return true; } QString Filesystem::sys_data_path() { return __sys_data_path; } QString Filesystem::usr_data_path() { return __usr_data_path; } // FILES QString Filesystem::sys_core_config() { return __sys_data_path + CORE_CONFIG; } QString Filesystem::usr_core_config() { return __usr_data_path + CORE_CONFIG; } QString Filesystem::sys_gui_config() { return __sys_data_path + GUI_CONFIG; } QString Filesystem::usr_gui_config() { return __usr_data_path + GUI_CONFIG; } QString Filesystem::empty_sample() { return __sys_data_path + EMPTY_SAMPLE; } QString Filesystem::empty_song() { return __sys_data_path + EMPTY_SONG; } QString Filesystem::click_file() { return __sys_data_path + CLICK_SAMPLE; } QString Filesystem::usr_click_file() { if( file_readable( __usr_data_path + CLICK_SAMPLE, true ) ) return __usr_data_path + CLICK_SAMPLE; return click_file(); } QString Filesystem::drumkit_xsd( ) { return xsd_dir() + "/" + DRUMKIT_XSD; } QString Filesystem::drumkit_pattern_xsd( ) { return xsd_dir() + "/" + DRUMPAT_XSD; } QString Filesystem::pattern_xsd( ) { return xsd_dir() + "/" + PATTERN_XSD; } // DIRS QString Filesystem::img_dir() { return __sys_data_path + IMG; } QString Filesystem::doc_dir() { return __sys_data_path + DOC; } QString Filesystem::i18n_dir() { return __sys_data_path + I18N; } QString Filesystem::songs_dir() { return __usr_data_path + SONGS; } QString Filesystem::patterns_dir() { return __usr_data_path + PATTERNS; } QString Filesystem::sys_drumkits_dir() { return __sys_data_path + DRUMKITS; } QString Filesystem::usr_drumkits_dir() { return __usr_data_path + DRUMKITS; } QString Filesystem::playlists_dir() { return __usr_data_path + PLAYLISTS; } QString Filesystem::demos_dir() { return __sys_data_path + DEMOS; } QString Filesystem::xsd_dir() { return __sys_data_path + XSD; } QString Filesystem::tmp_dir() { return QDir::tempPath() + TMP; } QString Filesystem::tmp_file( const QString& base ) { QTemporaryFile file( tmp_dir()+"/"+base ); file.setAutoRemove( false ); file.open(); file.close(); return file.fileName(); } // DRUMKITS QStringList Filesystem::drumkits_list( const QString& path ) { QStringList ok; QStringList possible = QDir( path ).entryList( QDir::Dirs | QDir::NoDotAndDotDot ); for( int i=0; i #include #include #include #include #include #include #include #include #include #include #include #include namespace H2Core { const char* Legacy::__class_name = "Legacy"; Drumkit* Legacy::load_drumkit( const QString& dk_path ) { if ( version_older_than( 0, 9, 8 ) ) { ERRORLOG( QString( "this code should not be used anymore, it belongs to 0.9.6" ) ); } else { ERRORLOG( QString( "loading drumkit with legacy code" ) ); } XMLDoc doc; if( !doc.read( dk_path ) ) { return 0; } XMLNode root = doc.firstChildElement( "drumkit_info" ); if ( root.isNull() ) { ERRORLOG( "drumkit_info node not found" ); return 0; } QString drumkit_name = root.read_string( "name", "", false, false ); if ( drumkit_name.isEmpty() ) { ERRORLOG( "Drumkit has no name, abort" ); return 0; } Drumkit* drumkit = new Drumkit(); drumkit->set_path( dk_path.left( dk_path.lastIndexOf( "/" ) ) ); drumkit->set_name( drumkit_name ); drumkit->set_author( root.read_string( "author", "undefined author" ) ); drumkit->set_info( root.read_string( "info", "defaultInfo" ) ); drumkit->set_license( root.read_string( "license", "undefined license" ) ); XMLNode instruments_node = root.firstChildElement( "instrumentList" ); if ( instruments_node.isNull() ) { WARNINGLOG( "instrumentList node not found" ); drumkit->set_instruments( new InstrumentList() ); } else { InstrumentList* instruments = new InstrumentList(); XMLNode instrument_node = instruments_node.firstChildElement( "instrument" ); int count = 0; while ( !instrument_node.isNull() ) { count++; if ( count > MAX_INSTRUMENTS ) { ERRORLOG( QString( "instrument count >= %2, stop reading instruments" ).arg( MAX_INSTRUMENTS ) ); break; } Instrument* instrument = 0; int id = instrument_node.read_int( "id", EMPTY_INSTR_ID, false, false ); if ( id!=EMPTY_INSTR_ID ) { instrument = new Instrument( id, instrument_node.read_string( "name", "" ), 0 ); instrument->set_drumkit_name( drumkit_name ); instrument->set_volume( instrument_node.read_float( "volume", 1.0f ) ); instrument->set_muted( instrument_node.read_bool( "isMuted", false ) ); instrument->set_pan_l( instrument_node.read_float( "pan_L", 1.0f ) ); instrument->set_pan_r( instrument_node.read_float( "pan_R", 1.0f ) ); // may not exist, but can't be empty instrument->set_filter_active( instrument_node.read_bool( "filterActive", true, false ) ); instrument->set_filter_cutoff( instrument_node.read_float( "filterCutoff", 1.0f, true, false ) ); instrument->set_filter_resonance( instrument_node.read_float( "filterResonance", 0.0f, true, false ) ); instrument->set_random_pitch_factor( instrument_node.read_float( "randomPitchFactor", 0.0f, true, false ) ); float attack = instrument_node.read_float( "Attack", 0.0f, true, false ); float decay = instrument_node.read_float( "Decay", 0.0f, true, false ); float sustain = instrument_node.read_float( "Sustain", 1.0f, true, false ); float release = instrument_node.read_float( "Release", 1000.0f, true, false ); instrument->set_adsr( new ADSR( attack, decay, sustain, release ) ); instrument->set_gain( instrument_node.read_float( "gain", 1.0f, true, false ) ); instrument->set_mute_group( instrument_node.read_int( "muteGroup", -1, true, false ) ); instrument->set_midi_out_channel( instrument_node.read_int( "midiOutChannel", -1, true, false ) ); instrument->set_midi_out_note( instrument_node.read_int( "midiOutNote", MIDI_MIDDLE_C, true, false ) ); instrument->set_stop_notes( instrument_node.read_bool( "isStopNote", true ,false ) ); for ( int i=0; iset_fx_level( instrument_node.read_float( QString( "FX%1Level" ).arg( i+1 ), 0.0 ), i ); } QDomNode filename_node = instrument_node.firstChildElement( "filename" ); if ( !filename_node.isNull() ) { DEBUGLOG( "Using back compatibility code. filename node found" ); QString sFilename = instrument_node.read_string( "filename", "" ); if( sFilename.isEmpty() ) { ERRORLOG( "filename back compability node is empty" ); } else { Sample* sample = new Sample( dk_path+"/"+sFilename ); InstrumentLayer* layer = new InstrumentLayer( sample ); instrument->set_layer( layer, 0 ); } } else { int n = 0; XMLNode layer_node = instrument_node.firstChildElement( "layer" ); while ( !layer_node.isNull() ) { if ( n >= MAX_LAYERS ) { ERRORLOG( QString( "n >= MAX_LAYERS (%1)" ).arg( MAX_LAYERS ) ); break; } Sample* sample = new Sample( dk_path+"/"+layer_node.read_string( "filename", "" ) ); InstrumentLayer* layer = new InstrumentLayer( sample ); layer->set_start_velocity( layer_node.read_float( "min", 0.0 ) ); layer->set_end_velocity( layer_node.read_float( "max", 1.0 ) ); layer->set_gain( layer_node.read_float( "gain", 1.0, true, false ) ); layer->set_pitch( layer_node.read_float( "pitch", 0.0, true, false ) ); instrument->set_layer( layer, n ); n++; layer_node = layer_node.nextSiblingElement( "layer" ); } } } if( instrument ) { ( *instruments ) << instrument; } else { ERRORLOG( QString( "Empty ID for instrument %1. The drumkit is corrupted. Skipping instrument" ).arg( count ) ); count--; } instrument_node = instrument_node.nextSiblingElement( "instrument" ); } drumkit->set_instruments( instruments ); } return drumkit; } Pattern* Legacy::load_drumkit_pattern( const QString& pattern_path ) { ERRORLOG( "NOT IMPLEMENTED YET !!!" ); return 0; } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/helpers/xml.cpp000066400000000000000000000130271211146647700216310ustar00rootroot00000000000000 #include #include #include #include #include #include #include #define XMLNS_BASE "http://www.hydrogen-music.org/" #define XMLNS_XSI "http://www.w3.org/2001/XMLSchema-instance" namespace H2Core { const char* XMLNode::__class_name ="XMLNode"; XMLNode::XMLNode() : Object( __class_name ) { } XMLNode::XMLNode( QDomNode node ) : Object( __class_name ), QDomNode( node ) { } QString XMLNode::read_child_node( const QString& node, bool inexistent_ok, bool empty_ok ) { if( isNull() ) { DEBUGLOG( QString( "try to read %1 XML node from an empty parent %2." ).arg( node ).arg( nodeName() ) ); return 0; } QDomElement el = firstChildElement( node ); if( el.isNull() ) { if( !inexistent_ok ) DEBUGLOG( QString( "XML node %1->%2 should exists." ).arg( nodeName() ).arg( node ) ); return 0; } if( el.text().isEmpty() ) { if( !empty_ok ) DEBUGLOG( QString( "XML node %1->%2 should not be empty." ).arg( nodeName() ).arg( node ) ); return 0; } return el.text(); } QString XMLNode::read_string( const QString& node, const QString& default_value, bool inexistent_ok, bool empty_ok ) { QString ret = read_child_node( node, inexistent_ok, empty_ok ); if( ret.isNull() ) { DEBUGLOG( QString( "Using default value %1 for %2" ).arg( default_value ).arg( node ) ); return default_value; } return ret; } float XMLNode::read_float( const QString& node, float default_value, bool inexistent_ok, bool empty_ok ) { QString ret = read_child_node( node, inexistent_ok, empty_ok ); if( ret.isNull() ) { DEBUGLOG( QString( "Using default value %1 for %2" ).arg( default_value ).arg( node ) ); return default_value; } QLocale c_locale = QLocale::c(); return c_locale.toFloat( ret ); } int XMLNode::read_int( const QString& node, int default_value, bool inexistent_ok, bool empty_ok ) { QString ret = read_child_node( node, inexistent_ok, empty_ok ); if( ret.isNull() ) { DEBUGLOG( QString( "Using default value %1 for %2" ).arg( default_value ).arg( node ) ); return default_value; } QLocale c_locale = QLocale::c(); return c_locale.toInt( ret ); } bool XMLNode::read_bool( const QString& node, bool default_value, bool inexistent_ok, bool empty_ok ) { QString ret = read_child_node( node, inexistent_ok, empty_ok ); if( ret.isNull() ) { DEBUGLOG( QString( "Using default value %1 for %2" ).arg( default_value ).arg( node ) ); return default_value; } if( ret=="true" ) { return true; } else { return false; } } void XMLNode::write_child_node( const QString& node, const QString& text ) { QDomDocument doc = this->ownerDocument(); QDomElement el = doc.createElement( node ); QDomText txt = doc.createTextNode( text ); el.appendChild( txt ); this->appendChild( el ); } void XMLNode::write_string( const QString& node, const QString& value ) { write_child_node( node, value ); } void XMLNode::write_float( const QString& node, const float value ) { write_child_node( node, QString::number( value ) ); } void XMLNode::write_int( const QString& node, const int value ) { write_child_node( node, QString::number( value ) ); } void XMLNode::write_bool( const QString& name, const bool value ) { write_child_node( name, QString( ( value ? "true" : "false" ) ) ); } const char* XMLDoc::__class_name ="XMLDoc"; XMLDoc::XMLDoc( ) : Object( __class_name ) { } bool XMLDoc::read( const QString& filepath, const QString& schemapath ) { QXmlSchema schema; bool schema_usable = false; if( schemapath!=0 ) { QFile file( schemapath ); if ( !file.open( QIODevice::ReadOnly ) ) { ERRORLOG( QString( "Unable to open XML schema %1 for reading" ).arg( schemapath ) ); } else { schema.load( &file, QUrl::fromLocalFile( file.fileName() ) ); file.close(); if ( schema.isValid() ) { schema_usable = true; } else { ERRORLOG( QString( "%2 XML schema is not valid" ).arg( schemapath ) ); } } } QFile file( filepath ); if ( !file.open( QIODevice::ReadOnly ) ) { ERRORLOG( QString( "Unable to open %1 for reading" ).arg( filepath ) ); return false; } if ( schema_usable ) { QXmlSchemaValidator validator( schema ); if ( !validator.validate( &file, QUrl::fromLocalFile( file.fileName() ) ) ) { ERRORLOG( QString( "XML document %1 is not valid (%2), loading may fail" ).arg( filepath ).arg( schemapath ) ); file.close(); return false; } else { INFOLOG( QString( "XML document %1 is valid (%2)" ).arg( filepath ).arg( schemapath ) ); } file.seek( 0 ); } if( !setContent( &file ) ) { ERRORLOG( QString( "Unable to read XML document %1" ).arg( filepath ) ); file.close(); return false; } file.close(); return true; } bool XMLDoc::write( const QString& filepath ) { QFile file( filepath ); if ( !file.open( QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate ) ) { ERRORLOG( QString( "Unable to open %1 for writting" ).arg( filepath ) ); return false; } QTextStream out( &file ); out << toString().toUtf8(); out.flush(); bool rv = true; if ( !toString().isEmpty() && file.size() == 0 ) rv = false; file.close(); return rv; }; void XMLDoc::set_root( const QString& node_name, const QString& xmlns ) { QDomProcessingInstruction header = createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\"" ); appendChild( header ); XMLNode root = createElement( node_name ); QDomElement el = root.toElement(); el.setAttribute( "xmlns",XMLNS_BASE+xmlns ); el.setAttribute( "xmlns:xsi",XMLNS_XSI ); appendChild( root ); } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/hydrogen.cpp000066400000000000000000002773341211146647700212230ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "hydrogen/config.h" #ifdef WIN32 # include "hydrogen/timeHelper.h" #else # include # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "IO/OssDriver.h" #include "IO/FakeDriver.h" #include "IO/AlsaAudioDriver.h" #include "IO/PortAudioDriver.h" #include "IO/DiskWriterDriver.h" #include "IO/AlsaMidiDriver.h" #include "IO/JackMidiDriver.h" #include "IO/PortMidiDriver.h" #include "IO/CoreAudioDriver.h" namespace H2Core { // GLOBALS // info float m_fMasterPeak_L = 0.0f; ///< Master peak (left channel) float m_fMasterPeak_R = 0.0f; ///< Master peak (right channel) float m_fProcessTime = 0.0f; ///< time used in process function float m_fMaxProcessTime = 0.0f; ///< max ms usable in process with no xrun //~ info // beatcounter //100,000 ms in 1 second. #define US_DIVIDER .000001 float m_ntaktoMeterCompute = 1; ///< beatcounter note length int m_nbeatsToCount = 4; ///< beatcounter beats to count int eventCount = 1; ///< beatcounter event int tempochangecounter = 0; ///< count tempochanges for timeArray int beatCount = 1; ///< beatcounter beat to count double beatDiffs[16]; ///< beat diff timeval currentTime, lastTime; ///< timeval double lastBeatTime, currentBeatTime, beatDiff; ///< timediff float beatCountBpm; ///< bpm int m_nCoutOffset = 0; ///ms default 0 int m_nStartOffset = 0; ///ms default 0 //~ beatcounter //jack time master float m_nNewBpmJTM = 120; unsigned long m_nHumantimeFrames = 0; //~ jack time master AudioOutput *m_pAudioDriver = NULL; ///< Audio output QMutex mutex_OutputPointer; ///< Mutex for audio output pointer, allows multiple readers ///< When locking this AND AudioEngine, always lock AudioEngine first. MidiInput *m_pMidiDriver = NULL; ///< MIDI input MidiOutput *m_pMidiDriverOut = NULL; ///< MIDI output // overload the the > operator of Note objects for priority_queue struct compare_pNotes { bool operator() (Note* pNote1, Note* pNote2) { return (pNote1->get_humanize_delay() + pNote1->get_position() * m_pAudioDriver->m_transport.m_nTickSize) > (pNote2->get_humanize_delay() + pNote2->get_position() * m_pAudioDriver->m_transport.m_nTickSize); } }; /// Song Note FIFO std::priority_queue, compare_pNotes > m_songNoteQueue; std::deque m_midiNoteQueue; ///< Midi Note FIFO Song *m_pSong; ///< Current song PatternList* m_pNextPatterns; ///< Next pattern (used only in Pattern mode) bool m_bAppendNextPattern; ///< Add the next pattern to the list instead /// of replace. bool m_bDeleteNextPattern; ///< Delete the next pattern from the list. PatternList* m_pPlayingPatterns; int m_nSongPos; ///< Is the position inside the song int m_nSelectedPatternNumber; int m_nSelectedInstrumentNumber; Instrument *m_pMetronomeInstrument = NULL; ///< Metronome instrument // Buffers used in the process function unsigned m_nBufferSize = 0; float *m_pMainBuffer_L = NULL; float *m_pMainBuffer_R = NULL; Hydrogen* hydrogenInstance = NULL; ///< Hydrogen class instance (used for log) int m_audioEngineState = STATE_UNINITIALIZED; ///< Audio engine state #ifdef H2CORE_HAVE_LADSPA float m_fFXPeak_L[MAX_FX]; float m_fFXPeak_R[MAX_FX]; #endif int m_nPatternStartTick = -1; unsigned int m_nPatternTickPosition = 0; int m_nLookaheadFrames = 0; // used in findPatternInTick int m_nSongSizeInTicks = 0; struct timeval m_currentTickTime; unsigned long m_nRealtimeFrames = 0; unsigned int m_naddrealtimenotetickposition = 0; // PROTOTYPES void audioEngine_init(); void audioEngine_destroy(); int audioEngine_start( bool bLockEngine = false, unsigned nTotalFrames = 0 ); void audioEngine_stop( bool bLockEngine = false ); void audioEngine_setSong( Song *newSong ); void audioEngine_removeSong(); static void audioEngine_noteOn( Note *note ); //static void audioEngine_noteOff( Note *note ); int audioEngine_process( uint32_t nframes, void *arg ); inline void audioEngine_clearNoteQueue(); inline void audioEngine_process_checkBPMChanged(); inline void audioEngine_process_playNotes( unsigned long nframes ); inline void audioEngine_process_transport(); inline unsigned audioEngine_renderNote( Note* pNote, const unsigned& nBufferSize ); inline int audioEngine_updateNoteQueue( unsigned nFrames ); inline void audioEngine_prepNoteQueue(); inline int findPatternInTick( int tick, bool loopMode, int *patternStartTick ); void audioEngine_seek( long long nFrames, bool bLoopMode = false ); void audioEngine_restartAudioDrivers(); void audioEngine_startAudioDrivers(); void audioEngine_stopAudioDrivers(); inline timeval currentTime2() { struct timeval now; gettimeofday( &now, NULL ); return now; } inline int randomValue( int max ) { return rand() % max; } inline float getGaussian( float z ) { // gaussian distribution -- dimss float x1, x2, w; do { x1 = 2.0 * ( ( ( float ) rand() ) / RAND_MAX ) - 1.0; x2 = 2.0 * ( ( ( float ) rand() ) / RAND_MAX ) - 1.0; w = x1 * x1 + x2 * x2; } while ( w >= 1.0 ); w = sqrtf( ( -2.0 * logf( w ) ) / w ); return x1 * w * z + 0.0; // tunable } void audioEngine_raiseError( unsigned nErrorCode ) { EventQueue::get_instance()->push_event( EVENT_ERROR, nErrorCode ); } void updateTickSize() { float sampleRate = ( float )m_pAudioDriver->getSampleRate(); m_pAudioDriver->m_transport.m_nTickSize = ( sampleRate * 60.0 / m_pSong->__bpm / m_pSong->__resolution ); } void audioEngine_init() { ___INFOLOG( "*** Hydrogen audio engine init ***" ); // check current state if ( m_audioEngineState != STATE_UNINITIALIZED ) { ___ERRORLOG( "Error the audio engine is not in UNINITIALIZED state" ); AudioEngine::get_instance()->unlock(); return; } m_pSong = NULL; m_pPlayingPatterns = new PatternList(); m_pNextPatterns = new PatternList(); m_nSongPos = -1; m_nSelectedPatternNumber = 0; m_nSelectedInstrumentNumber = 0; m_nPatternTickPosition = 0; m_pMetronomeInstrument = NULL; m_pAudioDriver = NULL; m_pMainBuffer_L = NULL; m_pMainBuffer_R = NULL; srand( time( NULL ) ); // Create metronome instrument QString sMetronomeFilename = Filesystem::click_file(); m_pMetronomeInstrument = new Instrument( METRONOME_INSTR_ID, "metronome" ); m_pMetronomeInstrument->set_layer( new InstrumentLayer( Sample::load( sMetronomeFilename ) ), 0 ); // Change the current audio engine state m_audioEngineState = STATE_INITIALIZED; #ifdef H2CORE_HAVE_LADSPA Effects::create_instance(); #endif AudioEngine::create_instance(); Playlist::create_instance(); EventQueue::get_instance()->push_event( EVENT_STATE, STATE_INITIALIZED ); } void audioEngine_destroy() { // check current state if ( m_audioEngineState != STATE_INITIALIZED ) { ___ERRORLOG( "Error the audio engine is not in INITIALIZED state" ); return; } AudioEngine::get_instance()->get_sampler()->stop_playing_notes(); AudioEngine::get_instance()->lock( RIGHT_HERE ); ___INFOLOG( "*** Hydrogen audio engine shutdown ***" ); // delete all copied notes in the song notes queue while ( !m_songNoteQueue.empty() ) { m_songNoteQueue.top()->get_instrument()->dequeue(); delete m_songNoteQueue.top(); m_songNoteQueue.pop(); } // delete all copied notes in the midi notes queue for ( unsigned i = 0; i < m_midiNoteQueue.size(); ++i ) { Note *note = m_midiNoteQueue[i]; delete note; note = NULL; } m_midiNoteQueue.clear(); // change the current audio engine state m_audioEngineState = STATE_UNINITIALIZED; EventQueue::get_instance()->push_event( EVENT_STATE, STATE_UNINITIALIZED ); delete m_pPlayingPatterns; m_pPlayingPatterns = NULL; delete m_pNextPatterns; m_pNextPatterns = NULL; delete m_pMetronomeInstrument; m_pMetronomeInstrument = NULL; AudioEngine::get_instance()->unlock(); } /// Start playing /// return 0 = OK /// return -1 = NULL Audio Driver /// return -2 = Driver connect() error int audioEngine_start( bool bLockEngine, unsigned nTotalFrames ) { if ( bLockEngine ) { AudioEngine::get_instance()->lock( RIGHT_HERE ); } ___INFOLOG( "[audioEngine_start]" ); // check current state if ( m_audioEngineState != STATE_READY ) { ___ERRORLOG( "Error the audio engine is not in READY state" ); if ( bLockEngine ) { AudioEngine::get_instance()->unlock(); } return 0; // FIXME!! } m_fMasterPeak_L = 0.0f; m_fMasterPeak_R = 0.0f; m_pAudioDriver->m_transport.m_nFrames = nTotalFrames; // reset total frames m_nSongPos = -1; m_nPatternStartTick = -1; m_nPatternTickPosition = 0; // prepare the tickSize for this song updateTickSize(); // change the current audio engine state m_audioEngineState = STATE_PLAYING; EventQueue::get_instance()->push_event( EVENT_STATE, STATE_PLAYING ); if ( bLockEngine ) { AudioEngine::get_instance()->unlock(); } return 0; // per ora restituisco sempre OK } /// Stop the audio engine void audioEngine_stop( bool bLockEngine ) { if ( bLockEngine ) { AudioEngine::get_instance()->lock( RIGHT_HERE ); } ___INFOLOG( "[audioEngine_stop]" ); // check current state if ( m_audioEngineState != STATE_PLAYING ) { ___ERRORLOG( "Error the audio engine is not in PLAYING state" ); if ( bLockEngine ) { AudioEngine::get_instance()->unlock(); } return; } // change the current audio engine state m_audioEngineState = STATE_READY; EventQueue::get_instance()->push_event( EVENT_STATE, STATE_READY ); m_fMasterPeak_L = 0.0f; m_fMasterPeak_R = 0.0f; // m_nPatternTickPosition = 0; m_nPatternStartTick = -1; // delete all copied notes in the song notes queue while(!m_songNoteQueue.empty()){ m_songNoteQueue.top()->get_instrument()->dequeue(); delete m_songNoteQueue.top(); m_songNoteQueue.pop(); } /* // delete all copied notes in the playing notes queue for (unsigned i = 0; i < m_playingNotesQueue.size(); ++i) { Note *note = m_playingNotesQueue[i]; delete note; } m_playingNotesQueue.clear(); */ // delete all copied notes in the midi notes queue for ( unsigned i = 0; i < m_midiNoteQueue.size(); ++i ) { Note *note = m_midiNoteQueue[i]; delete note; } m_midiNoteQueue.clear(); if ( bLockEngine ) { AudioEngine::get_instance()->unlock(); } } // /// Update Tick size and frame position in the audio driver from Song->__bpm // inline void audioEngine_process_checkBPMChanged() { if ( ( m_audioEngineState == STATE_READY ) || ( m_audioEngineState == STATE_PLAYING ) ) { float fNewTickSize = m_pAudioDriver->getSampleRate() * 60.0 / m_pSong->__bpm / m_pSong->__resolution; if ( fNewTickSize != m_pAudioDriver->m_transport.m_nTickSize ) { // cerco di convertire ... float fTickNumber = ( float )m_pAudioDriver->m_transport.m_nFrames / ( float )m_pAudioDriver->m_transport.m_nTickSize; m_pAudioDriver->m_transport.m_nTickSize = fNewTickSize; if ( m_pAudioDriver->m_transport.m_nTickSize == 0 ) { return; } ___WARNINGLOG( "Tempo change: Recomputing ticksize and frame position" ); long long nNewFrames = ( long long )( fTickNumber * fNewTickSize ); // update frame position m_pAudioDriver->m_transport.m_nFrames = nNewFrames; #ifdef H2CORE_HAVE_JACK if ( JackOutput::class_name() == m_pAudioDriver->class_name() && m_audioEngineState == STATE_PLAYING ) { static_cast< JackOutput* >( m_pAudioDriver ) ->calculateFrameOffset(); } #endif EventQueue::get_instance()->push_event( EVENT_RECALCULATERUBBERBAND, -1); } } } inline void audioEngine_process_playNotes( unsigned long nframes ) { unsigned int framepos; if ( m_audioEngineState == STATE_PLAYING ) { framepos = m_pAudioDriver->m_transport.m_nFrames; } else { // use this to support realtime events when not playing framepos = m_nRealtimeFrames; } // reading from m_songNoteQueue while ( !m_songNoteQueue.empty() ) { Note *pNote = m_songNoteQueue.top(); // verifico se la nota rientra in questo ciclo unsigned int noteStartInFrames = (int)( pNote->get_position() * m_pAudioDriver->m_transport.m_nTickSize ); // if there is a negative Humanize delay, take into account so // we don't miss the time slice. ignore positive delay, or we // might end the queue processing prematurely based on NoteQueue // placement. the sampler handles positive delay. if (pNote->get_humanize_delay() < 0) { noteStartInFrames += pNote->get_humanize_delay(); } // m_nTotalFrames <= NotePos < m_nTotalFrames + bufferSize bool isNoteStart = ( ( noteStartInFrames >= framepos ) && ( noteStartInFrames < ( framepos + nframes ) ) ); bool isOldNote = noteStartInFrames < framepos; if ( isNoteStart || isOldNote ) { // Humanize - Velocity parameter if ( m_pSong->get_humanize_velocity_value() != 0 ) { float random = m_pSong->get_humanize_velocity_value() * getGaussian( 0.2 ); pNote->set_velocity( pNote->get_velocity() + ( random - ( m_pSong->get_humanize_velocity_value() / 2.0 ) ) ); if ( pNote->get_velocity() > 1.0 ) { pNote->set_velocity( 1.0 ); } else if ( pNote->get_velocity() < 0.0 ) { pNote->set_velocity( 0.0 ); } } // Random Pitch ;) const float fMaxPitchDeviation = 2.0; pNote->set_pitch( pNote->get_pitch() + ( fMaxPitchDeviation * getGaussian( 0.2 ) - fMaxPitchDeviation / 2.0 ) * pNote->get_instrument()->get_random_pitch_factor() ); /* * Check if the current instrument has the property "Stop-Note" set. * If yes, a NoteOff note is generated automatically after each note. */ Instrument * noteInstrument = pNote->get_instrument(); if ( noteInstrument->is_stop_notes() ){ Note *pOffNote = new Note( noteInstrument, 0.0, 0.0, 0.0, 0.0, -1, 0 ); pOffNote->set_note_off( true ); AudioEngine::get_instance()->get_sampler()->note_on( pOffNote ); delete pOffNote; } AudioEngine::get_instance()->get_sampler()->note_on( pNote ); m_songNoteQueue.pop(); // rimuovo la nota dalla lista di note pNote->get_instrument()->dequeue(); // raise noteOn event int nInstrument = m_pSong->get_instrument_list()->index( pNote->get_instrument() ); if( pNote->get_note_off() ){ delete pNote; } EventQueue::get_instance()->push_event( EVENT_NOTEON, nInstrument ); continue; } else { // this note will not be played break; } } } void audioEngine_seek( long long nFrames, bool bLoopMode ) { if ( m_pAudioDriver->m_transport.m_nFrames == nFrames ) { return; } if ( nFrames < 0 ) { ___ERRORLOG( "nFrames < 0" ); } char tmp[200]; sprintf( tmp, "seek in %lld (old pos = %d)", nFrames, ( int )m_pAudioDriver->m_transport.m_nFrames ); ___INFOLOG( tmp ); m_pAudioDriver->m_transport.m_nFrames = nFrames; int tickNumber_start = ( unsigned )( m_pAudioDriver->m_transport.m_nFrames / m_pAudioDriver->m_transport.m_nTickSize ); // sprintf(tmp, "[audioEngine_seek()] tickNumber_start = %d", tickNumber_start); // hydrogenInstance->infoLog(tmp); bool loop = m_pSong->is_loop_enabled(); if ( bLoopMode ) { loop = true; } m_nSongPos = findPatternInTick( tickNumber_start, loop, &m_nPatternStartTick ); // sprintf(tmp, "[audioEngine_seek()] m_nSongPos = %d", m_nSongPos); // hydrogenInstance->infoLog(tmp); audioEngine_clearNoteQueue(); } inline void audioEngine_process_transport() { if ( ( m_audioEngineState == STATE_READY ) || ( m_audioEngineState == STATE_PLAYING ) ) { m_pAudioDriver->updateTransportInfo(); unsigned long nNewFrames = m_pAudioDriver->m_transport.m_nFrames; // ??? audioEngine_seek returns IMMEDIATELY // when nNewFrames == m_pAudioDriver->m_transport.m_nFrames ??? // audioEngine_seek( nNewFrames, true ); switch ( m_pAudioDriver->m_transport.m_status ) { case TransportInfo::ROLLING: if ( m_audioEngineState == STATE_READY ) { audioEngine_start( false, nNewFrames ); // no engine lock } if ( m_pSong->__bpm != m_pAudioDriver->m_transport.m_nBPM ) { ___INFOLOG( QString( "song bpm: (%1) gets transport bpm: (%2)" ) .arg( m_pSong->__bpm ) .arg( m_pAudioDriver->m_transport.m_nBPM ) ); m_pSong->__bpm = m_pAudioDriver->m_transport.m_nBPM; } m_nRealtimeFrames = m_pAudioDriver->m_transport.m_nFrames; break; case TransportInfo::STOPPED: if ( m_audioEngineState == STATE_PLAYING ) { audioEngine_stop( false ); // no engine lock } if ( m_pSong->__bpm != m_pAudioDriver->m_transport.m_nBPM ) { m_pSong->__bpm = m_pAudioDriver->m_transport.m_nBPM; } // go ahead and increment the realtimeframes by buffersize // to support our realtime keyboard and midi event timing m_nRealtimeFrames += m_nBufferSize; break; } } } void audioEngine_clearNoteQueue() { //___INFOLOG( "clear notes..."); // delete all copied notes in the song notes queue while (!m_songNoteQueue.empty()) { m_songNoteQueue.top()->get_instrument()->dequeue(); delete m_songNoteQueue.top(); m_songNoteQueue.pop(); } AudioEngine::get_instance()->get_sampler()->stop_playing_notes(); // delete all copied notes in the midi notes queue for ( unsigned i = 0; i < m_midiNoteQueue.size(); ++i ) { delete m_midiNoteQueue[i]; } m_midiNoteQueue.clear(); } /// Clear all audio buffers inline void audioEngine_process_clearAudioBuffers( uint32_t nFrames ) { QMutexLocker mx( &mutex_OutputPointer ); // clear main out Left and Right if ( m_pAudioDriver ) { m_pMainBuffer_L = m_pAudioDriver->getOut_L(); m_pMainBuffer_R = m_pAudioDriver->getOut_R(); } else { m_pMainBuffer_L = m_pMainBuffer_R = 0; } if ( m_pMainBuffer_L ) { memset( m_pMainBuffer_L, 0, nFrames * sizeof( float ) ); } if ( m_pMainBuffer_R ) { memset( m_pMainBuffer_R, 0, nFrames * sizeof( float ) ); } #ifdef H2CORE_HAVE_JACK JackOutput* jo = dynamic_cast(m_pAudioDriver); if( jo && jo->has_track_outs() ) { float* buf; int k; for( k=0 ; kgetNumTracks() ; ++k ) { buf = jo->getTrackOut_L(k); if( buf ) { memset( buf, 0, nFrames * sizeof( float ) ); } buf = jo->getTrackOut_R(k); if( buf ) { memset( buf, 0, nFrames * sizeof( float ) ); } } } #endif mx.unlock(); #ifdef H2CORE_HAVE_LADSPA if ( m_audioEngineState >= STATE_READY ) { Effects* pEffects = Effects::get_instance(); for ( unsigned i = 0; i < MAX_FX; ++i ) { // clear FX buffers LadspaFX* pFX = pEffects->getLadspaFX( i ); if ( pFX ) { assert( pFX->m_pBuffer_L ); assert( pFX->m_pBuffer_R ); memset( pFX->m_pBuffer_L, 0, nFrames * sizeof( float ) ); memset( pFX->m_pBuffer_R, 0, nFrames * sizeof( float ) ); } } } #endif } /// Main audio processing function. Called by audio drivers. int audioEngine_process( uint32_t nframes, void* /*arg*/ ) { timeval startTimeval = currentTime2(); audioEngine_process_clearAudioBuffers( nframes ); if( m_audioEngineState < STATE_READY) { return 0; } AudioEngine::get_instance()->lock( RIGHT_HERE ); if( m_audioEngineState < STATE_READY) { AudioEngine::get_instance()->unlock(); return 0; } if ( m_nBufferSize != nframes ) { ___INFOLOG( QString( "Buffer size changed. Old size = %1, new size = %2" ) .arg( m_nBufferSize ) .arg( nframes ) ); m_nBufferSize = nframes; } // m_pAudioDriver->bpm updates Song->__bpm. (!!(Calls audioEngine_seek)) audioEngine_process_transport(); audioEngine_process_checkBPMChanged(); // m_pSong->__bpm decides tick size bool sendPatternChange = false; // always update note queue.. could come from pattern or realtime input // (midi, keyboard) int res2 = audioEngine_updateNoteQueue( nframes ); if ( res2 == -1 ) { // end of song ___INFOLOG( "End of song received, calling engine_stop()" ); AudioEngine::get_instance()->unlock(); m_pAudioDriver->stop(); m_pAudioDriver->locate( 0 ); // locate 0, reposition from start of the song if ( ( m_pAudioDriver->class_name() == DiskWriterDriver::class_name() ) || ( m_pAudioDriver->class_name() == FakeDriver::class_name() ) ) { ___INFOLOG( "End of song." ); return 1; // kill the audio AudioDriver thread } #ifdef H2CORE_HAVE_JACK else if ( m_pAudioDriver->class_name() == JackOutput::class_name() ) { // Do something clever :-s ... Jakob Lund // Mainly to keep sync with Ardour. static_cast(m_pAudioDriver)->locateInNCycles( 0 ); } #endif return 0; } else if ( res2 == 2 ) { // send pattern change sendPatternChange = true; } // play all notes audioEngine_process_playNotes( nframes ); // SAMPLER AudioEngine::get_instance()->get_sampler()->process( nframes, m_pSong ); float* out_L = AudioEngine::get_instance()->get_sampler()->__main_out_L; float* out_R = AudioEngine::get_instance()->get_sampler()->__main_out_R; for ( unsigned i = 0; i < nframes; ++i ) { m_pMainBuffer_L[ i ] += out_L[ i ]; m_pMainBuffer_R[ i ] += out_R[ i ]; } // SYNTH AudioEngine::get_instance()->get_synth()->process( nframes ); out_L = AudioEngine::get_instance()->get_synth()->m_pOut_L; out_R = AudioEngine::get_instance()->get_synth()->m_pOut_R; for ( unsigned i = 0; i < nframes; ++i ) { m_pMainBuffer_L[ i ] += out_L[ i ]; m_pMainBuffer_R[ i ] += out_R[ i ]; } timeval renderTime_end = currentTime2(); timeval ladspaTime_start = renderTime_end; #ifdef H2CORE_HAVE_LADSPA // Process LADSPA FX if ( m_audioEngineState >= STATE_READY ) { for ( unsigned nFX = 0; nFX < MAX_FX; ++nFX ) { LadspaFX *pFX = Effects::get_instance()->getLadspaFX( nFX ); if ( ( pFX ) && ( pFX->isEnabled() ) ) { pFX->processFX( nframes ); float *buf_L = NULL; float *buf_R = NULL; if ( pFX->getPluginType() == LadspaFX::STEREO_FX ) { buf_L = pFX->m_pBuffer_L; buf_R = pFX->m_pBuffer_R; } else { // MONO FX buf_L = pFX->m_pBuffer_L; buf_R = buf_L; } for ( unsigned i = 0; i < nframes; ++i ) { m_pMainBuffer_L[ i ] += buf_L[ i ]; m_pMainBuffer_R[ i ] += buf_R[ i ]; if ( buf_L[ i ] > m_fFXPeak_L[nFX] ) m_fFXPeak_L[nFX] = buf_L[ i ]; if ( buf_R[ i ] > m_fFXPeak_R[nFX] ) m_fFXPeak_R[nFX] = buf_R[ i ]; } } } } #endif timeval ladspaTime_end = currentTime2(); // update master peaks float val_L; float val_R; if ( m_audioEngineState >= STATE_READY ) { for ( unsigned i = 0; i < nframes; ++i ) { val_L = m_pMainBuffer_L[i]; val_R = m_pMainBuffer_R[i]; if ( val_L > m_fMasterPeak_L ) { m_fMasterPeak_L = val_L; } if ( val_R > m_fMasterPeak_R ) { m_fMasterPeak_R = val_R; } } } // update total frames number if ( m_audioEngineState == STATE_PLAYING ) { m_pAudioDriver->m_transport.m_nFrames += nframes; } // float fRenderTime = (renderTime_end.tv_sec - renderTime_start.tv_sec) * 1000.0 + (renderTime_end.tv_usec - renderTime_start.tv_usec) / 1000.0; float fLadspaTime = ( ladspaTime_end.tv_sec - ladspaTime_start.tv_sec ) * 1000.0 + ( ladspaTime_end.tv_usec - ladspaTime_start.tv_usec ) / 1000.0; timeval finishTimeval = currentTime2(); m_fProcessTime = ( finishTimeval.tv_sec - startTimeval.tv_sec ) * 1000.0 + ( finishTimeval.tv_usec - startTimeval.tv_usec ) / 1000.0; float sampleRate = ( float )m_pAudioDriver->getSampleRate(); m_fMaxProcessTime = 1000.0 / ( sampleRate / nframes ); #ifdef CONFIG_DEBUG if ( m_fProcessTime > m_fMaxProcessTime ) { ___WARNINGLOG( "" ); ___WARNINGLOG( "----XRUN----" ); ___WARNINGLOG( QString( "XRUN of %1 msec (%2 > %3)" ) .arg( ( m_fProcessTime - m_fMaxProcessTime ) ) .arg( m_fProcessTime ).arg( m_fMaxProcessTime ) ); ___WARNINGLOG( QString( "Ladspa process time = %1" ).arg( fLadspaTime ) ); ___WARNINGLOG( "------------" ); ___WARNINGLOG( "" ); // raise xRun event EventQueue::get_instance()->push_event( EVENT_XRUN, -1 ); } #endif AudioEngine::get_instance()->unlock(); if ( sendPatternChange ) { EventQueue::get_instance()->push_event( EVENT_PATTERN_CHANGED, -1 ); } return 0; } void audioEngine_setupLadspaFX( unsigned nBufferSize ) { //___INFOLOG( "buffersize=" + to_string(nBufferSize) ); if ( m_pSong == NULL ) { //___INFOLOG( "m_pSong=NULL" ); return; } if ( nBufferSize == 0 ) { ___ERRORLOG( "nBufferSize=0" ); return; } #ifdef H2CORE_HAVE_LADSPA for ( unsigned nFX = 0; nFX < MAX_FX; ++nFX ) { LadspaFX *pFX = Effects::get_instance()->getLadspaFX( nFX ); if ( pFX == NULL ) { return; } pFX->deactivate(); // delete[] pFX->m_pBuffer_L; // pFX->m_pBuffer_L = NULL; // delete[] pFX->m_pBuffer_R; // pFX->m_pBuffer_R = NULL; // if ( nBufferSize != 0 ) { //pFX->m_nBufferSize = nBufferSize; //pFX->m_pBuffer_L = new float[ nBufferSize ]; //pFX->m_pBuffer_R = new float[ nBufferSize ]; // } Effects::get_instance()->getLadspaFX( nFX )->connectAudioPorts( pFX->m_pBuffer_L, pFX->m_pBuffer_R, pFX->m_pBuffer_L, pFX->m_pBuffer_R ); pFX->activate(); } #endif } void audioEngine_renameJackPorts() { #ifdef H2CORE_HAVE_JACK // renames jack ports if ( m_pSong == NULL ) { return; } if ( m_pAudioDriver->class_name() == JackOutput::class_name() ) { static_cast< JackOutput* >( m_pAudioDriver )->makeTrackOutputs( m_pSong ); } #endif } void audioEngine_setSong( Song *newSong ) { ___WARNINGLOG( QString( "Set song: %1" ).arg( newSong->__name ) ); AudioEngine::get_instance()->lock( RIGHT_HERE ); if ( m_audioEngineState == STATE_PLAYING ) { m_pAudioDriver->stop(); audioEngine_stop( false ); } // check current state if ( m_audioEngineState != STATE_PREPARED ) { ___ERRORLOG( "Error the audio engine is not in PREPARED state" ); } m_pPlayingPatterns->clear(); m_pNextPatterns->clear(); EventQueue::get_instance()->push_event( EVENT_SELECTED_PATTERN_CHANGED, -1 ); EventQueue::get_instance()->push_event( EVENT_PATTERN_CHANGED, -1 ); EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); //sleep( 1 ); audioEngine_clearNoteQueue(); assert( m_pSong == NULL ); m_pSong = newSong; // setup LADSPA FX audioEngine_setupLadspaFX( m_pAudioDriver->getBufferSize() ); // update ticksize audioEngine_process_checkBPMChanged(); // find the first pattern and set as current if ( m_pSong->get_pattern_list()->size() > 0 ) { m_pPlayingPatterns->add( m_pSong->get_pattern_list()->get( 0 ) ); } audioEngine_renameJackPorts(); m_pAudioDriver->setBpm( m_pSong->__bpm ); // change the current audio engine state m_audioEngineState = STATE_READY; m_pAudioDriver->locate( 0 ); AudioEngine::get_instance()->unlock(); EventQueue::get_instance()->push_event( EVENT_STATE, STATE_READY ); } void audioEngine_removeSong() { AudioEngine::get_instance()->lock( RIGHT_HERE ); if ( m_audioEngineState == STATE_PLAYING ) { m_pAudioDriver->stop(); audioEngine_stop( false ); } // check current state if ( m_audioEngineState != STATE_READY ) { ___ERRORLOG( "Error the audio engine is not in READY state" ); AudioEngine::get_instance()->unlock(); return; } m_pSong = NULL; m_pPlayingPatterns->clear(); m_pNextPatterns->clear(); audioEngine_clearNoteQueue(); // change the current audio engine state m_audioEngineState = STATE_PREPARED; AudioEngine::get_instance()->unlock(); EventQueue::get_instance()->push_event( EVENT_STATE, STATE_PREPARED ); } // return -1 = end of song // return 2 = send pattern changed event!! inline int audioEngine_updateNoteQueue( unsigned nFrames ) { static int nLastTick = -1; bool bSendPatternChange = false; int nMaxTimeHumanize = 2000; int nLeadLagFactor = m_pAudioDriver->m_transport.m_nTickSize * 5; // 5 ticks unsigned int framepos; if ( m_audioEngineState == STATE_PLAYING ) { framepos = m_pAudioDriver->m_transport.m_nFrames; } else { // use this to support realtime events when not playing framepos = m_nRealtimeFrames; } int tickNumber_start = 0; // We need to look ahead in the song for notes with negative offsets // from LeadLag or Humanize. When starting from the beginning, we prime // the note queue with notes between 0 and nFrames plus // lookahead. lookahead should be equal or greater than the // nLeadLagFactor + nMaxTimeHumanize. int lookahead = nLeadLagFactor + nMaxTimeHumanize + 1; m_nLookaheadFrames = lookahead; if ( framepos == 0 || ( m_audioEngineState == STATE_PLAYING && m_pSong->get_mode() == Song::SONG_MODE && m_nSongPos == -1 ) ) { tickNumber_start = (int)( framepos / m_pAudioDriver->m_transport.m_nTickSize ); } else { tickNumber_start = (int)( (framepos + lookahead) / m_pAudioDriver->m_transport.m_nTickSize ); } int tickNumber_end = (int)( (framepos + nFrames + lookahead) / m_pAudioDriver->m_transport.m_nTickSize ); int tick = tickNumber_start; // ___WARNINGLOG( "Lookahead: " + to_string( lookahead // / m_pAudioDriver->m_transport.m_nTickSize ) ); // get initial timestamp for first tick gettimeofday( &m_currentTickTime, NULL ); while ( tick <= tickNumber_end ) { if ( tick == nLastTick ) { ++tick; continue; } else { nLastTick = tick; } // midi events now get put into the m_songNoteQueue as well, // based on their timestamp while ( m_midiNoteQueue.size() > 0 ) { Note *note = m_midiNoteQueue[0]; if ( ( int )note->get_position() <= tick ) { // printf ("tick=%d pos=%d\n", tick, note->getPosition()); m_midiNoteQueue.pop_front(); note->get_instrument()->enqueue(); m_songNoteQueue.push( note ); } else { break; } } if ( m_audioEngineState != STATE_PLAYING ) { // only keep going if we're playing continue; } // if ( m_nPatternStartTick == -1 ) { // for debugging pattern mode :s // ___WARNINGLOG( "m_nPatternStartTick == -1; tick = " // + to_string( tick ) ); // } // SONG MODE bool doErase = m_audioEngineState == STATE_PLAYING && Preferences::get_instance()->getRecordEvents() && Preferences::get_instance()->getDestructiveRecord() && Preferences::get_instance()->m_nRecPreDelete == 0; if ( m_pSong->get_mode() == Song::SONG_MODE ) { if ( m_pSong->get_pattern_group_vector()->size() == 0 ) { // there's no song!! ___ERRORLOG( "no patterns in song." ); m_pAudioDriver->stop(); return -1; } m_nSongPos = findPatternInTick( tick, m_pSong->is_loop_enabled(), &m_nPatternStartTick ); if ( m_nSongSizeInTicks != 0 ) { m_nPatternTickPosition = ( tick - m_nPatternStartTick ) % m_nSongSizeInTicks; } else { m_nPatternTickPosition = tick - m_nPatternStartTick; } if ( m_nPatternTickPosition == 0 ) { bSendPatternChange = true; } // PatternList *pPatternList = // (*(m_pSong->getPatternGroupVector()))[m_nSongPos]; if ( m_nSongPos == -1 ) { ___INFOLOG( "song pos = -1" ); if ( m_pSong->is_loop_enabled() == true ) { m_nSongPos = findPatternInTick( 0, true, &m_nPatternStartTick ); } else { ___INFOLOG( "End of Song" ); if( Hydrogen::get_instance()->getMidiOutput() != NULL ){ Hydrogen::get_instance()->getMidiOutput()->handleQueueAllNoteOff(); } return -1; } } PatternList *pPatternList = ( *( m_pSong->get_pattern_group_vector() ) )[m_nSongPos]; m_pPlayingPatterns->clear(); for ( int i=0; i< pPatternList->size(); ++i ) { Pattern* pattern = pPatternList->get(i); m_pPlayingPatterns->add( pattern ); pattern->extand_with_flattened_virtual_patterns( m_pPlayingPatterns ); } // Set destructive record depending on punch area doErase = doErase && Preferences::get_instance()->inPunchArea(m_nSongPos); } // PATTERN MODE else if ( m_pSong->get_mode() == Song::PATTERN_MODE ) { // per ora considero solo il primo pattern, se ce ne // saranno piu' di uno bisognera' prendere quello piu' // piccolo //m_nPatternTickPosition = tick % m_pCurrentPattern->getSize(); int nPatternSize = MAX_NOTES; if ( Preferences::get_instance()->patternModePlaysSelected() ) { m_pPlayingPatterns->clear(); Pattern * pattern = m_pSong->get_pattern_list()->get(m_nSelectedPatternNumber); m_pPlayingPatterns->add( pattern ); pattern->extand_with_flattened_virtual_patterns( m_pPlayingPatterns ); } if ( m_pPlayingPatterns->size() != 0 ) { Pattern *pFirstPattern = m_pPlayingPatterns->get( 0 ); nPatternSize = pFirstPattern->get_length(); } if ( nPatternSize == 0 ) { ___ERRORLOG( "nPatternSize == 0" ); } if ( ( tick == m_nPatternStartTick + nPatternSize ) || ( m_nPatternStartTick == -1 ) ) { if ( m_pNextPatterns->size() > 0 ) { Pattern * p; for ( uint i = 0; i < m_pNextPatterns->size(); i++ ) { p = m_pNextPatterns->get( i ); // ___WARNINGLOG( QString( "Got pattern # %1" ) // .arg( i + 1 ) ); // if the pattern isn't playing // already, start it now. if ( ( m_pPlayingPatterns->del( p ) ) == NULL ) { m_pPlayingPatterns->add( p ); } } m_pNextPatterns->clear(); bSendPatternChange = true; } if ( m_nPatternStartTick == -1 ) { m_nPatternStartTick = tick - (tick % nPatternSize); // ___WARNINGLOG( "set Pattern Start Tick to " // + to_string( m_nPatternStartTick ) ); } else { m_nPatternStartTick = tick; } } m_nPatternTickPosition = tick - m_nPatternStartTick; if ( m_nPatternTickPosition > nPatternSize ) { m_nPatternTickPosition = tick % nPatternSize; } } // metronome // if ( ( m_nPatternStartTick == tick ) // || ( ( tick - m_nPatternStartTick ) % 48 == 0 ) ) { if ( m_nPatternTickPosition % 48 == 0 ) { float fPitch; float fVelocity; // ___INFOLOG( "Beat: " + to_string(m_nPatternTickPosition / 48 + 1) // + "@ " + to_string( tick ) ); if ( m_nPatternTickPosition == 0 ) { fPitch = 3; fVelocity = 1.0; EventQueue::get_instance()->push_event( EVENT_METRONOME, 1 ); } else { fPitch = 0; fVelocity = 0.8; EventQueue::get_instance()->push_event( EVENT_METRONOME, 0 ); } if ( Preferences::get_instance()->m_bUseMetronome ) { m_pMetronomeInstrument->set_volume( Preferences::get_instance()->m_fMetronomeVolume ); Note *pMetronomeNote = new Note( m_pMetronomeInstrument, tick, fVelocity, 0.5, 0.5, -1, fPitch ); m_pMetronomeInstrument->enqueue(); m_songNoteQueue.push( pMetronomeNote ); } } // update the notes queue if ( m_pPlayingPatterns->size() != 0 ) { for ( unsigned nPat = 0 ; nPat < m_pPlayingPatterns->size() ; ++nPat ) { Pattern *pPattern = m_pPlayingPatterns->get( nPat ); assert( pPattern != NULL ); Pattern::notes_t* notes = (Pattern::notes_t*)pPattern->get_notes(); // Delete notes before attempting to play them if ( doErase ) { FOREACH_NOTE_IT_BOUND(notes,it,m_nPatternTickPosition) { Note* pNote = it->second; assert( pNote != NULL ); if ( pNote->get_just_recorded() == false ) { EventQueue::AddMidiNoteVector noteAction; noteAction.m_column = pNote->get_position(); noteAction.m_row = pNote->get_instrument_id(); noteAction.m_pattern = nPat; noteAction.f_velocity = pNote->get_velocity(); noteAction.f_pan_L = pNote->get_pan_l(); noteAction.f_pan_R = pNote->get_pan_r(); noteAction.m_length = -1; noteAction.no_octaveKeyVal = pNote->get_octave(); noteAction.nk_noteKeyVal = pNote->get_key(); noteAction.b_isInstrumentMode = false; noteAction.b_isMidi = false; noteAction.b_noteExist = false; EventQueue::get_instance()->m_addMidiNoteVector.push_back(noteAction); } } } // Now play notes FOREACH_NOTE_CST_IT_BOUND(notes,it,m_nPatternTickPosition) { Note *pNote = it->second; if ( pNote ) { pNote->set_just_recorded( false ); int nOffset = 0; // Swing float fSwingFactor = m_pSong->get_swing_factor(); if ( ( ( m_nPatternTickPosition % 12 ) == 0 ) && ( ( m_nPatternTickPosition % 24 ) != 0 ) ) { // da l'accento al tick 4, 12, 20, 36... nOffset += ( int )( 6.0 * m_pAudioDriver->m_transport.m_nTickSize * fSwingFactor ); } // Humanize - Time parameter if ( m_pSong->get_humanize_time_value() != 0 ) { nOffset += ( int )( getGaussian( 0.3 ) * m_pSong->get_humanize_time_value() * nMaxTimeHumanize ); } //~ // Lead or Lag - timing parameter nOffset += (int) ( pNote->get_lead_lag() * nLeadLagFactor); //~ if((tick == 0) && (nOffset < 0)) { nOffset = 0; } Note *pCopiedNote = new Note( pNote ); pCopiedNote->set_position( tick ); // humanize time pCopiedNote->set_humanize_delay( nOffset ); pNote->get_instrument()->enqueue(); m_songNoteQueue.push( pCopiedNote ); //pCopiedNote->dumpInfo(); } } } } ++tick; } // audioEngine_process must send the pattern change event after mutex unlock if ( bSendPatternChange ) { return 2; } return 0; } /// restituisce l'indice relativo al patternGroup in base al tick inline int findPatternInTick( int nTick, bool bLoopMode, int *pPatternStartTick ) { assert( m_pSong ); int nTotalTick = 0; m_nSongSizeInTicks = 0; std::vector *pPatternColumns = m_pSong->get_pattern_group_vector(); int nColumns = pPatternColumns->size(); int nPatternSize; for ( int i = 0; i < nColumns; ++i ) { PatternList *pColumn = ( *pPatternColumns )[ i ]; if ( pColumn->size() != 0 ) { // tengo in considerazione solo il primo pattern. I // pattern nel gruppo devono avere la stessa lunghezza. nPatternSize = pColumn->get( 0 )->get_length(); } else { nPatternSize = MAX_NOTES; } if ( ( nTick >= nTotalTick ) && ( nTick < nTotalTick + nPatternSize ) ) { ( *pPatternStartTick ) = nTotalTick; return i; } nTotalTick += nPatternSize; } if ( bLoopMode ) { m_nSongSizeInTicks = nTotalTick; int nLoopTick = 0; if ( m_nSongSizeInTicks != 0 ) { nLoopTick = nTick % m_nSongSizeInTicks; } nTotalTick = 0; for ( int i = 0; i < nColumns; ++i ) { PatternList *pColumn = ( *pPatternColumns )[ i ]; if ( pColumn->size() != 0 ) { // tengo in considerazione solo il primo // pattern. I pattern nel gruppo devono avere la // stessa lunghezza. nPatternSize = pColumn->get( 0 )->get_length(); } else { nPatternSize = MAX_NOTES; } if ( ( nLoopTick >= nTotalTick ) && ( nLoopTick < nTotalTick + nPatternSize ) ) { ( *pPatternStartTick ) = nTotalTick; return i; } nTotalTick += nPatternSize; } } QString err = QString( "[findPatternInTick] tick = %1. No pattern found" ).arg( QString::number(nTick) ); ___ERRORLOG( err ); return -1; } void audioEngine_noteOn( Note *note ) { // check current state if ( ( m_audioEngineState != STATE_READY ) && ( m_audioEngineState != STATE_PLAYING ) ) { ___ERRORLOG( "Error the audio engine is not in READY state" ); delete note; return; } m_midiNoteQueue.push_back( note ); } /* void audioEngine_noteOff( Note *note ) { if ( note == NULL ) { ___ERRORLOG( "Error, note == NULL" ); } AudioEngine::get_instance()->lock( RIGHT_HERE ); // check current state if ( ( m_audioEngineState != STATE_READY ) && ( m_audioEngineState != STATE_PLAYING ) ) { ___ERRORLOG( "Error the audio engine is not in READY state" ); delete note; AudioEngine::get_instance()->unlock(); return; } // AudioEngine::get_instance()->get_sampler()->note_off( note ); AudioEngine::get_instance()->unlock(); delete note; } */ // unsigned long audioEngine_getTickPosition() // { // return m_nPatternTickPosition; // } AudioOutput* createDriver( const QString& sDriver ) { ___INFOLOG( QString( "Driver: '%1'" ).arg( sDriver ) ); Preferences *pPref = Preferences::get_instance(); AudioOutput *pDriver = NULL; if ( sDriver == "Oss" ) { pDriver = new OssDriver( audioEngine_process ); if ( pDriver->class_name() == NullDriver::class_name() ) { delete pDriver; pDriver = NULL; } } else if ( sDriver == "Jack" ) { pDriver = new JackOutput( audioEngine_process ); if ( pDriver->class_name() == NullDriver::class_name() ) { delete pDriver; pDriver = NULL; } else { #ifdef H2CORE_HAVE_JACK static_cast(pDriver)->setConnectDefaults( Preferences::get_instance()->m_bJackConnectDefaults ); #endif } } else if ( sDriver == "Alsa" ) { pDriver = new AlsaAudioDriver( audioEngine_process ); if ( pDriver->class_name() == NullDriver::class_name() ) { delete pDriver; pDriver = NULL; } } else if ( sDriver == "PortAudio" ) { pDriver = new PortAudioDriver( audioEngine_process ); if ( pDriver->class_name() == NullDriver::class_name() ) { delete pDriver; pDriver = NULL; } } //#ifdef Q_OS_MACX else if ( sDriver == "CoreAudio" ) { ___INFOLOG( "Creating CoreAudioDriver" ); pDriver = new CoreAudioDriver( audioEngine_process ); if ( pDriver->class_name() == NullDriver::class_name() ) { delete pDriver; pDriver = NULL; } } //#endif else if ( sDriver == "Fake" ) { ___WARNINGLOG( "*** Using FAKE audio driver ***" ); pDriver = new FakeDriver( audioEngine_process ); } else { ___ERRORLOG( "Unknown driver " + sDriver ); audioEngine_raiseError( Hydrogen::UNKNOWN_DRIVER ); } if ( pDriver ) { // initialize the audio driver int res = pDriver->init( pPref->m_nBufferSize ); if ( res != 0 ) { ___ERRORLOG( "Error starting audio driver [audioDriver::init()]" ); delete pDriver; pDriver = NULL; } } return pDriver; } /// Start all audio drivers void audioEngine_startAudioDrivers() { Preferences *preferencesMng = Preferences::get_instance(); AudioEngine::get_instance()->lock( RIGHT_HERE ); QMutexLocker mx(&mutex_OutputPointer); ___INFOLOG( "[audioEngine_startAudioDrivers]" ); // check current state if ( m_audioEngineState != STATE_INITIALIZED ) { ___ERRORLOG( QString( "Error the audio engine is not in INITIALIZED" " state. state=%1" ) .arg( m_audioEngineState ) ); AudioEngine::get_instance()->unlock(); return; } if ( m_pAudioDriver ) { // check if the audio m_pAudioDriver is still alive ___ERRORLOG( "The audio driver is still alive" ); } if ( m_pMidiDriver ) { // check if midi driver is still alive ___ERRORLOG( "The MIDI driver is still active" ); } QString sAudioDriver = preferencesMng->m_sAudioDriver; // sAudioDriver = "Auto"; if ( sAudioDriver == "Auto" ) { if ( ( m_pAudioDriver = createDriver( "Jack" ) ) == NULL ) { if ( ( m_pAudioDriver = createDriver( "Alsa" ) ) == NULL ) { if ( ( m_pAudioDriver = createDriver( "CoreAudio" ) ) == NULL ) { if ( ( m_pAudioDriver = createDriver( "PortAudio" ) ) == NULL ) { if ( ( m_pAudioDriver = createDriver( "Oss" ) ) == NULL ) { audioEngine_raiseError( Hydrogen::ERROR_STARTING_DRIVER ); ___ERRORLOG( "Error starting audio driver" ); ___ERRORLOG( "Using the NULL output audio driver" ); // use the NULL output driver m_pAudioDriver = new NullDriver( audioEngine_process ); m_pAudioDriver->init( 0 ); } } } } } } else { m_pAudioDriver = createDriver( sAudioDriver ); if ( m_pAudioDriver == NULL ) { audioEngine_raiseError( Hydrogen::ERROR_STARTING_DRIVER ); ___ERRORLOG( "Error starting audio driver" ); ___ERRORLOG( "Using the NULL output audio driver" ); // use the NULL output driver m_pAudioDriver = new NullDriver( audioEngine_process ); m_pAudioDriver->init( 0 ); } } if ( preferencesMng->m_sMidiDriver == "ALSA" ) { #ifdef H2CORE_HAVE_ALSA // Create MIDI driver AlsaMidiDriver *alsaMidiDriver = new AlsaMidiDriver(); m_pMidiDriverOut = alsaMidiDriver; m_pMidiDriver = alsaMidiDriver; m_pMidiDriver->open(); m_pMidiDriver->setActive( true ); #endif } else if ( preferencesMng->m_sMidiDriver == "PortMidi" ) { #ifdef H2CORE_HAVE_PORTMIDI m_pMidiDriver = new PortMidiDriver(); m_pMidiDriver->open(); m_pMidiDriver->setActive( true ); #endif } else if ( preferencesMng->m_sMidiDriver == "CoreMidi" ) { #ifdef H2CORE_HAVE_COREMIDI m_pMidiDriver = new CoreMidiDriver(); m_pMidiDriver->open(); m_pMidiDriver->setActive( true ); #endif } else if ( preferencesMng->m_sMidiDriver == "JackMidi" ) { #ifdef H2CORE_HAVE_JACK JackMidiDriver *jackMidiDriver = new JackMidiDriver(); m_pMidiDriverOut = jackMidiDriver; m_pMidiDriver = jackMidiDriver; m_pMidiDriver->open(); m_pMidiDriver->setActive( true ); #endif } // change the current audio engine state if ( m_pSong == NULL ) { m_audioEngineState = STATE_PREPARED; } else { m_audioEngineState = STATE_READY; } if ( m_pSong ) { m_pAudioDriver->setBpm( m_pSong->__bpm ); } if ( m_audioEngineState == STATE_PREPARED ) { EventQueue::get_instance()->push_event( EVENT_STATE, STATE_PREPARED ); } else if ( m_audioEngineState == STATE_READY ) { EventQueue::get_instance()->push_event( EVENT_STATE, STATE_READY ); } // Unlocking earlier might execute the jack process() callback before we // are fully initialized. mx.unlock(); AudioEngine::get_instance()->unlock(); if ( m_pAudioDriver ) { int res = m_pAudioDriver->connect(); if ( res != 0 ) { audioEngine_raiseError( Hydrogen::ERROR_STARTING_DRIVER ); ___ERRORLOG( "Error starting audio driver [audioDriver::connect()]" ); ___ERRORLOG( "Using the NULL output audio driver" ); mx.relock(); delete m_pAudioDriver; m_pAudioDriver = new NullDriver( audioEngine_process ); mx.unlock(); m_pAudioDriver->init( 0 ); m_pAudioDriver->connect(); } if ( ( m_pMainBuffer_L = m_pAudioDriver->getOut_L() ) == NULL ) { ___ERRORLOG( "m_pMainBuffer_L == NULL" ); } if ( ( m_pMainBuffer_R = m_pAudioDriver->getOut_R() ) == NULL ) { ___ERRORLOG( "m_pMainBuffer_R == NULL" ); } #ifdef H2CORE_HAVE_JACK audioEngine_renameJackPorts(); #endif audioEngine_setupLadspaFX( m_pAudioDriver->getBufferSize() ); } } /// Stop all audio drivers void audioEngine_stopAudioDrivers() { ___INFOLOG( "[audioEngine_stopAudioDrivers]" ); // check current state if ( m_audioEngineState == STATE_PLAYING ) { audioEngine_stop(); } if ( ( m_audioEngineState != STATE_PREPARED ) && ( m_audioEngineState != STATE_READY ) ) { ___ERRORLOG( QString( "Error: the audio engine is not in PREPARED" " or READY state. state=%1" ) .arg( m_audioEngineState ) ); return; } // change the current audio engine state m_audioEngineState = STATE_INITIALIZED; EventQueue::get_instance()->push_event( EVENT_STATE, STATE_INITIALIZED ); AudioEngine::get_instance()->lock( RIGHT_HERE ); // delete MIDI driver if ( m_pMidiDriver ) { m_pMidiDriver->close(); delete m_pMidiDriver; m_pMidiDriver = NULL; m_pMidiDriverOut = NULL; } // delete audio driver if ( m_pAudioDriver ) { m_pAudioDriver->disconnect(); QMutexLocker mx( &mutex_OutputPointer ); delete m_pAudioDriver; m_pAudioDriver = NULL; mx.unlock(); } AudioEngine::get_instance()->unlock(); } /// Restart all audio and midi drivers void audioEngine_restartAudioDrivers() { audioEngine_stopAudioDrivers(); audioEngine_startAudioDrivers(); } //---------------------------------------------------------------------------- // // Implementation of Hydrogen class // //---------------------------------------------------------------------------- /// static reference of Hydrogen class (Singleton) Hydrogen* Hydrogen::__instance = NULL; const char* Hydrogen::__class_name = "Hydrogen"; Hydrogen::Hydrogen() : Object( __class_name ) { if ( __instance ) { ERRORLOG( "Hydrogen audio engine is already running" ); throw H2Exception( "Hydrogen audio engine is already running" ); } INFOLOG( "[Hydrogen]" ); hydrogenInstance = this; // __instance = this; audioEngine_init(); // Prevent double creation caused by calls from MIDI thread __instance = this; audioEngine_startAudioDrivers(); for(int i = 0; i<128; i++){ m_nInstrumentLookupTable[i] = i; } } Hydrogen::~Hydrogen() { INFOLOG( "[~Hydrogen]" ); if ( m_audioEngineState == STATE_PLAYING ) { audioEngine_stop(); } removeSong(); audioEngine_stopAudioDrivers(); audioEngine_destroy(); __kill_instruments(); __instance = NULL; } void Hydrogen::create_instance() { // Create all the other instances that we need // ....and in the right order Logger::create_instance(); MidiMap::create_instance(); Preferences::create_instance(); EventQueue::create_instance(); MidiActionManager::create_instance(); if( __instance == 0 ) { __instance = new Hydrogen; } // See audioEngine_init() for: // AudioEngine::create_instance(); // Effects::create_instance(); // Playlist::create_instance(); } /// Start the internal sequencer void Hydrogen::sequencer_play() { getSong()->get_pattern_list()->set_to_old(); m_pAudioDriver->play(); } /// Stop the internal sequencer void Hydrogen::sequencer_stop() { if( Hydrogen::get_instance()->getMidiOutput() != NULL ){ Hydrogen::get_instance()->getMidiOutput()->handleQueueAllNoteOff(); } m_pAudioDriver->stop(); Preferences::get_instance()->setRecordEvents(false); } void Hydrogen::setSong( Song *pSong ) { audioEngine_setSong( pSong ); } void Hydrogen::removeSong() { audioEngine_removeSong(); } Song* Hydrogen::getSong() { return m_pSong; } void Hydrogen::midi_noteOn( Note *note ) { audioEngine_noteOn( note ); } void Hydrogen::addRealtimeNote( int instrument, float velocity, float pan_L, float pan_R, float pitch, bool noteOff, bool forcePlay, int msg1 ) { UNUSED( pitch ); Preferences *pref = Preferences::get_instance(); unsigned int realcolumn = 0; unsigned res = pref->getPatternEditorGridResolution(); int nBase = pref->isPatternEditorUsingTriplets() ? 3 : 4; int scalar = ( 4 * MAX_NOTES ) / ( res * nBase ); bool hearnote = forcePlay; int currentPatternNumber; AudioEngine::get_instance()->lock( RIGHT_HERE ); Song *song = getSong(); if ( !pref->__playselectedinstrument ){ if ( instrument >= ( int )song->get_instrument_list()->size() ) { // unused instrument AudioEngine::get_instance()->unlock(); return; } } // Get current partern and column, compensating for "lookahead" if required Pattern* currentPattern = NULL; unsigned int column = 0; unsigned int lookaheadTicks = m_nLookaheadFrames / m_pAudioDriver->m_transport.m_nTickSize; bool doRecord = pref->getRecordEvents(); if ( m_pSong->get_mode() == Song::SONG_MODE && doRecord && m_audioEngineState == STATE_PLAYING ) { // Recording + song playback mode + actually playing PatternList *pPatternList = m_pSong->get_pattern_list(); int ipattern = getPatternPos(); // playlist index if ( ipattern < 0 || ipattern >= (int) pPatternList->size() ) { AudioEngine::get_instance()->unlock(); // unlock the audio engine return; } // Locate column -- may need to jump back in the pattern list column = getTickPosition(); while ( column < lookaheadTicks ) { ipattern -= 1; if ( ipattern < 0 || ipattern >= (int) pPatternList->size() ) { AudioEngine::get_instance()->unlock(); // unlock the audio engine return; } // Convert from playlist index to actual pattern index std::vector *pColumns = m_pSong->get_pattern_group_vector(); for ( int i = 0; i <= ipattern; ++i ) { PatternList *pColumn = ( *pColumns )[i]; currentPattern = pColumn->get( 0 ); currentPatternNumber = i; } column = column + currentPattern->get_length(); // WARNINGLOG( "Undoing lookahead: corrected (" + to_string( ipattern+1 ) + // "," + to_string( (int) ( column - currentPattern->get_length() ) - // (int) lookaheadTicks ) + ") -> (" + to_string(ipattern) + // "," + to_string( (int) column - (int) lookaheadTicks ) + ")." ); } column -= lookaheadTicks; // Convert from playlist index to actual pattern index (if not already done above) if ( currentPattern == NULL ) { std::vector *pColumns = m_pSong->get_pattern_group_vector(); for ( int i = 0; i <= ipattern; ++i ) { PatternList *pColumn = ( *pColumns )[i]; currentPattern = pColumn->get( 0 ); currentPatternNumber = i; } } // Cancel recording if punch area disagrees doRecord = pref->inPunchArea( ipattern ); } else { // Not song-record mode PatternList *pPatternList = m_pSong->get_pattern_list(); if ( ( m_nSelectedPatternNumber != -1 ) && ( m_nSelectedPatternNumber < ( int )pPatternList->size() ) ) { currentPattern = pPatternList->get( m_nSelectedPatternNumber ); currentPatternNumber = m_nSelectedPatternNumber; } if( currentPattern == NULL ){ AudioEngine::get_instance()->unlock(); // unlock the audio engine return; } // Locate column -- may need to wrap around end of pattern column = getTickPosition(); if ( column >= lookaheadTicks ) { column -= lookaheadTicks; } else { lookaheadTicks %= currentPattern->get_length(); column = (column + currentPattern->get_length() - lookaheadTicks) % currentPattern->get_length(); } } realcolumn = getRealtimeTickPosition(); if ( pref->getQuantizeEvents() ) { // quantize it to scale unsigned qcolumn = ( unsigned )::round( column / ( double )scalar ) * scalar; //we have to make sure that no beat is added on the last displayed note in a bar //for example: if the pattern has 4 beats, the editor displays 5 beats, so we should avoid adding beats an note 5. if ( qcolumn == currentPattern->get_length() ) qcolumn = 0; column = qcolumn; } unsigned position = column; m_naddrealtimenotetickposition = column; Instrument *instrRef = 0; if ( song ) { instrRef = song->get_instrument_list()->get( m_nInstrumentLookupTable[ instrument ] );//getlookuptable index = instrument+36, ziel wert = der entprechende wert -36 } if ( currentPattern && ( getState() == STATE_PLAYING ) ) { if( doRecord && pref->getDestructiveRecord() && pref->m_nRecPreDelete>0 ) { // Delete notes around current note if option toggled int postdelete = 0; int predelete = 0; int prefpredelete = pref->m_nRecPreDelete-1; int prefpostdelete = pref->m_nRecPostDelete; int length = currentPattern->get_length(); bool fp = false; postdelete = column; switch (prefpredelete) { case 0: predelete = length ; postdelete = 0; fp = true; break; case 1: predelete = length ; fp = true; break; case 2: predelete = length / 2; fp = true; break; case 3: predelete = length / 4; fp = true; break; case 4: predelete = length / 8; fp = true; break; case 5: predelete = length / 16; fp = true; break; case 6: predelete = length / 32; fp = true; break; case 7: predelete = length / 64; fp = true; break; case 8: predelete = length / 64; break; case 9: predelete = length / 32; break; case 10: predelete = length / 16; break; case 11: predelete = length / 8; break; case 12: predelete = length / 4; break; case 13: predelete = length / 2; break; case 14: predelete = length; break; case 15: break; default : predelete = 1; break; } if(!fp ){ switch (prefpostdelete) { case 0: postdelete = column; break; case 1: postdelete -= length / 64; break; case 2: postdelete -= length / 32; break; case 3: postdelete -= length / 16; break; case 4: postdelete -= length / 8; break; case 5: postdelete -= length / 4; break; case 6: postdelete -= length / 2; break; case 7: postdelete -= length ; break; default : postdelete = column; break; } if (postdelete<0) postdelete = 0; } Pattern::notes_t* notes = (Pattern::notes_t*)currentPattern->get_notes(); FOREACH_NOTE_IT_BEGIN_END(notes,it) { Note *pNote = it->second; assert( pNote ); int currentPosition = pNote->get_position(); if( pref->__playselectedinstrument ){//fix me if( song->get_instrument_list()->get( getSelectedInstrumentNumber()) == pNote->get_instrument() ){ if(prefpredelete>=1 && prefpredelete <=14 ) pNote->set_just_recorded( false ); if( (prefpredelete == 15) && (pNote->get_just_recorded() == false)){ bool replaceExisting = false; if(column == currentPosition) replaceExisting = true; EventQueue::AddMidiNoteVector noteAction; noteAction.m_column = currentPosition; noteAction.m_row = pNote->get_instrument_id();//getSelectedInstrumentNumber(); noteAction.m_pattern = currentPatternNumber; noteAction.f_velocity = velocity; noteAction.f_pan_L = pan_L; noteAction.f_pan_R = pan_R; noteAction.m_length = -1; int divider = msg1 / 12; noteAction.no_octaveKeyVal = (Note::Octave)(divider -3); noteAction.nk_noteKeyVal = (Note::Key)(msg1 - (12 * divider)); noteAction.b_isInstrumentMode = replaceExisting; noteAction.b_isMidi = true; noteAction.b_noteExist = replaceExisting; EventQueue::get_instance()->m_addMidiNoteVector.push_back(noteAction); continue; } if( ( pNote->get_just_recorded() == false ) && (static_cast( pNote->get_position() ) >= postdelete && pNote->get_position() < column + predelete +1 )){ bool replaceExisting = false; if(column == currentPosition) replaceExisting = true; EventQueue::AddMidiNoteVector noteAction; noteAction.m_column = currentPosition; noteAction.m_row = pNote->get_instrument_id();//getSelectedInstrumentNumber(); noteAction.m_pattern = currentPatternNumber; noteAction.f_velocity = velocity; noteAction.f_pan_L = pan_L; noteAction.f_pan_R = pan_R; noteAction.m_length = -1; int divider = msg1 / 12; noteAction.no_octaveKeyVal = (Note::Octave)(divider -3); noteAction.nk_noteKeyVal = (Note::Key)(msg1 - (12 * divider)); noteAction.b_isInstrumentMode = replaceExisting; noteAction.b_isMidi = true; noteAction.b_noteExist = replaceExisting; EventQueue::get_instance()->m_addMidiNoteVector.push_back(noteAction); } } continue; } if ( !fp && pNote->get_instrument() != instrRef ) { continue; } if(prefpredelete>=1 && prefpredelete <=14 ) pNote->set_just_recorded( false ); if( (prefpredelete == 15) && (pNote->get_just_recorded() == false)){ bool replaceExisting = false; if(column == currentPosition) replaceExisting = true; EventQueue::AddMidiNoteVector noteAction; noteAction.m_column = currentPosition; noteAction.m_row = pNote->get_instrument_id();//m_nInstrumentLookupTable[ instrument ]; noteAction.m_pattern = currentPatternNumber; noteAction.f_velocity = velocity; noteAction.f_pan_L = pan_L; noteAction.f_pan_R = pan_R; noteAction.m_length = -1; noteAction.no_octaveKeyVal = (Note::Octave)0; noteAction.nk_noteKeyVal = (Note::Key)0; noteAction.b_isInstrumentMode = false; noteAction.b_isMidi = false; noteAction.b_noteExist = replaceExisting; EventQueue::get_instance()->m_addMidiNoteVector.push_back(noteAction); continue; } if( ( pNote->get_just_recorded() == false ) && ( static_cast( pNote->get_position() ) >= postdelete && pNote->get_position() get_instrument_id();//m_nInstrumentLookupTable[ instrument ]; noteAction.m_pattern = currentPatternNumber; noteAction.f_velocity = velocity; noteAction.f_pan_L = pan_L; noteAction.f_pan_R = pan_R; noteAction.m_length = -1; noteAction.no_octaveKeyVal = (Note::Octave)0; noteAction.nk_noteKeyVal = (Note::Key)0; noteAction.b_isInstrumentMode = false; noteAction.b_isMidi = false; noteAction.b_noteExist = replaceExisting; EventQueue::get_instance()->m_addMidiNoteVector.push_back(noteAction); } } } assert( currentPattern != NULL ); if( doRecord ){ bool bNoteAlreadyExist = false; Note::Key myKey = (Note::Key)0; Note::Octave myOctave = (Note::Octave)0; if(pref->__playselectedinstrument){ instrRef = song->get_instrument_list()->get( getSelectedInstrumentNumber() ); int divider = msg1 / 12; myKey = (Note::Key)(msg1 - (12 * divider)); myOctave = (Note::Octave)(divider -3); } else { instrRef = song->get_instrument_list()->get( m_nInstrumentLookupTable[ instrument ] ); } Note* pNoteold = currentPattern->find_note( column, -1, instrRef, myKey, myOctave ); if( pNoteold ) { bNoteAlreadyExist = true; } if ( !pref->__playselectedinstrument ){ EventQueue::AddMidiNoteVector noteAction; noteAction.m_column = column; noteAction.m_row = m_nInstrumentLookupTable[ instrument ]; noteAction.m_pattern = currentPatternNumber; noteAction.f_velocity = velocity; noteAction.f_pan_L = pan_L; noteAction.f_pan_R = pan_R; noteAction.m_length = -1; noteAction.no_octaveKeyVal = (Note::Octave)0; noteAction.nk_noteKeyVal = (Note::Key)0; noteAction.b_isInstrumentMode = false; noteAction.b_isMidi = true; noteAction.b_noteExist = bNoteAlreadyExist; EventQueue::get_instance()->m_addMidiNoteVector.push_back(noteAction); // hear note if its not in the future if ( pref->getHearNewNotes() && position <= getTickPosition() ) { hearnote = true; } } else if ( pref->__playselectedinstrument ){ EventQueue::AddMidiNoteVector noteAction; noteAction.m_column = column; noteAction.m_row = getSelectedInstrumentNumber(); noteAction.m_pattern = currentPatternNumber; noteAction.f_velocity = velocity; noteAction.f_pan_L = pan_L; noteAction.f_pan_R = pan_R; noteAction.m_length = -1; int divider = msg1 / 12; noteAction.no_octaveKeyVal = (Note::Octave)(divider -3); noteAction.nk_noteKeyVal = (Note::Key)(msg1 - (12 * divider)); noteAction.b_isInstrumentMode = true; noteAction.b_isMidi = true; noteAction.b_noteExist = bNoteAlreadyExist; EventQueue::get_instance()->m_addMidiNoteVector.push_back(noteAction); // hear note if its not in the future if ( pref->getHearNewNotes() && position <= getTickPosition() ) { hearnote = true; } } } } else if ( pref->getHearNewNotes() ) { hearnote = true; } if ( !pref->__playselectedinstrument ){ if ( hearnote && instrRef ) { Note *note2 = new Note( instrRef, realcolumn, velocity, pan_L, pan_R, -1, 0 ); midi_noteOn( note2 ); } }else { if ( hearnote ) { Note *note2 = new Note( song->get_instrument_list()->get( getSelectedInstrumentNumber()), realcolumn, velocity, pan_L, pan_R, -1, 0 ); int divider = msg1 / 12; Note::Octave octave = (Note::Octave)(divider -3); Note::Key notehigh = (Note::Key)(msg1 - (12 * divider)); //ERRORLOG( QString( "octave: %1, note: %2, instrument %3" ).arg( octave ).arg(notehigh).arg(instrument)); note2->set_midi_info( notehigh, octave, msg1 ); midi_noteOn( note2 ); } } AudioEngine::get_instance()->unlock(); // unlock the audio engine } float Hydrogen::getMasterPeak_L() { return m_fMasterPeak_L; } float Hydrogen::getMasterPeak_R() { return m_fMasterPeak_R; } unsigned long Hydrogen::getTickPosition() { return m_nPatternTickPosition; } unsigned long Hydrogen::getRealtimeTickPosition() { //unsigned long initTick = audioEngine_getTickPosition(); unsigned int initTick = ( unsigned int )( m_nRealtimeFrames / m_pAudioDriver->m_transport.m_nTickSize ); unsigned long retTick; struct timeval currtime; struct timeval deltatime; double sampleRate = ( double ) m_pAudioDriver->getSampleRate(); gettimeofday ( &currtime, NULL ); timersub( &currtime, &m_currentTickTime, &deltatime ); // add a buffers worth for jitter resistance double deltaSec = ( double ) deltatime.tv_sec + ( deltatime.tv_usec / 1000000.0 ) + ( m_pAudioDriver->getBufferSize() / ( double )sampleRate ); retTick = ( unsigned long ) ( ( sampleRate / ( double ) m_pAudioDriver->m_transport.m_nTickSize ) * deltaSec ); retTick = initTick + retTick; return retTick; } PatternList* Hydrogen::getCurrentPatternList() { return m_pPlayingPatterns; } PatternList * Hydrogen::getNextPatterns() { return m_pNextPatterns; } /// Set the next pattern (Pattern mode only) void Hydrogen::sequencer_setNextPattern( int pos, bool appendPattern, bool deletePattern ) { m_bAppendNextPattern = appendPattern; m_bDeleteNextPattern = deletePattern; AudioEngine::get_instance()->lock( RIGHT_HERE ); if ( m_pSong && m_pSong->get_mode() == Song::PATTERN_MODE ) { PatternList *patternList = m_pSong->get_pattern_list(); Pattern * p = patternList->get( pos ); if ( ( pos >= 0 ) && ( pos < ( int )patternList->size() ) ) { // if p is already on the next pattern list, delete it. if ( m_pNextPatterns->del( p ) == NULL ) { // WARNINGLOG( "Adding to nextPatterns" ); m_pNextPatterns->add( p ); }/* else { // WARNINGLOG( "Removing " + to_string(pos) ); }*/ } else { ERRORLOG( QString( "pos not in patternList range. pos=%1 " "patternListSize=%2" ) .arg( pos ) .arg( patternList->size() ) ); m_pNextPatterns->clear(); } } else { ERRORLOG( "can't set next pattern in song mode" ); m_pNextPatterns->clear(); } AudioEngine::get_instance()->unlock(); } int Hydrogen::getPatternPos() { return m_nSongPos; } void Hydrogen::restartDrivers() { audioEngine_restartAudioDrivers(); } /// Export a song to a wav file, returns the elapsed time in mSec void Hydrogen::startExportSong( const QString& filename, int rate, int depth ) { if ( getState() == STATE_PLAYING ) { sequencer_stop(); } AudioEngine::get_instance()->get_sampler()->stop_playing_notes(); Preferences *pPref = Preferences::get_instance(); m_oldEngineMode = m_pSong->get_mode(); m_bOldLoopEnabled = m_pSong->is_loop_enabled(); m_pSong->set_mode( Song::SONG_MODE ); m_pSong->set_loop_enabled( true ); // unsigned nSamplerate = m_pAudioDriver->getSampleRate(); unsigned nSamplerate = (unsigned)rate; // stop all audio drivers audioEngine_stopAudioDrivers(); /* FIXME: Questo codice fa davvero schifo.... */ m_pAudioDriver = new DiskWriterDriver( audioEngine_process, nSamplerate, filename, depth); // reset m_pAudioDriver->m_transport.m_nFrames = 0; // reset total frames //m_pAudioDriver->setBpm( m_pSong->__bpm ); m_nSongPos = 0; m_nPatternTickPosition = 0; m_audioEngineState = STATE_PLAYING; m_nPatternStartTick = -1; int res = m_pAudioDriver->init( pPref->m_nBufferSize ); if ( res != 0 ) { ERRORLOG( "Error starting disk writer driver " "[DiskWriterDriver::init()]" ); } m_pMainBuffer_L = m_pAudioDriver->getOut_L(); m_pMainBuffer_R = m_pAudioDriver->getOut_R(); audioEngine_setupLadspaFX( m_pAudioDriver->getBufferSize() ); audioEngine_seek( 0, false ); res = m_pAudioDriver->connect(); if ( res != 0 ) { ERRORLOG( "Error starting disk writer driver " "[DiskWriterDriver::connect()]" ); } } void Hydrogen::stopExportSong( bool reconnectOldDriver ) { if ( m_pAudioDriver->class_name() != DiskWriterDriver::class_name() ) { return; } // audioEngine_stopAudioDrivers(); m_pAudioDriver->disconnect(); m_audioEngineState = STATE_INITIALIZED; delete m_pAudioDriver; m_pAudioDriver = NULL; m_pMainBuffer_L = NULL; m_pMainBuffer_R = NULL; m_pSong->set_mode( m_oldEngineMode ); m_pSong->set_loop_enabled( m_bOldLoopEnabled ); m_nSongPos = -1; m_nPatternTickPosition = 0; if(!reconnectOldDriver) return; audioEngine_startAudioDrivers(); if ( m_pAudioDriver ) { m_pAudioDriver->setBpm( m_pSong->__bpm ); } else { ERRORLOG( "m_pAudioDriver = NULL" ); } } /// Used to display audio driver info AudioOutput* Hydrogen::getAudioOutput() { return m_pAudioDriver; } /// Used to display midi driver info MidiInput* Hydrogen::getMidiInput() { return m_pMidiDriver; } MidiOutput* Hydrogen::getMidiOutput() { return m_pMidiDriverOut; } void Hydrogen::setMasterPeak_L( float value ) { m_fMasterPeak_L = value; } void Hydrogen::setMasterPeak_R( float value ) { m_fMasterPeak_R = value; } int Hydrogen::getState() { return m_audioEngineState; } void Hydrogen::setCurrentPatternList( PatternList *pPatternList ) { AudioEngine::get_instance()->lock( RIGHT_HERE ); m_pPlayingPatterns = pPatternList; EventQueue::get_instance()->push_event( EVENT_PATTERN_CHANGED, -1 ); AudioEngine::get_instance()->unlock(); } float Hydrogen::getProcessTime() { return m_fProcessTime; } float Hydrogen::getMaxProcessTime() { return m_fMaxProcessTime; } int Hydrogen::loadDrumkit( Drumkit *drumkitInfo ) { int old_ae_state = m_audioEngineState; if( m_audioEngineState >= STATE_READY ) { m_audioEngineState = STATE_PREPARED; } INFOLOG( drumkitInfo->get_name() ); m_currentDrumkit = drumkitInfo->get_name(); LocalFileMng fileMng; QString sDrumkitPath = Filesystem::drumkit_path_search( drumkitInfo->get_name() ); //current instrument list InstrumentList *songInstrList = m_pSong->get_instrument_list(); //new instrument list InstrumentList *pDrumkitInstrList = drumkitInfo->get_instruments(); /* If the old drumkit is bigger then the new drumkit, delete all instruments with a bigger pos then pDrumkitInstrList->size(). Otherwise the instruments from our old instrumentlist with pos > pDrumkitInstrList->size() stay in the new instrumentlist wolke: info! this has moved to the end of this function because we get lost objects in memory now: 1. the new drumkit will loaded 2. all not used instruments will complete deleted old funktion: while ( pDrumkitInstrList->size() < songInstrList->size() ) { songInstrList->del(songInstrList->size() - 1); } */ //needed for the new delete function int instrumentDiff = songInstrList->size() - pDrumkitInstrList->size(); for ( unsigned nInstr = 0; nInstr < pDrumkitInstrList->size(); ++nInstr ) { Instrument *pInstr = NULL; if ( nInstr < songInstrList->size() ) { //instrument exists already pInstr = songInstrList->get( nInstr ); assert( pInstr ); } else { pInstr = new Instrument(); // The instrument isn't playing yet; no need for locking // :-) - Jakob Lund. AudioEngine::get_instance()->lock( // "Hydrogen::loadDrumkit" ); songInstrList->add( pInstr ); // AudioEngine::get_instance()->unlock(); } Instrument *pNewInstr = pDrumkitInstrList->get( nInstr ); assert( pNewInstr ); INFOLOG( QString( "Loading instrument (%1 of %2) [%3]" ) .arg( nInstr ) .arg( pDrumkitInstrList->size() ) .arg( pNewInstr->get_name() ) ); // creo i nuovi layer in base al nuovo strumento // Moved code from here right into the Instrument class - Jakob Lund. pInstr->load_from( drumkitInfo, pNewInstr ); } //wolke: new delete funktion if ( instrumentDiff >=0 ){ for ( int i = 0; i < instrumentDiff ; i++ ){ removeInstrument( m_pSong->get_instrument_list()->size() - 1, true ); } } #ifdef H2CORE_HAVE_JACK AudioEngine::get_instance()->lock( RIGHT_HERE ); renameJackPorts(); AudioEngine::get_instance()->unlock(); #endif m_audioEngineState = old_ae_state; return 0; //ok } //this is also a new function and will used from the new delete function in //Hydrogen::loadDrumkit to delete the instruments by number void Hydrogen::removeInstrument( int instrumentnumber, bool conditional ) { Instrument *pInstr = m_pSong->get_instrument_list()->get( instrumentnumber ); PatternList* pPatternList = getSong()->get_pattern_list(); if ( conditional ) { // new! this check if a pattern has an active note if there is an note //inside the pattern the intrument would not be deleted for ( int nPattern = 0 ; nPattern < (int)pPatternList->size() ; ++nPattern ) { if( pPatternList ->get( nPattern ) ->references( pInstr ) ) { return; } } } else { getSong()->purge_instrument( pInstr ); } Song *pSong = getSong(); InstrumentList* pList = pSong->get_instrument_list(); if( pList->size()==1 ){ AudioEngine::get_instance()->lock( RIGHT_HERE ); Instrument* pInstr = pList->get( 0 ); pInstr->set_name( (QString( "Instrument 1" )) ); // remove all layers for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { InstrumentLayer* pLayer = pInstr->get_layer( nLayer ); delete pLayer; pInstr->set_layer( NULL, nLayer ); } AudioEngine::get_instance()->unlock(); EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); INFOLOG("clear last instrument to empty instrument 1 instead delete the last instrument"); return; } // if the instrument was the last on the instruments list, select the // next-last if ( instrumentnumber >= (int)getSong()->get_instrument_list()->size() - 1 ) { Hydrogen::get_instance() ->setSelectedInstrumentNumber( std::max(0, instrumentnumber - 1) ); } // delete the instrument from the instruments list AudioEngine::get_instance()->lock( RIGHT_HERE ); getSong()->get_instrument_list()->del( instrumentnumber ); getSong()->__is_modified = true; AudioEngine::get_instance()->unlock(); // At this point the instrument has been removed from both the // instrument list and every pattern in the song. Hence there's no way // (NOTE) to play on that instrument, and once all notes have stopped // playing it will be save to delete. // the ugly name is just for debugging... QString xxx_name = QString( "XXX_%1" ) . arg( pInstr->get_name() ); pInstr->set_name( xxx_name ); __instrument_death_row.push_back( pInstr ); __kill_instruments(); // checks if there are still notes. // this will force a GUI update. EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); } void Hydrogen::raiseError( unsigned nErrorCode ) { audioEngine_raiseError( nErrorCode ); } unsigned long Hydrogen::getTotalFrames() { return m_pAudioDriver->m_transport.m_nFrames; } unsigned long Hydrogen::getRealtimeFrames() { return m_nRealtimeFrames; } /** * Get the ticks for pattern at pattern pos * @a int pos -- position in song * @return -1 if pos > number of patterns in the song, tick no. > 0 otherwise * The driver should be LOCKED when calling this!! */ long Hydrogen::getTickForPosition( int pos ) { int nPatternGroups = m_pSong->get_pattern_group_vector()->size(); if( nPatternGroups == 0 ) return -1; if ( pos >= nPatternGroups ) { if ( m_pSong->is_loop_enabled() ) { pos = pos % nPatternGroups; } else { WARNINGLOG( QString( "patternPos > nPatternGroups. pos:" " %1, nPatternGroups: %2") .arg( pos ) .arg( nPatternGroups ) ); return -1; } } std::vector *pColumns = m_pSong->get_pattern_group_vector(); long totalTick = 0; int nPatternSize; Pattern *pPattern = NULL; for ( int i = 0; i < pos; ++i ) { PatternList *pColumn = ( *pColumns )[ i ]; // prendo solo il primo. I pattern nel gruppo devono avere la // stessa lunghezza pPattern = pColumn->get( 0 ); if ( pPattern ) { nPatternSize = pPattern->get_length(); } else { nPatternSize = MAX_NOTES; } totalTick += nPatternSize; } return totalTick; } /// Set the position in the song void Hydrogen::setPatternPos( int pos ) { if ( pos < -1 ) pos = -1; AudioEngine::get_instance()->lock( RIGHT_HERE ); EventQueue::get_instance()->push_event( EVENT_METRONOME, 1 ); long totalTick = getTickForPosition( pos ); if ( totalTick < 0 ) { AudioEngine::get_instance()->unlock(); return; } if ( getState() != STATE_PLAYING ) { // find pattern immediately when not playing // int dummy; // m_nSongPos = findPatternInTick( totalTick, // m_pSong->is_loop_enabled(), // &dummy ); m_nSongPos = pos; m_nPatternTickPosition = 0; } m_pAudioDriver->locate( ( int ) ( totalTick * m_pAudioDriver->m_transport.m_nTickSize ) ); AudioEngine::get_instance()->unlock(); } void Hydrogen::getLadspaFXPeak( int nFX, float *fL, float *fR ) { #ifdef H2CORE_HAVE_LADSPA ( *fL ) = m_fFXPeak_L[nFX]; ( *fR ) = m_fFXPeak_R[nFX]; #else ( *fL ) = 0; ( *fR ) = 0; #endif } void Hydrogen::setLadspaFXPeak( int nFX, float fL, float fR ) { #ifdef H2CORE_HAVE_LADSPA m_fFXPeak_L[nFX] = fL; m_fFXPeak_R[nFX] = fR; #endif } void Hydrogen::onTapTempoAccelEvent() { #ifndef WIN32 INFOLOG( "tap tempo" ); static timeval oldTimeVal; struct timeval now; gettimeofday(&now, NULL); float fInterval = (now.tv_sec - oldTimeVal.tv_sec) * 1000.0 + (now.tv_usec - oldTimeVal.tv_usec) / 1000.0; oldTimeVal = now; if ( fInterval < 1000.0 ) { setTapTempo( fInterval ); } #endif } void Hydrogen::setTapTempo( float fInterval ) { // infoLog( "set tap tempo" ); static float fOldBpm1 = -1; static float fOldBpm2 = -1; static float fOldBpm3 = -1; static float fOldBpm4 = -1; static float fOldBpm5 = -1; static float fOldBpm6 = -1; static float fOldBpm7 = -1; static float fOldBpm8 = -1; float fBPM = 60000.0 / fInterval; if ( fabs( fOldBpm1 - fBPM ) > 20 ) { // troppa differenza, niente media fOldBpm1 = fBPM; fOldBpm2 = fBPM; fOldBpm3 = fBPM; fOldBpm4 = fBPM; fOldBpm5 = fBPM; fOldBpm6 = fBPM; fOldBpm7 = fBPM; fOldBpm8 = fBPM; } if ( fOldBpm1 == -1 ) { fOldBpm1 = fBPM; fOldBpm2 = fBPM; fOldBpm3 = fBPM; fOldBpm4 = fBPM; fOldBpm5 = fBPM; fOldBpm6 = fBPM; fOldBpm7 = fBPM; fOldBpm8 = fBPM; } fBPM = ( fBPM + fOldBpm1 + fOldBpm2 + fOldBpm3 + fOldBpm4 + fOldBpm5 + fOldBpm6 + fOldBpm7 + fOldBpm8 ) / 9.0; INFOLOG( QString( "avg BPM = %1" ).arg( fBPM ) ); fOldBpm8 = fOldBpm7; fOldBpm7 = fOldBpm6; fOldBpm6 = fOldBpm5; fOldBpm5 = fOldBpm4; fOldBpm4 = fOldBpm3; fOldBpm3 = fOldBpm2; fOldBpm2 = fOldBpm1; fOldBpm1 = fBPM; AudioEngine::get_instance()->lock( RIGHT_HERE ); // m_pAudioDriver->setBpm( fBPM ); // m_pSong->setBpm( fBPM ); setBPM( fBPM ); AudioEngine::get_instance()->unlock(); } // Called with audioEngine in LOCKED state. void Hydrogen::setBPM( float fBPM ) { if ( m_pAudioDriver && m_pSong ) { m_pAudioDriver->setBpm( fBPM ); m_pSong->__bpm = fBPM; m_nNewBpmJTM = fBPM; // audioEngine_process_checkBPMChanged(); } } void Hydrogen::restartLadspaFX() { if ( m_pAudioDriver ) { AudioEngine::get_instance()->lock( RIGHT_HERE ); audioEngine_setupLadspaFX( m_pAudioDriver->getBufferSize() ); AudioEngine::get_instance()->unlock(); } else { ERRORLOG( "m_pAudioDriver = NULL" ); } } int Hydrogen::getSelectedPatternNumber() { return m_nSelectedPatternNumber; } void Hydrogen::setSelectedPatternNumberWithoutGuiEvent( int nPat ) { if ( nPat == m_nSelectedPatternNumber || ( nPat + 1 > m_pSong->get_pattern_list()->size() ) ) return; if ( Preferences::get_instance()->patternModePlaysSelected() ) { AudioEngine::get_instance()->lock( RIGHT_HERE ); m_nSelectedPatternNumber = nPat; AudioEngine::get_instance()->unlock(); } else { m_nSelectedPatternNumber = nPat; } } void Hydrogen::setSelectedPatternNumber( int nPat ) { // FIXME: controllare se e' valido.. if ( nPat == m_nSelectedPatternNumber ) return; if ( Preferences::get_instance()->patternModePlaysSelected() ) { AudioEngine::get_instance()->lock( RIGHT_HERE ); m_nSelectedPatternNumber = nPat; AudioEngine::get_instance()->unlock(); } else { m_nSelectedPatternNumber = nPat; } EventQueue::get_instance()->push_event( EVENT_SELECTED_PATTERN_CHANGED, -1 ); } int Hydrogen::getSelectedInstrumentNumber() { return m_nSelectedInstrumentNumber; } void Hydrogen::setSelectedInstrumentNumber( int nInstrument ) { if ( m_nSelectedInstrumentNumber == nInstrument ) return; m_nSelectedInstrumentNumber = nInstrument; EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); } #ifdef H2CORE_HAVE_JACK void Hydrogen::renameJackPorts() { if( Preferences::get_instance()->m_bJackTrackOuts == true ){ audioEngine_renameJackPorts(); } } #endif ///BeatCounter void Hydrogen::setbeatsToCount( int beatstocount) { m_nbeatsToCount = beatstocount; } int Hydrogen::getbeatsToCount() { return m_nbeatsToCount; } void Hydrogen::setNoteLength( float notelength) { m_ntaktoMeterCompute = notelength; } float Hydrogen::getNoteLength() { return m_ntaktoMeterCompute; } int Hydrogen::getBcStatus() { return eventCount; } void Hydrogen::setBcOffsetAdjust() { //individual fine tuning for the beatcounter //to adjust ms_offset from different people and controller Preferences *pref = Preferences::get_instance(); m_nCoutOffset = pref->m_countOffset; m_nStartOffset = pref->m_startOffset; } void Hydrogen::handleBeatCounter() { // Get first time value: if (beatCount == 1) gettimeofday(¤tTime,NULL); eventCount++; // Set wlastTime to wcurrentTime to remind the time: lastTime = currentTime; // Get new time: gettimeofday(¤tTime,NULL); // Build doubled time difference: lastBeatTime = (double)( lastTime.tv_sec + (double)(lastTime.tv_usec * US_DIVIDER) + (int)m_nCoutOffset * .0001 ); currentBeatTime = (double)( currentTime.tv_sec + (double)(currentTime.tv_usec * US_DIVIDER) ); beatDiff = beatCount == 1 ? 0 : currentBeatTime - lastBeatTime; //if differences are to big reset the beatconter if( beatDiff > 3.001 * 1/m_ntaktoMeterCompute ){ eventCount = 1; beatCount = 1; return; } // Only accept differences big enough if (beatCount == 1 || beatDiff > .001) { if (beatCount > 1) beatDiffs[beatCount - 2] = beatDiff ; // Compute and reset: if (beatCount == m_nbeatsToCount){ // unsigned long currentframe = getRealtimeFrames(); double beatTotalDiffs = 0; for(int i = 0; i < (m_nbeatsToCount - 1); i++) beatTotalDiffs += beatDiffs[i]; double beatDiffAverage = beatTotalDiffs / (beatCount - 1) * m_ntaktoMeterCompute ; beatCountBpm = (float) ((int) (60 / beatDiffAverage * 100)) / 100; AudioEngine::get_instance()->lock( RIGHT_HERE ); if ( beatCountBpm > 500) beatCountBpm = 500; setBPM( beatCountBpm ); AudioEngine::get_instance()->unlock(); if (Preferences::get_instance()->m_mmcsetplay == Preferences::SET_PLAY_OFF) { beatCount = 1; eventCount = 1; }else{ if ( m_audioEngineState != STATE_PLAYING ){ unsigned bcsamplerate = m_pAudioDriver->getSampleRate(); unsigned long rtstartframe = 0; if ( m_ntaktoMeterCompute <= 1){ rtstartframe = bcsamplerate * beatDiffAverage * ( 1/ m_ntaktoMeterCompute ); }else { rtstartframe = bcsamplerate * beatDiffAverage / m_ntaktoMeterCompute ; } int sleeptime = ( (float) rtstartframe / (float) bcsamplerate * (int) 1000 ) + (int)m_nCoutOffset + (int) m_nStartOffset; #ifdef WIN32 Sleep( sleeptime ); #else usleep( 1000 * sleeptime ); #endif sequencer_play(); } beatCount = 1; eventCount = 1; return; } } else { beatCount ++; } } return; } //~ beatcounter // jack transport master unsigned long Hydrogen::getHumantimeFrames() { return m_nHumantimeFrames; } void Hydrogen::setHumantimeFrames(unsigned long hframes) { m_nHumantimeFrames = hframes; } #ifdef H2CORE_HAVE_JACK void Hydrogen::offJackMaster() { if ( m_pAudioDriver->class_name() == JackOutput::class_name() ) { static_cast< JackOutput* >( m_pAudioDriver )->com_release(); } } void Hydrogen::onJackMaster() { if ( m_pAudioDriver->class_name() == JackOutput::class_name() ) { static_cast< JackOutput* >( m_pAudioDriver )->initTimeMaster(); } } unsigned long Hydrogen::getTimeMasterFrames() { float allframes = 0 ; if ( m_pAudioDriver->m_transport.m_status == TransportInfo::STOPPED ){ int oldtick = getTickPosition(); for (int i = 0; i <= getPatternPos(); i++){ float framesforposition = (long)getTickForHumanPosition(i) * (float)m_pAudioDriver->m_transport.m_nTickSize; allframes = framesforposition + allframes; } unsigned long framesfortimemaster = (unsigned int)( allframes + oldtick * (float)m_pAudioDriver->m_transport.m_nTickSize ); m_nHumantimeFrames = framesfortimemaster; return framesfortimemaster; }else { return m_nHumantimeFrames; } } #endif long Hydrogen::getTickForHumanPosition( int humanpos ) { std::vector< PatternList* > * columns = m_pSong->get_pattern_group_vector(); int nPatternGroups = columns->size(); if ( humanpos >= nPatternGroups ) { if ( m_pSong->is_loop_enabled() ) { humanpos = humanpos % nPatternGroups; } else { return -1; } } // std::vector *pColumns = // m_pSong->get_pattern_group_vector()[ humanpos - 1 ] // .get( 0 )->get_length(); // ERRORLOG( "Kick me!" ); if ( humanpos == 0 ) return 0; Pattern *pPattern = columns->at( humanpos - 1 )->get( 0 ); if ( pPattern ) { return pPattern->get_length(); } else { return MAX_NOTES; } // int nPatternSize; // pColumns /* Pattern *pPattern = NULL; for ( int i = 0; i < humanpos; ++i ) { PatternList *pColumn = ( *pColumns )[ i ]; pPattern = pColumn->get( 0 ); if ( pPattern ) { nPatternSize = pPattern->get_length(); } else { nPatternSize = MAX_NOTES; } humanTick = nPatternSize; }*/ // return humanTick; } float Hydrogen::getNewBpmJTM() { return m_nNewBpmJTM; } void Hydrogen::setNewBpmJTM( float bpmJTM ) { m_nNewBpmJTM = bpmJTM; } void Hydrogen::ComputeHumantimeFrames(uint32_t nFrames) { if ( ( m_audioEngineState == STATE_PLAYING ) ) m_nHumantimeFrames = nFrames + m_nHumantimeFrames; } //~ jack transport master void Hydrogen::triggerRelocateDuringPlay() { if ( m_pSong->get_mode() == Song::PATTERN_MODE ) m_nPatternStartTick = -1; // This forces the barline position } void Hydrogen::togglePlaysSelected() { if ( getSong()->get_mode() != Song::PATTERN_MODE ) return; Preferences * P = Preferences::get_instance(); AudioEngine::get_instance()->lock( RIGHT_HERE ); bool isPlaysSelected = P->patternModePlaysSelected(); if (isPlaysSelected) { m_pPlayingPatterns->clear(); Pattern * pSelectedPattern = m_pSong ->get_pattern_list() ->get(m_nSelectedPatternNumber); m_pPlayingPatterns->add( pSelectedPattern ); } P->setPatternModePlaysSelected( !isPlaysSelected ); AudioEngine::get_instance()->unlock(); } void Hydrogen::__kill_instruments() { int c = 0; Instrument * pInstr = NULL; while ( __instrument_death_row.size() && __instrument_death_row.front()->is_queued() == 0 ) { pInstr = __instrument_death_row.front(); __instrument_death_row.pop_front(); INFOLOG( QString( "Deleting unused instrument (%1). " "%2 unused remain." ) . arg( pInstr->get_name() ) . arg( __instrument_death_row.size() ) ); delete pInstr; c++; } if ( __instrument_death_row.size() ) { pInstr = __instrument_death_row.front(); INFOLOG( QString( "Instrument %1 still has %2 active notes. " "Delaying 'delete instrument' operation." ) . arg( pInstr->get_name() ) . arg( pInstr->is_queued() ) ); } } void Hydrogen::__panic() { sequencer_stop(); AudioEngine::get_instance()->get_sampler()->stop_playing_notes(); } int Hydrogen::__get_selected_PatterNumber() { return m_nSelectedPatternNumber; } unsigned int Hydrogen::__getMidiRealtimeNoteTickPosition() { return m_naddrealtimenotetickposition; } void Hydrogen::sortTimelineVector() { //sort the timeline vector to beats a < b sort(m_timelinevector.begin(), m_timelinevector.end(), TimelineComparator()); } void Hydrogen::sortTimelineTagVector() { //sort the timeline vector to beats a < b sort(m_timelinetagvector.begin(), m_timelinetagvector.end(), TimelineTagComparator()); } void Hydrogen::setTimelineBpm() { //time line test if ( Preferences::get_instance()->getUseTimelineBpm() ){ float bpm = m_pSong->__bpm; for ( int i = 0; i < static_cast(m_timelinevector.size() ); i++){ if( m_timelinevector[i].m_htimelinebeat > getPatternPos() ){ break; } bpm = m_timelinevector[i].m_htimelinebpm; }//for if(bpm != m_pSong->__bpm){ setBPM( bpm ); } }//if } }; hydrogen-0.9.6-beta3/src/core/src/lash/000077500000000000000000000000001211146647700176075ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/src/lash/LashClient.cpp000066400000000000000000000056061211146647700223500ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2005 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /** * LASH support for Hydrogen 0.9.3. * * Created by Jaakko Sipari (jaakko.sipari@gmail.com) */ #include #ifdef H2CORE_HAVE_LASH #include #include #include using namespace H2Core; LashClient* LashClient::__instance = NULL; /// static reference of LashClient class (Singleton) void LashClient::create_instance( const char *lashClass, const char *viewName, int *argc, char ***argv ) { __instance = new LashClient(lashClass, viewName, argc, argv); } LashClient::LashClient(const char* lashClass, const char* viewName, int* argc, char*** argv) { __instance = this; if ( H2Core::Preferences::get_instance()->useLash() ){ newProject = true; lash_args_t *lash_args = lash_extract_args(argc, argv); lashClient = lash_init(lash_args, lashClass, LASH_Config_File, LASH_PROTOCOL(2, 0)); if (isConnected()) { sendEvent(LASH_Client_Name, viewName); } } } LashClient::~LashClient() { } bool LashClient::isConnected() { return lash_enabled(lashClient); } void LashClient::setNewProject(bool value) { newProject = value; } bool LashClient::isNewProject() { return newProject; } lash_client_t* LashClient::getConnection() { return lashClient; } lash_event_t* LashClient::getNextEvent() { lash_event_t* event = lash_get_event(lashClient); return event; } void LashClient::sendEvent(LASH_Event_Type eventType) { sendEvent(eventType, NULL); } void LashClient::sendEvent(LASH_Event_Type eventType, const char* value) { lash_event_t *event = lash_event_new_with_type(eventType); if (value != NULL) { lash_event_set_string(event, value); } lash_send_event(lashClient, event); } void LashClient::setJackClientName( const std::string& name ) { jackClientName = name; } void LashClient::sendJackClientName() { lash_jack_client_name(lashClient, jackClientName.c_str()); } void LashClient::setAlsaClientId(unsigned char id) { alsaClientId = id; } void LashClient::sendAlsaClientId() { lash_alsa_client_id(lashClient, alsaClientId); } #endif hydrogen-0.9.6-beta3/src/core/src/local_file_mgr.cpp000066400000000000000000001262011211146647700223240ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "hydrogen/version.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace H2Core { const char* LocalFileMng::__class_name = "LocalFileMng"; LocalFileMng::LocalFileMng() : Object( __class_name ) { // infoLog("INIT"); } LocalFileMng::~LocalFileMng() { // infoLog("DESTROY"); } QString LocalFileMng::getDrumkitNameForPattern( const QString& patternDir ) { QDomDocument doc = LocalFileMng::openXmlDocument( patternDir ); QDomNode rootNode = doc.firstChildElement( "drumkit_pattern" ); // root element if ( rootNode.isNull() ) { ERRORLOG( "Error reading Pattern: Pattern_drumkit_infonode not found " + patternDir); return NULL; } return LocalFileMng::readXmlString( rootNode,"pattern_for_drumkit", "" ); } Pattern* LocalFileMng::loadPattern( const QString& directory ) { InstrumentList* instrList = Hydrogen::get_instance()->getSong()->get_instrument_list(); Pattern *pPattern = NULL; QString patternInfoFile = directory; QFile check( patternInfoFile ); if (check.exists() == false) { ERRORLOG( QString("Load Pattern: Data file %1 not found." ).arg( patternInfoFile ) ); return NULL; } QDomDocument doc = LocalFileMng::openXmlDocument( patternInfoFile ); QFile file( patternInfoFile ); // root element QDomNode rootNode = doc.firstChildElement( "drumkit_pattern" ); // root element if ( rootNode.isNull() ) { ERRORLOG( "Error reading Pattern: Pattern_drumkit_infonode not found" ); return NULL; } QDomNode patternNode = rootNode.firstChildElement( "pattern" ); QString sName( LocalFileMng::readXmlString( patternNode,"pattern_name", "" ) ); QString sInfo( LocalFileMng::readXmlString( patternNode,"info", "" ) ); QString sCategory( LocalFileMng::readXmlString( patternNode,"category", "" ) ); int nSize = -1; nSize = LocalFileMng::readXmlInt( patternNode, "size",nSize ,false,false ); pPattern = new Pattern( sName, sInfo, sCategory, nSize ); QDomNode pNoteListNode = patternNode.firstChildElement( "noteList" ); if ( ! pNoteListNode.isNull() ) { // new code :) QDomNode noteNode = pNoteListNode.firstChildElement( "note" ); while ( ! noteNode.isNull() ) { Note* pNote = NULL; unsigned nPosition = LocalFileMng::readXmlInt( noteNode, "position", 0 ); float fLeadLag = LocalFileMng::readXmlFloat( noteNode, "leadlag", 0.0 , false , false); float fVelocity = LocalFileMng::readXmlFloat( noteNode, "velocity", 0.8f ); float fPan_L = LocalFileMng::readXmlFloat( noteNode, "pan_L", 0.5 ); float fPan_R = LocalFileMng::readXmlFloat( noteNode, "pan_R", 0.5 ); int nLength = LocalFileMng::readXmlInt( noteNode, "length", -1, true ); float nPitch = LocalFileMng::readXmlFloat( noteNode, "pitch", 0.0, false, false ); QString sKey = LocalFileMng::readXmlString( noteNode, "key", "C0", false, false ); QString nNoteOff = LocalFileMng::readXmlString( noteNode, "note_off", "false", false, false ); int instrId = LocalFileMng::readXmlInt( noteNode, "instrument", 0, true ); Instrument *instrRef = instrList->find( instrId ); if ( !instrRef ) { ERRORLOG( QString( "Instrument with ID: '%1' not found. Note skipped." ).arg( instrId ) ); noteNode = noteNode.nextSiblingElement( "note" ); continue; } //assert( instrRef ); bool noteoff = false; if ( nNoteOff == "true" ) noteoff = true; pNote = new Note( instrRef, nPosition, fVelocity, fPan_L, fPan_R, nLength, nPitch); pNote->set_key_octave( sKey ); pNote->set_lead_lag(fLeadLag); pNote->set_note_off( noteoff ); pPattern->insert_note( pNote ); noteNode = noteNode.nextSiblingElement( "note" ); } } return pPattern; } int LocalFileMng::savePattern( Song *song , const QString& drumkit_name, int selectedpattern , const QString& patternname, const QString& realpatternname, int mode) { //int mode = 1 save, int mode = 2 save as // INSTRUMENT NODE Instrument *instr = song->get_instrument_list()->get( 0 ); assert( instr ); Pattern *pat = song->get_pattern_list()->get( selectedpattern ); QString sPatternDir = Preferences::get_instance()->getDataDirectory() + "patterns/" + drumkit_name; INFOLOG( "[savePattern]" + sPatternDir ); // check if the directory exists QDir dir( sPatternDir ); QDir dirPattern( sPatternDir ); if ( !dir.exists() ) { dir.mkdir( sPatternDir );// create the drumkit directory } QString sPatternXmlFilename; // create the drumkit.xml file switch ( mode ){ case 1: //save sPatternXmlFilename = sPatternDir + "/" + QString( patternname + QString( ".h2pattern" )); break; case 2: //save as sPatternXmlFilename = patternname; break; case 3: //"save" but overwrite a existing pattern. mode 3 disable the last file exist check sPatternXmlFilename = sPatternDir + "/" + QString( patternname + QString( ".h2pattern" )); break; case 4: //tmp pattern needed by undo/redo sPatternXmlFilename = patternname; default: WARNINGLOG( "Pattern Save unknown status"); break; } //test if the file exists QFile testfile( sPatternXmlFilename ); if ( testfile.exists() && mode == 1) return 1; QDomDocument doc; QDomProcessingInstruction header = doc.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\""); doc.appendChild( header ); QDomNode rootNode = doc.createElement( "drumkit_pattern" ); //LIB_ID just in work to get better usability //writeXmlString( &rootNode, "LIB_ID", "in_work" ); writeXmlString( rootNode, "pattern_for_drumkit", drumkit_name ); writeXmlString( rootNode, "author", song->get_author() ); writeXmlString( rootNode, "license", song->get_license() ); // pattern QDomNode patternNode = doc.createElement( "pattern" ); writeXmlString( patternNode, "pattern_name", realpatternname ); QString category; if ( pat->get_category().isEmpty() ) category = "No category"; else category = pat->get_category(); writeXmlString( patternNode, "info", pat->get_info() ); writeXmlString( patternNode, "category", category ); writeXmlString( patternNode, "size", QString("%1").arg( pat->get_length() ) ); QDomNode noteListNode = doc.createElement( "noteList" ); const Pattern::notes_t* notes = pat->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pNote = it->second; assert( pNote ); QDomNode noteNode = doc.createElement( "note" ); writeXmlString( noteNode, "position", QString("%1").arg( pNote->get_position() ) ); writeXmlString( noteNode, "leadlag", QString("%1").arg( pNote->get_lead_lag() ) ); writeXmlString( noteNode, "velocity", QString("%1").arg( pNote->get_velocity() ) ); writeXmlString( noteNode, "pan_L", QString("%1").arg( pNote->get_pan_l() ) ); writeXmlString( noteNode, "pan_R", QString("%1").arg( pNote->get_pan_r() ) ); writeXmlString( noteNode, "pitch", QString("%1").arg( pNote->get_pitch() ) ); writeXmlString( noteNode, "key", pNote->key_to_string() ); writeXmlString( noteNode, "length", QString("%1").arg( pNote->get_length() ) ); writeXmlString( noteNode, "instrument", QString("%1").arg( pNote->get_instrument()->get_id() ) ); noteListNode.appendChild( noteNode ); } patternNode.appendChild( noteListNode ); rootNode.appendChild( patternNode ); doc.appendChild( rootNode ); int rv = 0; QFile file( sPatternXmlFilename ); if ( !file.open(QIODevice::WriteOnly) ) rv = 1; QTextStream TextStream( &file ); doc.save( TextStream, 1 ); if( file.size() == 0) rv = 1; file.close(); QFile anotherTestfile( sPatternXmlFilename ); if ( !anotherTestfile.exists() ) rv = 1; return rv; // ok } void LocalFileMng::fileCopy( const QString& sOrigFilename, const QString& sDestFilename ) { // TODO: use QT copy functions INFOLOG( sOrigFilename + " --> " + sDestFilename ); if ( sOrigFilename == sDestFilename ) { return; } FILE *inputFile = fopen( sOrigFilename.toLocal8Bit(), "rb" ); if ( inputFile == NULL ) { ERRORLOG( "Error opening " + sOrigFilename ); return; } FILE *outputFile = fopen( sDestFilename.toLocal8Bit(), "wb" ); if ( outputFile == NULL ) { ERRORLOG( "Error opening " + sDestFilename ); return; } const int bufferSize = 512; char buffer[ bufferSize ]; while ( feof( inputFile ) == 0 ) { size_t read = fread( buffer, sizeof( char ), bufferSize, inputFile ); fwrite( buffer, sizeof( char ), read, outputFile ); } fclose( inputFile ); fclose( outputFile ); } std::vector LocalFileMng::getSongList() { std::vector list; QString sDirectory = Preferences::get_instance()->getDataDirectory(); if( ! sDirectory.endsWith("/") ) { sDirectory += "/songs/"; } else { sDirectory += "songs/"; } QDir dir( sDirectory ); if ( !dir.exists() ) { ERRORLOG( QString( "[getSongList] Directory %1 not found" ).arg( sDirectory ) ); } else { dir.setFilter( QDir::Files ); QFileInfoList fileList = dir.entryInfoList(); for ( int i = 0; i < fileList.size(); ++i ) { QString sFile = fileList.at( i ).fileName(); if ( ( sFile == "." ) || ( sFile == ".." ) || ( sFile == "CVS" ) || ( sFile == ".svn" ) ) { continue; } list.push_back( sFile.left( sFile.indexOf( "." ) ) ); } } return list; } int LocalFileMng::getPatternList( const QString& sPatternDir) { std::vector list; QDir dir( sPatternDir ); if ( !dir.exists() ) { ERRORLOG( QString( "[getPatternList] Directory %1 not found" ).arg( sPatternDir ) ); } else { dir.setFilter( QDir::Files ); QFileInfoList fileList = dir.entryInfoList(); for ( int i = 0; i < fileList.size(); ++i ) { QString sFile = sPatternDir + "/" + fileList.at( i ).fileName(); if( sFile.endsWith(".h2pattern") ){ list.push_back( sFile/*.left( sFile.indexOf( "." ) )*/ ); } } } mergeAllPatternList( list ); return 0; } /** * Return the names of all patterns in the soundlibrary. * \return A vector of QString elements which represent the pattern names. */ std::vector LocalFileMng::getAllPatternNames() { std::vector alllist; for (uint i = 0; i < m_allPatternList.size(); ++i) { QString patternInfoFile = m_allPatternList[i]; QDomDocument doc = LocalFileMng::openXmlDocument( patternInfoFile ); QDomNode rootNode = doc.firstChildElement( "drumkit_pattern" ); // root element if ( rootNode.isNull() ) { ERRORLOG( "Error reading Pattern: Pattern_drumkit_info node not found "); }else{ QDomNode patternNode = rootNode.firstChildElement( "pattern" ); QString sPatternName( LocalFileMng::readXmlString( patternNode,"pattern_name", "" ) ); alllist.push_back(sPatternName); } } return alllist; } /** * Generate a list of all used categories. This includes only patterns which are located in * hydrogens soundlibrary. * \return A vector of QString elements which represent the pattern categories. */ std::vector LocalFileMng::getAllCategoriesFromPattern() { Preferences *pPref = H2Core::Preferences::get_instance(); std::list::const_iterator cur_testpatternCategories; std::vector categorylist; for (uint i = 0; i < m_allPatternList.size(); ++i) { QString patternInfoFile = m_allPatternList[i]; QDomDocument doc = LocalFileMng::openXmlDocument( patternInfoFile ); QDomNode rootNode = doc.firstChildElement( "drumkit_pattern" ); // root element if ( rootNode.isNull() ) { ERRORLOG( "Error reading Pattern: Pattern_drumkit_info node not found "); }else{ QDomNode patternNode = rootNode.firstChildElement( "pattern" ); QString sCategoryName( LocalFileMng::readXmlString( patternNode,"category", "" ) ); if ( sCategoryName.isEmpty() ){ sCategoryName = "No category"; } bool test = true; for (uint i = 0; i < categorylist.size(); ++i){ if ( sCategoryName == categorylist[i] ){ test = false; } } if (test == true){ categorylist.push_back( sCategoryName ); //this merge new categories to user categories list bool test2 = true; for( cur_testpatternCategories = pPref->m_patternCategories.begin(); cur_testpatternCategories != pPref->m_patternCategories.end(); ++cur_testpatternCategories ){ if ( sCategoryName == *cur_testpatternCategories ){ test2 = false; } } if (test2 == true ) { pPref->m_patternCategories.push_back( sCategoryName ); } } } } std::sort(categorylist.begin(), categorylist.end()); return categorylist; } /** * Generate a list of all patterns for a given drumkit * \param sDrumkit the name of drumkit * \return A vector of QString elements which represent the pattern names. */ std::vector LocalFileMng::getPatternsForDrumkit( const QString& sDrumkit ) { std::vector list; QDir dir( Preferences::get_instance()->getDataDirectory() + "/patterns/" + sDrumkit ); if ( !dir.exists() ) { INFOLOG( QString( "No patterns for drumkit '%1'." ).arg( sDrumkit ) ); } else { dir.setFilter( QDir::Dirs ); QFileInfoList fileList = dir.entryInfoList(); for ( int i = 0; i < fileList.size(); ++i ) { QString sFile = fileList.at( i ).fileName(); if ( ( sFile == "." ) || ( sFile == ".." ) || ( sFile == "CVS" ) || ( sFile == ".svn" ) ) { continue; } list.push_back( sFile.left( sFile.indexOf( "." ) ) ); } } return list; } /** * Return a list of drumkits that are located inside a directory. * \param sDirectory The directory where the method looks for drumkits * \return A vector of QString elements which represent the drumkits. */ std::vector LocalFileMng::getDrumkitsFromDirectory( QString sDirectory ) { std::vector list; QDir dir( sDirectory ); if ( !dir.exists() ) { ERRORLOG( QString( "[getDrumkitList] Directory %1 not found" ).arg( sDirectory ) ); } else { dir.setFilter( QDir::Dirs ); QFileInfoList fileList = dir.entryInfoList(); for ( int i = 0; i < fileList.size(); ++i ) { QString sFile = fileList.at( i ).fileName(); if ( ( sFile == "." ) || ( sFile == ".." ) || ( sFile == "CVS" ) || ( sFile == ".svn" ) || (sFile =="songs" ) || ( sFile == "patterns" ) || (sFile == "drumkits" || sFile == "playlists" ) || (sFile == "scripts" )) { continue; } if(! sDirectory.endsWith("/")) sDirectory = sDirectory + "/"; list.push_back( sDirectory + sFile ); } } return list; } /** * Merge two vectors of QStrings. * \param firstVector The first vector. * \param secondVector The second vector. * \return The resulting vector which is a union of firstVector and secondVector. */ std::vector mergeQStringVectors( std::vector firstVector , std::vector secondVector ) { if( firstVector.size() == 0 ) return secondVector; if( secondVector.size() == 0 ) return firstVector; std::vector newVector; newVector = firstVector; newVector.resize(firstVector.size()+ secondVector.size()); for ( int i = 0; i < (int)secondVector.size(); ++i ) { QString toFind = secondVector[i]; for ( int ii = 0; ii < (int)firstVector.size(); ++ii ) { if( toFind == firstVector[ii]) { //the String already exists in firstVector, don't copy it to the resulting vector break; } } newVector[firstVector.size() + i] = toFind; } return newVector; } /** * Return a list of directories that may contain patterns * \return A vector of QString elements which represent the directory names. */ std::vector LocalFileMng::getPatternDirList() { return getDrumkitsFromDirectory( Preferences::get_instance()->getDataDirectory() + "patterns" ); } int LocalFileMng::mergeAllPatternList( std::vector current ) { m_allPatternList = mergeQStringVectors (m_allPatternList, current ); return 0; } /** * Save the currently loaded playlist to disk. * \param playlist_name The filename of the output file. * \return Returns an Errorcode. */ int LocalFileMng::savePlayList( const std::string& filename) { std::string name = filename.c_str(); std::string realname = name.substr(name.rfind("/")+1); QDomDocument doc; QDomProcessingInstruction header = doc.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\""); doc.appendChild( header ); QDomNode rootNode = doc.createElement( "playlist" ); writeXmlString( rootNode, "Name", QString (realname.c_str()) ); QDomNode playlistNode = doc.createElement( "Songs" ); for ( uint i = 0; i < Hydrogen::get_instance()->m_PlayList.size(); ++i ){ QDomNode nextNode = doc.createElement( "next" ); LocalFileMng::writeXmlString ( nextNode, "song", Hydrogen::get_instance()->m_PlayList[i].m_hFile ); LocalFileMng::writeXmlString ( nextNode, "script", Hydrogen::get_instance()->m_PlayList[i].m_hScript ); LocalFileMng::writeXmlString ( nextNode, "enabled", Hydrogen::get_instance()->m_PlayList[i].m_hScriptEnabled ); playlistNode.appendChild( nextNode ); } rootNode.appendChild( playlistNode ); doc.appendChild( rootNode ); int rv = 0; QFile file( filename.c_str() ); if ( !file.open(QIODevice::WriteOnly) ) rv = 1; QTextStream TextStream( &file ); doc.save( TextStream, 1 ); if( file.size() == 0) rv = 1; file.close(); return rv; // ok } /** * Load a playlist from disk. * \param filename The name of the playlist to be saved. * \return Returns an Errorcode. */ int LocalFileMng::loadPlayList( const std::string& filename) { std::string playlistInfoFile = filename; std::ifstream verify( playlistInfoFile.c_str() , std::ios::in | std::ios::binary ); if ( verify == NULL ) { return 1; } QDomDocument doc = LocalFileMng::openXmlDocument( QString( filename.c_str() ) ); Hydrogen::get_instance()->m_PlayList.clear(); QDomNode rootNode = doc.firstChildElement( "playlist" ); // root element if ( rootNode.isNull() ) { ERRORLOG( "Error reading playlist: playlist node not found" ); return 1; } QDomNode playlistNode = rootNode.firstChildElement( "Songs" ); if ( ! playlistNode.isNull() ) { Hydrogen::get_instance()->m_PlayList.clear(); QDomNode nextNode = playlistNode.firstChildElement( "next" ); while ( ! nextNode.isNull() ) { Hydrogen::HPlayListNode playListItem; playListItem.m_hFile = LocalFileMng::readXmlString( nextNode, "song", "" ); playListItem.m_hScript = LocalFileMng::readXmlString( nextNode, "script", "" ); playListItem.m_hScriptEnabled = LocalFileMng::readXmlString( nextNode, "enabled", "" ); Hydrogen::get_instance()->m_PlayList.push_back( playListItem ); nextNode = nextNode.nextSiblingElement( "next" ); } } return 0; // ok } /* New QtXml based methods */ QString LocalFileMng::readXmlString( QDomNode node , const QString& nodeName, const QString& defaultValue, bool bCanBeEmpty, bool bShouldExists, bool tinyXmlCompatMode) { QDomElement element = node.firstChildElement( nodeName ); if( !node.isNull() && !element.isNull() ){ if( !element.text().isEmpty() ){ return element.text(); } else { if ( !bCanBeEmpty ) { _WARNINGLOG( "Using default value in " + nodeName ); } return defaultValue; } } else { if( bShouldExists ){ _WARNINGLOG( "'" + nodeName + "' node not found" ); } return defaultValue; } } float LocalFileMng::readXmlFloat( QDomNode node , const QString& nodeName, float defaultValue, bool bCanBeEmpty, bool bShouldExists, bool tinyXmlCompatMode) { QLocale c_locale = QLocale::c(); QDomElement element = node.firstChildElement( nodeName ); if( !node.isNull() && !element.isNull() ){ if( !element.text().isEmpty() ){ return c_locale.toFloat(element.text()); } else { if ( !bCanBeEmpty ) { _WARNINGLOG( "Using default value in " + nodeName ); } return defaultValue; } } else { if( bShouldExists ){ _WARNINGLOG( "'" + nodeName + "' node not found" ); } return defaultValue; } } int LocalFileMng::readXmlInt( QDomNode node , const QString& nodeName, int defaultValue, bool bCanBeEmpty, bool bShouldExists, bool tinyXmlCompatMode) { QLocale c_locale = QLocale::c(); QDomElement element = node.firstChildElement( nodeName ); if( !node.isNull() && !element.isNull() ){ if( !element.text().isEmpty() ){ return c_locale.toInt( element.text() ); } else { if ( !bCanBeEmpty ) { _WARNINGLOG( "Using default value in " + nodeName ); } return defaultValue; } } else { if( bShouldExists ){ _WARNINGLOG( "'" + nodeName + "' node not found" ); } return defaultValue; } } bool LocalFileMng::readXmlBool( QDomNode node , const QString& nodeName, bool defaultValue, bool bShouldExists, bool tinyXmlCompatMode) { QDomElement element = node.firstChildElement( nodeName ); if( !node.isNull() && !element.isNull() ){ if( !element.text().isEmpty() ){ if( element.text() == "true"){ return true; } else { return false; } } else { _WARNINGLOG( "Using default value in " + nodeName ); return defaultValue; } } else { if( bShouldExists ){ _WARNINGLOG( "'" + nodeName + "' node not found" ); } return defaultValue; } } void LocalFileMng::writeXmlString( QDomNode parent, const QString& name, const QString& text ) { QDomDocument doc; QDomElement elem = doc.createElement( name ); QDomText t = doc.createTextNode( text ); elem.appendChild( t ); parent.appendChild( elem ); } void LocalFileMng::writeXmlBool( QDomNode parent, const QString& name, bool value ) { if ( value ) { writeXmlString( parent, name, QString( "true" ) ); } else { writeXmlString( parent, name, QString( "false" ) ); } } /* Convert (in-place) an XML escape sequence into a literal byte, * rather than the character it actually refers to. */ void LocalFileMng::convertFromTinyXMLString( QByteArray* str ) { /* When TinyXML encountered a non-ASCII character, it would * simply write the character as "&#xx;" -- where "xx" is * the hex character code. However, this doesn't respect * any encodings (e.g. UTF-8, UTF-16). In XML, &#xx; literally * means "the Unicode character # xx." However, in a UTF-8 * sequence, this could be an escape character that tells * whether we have a 2, 3, or 4-byte UTF-8 sequence. * * For example, the UTF-8 sequence 0xD184 was being written * by TinyXML as "Ñ„". However, this is the UTF-8 * sequence for the cyrillic small letter EF (which looks * kind of like a thorn or a greek phi). This letter, in * XML, should be saved as ф, or even literally * (no escaping). As a consequence, when Ñ is read * by an XML parser, it will be interpreted as capital N * with a tilde (~). Then „ will be interpreted as * an unknown or control character. * * So, when we know that TinyXML wrote the file, we can * simply exchange these hex sequences to literal bytes. */ int pos = 0; pos = str->indexOf("&#x"); while( pos != -1 ) { if( isxdigit(str->at(pos+3)) && isxdigit(str->at(pos+4)) && (str->at(pos+5) == ';') ) { char w1 = str->at(pos+3); char w2 = str->at(pos+4); w1 = tolower(w1) - 0x30; // '0' = 0x30 if( w1 > 9 ) w1 -= 0x27; // '9' = 0x39, 'a' = 0x61 w1 = (w1 & 0xF); w2 = tolower(w2) - 0x30; // '0' = 0x30 if( w2 > 9 ) w2 -= 0x27; // '9' = 0x39, 'a' = 0x61 w2 = (w2 & 0xF); char ch = (w1 << 4) | w2; (*str)[pos] = ch; ++pos; str->remove(pos, 5); } pos = str->indexOf("&#x"); } } bool LocalFileMng::checkTinyXMLCompatMode( const QString& filename ) { /* Check if filename was created with TinyXml or QtXml TinyXML: return true QtXml: return false */ QFile file( filename ); if ( !file.open(QIODevice::ReadOnly) ) return false; QString line = file.readLine(); file.close(); if ( line.startsWith( "name(); if( enc == QString("System") ) { enc = "UTF-8"; } QByteArray line; QByteArray buf = QString("\n") .arg( enc ) .toLocal8Bit(); while( !file.atEnd() ) { line = file.readLine(); LocalFileMng::convertFromTinyXMLString( &line ); buf += line; } if( ! doc.setContent( buf ) ) { file.close(); return QDomDocument(); } } else { if( ! doc.setContent( &file ) ) { file.close(); return QDomDocument(); } } file.close(); return doc; } int LocalFileMng::writeTempPatternList(Song *song, const QString& filename) { QDomDocument doc; QDomProcessingInstruction header = doc.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\""); doc.appendChild( header ); QDomNode tempPatternListNode = doc.createElement( "tempPatternList" ); unsigned nPatterns = song->get_pattern_list()->size(); QDomNode virtualPatternListNode = doc.createElement( "virtualPatternList" ); for ( unsigned i = 0; i < nPatterns; i++ ) { Pattern *pat = song->get_pattern_list()->get( i ); // pattern if (pat->get_virtual_patterns()->empty() == false) { QDomNode patternNode = doc.createElement( "pattern" ); LocalFileMng::writeXmlString( patternNode, "name", pat->get_name() ); for (Pattern::virtual_patterns_it_t virtIter = pat->get_virtual_patterns()->begin(); virtIter != pat->get_virtual_patterns()->end(); ++virtIter) { LocalFileMng::writeXmlString( patternNode, "virtual", (*virtIter)->get_name() ); }//for virtualPatternListNode.appendChild( patternNode ); }//if }//for tempPatternListNode.appendChild(virtualPatternListNode); // pattern sequence QDomNode patternSequenceNode = doc.createElement( "patternSequence" ); unsigned nPatternGroups = song->get_pattern_group_vector()->size(); for ( unsigned i = 0; i < nPatternGroups; i++ ) { QDomNode groupNode = doc.createElement( "group" ); PatternList *pList = ( *song->get_pattern_group_vector() )[i]; for ( unsigned j = 0; j < pList->size(); j++ ) { Pattern *pPattern = pList->get( j ); LocalFileMng::writeXmlString( groupNode, "patternID", pPattern->get_name() ); } patternSequenceNode.appendChild( groupNode ); } tempPatternListNode.appendChild( patternSequenceNode ); doc.appendChild(tempPatternListNode); QFile file(filename); if ( !file.open(QIODevice::WriteOnly) ) return 0; QTextStream TextStream( &file ); doc.save( TextStream, 1 ); file.close(); return 0; // ok } //----------------------------------------------------------------------------- // Implementation of SongWriter class //----------------------------------------------------------------------------- const char* SongWriter::__class_name = "SongWriter"; SongWriter::SongWriter() : Object( __class_name ) { // infoLog("init"); } SongWriter::~SongWriter() { // infoLog("destroy"); } /* * This methods decides if a filename should be stored * with a relative path or with an absolute path. * Files are getting stored with a relative path if the * file relates to a valid drumkit which is stored either * in the user directory or in the system directory. * Otherwise, the file is stored with an absolute path. * A relative path is relative to the drumkit dir. */ QString prepare_filename( QString fname) { if( Filesystem::file_is_partof_drumkit( fname ) ){ if( fname.startsWith( Filesystem::usr_drumkits_dir() ) ) { fname.remove( 0, Filesystem::usr_drumkits_dir().size() + 1 ); return fname.remove( 0, fname.indexOf(("/")) ); } if( fname.startsWith( Filesystem::sys_drumkits_dir() ) ) { fname.remove( 0, Filesystem::sys_drumkits_dir().size() + 1 ); return fname.remove( 0, fname.indexOf(("/")) ); } } return fname; } // Returns 0 on success, passes the TinyXml error code otherwise. int SongWriter::writeSong( Song *song, const QString& filename ) { INFOLOG( "Saving song " + filename ); int rv = 0; // return value // FIXME: has the file write-permssion? // FIXME: verificare che il file non sia gia' esistente // FIXME: effettuare copia di backup per il file gia' esistente QDomDocument doc; QDomProcessingInstruction header = doc.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\""); doc.appendChild( header ); QDomNode songNode = doc.createElement( "song" ); LocalFileMng::writeXmlString( songNode, "version", QString( get_version().c_str() ) ); LocalFileMng::writeXmlString( songNode, "bpm", QString("%1").arg( song->__bpm ) ); LocalFileMng::writeXmlString( songNode, "volume", QString("%1").arg( song->get_volume() ) ); LocalFileMng::writeXmlString( songNode, "metronomeVolume", QString("%1").arg( song->get_metronome_volume() ) ); LocalFileMng::writeXmlString( songNode, "name", song->__name ); LocalFileMng::writeXmlString( songNode, "author", song->__author ); LocalFileMng::writeXmlString( songNode, "notes", song->get_notes() ); LocalFileMng::writeXmlString( songNode, "license", song->get_license() ); LocalFileMng::writeXmlBool( songNode, "loopEnabled", song->is_loop_enabled() ); LocalFileMng::writeXmlBool( songNode, "patternModeMode", Preferences::get_instance()->patternModePlaysSelected()); if ( song->get_mode() == Song::SONG_MODE ) { LocalFileMng::writeXmlString( songNode, "mode", QString( "song" ) ); } else { LocalFileMng::writeXmlString( songNode, "mode", QString( "pattern" ) ); } LocalFileMng::writeXmlString( songNode, "humanize_time", QString("%1").arg( song->get_humanize_time_value() ) ); LocalFileMng::writeXmlString( songNode, "humanize_velocity", QString("%1").arg( song->get_humanize_velocity_value() ) ); LocalFileMng::writeXmlString( songNode, "swing_factor", QString("%1").arg( song->get_swing_factor() ) ); // instrument list QDomNode instrumentListNode = doc.createElement( "instrumentList" ); unsigned nInstrument = song->get_instrument_list()->size(); // INSTRUMENT NODE for ( unsigned i = 0; i < nInstrument; i++ ) { Instrument *instr = song->get_instrument_list()->get( i ); assert( instr ); QDomNode instrumentNode = doc.createElement( "instrument" ); LocalFileMng::writeXmlString( instrumentNode, "id", QString("%1").arg( instr->get_id() ) ); LocalFileMng::writeXmlString( instrumentNode, "name", instr->get_name() ); LocalFileMng::writeXmlString( instrumentNode, "drumkit", instr->get_drumkit_name() ); LocalFileMng::writeXmlString( instrumentNode, "volume", QString("%1").arg( instr->get_volume() ) ); LocalFileMng::writeXmlBool( instrumentNode, "isMuted", instr->is_muted() ); LocalFileMng::writeXmlString( instrumentNode, "pan_L", QString("%1").arg( instr->get_pan_l() ) ); LocalFileMng::writeXmlString( instrumentNode, "pan_R", QString("%1").arg( instr->get_pan_r() ) ); LocalFileMng::writeXmlString( instrumentNode, "gain", QString("%1").arg( instr->get_gain() ) ); LocalFileMng::writeXmlBool( instrumentNode, "filterActive", instr->is_filter_active() ); LocalFileMng::writeXmlString( instrumentNode, "filterCutoff", QString("%1").arg( instr->get_filter_cutoff() ) ); LocalFileMng::writeXmlString( instrumentNode, "filterResonance", QString("%1").arg( instr->get_filter_resonance() ) ); LocalFileMng::writeXmlString( instrumentNode, "FX1Level", QString("%1").arg( instr->get_fx_level( 0 ) ) ); LocalFileMng::writeXmlString( instrumentNode, "FX2Level", QString("%1").arg( instr->get_fx_level( 1 ) ) ); LocalFileMng::writeXmlString( instrumentNode, "FX3Level", QString("%1").arg( instr->get_fx_level( 2 ) ) ); LocalFileMng::writeXmlString( instrumentNode, "FX4Level", QString("%1").arg( instr->get_fx_level( 3 ) ) ); assert( instr->get_adsr() ); LocalFileMng::writeXmlString( instrumentNode, "Attack", QString("%1").arg( instr->get_adsr()->get_attack() ) ); LocalFileMng::writeXmlString( instrumentNode, "Decay", QString("%1").arg( instr->get_adsr()->get_decay() ) ); LocalFileMng::writeXmlString( instrumentNode, "Sustain", QString("%1").arg( instr->get_adsr()->get_sustain() ) ); LocalFileMng::writeXmlString( instrumentNode, "Release", QString("%1").arg( instr->get_adsr()->get_release() ) ); LocalFileMng::writeXmlString( instrumentNode, "randomPitchFactor", QString("%1").arg( instr->get_random_pitch_factor() ) ); LocalFileMng::writeXmlString( instrumentNode, "muteGroup", QString("%1").arg( instr->get_mute_group() ) ); LocalFileMng::writeXmlBool( instrumentNode, "isStopNote", instr->is_stop_notes() ); LocalFileMng::writeXmlString( instrumentNode, "midiOutChannel", QString("%1").arg( instr->get_midi_out_channel() ) ); LocalFileMng::writeXmlString( instrumentNode, "midiOutNote", QString("%1").arg( instr->get_midi_out_note() ) ); for ( unsigned nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { InstrumentLayer *pLayer = instr->get_layer( nLayer ); if ( pLayer == NULL ) continue; Sample *pSample = pLayer->get_sample(); if ( pSample == NULL ) continue; bool sIsModified = pSample->get_is_modified(); Sample::Loops lo = pSample->get_loops(); Sample::Rubberband ro = pSample->get_rubberband(); QString sMode = pSample->get_loop_mode_string(); QDomNode layerNode = doc.createElement( "layer" ); LocalFileMng::writeXmlString( layerNode, "filename", prepare_filename( pSample->get_filepath() ) ); LocalFileMng::writeXmlBool( layerNode, "ismodified", sIsModified); LocalFileMng::writeXmlString( layerNode, "smode", pSample->get_loop_mode_string() ); LocalFileMng::writeXmlString( layerNode, "startframe", QString("%1").arg( lo.start_frame ) ); LocalFileMng::writeXmlString( layerNode, "loopframe", QString("%1").arg( lo.loop_frame ) ); LocalFileMng::writeXmlString( layerNode, "loops", QString("%1").arg( lo.count ) ); LocalFileMng::writeXmlString( layerNode, "endframe", QString("%1").arg( lo.end_frame ) ); LocalFileMng::writeXmlString( layerNode, "userubber", QString("%1").arg( ro.use ) ); LocalFileMng::writeXmlString( layerNode, "rubberdivider", QString("%1").arg( ro.divider ) ); LocalFileMng::writeXmlString( layerNode, "rubberCsettings", QString("%1").arg( ro.c_settings ) ); LocalFileMng::writeXmlString( layerNode, "rubberPitch", QString("%1").arg( ro.pitch ) ); LocalFileMng::writeXmlString( layerNode, "min", QString("%1").arg( pLayer->get_start_velocity() ) ); LocalFileMng::writeXmlString( layerNode, "max", QString("%1").arg( pLayer->get_end_velocity() ) ); LocalFileMng::writeXmlString( layerNode, "gain", QString("%1").arg( pLayer->get_gain() ) ); LocalFileMng::writeXmlString( layerNode, "pitch", QString("%1").arg( pLayer->get_pitch() ) ); Sample::VelocityEnvelope* velocity = pSample->get_velocity_envelope(); for (int y = 0; y < velocity->size(); y++){ QDomNode volumeNode = doc.createElement( "volume" ); LocalFileMng::writeXmlString( volumeNode, "volume-position", QString("%1").arg( velocity->at(y).frame ) ); LocalFileMng::writeXmlString( volumeNode, "volume-value", QString("%1").arg( velocity->at(y).value ) ); layerNode.appendChild( volumeNode ); } Sample::PanEnvelope* pan = pSample->get_pan_envelope(); for (int y = 0; y < pan->size(); y++){ QDomNode panNode = doc.createElement( "pan" ); LocalFileMng::writeXmlString( panNode, "pan-position", QString("%1").arg( pan->at(y).frame ) ); LocalFileMng::writeXmlString( panNode, "pan-value", QString("%1").arg( pan->at(y).value ) ); layerNode.appendChild( panNode ); } instrumentNode.appendChild( layerNode ); } instrumentListNode.appendChild( instrumentNode ); } songNode.appendChild( instrumentListNode ); // pattern list QDomNode patternListNode = doc.createElement( "patternList" ); unsigned nPatterns = song->get_pattern_list()->size(); for ( unsigned i = 0; i < nPatterns; i++ ) { Pattern *pat = song->get_pattern_list()->get( i ); // pattern QDomNode patternNode = doc.createElement( "pattern" ); LocalFileMng::writeXmlString( patternNode, "name", pat->get_name() ); LocalFileMng::writeXmlString( patternNode, "category", pat->get_category() ); LocalFileMng::writeXmlString( patternNode, "size", QString("%1").arg( pat->get_length() ) ); QDomNode noteListNode = doc.createElement( "noteList" ); const Pattern::notes_t* notes = pat->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pNote = it->second; assert( pNote ); QDomNode noteNode = doc.createElement( "note" ); LocalFileMng::writeXmlString( noteNode, "position", QString("%1").arg( pNote->get_position() ) ); LocalFileMng::writeXmlString( noteNode, "leadlag", QString("%1").arg( pNote->get_lead_lag() ) ); LocalFileMng::writeXmlString( noteNode, "velocity", QString("%1").arg( pNote->get_velocity() ) ); LocalFileMng::writeXmlString( noteNode, "pan_L", QString("%1").arg( pNote->get_pan_l() ) ); LocalFileMng::writeXmlString( noteNode, "pan_R", QString("%1").arg( pNote->get_pan_r() ) ); LocalFileMng::writeXmlString( noteNode, "pitch", QString("%1").arg( pNote->get_pitch() ) ); LocalFileMng::writeXmlString( noteNode, "key", pNote->key_to_string() ); LocalFileMng::writeXmlString( noteNode, "length", QString("%1").arg( pNote->get_length() ) ); LocalFileMng::writeXmlString( noteNode, "instrument", QString("%1").arg( pNote->get_instrument()->get_id() ) ); QString noteoff = "false"; if ( pNote->get_note_off() ) noteoff = "true"; LocalFileMng::writeXmlString( noteNode, "note_off", noteoff ); noteListNode.appendChild( noteNode ); } patternNode.appendChild( noteListNode ); patternListNode.appendChild( patternNode ); } songNode.appendChild( patternListNode ); QDomNode virtualPatternListNode = doc.createElement( "virtualPatternList" ); for ( unsigned i = 0; i < nPatterns; i++ ) { Pattern *pat = song->get_pattern_list()->get( i ); // pattern if (pat->get_virtual_patterns()->empty() == false) { QDomNode patternNode = doc.createElement( "pattern" ); LocalFileMng::writeXmlString( patternNode, "name", pat->get_name() ); for (Pattern::virtual_patterns_it_t virtIter = pat->get_virtual_patterns()->begin(); virtIter != pat->get_virtual_patterns()->end(); ++virtIter) { LocalFileMng::writeXmlString( patternNode, "virtual", (*virtIter)->get_name() ); }//for virtualPatternListNode.appendChild( patternNode ); }//if }//for songNode.appendChild(virtualPatternListNode); // pattern sequence QDomNode patternSequenceNode = doc.createElement( "patternSequence" ); unsigned nPatternGroups = song->get_pattern_group_vector()->size(); for ( unsigned i = 0; i < nPatternGroups; i++ ) { QDomNode groupNode = doc.createElement( "group" ); PatternList *pList = ( *song->get_pattern_group_vector() )[i]; for ( unsigned j = 0; j < pList->size(); j++ ) { Pattern *pPattern = pList->get( j ); LocalFileMng::writeXmlString( groupNode, "patternID", pPattern->get_name() ); } patternSequenceNode.appendChild( groupNode ); } songNode.appendChild( patternSequenceNode ); // LADSPA FX QDomNode ladspaFxNode = doc.createElement( "ladspa" ); for ( unsigned nFX = 0; nFX < MAX_FX; nFX++ ) { QDomNode fxNode = doc.createElement( "fx" ); #ifdef H2CORE_HAVE_LADSPA LadspaFX *pFX = Effects::get_instance()->getLadspaFX( nFX ); if ( pFX ) { LocalFileMng::writeXmlString( fxNode, "name", pFX->getPluginLabel() ); LocalFileMng::writeXmlString( fxNode, "filename", pFX->getLibraryPath() ); LocalFileMng::writeXmlBool( fxNode, "enabled", pFX->isEnabled() ); LocalFileMng::writeXmlString( fxNode, "volume", QString("%1").arg( pFX->getVolume() ) ); for ( unsigned nControl = 0; nControl < pFX->inputControlPorts.size(); nControl++ ) { LadspaControlPort *pControlPort = pFX->inputControlPorts[ nControl ]; QDomNode controlPortNode = doc.createElement( "inputControlPort" ); LocalFileMng::writeXmlString( controlPortNode, "name", pControlPort->sName ); LocalFileMng::writeXmlString( controlPortNode, "value", QString("%1").arg( pControlPort->fControlValue ) ); fxNode.appendChild( controlPortNode ); } for ( unsigned nControl = 0; nControl < pFX->outputControlPorts.size(); nControl++ ) { LadspaControlPort *pControlPort = pFX->inputControlPorts[ nControl ]; QDomNode controlPortNode = doc.createElement( "outputControlPort" ); LocalFileMng::writeXmlString( controlPortNode, "name", pControlPort->sName ); LocalFileMng::writeXmlString( controlPortNode, "value", QString("%1").arg( pControlPort->fControlValue ) ); fxNode.appendChild( controlPortNode ); } } #else if ( false ) { } #endif else { LocalFileMng::writeXmlString( fxNode, "name", QString( "no plugin" ) ); LocalFileMng::writeXmlString( fxNode, "filename", QString( "-" ) ); LocalFileMng::writeXmlBool( fxNode, "enabled", false ); LocalFileMng::writeXmlString( fxNode, "volume", "0.0" ); } ladspaFxNode.appendChild( fxNode ); } songNode.appendChild( ladspaFxNode ); doc.appendChild( songNode ); //bpm time line QDomNode bpmTimeLine = doc.createElement( "BPMTimeLine" ); if(Hydrogen::get_instance()->m_timelinevector.size() >= 1 ){ for ( int t = 0; t < static_cast(Hydrogen::get_instance()->m_timelinevector.size()); t++){ QDomNode newBPMNode = doc.createElement( "newBPM" ); LocalFileMng::writeXmlString( newBPMNode, "BAR",QString("%1").arg( Hydrogen::get_instance()->m_timelinevector[t].m_htimelinebeat )); LocalFileMng::writeXmlString( newBPMNode, "BPM", QString("%1").arg( Hydrogen::get_instance()->m_timelinevector[t].m_htimelinebpm ) ); bpmTimeLine.appendChild( newBPMNode ); } } songNode.appendChild( bpmTimeLine ); //time line tag QDomNode timeLineTag = doc.createElement( "timeLineTag" ); if(Hydrogen::get_instance()->m_timelinetagvector.size() >= 1 ){ for ( int t = 0; t < static_cast(Hydrogen::get_instance()->m_timelinetagvector.size()); t++){ QDomNode newTAGNode = doc.createElement( "newTAG" ); LocalFileMng::writeXmlString( newTAGNode, "BAR",QString("%1").arg( Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetagbeat )); LocalFileMng::writeXmlString( newTAGNode, "TAG", QString("%1").arg( Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetag ) ); timeLineTag.appendChild( newTAGNode ); } } songNode.appendChild( timeLineTag ); QFile file(filename); if ( !file.open(QIODevice::WriteOnly) ) rv = 1; QTextStream TextStream( &file ); doc.save( TextStream, 1 ); if( file.size() == 0) rv = 1; file.close(); if( rv ) { WARNINGLOG("File save reported an error."); } else { song->__is_modified = false; INFOLOG("Save was successful."); } song->set_filename( filename ); return rv; } }; hydrogen-0.9.6-beta3/src/core/src/logger.cpp000066400000000000000000000135651211146647700206550ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "hydrogen/logger.h" #include #include #include #ifdef WIN32 #include #define LOGGER_SLEEP Sleep( 100 ) #else #include #define LOGGER_SLEEP usleep( 1000000 ) #endif namespace H2Core { unsigned Logger::__bit_msk = 0; Logger* Logger::__instance=0; const char* Logger::__levels[] = { "None", "Error", "Warning", "Info", "Debug" }; pthread_t loggerThread; void* loggerThread_func( void* param ) { if ( param == 0 ) return 0; Logger* logger = ( Logger* )param; #ifdef WIN32 ::AllocConsole(); // ::SetConsoleTitle( "Hydrogen debug log" ); freopen( "CONOUT$", "wt", stdout ); #endif FILE* log_file = 0; if ( logger->__use_file ) { #ifdef Q_OS_MACX QString sLogFilename = QDir::homePath().append( "/Library/Hydrogen/hydrogen.log" ); #else QString sLogFilename = QDir::homePath().append( "/.hydrogen/hydrogen.log" ); #endif log_file = fopen( sLogFilename.toLocal8Bit(), "w" ); if ( log_file ) { fprintf( log_file, "Start logger" ); } else { fprintf( stderr, "Error: can't open log file for writing...\n" ); } } Logger::queue_t* queue = &logger->__msg_queue; Logger::queue_t::iterator it, last; //QString tmpString; while ( logger->__running ) { LOGGER_SLEEP; if( !queue->empty() ) { for( it = last = queue->begin() ; it != queue->end() ; ++it ) { last = it; fprintf( stdout, "%s", it->toLocal8Bit().data() ); if( log_file ) { fprintf( log_file, "%s", it->toLocal8Bit().data() ); fflush( log_file ); } } // remove all in front of last queue->erase( queue->begin(), last ); // lock before removing last pthread_mutex_lock( &logger->__mutex ); queue->pop_front(); pthread_mutex_unlock( &logger->__mutex ); } } if ( log_file ) { fprintf( log_file, "Stop logger" ); fclose( log_file ); } #ifdef WIN32 ::FreeConsole(); #endif LOGGER_SLEEP; pthread_exit( 0 ); return 0; } Logger* Logger::bootstrap( unsigned msk ) { Logger::set_bit_mask( msk ); return Logger::create_instance(); } Logger* Logger::create_instance() { if ( __instance == 0 ) __instance = new Logger; return __instance; } Logger::Logger() : __use_file( false ), __running( true ) { __instance = this; pthread_attr_t attr; pthread_attr_init( &attr ); pthread_mutex_init( &__mutex, 0 ); pthread_create( &loggerThread, &attr, loggerThread_func, this ); } Logger::~Logger() { __running = false; pthread_join( loggerThread, 0 ); } void Logger::log( unsigned level, const QString& class_name, const char* func_name, const QString& msg ) { if( level == None ) return; const char* prefix[] = { "", "(E) ", "(W) ", "(I) ", "(D) " }; #ifdef WIN32 const char* color[] = { "", "", "", "", "" }; #else const char* color[] = { "", "\033[31m", "\033[36m", "\033[32m", "\033[35m" }; #endif // WIN32 int i; switch( level ) { case None: assert( false ); i = 0; break; case Error: i = 1; break; case Warning: i = 2; break; case Info: i = 3; break; case Debug: i = 4; break; default: i = 0; break; } QString tmp = QString( "%1%2%3::%4 %5\033[0m\n" ) .arg( color[i] ) .arg( prefix[i] ) .arg( class_name ) .arg( func_name ) .arg( msg ); pthread_mutex_lock( &__mutex ); __msg_queue.push_back( tmp ); pthread_mutex_unlock( &__mutex ); } unsigned Logger::parse_log_level( const char* level ) { unsigned log_level; if( 0 == strncasecmp( level, __levels[0], sizeof( __levels[0] ) ) ) { log_level = Logger::None; } else if ( 0 == strncasecmp( level, __levels[1], sizeof( __levels[1] ) ) ) { log_level = Logger::Error; } else if ( 0 == strncasecmp( level, __levels[2], sizeof( __levels[2] ) ) ) { log_level = Logger::Error | Logger::Warning; } else if ( 0 == strncasecmp( level, __levels[3], sizeof( __levels[3] ) ) ) { log_level = Logger::Error | Logger::Warning | Logger::Info; } else if ( 0 == strncasecmp( level, __levels[4], sizeof( __levels[4] ) ) ) { log_level = Logger::Error | Logger::Warning | Logger::Info | Logger::Debug; } else { #ifdef HAVE_SSCANF int val = sscanf( level,"%x",&log_level ); if( val != 1 ) { log_level = Logger::Error; } #else int log_level = hextoi( level, -1 ); if( log_level==-1 ) { log_level = Logger::Error; } #endif } return log_level; } #ifndef HAVE_SSCANF int Logger::hextoi( const char* str, long len ) { long pos = 0; char c = 0; int v = 0; int res = 0; bool leading_zero = false; while( 1 ) { if( ( len!=-1 ) && ( pos>=len ) ) { break; } c = str[pos]; if( c==0 ) { break; } else if( c=='x' || c=='X' ) { if ( ( pos==1 ) && leading_zero ) { assert( res == 0 ); pos++; continue; } else { return -1; } } else if( c>='a' ) { v = c-'a'+10; } else if( c>='A' ) { v = c-'A'+10; } else if( c>='0' ) { if ( ( c=='0' ) && ( pos==0 ) ) { leading_zero = true; } v = c-'0'; } else { return -1; } if( v>15 ) { return -1; } //assert( v == (v & 0xF) ); res = ( res << 4 ) | v; assert( ( res & 0xF ) == ( v & 0xF ) ); pos++; } return res; } #endif // HAVE_SSCANF }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/midi_action.cpp000066400000000000000000000465021211146647700216520ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include #include #include #include #include using namespace H2Core; /* Helperfunction */ bool setAbsoluteFXLevel( int nLine, int fx_channel , int fx_param) { //helper function to set fx levels Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); Instrument *instr = instrList->get( nLine ); if ( instr == NULL) return false; if( fx_param != 0 ){ instr->set_fx_level( ( (float) (fx_param / 127.0 ) ), fx_channel ); } else { instr->set_fx_level( 0 , fx_channel ); } Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); return true; } /** * @class MidiAction * * @brief This class represents a midi action. * * This class represents actions which can be executed * after a midi event occured. An example is the "MUTE" * action, which mutes the outputs of hydrogen. * * An action can be linked to an event. If this event occurs, * the action gets triggered. The handling of events takes place * in midi_input.cpp . * * Each action has two independ parameters. The two parameters are optional and * can be used to carry additional informations, which mean * only something to this very Action. They can have totally different meanings for other Actions. * Example: parameter1 is the Mixer strip and parameter 2 a multiplier for the volume change on this strip * * @author Sebastian Moors * */ const char* MidiAction::__class_name = "MidiAction"; MidiAction::MidiAction( QString typeString ) : Object( __class_name ) { type = typeString; QString parameter1 = "0"; QString parameter2 = "0" ; } /** * @class MidiActionManager * * @brief The MidiActionManager cares for the execution of MidiActions * * * The MidiActionManager handles the execution of midi actions. The class * includes the names and implementations of all possible actions. * * * @author Sebastian Moors * */ MidiActionManager* MidiActionManager::__instance = NULL; const char* MidiActionManager::__class_name = "ActionManager"; MidiActionManager::MidiActionManager() : Object( __class_name ) { __instance = this; int lastBpmChangeCCParameter = -1; /* the actionList holds all Action identfiers which hydrogen is able to interpret. */ actionList <<"" << "PLAY" << "PLAY/STOP_TOGGLE" << "PLAY/PAUSE_TOGGLE" << "STOP" << "PAUSE" << "RECORD_READY" << "RECORD/STROBE_TOGGLE" << "RECORD_STROBE" << "RECORD_EXIT" << "MUTE" << "UNMUTE" << "MUTE_TOGGLE" << ">>_NEXT_BAR" << "<<_PREVIOUS_BAR" << "BPM_INCR" << "BPM_DECR" << "BPM_CC_RELATIVE" << "BPM_FINE_CC_RELATIVE" << "MASTER_VOLUME_RELATIVE" << "MASTER_VOLUME_ABSOLUTE" << "STRIP_VOLUME_RELATIVE" << "STRIP_VOLUME_ABSOLUTE" << "EFFECT1_LEVEL_RELATIVE" << "EFFECT2_LEVEL_RELATIVE" << "EFFECT3_LEVEL_RELATIVE" << "EFFECT4_LEVEL_RELATIVE" << "EFFECT1_LEVEL_ABSOLUTE" << "EFFECT2_LEVEL_ABSOLUTE" << "EFFECT3_LEVEL_ABSOLUTE" << "EFFECT4_LEVEL_ABSOLUTE" << "SELECT_NEXT_PATTERN" << "SELECT_NEXT_PATTERN_CC_ABSOLUT" << "SELECT_NEXT_PATTERN_PROMPTLY" << "SELECT_NEXT_PATTERN_RELATIVE" << "SELECT_AND_PLAY_PATTERN" << "PAN_RELATIVE" << "PAN_ABSOLUTE" << "BEATCOUNTER" << "TAP_TEMPO" << "PLAYLIST_NEXT_SONG" << "PLAYLIST_PREV_SONG" << "TOGGLE_METRONOME" << "SELECT_INSTRUMENT" << "UNDO_ACTION" << "REDO_ACTION"; eventList << "" << "MMC_PLAY" << "MMC_DEFERRED_PLAY" << "MMC_STOP" << "MMC_FAST_FORWARD" << "MMC_REWIND" << "MMC_RECORD_STROBE" << "MMC_RECORD_EXIT" << "MMC_RECORD_READY" << "MMC_PAUSE" << "NOTE" << "CC"; } MidiActionManager::~MidiActionManager(){ //INFOLOG( "ActionManager delete" ); __instance = NULL; } void MidiActionManager::create_instance() { if ( __instance == 0 ) { __instance = new MidiActionManager; } } /** * The handleAction method is the heard of the MidiActionManager class. * It executes the operations that are needed to carry the desired action. */ bool MidiActionManager::handleAction( MidiAction * pAction ){ Hydrogen *pEngine = Hydrogen::get_instance(); /* return false if action is null (for example if no Action exists for an event) */ if( pAction == NULL ) return false; QString sActionString = pAction->getType(); if( sActionString == "PLAY" ) { int nState = pEngine->getState(); if ( nState == STATE_READY ){ pEngine->sequencer_play(); } return true; } if( sActionString == "PLAY/STOP_TOGGLE" || sActionString == "PLAY/PAUSE_TOGGLE" ) { int nState = pEngine->getState(); switch ( nState ) { case STATE_READY: pEngine->sequencer_play(); break; case STATE_PLAYING: if( sActionString == "PLAY/STOP_TOGGLE" ) pEngine->setPatternPos( 0 ); pEngine->sequencer_stop(); pEngine->setTimelineBpm(); break; default: ERRORLOG( "[Hydrogen::ActionManager(PLAY): Unhandled case" ); } return true; } if( sActionString == "PAUSE" ) { pEngine->sequencer_stop(); return true; } if( sActionString == "STOP" ) { pEngine->sequencer_stop(); pEngine->setPatternPos( 0 ); pEngine->setTimelineBpm(); return true; } if( sActionString == "MUTE" ){ //mutes the master, not a single strip pEngine->getSong()->__is_muted = true; return true; } if( sActionString == "UNMUTE" ){ pEngine->getSong()->__is_muted = false; return true; } if( sActionString == "MUTE_TOGGLE" ){ pEngine->getSong()->__is_muted = !Hydrogen::get_instance()->getSong()->__is_muted; return true; } if( sActionString == "BEATCOUNTER" ){ pEngine->handleBeatCounter(); return true; } if( sActionString == "TAP_TEMPO" ){ pEngine->onTapTempoAccelEvent(); return true; } if( sActionString == "SELECT_NEXT_PATTERN" ){ bool ok; int row = pAction->getParameter1().toInt(&ok,10); if( row> pEngine->getSong()->get_pattern_list()->size() -1 ) return false; if(Preferences::get_instance()->patternModePlaysSelected()) pEngine->setSelectedPatternNumber( row ); else pEngine->sequencer_setNextPattern( row, false, true ); return true; } if( sActionString == "SELECT_NEXT_PATTERN_RELATIVE" ){ bool ok; if(!Preferences::get_instance()->patternModePlaysSelected()) return true; int row = pEngine->getSelectedPatternNumber() + pAction->getParameter1().toInt(&ok,10); if( row> pEngine->getSong()->get_pattern_list()->size() -1 ) return false; pEngine->setSelectedPatternNumber( row ); return true; } if( sActionString == "SELECT_NEXT_PATTERN_CC_ABSOLUT" ){ bool ok; int row = pAction->getParameter2().toInt(&ok,10); if( row> pEngine->getSong()->get_pattern_list()->size() -1 ) return false; if(Preferences::get_instance()->patternModePlaysSelected()) pEngine->setSelectedPatternNumber( row ); else return true;// only usefully in normal pattern mode return true; } if( sActionString == "SELECT_NEXT_PATTERN_PROMPTLY" ){// obsolete, use SELECT_NEXT_PATTERN_CC_ABSOLUT instead bool ok; int row = pAction->getParameter2().toInt(&ok,10); pEngine->setSelectedPatternNumberWithoutGuiEvent( row ); return true; } if( sActionString == "SELECT_AND_PLAY_PATTERN"){ bool ok; int row = pAction->getParameter1().toInt(&ok,10); pEngine->setSelectedPatternNumber( row ); pEngine->sequencer_setNextPattern( row, false, true ); int nState = pEngine->getState(); if ( nState == STATE_READY ){ pEngine->sequencer_play(); } return true; } if( sActionString == "SELECT_INSTRUMENT" ){ bool ok; int instrument_number = pAction->getParameter2().toInt(&ok,10) ; if ( pEngine->getSong()->get_instrument_list()->size() < instrument_number ) instrument_number = pEngine->getSong()->get_instrument_list()->size() -1; pEngine->setSelectedInstrumentNumber( instrument_number ); return true; } if( sActionString == "EFFECT1_LEVEL_ABSOLUTE" ){ bool ok; int nLine = pAction->getParameter1().toInt(&ok,10); int fx_param = pAction->getParameter2().toInt(&ok,10); setAbsoluteFXLevel( nLine, 0 , fx_param ); } if( sActionString == "EFFECT2_LEVEL_ABSOLUTE" ){ bool ok; int nLine = pAction->getParameter1().toInt(&ok,10); int fx_param = pAction->getParameter2().toInt(&ok,10); setAbsoluteFXLevel( nLine, 1 , fx_param ); } if( sActionString == "EFFECT3_LEVEL_ABSOLUTE" ){ bool ok; int nLine = pAction->getParameter1().toInt(&ok,10); int fx_param = pAction->getParameter2().toInt(&ok,10); setAbsoluteFXLevel( nLine, 2 , fx_param ); } if( sActionString == "EFFECT4_LEVEL_ABSOLUTE" ){ bool ok; int nLine = pAction->getParameter1().toInt(&ok,10); int fx_param = pAction->getParameter2().toInt(&ok,10); setAbsoluteFXLevel( nLine, 3 , fx_param ); } if( sActionString == "MASTER_VOLUME_RELATIVE" ){ //increments/decrements the volume of the whole song bool ok; int vol_param = pAction->getParameter2().toInt(&ok,10); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); if( vol_param != 0 ){ if ( vol_param == 1 && song->get_volume() < 1.5 ){ song->set_volume( song->get_volume() + 0.05 ); } else { if( song->get_volume() >= 0.0 ){ song->set_volume( song->get_volume() - 0.05 ); } } } else { song->set_volume( 0 ); } } if( sActionString == "MASTER_VOLUME_ABSOLUTE" ){ //sets the volume of a master output to a given level (percentage) bool ok; int vol_param = pAction->getParameter2().toInt(&ok,10); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); if( vol_param != 0 ){ song->set_volume( 1.5* ( (float) (vol_param / 127.0 ) )); } else { song->set_volume( 0 ); } } if( sActionString == "STRIP_VOLUME_RELATIVE" ){ //increments/decrements the volume of one mixer strip bool ok; int nLine = pAction->getParameter1().toInt(&ok,10); int vol_param = pAction->getParameter2().toInt(&ok,10); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); Instrument *instr = instrList->get( nLine ); if ( instr == NULL) return 0; if( vol_param != 0 ){ if ( vol_param == 1 && instr->get_volume() < 1.5 ){ instr->set_volume( instr->get_volume() + 0.1 ); } else { if( instr->get_volume() >= 0.0 ){ instr->set_volume( instr->get_volume() - 0.1 ); } } } else { instr->set_volume( 0 ); } Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } if( sActionString == "STRIP_VOLUME_ABSOLUTE" ){ //sets the volume of a mixer strip to a given level (percentage) bool ok; int nLine = pAction->getParameter1().toInt(&ok,10); int vol_param = pAction->getParameter2().toInt(&ok,10); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); Instrument *instr = instrList->get( nLine ); if ( instr == NULL) return 0; if( vol_param != 0 ){ instr->set_volume( 1.5* ( (float) (vol_param / 127.0 ) )); } else { instr->set_volume( 0 ); } Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } if( sActionString == "PAN_ABSOLUTE" ){ // sets the absolute panning of a given mixer channel bool ok; int nLine = pAction->getParameter1().toInt(&ok,10); int pan_param = pAction->getParameter2().toInt(&ok,10); float pan_L; float pan_R; Hydrogen *engine = Hydrogen::get_instance(); engine->setSelectedInstrumentNumber( nLine ); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); Instrument *instr = instrList->get( nLine ); if( instr == NULL ) return false; pan_L = instr->get_pan_l(); pan_R = instr->get_pan_r(); // pan float fPanValue = 0.0; if (pan_R == 1.0) { fPanValue = 1.0 - (pan_L / 2.0); } else { fPanValue = pan_R / 2.0; } fPanValue = 1 * ( ((float) pan_param) / 127.0 ); if (fPanValue >= 0.5) { pan_L = (1.0 - fPanValue) * 2; pan_R = 1.0; } else { pan_L = 1.0; pan_R = fPanValue * 2; } instr->set_pan_l( pan_L ); instr->set_pan_r( pan_R ); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); return true; } if( sActionString == "PAN_RELATIVE" ){ // changes the panning of a given mixer channel // this is useful if the panning is set by a rotary control knob bool ok; int nLine = pAction->getParameter1().toInt(&ok,10); int pan_param = pAction->getParameter2().toInt(&ok,10); float pan_L; float pan_R; Hydrogen *engine = Hydrogen::get_instance(); engine->setSelectedInstrumentNumber( nLine ); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); Instrument *instr = instrList->get( nLine ); if( instr == NULL ) return false; pan_L = instr->get_pan_l(); pan_R = instr->get_pan_r(); // pan float fPanValue = 0.0; if (pan_R == 1.0) { fPanValue = 1.0 - (pan_L / 2.0); } else { fPanValue = pan_R / 2.0; } if( pan_param == 1 && fPanValue < 1 ){ fPanValue += 0.05; } if( pan_param != 1 && fPanValue > 0 ){ fPanValue -= 0.05; } if (fPanValue >= 0.5) { pan_L = (1.0 - fPanValue) * 2; pan_R = 1.0; } else { pan_L = 1.0; pan_R = fPanValue * 2; } instr->set_pan_l( pan_L ); instr->set_pan_r( pan_R ); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); return true; } if( sActionString == "BPM_CC_RELATIVE" ){ /* * increments/decrements the BPM * this is useful if the bpm is set by a rotary control knob */ AudioEngine::get_instance()->lock( RIGHT_HERE ); int mult = 1; //second parameter of cc command //this value should be 1 to decrement and something other then 1 to increment the bpm int cc_param = 1; //this Action should be triggered only by CC commands bool ok; mult = pAction->getParameter1().toInt(&ok,10); cc_param = pAction->getParameter2().toInt(&ok,10); if( lastBpmChangeCCParameter == -1) { lastBpmChangeCCParameter = cc_param; } Song* pSong = pEngine->getSong(); if ( lastBpmChangeCCParameter >= cc_param && pSong->__bpm < 300) { pEngine->setBPM( pSong->__bpm - 1*mult ); } if ( lastBpmChangeCCParameter < cc_param && pSong->__bpm > 40 ) { pEngine->setBPM( pSong->__bpm + 1*mult ); } lastBpmChangeCCParameter = cc_param; AudioEngine::get_instance()->unlock(); return true; } if( sActionString == "BPM_FINE_CC_RELATIVE" ){ /* * increments/decrements the BPM * this is useful if the bpm is set by a rotary control knob */ AudioEngine::get_instance()->lock( RIGHT_HERE ); int mult = 1; //second parameter of cc command //this value should be 1 to decrement and something other then 1 to increment the bpm int cc_param = 1; //this Action should be triggered only by CC commands bool ok; mult = pAction->getParameter1().toInt(&ok,10); cc_param = pAction->getParameter2().toInt(&ok,10); if( lastBpmChangeCCParameter == -1) { lastBpmChangeCCParameter = cc_param; } Song* pSong = pEngine->getSong(); if ( lastBpmChangeCCParameter >= cc_param && pSong->__bpm < 300) { pEngine->setBPM( pSong->__bpm - 0.01*mult ); } if ( lastBpmChangeCCParameter < cc_param && pSong->__bpm > 40 ) { pEngine->setBPM( pSong->__bpm + 0.01*mult ); } lastBpmChangeCCParameter = cc_param; AudioEngine::get_instance()->unlock(); return true; } if( sActionString == "BPM_INCR" ){ AudioEngine::get_instance()->lock( RIGHT_HERE ); int mult = 1; bool ok; mult = pAction->getParameter1().toInt(&ok,10); Song* pSong = pEngine->getSong(); if (pSong->__bpm < 300) { pEngine->setBPM( pSong->__bpm + 1*mult ); } AudioEngine::get_instance()->unlock(); return true; } if( sActionString == "BPM_DECR" ){ AudioEngine::get_instance()->lock( RIGHT_HERE ); int mult = 1; bool ok; mult = pAction->getParameter1().toInt(&ok,10); Song* pSong = pEngine->getSong(); if (pSong->__bpm > 40 ) { pEngine->setBPM( pSong->__bpm - 1*mult ); } AudioEngine::get_instance()->unlock(); return true; } if( sActionString == ">>_NEXT_BAR"){ pEngine->setPatternPos(pEngine->getPatternPos() +1 ); pEngine->setTimelineBpm(); return true; } if( sActionString == "<<_PREVIOUS_BAR"){ pEngine->setPatternPos(pEngine->getPatternPos() -1 ); pEngine->setTimelineBpm(); return true; } if( sActionString == "PLAYLIST_NEXT_SONG"){ int songnumber = Playlist::get_instance()->getActiveSongNumber(); if(songnumber+1 >= 0 && songnumber+1 <= pEngine->m_PlayList.size()-1){ Playlist::get_instance()->setNextSongByNumber( songnumber + 1 ); } return true; } if( sActionString == "PLAYLIST_PREV_SONG"){ int songnumber = Playlist::get_instance()->getActiveSongNumber(); if(songnumber-1 >= 0 && songnumber-1 <= pEngine->m_PlayList.size()-1){ Playlist::get_instance()->setNextSongByNumber( songnumber - 1 ); } return true; } if( sActionString == "RECORD_READY"){ if ( pEngine->getState() != STATE_PLAYING ) { if (!Preferences::get_instance()->getRecordEvents()) { Preferences::get_instance()->setRecordEvents(true); } else { Preferences::get_instance()->setRecordEvents(false); } } return true; } if( sActionString == "RECORD/STROBE_TOGGLE"){ if (!Preferences::get_instance()->getRecordEvents()) { Preferences::get_instance()->setRecordEvents(true); } else { Preferences::get_instance()->setRecordEvents(false); } return true; } if( sActionString == "RECORD_STROBE"){ if (!Preferences::get_instance()->getRecordEvents()) { Preferences::get_instance()->setRecordEvents(true); } return true; } if( sActionString == "RECORD_EXIT"){ if (Preferences::get_instance()->getRecordEvents()) { Preferences::get_instance()->setRecordEvents(false); } return true; } if( sActionString == "TOGGLE_METRONOME"){ Preferences::get_instance()->m_bUseMetronome = !Preferences::get_instance()->m_bUseMetronome; return true; } if( sActionString == "UNDO_ACTION"){ EventQueue::get_instance()->push_event( EVENT_UNDO_REDO, 0);// 0 = undo return true; } if( sActionString == "REDO_ACTION"){ EventQueue::get_instance()->push_event( EVENT_UNDO_REDO, 1);// 1 = redo return true; } return false; } hydrogen-0.9.6-beta3/src/core/src/midi_map.cpp000066400000000000000000000101231211146647700211400ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include /** * @class MidiMap * * @brief The MidiMap maps MidiActions to MidiEvents * * * The MidiMap stores the mapping between midi events * and midi actions. Each event relates to at most 1 * midi action. Several events can relate to the same action. * Midi events are note, mmc or cc messages. * * * @author Sebastian Moors * */ MidiMap * MidiMap::__instance = 0; const char* MidiMap::__class_name = "MidiMap"; MidiMap::MidiMap() : Object( __class_name ) { __instance = this; QMutexLocker mx(&__mutex); //constructor for(int note = 0; note < 128; note++ ) { __note_array[ note ] = new MidiAction("NOTHING"); __cc_array[ note ] = new MidiAction("NOTHING"); } } MidiMap::~MidiMap() { QMutexLocker mx(&__mutex); map_t::iterator dIter( mmcMap.begin() ); for( dIter = mmcMap.begin(); dIter != mmcMap.end(); dIter++ ) { delete dIter->second; } for( int i = 0; i < 128; i++ ) { delete __note_array[ i ]; delete __cc_array[ i ]; } __instance = NULL; } void MidiMap::create_instance() { if( __instance == 0 ) { __instance = new MidiMap; } } void MidiMap::reset_instance() { create_instance(); __instance->reset(); } /** * Clears the complete midi map and releases the memory * of the contained actions */ void MidiMap::reset() { QMutexLocker mx(&__mutex); map_t::iterator iter; for( iter = mmcMap.begin() ; iter != mmcMap.end() ; ++iter ) { delete iter->second; } mmcMap.clear(); int i; for( i = 0 ; i < 128 ; ++i ) { delete __note_array[ i ]; delete __cc_array[ i ]; __note_array[ i ] = new MidiAction("NOTHING"); __cc_array[ i ] = new MidiAction("NOTHING"); } } std::map< QString, MidiAction* > MidiMap::getMMCMap() { return mmcMap; } /** * Sets up the relation between a mmc event and an action */ void MidiMap::registerMMCEvent( QString eventString , MidiAction* pAction ) { QMutexLocker mx(&__mutex); if( mmcMap[ eventString ] != NULL){ delete mmcMap[ eventString ]; } mmcMap[ eventString ] = pAction; } /** * Sets up the relation between a note event and an action */ void MidiMap::registerNoteEvent( int note, MidiAction* pAction ) { QMutexLocker mx(&__mutex); if( note >= 0 && note < 128 ) { delete __note_array[ note ]; __note_array[ note ] = pAction; } } /** * Sets up the relation between a cc event and an action */ void MidiMap::registerCCEvent( int parameter , MidiAction * pAction ){ QMutexLocker mx(&__mutex); if( parameter >= 0 and parameter < 128 ) { delete __cc_array[ parameter ]; __cc_array[ parameter ] = pAction; } } /** * Returns the mmc action which was linked to the given event. */ MidiAction* MidiMap::getMMCAction( QString eventString ) { QMutexLocker mx(&__mutex); std::map< QString, MidiAction *>::iterator dIter = mmcMap.find( eventString ); if ( dIter == mmcMap.end() ){ return NULL; } return mmcMap[eventString]; } /** * Returns the note action which was linked to the given event. */ MidiAction* MidiMap::getNoteAction( int note ) { QMutexLocker mx(&__mutex); return __note_array[ note ]; } /** * Returns the cc action which was linked to the given event. */ MidiAction * MidiMap::getCCAction( int parameter ) { QMutexLocker mx(&__mutex); return __cc_array[ parameter ]; } hydrogen-0.9.6-beta3/src/core/src/object.cpp000066400000000000000000000120641211146647700206350ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "hydrogen/object.h" #include #include #include #include /** * @class Object * * @brief Base class of all components of hydrogen. * * Every component of hydrogen is inherited from the * Object class. Each object has a qualified name * and gets registered in a memory map at creation. * This memory map helps to debug memory leaks and * can be printed at any time. * */ namespace H2Core { Logger* Object::__logger = 0; bool Object::__count = false; unsigned Object::__objects_count = 0; pthread_mutex_t Object::__mutex; Object::object_map_t Object::__objects_map; int Object::bootstrap( Logger* logger, bool count ) { if( __logger==0 && logger!=0 ) { __logger = logger; __count = count; pthread_mutex_init( &__mutex, 0 ); return 0; } return 1; } Object::~Object( ) { #ifdef H2CORE_HAVE_DEBUG if( __count ) del_object( this ); #endif } Object::Object( const Object& obj ) : __class_name( obj.__class_name ) { #ifdef H2CORE_HAVE_DEBUG if( __count ) add_object( this, true ); #endif } Object::Object( const char* class_name ) :__class_name( class_name ) { #ifdef H2CORE_HAVE_DEBUG if( __count ) add_object( this, false ); #endif } void Object::set_count( bool flag ) { #ifdef H2CORE_HAVE_DEBUG __count = flag; #else if( __logger!=0 && __logger->should_log( Logger::Error ) ) { __logger->log( Logger::Error, "set_count", "Object", "not compiled with H2CORE_HAVE_DEBUG flag set" ); } #endif } inline void Object::add_object( const Object* obj, bool copy ) { #ifdef H2CORE_HAVE_DEBUG const char* class_name = ( ( Object* )obj )->class_name(); if( __logger && __logger->should_log( Logger::Constructors ) ) __logger->log( Logger::Debug, 0, class_name, ( copy ? "Copy Constructor" : "Constructor" ) ); pthread_mutex_lock( &__mutex ); //if( __objects_map.size()==0) atexit( Object::write_objects_map_to_cerr ); __objects_count++; __objects_map[ class_name ].constructed++; pthread_mutex_unlock( &__mutex ); #endif } inline void Object::del_object( const Object* obj ) { #ifdef H2CORE_HAVE_DEBUG const char* class_name = ( ( Object* )obj )->class_name(); if( __logger && __logger->should_log( Logger::Constructors ) ) __logger->log( Logger::Debug, 0, class_name, "Destructor" ); object_map_t::iterator it_count = __objects_map.find( class_name ); if ( it_count==__objects_map.end() ) { if( __logger!=0 && __logger->should_log( Logger::Error ) ) { std::stringstream msg; msg << "the class " << class_name << " is not registered ! [" << obj << "]"; __logger->log( Logger::Error,"del_object", "Object", QString::fromStdString( msg.str() ) ); } return; } assert( ( *it_count ).first == class_name ); pthread_mutex_lock( &__mutex ); assert( __objects_map[class_name].constructed > ( __objects_map[class_name].destructed ) ); __objects_count--; assert( __objects_count>=0 ); __objects_map[ ( *it_count ).first ].destructed++; pthread_mutex_unlock( &__mutex ); #endif } void Object::write_objects_map_to( std::ostream& out ) { #ifdef H2CORE_HAVE_DEBUG if( !__count ) { #ifdef WIN32 out << "level must be Debug or higher"<< std::endl; #else out << "\033[35mlog level must be \033[31mDebug\033[35m or higher\033[0m"<< std::endl; #endif return; } std::ostringstream o; pthread_mutex_lock( &__mutex ); object_map_t::iterator it = __objects_map.begin(); while ( it != __objects_map.end() ) { o << "\t[ " << std::setw( 30 ) << ( *it ).first << " ]\t" << std::setw( 6 ) << ( *it ).second.constructed << "\t" << std::setw( 6 ) << ( *it ).second.destructed << "\t" << std::setw( 6 ) << ( *it ).second.constructed - ( *it ).second.destructed << std::endl; it++; } pthread_mutex_unlock( &__mutex ); #ifndef WIN32 out << std::endl << "\033[35m"; #endif out << "Objects map :" << std::setw( 30 ) << "class\t" << "constr destr alive" << std::endl << o.str() << "Total : " << std::setw( 6 ) << __objects_count << " objects."; #ifndef WIN32 out << "\033[0m"; #endif out << std::endl << std::endl; #else #ifdef WIN32 out << "Object::write_objects_map_to :: not compiled with H2CORE_HAVE_DEBUG flag set" << std::endl; #else out << "\033[35mObject::write_objects_map_to :: \033[31mnot compiled with H2CORE_HAVE_DEBUG flag set\033[0m" << std::endl; #endif #endif } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/core/src/playlist.cpp000066400000000000000000000051631211146647700212320ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include using namespace H2Core; Playlist* Playlist::__instance = NULL; const char* Playlist::__class_name = "Playlist"; Playlist::Playlist() : Object( __class_name ) { if ( __instance ) {class HydrogenApp; _ERRORLOG( "Playlist in use" ); }class HydrogenApp; //_INFOLOG( "[Playlist]" ); __instance = this; __playlistName = ""; selectedSongNumber = -1; activeSongNumber = -1; } Playlist::~Playlist() { //_INFOLOG( "[~Playlist]" ); __instance = NULL; } void Playlist::create_instance() { if ( __instance == 0 ) { __instance = new Playlist; } } void Playlist::setNextSongByNumber(int songNumber) { if ( songNumber > (int)Hydrogen::get_instance()->m_PlayList.size() -1 || (int)Hydrogen::get_instance()->m_PlayList.size() == 0 ) return; setSelectedSongNr( songNumber ); setActiveSongNumber( songNumber ); EventQueue::get_instance()->push_event( EVENT_PLAYLIST_LOADSONG, songNumber); execScript( songNumber ); } void Playlist::setSelectedSongNr( int songNumber ) { selectedSongNumber = songNumber; } int Playlist::getSelectedSongNr() { return selectedSongNumber; } void Playlist::setActiveSongNumber( int ActiveSongNumber) { activeSongNumber = ActiveSongNumber ; } int Playlist::getActiveSongNumber() { return activeSongNumber; } void Playlist::execScript( int index) { QString file; QString script; file = Hydrogen::get_instance()->m_PlayList[ index ].m_hScript; script = Hydrogen::get_instance()->m_PlayList[ index ].m_hScriptEnabled; if( !QFile( file ).exists() || script == "Script not used") return; int ret = std::system( file.toLocal8Bit() ); return; } hydrogen-0.9.6-beta3/src/core/src/preferences.cpp000066400000000000000000001450111211146647700216670ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #ifndef WIN32 #include #include #endif #include #include #include #include #include #include #include #include #include "hydrogen/version.h" #include "hydrogen/helpers/filesystem.h" #include #include namespace H2Core { Preferences* Preferences::__instance = NULL; void Preferences::create_instance() { if ( __instance == 0 ) { __instance = new Preferences; } } const char* Preferences::__class_name = "Preferences"; Preferences::Preferences() : Object( __class_name ) , demoPath( Filesystem::demos_dir()+"/") , m_sLastNews( "" ) { __instance = this; INFOLOG( "INIT" ); //Default jack track-outputs are post fader m_nJackTrackOutputMode = POST_FADER; m_bJackTrackOuts = false; // switch to enable / disable lash, only on h2 startup m_brestartLash = false; m_bsetLash = false; //init pre delete default m_nRecPreDelete = 0; m_nRecPostDelete = 0; //server list std::list sServerList; // //musicCategories // std::list m_musicCategories; //rubberband bpm change queue m_useTheRubberbandBpmChangeEvent = false; __rubberBandCalcTime = 5; QString rubberBandCLIPath = getenv( "PATH" ); QStringList rubberBandCLIPathList = rubberBandCLIPath.split(":");//linx use ":" as seperator. maybe windows and osx use other seperators //find the Rubberband-CLI in system env //if this fails a second test will check individual user settings for(int i = 0; i < rubberBandCLIPathList.size(); ++i){ m_rubberBandCLIexecutable = rubberBandCLIPathList[i] + "/rubberband"; if ( QFile( m_rubberBandCLIexecutable ).exists() == true ){ readPrefFileforotherplaces = false; break; }else { m_rubberBandCLIexecutable = "Path to Rubberband-CLI"; readPrefFileforotherplaces = true; } } char * ladpath = getenv( "LADSPA_PATH" ); // read the Environment variable LADSPA_PATH if ( ladpath ) { INFOLOG( "Found LADSPA_PATH enviroment variable" ); QString sLadspaPath = QString::fromLocal8Bit(ladpath); int pos; while ( ( pos = sLadspaPath.indexOf( ":" ) ) != -1 ) { QString sPath = sLadspaPath.left( pos ); m_ladspaPathVect.push_back( sPath ); sLadspaPath = sLadspaPath.mid( pos + 1, sLadspaPath.length() ); } m_ladspaPathVect.push_back( sLadspaPath ); } else { #ifdef Q_OS_MACX m_ladspaPathVect.push_back( qApp->applicationDirPath() + "/../Resources/plugins" ); m_ladspaPathVect.push_back( "/Library/Audio/Plug-Ins/LADSPA/" ); m_ladspaPathVect.push_back( QDir::homePath().append( "/Library/Audio/Plug-Ins/LADSPA" )); #else m_ladspaPathVect.push_back( "/usr/lib/ladspa" ); m_ladspaPathVect.push_back( "/usr/local/lib/ladspa" ); m_ladspaPathVect.push_back( "/usr/lib64/ladspa" ); m_ladspaPathVect.push_back( "/usr/local/lib64/ladspa" ); #endif } m_pDefaultUIStyle = new UIStyle(); m_nDefaultUILayout = UI_LAYOUT_SINGLE_PANE; #ifdef Q_OS_MACX m_sPreferencesFilename = QDir::homePath().append( "/Library/Application Support/Hydrogen/hydrogen.conf" ); m_sPreferencesDirectory = QDir::homePath().append( "/Library/Application Support/Hydrogen/" ); m_sDataDirectory = QDir::homePath().append( "/Library/Application Support/Hydrogen/data/" ); #else m_sPreferencesFilename = QDir::homePath().append( "/.hydrogen/hydrogen.conf" ); m_sPreferencesDirectory = QDir::homePath().append( "/.hydrogen/" ); m_sDataDirectory = QDir::homePath().append( "/.hydrogen/data/" ); #endif m_sTmpDirectory = QDir::tempPath().append( "/hydrogen/" ); if ( !QDir(m_sTmpDirectory).exists() ) { QDir(m_sTmpDirectory).mkdir( m_sTmpDirectory );// create the tmp directory } __lastspatternDirectory = QDir::homePath(); __lastsampleDirectory = QDir::homePath(); //audio file browser __playsamplesonclicking = false; // audio file browser __playselectedinstrument = false; // midi keyboard and keyboard play only selected instrument recordEvents = false; // not recording by default destructiveRecord = false; // not destructively recording by default punchInPos = 0; punchOutPos = -1; __expandSongItem = true; //SoundLibraryPanel __expandPatternItem = true; //SoundLibraryPanel __useTimelineBpm = false; // use timeline ///////////////////////////////////////////////////////////////////////// /////////////////// DEFAULT SETTINGS //////////////////////////////////// ///////////////////////////////////////////////////////////////////////// m_bFollowPlayhead = true; // SEE ABOVE: m_brestartLash // SEE ABOVE: m_bsetLash m_bbc = false; m_mmcsetplay = false; m_countOffset = 0; // beatcounter m_startOffset = 0; // beatcounter sServerList.push_back( QString("http://www.hydrogen-music.org/feeds/drumkit_list.php") ); m_patternCategories.push_back( QString("not_categorized") ); //___ audio engine properties ___ m_sAudioDriver = QString("Auto"); m_bUseMetronome = false; m_fMetronomeVolume = 0.5; m_nMaxNotes = 256; m_nBufferSize = 1024; m_nSampleRate = 44100; //___ oss driver properties ___ m_sOSSDevice = QString("/dev/dsp"); //___ MIDI Driver properties m_sMidiDriver = QString("ALSA"); m_sMidiPortName = QString("None"); m_nMidiChannelFilter = -1; m_bMidiNoteOffIgnore = false; m_bMidiDiscardNoteAfterAction = false; //___ alsa audio driver properties ___ m_sAlsaAudioDevice = QString("hw:0"); //___ jack driver properties ___ m_sJackPortName1 = QString("alsa_pcm:playback_1"); m_sJackPortName2 = QString("alsa_pcm:playback_2"); m_bJackTransportMode = true; m_bJackConnectDefaults = true; m_bJackTrackOuts = false; m_nJackTrackOutputMode = 0; m_bJackMasterMode = false ; // None: m_sDefaultEditor; // SEE ABOVE: m_sDataDirectory // SEE ABOVE: demoPath //___ General properties ___ m_bPatternModePlaysSelected = true; m_brestoreLastSong = true; m_brestoreLastPlaylist = false; m_bUseLash = false; m_bShowDevelWarning = false; m_bShowExportWarning = false; // NONE: lastSongFilename; hearNewNotes = true; // NONE: m_recentFiles; // NONE: m_recentFX; // NONE: m_ladspaPathVect; quantizeEvents = true; recordEvents = false; m_sLastNews = QString("-"); //___ GUI properties ___ m_sQTStyle = "Plastique"; applicationFontFamily = "Lucida Grande"; applicationFontPointSize = 10; mixerFontFamily = "Lucida Grande"; mixerFontPointSize = 11; mixerFalloffSpeed = 1.1; m_nPatternEditorGridResolution = 8; m_bPatternEditorUsingTriplets = false; m_bShowInstrumentPeaks = true; m_bIsFXTabVisible = true; m_nPatternEditorGridHeight = 21; m_nPatternEditorGridWidth = 3; mainFormProperties.set(0, 0, 1000, 700, true); mixerProperties.set(10, 350, 829, 276, true); patternEditorProperties.set(280, 100, 706, 439, true); songEditorProperties.set(10, 10, 600, 250, true); drumkitManagerProperties.set(500, 20, 526, 437, true); audioEngineInfoProperties.set(720, 120, 0, 0, false); m_ladspaProperties[0].set(2, 20, 0, 0, false); m_ladspaProperties[1].set(2, 20, 0, 0, false); m_ladspaProperties[2].set(2, 20, 0, 0, false); m_ladspaProperties[3].set(2, 20, 0, 0, false); UIStyle* uis = m_pDefaultUIStyle; uis->m_songEditor_backgroundColor = H2RGBColor(95, 101, 117); uis->m_songEditor_alternateRowColor = H2RGBColor(128, 134, 152); uis->m_songEditor_selectedRowColor = H2RGBColor(128, 134, 152); uis->m_songEditor_lineColor = H2RGBColor(72, 76, 88); uis->m_songEditor_textColor = H2RGBColor(196, 201, 214); uis->m_songEditor_pattern1Color = H2RGBColor(97, 167, 251); uis->m_patternEditor_backgroundColor = H2RGBColor(167, 168, 163); uis->m_patternEditor_alternateRowColor = H2RGBColor(167, 168, 163); uis->m_patternEditor_selectedRowColor = H2RGBColor(207, 208, 200); uis->m_patternEditor_textColor = H2RGBColor(40, 40, 40); uis->m_patternEditor_noteColor = H2RGBColor(40, 40, 40); uis->m_patternEditor_lineColor = H2RGBColor(65, 65, 65); uis->m_patternEditor_line1Color = H2RGBColor(75, 75, 75); uis->m_patternEditor_line2Color = H2RGBColor(95, 95, 95); uis->m_patternEditor_line3Color = H2RGBColor(115, 115, 115); uis->m_patternEditor_line4Color = H2RGBColor(125, 125, 125); uis->m_patternEditor_line5Color = H2RGBColor(135, 135, 135); ///////////////////////////////////////////////////////////////////////// //////////////// END OF DEFAULT SETTINGS //////////////////////////////// ///////////////////////////////////////////////////////////////////////// loadPreferences( true ); // Global settings loadPreferences( false ); // User settings } Preferences::~Preferences() { savePreferences(); INFOLOG( "DESTROY" ); __instance = NULL; delete m_pDefaultUIStyle; } /// /// Load the preferences file /// void Preferences::loadPreferences( bool bGlobal ) { bool recreate = false; // configuration file must be recreated? QString sPreferencesDirectory; QString sPreferencesFilename; QString sDataDirectory; if ( bGlobal ) { sPreferencesDirectory = Filesystem::sys_data_path(); sPreferencesFilename = sPreferencesDirectory + "/hydrogen.default.conf"; INFOLOG( "Loading preferences file (GLOBAL) [" + sPreferencesFilename + "]" ); } else { sPreferencesFilename = m_sPreferencesFilename; sPreferencesDirectory = m_sPreferencesDirectory; sDataDirectory = QDir::homePath().append( "/.hydrogen/data" ); INFOLOG( "Loading preferences file (USER) [" + sPreferencesFilename + "]" ); } // preferences directory exists? QDir prefDir( sPreferencesDirectory ); if ( !prefDir.exists() ) { if ( bGlobal ) { WARNINGLOG( "System configuration directory '" + sPreferencesDirectory + "' not found." ); } else { ERRORLOG( "Configuration directory '" + sPreferencesDirectory + "' not found." ); createPreferencesDirectory(); } } // data directory exists? QDir dataDir( sDataDirectory ); if ( !dataDir.exists() ) { WARNINGLOG( "Data directory not found." ); createDataDirectory(); } // soundLibrary directory exists? QString sDir = sDataDirectory; QString sDrumkitDir; QString sSongDir; QString sPatternDir; INFOLOG( "Creating soundLibrary directories in " + sDir ); sDrumkitDir = sDir + "/drumkits"; sSongDir = sDir + "/songs"; sPatternDir = sDir + "/patterns"; QDir drumkitDir( sDrumkitDir ); QDir songDir( sSongDir ); QDir patternDir( sPatternDir ); if ( ! drumkitDir.exists() || ! songDir.exists() || ! patternDir.exists() ) { createSoundLibraryDirectories(); } // pref file exists? std::ifstream input( sPreferencesFilename.toLocal8Bit() , std::ios::in | std::ios::binary ); if ( input ) { // read preferences file QDomDocument doc = LocalFileMng::openXmlDocument( sPreferencesFilename ); QDomNode rootNode = doc.firstChildElement( "hydrogen_preferences" ); if ( !rootNode.isNull() ) { // version QString version = LocalFileMng::readXmlString( rootNode, "version", "" ); if ( version.isEmpty() ) { recreate = true; } //////// GENERAL /////////// //m_sLadspaPath = LocalFileMng::readXmlString( this, rootNode, "ladspaPath", m_sLadspaPath ); m_bShowDevelWarning = LocalFileMng::readXmlBool( rootNode, "showDevelWarning", m_bShowDevelWarning ); m_brestoreLastSong = LocalFileMng::readXmlBool( rootNode, "restoreLastSong", m_brestoreLastSong ); m_brestoreLastPlaylist = LocalFileMng::readXmlBool( rootNode, "restoreLastPlaylist", m_brestoreLastPlaylist ); m_bPatternModePlaysSelected = LocalFileMng::readXmlBool( rootNode, "patternModePlaysSelected", TRUE ); m_bUseLash = LocalFileMng::readXmlBool( rootNode, "useLash", FALSE ); __useTimelineBpm = LocalFileMng::readXmlBool( rootNode, "useTimeLine", __useTimelineBpm ); maxBars = LocalFileMng::readXmlInt( rootNode, "maxBars", 400 ); m_nDefaultUILayout = LocalFileMng::readXmlInt( rootNode, "defaultUILayout", UI_LAYOUT_SINGLE_PANE ); m_nLastOpenTab = LocalFileMng::readXmlInt( rootNode, "lastOpenTab", 0 ); //restore the right m_bsetlash value m_bsetLash = m_bUseLash; m_useTheRubberbandBpmChangeEvent = LocalFileMng::readXmlBool( rootNode, "useTheRubberbandBpmChangeEvent", m_useTheRubberbandBpmChangeEvent ); m_nRecPreDelete = LocalFileMng::readXmlInt( rootNode, "preDelete", 0 ); m_nRecPostDelete = LocalFileMng::readXmlInt( rootNode, "postDelete", 0 ); hearNewNotes = LocalFileMng::readXmlBool( rootNode, "hearNewNotes", hearNewNotes ); quantizeEvents = LocalFileMng::readXmlBool( rootNode, "quantizeEvents", quantizeEvents ); //rubberband if( readPrefFileforotherplaces ){ //this scond test will check individual user settings QString test = LocalFileMng::readXmlString( rootNode, "path_to_rubberband", ""); if ( QFile( test ).exists() == true ){ m_rubberBandCLIexecutable = test; }else { m_rubberBandCLIexecutable = "Path to Rubberband-CLI"; } } QDomNode pRecentUsedSongsNode = rootNode.firstChildElement( "recentUsedSongs" ); if ( !pRecentUsedSongsNode.isNull() ) { QDomElement pSongElement = pRecentUsedSongsNode.firstChildElement( "song" ); while( !pSongElement.isNull() && !pSongElement.text().isEmpty() ){ m_recentFiles.push_back( pSongElement.text() ); pSongElement = pSongElement.nextSiblingElement( "song" ); } } else { WARNINGLOG( "recentUsedSongs node not found" ); } QDomNode pRecentFXNode = rootNode.firstChildElement( "recentlyUsedEffects" ); if ( ! pRecentFXNode.isNull() ) { QDomElement pFXElement = pRecentFXNode.firstChildElement( "FX" ); while ( !pFXElement.isNull() && ! pFXElement.text().isEmpty()) { m_recentFX.push_back( pFXElement.text() ); pFXElement = pFXElement.nextSiblingElement( "FX" ); } } else { WARNINGLOG( "recentlyUsedEffects node not found" ); } sServerList.clear(); QDomNode pServerListNode = rootNode.firstChildElement( "serverList" ); if ( !pServerListNode.isNull() ) { QDomElement pServerElement = pServerListNode.firstChildElement( "server" ); while ( !pServerElement.isNull() && !pServerElement.text().isEmpty() ) { sServerList.push_back( pServerElement.text() ); pServerElement = pServerElement.nextSiblingElement( "server" ); } } else { WARNINGLOG( "serverList node not found" ); } m_patternCategories.clear(); QDomNode pPatternCategoriesNode = rootNode.firstChildElement( "patternCategories" ); if ( !pPatternCategoriesNode.isNull() ) { QDomElement pPatternCategoriesElement = pPatternCategoriesNode.firstChildElement( "categories" ); while ( !pPatternCategoriesElement.isNull() && !pPatternCategoriesElement.text().isEmpty() ) { m_patternCategories.push_back( pPatternCategoriesElement.text() ); pPatternCategoriesElement = pPatternCategoriesElement.nextSiblingElement( "categories" ); } } else { WARNINGLOG( "patternCategories node not found" ); } m_sLastNews = LocalFileMng::readXmlString( rootNode, "lastNews", "-", true ); /////////////// AUDIO ENGINE ////////////// QDomNode audioEngineNode = rootNode.firstChildElement( "audio_engine" ); if ( audioEngineNode.isNull() ) { WARNINGLOG( "audio_engine node not found" ); recreate = true; } else { m_sAudioDriver = LocalFileMng::readXmlString( audioEngineNode, "audio_driver", m_sAudioDriver ); m_bUseMetronome = LocalFileMng::readXmlBool( audioEngineNode, "use_metronome", m_bUseMetronome ); m_fMetronomeVolume = LocalFileMng::readXmlFloat( audioEngineNode, "metronome_volume", 0.5f ); m_nMaxNotes = LocalFileMng::readXmlInt( audioEngineNode, "maxNotes", m_nMaxNotes ); m_nBufferSize = LocalFileMng::readXmlInt( audioEngineNode, "buffer_size", m_nBufferSize ); m_nSampleRate = LocalFileMng::readXmlInt( audioEngineNode, "samplerate", m_nSampleRate ); //// OSS DRIVER //// QDomNode ossDriverNode = audioEngineNode.firstChildElement( "oss_driver" ); if ( ossDriverNode.isNull() ) { WARNINGLOG( "oss_driver node not found" ); recreate = true; } else { m_sOSSDevice = LocalFileMng::readXmlString( ossDriverNode, "ossDevice", m_sOSSDevice ); } //// JACK DRIVER //// QDomNode jackDriverNode = audioEngineNode.firstChildElement( "jack_driver" ); if ( jackDriverNode.isNull() ) { WARNINGLOG( "jack_driver node not found" ); recreate = true; } else { m_sJackPortName1 = LocalFileMng::readXmlString( jackDriverNode, "jack_port_name_1", m_sJackPortName1 ); m_sJackPortName2 = LocalFileMng::readXmlString( jackDriverNode, "jack_port_name_2", m_sJackPortName2 ); QString sMode = LocalFileMng::readXmlString( jackDriverNode, "jack_transport_mode", "NO_JACK_TRANSPORT" ); if ( sMode == "NO_JACK_TRANSPORT" ) { m_bJackTransportMode = NO_JACK_TRANSPORT; } else if ( sMode == "USE_JACK_TRANSPORT" ) { m_bJackTransportMode = USE_JACK_TRANSPORT; } //jack time master QString tmMode = LocalFileMng::readXmlString( jackDriverNode, "jack_transport_mode_master", "NO_JACK_TIME_MASTER" ); if ( tmMode == "NO_JACK_TIME_MASTER" ) { m_bJackMasterMode = NO_JACK_TIME_MASTER; } else if ( tmMode == "USE_JACK_TIME_MASTER" ) { m_bJackMasterMode = USE_JACK_TIME_MASTER; } //~ jack time master m_bJackTrackOuts = LocalFileMng::readXmlBool( jackDriverNode, "jack_track_outs", m_bJackTrackOuts ); m_bJackConnectDefaults = LocalFileMng::readXmlBool( jackDriverNode, "jack_connect_defaults", m_bJackConnectDefaults ); m_nJackTrackOutputMode = LocalFileMng::readXmlInt( jackDriverNode, "jack_track_output_mode", m_nJackTrackOutputMode ); } /// ALSA AUDIO DRIVER /// QDomNode alsaAudioDriverNode = audioEngineNode.firstChildElement( "alsa_audio_driver" ); if ( alsaAudioDriverNode.isNull() ) { WARNINGLOG( "alsa_audio_driver node not found" ); recreate = true; } else { m_sAlsaAudioDevice = LocalFileMng::readXmlString( alsaAudioDriverNode, "alsa_audio_device", m_sAlsaAudioDevice ); } /// MIDI DRIVER /// QDomNode midiDriverNode = audioEngineNode.firstChildElement( "midi_driver" ); if ( midiDriverNode.isNull() ) { WARNINGLOG( "midi_driver node not found" ); recreate = true; } else { m_sMidiDriver = LocalFileMng::readXmlString( midiDriverNode, "driverName", "ALSA" ); m_sMidiPortName = LocalFileMng::readXmlString( midiDriverNode, "port_name", "None" ); m_nMidiChannelFilter = LocalFileMng::readXmlInt( midiDriverNode, "channel_filter", -1 ); m_bMidiNoteOffIgnore = LocalFileMng::readXmlBool( midiDriverNode, "ignore_note_off", true ); } } /////////////// GUI ////////////// QDomNode guiNode = rootNode.firstChildElement( "gui" ); if ( guiNode.isNull() ) { WARNINGLOG( "gui node not found" ); recreate = true; } else { // QT Style m_sQTStyle = LocalFileMng::readXmlString( guiNode, "QTStyle", m_sQTStyle, true ); // Application font family applicationFontFamily = LocalFileMng::readXmlString( guiNode, "application_font_family", applicationFontFamily ); // Application font pointSize applicationFontPointSize = LocalFileMng::readXmlInt( guiNode, "application_font_pointsize", applicationFontPointSize ); // mixer font family mixerFontFamily = LocalFileMng::readXmlString( guiNode, "mixer_font_family", mixerFontFamily ); // mixer font pointSize mixerFontPointSize = LocalFileMng::readXmlInt( guiNode, "mixer_font_pointsize", mixerFontPointSize ); // Mixer falloff speed mixerFalloffSpeed = LocalFileMng::readXmlFloat( guiNode, "mixer_falloff_speed", 1.1f ); // pattern editor grid resolution m_nPatternEditorGridResolution = LocalFileMng::readXmlInt( guiNode, "patternEditorGridResolution", m_nPatternEditorGridResolution ); m_bPatternEditorUsingTriplets = LocalFileMng::readXmlBool( guiNode, "patternEditorUsingTriplets", m_bPatternEditorUsingTriplets ); m_bShowInstrumentPeaks = LocalFileMng::readXmlBool( guiNode, "showInstrumentPeaks", m_bShowInstrumentPeaks ); m_bIsFXTabVisible = LocalFileMng::readXmlBool( guiNode, "isFXTabVisible", m_bIsFXTabVisible ); // pattern editor grid height m_nPatternEditorGridHeight = LocalFileMng::readXmlInt( guiNode, "patternEditorGridHeight", m_nPatternEditorGridHeight ); // pattern editor grid width m_nPatternEditorGridWidth = LocalFileMng::readXmlInt( guiNode, "patternEditorGridWidth", m_nPatternEditorGridWidth ); // mainForm window properties setMainFormProperties( readWindowProperties( guiNode, "mainForm_properties", mainFormProperties ) ); setMixerProperties( readWindowProperties( guiNode, "mixer_properties", mixerProperties ) ); setPatternEditorProperties( readWindowProperties( guiNode, "patternEditor_properties", patternEditorProperties ) ); setSongEditorProperties( readWindowProperties( guiNode, "songEditor_properties", songEditorProperties ) ); setAudioEngineInfoProperties( readWindowProperties( guiNode, "audioEngineInfo_properties", audioEngineInfoProperties ) ); m_bFollowPlayhead = LocalFileMng::readXmlBool( guiNode, "followPlayhead", true ); //beatcounter QString bcMode = LocalFileMng::readXmlString( guiNode, "bc", "BC_OFF" ); if ( bcMode == "BC_OFF" ) { m_bbc = BC_OFF; } else if ( bcMode == "BC_ON" ) { m_bbc = BC_ON; } QString setPlay = LocalFileMng::readXmlString( guiNode, "setplay", "SET_PLAY_OFF" ); if ( setPlay == "SET_PLAY_OFF" ) { m_mmcsetplay = SET_PLAY_OFF; } else if ( setPlay == "SET_PLAY_ON" ) { m_mmcsetplay = SET_PLAY_ON; } m_countOffset = LocalFileMng::readXmlInt( guiNode, "countoffset", 0 ); m_startOffset = LocalFileMng::readXmlInt( guiNode, "playoffset", 0 ); //~ beatcounter //SoundLibraryPanel expand items __expandSongItem = LocalFileMng::readXmlBool( guiNode, "expandSongItem", __expandSongItem ); __expandPatternItem = LocalFileMng::readXmlBool( guiNode, "expandPatternItem", __expandPatternItem ); for ( unsigned nFX = 0; nFX < MAX_FX; nFX++ ) { QString sNodeName = QString("ladspaFX_properties%1").arg( nFX ); setLadspaProperties( nFX, readWindowProperties( guiNode, sNodeName, m_ladspaProperties[nFX] ) ); } QDomNode pUIStyle = guiNode.firstChildElement( "UI_Style" ); if ( !pUIStyle.isNull() ) { readUIStyle( pUIStyle ); } else { WARNINGLOG( "UI_Style node not found" ); recreate = true; } } /////////////// FILES ////////////// QDomNode filesNode = rootNode.firstChildElement( "files" ); if ( filesNode.isNull() ) { WARNINGLOG( "files node not found" ); recreate = true; } else { // last used song m_lastSongFilename = LocalFileMng::readXmlString( filesNode, "lastSongFilename", m_lastSongFilename, true ); m_lastPlaylistFilename = LocalFileMng::readXmlString( filesNode, "lastPlaylistFilename", m_lastPlaylistFilename, true ); m_sDefaultEditor = LocalFileMng::readXmlString( filesNode, "defaulteditor", m_sDefaultEditor, true ); } MidiMap::reset_instance(); MidiMap* mM = MidiMap::get_instance(); QDomNode pMidiEventMapNode = rootNode.firstChildElement( "midiEventMap" ); if ( !pMidiEventMapNode.isNull() ) { QDomNode pMidiEventNode = pMidiEventMapNode.firstChildElement( "midiEvent" ); while ( !pMidiEventNode.isNull() ) { if( pMidiEventNode.firstChildElement().nodeName() == QString("mmcEvent")){ QString event = pMidiEventNode.firstChildElement("mmcEvent").text(); QString s_action = pMidiEventNode.firstChildElement("action").text(); QString s_param = pMidiEventNode.firstChildElement("parameter").text(); MidiAction* pAction = new MidiAction( s_action ); pAction->setParameter1( s_param ); mM->registerMMCEvent(event, pAction); } if( pMidiEventNode.firstChildElement().nodeName() == QString("noteEvent")){ QString event = pMidiEventNode.firstChildElement("noteEvent").text(); QString s_action = pMidiEventNode.firstChildElement("action").text(); QString s_param = pMidiEventNode.firstChildElement("parameter").text(); QString s_eventParameter = pMidiEventNode.firstChildElement("eventParameter").text(); MidiAction* pAction = new MidiAction( s_action ); pAction->setParameter1( s_param ); mM->registerNoteEvent(s_eventParameter.toInt(), pAction); } if( pMidiEventNode.firstChildElement().nodeName() == QString("ccEvent") ){ QString event = pMidiEventNode.firstChildElement("ccEvent").text(); QString s_action = pMidiEventNode.firstChildElement("action").text(); QString s_param = pMidiEventNode.firstChildElement("parameter").text(); QString s_eventParameter = pMidiEventNode.firstChildElement("eventParameter").text(); MidiAction * pAction = new MidiAction( s_action ); pAction->setParameter1( s_param ); mM->registerCCEvent( s_eventParameter.toInt(), pAction ); } pMidiEventNode = pMidiEventNode.nextSiblingElement( "midiEvent" ); } } else { WARNINGLOG( "midiMap node not found" ); } } // rootNode else { WARNINGLOG( "hydrogen_preferences node not found" ); recreate = true; } } else { if ( bGlobal ) { WARNINGLOG( "System configuration file not found." ); } else { WARNINGLOG( "Configuration file not found." ); recreate = true; } } // The preferences file should be recreated? if ( recreate == true ) { WARNINGLOG( "Recreating configuration file." ); savePreferences(); } } /// /// Save the preferences file /// void Preferences::savePreferences() { //string prefDir = QDir::homePath().append("/.hydrogen").toLocal8Bit().constData(); QString filename = m_sPreferencesFilename; INFOLOG( "Saving preferences file: " + filename ); QDomDocument doc; QDomProcessingInstruction header = doc.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\""); doc.appendChild( header ); QDomNode rootNode = doc.createElement( "hydrogen_preferences" ); // hydrogen version LocalFileMng::writeXmlString( rootNode, "version", QString( get_version().c_str() ) ); ////// GENERAL /////// LocalFileMng::writeXmlString( rootNode, "restoreLastSong", m_brestoreLastSong ? "true": "false" ); LocalFileMng::writeXmlString( rootNode, "restoreLastPlaylist", m_brestoreLastPlaylist ? "true": "false" ); LocalFileMng::writeXmlString( rootNode, "patternModePlaysSelected", m_bPatternModePlaysSelected ? "true": "false" ); LocalFileMng::writeXmlString( rootNode, "useLash", m_bsetLash ? "true": "false" ); LocalFileMng::writeXmlString( rootNode, "useTimeLine", __useTimelineBpm ? "true": "false" ); LocalFileMng::writeXmlString( rootNode, "maxBars", QString::number( maxBars ) ); LocalFileMng::writeXmlString( rootNode, "defaultUILayout", QString::number( m_nDefaultUILayout ) ); LocalFileMng::writeXmlString( rootNode, "lastOpenTab", QString::number( m_nLastOpenTab ) ); LocalFileMng::writeXmlString( rootNode, "useTheRubberbandBpmChangeEvent", m_useTheRubberbandBpmChangeEvent ? "true": "false" ); LocalFileMng::writeXmlString( rootNode, "preDelete", QString("%1").arg(m_nRecPreDelete) ); LocalFileMng::writeXmlString( rootNode, "postDelete", QString("%1").arg(m_nRecPostDelete) ); //show development version warning LocalFileMng::writeXmlString( rootNode, "showDevelWarning", m_bShowDevelWarning ? "true": "false" ); // hear new notes in the pattern editor LocalFileMng::writeXmlString( rootNode, "hearNewNotes", hearNewNotes ? "true": "false" ); // key/midi event prefs //LocalFileMng::writeXmlString( rootNode, "recordEvents", recordEvents ? "true": "false" ); LocalFileMng::writeXmlString( rootNode, "quantizeEvents", quantizeEvents ? "true": "false" ); //extern executables if ( QFile( m_rubberBandCLIexecutable ).exists() == false ) { m_rubberBandCLIexecutable = "Path to Rubberband-CLI"; } LocalFileMng::writeXmlString( rootNode, "path_to_rubberband", QString(m_rubberBandCLIexecutable)); // Recent used songs QDomNode recentUsedSongsNode = doc.createElement( "recentUsedSongs" ); { unsigned nSongs = 5; if ( m_recentFiles.size() < 5 ) { nSongs = m_recentFiles.size(); } for ( unsigned i = 0; i < nSongs; i++ ) { LocalFileMng::writeXmlString( recentUsedSongsNode, "song", m_recentFiles[ i ] ); } } rootNode.appendChild( recentUsedSongsNode ); QDomNode recentFXNode = doc.createElement( "recentlyUsedEffects" ); { int nFX = 0; QString FXname; foreach( FXname, m_recentFX ) { LocalFileMng::writeXmlString( recentFXNode, "FX", FXname ); if ( ++nFX > 10 ) break; } } rootNode.appendChild( recentFXNode ); std::list::const_iterator cur_Server; QDomNode serverListNode = doc.createElement( "serverList" ); for( cur_Server = sServerList.begin(); cur_Server != sServerList.end(); ++cur_Server ){ LocalFileMng::writeXmlString( serverListNode , QString("server") , QString( *cur_Server ) ); } rootNode.appendChild( serverListNode ); std::list::const_iterator cur_patternCategories; QDomNode patternCategoriesNode = doc.createElement( "patternCategories" ); for( cur_patternCategories = m_patternCategories.begin(); cur_patternCategories != m_patternCategories.end(); ++cur_patternCategories ){ LocalFileMng::writeXmlString( patternCategoriesNode , QString("categories") , QString( *cur_patternCategories ) ); } rootNode.appendChild( patternCategoriesNode ); LocalFileMng::writeXmlString( rootNode, "lastNews", m_sLastNews ); //---- AUDIO ENGINE ---- QDomNode audioEngineNode = doc.createElement( "audio_engine" ); { // audio driver LocalFileMng::writeXmlString( audioEngineNode, "audio_driver", m_sAudioDriver ); // use metronome LocalFileMng::writeXmlString( audioEngineNode, "use_metronome", m_bUseMetronome ? "true": "false" ); LocalFileMng::writeXmlString( audioEngineNode, "metronome_volume", QString("%1").arg( m_fMetronomeVolume ) ); LocalFileMng::writeXmlString( audioEngineNode, "maxNotes", QString("%1").arg( m_nMaxNotes ) ); LocalFileMng::writeXmlString( audioEngineNode, "buffer_size", QString("%1").arg( m_nBufferSize ) ); LocalFileMng::writeXmlString( audioEngineNode, "samplerate", QString("%1").arg( m_nSampleRate ) ); //// OSS DRIVER //// QDomNode ossDriverNode = doc.createElement( "oss_driver" ); { LocalFileMng::writeXmlString( ossDriverNode, "ossDevice", m_sOSSDevice ); } audioEngineNode.appendChild( ossDriverNode ); //// JACK DRIVER //// QDomNode jackDriverNode = doc.createElement( "jack_driver" ); { LocalFileMng::writeXmlString( jackDriverNode, "jack_port_name_1", m_sJackPortName1 ); // jack port name 1 LocalFileMng::writeXmlString( jackDriverNode, "jack_port_name_2", m_sJackPortName2 ); // jack port name 2 // jack transport slave QString sMode; if ( m_bJackTransportMode == NO_JACK_TRANSPORT ) { sMode = "NO_JACK_TRANSPORT"; } else if ( m_bJackTransportMode == USE_JACK_TRANSPORT ) { sMode = "USE_JACK_TRANSPORT"; } LocalFileMng::writeXmlString( jackDriverNode, "jack_transport_mode", sMode ); //jack time master QString tmMode; if ( m_bJackMasterMode == NO_JACK_TIME_MASTER ) { tmMode = "NO_JACK_TIME_MASTER"; } else if ( m_bJackMasterMode == USE_JACK_TIME_MASTER ) { tmMode = "NO_JACK_TIME_MASTER"; } LocalFileMng::writeXmlString( jackDriverNode, "jack_transport_mode_master", tmMode ); //~ jack time master // jack default connection QString jackConnectDefaultsString = "false"; if ( m_bJackConnectDefaults ) { jackConnectDefaultsString = "true"; } LocalFileMng::writeXmlString( jackDriverNode, "jack_connect_defaults", jackConnectDefaultsString ); //pre-fader or post-fader track outputs ? LocalFileMng::writeXmlString( jackDriverNode, "jack_track_output_mode", QString("%1").arg( m_nJackTrackOutputMode )); // jack track outs QString jackTrackOutsString = "false"; if ( m_bJackTrackOuts ) { jackTrackOutsString = "true"; } LocalFileMng::writeXmlString( jackDriverNode, "jack_track_outs", jackTrackOutsString ); } audioEngineNode.appendChild( jackDriverNode ); //// ALSA AUDIO DRIVER //// QDomNode alsaAudioDriverNode = doc.createElement( "alsa_audio_driver" ); { LocalFileMng::writeXmlString( alsaAudioDriverNode, "alsa_audio_device", m_sAlsaAudioDevice ); } audioEngineNode.appendChild( alsaAudioDriverNode ); /// MIDI DRIVER /// QDomNode midiDriverNode = doc.createElement( "midi_driver" ); { LocalFileMng::writeXmlString( midiDriverNode, "driverName", m_sMidiDriver ); LocalFileMng::writeXmlString( midiDriverNode, "port_name", m_sMidiPortName ); LocalFileMng::writeXmlString( midiDriverNode, "channel_filter", QString("%1").arg( m_nMidiChannelFilter ) ); if ( m_bMidiNoteOffIgnore ) { LocalFileMng::writeXmlString( midiDriverNode, "ignore_note_off", "true" ); } else { LocalFileMng::writeXmlString( midiDriverNode, "ignore_note_off", "false" ); } if ( m_bMidiDiscardNoteAfterAction ) { LocalFileMng::writeXmlString( midiDriverNode, "discard_note_after_action", "true" ); } else { LocalFileMng::writeXmlString( midiDriverNode, "discard_note_after_action", "false" ); } } audioEngineNode.appendChild( midiDriverNode ); } rootNode.appendChild( audioEngineNode ); //---- GUI ---- QDomNode guiNode = doc.createElement( "gui" ); { LocalFileMng::writeXmlString( guiNode, "QTStyle", m_sQTStyle ); LocalFileMng::writeXmlString( guiNode, "application_font_family", applicationFontFamily ); LocalFileMng::writeXmlString( guiNode, "application_font_pointsize", QString("%1").arg( applicationFontPointSize ) ); LocalFileMng::writeXmlString( guiNode, "mixer_font_family", mixerFontFamily ); LocalFileMng::writeXmlString( guiNode, "mixer_font_pointsize", QString("%1").arg( mixerFontPointSize ) ); LocalFileMng::writeXmlString( guiNode, "mixer_falloff_speed", QString("%1").arg( mixerFalloffSpeed ) ); LocalFileMng::writeXmlString( guiNode, "patternEditorGridResolution", QString("%1").arg( m_nPatternEditorGridResolution ) ); LocalFileMng::writeXmlString( guiNode, "patternEditorGridHeight", QString("%1").arg( m_nPatternEditorGridHeight ) ); LocalFileMng::writeXmlString( guiNode, "patternEditorGridWidth", QString("%1").arg( m_nPatternEditorGridWidth ) ); LocalFileMng::writeXmlBool( guiNode, "patternEditorUsingTriplets", m_bPatternEditorUsingTriplets ); LocalFileMng::writeXmlBool( guiNode, "showInstrumentPeaks", m_bShowInstrumentPeaks ); LocalFileMng::writeXmlBool( guiNode, "isFXTabVisible", m_bIsFXTabVisible ); // MainForm window properties writeWindowProperties( guiNode, "mainForm_properties", mainFormProperties ); writeWindowProperties( guiNode, "mixer_properties", mixerProperties ); writeWindowProperties( guiNode, "patternEditor_properties", patternEditorProperties ); writeWindowProperties( guiNode, "songEditor_properties", songEditorProperties ); writeWindowProperties( guiNode, "drumkitManager_properties", drumkitManagerProperties ); writeWindowProperties( guiNode, "audioEngineInfo_properties", audioEngineInfoProperties ); for ( unsigned nFX = 0; nFX < MAX_FX; nFX++ ) { QString sNode = QString("ladspaFX_properties%1").arg( nFX ); writeWindowProperties( guiNode, sNode, m_ladspaProperties[nFX] ); } LocalFileMng::writeXmlBool( guiNode, "followPlayhead", m_bFollowPlayhead ); //beatcounter QString bcMode; if ( m_bbc == BC_OFF ) { bcMode = "BC_OFF"; } else if ( m_bbc == BC_ON ) { bcMode = "BC_ON"; } LocalFileMng::writeXmlString( guiNode, "bc", bcMode ); QString setPlay; if ( m_mmcsetplay == SET_PLAY_OFF ) { setPlay = "SET_PLAY_OFF"; } else if ( m_mmcsetplay == SET_PLAY_ON ) { setPlay = "SET_PLAY_ON"; } LocalFileMng::writeXmlString( guiNode, "setplay", setPlay ); LocalFileMng::writeXmlString( guiNode, "countoffset", QString("%1").arg(m_countOffset) ); LocalFileMng::writeXmlString( guiNode, "playoffset", QString("%1").arg(m_startOffset) ); //~ beatcounter //SoundLibraryPanel expand items LocalFileMng::writeXmlString( guiNode, "expandSongItem", __expandSongItem ? "true": "false" ); LocalFileMng::writeXmlString( guiNode, "expandPatternItem", __expandPatternItem ? "true": "false" ); // User interface style writeUIStyle( guiNode ); } rootNode.appendChild( guiNode ); //---- FILES ---- QDomNode filesNode = doc.createElement( "files" ); { // last used song LocalFileMng::writeXmlString( filesNode, "lastSongFilename", m_lastSongFilename ); LocalFileMng::writeXmlString( filesNode, "lastPlaylistFilename", m_lastPlaylistFilename ); LocalFileMng::writeXmlString( filesNode, "defaulteditor", m_sDefaultEditor ); } rootNode.appendChild( filesNode ); MidiMap * mM = MidiMap::get_instance(); std::map< QString, MidiAction* > mmcMap = mM->getMMCMap(); //---- MidiMap ---- QDomNode midiEventMapNode = doc.createElement( "midiEventMap" ); std::map< QString, MidiAction* >::iterator dIter( mmcMap.begin() ); for( dIter = mmcMap.begin(); dIter != mmcMap.end(); dIter++ ){ QString event = dIter->first; MidiAction * pAction = dIter->second; if ( pAction->getType() != "NOTHING" ){ QDomNode midiEventNode = doc.createElement( "midiEvent" ); LocalFileMng::writeXmlString( midiEventNode, "mmcEvent" , event ); LocalFileMng::writeXmlString( midiEventNode, "action" , pAction->getType()); LocalFileMng::writeXmlString( midiEventNode, "parameter" , pAction->getParameter1() ); midiEventMapNode.appendChild( midiEventNode ); } } for( int note=0; note < 128; note++ ){ MidiAction * pAction = mM->getNoteAction( note ); if( pAction != NULL && pAction->getType() != "NOTHING") { QDomNode midiEventNode = doc.createElement( "midiEvent" ); LocalFileMng::writeXmlString( midiEventNode, "noteEvent" , QString("NOTE") ); LocalFileMng::writeXmlString( midiEventNode, "eventParameter" , QString::number( note ) ); LocalFileMng::writeXmlString( midiEventNode, "action" , pAction->getType() ); LocalFileMng::writeXmlString( midiEventNode, "parameter" , pAction->getParameter1() ); midiEventMapNode.appendChild(midiEventNode); } } for( int parameter=0; parameter < 128; parameter++ ){ MidiAction * pAction = mM->getCCAction( parameter ); if( pAction != NULL && pAction->getType() != "NOTHING") { QDomNode midiEventNode = doc.createElement( "midiEvent" ); LocalFileMng::writeXmlString( midiEventNode, "ccEvent" , QString("CC") ); LocalFileMng::writeXmlString( midiEventNode, "eventParameter" , QString::number( parameter ) ); LocalFileMng::writeXmlString( midiEventNode, "action" , pAction->getType() ); LocalFileMng::writeXmlString( midiEventNode, "parameter" , pAction->getParameter1() ); midiEventMapNode.appendChild( midiEventNode ); } } rootNode.appendChild( midiEventMapNode ); doc.appendChild( rootNode ); QFile file( filename ); if ( !file.open(QIODevice::WriteOnly) ) return; QTextStream TextStream( &file ); doc.save( TextStream, 1 ); file.close(); } /// /// Create preferences directory /// void Preferences::createPreferencesDirectory() { QString prefDir = m_sPreferencesDirectory; INFOLOG( "Creating preference file directory in " + prefDir ); QDir dir; dir.mkdir( prefDir ); } /// /// Create data directory /// void Preferences::createDataDirectory() { QString sDir = m_sDataDirectory; INFOLOG( "Creating data directory in " + sDir ); QDir dir; dir.mkdir( sDir ); // mkdir(dir.c_str(),S_IRWXU); } void Preferences::createSoundLibraryDirectories() { QString sDir = m_sDataDirectory; QString sDrumkitDir; QString sSongDir; QString sPatternDir; QString sPlaylistDir; INFOLOG( "Creating soundLibrary directories in " + sDir ); sDrumkitDir = sDir + "/drumkits"; sSongDir = sDir + "/songs"; sPatternDir = sDir + "/patterns"; sPlaylistDir = sDir + "/playlists"; QDir dir; dir.mkdir( sDrumkitDir ); dir.mkdir( sSongDir ); dir.mkdir( sPatternDir ); dir.mkdir( sPlaylistDir ); } void Preferences::setMostRecentFX( QString FX_name ) { int pos = m_recentFX.indexOf( FX_name ); if ( pos != -1 ) m_recentFX.removeAt( pos ); m_recentFX.push_front( FX_name ); } void Preferences::setRecentFiles( std::vector recentFiles ) { // find single filenames. (skip duplicates) std::vector temp; for ( unsigned i = 0; i < recentFiles.size(); i++ ) { QString sFilename = recentFiles[ i ]; bool bExists = false; for ( unsigned j = 0; j < temp.size(); j++ ) { if ( sFilename == temp[ j ] ) { bExists = true; break; } } if ( !bExists ) { temp.push_back( sFilename ); } } m_recentFiles = temp; } /// Read the xml nodes related to window properties WindowProperties Preferences::readWindowProperties( QDomNode parent, const QString& windowName, WindowProperties defaultProp ) { WindowProperties prop = defaultProp; QDomNode windowPropNode = parent.firstChildElement( windowName ); if ( windowPropNode.isNull() ) { WARNINGLOG( "Error reading configuration file: " + windowName + " node not found" ); } else { prop.visible = LocalFileMng::readXmlBool( windowPropNode, "visible", true ); prop.x = LocalFileMng::readXmlInt( windowPropNode, "x", prop.x ); prop.y = LocalFileMng::readXmlInt( windowPropNode, "y", prop.y ); prop.width = LocalFileMng::readXmlInt( windowPropNode, "width", prop.width ); prop.height = LocalFileMng::readXmlInt( windowPropNode, "height", prop.height ); } return prop; } /// Write the xml nodes related to window properties void Preferences::writeWindowProperties( QDomNode parent, const QString& windowName, const WindowProperties& prop ) { QDomDocument doc; QDomNode windowPropNode = doc.createElement( windowName ); if ( prop.visible ) { LocalFileMng::writeXmlString( windowPropNode, "visible", "true" ); } else { LocalFileMng::writeXmlString( windowPropNode, "visible", "false" ); } LocalFileMng::writeXmlString( windowPropNode, "x", QString("%1").arg( prop.x ) ); LocalFileMng::writeXmlString( windowPropNode, "y", QString("%1").arg( prop.y ) ); LocalFileMng::writeXmlString( windowPropNode, "width", QString("%1").arg( prop.width ) ); LocalFileMng::writeXmlString( windowPropNode, "height", QString("%1").arg( prop.height ) ); parent.appendChild( windowPropNode ); } void Preferences::writeUIStyle( QDomNode parent ) { QDomDocument doc; QDomNode node = doc.createElement( "UI_Style" ); // SONG EDITOR QDomNode songEditorNode = doc.createElement( "songEditor" ); LocalFileMng::writeXmlString( songEditorNode, "backgroundColor", m_pDefaultUIStyle->m_songEditor_backgroundColor.toStringFmt() ); LocalFileMng::writeXmlString( songEditorNode, "alternateRowColor", m_pDefaultUIStyle->m_songEditor_alternateRowColor.toStringFmt() ); LocalFileMng::writeXmlString( songEditorNode, "selectedRowColor", m_pDefaultUIStyle->m_songEditor_selectedRowColor.toStringFmt() ); LocalFileMng::writeXmlString( songEditorNode, "lineColor", m_pDefaultUIStyle->m_songEditor_lineColor.toStringFmt() ); LocalFileMng::writeXmlString( songEditorNode, "textColor", m_pDefaultUIStyle->m_songEditor_textColor.toStringFmt() ); LocalFileMng::writeXmlString( songEditorNode, "pattern1Color", m_pDefaultUIStyle->m_songEditor_pattern1Color.toStringFmt() ); node.appendChild( songEditorNode ); // PATTERN EDITOR QDomNode patternEditorNode = doc.createElement( "patternEditor" ); LocalFileMng::writeXmlString( patternEditorNode, "backgroundColor", m_pDefaultUIStyle->m_patternEditor_backgroundColor.toStringFmt() ); LocalFileMng::writeXmlString( patternEditorNode, "alternateRowColor", m_pDefaultUIStyle->m_patternEditor_alternateRowColor.toStringFmt() ); LocalFileMng::writeXmlString( patternEditorNode, "selectedRowColor", m_pDefaultUIStyle->m_patternEditor_selectedRowColor.toStringFmt() ); LocalFileMng::writeXmlString( patternEditorNode, "textColor", m_pDefaultUIStyle->m_patternEditor_textColor.toStringFmt() ); LocalFileMng::writeXmlString( patternEditorNode, "noteColor", m_pDefaultUIStyle->m_patternEditor_noteColor.toStringFmt() ); if (m_pDefaultUIStyle->m_patternEditor_noteoffColor.toStringFmt() == "-1,-1,-1" ){ m_pDefaultUIStyle->m_patternEditor_noteoffColor = H2RGBColor( "100, 100, 200" ); } LocalFileMng::writeXmlString( patternEditorNode, "noteoffColor", m_pDefaultUIStyle->m_patternEditor_noteoffColor.toStringFmt() ); LocalFileMng::writeXmlString( patternEditorNode, "lineColor", m_pDefaultUIStyle->m_patternEditor_lineColor.toStringFmt() ); LocalFileMng::writeXmlString( patternEditorNode, "line1Color", m_pDefaultUIStyle->m_patternEditor_line1Color.toStringFmt() ); LocalFileMng::writeXmlString( patternEditorNode, "line2Color", m_pDefaultUIStyle->m_patternEditor_line2Color.toStringFmt() ); LocalFileMng::writeXmlString( patternEditorNode, "line3Color", m_pDefaultUIStyle->m_patternEditor_line3Color.toStringFmt() ); LocalFileMng::writeXmlString( patternEditorNode, "line4Color", m_pDefaultUIStyle->m_patternEditor_line4Color.toStringFmt() ); LocalFileMng::writeXmlString( patternEditorNode, "line5Color", m_pDefaultUIStyle->m_patternEditor_line5Color.toStringFmt() ); node.appendChild( patternEditorNode ); parent.appendChild( node ); } void Preferences::readUIStyle( QDomNode parent ) { // SONG EDITOR QDomNode pSongEditorNode = parent.firstChildElement( "songEditor" ); if ( !pSongEditorNode.isNull() ) { m_pDefaultUIStyle->m_songEditor_backgroundColor = H2RGBColor( LocalFileMng::readXmlString( pSongEditorNode, "backgroundColor", m_pDefaultUIStyle->m_songEditor_backgroundColor.toStringFmt() ) ); m_pDefaultUIStyle->m_songEditor_alternateRowColor = H2RGBColor( LocalFileMng::readXmlString( pSongEditorNode, "alternateRowColor", m_pDefaultUIStyle->m_songEditor_alternateRowColor.toStringFmt() ) ); m_pDefaultUIStyle->m_songEditor_selectedRowColor = H2RGBColor( LocalFileMng::readXmlString( pSongEditorNode, "selectedRowColor", m_pDefaultUIStyle->m_songEditor_selectedRowColor.toStringFmt() ) ); m_pDefaultUIStyle->m_songEditor_lineColor = H2RGBColor( LocalFileMng::readXmlString( pSongEditorNode, "lineColor", m_pDefaultUIStyle->m_songEditor_lineColor.toStringFmt() ) ); m_pDefaultUIStyle->m_songEditor_textColor = H2RGBColor( LocalFileMng::readXmlString( pSongEditorNode, "textColor", m_pDefaultUIStyle->m_songEditor_textColor.toStringFmt() ) ); m_pDefaultUIStyle->m_songEditor_pattern1Color = H2RGBColor( LocalFileMng::readXmlString( pSongEditorNode, "pattern1Color", m_pDefaultUIStyle->m_songEditor_pattern1Color.toStringFmt() ) ); } else { WARNINGLOG( "songEditor node not found" ); } // PATTERN EDITOR QDomNode pPatternEditorNode = parent.firstChildElement( "patternEditor" ); if ( !pPatternEditorNode.isNull() ) { m_pDefaultUIStyle->m_patternEditor_backgroundColor = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "backgroundColor", m_pDefaultUIStyle->m_patternEditor_backgroundColor.toStringFmt() ) ); m_pDefaultUIStyle->m_patternEditor_alternateRowColor = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "alternateRowColor", m_pDefaultUIStyle->m_patternEditor_alternateRowColor.toStringFmt() ) ); m_pDefaultUIStyle->m_patternEditor_selectedRowColor = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "selectedRowColor", m_pDefaultUIStyle->m_patternEditor_selectedRowColor.toStringFmt() ) ); m_pDefaultUIStyle->m_patternEditor_textColor = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "textColor", m_pDefaultUIStyle->m_patternEditor_textColor.toStringFmt() ) ); m_pDefaultUIStyle->m_patternEditor_noteColor = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "noteColor", m_pDefaultUIStyle->m_patternEditor_noteColor.toStringFmt() ) ); m_pDefaultUIStyle->m_patternEditor_noteoffColor = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "noteoffColor", m_pDefaultUIStyle->m_patternEditor_noteoffColor.toStringFmt() ) ); m_pDefaultUIStyle->m_patternEditor_lineColor = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "lineColor", m_pDefaultUIStyle->m_patternEditor_lineColor.toStringFmt() ) ); m_pDefaultUIStyle->m_patternEditor_line1Color = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "line1Color", m_pDefaultUIStyle->m_patternEditor_line1Color.toStringFmt() ) ); m_pDefaultUIStyle->m_patternEditor_line2Color = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "line2Color", m_pDefaultUIStyle->m_patternEditor_line2Color.toStringFmt() ) ); m_pDefaultUIStyle->m_patternEditor_line3Color = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "line3Color", m_pDefaultUIStyle->m_patternEditor_line3Color.toStringFmt() ) ); m_pDefaultUIStyle->m_patternEditor_line4Color = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "line4Color", m_pDefaultUIStyle->m_patternEditor_line4Color.toStringFmt() ) ); m_pDefaultUIStyle->m_patternEditor_line5Color = H2RGBColor( LocalFileMng::readXmlString( pPatternEditorNode, "line5Color", m_pDefaultUIStyle->m_patternEditor_line5Color.toStringFmt() ) ); } else { WARNINGLOG( "patternEditor node not found" ); } } // ----------------------- const char* WindowProperties::__class_name = "WindowProperties"; WindowProperties::WindowProperties() : Object( __class_name ) { // infoLog( "INIT" ); x = 0; y = 0; width = 0; height = 0; visible = true; } WindowProperties::~WindowProperties() { // infoLog( "DESTROY" ); } // ::::::::::::::::::::::::::::::: const char* UIStyle::__class_name = "UIStyle"; UIStyle::UIStyle() : Object( __class_name ) { // infoLog( "INIT" ); } // :::::::::::::::::::::::::::::::::::::: const char* H2RGBColor::__class_name = "H2RGBColor"; H2RGBColor::H2RGBColor( int r, int g, int b ) : Object( __class_name ) , m_red( r ) , m_green( g ) , m_blue( b ) { // infoLog( "INIT" ); m_red %= 256; m_green %= 256; m_blue %= 256; } H2RGBColor::~H2RGBColor() { // infoLog( "DESTROY" ); } H2RGBColor::H2RGBColor( const QString& sColor ) : Object( __class_name ) { // infoLog( "INIT " + sColor ); QString temp = sColor; QStringList list = temp.split(","); m_red = list[0].toInt(); m_green = list[1].toInt(); m_blue = list[2].toInt(); m_red %= 256; m_green %= 256; m_blue %= 256; /* int nPos = temp.indexOf( ',' ); QString sRed = temp.substr( 0, nPos ); temp.erase( 0, nPos + 1 ); nPos = temp.find( ',' ); QString sGreen = temp.substr( 0, nPos ); temp.erase( 0, nPos + 1 ); nPos = temp.find( ',' ); QString sBlue = temp.substr( 0, nPos ); m_red = atoi( sRed.c_str() ); m_green = atoi( sGreen.c_str() ); m_blue = atoi( sBlue.c_str() ); */ } QString H2RGBColor::toStringFmt() { char tmp[255]; sprintf( tmp, "%d,%d,%d", m_red, m_green, m_blue ); //string sRes = to_string( m_red ) + "," + to_string( m_green ) + "," + to_string( m_blue ); // return sRes; return QString( tmp ); } }; hydrogen-0.9.6-beta3/src/core/src/sampler/000077500000000000000000000000001211146647700203235ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/src/sampler/sampler.cpp000066400000000000000000000727771211146647700225160ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace H2Core { const char* Sampler::__class_name = "Sampler"; Sampler::Sampler() : Object( __class_name ) , __main_out_L( NULL ) , __main_out_R( NULL ) , __preview_instrument( NULL ) { INFOLOG( "INIT" ); __interpolateMode = LINEAR; __main_out_L = new float[ MAX_BUFFER_SIZE ]; __main_out_R = new float[ MAX_BUFFER_SIZE ]; // instrument used in file preview QString sEmptySampleFilename = Filesystem::empty_sample(); __preview_instrument = new Instrument( EMPTY_INSTR_ID, sEmptySampleFilename ); __preview_instrument->set_volume( 0.8 ); __preview_instrument->set_layer( new InstrumentLayer( Sample::load( sEmptySampleFilename ) ), 0 ); } Sampler::~Sampler() { INFOLOG( "DESTROY" ); delete[] __main_out_L; delete[] __main_out_R; delete __preview_instrument; __preview_instrument = NULL; } // perche' viene passata anche la canzone? E' davvero necessaria? void Sampler::process( uint32_t nFrames, Song* pSong ) { //infoLog( "[process]" ); AudioOutput* audio_output = Hydrogen::get_instance()->getAudioOutput(); assert( audio_output ); memset( __main_out_L, 0, nFrames * sizeof( float ) ); memset( __main_out_R, 0, nFrames * sizeof( float ) ); // Track output queues are zeroed by // audioEngine_process_clearAudioBuffers() // Max notes limit int m_nMaxNotes = Preferences::get_instance()->m_nMaxNotes; while ( ( int )__playing_notes_queue.size() > m_nMaxNotes ) { Note *oldNote = __playing_notes_queue[ 0 ]; __playing_notes_queue.erase( __playing_notes_queue.begin() ); oldNote->get_instrument()->dequeue(); delete oldNote; // FIXME: send note-off instead of removing the note from the list? } // eseguo tutte le note nella lista di note in esecuzione unsigned i = 0; Note* pNote; while ( i < __playing_notes_queue.size() ) { pNote = __playing_notes_queue[ i ]; // recupero una nuova nota unsigned res = __render_note( pNote, nFrames, pSong ); if ( res == 1 ) { // la nota e' finita __playing_notes_queue.erase( __playing_notes_queue.begin() + i ); pNote->get_instrument()->dequeue(); __queuedNoteOffs.push_back( pNote ); // delete pNote; // pNote = NULL; } else { ++i; // carico la prox nota } } //Queue midi note off messages for notes that have a length specified for them while ( !__queuedNoteOffs.empty() ) { pNote = __queuedNoteOffs[0]; MidiOutput* midiOut = Hydrogen::get_instance()->getMidiOutput(); if( midiOut != NULL ){ midiOut->handleQueueNoteOff( pNote->get_instrument()->get_midi_out_channel(), pNote->get_midi_key(), pNote->get_midi_velocity() ); } __queuedNoteOffs.erase( __queuedNoteOffs.begin() ); if( pNote != NULL) delete pNote; pNote = NULL; }//while } void Sampler::note_on( Note *note ) { //infoLog( "[noteOn]" ); assert( note ); note->get_adsr()->attack(); Instrument *pInstr = note->get_instrument(); // mute group int mute_grp = pInstr->get_mute_group(); if ( mute_grp != -1 ) { // remove all notes using the same mute group for ( unsigned j = 0; j < __playing_notes_queue.size(); j++ ) { // delete older note Note *pNote = __playing_notes_queue[ j ]; if ( ( pNote->get_instrument() != pInstr ) && ( pNote->get_instrument()->get_mute_group() == mute_grp ) ) { pNote->get_adsr()->release(); } } } //note off notes if( note->get_note_off() ){ for ( unsigned j = 0; j < __playing_notes_queue.size(); j++ ) { Note *pNote = __playing_notes_queue[ j ]; if ( ( pNote->get_instrument() == pInstr ) ) { //ERRORLOG("note_off"); pNote->get_adsr()->release(); } } } pInstr->enqueue(); if( !note->get_note_off() ){ __playing_notes_queue.push_back( note ); } if( Hydrogen::get_instance()->getMidiOutput() != NULL ){ Hydrogen::get_instance()->getMidiOutput()->handleQueueNote( note ); } } void Sampler::midi_keyboard_note_off( int key ) { for ( unsigned j = 0; j < __playing_notes_queue.size(); j++ ) { Note *pNote = __playing_notes_queue[ j ]; if ( ( pNote->get_midi_msg() == key) ) { pNote->get_adsr()->release(); } } } void Sampler::note_off( Note* note ) /* * this old note_off function is only used by right click on mixer channel strip play button * all other note_off stuff will handle in midi_keyboard_note_off() and note_on() */ { Instrument *pInstr = note->get_instrument(); // find the notes using the same instrument, and release them for ( unsigned j = 0; j < __playing_notes_queue.size(); j++ ) { Note *pNote = __playing_notes_queue[ j ]; if ( pNote->get_instrument() == pInstr ) { pNote->get_adsr()->release(); } } delete note; } /// Render a note /// Return 0: the note is not ended /// Return 1: the note is ended unsigned Sampler::__render_note( Note* pNote, unsigned nBufferSize, Song* pSong ) { //infoLog( "[renderNote] instr: " + pNote->getInstrument()->m_sName ); assert( pSong ); unsigned int nFramepos; Hydrogen* pEngine = Hydrogen::get_instance(); AudioOutput* audio_output = pEngine->getAudioOutput(); if ( pEngine->getState() == STATE_PLAYING ) { nFramepos = audio_output->m_transport.m_nFrames; } else { // use this to support realtime events when not playing nFramepos = pEngine->getRealtimeFrames(); } Instrument *pInstr = pNote->get_instrument(); if ( !pInstr ) { ERRORLOG( "NULL instrument" ); return 1; } float fLayerGain = 1.0; float fLayerPitch = 0.0; // scelgo il sample da usare in base alla velocity Sample *pSample = NULL; for ( unsigned nLayer = 0; nLayer < MAX_LAYERS; ++nLayer ) { InstrumentLayer *pLayer = pInstr->get_layer( nLayer ); if ( pLayer == NULL ) continue; if ( ( pNote->get_velocity() >= pLayer->get_start_velocity() ) && ( pNote->get_velocity() <= pLayer->get_end_velocity() ) ) { pSample = pLayer->get_sample(); fLayerGain = pLayer->get_gain(); fLayerPitch = pLayer->get_pitch(); break; } } if ( !pSample ) { QString dummy = QString( "NULL sample for instrument %1. Note velocity: %2" ).arg( pInstr->get_name() ).arg( pNote->get_velocity() ); WARNINGLOG( dummy ); return 1; } if ( pNote->get_sample_position() >= pSample->get_frames() ) { WARNINGLOG( "sample position out of bounds. The layer has been resized during note play?" ); return 1; } int noteStartInFrames = ( int ) ( pNote->get_position() * audio_output->m_transport.m_nTickSize ) + pNote->get_humanize_delay(); int nInitialSilence = 0; if ( noteStartInFrames > ( int ) nFramepos ) { // scrivo silenzio prima dell'inizio della nota nInitialSilence = noteStartInFrames - nFramepos; int nFrames = nBufferSize - nInitialSilence; if ( nFrames < 0 ) { int noteStartInFramesNoHumanize = ( int )pNote->get_position() * audio_output->m_transport.m_nTickSize; if ( noteStartInFramesNoHumanize > ( int )( nFramepos + nBufferSize ) ) { // this note is not valid. it's in the future...let's skip it.... ERRORLOG( QString( "Note pos in the future?? Current frames: %1, note frame pos: %2" ).arg( nFramepos ).arg(noteStartInFramesNoHumanize ) ); //pNote->dumpInfo(); return 1; } // delay note execution //INFOLOG( "Delaying note execution. noteStartInFrames: " + to_string( noteStartInFrames ) + ", nFramePos: " + to_string( nFramepos ) ); return 0; } } float cost_L = 1.0f; float cost_R = 1.0f; float cost_track_L = 1.0f; float cost_track_R = 1.0f; if ( pInstr->is_muted() || pSong->__is_muted ) { // is instrument muted? cost_L = 0.0; cost_R = 0.0; if ( Preferences::get_instance()->m_nJackTrackOutputMode == 0 ) { // Post-Fader cost_track_L = 0.0; cost_track_R = 0.0; } } else { // Precompute some values... cost_L = cost_L * pNote->get_velocity(); // note velocity cost_L = cost_L * pNote->get_pan_l(); // note pan cost_L = cost_L * fLayerGain; // layer gain cost_L = cost_L * pInstr->get_pan_l(); // instrument pan cost_L = cost_L * pInstr->get_gain(); // instrument gain cost_L = cost_L * pInstr->get_volume(); // instrument volume if ( Preferences::get_instance()->m_nJackTrackOutputMode == 0 ) { // Post-Fader cost_track_L = cost_L * 2; } cost_L = cost_L * pSong->get_volume(); // song volume cost_L = cost_L * 2; // max pan is 0.5 cost_R = cost_R * pNote->get_velocity(); // note velocity cost_R = cost_R * pNote->get_pan_r(); // note pan cost_R = cost_R * fLayerGain; // layer gain cost_R = cost_R * pInstr->get_pan_r(); // instrument pan cost_R = cost_R * pInstr->get_gain(); // instrument gain cost_R = cost_R * pInstr->get_volume(); // instrument volume if ( Preferences::get_instance()->m_nJackTrackOutputMode == 0 ) { // Post-Fader cost_track_R = cost_R * 2; } cost_R = cost_R * pSong->get_volume(); // song pan cost_R = cost_R * 2; // max pan is 0.5 } // direct track outputs only use velocity if ( Preferences::get_instance()->m_nJackTrackOutputMode == 1 ) { cost_track_L = cost_track_L * pNote->get_velocity(); cost_track_L = cost_track_L * fLayerGain; cost_track_R = cost_track_L; } // Se non devo fare resample (drumkit) posso evitare di utilizzare i float e gestire il tutto in // maniera ottimizzata // constant^12 = 2, so constant = 2^(1/12) = 1.059463. // float nStep = 1.0;1.0594630943593 float fTotalPitch = pNote->get_total_pitch() + fLayerPitch; //_INFOLOG( "total pitch: " + to_string( fTotalPitch ) ); if ( fTotalPitch == 0.0 && pSample->get_sample_rate() == audio_output->getSampleRate() ) { // NO RESAMPLE return __render_note_no_resample( pSample, pNote, nBufferSize, nInitialSilence, cost_L, cost_R, cost_track_L, cost_track_R, pSong ); } else { // RESAMPLE return __render_note_resample( pSample, pNote, nBufferSize, nInitialSilence, cost_L, cost_R, cost_track_L, cost_track_R, fLayerPitch, pSong ); } } int Sampler::__render_note_no_resample( Sample *pSample, Note *pNote, int nBufferSize, int nInitialSilence, float cost_L, float cost_R, float cost_track_L, float cost_track_R, Song* pSong ) { AudioOutput* audio_output = Hydrogen::get_instance()->getAudioOutput(); int retValue = 1; // the note is ended int nNoteLength = -1; if ( pNote->get_length() != -1 ) { nNoteLength = ( int )( pNote->get_length() * audio_output->m_transport.m_nTickSize ); } int nAvail_bytes = pSample->get_frames() - ( int )pNote->get_sample_position(); // verifico il numero di frame disponibili ancora da eseguire if ( nAvail_bytes > nBufferSize - nInitialSilence ) { // il sample e' piu' grande del buffersize // imposto il numero dei bytes disponibili uguale al buffersize nAvail_bytes = nBufferSize - nInitialSilence; retValue = 0; // the note is not ended yet } //ADSR *pADSR = pNote->m_pADSR; int nInitialBufferPos = nInitialSilence; int nInitialSamplePos = ( int )pNote->get_sample_position(); int nSamplePos = nInitialSamplePos; int nTimes = nInitialBufferPos + nAvail_bytes; int nInstrument = pSong->get_instrument_list()->index( pNote->get_instrument() ); float *pSample_data_L = pSample->get_data_l(); float *pSample_data_R = pSample->get_data_r(); float fInstrPeak_L = pNote->get_instrument()->get_peak_l(); // this value will be reset to 0 by the mixer.. float fInstrPeak_R = pNote->get_instrument()->get_peak_r(); // this value will be reset to 0 by the mixer.. float fADSRValue; float fVal_L; float fVal_R; /* * nInstrument could be -1 if the instrument is not found in the current drumset. * This happens when someone is using the prelistening function of the soundlibrary. */ if( nInstrument < 0 ) { nInstrument = 0; } #ifdef H2CORE_HAVE_JACK JackOutput* jao = 0; float *track_out_L = 0; float *track_out_R = 0; if( audio_output->has_track_outs() && (jao = dynamic_cast(audio_output)) ) { track_out_L = jao->getTrackOut_L( nInstrument ); track_out_R = jao->getTrackOut_R( nInstrument ); } #endif for ( int nBufferPos = nInitialBufferPos; nBufferPos < nTimes; ++nBufferPos ) { if ( ( nNoteLength != -1 ) && ( nNoteLength <= pNote->get_sample_position() ) ) { if ( pNote->get_adsr()->release() == 0 ) { retValue = 1; // the note is ended } } fADSRValue = pNote->get_adsr()->get_value( 1 ); fVal_L = pSample_data_L[ nSamplePos ] * fADSRValue; fVal_R = pSample_data_R[ nSamplePos ] * fADSRValue; // Low pass resonant filter if ( pNote->get_instrument()->is_filter_active() ) { pNote->compute_lr_values( &fVal_L, &fVal_R ); } #ifdef H2CORE_HAVE_JACK if( track_out_L ) { track_out_L[nBufferPos] += fVal_L * cost_track_L; } if( track_out_R ) { track_out_R[nBufferPos] += fVal_R * cost_track_R; } #endif fVal_L = fVal_L * cost_L; fVal_R = fVal_R * cost_R; // update instr peak if ( fVal_L > fInstrPeak_L ) { fInstrPeak_L = fVal_L; } if ( fVal_R > fInstrPeak_R ) { fInstrPeak_R = fVal_R; } // to main mix __main_out_L[nBufferPos] += fVal_L; __main_out_R[nBufferPos] += fVal_R; ++nSamplePos; } pNote->update_sample_position( nAvail_bytes ); pNote->get_instrument()->set_peak_l( fInstrPeak_L ); pNote->get_instrument()->set_peak_r( fInstrPeak_R ); #ifdef H2CORE_HAVE_LADSPA float masterVol = pSong->get_volume(); // LADSPA for ( unsigned nFX = 0; nFX < MAX_FX; ++nFX ) { LadspaFX *pFX = Effects::get_instance()->getLadspaFX( nFX ); float fLevel = pNote->get_instrument()->get_fx_level( nFX ); if ( ( pFX ) && ( fLevel != 0.0 ) ) { fLevel = fLevel * pFX->getVolume(); float *pBuf_L = pFX->m_pBuffer_L; float *pBuf_R = pFX->m_pBuffer_R; // float fFXCost_L = cost_L * fLevel; // float fFXCost_R = cost_R * fLevel; float fFXCost_L = fLevel * masterVol; float fFXCost_R = fLevel * masterVol; int nBufferPos = nInitialBufferPos; int nSamplePos = nInitialSamplePos; for ( int i = 0; i < nAvail_bytes; ++i ) { pBuf_L[ nBufferPos ] += pSample_data_L[ nSamplePos ] * fFXCost_L; pBuf_R[ nBufferPos ] += pSample_data_R[ nSamplePos ] * fFXCost_R; ++nSamplePos; ++nBufferPos; } } } // ~LADSPA #endif return retValue; } int Sampler::__render_note_resample( Sample *pSample, Note *pNote, int nBufferSize, int nInitialSilence, float cost_L, float cost_R, float cost_track_L, float cost_track_R, float fLayerPitch, Song* pSong ) { AudioOutput* audio_output = Hydrogen::get_instance()->getAudioOutput(); int nNoteLength = -1; if ( pNote->get_length() != -1 ) { nNoteLength = ( int )( pNote->get_length() * audio_output->m_transport.m_nTickSize ); } float fNotePitch = pNote->get_total_pitch() + fLayerPitch; float fStep = pow( 1.0594630943593, ( double )fNotePitch ); // _ERRORLOG( QString("pitch: %1, step: %2" ).arg(fNotePitch).arg( fStep) ); fStep *= ( float )pSample->get_sample_rate() / audio_output->getSampleRate(); // Adjust for audio driver sample rate int nAvail_bytes = ( int )( ( float )( pSample->get_frames() - pNote->get_sample_position() ) / fStep ); // verifico il numero di frame disponibili ancora da eseguire int retValue = 1; // the note is ended if ( nAvail_bytes > nBufferSize - nInitialSilence ) { // il sample e' piu' grande del buffersize // imposto il numero dei bytes disponibili uguale al buffersize nAvail_bytes = nBufferSize - nInitialSilence; retValue = 0; // the note is not ended yet } // ADSR *pADSR = pNote->m_pADSR; int nInitialBufferPos = nInitialSilence; float fInitialSamplePos = pNote->get_sample_position(); double fSamplePos = pNote->get_sample_position(); int nTimes = nInitialBufferPos + nAvail_bytes; int nInstrument = pSong->get_instrument_list()->index( pNote->get_instrument() ); float *pSample_data_L = pSample->get_data_l(); float *pSample_data_R = pSample->get_data_r(); float fInstrPeak_L = pNote->get_instrument()->get_peak_l(); // this value will be reset to 0 by the mixer.. float fInstrPeak_R = pNote->get_instrument()->get_peak_r(); // this value will be reset to 0 by the mixer.. float fADSRValue = 1.0; float fVal_L; float fVal_R; int nSampleFrames = pSample->get_frames(); /* * nInstrument could be -1 if the instrument is not found in the current drumset. * This happens when someone is using the prelistening function of the soundlibrary. */ if( nInstrument < 0 ) { nInstrument = 0; } #ifdef H2CORE_HAVE_JACK JackOutput* jao = 0; float *track_out_L = 0; float *track_out_R = 0; if( audio_output->has_track_outs() && (jao = dynamic_cast(audio_output)) ) { track_out_L = jao->getTrackOut_L( nInstrument ); track_out_R = jao->getTrackOut_R( nInstrument ); } #endif for ( int nBufferPos = nInitialBufferPos; nBufferPos < nTimes; ++nBufferPos ) { if ( ( nNoteLength != -1 ) && ( nNoteLength <= pNote->get_sample_position() ) ) { if ( pNote->get_adsr()->release() == 0 ) { retValue = 1; // the note is ended } } int nSamplePos = ( int )fSamplePos; double fDiff = fSamplePos - nSamplePos; if ( ( nSamplePos + 1 ) >= nSampleFrames ) { //we reach the last audioframe. //set this last frame to zero do nothin wrong. fVal_L = 0.0; fVal_R = 0.0; } else { // some interpolation methods need 4 frames data. float last_l; float last_r; if ( ( nSamplePos + 2 ) >= nSampleFrames ) { last_l = 0.0; last_r = 0.0; }else { last_l = pSample_data_L[nSamplePos + 2]; last_r = pSample_data_R[nSamplePos + 2]; } switch( __interpolateMode ){ case LINEAR: fVal_L = pSample_data_L[nSamplePos] * (1 - fDiff ) + pSample_data_L[nSamplePos + 1] * fDiff; fVal_R = pSample_data_R[nSamplePos] * (1 - fDiff ) + pSample_data_R[nSamplePos + 1] * fDiff; //fVal_L = linear_Interpolate( pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], fDiff); //fVal_R = linear_Interpolate( pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], fDiff); break; case COSINE: fVal_L = cosine_Interpolate( pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], fDiff); fVal_R = cosine_Interpolate( pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], fDiff); break; case THIRD: fVal_L = third_Interpolate( pSample_data_L[ nSamplePos -1], pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], last_l, fDiff); fVal_R = third_Interpolate( pSample_data_R[ nSamplePos -1], pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], last_r, fDiff); break; case CUBIC: fVal_L = cubic_Interpolate( pSample_data_L[ nSamplePos -1], pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], last_l, fDiff); fVal_R = cubic_Interpolate( pSample_data_R[ nSamplePos -1], pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], last_r, fDiff); break; case HERMITE: fVal_L = hermite_Interpolate( pSample_data_L[ nSamplePos -1], pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], last_l, fDiff); fVal_R = hermite_Interpolate( pSample_data_R[ nSamplePos -1], pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], last_r, fDiff); break; } } // ADSR envelope fADSRValue = pNote->get_adsr()->get_value( fStep ); fVal_L = fVal_L * fADSRValue; fVal_R = fVal_R * fADSRValue; // Low pass resonant filter if ( pNote->get_instrument()->is_filter_active() ) { pNote->compute_lr_values( &fVal_L, &fVal_R ); } #ifdef H2CORE_HAVE_JACK if( track_out_L ) { track_out_L[nBufferPos] += fVal_L * cost_track_L; } if( track_out_R ) { track_out_R[nBufferPos] += fVal_R * cost_track_R; } #endif fVal_L = fVal_L * cost_L; fVal_R = fVal_R * cost_R; // update instr peak if ( fVal_L > fInstrPeak_L ) { fInstrPeak_L = fVal_L; } if ( fVal_R > fInstrPeak_R ) { fInstrPeak_R = fVal_R; } // to main mix __main_out_L[nBufferPos] += fVal_L; __main_out_R[nBufferPos] += fVal_R; fSamplePos += fStep; } pNote->update_sample_position( nAvail_bytes * fStep ); pNote->get_instrument()->set_peak_l( fInstrPeak_L ); pNote->get_instrument()->set_peak_r( fInstrPeak_R ); #ifdef H2CORE_HAVE_LADSPA // LADSPA float masterVol = pSong->get_volume(); for ( unsigned nFX = 0; nFX < MAX_FX; ++nFX ) { LadspaFX *pFX = Effects::get_instance()->getLadspaFX( nFX ); float fLevel = pNote->get_instrument()->get_fx_level( nFX ); if ( ( pFX ) && ( fLevel != 0.0 ) ) { fLevel = fLevel * pFX->getVolume(); float *pBuf_L = pFX->m_pBuffer_L; float *pBuf_R = pFX->m_pBuffer_R; // float fFXCost_L = cost_L * fLevel; // float fFXCost_R = cost_R * fLevel; float fFXCost_L = fLevel * masterVol; float fFXCost_R = fLevel * masterVol; int nBufferPos = nInitialBufferPos; float fSamplePos = fInitialSamplePos; for ( int i = 0; i < nAvail_bytes; ++i ) { int nSamplePos = ( int )fSamplePos; double fDiff = fSamplePos - nSamplePos; if ( ( nSamplePos + 1 ) >= nSampleFrames ) { //we reach the last audioframe. //set this last frame to zero do nothin wrong. fVal_L = 0.0; fVal_R = 0.0; } else { // some interpolation methods need 4 frames data. float last_l; float last_r; if ( ( nSamplePos + 2 ) >= nSampleFrames ) { last_l = 0.0; last_r = 0.0; }else { last_l = pSample_data_L[nSamplePos + 2]; last_r = pSample_data_R[nSamplePos + 2]; } switch( __interpolateMode ){ case LINEAR: fVal_L = pSample_data_L[nSamplePos] * (1 - fDiff ) + pSample_data_L[nSamplePos + 1] * fDiff; fVal_R = pSample_data_R[nSamplePos] * (1 - fDiff ) + pSample_data_R[nSamplePos + 1] * fDiff; //fVal_L = linear_Interpolate( pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], fDiff); //fVal_R = linear_Interpolate( pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], fDiff); break; case COSINE: fVal_L = cosine_Interpolate( pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], fDiff); fVal_R = cosine_Interpolate( pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], fDiff); break; case THIRD: fVal_L = third_Interpolate( pSample_data_L[ nSamplePos -1], pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], last_l, fDiff); fVal_R = third_Interpolate( pSample_data_R[ nSamplePos -1], pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], last_r, fDiff); break; case CUBIC: fVal_L = cubic_Interpolate( pSample_data_L[ nSamplePos -1], pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], last_l, fDiff); fVal_R = cubic_Interpolate( pSample_data_R[ nSamplePos -1], pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], last_r, fDiff); break; case HERMITE: fVal_L = hermite_Interpolate( pSample_data_L[ nSamplePos -1], pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], last_l, fDiff); fVal_R = hermite_Interpolate( pSample_data_R[ nSamplePos -1], pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], last_r, fDiff); break; } // methode Interpolate produce an extra function call and eat much more time here. // so i deside to code the switch direct in the resampler methode //fVal_L = Interpolate( pSample_data_L[ nSamplePos -1], pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], pSample_data_L[nSamplePos + 2] ,fDiff); //fVal_L = Interpolate( pSample_data_R[ nSamplePos -1], pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], pSample_data_R[nSamplePos + 2] ,fDiff); } pBuf_L[ nBufferPos ] += fVal_L * fFXCost_L; pBuf_R[ nBufferPos ] += fVal_R * fFXCost_R; fSamplePos += fStep; ++nBufferPos; } } } #endif return retValue; } void Sampler::stop_playing_notes( Instrument* instrument ) { /* // send a note-off event to all notes present in the playing note queue for ( int i = 0; i < __playing_notes_queue.size(); ++i ) { Note *pNote = __playing_notes_queue[ i ]; pNote->m_pADSR->release(); } */ if ( instrument ) { // stop all notes using this instrument for ( unsigned i = 0; i < __playing_notes_queue.size(); ) { Note *pNote = __playing_notes_queue[ i ]; assert( pNote ); if ( pNote->get_instrument() == instrument ) { delete pNote; instrument->dequeue(); __playing_notes_queue.erase( __playing_notes_queue.begin() + i ); } ++i; } } else { // stop all notes // delete all copied notes in the playing notes queue for ( unsigned i = 0; i < __playing_notes_queue.size(); ++i ) { Note *pNote = __playing_notes_queue[i]; pNote->get_instrument()->dequeue(); delete pNote; } __playing_notes_queue.clear(); } } /// Preview, uses only the first layer void Sampler::preview_sample( Sample* sample, int length ) { AudioEngine::get_instance()->lock( RIGHT_HERE ); InstrumentLayer *pLayer = __preview_instrument->get_layer( 0 ); Sample *pOldSample = pLayer->get_sample(); pLayer->set_sample( sample ); Note *previewNote = new Note( __preview_instrument, 0, 1.0, 0.5, 0.5, length, 0 ); stop_playing_notes( __preview_instrument ); note_on( previewNote ); delete pOldSample; AudioEngine::get_instance()->unlock(); } void Sampler::preview_instrument( Instrument* instr ) { Instrument * old_preview; AudioEngine::get_instance()->lock( RIGHT_HERE ); stop_playing_notes( __preview_instrument ); old_preview = __preview_instrument; __preview_instrument = instr; Note *previewNote = new Note( __preview_instrument, 0, 1.0, 0.5, 0.5, MAX_NOTES, 0 ); note_on( previewNote ); // exclusive note AudioEngine::get_instance()->unlock(); delete old_preview; } void Sampler::setPlayingNotelength( Instrument* instrument, unsigned long ticks, unsigned long noteOnTick ) { if ( instrument ) { // stop all notes using this instrument Hydrogen *pEngine = Hydrogen::get_instance(); Song* mSong = pEngine->getSong(); int selectedpattern = pEngine->__get_selected_PatterNumber(); Pattern* currentPattern = NULL; if ( mSong->get_mode() == Song::PATTERN_MODE || ( pEngine->getState() != STATE_PLAYING )){ PatternList *pPatternList = mSong->get_pattern_list(); if ( ( selectedpattern != -1 ) && ( selectedpattern < ( int )pPatternList->size() ) ) { currentPattern = pPatternList->get( selectedpattern ); } }else { std::vector *pColumns = mSong->get_pattern_group_vector(); // Pattern *pPattern = NULL; int pos = pEngine->getPatternPos() +1; for ( int i = 0; i < pos; ++i ) { PatternList *pColumn = ( *pColumns )[i]; currentPattern = pColumn->get( 0 ); } } if ( currentPattern ) { int patternsize = currentPattern->get_length(); for ( unsigned nNote = 0; nNote < currentPattern->get_length(); nNote++ ) { const Pattern::notes_t* notes = currentPattern->get_notes(); FOREACH_NOTE_CST_IT_BOUND(notes,it,nNote) { Note *pNote = it->second; if ( pNote!=NULL ) { if( !Preferences::get_instance()->__playselectedinstrument ){ if ( pNote->get_instrument() == instrument && pNote->get_position() == noteOnTick ) { AudioEngine::get_instance()->lock( RIGHT_HERE ); if ( ticks > patternsize ) ticks = patternsize - noteOnTick; pNote->set_length( ticks ); Hydrogen::get_instance()->getSong()->__is_modified = true; AudioEngine::get_instance()->unlock(); // unlock the audio engine } }else { if ( pNote->get_instrument() == pEngine->getSong()->get_instrument_list()->get( pEngine->getSelectedInstrumentNumber()) && pNote->get_position() == noteOnTick ) { AudioEngine::get_instance()->lock( RIGHT_HERE ); if ( ticks > patternsize ) ticks = patternsize - noteOnTick; pNote->set_length( ticks ); Hydrogen::get_instance()->getSong()->__is_modified = true; AudioEngine::get_instance()->unlock(); // unlock the audio engine } } } } } } } EventQueue::get_instance()->push_event( EVENT_PATTERN_MODIFIED, -1 ); } bool Sampler::is_instrument_playing( Instrument* instrument ) { if ( instrument ) { // stop all notes using this instrument for ( unsigned j = 0; j < __playing_notes_queue.size(); j++ ) { if ( instrument->get_name() == __playing_notes_queue[ j ]->get_instrument()->get_name()){ return true; } } } } }; hydrogen-0.9.6-beta3/src/core/src/smf/000077500000000000000000000000001211146647700174455ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/src/smf/smf.cpp000066400000000000000000000156401211146647700207440ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2004 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include using std::vector; namespace H2Core { const char* SMFHeader::__class_name = "SMFHeader"; SMFHeader::SMFHeader( int nFormat, int nTracks, int nTPQN ) : Object( __class_name ) , m_nFormat( nFormat ) , m_nTracks( nTracks ) , m_nTPQN( nTPQN ) { INFOLOG( "INIT" ); } SMFHeader::~SMFHeader() { INFOLOG( "DESTROY" ); } vector SMFHeader::getBuffer() { SMFBuffer buffer; buffer.writeDWord( 1297377380 ); // MThd buffer.writeDWord( 6 ); // Header length = 6 buffer.writeWord( m_nFormat ); buffer.writeWord( m_nTracks + 1 ); buffer.writeWord( m_nTPQN ); return buffer.m_buffer; } // ::::::::::::::: const char* SMFTrack::__class_name = "SMFTrack"; SMFTrack::SMFTrack( const QString& sTrackName ) : Object( __class_name ) { INFOLOG( "INIT" ); addEvent( new SMFTrackNameMetaEvent( sTrackName, 0 ) ); } SMFTrack::~SMFTrack() { INFOLOG( "DESTROY" ); for ( unsigned i = 0; i < m_eventList.size(); i++ ) { delete m_eventList[ i ]; } } std::vector SMFTrack::getBuffer() { // fill the data vector vector trackData; for ( unsigned i = 0; i < m_eventList.size(); i++ ) { SMFEvent *pEv = m_eventList[ i ]; vector buf = pEv->getBuffer(); // copy the buffer into the data vector for ( unsigned j = 0; j < buf.size(); j++ ) { trackData.push_back( buf[ j ] ); } } SMFBuffer buf; buf.writeDWord( 1297379947 ); // MTrk buf.writeDWord( trackData.size() + 4 ); // Track length vector trackBuf = buf.getBuffer(); for ( unsigned i = 0; i < trackData.size(); i++ ) { trackBuf.push_back( trackData[i] ); } // track end trackBuf.push_back( 0x00 ); // delta trackBuf.push_back( 0xFF ); trackBuf.push_back( 0x2F ); trackBuf.push_back( 0x00 ); return trackBuf; } void SMFTrack::addEvent( SMFEvent *pEvent ) { m_eventList.push_back( pEvent ); } // :::::::::::::::::::::: const char* SMF::__class_name = "SMF"; SMF::SMF() : Object( __class_name ) { INFOLOG( "INIT" ); m_pHeader = new SMFHeader( 1, -1, 192 ); } SMF::~SMF() { INFOLOG( "DESTROY" ); delete m_pHeader; for ( unsigned i = 0; i < m_trackList.size(); i++ ) { delete m_trackList[i]; } } void SMF::addTrack( SMFTrack *pTrack ) { m_pHeader->m_nTracks++; m_trackList.push_back( pTrack ); } vector SMF::getBuffer() { vector smfVect; // header vector headerVect = m_pHeader->getBuffer(); for ( unsigned i = 0; i < headerVect.size(); i++ ) { smfVect.push_back( headerVect[ i ] ); } // tracks for ( unsigned nTrack = 0; nTrack < m_trackList.size(); nTrack++ ) { SMFTrack *pTrack = m_trackList[ nTrack ]; vector trackVect = pTrack->getBuffer(); for ( unsigned i = 0; i < trackVect.size(); i++ ) { smfVect.push_back( trackVect[ i ] ); } } return smfVect; } // :::::::::::::::::::... const char* SMFWriter::__class_name = "SMFWriter"; SMFWriter::SMFWriter() : Object( __class_name ) , m_file( NULL ) { INFOLOG( "INIT" ); } SMFWriter::~SMFWriter() { INFOLOG( "DESTROY" ); } void SMFWriter::save( const QString& sFilename, Song *pSong ) { INFOLOG( "save" ); const int DRUM_CHANNEL = 9; vector eventList; SMF smf; SMFTrack *pTrack1 = new SMFTrack( "Hydrogen song!!" ); smf.addTrack( pTrack1 ); InstrumentList *iList = pSong->get_instrument_list(); // ogni pattern sara' una diversa traccia int nTick = 1; for ( unsigned nPatternList = 0 ; nPatternList < pSong->get_pattern_group_vector()->size() ; nPatternList++ ) { // infoLog( "[save] pattern list pos: " + toString( nPatternList ) ); PatternList *pPatternList = ( *(pSong->get_pattern_group_vector()) )[ nPatternList ]; int nStartTicks = nTick; int nMaxPatternLength = 0; for ( unsigned nPattern = 0 ; nPattern < pPatternList->size() ; nPattern++ ) { Pattern *pPattern = pPatternList->get( nPattern ); // infoLog( " |-> pattern: " + pPattern->getName() ); if ( ( int )pPattern->get_length() > nMaxPatternLength ) { nMaxPatternLength = pPattern->get_length(); } for ( unsigned nNote = 0; nNote < pPattern->get_length(); nNote++ ) { const Pattern::notes_t* notes = pPattern->get_notes(); FOREACH_NOTE_CST_IT_BOUND(notes,it,nNote) { Note *pNote = it->second; if ( pNote ) { int nVelocity = (int)( 127.0 * pNote->get_velocity() ); int nInstr = iList->index(pNote->get_instrument()); int nPitch = 36 + nInstr; eventList.push_back( new SMFNoteOnEvent( nStartTicks + nNote, DRUM_CHANNEL, nPitch, nVelocity ) ); int nLength = 12; if ( pNote->get_length() != -1 ) { nLength = pNote->get_length(); } eventList.push_back( new SMFNoteOffEvent( nStartTicks + nNote + nLength, DRUM_CHANNEL, nPitch, nVelocity ) ); } } } } nTick += nMaxPatternLength; } // awful bubble sort.. for ( unsigned i = 0; i < eventList.size(); i++ ) { for ( vector::iterator it = eventList.begin() ; it != ( eventList.end() - 1 ) ; it++ ) { SMFEvent *pEvent = *it; SMFEvent *pNextEvent = *( it + 1 ); if ( pNextEvent->m_nTicks < pEvent->m_nTicks ) { // swap *it = pNextEvent; *( it +1 ) = pEvent; } } } unsigned nLastTick = 1; for ( vector::iterator it = eventList.begin() ; it != eventList.end(); it++ ) { SMFEvent *pEvent = *it; pEvent->m_nDeltaTime = ( pEvent->m_nTicks - nLastTick ) * 4; nLastTick = pEvent->m_nTicks; // infoLog( " pos: " + toString( (*it)->m_nTicks ) + ", delta: " // + toString( (*it)->m_nDeltaTime ) ); pTrack1->addEvent( *it ); } // save the midi file m_file = fopen( sFilename.toLocal8Bit(), "wb" ); if( m_file == NULL ) return; vector smfVect = smf.getBuffer(); for ( unsigned i = 0; i < smfVect.size(); i++ ) { fwrite( &smfVect[ i ], 1, 1, m_file ); } fclose( m_file ); } }; hydrogen-0.9.6-beta3/src/core/src/smf/smf_event.cpp000066400000000000000000000077011211146647700221440ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include namespace H2Core { const char* SMFBuffer::__class_name = "SMFBuffer"; SMFBuffer::SMFBuffer() : Object( __class_name ) { } void SMFBuffer::writeByte( short int nByte ) { // infoLog( "[writeByte] " + to_string( nByte ) ); m_buffer.push_back( nByte ); } void SMFBuffer::writeWord( int nVal ) { // infoLog( "writeWord" ); writeByte( nVal >> 8 ); writeByte( nVal ); } void SMFBuffer::writeDWord( long nVal ) { writeByte( nVal >> 24 ); writeByte( nVal >> 16 ); writeByte( nVal >> 8 ); writeByte( nVal ); } void SMFBuffer::writeString( const QString& sMsg ) { // infoLog( "writeString" ); writeVarLen( sMsg.length() ); for ( int i = 0; i < sMsg.length(); i++ ) { writeByte( sMsg.toLocal8Bit().at(i) ); } } void SMFBuffer::writeVarLen( long value ) { // infoLog( "[writeVarLen]" ); long buffer; buffer = value & 0x7f; while ( ( value >>= 7 ) > 0 ) { INFOLOG( "." ); buffer <<= 8; buffer |= 0x80; buffer += ( value & 0x7f ); } while ( true ) { // putc( buffer, outfile ); writeByte( ( char )buffer ); if ( buffer & 0x80 ) { buffer >>= 8; } else { break; } } } // :::::::::::::::::: const char* SMFTrackNameMetaEvent::__class_name = "SMFTrackNameMetaEvent"; SMFTrackNameMetaEvent::SMFTrackNameMetaEvent( const QString& sTrackName, unsigned nTicks ) : SMFEvent( __class_name, nTicks ) , m_sTrackName( sTrackName ) { // it's always at the start of the song m_nDeltaTime = 0; } std::vector SMFTrackNameMetaEvent::getBuffer() { SMFBuffer buf; buf.writeVarLen( m_nDeltaTime ); buf.writeByte( 0xFF ); buf.writeByte( TRACK_NAME ); buf.writeString( m_sTrackName ); return buf.getBuffer(); } // ::::::::::::: SMFEvent::SMFEvent( const char* sEventName, unsigned nTicks ) : Object( sEventName ) , m_nTicks( nTicks ) , m_nDeltaTime( -1 ) { //infoLog( "INIT" ); } SMFEvent::~SMFEvent() { //infoLog( "DESTROY" ); } // :::::::::::::: const char* SMFNoteOnEvent::__class_name = "SMFNoteOnEvent"; SMFNoteOnEvent::SMFNoteOnEvent( unsigned nTicks, int nChannel, int nPitch, int nVelocity ) : SMFEvent( __class_name, nTicks ) , m_nChannel( nChannel ) , m_nPitch( nPitch ) , m_nVelocity( nVelocity ) { if ( nChannel >= 16 ) { ERRORLOG( QString( "nChannel >= 16! nChannel=%1" ).arg( nChannel ) ); } } std::vector SMFNoteOnEvent::getBuffer() { SMFBuffer buf; buf.writeVarLen( m_nDeltaTime ); buf.writeByte( NOTE_ON + m_nChannel ); buf.writeByte( m_nPitch ); buf.writeByte( m_nVelocity ); return buf.getBuffer(); } // ::::::::::: const char* SMFNoteOffEvent::__class_name = "SMFNoteOffEvent"; SMFNoteOffEvent::SMFNoteOffEvent( unsigned nTicks, int nChannel, int nPitch, int nVelocity ) : SMFEvent( __class_name, nTicks ) , m_nChannel( nChannel ) , m_nPitch( nPitch ) , m_nVelocity( nVelocity ) { if ( nChannel >= 16 ) { ERRORLOG( QString( "nChannel >= 16! nChannel=%1" ).arg( nChannel ) ); } } std::vector SMFNoteOffEvent::getBuffer() { SMFBuffer buf; buf.writeVarLen( m_nDeltaTime ); buf.writeByte( NOTE_OFF + m_nChannel ); buf.writeByte( m_nPitch ); buf.writeByte( m_nVelocity ); return buf.getBuffer(); } }; hydrogen-0.9.6-beta3/src/core/src/synth/000077500000000000000000000000001211146647700200255ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/core/src/synth/synth.cpp000066400000000000000000000051441211146647700217020ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include namespace H2Core { const char* Synth::__class_name = "Synth"; Synth::Synth() : Object( __class_name ) { INFOLOG( "INIT" ); m_pOut_L = new float[ MAX_BUFFER_SIZE ]; m_pOut_R = new float[ MAX_BUFFER_SIZE ]; m_fTheta = 0.0; } Synth::~Synth() { INFOLOG( "DESTROY" ); delete[] m_pOut_L; delete[] m_pOut_R; } void Synth::noteOn( Note* pNote ) { INFOLOG( "NOTE ON" ); assert( pNote ); m_playingNotesQueue.push_back( pNote ); } void Synth::noteOff( Note* pNote ) { INFOLOG( "NOTE OFF - not implemented yet" ); assert( pNote ); // delete the older note... for ( uint i = 0; i < m_playingNotesQueue.size(); ++i ) { Note *pPlayingNote = m_playingNotesQueue[ i ]; if ( pPlayingNote->get_instrument() == pNote->get_instrument() ) { m_playingNotesQueue.erase( m_playingNotesQueue.begin() + i ); delete pPlayingNote; delete pNote; pNote = NULL; break; } } ERRORLOG( "note not found" ); } // perche' viene passata anche la canzone? E' davvero necessaria? void Synth::process( uint32_t nFrames ) { //INFOLOG( "process" ); // cleanup of the output buffers memset( m_pOut_L, 0, nFrames * sizeof( float ) ); memset( m_pOut_R, 0, nFrames * sizeof( float ) ); for ( uint i = 0; i < m_playingNotesQueue.size(); ++i ) { Note *pPlayingNote = m_playingNotesQueue[ i ]; //pPlayingNote->dumpInfo(); float amplitude = pPlayingNote->get_velocity(); float frequency = TWOPI * 220.0 / 44100.0; for ( uint i = 0; i < nFrames; ++i ) { float fVal = sin( m_fTheta ) * amplitude; m_pOut_L[ i ] += fVal; m_pOut_R[ i ] += fVal; m_fTheta += frequency; } } } void Synth::setAudioOutput( AudioOutput* pAudioOutput ) { m_pAudioOutput = pAudioOutput; } } // namespace H2Core hydrogen-0.9.6-beta3/src/core/src/timehelper.cpp000066400000000000000000000013461211146647700215260ustar00rootroot00000000000000#ifdef WIN32 #include #include int gettimeofday(struct timeval *tv, struct timezone *tz) { FILETIME ft; unsigned __int64 tmpres = 0; static int tzflag; if (NULL != tv) { GetSystemTimeAsFileTime(&ft); tmpres |= ft.dwHighDateTime; tmpres <<= 32; tmpres |= ft.dwLowDateTime; /*converting file time to unix epoch*/ tmpres /= 10; /*convert into microseconds*/ tmpres -= DELTA_EPOCH_IN_MICROSECS; tv->tv_sec = (long)(tmpres / 1000000UL); tv->tv_usec = (long)(tmpres % 1000000UL); } if (NULL != tz) { if (!tzflag) { _tzset(); tzflag++; } tz->tz_minuteswest = _timezone / 60; tz->tz_dsttime = _daylight; } return 0; } #endif hydrogen-0.9.6-beta3/src/core/src/version.cpp000066400000000000000000000012061211146647700210500ustar00rootroot00000000000000 #include "hydrogen/config.h" #include "hydrogen/version.h" namespace H2Core { static const std::string version = H2CORE_VERSION; std::string get_version() { return version; } bool version_older_than( int major, int minor, int patch ) { if ( H2CORE_VERSION_MAJOR > major ) { return true; } else if ( H2CORE_VERSION_MAJOR < major ) { return false; } else { if ( H2CORE_VERSION_MINOR > minor ) { return true; } else if ( H2CORE_VERSION_MINOR < minor ) { return false; } else { if ( H2CORE_VERSION_PATCH > patch ) { return true; } else { return false; } } } } }; /* vim: set softtabstop=4 expandtab: */ hydrogen-0.9.6-beta3/src/gui/000077500000000000000000000000001211146647700157255ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/CMakeLists.txt000066400000000000000000000043271211146647700204730ustar00rootroot00000000000000 FILE(GLOB_RECURSE hydrogen_H src/*.h) FILE(GLOB_RECURSE hydrogen_UIS src/*.ui) FILE(GLOB_RECURSE hydrogen_SRCS src/*.cpp) # add undiscovered dependencies to generated config.h INCLUDE(AddFileDependencies) FOREACH( _file ${hydrogen_H} ${hydrogen_SRCS}) FILE(READ "${_file}" _FILE_CONTENT) IF( "${_FILE_CONTENT}" MATCHES "H2CORE_HAVE_" ) ADD_FILE_DEPENDENCIES( ${_file} ${CMAKE_BINARY_DIR}/src/core/include/hydrogen/config.h) ENDIF() ENDFOREACH() QT4_WRAP_UI(hydrogen_UIS_H ${hydrogen_UIS}) # ui_ files are generated in CMAKE_CURRENT_BINARY_DIR QT4_WRAP_CPP(hydrogen_MOC ${hydrogen_H} OPTIONS -nw) INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} # ui_ headers ${CMAKE_CURRENT_SOURCE_DIR}/src # gui headers ${CMAKE_SOURCE_DIR}/src/core/include # core headers ${CMAKE_BINARY_DIR}/src/core/include # generated config.h ${LASH_INCLUDE_DIR} ${QT_INCLUDES} ) IF(APPLE) # set how it shows up in the Info.plist file SET(MACOSX_BUNDLE_INFO_STRING "Hydrogen for Mac") SET(MACOSX_BUNDLE_ICON_FILE "icon.icns") SET(MACOSX_BUNDLE_GUI_IDENTIFIER "Hydrogen") SET(MACOSX_BUNDLE_LONG_VERSION_STRING "${VERSION}") #this has to be short since it appears as the application name in the menu bar SET(MACOSX_BUNDLE_BUNDLE_NAME "Hydrogen") SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}") SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}") SET(MACOSX_BUNDLE_COPYRIGHT "Hydrogen Developers, 2009") # set where in the bundle to put the icns file SET_SOURCE_FILES_PROPERTIES(${CMAKE_SOURCE_DIR}/data/img/gray/icon.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) # include the icns file in the target SET(hydrogen_SRCS ${hydrogen_SRCS} ${CMAKE_SOURCE_DIR}/data/img/gray/icon.icns) #copy the data folder FILE(COPY ${CMAKE_SOURCE_DIR}/data DESTINATION hydrogen.app/Contents/Resources PATTERN ".svn" EXCLUDE) ENDIF() ADD_EXECUTABLE(hydrogen WIN32 MACOSX_BUNDLE ${hydrogen_SRCS} ${hydrogen_MOC} ${hydrogen_UIS_H}) TARGET_LINK_LIBRARIES(hydrogen hydrogen-core-${VERSION} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ) ADD_DEPENDENCIES(hydrogen hydrogen-core-${VERSION}) INSTALL(TARGETS hydrogen RUNTIME DESTINATION bin BUNDLE DESTINATION bin ) hydrogen-0.9.6-beta3/src/gui/src/000077500000000000000000000000001211146647700165145ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/src/AboutDialog.cpp000066400000000000000000000143001211146647700214100ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include "AboutDialog.h" #include "Skin.h" #include #include AboutDialog::AboutDialog(QWidget* parent) : QDialog( parent ) { setupUi( this ); setWindowTitle( tr( "About" ) ); setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); setMinimumSize( width(), height() ); setMaximumSize( width(), height() ); move( 240, 100 ); QString about; about += QString("
    Hydrogen Drum Machine %1 [%2]
    ").arg( H2Core::get_version().c_str() ).arg( __DATE__ ); about += tr( "Website
    " ); about += "http://www.hydrogen-music.org

    "; about += tr( "Project page
    "); about += "http://sourceforge.net/projects/hydrogen

    "; about += tr( "Mailing lists
    "); about += "http://lists.sourceforge.net/lists/listinfo/hydrogen-announce
    "; about += "http://lists.sourceforge.net/lists/listinfo/hydrogen-devel
    "; aboutTxt->setText( about ); std::vector authorList; authorList.push_back( Author( "Antonio Piraino", "", "Italian manual" ) ); authorList.push_back( Author( "Artemiy Pavlov (aka Artemio)", "www.artemiolabs.com", "Drum kits, demo patterns, web site" ) ); authorList.push_back( Author( "Alexandre Prokoudine", "", "Russian translation" ) ); authorList.push_back( Author( "Ben Powers", "", "Docs" ) ); authorList.push_back( Author( "Benjamin Flaming", "", "Jack patches, bug fix" ) ); authorList.push_back( Author( "Carlo Impagliazzo (aka Truijllo)", "", "Testing, ideas.." ) ); authorList.push_back( Author( "Chris Wareham", "", "NetBSD patch" ) ); authorList.push_back( Author( "Christian Vorhof", "", "Interface design concept" ) ); authorList.push_back( Author( "Daniil Kolpakov", "", "" ) ); authorList.push_back( Author( "Daniel Tonda Castillo", "", "Spanish manual" ) ); authorList.push_back( Author( "Dave Allan", "", "Manual review" ) ); authorList.push_back( Author( "Dave Fancella", "", "" ) ); authorList.push_back( Author( "Dave Phillips", "", "Bug reports, ideas" ) ); authorList.push_back( Author( "Derrick Karpo", "", "Patches, testing" ) ); authorList.push_back( Author( "Dmitry Ivanov", "", "" ) ); authorList.push_back( Author( "Ede Wolf", "", "Faq, testing" ) ); authorList.push_back( Author( "Elizeu Santos-Neto", "", "Portuguese(Brazil) translation" ) ); authorList.push_back( Author( "Emiliano Grilli (aka Emillo)", "www.emillo.net", "Drum kits, demo patterns" ) ); authorList.push_back( Author( "Esben Stien", "", "" ) ); authorList.push_back( Author( "Francesco Cabras", "", "Patches, testing" ) ); authorList.push_back( Author( "Gabriel M. Beddingfield", "gabriel@teuton.org", "Patches, ideas" ) ); authorList.push_back( Author( "Gene", "", "Patches, testing" ) ); authorList.push_back( Author( "Jakob Lund", "jlund05@imada.sdu.dk", " coding" ) ); authorList.push_back( Author( "Jason Schaefer", "schaefer.jason@gmail.com", " Patches, lead/lag feature" ) ); authorList.push_back( Author( "Jesse Chappel", "", "Jack patches" ) ); authorList.push_back( Author( "Jérémy Zurcher", "", "coding") ); authorList.push_back( Author( "Jonas Melzer", "", "German manual" ) ); authorList.push_back( Author( "Jonathan Dempsey", "jonathandempsey@fastmail.fm", "Mac OSX port" ) ); authorList.push_back( Author( "Journeyman", "jman-@masternet.it", " manual") ); authorList.push_back( Author( "Kevin Dahan (aka Unet)", "", "French translation" ) ); authorList.push_back( Author( "Lee Revell", "", "Patches" ) ); authorList.push_back( Author( "Matt Walker", "", "" ) ); authorList.push_back( Author( "Michael Wolkstein", "m.wolkstein@gmx.de", "coding" ) ); authorList.push_back( Author( "Nikos Papadopoylos", "", "Greek translation" ) ); authorList.push_back( Author( "Noel Darlow", "", "manual reviewing" ) ); authorList.push_back( Author( "Paul Dorman", "", "" ) ); authorList.push_back( Author( "Pieter Van Isacker (aka aikie)", "", "Dutch manual and translation" ) ); authorList.push_back( Author( "Samuel Mimram", "", "Packages" ) ); authorList.push_back( Author( "Sebastian Moors (aka mauser)", "mauser@smoors.de", "coding" ) ); authorList.push_back( Author( "Sergio Gil Perez de la Manga", "", "Spanish translation" ) ); authorList.push_back( Author( "Simon Donike", "", "German translation" ) ); authorList.push_back( Author( "Thijs Van Severen", "", "manual, website, coding" ) ); authorList.push_back( Author( "Torben Hohn", "", "Bug fix, test" ) ); authorList.push_back( Author( "Yamasaki Yutaka", "yamasaki@good-day.co.jp", "Japanese translation" ) ); authorList.push_back( Author( "Willie Sippel", "willie@zeitgeistmedia.net", "GUI graphics, coding" ) ); QString sAuthors; sAuthors += tr( "Main coder and mantainer:
    " ); sAuthors += "
    • Alessandro Cominu (aka Comix) [2001-2008]

    • "; sAuthors += "
    • Michael Wolkstein (aka Wolke) [2008-now]

    • "; sAuthors += "
    • Sebastian Moors (aka Mauser) [2008-now]

    "; sAuthors += "Thanks to:"; sAuthors += "
      "; for ( uint i = 0; i < authorList.size(); ++i ) { Author a = authorList.at( i ); sAuthors += "
    • "; sAuthors += "" + a.m_sName + ""; sAuthors += "

    • "; } sAuthors += "
    "; authorsText->setText( sAuthors ); logoLabel->setPixmap( QPixmap( Skin::getImagePath() +"/about/aboutLogo.png" ) ); } AboutDialog::~AboutDialog() { } /** * Close the dialog */ void AboutDialog::on_okBtn_clicked() { accept(); } hydrogen-0.9.6-beta3/src/gui/src/AboutDialog.h000066400000000000000000000025101211146647700210550ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef ABOUT__DIALOG_H #define ABOUT__DIALOG_H #include #include "ui_about_dialog.h" class AboutDialog : public QDialog, public Ui_AboutDialog_UI { Q_OBJECT public: AboutDialog(QWidget* parent); ~AboutDialog(); private slots: void on_okBtn_clicked(); private: class Author { public: QString m_sName; QString m_sEmail; QString m_sInfo; Author( QString sName, QString sEmail, QString sInfo ) : m_sName( sName ), m_sEmail( sEmail ), m_sInfo( sInfo ) {} }; }; #endif hydrogen-0.9.6-beta3/src/gui/src/AudioEngineInfoForm.cpp000066400000000000000000000137171211146647700230600ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "AudioEngineInfoForm.h" #include #include "HydrogenApp.h" #include #include #include #include #include #include #include #include using namespace H2Core; #include "Skin.h" const char* AudioEngineInfoForm::__class_name = "AudioEngineInfoForm"; AudioEngineInfoForm::AudioEngineInfoForm(QWidget* parent) : QWidget( parent ) , Object( __class_name ) { setupUi( this ); setMinimumSize( width(), height() ); // not resizable setMaximumSize( width(), height() ); // not resizable setWindowTitle( trUtf8( "Audio Engine Info" ) ); updateInfo(); //currentPatternLbl->setText("NULL pattern"); timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(updateInfo())); HydrogenApp::get_instance()->addEventListener( this ); updateAudioEngineState(); } /** * Destructor */ AudioEngineInfoForm::~AudioEngineInfoForm() { } /** * show event */ void AudioEngineInfoForm::showEvent ( QShowEvent* ) { updateInfo(); timer->start(200); } /** * hide event */ void AudioEngineInfoForm::hideEvent ( QHideEvent* ) { timer->stop(); } void AudioEngineInfoForm::updateInfo() { Hydrogen *pEngine = Hydrogen::get_instance(); Song *song = pEngine->getSong(); // Song position QString sSongPos = "N/A"; if ( pEngine->getPatternPos() != -1 ) { sSongPos = QString::number( pEngine->getPatternPos() ); } m_pSongPositionLbl->setText( sSongPos ); // Audio engine Playing notes char tmp[100]; // Process time int perc = 0; if ( pEngine->getMaxProcessTime() != 0.0 ) { perc= (int)( pEngine->getProcessTime() / ( pEngine->getMaxProcessTime() / 100.0 ) ); } sprintf(tmp, "%#.2f / %#.2f (%d%%)", pEngine->getProcessTime(), pEngine->getMaxProcessTime(), perc ); processTimeLbl->setText(tmp); // Song state if (song == NULL) { songStateLbl->setText( "NULL song" ); } else { if (song->__is_modified) { songStateLbl->setText( "Modified" ); } else { songStateLbl->setText( "Saved" ); } } // tick number sprintf(tmp, "%03d", (int)pEngine->getTickPosition() ); nTicksLbl->setText(tmp); // Audio driver info AudioOutput *driver = pEngine->getAudioOutput(); if (driver) { QString audioDriverName = driver->class_name(); driverLbl->setText(audioDriverName); // Audio driver buffer size sprintf(tmp, "%d", driver->getBufferSize()); bufferSizeLbl->setText(QString(tmp)); // Audio driver sampleRate sprintf(tmp, "%d", driver->getSampleRate()); sampleRateLbl->setText(QString(tmp)); // Number of frames sprintf(tmp, "%d", (int)driver->m_transport.m_nFrames ); nFramesLbl->setText(tmp); } else { driverLbl->setText( "NULL driver" ); bufferSizeLbl->setText( "N/A" ); sampleRateLbl->setText( "N/A" ); nFramesLbl->setText( "N/A" ); } nRealtimeFramesLbl->setText( QString( "%1" ).arg( pEngine->getRealtimeFrames() ) ); // Midi driver info MidiInput *pMidiDriver = pEngine->getMidiInput(); if (pMidiDriver) { midiDriverName->setText( pMidiDriver->class_name() ); } else { midiDriverName->setText("No MIDI driver support"); } m_pMidiDeviceName->setText( Preferences::get_instance()->m_sMidiPortName ); int nSelectedPatternNumber = pEngine->getSelectedPatternNumber(); if (nSelectedPatternNumber == -1) { selectedPatLbl->setText( "N/A"); } else { selectedPatLbl->setText( QString("%1").arg(nSelectedPatternNumber) ); } int nSelectedInstrumentNumber = pEngine->getSelectedInstrumentNumber(); if (nSelectedInstrumentNumber == -1) { m_pSelectedInstrLbl->setText( "N/A" ); } else { m_pSelectedInstrLbl->setText( QString("%1").arg(nSelectedInstrumentNumber) ); } QString currentPatternName; PatternList *pPatternList = Hydrogen::get_instance()->getCurrentPatternList(); if (pPatternList) { currentPatternLbl->setText( QString::number(pPatternList->size()) ); } else { currentPatternLbl->setText( "N/A" ); } // SAMPLER Sampler *pSampler = AudioEngine::get_instance()->get_sampler(); sampler_playingNotesLbl->setText(QString( "%1 / %2" ).arg(pSampler->get_playing_notes_number()).arg(Preferences::get_instance()->m_nMaxNotes)); // Synth Synth *pSynth = AudioEngine::get_instance()->get_synth(); synth_playingNotesLbl->setText( QString( "%1" ).arg( pSynth->getPlayingNotesNumber() ) ); } /** * Update engineStateLbl with the current audio engine state */ void AudioEngineInfoForm::updateAudioEngineState() { // Audio Engine state QString stateTxt; int state = Hydrogen::get_instance()->getState(); switch (state) { case STATE_UNINITIALIZED: stateTxt = "Uninitialized"; break; case STATE_INITIALIZED: stateTxt = "Initialized"; break; case STATE_PREPARED: stateTxt = "Prepared"; break; case STATE_READY: stateTxt = "Ready"; break; case STATE_PLAYING: stateTxt = "Playing"; break; default: stateTxt = "Unknown!?"; break; } engineStateLbl->setText(stateTxt); } void AudioEngineInfoForm::stateChangedEvent( int ) { updateAudioEngineState(); } void AudioEngineInfoForm::patternChangedEvent() { updateAudioEngineState(); } hydrogen-0.9.6-beta3/src/gui/src/AudioEngineInfoForm.h000066400000000000000000000031601211146647700225140ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef AUDIO_ENGINE_INFO_FORM_H #define AUDIO_ENGINE_INFO_FORM_H #include #include "EventListener.h" #include "ui_AudioEngineInfoForm_UI.h" #include /** * Audio Engine information form */ class AudioEngineInfoForm : public QWidget, public Ui_AudioEngineInfoForm_UI, public EventListener, public H2Core::Object { H2_OBJECT Q_OBJECT private: QTimer *timer; virtual void updateAudioEngineState(); // EventListener implementation virtual void stateChangedEvent(int nState); virtual void patternChangedEvent(); //~ EventListener implementation public: AudioEngineInfoForm(QWidget* parent); ~AudioEngineInfoForm(); void showEvent ( QShowEvent *ev ); void hideEvent ( QHideEvent *ev ); public slots: void updateInfo(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/AudioFileBrowser/000077500000000000000000000000001211146647700217215ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/src/AudioFileBrowser/AudioFileBrowser.cpp000066400000000000000000000325201211146647700256340ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "AudioFileBrowser.h" #include "../HydrogenApp.h" #include "InstrumentEditor/InstrumentEditor.h" #include "SampleWaveDisplay.h" #include "../widgets/Button.h" #include "../Skin.h" #include #include #include #include #include #include using namespace H2Core; using namespace std; const char* AudioFileBrowser::__class_name = "AudioFileBrowser"; AudioFileBrowser::AudioFileBrowser ( QWidget* pParent ) : QDialog ( pParent ) , Object ( __class_name ) { setupUi ( this ); INFOLOG ( "INIT" ); setWindowTitle ( trUtf8 ( "Audio File Browser" ) ); setFixedSize ( width(), height() ); model = new QDirModel(); model->setFilter( QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot ); model->setNameFilters( QStringList() << "*.ogg" << "*.OGG" << "*.wav" << "*.WAV" << "*.flac"<< "*.FLAC" << "*.aiff" << "*.AIFF"<< "*.au" << "*.AU" ); model->setSorting( QDir::DirsFirst |QDir::Name ); __index = model->index( QDir::currentPath() ); m_pPlayBtn->setEnabled( false ); m_pStopBtn->setEnabled( false ); openBTN->setEnabled( false ); tree = new QTreeView( treeView ); tree->setModel( model ); tree->resize( 799, 310 ); tree->header()->resizeSection( 0, 405 ); tree->setAlternatingRowColors( true ); tree->setRootIndex( model->index( Preferences::get_instance()->__lastsampleDirectory ) ); pathLineEdit->setText( Preferences::get_instance()->__lastsampleDirectory ); m_psamplefilename = ""; m_pselectedFile << "false" << "false"; sEmptySampleFilename = Filesystem::empty_sample(); m_pPathUptoolButton->setIcon( QIcon( Skin::getImagePath() + "/audiFileBrowser/go-up.png")); m_pPathUptoolButton->setToolTip( QString("Parent Folder")); m_pPathHometoolButton->setIcon( QIcon( Skin::getImagePath() + "/audiFileBrowser/go-home.png")); m_pPathHometoolButton->setToolTip( QString("Home")); m_pPlayBtn->setIcon( QIcon( Skin::getImagePath() + "/audiFileBrowser/player_play.png")); m_pPlayBtn->setToolTip( QString("Play selected")); m_pStopBtn->setIcon( QIcon( Skin::getImagePath() + "/audiFileBrowser/player_stop.png")); m_pStopBtn->setToolTip( QString("Stop")); m_pSampleWaveDisplay = new SampleWaveDisplay( waveformview ); m_pSampleWaveDisplay->updateDisplay( sEmptySampleFilename ); m_pSampleWaveDisplay->move( 3, 3 ); playSamplescheckBox->setChecked( Preferences::get_instance()->__playsamplesonclicking ); //get the kde or gnome environment variable for mouse double or single clicking singleClick = false; getEnvironment(); connect( tree, SIGNAL( clicked( const QModelIndex&) ), SLOT( clicked( const QModelIndex& ) ) ); connect( tree, SIGNAL( doubleClicked( const QModelIndex&) ), SLOT( doubleClicked( const QModelIndex& ) ) ); connect( pathLineEdit, SIGNAL( returnPressed() ), SLOT( updateModelIndex() ) ); } AudioFileBrowser::~AudioFileBrowser() { Sample *pNewSample = Sample::load( sEmptySampleFilename ); AudioEngine::get_instance()->get_sampler()->preview_sample( pNewSample, 100 ); INFOLOG ( "DESTROY" ); } bool AudioFileBrowser::isFileSupported( QString filename ) { if ( ( filename.endsWith( ".ogg" ) ) || ( filename.endsWith( ".OGG" ) ) || ( filename.endsWith( ".wav" ) ) || ( filename.endsWith( ".WAV" ) ) || ( filename.endsWith( ".au" ) ) || ( filename.endsWith( ".AU" ) ) || ( filename.endsWith( ".aiff" ) ) || ( filename.endsWith( ".AIFF" ) ) || ( filename.endsWith( ".flac" ) ) || ( filename.endsWith( ".FLAC" ) ) ){ return true; } else { return false; } } void AudioFileBrowser::getEnvironment() { QString desktopSession = getenv("DESKTOP_SESSION"); //kde if(desktopSession == "kde"){ QFile envfile( QDir::homePath() + "/.kde/share/config/kdeglobals"); if (!envfile.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream envin( &envfile ); while ( !envin.atEnd() ) { QString envline = envin.readLine(); if(envline == QString("SingleClick=true") ){ singleClick = true; break; } } } //for gnome, xfce and all others we use double click as default } void AudioFileBrowser::keyPressEvent (QKeyEvent *ev) { if( ev->modifiers()==Qt::ControlModifier ){ tree->setSelectionMode( QAbstractItemView::MultiSelection ); openBTN->setEnabled( true ); } } void AudioFileBrowser::keyReleaseEvent (QKeyEvent *ev) { tree->setSelectionMode( QAbstractItemView::SingleSelection ); } void AudioFileBrowser::updateModelIndex() { QString toremove; QString newpath = pathLineEdit->text(); if( QDir( newpath ).exists() ){ tree->setRootIndex( model->index( newpath ) ); }else { toremove = newpath.section( '/', -1 ); // QMessageBox::information ( this, "Hydrogen", newpath + toremove); newpath.replace( toremove, "" ); tree->setRootIndex( model->index( newpath ) ); } } void AudioFileBrowser::clicked( const QModelIndex& index ) { QString path = model->filePath( index ); if( singleClick ){ browseTree( index ); } if( isFileSupported( path ) ){ browseTree( index ); } } void AudioFileBrowser::doubleClicked( const QModelIndex& index ) { if(!singleClick) browseTree( index ); } void AudioFileBrowser::browseTree( const QModelIndex& index ) { QString path = model->filePath( index ); pathLineEdit->setText( path ); m_pSampleWaveDisplay->updateDisplay( sEmptySampleFilename ); updateModelIndex(); //with this you have a navigation like konqueror if ( model->isDir( index ) ){ m_pPlayBtn->setEnabled( false ); openBTN->setEnabled( false ); return; } QString name = path.section( '/', -1 ); QString path2 = path; QString onlypath = path; if ( name != "" ){ onlypath = path.replace( name, "" ); } name = name.left( '.' ); QString message = "Name: " + name; pathLineEdit->setText( onlypath ); QStringList path2List = path2.split("/"); QString fleTxt = path2List.last(); QApplication::setOverrideCursor(Qt::WaitCursor); if( isFileSupported( path2 ) ) { filelineedit->setText( fleTxt ); Sample *pNewSample = Sample::load( path2 ); if ( pNewSample ) { m_pNBytesLable->setText( trUtf8( "Size: %1 bytes" ).arg( pNewSample->get_size() / 2 ) ); m_pSamplerateLable->setText( trUtf8( "Samplerate: %1" ).arg( pNewSample->get_sample_rate() ) ); float sec = ( float )( pNewSample->get_frames() / (float)pNewSample->get_sample_rate() ); QString qsec; qsec.sprintf( "%2.2f", sec ); m_pLengthLable->setText( trUtf8( "Sample length: " ) + qsec + trUtf8( " s" ) ); delete pNewSample; m_psamplefilename = path2; m_pSampleWaveDisplay->updateDisplay( path2 ); m_pPlayBtn->setEnabled( true ); openBTN->setEnabled( true ); //important this will only working correct if m_pSampleWaveDisplay->updateDisplay( file ) //is ready with painting the wav file. else the playing sample get crackled sound!! if (playSamplescheckBox->isChecked()){ if ( sec <= 600.00){ on_m_pPlayBtn_clicked(); }else { QMessageBox::information ( this, "Hydrogen", trUtf8( "Please do not preview samples which are longer than 10 minutes!" ) ); } } } m_pNameLabel->setText( message ); }else{ m_pNameLabel->setText( trUtf8( "Name:")); m_pNBytesLable->setText( trUtf8( "Size:" ) ); m_pSamplerateLable->setText( trUtf8( "Samplerate:" ) ); m_pLengthLable->setText( trUtf8( "Sample length:" ) ); m_pSampleWaveDisplay->updateDisplay( sEmptySampleFilename ); m_pPlayBtn->setEnabled( false ); m_pStopBtn->setEnabled( false ); openBTN->setEnabled( false ); m_psamplefilename = ""; } QApplication::restoreOverrideCursor(); } void AudioFileBrowser::on_m_pPlayBtn_clicked() { if( QFile( m_psamplefilename ).exists() == false ) return; m_pStopBtn->setEnabled( true ); Sample *pNewSample = Sample::load( m_psamplefilename ); if ( pNewSample ){ int length = ( ( pNewSample->get_frames() / pNewSample->get_sample_rate() + 1) * 100 ); AudioEngine::get_instance()->get_sampler()->preview_sample( pNewSample, length ); } } void AudioFileBrowser::on_m_pStopBtn_clicked() { Sample *pNewSample = Sample::load( sEmptySampleFilename ); AudioEngine::get_instance()->get_sampler()->preview_sample( pNewSample, 100 ); m_pStopBtn->setEnabled( false ); } void AudioFileBrowser::on_cancelBTN_clicked() { Preferences::get_instance()->__lastsampleDirectory = pathLineEdit->text(); m_pselectedFile << "false" << "false" << ""; reject(); } void AudioFileBrowser::on_openBTN_clicked() { if( tree->selectionModel()->selectedIndexes().size() / 4 > 0){ QList::iterator i; QList list = tree->selectionModel()->selectedIndexes(); for (i = list.begin(); i != list.end(); ++i){ QString path2 = (*i).data().toString(); if( isFileSupported( path2 ) ){ QString path = pathLineEdit->text(); QString act_filename = path + path2; m_pselectedFile << act_filename ; } ++i;++i;++i; } } Preferences::get_instance()->__lastsampleDirectory = pathLineEdit->text(); accept(); } void AudioFileBrowser::on_playSamplescheckBox_clicked() { Preferences::get_instance()->__playsamplesonclicking = playSamplescheckBox->isChecked(); } QStringList AudioFileBrowser::selectedFile() { if ( useNameCheckBox->isChecked() ){ m_pselectedFile[0] = "true"; } if ( autoVelCheckBox->isChecked() ){ m_pselectedFile[1] = "true"; } return m_pselectedFile; } void AudioFileBrowser::on_m_pPathHometoolButton_clicked() { QString path = pathLineEdit->text(); QStringList pathlist = path.split("/"); while( path != QDir::rootPath() ){ if( pathlist.isEmpty () ) break; pathlist.removeLast(); QString updir = pathlist.join("/"); pathLineEdit->setText( updir ); tree->setRootIndex( model->index( updir ) ); tree->collapse( model->index( updir ) ); tree->setExpanded( model->index(updir), false ); path = pathLineEdit->text(); } pathLineEdit->setText( QDir::homePath() ); tree->setRootIndex( model->index( QDir::homePath() ) ); tree->collapse( model->index( QDir::homePath()) ); } void AudioFileBrowser::on_m_pPathUptoolButton_clicked() { QString path = pathLineEdit->text(); QStringList pathlist = path.split("/"); if( pathlist.isEmpty () ){ return; } if( path.endsWith( "/" ) ){ pathlist.removeLast(); QString tmpupdir = pathlist.join("/"); tree->setRootIndex( model->index( tmpupdir ) ); tree->collapse( model->index( tmpupdir ) ); tree->setExpanded( model->index( tmpupdir ), false ); } pathlist.removeLast(); QString updir = pathlist.join("/"); if ( updir == "" ){ pathLineEdit->setText( QString("/") ); }else { pathLineEdit->setText( updir ); } tree->setRootIndex( model->index( updir ) ); tree->collapse( model->index( updir ) ); tree->setExpanded( model->index(updir), false ); } void AudioFileBrowser::on_hiddenCB_clicked() { if ( hiddenCB->isChecked() ){ model->setFilter( QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden ); } else { model->setFilter( QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot ); tree->setRootIndex( model->index( pathLineEdit->text() ) ); } } hydrogen-0.9.6-beta3/src/gui/src/AudioFileBrowser/AudioFileBrowser.h000066400000000000000000000045271211146647700253070ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef AUDIOFILEBROWSER_H #define AUDIOFILEBROWSER_H #include "ui_AudioFileBrowser_UI.h" #include "InstrumentEditor/InstrumentEditor.h" #include #include #include class Button; class SampleWaveDisplay; /// /// This dialog is used to preview audiofiles /// class AudioFileBrowser : public QDialog, public Ui_AudioFileBrowser_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: AudioFileBrowser( QWidget* pParent ); ~AudioFileBrowser(); QStringList selectedFile(); QString setDir( QString dir ); private slots: void on_cancelBTN_clicked(); void on_openBTN_clicked(); void clicked( const QModelIndex& index ); void doubleClicked( const QModelIndex& index ); void on_m_pPlayBtn_clicked(); void on_m_pStopBtn_clicked(); void updateModelIndex(); void on_m_pPathHometoolButton_clicked(); void on_m_pPathUptoolButton_clicked(); void on_playSamplescheckBox_clicked(); void on_hiddenCB_clicked(); virtual void keyPressEvent (QKeyEvent *ev); virtual void keyReleaseEvent (QKeyEvent *ev); private: InstrumentEditor* m_pInstrumentEditor; QString m_psamplefilename; QStringList m_pselectedFile; void browseTree( const QModelIndex& index ); void getEnvironment(); bool isFileSupported( QString filename ); bool singleClick; QDirModel *model; QTreeView *tree; QModelIndex __index; SampleWaveDisplay *m_pSampleWaveDisplay; QString sEmptySampleFilename; QStringList filters; }; #endif hydrogen-0.9.6-beta3/src/gui/src/AudioFileBrowser/AudioFileBrowser_UI.ui000066400000000000000000000144661211146647700260750ustar00rootroot00000000000000 AudioFileBrowser_UI 0 0 821 564 Dialog 360 390 451 91 QFrame::StyledPanel QFrame::Raised 10 390 341 131 QFrame::StyledPanel QFrame::Raised 10 10 321 111 Name: Samplerate: Size: Length: 10 530 216 21 Pla&y samples by clicking 10 10 801 28 View hidden folders &Up &Home 360 490 71 26 &Play Sample 11 41 801 341 550 490 261 56 &Filename to instrument name Open Cancel 440 490 51 26 &Stop 360 530 171 21 Be careful, this change all Layer velocity settings Set automatic velocity pathLineEdit hiddenCB m_pPathUptoolButton m_pPathHometoolButton treeView filelineedit m_pPlayBtn m_pStopBtn useNameCheckBox playSamplescheckBox autoVelCheckBox openBTN cancelBTN hydrogen-0.9.6-beta3/src/gui/src/AudioFileBrowser/SampleWaveDisplay.cpp000066400000000000000000000063241211146647700260240ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include using namespace H2Core; #include "SampleWaveDisplay.h" #include "../Skin.h" const char* SampleWaveDisplay::__class_name = "SampleWaveDisplay"; SampleWaveDisplay::SampleWaveDisplay(QWidget* pParent) : QWidget( pParent ) , Object( __class_name ) , m_sSampleName( "" ) { // setAttribute(Qt::WA_NoBackground); //INFOLOG( "INIT" ); int w = 445; int h = 85; resize( w, h ); bool ok = m_background.load( Skin::getImagePath() + "/waveDisplay/bgsamplewavedisplay.png" ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } m_pPeakData = new int[ w ]; } SampleWaveDisplay::~SampleWaveDisplay() { //INFOLOG( "DESTROY" ); delete[] m_pPeakData; } void SampleWaveDisplay::paintEvent(QPaintEvent *ev) { QPainter painter( this ); painter.setRenderHint( QPainter::Antialiasing ); painter.drawPixmap( ev->rect(), m_background, ev->rect() ); painter.setPen( QColor( 102, 150, 205 ) ); int VCenter = height() / 2; for ( int x = 0; x < width(); x++ ) { painter.drawLine( x, VCenter, x, m_pPeakData[x] + VCenter ); painter.drawLine( x, VCenter, x, -m_pPeakData[x] + VCenter ); } QFont font; font.setWeight( 63 ); painter.setFont( font ); painter.setPen( QColor( 255 , 255, 255, 200 ) ); painter.drawText( 0, 0, width(), 20, Qt::AlignCenter, m_sSampleName ); } void SampleWaveDisplay::updateDisplay( QString filename ) { Sample *pNewSample = Sample::load( filename ); if ( pNewSample ) { // Extract the filename from the complete path QString sName = filename; int nPos = sName.lastIndexOf( "/" ); if ( sName.endsWith("emptySample.wav")){ m_sSampleName = ""; }else { m_sSampleName = sName.mid( nPos + 1, sName.length() ); } // INFOLOG( "[updateDisplay] sample: " + m_sSampleName ); int nSampleLength = pNewSample->get_frames(); float nScaleFactor = nSampleLength / width(); float fGain = height() / 2.0 * 1.0; float *pSampleData = pNewSample->get_data_l(); int nSamplePos =0; int nVal; for ( int i = 0; i < width(); ++i ){ nVal = 0; for ( int j = 0; j < nScaleFactor; ++j ) { if ( j < nSampleLength ) { int newVal = static_cast( pSampleData[ nSamplePos ] * fGain ); if ( newVal > nVal ) { nVal = newVal; } } ++nSamplePos; } m_pPeakData[ i ] = nVal; } } delete pNewSample; update(); } hydrogen-0.9.6-beta3/src/gui/src/AudioFileBrowser/SampleWaveDisplay.h000066400000000000000000000024171211146647700254700ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SAMPLE_WAVE_DISPLAY #define SAMPLE_WAVE_DISPLAY #include #include class SampleWaveDisplay : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: SampleWaveDisplay(QWidget* pParent); ~SampleWaveDisplay(); void updateDisplay( QString filename ); void paintEvent(QPaintEvent *ev); private: QPixmap m_background; QString m_sSampleName; int *m_pPeakData; }; #endif hydrogen-0.9.6-beta3/src/gui/src/Director.cpp000066400000000000000000000150521211146647700207760ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /** ** ** this dialog is used to use show a director. ** for example to play live without a click in your ears. ** here you get : ** - song name ** - a visual metronome ** - bar position info ** - beat position info ** - bar position tags (current and next) ** ** ------------------------------------------- ** | | ** | song name | ** | | ** ------------------------------------------- ** | | | ** | Bar | Beat | ** | | | ** ------------------------------------------- ** | | ** | current bar tag | ** | | ** ------------------------------------------- ** | | ** | next bar tag | ** | | ** ------------------------------------------- **/ #include "Director.h" #include "HydrogenApp.h" #include "widgets/PixmapWidget.h" #include #include #include using namespace H2Core; using namespace std; Director::Director ( QWidget* pParent ) : QDialog ( pParent ) , Object ( "Director" ) { HydrogenApp::get_instance()->addEventListener( this ); setupUi ( this ); //INFOLOG ( "INIT" ); setWindowTitle ( trUtf8 ( "Director" ) ); p_counter = 1; // to compute the right beat p_fadealpha = 255; //default alpha p_bar = 1; // default bar p_wechselblink = width() * 5/100; f_bpm = Hydrogen::get_instance()->getSong()->__bpm; timer = new QTimer( this ); connect( timer, SIGNAL( timeout() ), this, SLOT( updateMetronomBackground() ) ); } Director::~Director() { //INFOLOG ( "DESTROY" ); } void Director::metronomeEvent( int nValue ) { //load a new song if( nValue == 3 ){ //update songname QStringList list = Hydrogen::get_instance()->getSong()->get_filename().split("/"); if ( !list.isEmpty() ){ __songName = list.last().replace( ".h2song", "" ); // if songname is not set, default on an empty song, we call them "Untitled Song". if( __songName== "" ) __songName = QString("Untitled Song"); } update(); return; } //bpm f_bpm = Hydrogen::get_instance()->getSong()->__bpm; //bar p_bar = Hydrogen::get_instance()->getPatternPos() +1; if ( p_bar <= 0 ) p_bar = 1; // 1000 ms / bpm / 60s timer->start( static_cast( 1000 / ( f_bpm / 60 )) / 2 ); p_wechselblink = width() * 5/100; p_fadealpha = 255; if ( nValue == 2 ){ p_fadealpha = 0; update(); __TAG=""; __TAG2=""; return; } if ( nValue == 1 ) { //foregroundcolor "rect" for first blink __color = QColor( 255, 50, 1 ,255 ); p_counter = 1; } else { //foregroundcolor "rect" for all other blinks p_counter++; if( p_counter %2 == 0 ) p_wechselblink = width() * 52.5/100; __color = QColor( 24, 250, 31, 255 ); } // get tags __TAG=""; __TAG2=""; for ( size_t t = 0; t < Hydrogen::get_instance()->m_timelinetagvector.size(); t++){ if(t+1m_timelinetagvector.size() && Hydrogen::get_instance()->m_timelinetagvector[t+1].m_htimelinetagbeat == p_bar ){ __TAG2 = Hydrogen::get_instance()->m_timelinetagvector[t+1].m_htimelinetag ; } if ( Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetagbeat <= p_bar-1){ __TAG = Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetag ; } if( Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetagbeat > p_bar-1){ break; } } update(); } void Director::updateMetronomBackground() { __color.setAlpha( 0 ); timer->stop(); update(); } void Director::paintEvent( QPaintEvent* ev ) { QPainter painter(this); //draw the songname painter.setFont(QFont("Arial", height() * 14/100 )); QRect rect(QPoint( width() * 5/100 , height () * 2/100 ), QSize( width() * 90/100, height() * 21/100)); painter.drawText( rect, Qt::AlignCenter, QString( __songName ) ); //draw the metronome painter.setPen( QPen(QColor( 249, 235, 116, 200 ) ,1 , Qt::SolidLine ) ); painter.setBrush( __color ); painter.drawRect ( p_wechselblink, height() * 25/100, width() * 42.5/100, height() * 35/100); //draw bars painter.setPen(Qt::white); painter.setFont(QFont("Arial", height() * 25/100 )); QRect r1(QPoint( width() * 5/100 , height() * 25/100 ), QSize( width() * 42.5/100, height() * 35/100)); painter.drawText( r1, Qt::AlignCenter, QString("%1").arg( p_bar) ); //draw beats QRect r2(QPoint( width() * 52.5/100 , height() * 25/100 ), QSize( width() * 42.5/100, height() * 35/100)); painter.drawText( r2, Qt::AlignCenter, QString("%1").arg( p_counter) ); if( __TAG == __TAG2 ) __TAG2 = ""; //draw current bar tag painter.setPen(Qt::white); painter.setFont(QFont("Arial", height() * 8/100 )); QRect r3(QPoint ( width() * 5/100 , height() * 65/100 ), QSize( width() * 90/100, height() * 14/100)); painter.drawText( r3, Qt::AlignCenter, QString( (__TAG) ) ); //draw next bar tag painter.setPen(Qt::gray); painter.setFont(QFont("Arial", height() * 6/100 )); QRect r4(QPoint ( width() * 5/100 , height() * 83/100 ), QSize( width() * 90/100, height() * 11/100)); painter.drawText( r4, Qt::AlignCenter, QString( __TAG2 ) ); } hydrogen-0.9.6-beta3/src/gui/src/Director.h000066400000000000000000000034161211146647700204440ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef METRO_BLINKER_H #define METRO_BLINKER_H #include #include "ui_Director_UI.h" #include #include #include #include "EventListener.h" class Director : public QDialog, public Ui_Director_UI, public H2Core::Object, public EventListener { Q_OBJECT public: Director( QWidget* pParent ); ~Director(); virtual void metronomeEvent( int nValue ); virtual void paintEvent( QPaintEvent*); private slots: void updateMetronomBackground(); //void updateBackground(); private: QTimer *timer; QColor __color; // QPixmap *m_pBackground; QPalette __blinkerPalette; int p_counter; int p_fadealpha; float f_bpm; int p_bar; int p_wechselblink; QString __TAG; QString __TAG2; QString __songName; int p_tagbeat; }; #endif hydrogen-0.9.6-beta3/src/gui/src/EventListener.h000066400000000000000000000035411211146647700214570ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef EVENT_LISTENER #define EVENT_LISTENER #include class EventListener { public: virtual void stateChangedEvent(int nState) { UNUSED( nState ); } virtual void patternChangedEvent() {} virtual void patternModifiedEvent() {} virtual void selectedPatternChangedEvent() {} virtual void selectedInstrumentChangedEvent() {} virtual void midiActivityEvent() {} virtual void noteOnEvent( int nInstrument ) { UNUSED( nInstrument ); } virtual void XRunEvent() {} virtual void errorEvent( int nErrorCode ) { UNUSED( nErrorCode ); } virtual void metronomeEvent( int nValue ) { UNUSED( nValue ); } virtual void rubberbandbpmchangeEvent() {} virtual void progressEvent( int nValue ) { UNUSED( nValue ); } virtual void jacksessionEvent( int nValue) { UNUSED( nValue ); } virtual void playlistLoadSongEvent( int nIndex ){ UNUSED( nIndex ); } virtual void undoRedoActionEvent( int nValue ){ UNUSED( nValue ); } virtual ~EventListener() {} }; #endif hydrogen-0.9.6-beta3/src/gui/src/ExportSongDialog.cpp000066400000000000000000000440241211146647700224540ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include "ExportSongDialog.h" #include "Skin.h" #include "HydrogenApp.h" #include "Mixer/Mixer.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace H2Core; const char* ExportSongDialog::__class_name = "ExportSongDialog"; ExportSongDialog::ExportSongDialog(QWidget* parent) : QDialog(parent) , Object( __class_name ) , m_bExporting( false ) { setupUi( this ); setModal( true ); setWindowTitle( trUtf8( "Export song" ) ); exportTypeCombo->addItem(trUtf8("Export to a single track")); exportTypeCombo->addItem(trUtf8("Export to seperate tracks")); exportTypeCombo->addItem(trUtf8("Both")); HydrogenApp::get_instance()->addEventListener( this ); m_pProgressBar->setValue( 0 ); sampleRateCombo->setCurrentIndex(1); sampleDepthCombo->setCurrentIndex(1); QString defaultFilename( Hydrogen::get_instance()->getSong()->get_filename() ); if( Hydrogen::get_instance()->getSong()->get_filename().isEmpty() ) defaultFilename = Hydrogen::get_instance()->getSong()->__name; defaultFilename.replace( '*', "_" ); defaultFilename.replace( ".h2song", "" ); defaultFilename += ".wav"; exportNameTxt->setText(defaultFilename); b_QfileDialog = false; m_bExportTrackouts = false; m_nInstrument = 0; m_sExtension = ".wav"; m_bOverwriteFiles = false; // use of rubberband batch if(checkUseOfRubberband()){ b_oldRubberbandBatchMode = Preferences::get_instance()->getRubberBandBatchMode(); toggleRubberbandCheckBox->setChecked(Preferences::get_instance()->getRubberBandBatchMode()); connect(toggleRubberbandCheckBox, SIGNAL(toggled(bool)), this, SLOT(toggleRubberbandBatchMode( bool ))); }else { b_oldRubberbandBatchMode = Preferences::get_instance()->getRubberBandBatchMode(); toggleRubberbandCheckBox->setEnabled( false ); } // use of timeline if( Hydrogen::get_instance()->m_timelinevector.size() > 0 ){ toggleTimeLineBPMCheckBox->setChecked(Preferences::get_instance()->getUseTimelineBpm()); b_oldTimeLineBPMMode = Preferences::get_instance()->getUseTimelineBpm(); connect(toggleTimeLineBPMCheckBox, SIGNAL(toggled(bool)), this, SLOT(togglTimeLineBPMMode( bool ))); }else { b_oldTimeLineBPMMode = Preferences::get_instance()->getUseTimelineBpm(); toggleTimeLineBPMCheckBox->setEnabled( false ); } // use of interpolation mode m_oldInterpolation = AudioEngine::get_instance()->get_sampler()->getInterpolateMode(); resampleComboBox->setCurrentIndex( m_oldInterpolation ); connect(resampleComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(resampleComboBoIndexChanged(int))); // if rubberbandBatch calculate time needed by lib rubberband to resample samples if(b_oldRubberbandBatchMode){ calculateRubberbandTime(); } } ExportSongDialog::~ExportSongDialog() { HydrogenApp::get_instance()->removeEventListener( this ); } /// \todo: memorizzare l'ultima directory usata void ExportSongDialog::on_browseBtn_clicked() { static QString lastUsedDir = QDir::homePath(); std::auto_ptr fd( new QFileDialog ); fd->setFileMode(QFileDialog::AnyFile); if( templateCombo->currentIndex() <= 4 ) fd->setNameFilter("Microsoft WAV (*.wav *.WAV)"); if( templateCombo->currentIndex() > 4 && templateCombo->currentIndex() < 8 ) fd->setNameFilter( "Apple AIFF (*.aiff *.AIFF)"); if( templateCombo->currentIndex() == 8) fd->setNameFilter( "Lossless Flac (*.flac *.FLAC)"); if( templateCombo->currentIndex() == 9) fd->setNameFilter( "Compressed Ogg (*.ogg *.OGG)"); fd->setDirectory( lastUsedDir ); fd->setAcceptMode( QFileDialog::AcceptSave ); fd->setWindowTitle( trUtf8( "Export song" ) ); QString defaultFilename = exportNameTxt->text(); fd->selectFile(defaultFilename); QString filename = ""; if (fd->exec()) { filename = fd->selectedFiles().first(); b_QfileDialog = true; } if ( ! filename.isEmpty() ) { lastUsedDir = fd->directory().absolutePath(); QString sNewFilename = filename; //this second extension check is mostly important if you leave a dot //without a regular extionsion in a filename if( !filename.endsWith( m_sExtension ) ){ filename.append(m_sExtension); } exportNameTxt->setText(filename); } if( filename.endsWith( ".ogg" ) || filename.endsWith( ".OGG" ) ){ sampleRateCombo->hide(); sampleDepthCombo->hide(); label->hide(); label_2->hide(); } } void ExportSongDialog::on_okBtn_clicked() { if ( m_bExporting ) { return; } m_bOverwriteFiles = false; /* If the song has a tempo change, notify the user * that hydrogen is unable export songs with * tempo changes correctly **/ Hydrogen* engine = Hydrogen::get_instance(); bool warn = Preferences::get_instance()->getShowExportWarning(); std::vector timelineVector = engine->m_timelinevector; /* 0: Export to single track * 1: Export to multiple tracks * 2: Export to both */ if( exportTypeCombo->currentIndex() == 0 || exportTypeCombo->currentIndex() == 2 ){ m_bExportTrackouts = false; QString filename = exportNameTxt->text(); if ( QFile( filename ).exists() == true && b_QfileDialog == false ) { int res; if( exportTypeCombo->currentIndex() == 0 ){ res = QMessageBox::information( this, "Hydrogen", tr( "The file %1 exists. \nOverwrite the existing file?").arg(filename), QMessageBox::Yes | QMessageBox::No ); } else { res = QMessageBox::information( this, "Hydrogen", tr( "The file %1 exists. \nOverwrite the existing file?").arg(filename), QMessageBox::Yes | QMessageBox::No | QMessageBox::YesToAll); } if (res == QMessageBox::YesToAll ) m_bOverwriteFiles = true; if (res == QMessageBox::No ) return; } if( exportTypeCombo->currentIndex() == 2 ) m_bExportTrackouts = true; Hydrogen::get_instance()->startExportSong( filename, sampleRateCombo->currentText().toInt(), sampleDepthCombo->currentText().toInt() ); return; } if( exportTypeCombo->currentIndex() == 1 ){ m_bExportTrackouts = true; exportTracks(); return; } } void ExportSongDialog::exportTracks() { Song *pSong = Hydrogen::get_instance()->getSong(); if( m_nInstrument <= pSong->get_instrument_list()->size() -1 ){ bool instrumentexists = false; //if a instrument contains no notes we jump to the next instrument unsigned nPatterns = pSong->get_pattern_list()->size(); for ( unsigned i = 0; i < nPatterns; i++ ) { Pattern *pat = pSong->get_pattern_list()->get( i ); const Pattern::notes_t* notes = pat->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pNote = it->second; assert( pNote ); if( pNote->get_instrument()->get_name() == Hydrogen::get_instance()->getSong()->get_instrument_list()->get(m_nInstrument)->get_name() ){ instrumentexists = true; break; } } } if( !instrumentexists ){ if( m_nInstrument == Hydrogen::get_instance()->getSong()->get_instrument_list()->size() -1 ){ m_bExportTrackouts = false; HydrogenApp::get_instance()->getMixer()->unmuteAll( true ); m_nInstrument = 0; return; }else { m_nInstrument++; exportTracks(); return; } } QStringList filenameList = exportNameTxt->text().split( m_sExtension ); QString firstItem; if( !filenameList.isEmpty() ){ firstItem = filenameList.first(); } QString newItem = firstItem + "-" + Hydrogen::get_instance()->getSong()->get_instrument_list()->get(m_nInstrument)->get_name(); QString filename = newItem.append(m_sExtension); if ( QFile( filename ).exists() == true && b_QfileDialog == false && !m_bOverwriteFiles) { int res = QMessageBox::information( this, "Hydrogen", tr( "The file %1 exists. \nOverwrite the existing file?").arg(filename), QMessageBox::Yes | QMessageBox::No | QMessageBox::YesToAll ); if (res == QMessageBox::No ) return; if (res == QMessageBox::YesToAll ) m_bOverwriteFiles = true; } //Hydrogen::get_instance()->stopExportSong(); Hydrogen::get_instance()->stopExportSong( false ); m_bExporting = false; HydrogenApp::get_instance()->getMixer()->soloClicked( m_nInstrument ); Hydrogen::get_instance()->startExportSong( filename, sampleRateCombo->currentText().toInt(), sampleDepthCombo->currentText().toInt() ); if(! (m_nInstrument == Hydrogen::get_instance()->getSong()->get_instrument_list()->size() -1 )){ m_nInstrument++; } } } void ExportSongDialog::on_closeBtn_clicked() { Hydrogen::get_instance()->stopExportSong( true ); m_bExporting = false; if(Preferences::get_instance()->getRubberBandBatchMode()){ EventQueue::get_instance()->push_event( EVENT_RECALCULATERUBBERBAND, -1); } Preferences::get_instance()->setRubberBandBatchMode( b_oldRubberbandBatchMode ); Preferences::get_instance()->setUseTimelineBpm( b_oldTimeLineBPMMode ); setResamplerMode(m_oldInterpolation); accept(); } void ExportSongDialog::on_templateCombo_currentIndexChanged(int index ) { /**index * 0 = wav 44100 | 16 * 1 = wav 48000 | 16 * 2 = wav 48000 | 24 * 3 = wav 22050 | 8 * 4 = wav 96000 | 32 * 5 = aiff 44100 | 16 * 6 = aiff 48000 | 16 * 7 = aiff 48000 | 24 * 8 = flac 48000 * 9 = ogg VBR , disable comboboxes **/ QString filename; QStringList splitty; filename = exportNameTxt->text(); splitty = filename.split("."); splitty.removeLast(); filename = splitty.join( "." ); switch ( index ) { case 0: sampleRateCombo->show(); sampleDepthCombo->show(); sampleRateCombo->setCurrentIndex ( 1 ); //44100hz sampleDepthCombo->setCurrentIndex ( 1 ); //16bit filename += ".wav"; m_sExtension = ".wav"; break; case 1: sampleRateCombo->show(); sampleDepthCombo->show(); sampleRateCombo->setCurrentIndex ( 2 ); //48000hz sampleDepthCombo->setCurrentIndex ( 1 ); //16bit filename += ".wav"; m_sExtension = ".wav"; break; case 2: sampleRateCombo->show(); sampleDepthCombo->show(); sampleRateCombo->setCurrentIndex ( 2 ); //48000hz sampleDepthCombo->setCurrentIndex ( 2 ); //24bit filename += ".wav"; m_sExtension = ".wav"; break; case 3: sampleRateCombo->show(); sampleDepthCombo->show(); sampleRateCombo->setCurrentIndex ( 0 ); //22050hz sampleDepthCombo->setCurrentIndex ( 0 ); //8bit filename += ".wav"; m_sExtension = ".wav"; break; case 4: sampleRateCombo->show(); sampleDepthCombo->show(); sampleRateCombo->setCurrentIndex ( 3 ); //96000hz sampleDepthCombo->setCurrentIndex ( 3 ); //32bit filename += ".wav"; m_sExtension = ".wav"; break; case 5: sampleRateCombo->show(); sampleDepthCombo->show(); sampleRateCombo->setCurrentIndex ( 1 ); //44100hz sampleDepthCombo->setCurrentIndex ( 1 ); //16bit filename += ".aiff"; m_sExtension = ".aiff"; break; case 6: sampleRateCombo->show(); sampleDepthCombo->show(); sampleRateCombo->setCurrentIndex ( 2 ); //48000hz sampleDepthCombo->setCurrentIndex ( 1 ); //16bit filename += ".aiff"; m_sExtension = ".aiff"; break; case 7: sampleRateCombo->show(); sampleDepthCombo->show(); sampleRateCombo->setCurrentIndex ( 2 ); //48000hz sampleDepthCombo->setCurrentIndex ( 2 ); //24bit filename += ".aiff"; m_sExtension = ".aiff"; break; case 8: sampleRateCombo->show(); sampleDepthCombo->show(); sampleRateCombo->setCurrentIndex ( 2 ); //48000hz sampleDepthCombo->setCurrentIndex ( 2 ); //24bit filename += ".flac"; m_sExtension = ".flac"; break; case 9: sampleRateCombo->hide(); sampleDepthCombo->hide(); label->hide(); label_2->hide(); filename += ".ogg"; m_sExtension = ".ogg"; break; default: sampleRateCombo->show(); sampleDepthCombo->show(); sampleRateCombo->setCurrentIndex ( 1 ); //44100hz sampleDepthCombo->setCurrentIndex ( 1 ); //16bit filename += ".wav"; m_sExtension = ".wav"; } exportNameTxt->setText(filename); } void ExportSongDialog::on_exportNameTxt_textChanged( const QString& ) { QString filename = exportNameTxt->text(); if ( ! filename.isEmpty() ) { okBtn->setEnabled(true); } else { okBtn->setEnabled(false); } if( filename.endsWith( ".ogg" ) || filename.endsWith( ".OGG" ) ){ if( templateCombo->currentIndex() != 9 ){ templateCombo->setCurrentIndex( 9 );//ogg } } else if( filename.endsWith( ".flac" ) || filename.endsWith( ".FLAC" ) ){ label->show(); label_2->show(); if( templateCombo->currentIndex() != 8 ){ templateCombo->setCurrentIndex( 8 );//flac } } else if( filename.endsWith( ".aiff" ) || filename.endsWith( ".AIFF" ) ){ label->show(); label_2->show(); if( templateCombo->currentIndex() < 5 || templateCombo->currentIndex() > 7 ){ templateCombo->setCurrentIndex( 5 );//aiff } } else if( filename.endsWith( ".wav" ) || filename.endsWith( ".WAV" ) ){ label->show(); label_2->show(); if( templateCombo->currentIndex() > 4 ){ templateCombo->setCurrentIndex( 0 );//wav } } } void ExportSongDialog::progressEvent( int nValue ) { m_pProgressBar->setValue( nValue ); if ( nValue == 100 ) { m_bExporting = false; if( m_nInstrument == Hydrogen::get_instance()->getSong()->get_instrument_list()->size() -1 ){ HydrogenApp::get_instance()->getMixer()->unmuteAll( false ); m_nInstrument = 0; m_bExportTrackouts = false; } if( m_bExportTrackouts ){ exportTracks(); } } if ( nValue < 100 ) { closeBtn->setEnabled(false); resampleComboBox->setEnabled(false); }else { closeBtn->setEnabled(true); resampleComboBox->setEnabled(true); } } void ExportSongDialog::toggleRubberbandBatchMode(bool toggled) { Preferences::get_instance()->setRubberBandBatchMode(toggled); if(toggled){ calculateRubberbandTime(); } } void ExportSongDialog::togglTimeLineBPMMode(bool toggled) { Preferences::get_instance()->setUseTimelineBpm(toggled); } void ExportSongDialog::resampleComboBoIndexChanged(int index ) { setResamplerMode(index); } void ExportSongDialog::setResamplerMode(int index) { switch ( index ){ case 0: AudioEngine::get_instance()->get_sampler()->setInterpolateMode( Sampler::LINEAR ); break; case 1: AudioEngine::get_instance()->get_sampler()->setInterpolateMode( Sampler::COSINE ); break; case 2: AudioEngine::get_instance()->get_sampler()->setInterpolateMode( Sampler::THIRD ); break; case 3: AudioEngine::get_instance()->get_sampler()->setInterpolateMode( Sampler::CUBIC ); break; case 4: AudioEngine::get_instance()->get_sampler()->setInterpolateMode( Sampler::HERMITE ); break; } } void ExportSongDialog::calculateRubberbandTime() { QApplication::setOverrideCursor(Qt::WaitCursor); closeBtn->setEnabled(false); resampleComboBox->setEnabled(false); okBtn->setEnabled(false); Hydrogen* engine = Hydrogen::get_instance(); float oldBPM = engine->getSong()->__bpm; float lowBPM = oldBPM; if( engine->m_timelinevector.size() >= 1 ){ for ( int t = 0; t < engine->m_timelinevector.size(); t++){ if(engine->m_timelinevector[t].m_htimelinebpm < lowBPM){ lowBPM = engine->m_timelinevector[t].m_htimelinebpm; } } } engine->setBPM(lowBPM); time_t sTime = time(NULL); Hydrogen *pEngine = Hydrogen::get_instance(); Song *song = pEngine->getSong(); assert(song); if(song){ InstrumentList *songInstrList = song->get_instrument_list(); assert(songInstrList); for ( unsigned nInstr = 0; nInstr < songInstrList->size(); ++nInstr ) { Instrument *pInstr = songInstrList->get( nInstr ); assert( pInstr ); if ( pInstr ){ for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { InstrumentLayer *pLayer = pInstr->get_layer( nLayer ); if ( pLayer ) { Sample *pSample = pLayer->get_sample(); if ( pSample ) { if( pSample->get_rubberband().use ) { Sample *newSample = Sample::load( pSample->get_filepath(), pSample->get_loops(), pSample->get_rubberband(), *pSample->get_velocity_envelope(), *pSample->get_pan_envelope() ); if( !newSample ){ continue; } delete pSample; // insert new sample from newInstrument AudioEngine::get_instance()->lock( RIGHT_HERE ); pLayer->set_sample( newSample ); AudioEngine::get_instance()->unlock(); } } } } } } } Preferences::get_instance()->setRubberBandCalcTime(time(NULL) - sTime); engine->setBPM(oldBPM); closeBtn->setEnabled(true); resampleComboBox->setEnabled(true); okBtn->setEnabled(true); QApplication::restoreOverrideCursor(); } bool ExportSongDialog::checkUseOfRubberband() { Hydrogen *pEngine = Hydrogen::get_instance(); Song *song = pEngine->getSong(); assert(song); if(song){ InstrumentList *songInstrList = song->get_instrument_list(); assert(songInstrList); for ( unsigned nInstr = 0; nInstr < songInstrList->size(); ++nInstr ) { Instrument *pInstr = songInstrList->get( nInstr ); assert( pInstr ); if ( pInstr ){ for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { InstrumentLayer *pLayer = pInstr->get_layer( nLayer ); if ( pLayer ) { Sample *pSample = pLayer->get_sample(); if ( pSample ) { if( pSample->get_rubberband().use ) { return true; } } } } } } } return false; } hydrogen-0.9.6-beta3/src/gui/src/ExportSongDialog.h000066400000000000000000000037401211146647700221210ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef EXPORT_SONG_DIALOG_H #define EXPORT_SONG_DIALOG_H #include "ui_ExportSongDialog_UI.h" #include "EventListener.h" #include /// /// Dialog for exporting song /// class ExportSongDialog : public QDialog, public Ui_ExportSongDialog_UI, public EventListener, public H2Core::Object { H2_OBJECT Q_OBJECT public: ExportSongDialog(QWidget* parent); ~ExportSongDialog(); virtual void progressEvent( int nValue ); bool b_QfileDialog; private slots: void on_browseBtn_clicked(); void on_closeBtn_clicked(); void on_okBtn_clicked(); void on_exportNameTxt_textChanged(const QString& text); void on_templateCombo_currentIndexChanged(int index ); void toggleRubberbandBatchMode(bool toggled); void togglTimeLineBPMMode(bool toggled); void resampleComboBoIndexChanged(int index ); private: void setResamplerMode(int index); void calculateRubberbandTime(); bool checkUseOfRubberband(); bool m_bExporting; void exportTracks(); bool m_bExportTrackouts; bool m_bOverwriteFiles; uint m_nInstrument; QString m_sExtension; bool b_oldRubberbandBatchMode; bool b_oldTimeLineBPMMode; int m_oldInterpolation; }; #endif hydrogen-0.9.6-beta3/src/gui/src/HelpBrowser.cpp000066400000000000000000000102011211146647700214460ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "HelpBrowser.h" #include "Skin.h" #include #include const char* SimpleHTMLBrowser::__class_name = "SimpleHTMLBrowser"; SimpleHTMLBrowser::SimpleHTMLBrowser( QWidget *pParent, const QString& sDataPath, const QString& sFilename, SimpleHTMLBrowserType type ) : QDialog( pParent ) , Object( __class_name ) , m_type( type ) , m_sDataPath( sDataPath ) , m_sFilename( sFilename ) { setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); if (m_type == MANUAL ) { setWindowTitle( trUtf8( "Manual" ) ); resize( 800, 600 ); setMinimumSize( 300, 200 ); setStyleSheet("color:#000000;"); } else { setWindowTitle( trUtf8( "Welcome to Hydrogen" ) ); resize( 800, 650 ); setMinimumSize( width(), height() ); setMaximumSize( width(), height() ); } m_pDontShowAnymoreBtn = new QPushButton( trUtf8( "Don't show this message anymore"), this ); connect( m_pDontShowAnymoreBtn, SIGNAL( clicked() ), this, SLOT( dontShowAnymoreBtnClicked() ) ); m_pDontShowAnymoreBtn->resize( 300, 25 ); m_pDontShowAnymoreBtn->hide(); m_pCloseWindowBtn = new QPushButton( trUtf8( "Ok" ), this ); connect( m_pCloseWindowBtn, SIGNAL( clicked() ), this, SLOT( closeWindow() ) ); m_pCloseWindowBtn->resize( 100, 25 ); m_pCloseWindowBtn->hide(); m_pDocHomeBtn = new QPushButton( trUtf8( "Documentation index" ), this ); connect( m_pDocHomeBtn, SIGNAL( clicked() ), this, SLOT( docIndex() ) ); m_pDocHomeBtn->resize( 300, 25 ); m_pDocHomeBtn->hide(); m_pBrowser = new QTextBrowser( this ); m_pBrowser->setReadOnly( true ); m_pBrowser->setSearchPaths( QStringList( m_sDataPath ) ); //m_pBrowser->setStyleSheet("background-color:#000000;"); setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); QFile file( m_sFilename.toLocal8Bit() ); // Read the text from a file if ( file.open( QIODevice::ReadOnly ) ) { QTextStream stream( &file ); m_pBrowser->setHtml( stream.readAll() ); } QRect rect( QApplication::desktop()->screenGeometry() ); move( rect.center() - this->rect().center() ); } SimpleHTMLBrowser::~SimpleHTMLBrowser() { // INFOLOG( "DESTROY" ); } void SimpleHTMLBrowser::showEvent ( QShowEvent *ev ) { UNUSED( ev ); // INFOLOG( "[showEvent]" ); } void SimpleHTMLBrowser::resizeEvent( QResizeEvent *ev ) { UNUSED( ev ); if ( m_type == MANUAL ) { m_pBrowser->move( 0, 29 ); m_pBrowser->resize( width(), height() - 29 ); m_pDocHomeBtn->move( 5, 3 ); m_pDocHomeBtn->show(); m_pDontShowAnymoreBtn->hide(); m_pCloseWindowBtn->hide(); } else if ( m_type == WELCOME ) { m_pBrowser->move( 0, 0 ); m_pBrowser->resize( width(), height() - 29 ); m_pDontShowAnymoreBtn->move( width() - m_pDontShowAnymoreBtn->width() - m_pCloseWindowBtn->width() - 5 - 5, height() - 27 ); m_pDontShowAnymoreBtn->show(); m_pCloseWindowBtn->move( width() - m_pCloseWindowBtn->width() - 5, height() - 27 ); m_pCloseWindowBtn->show(); m_pCloseWindowBtn->setDefault(true); m_pDocHomeBtn->hide(); } } void SimpleHTMLBrowser::dontShowAnymoreBtnClicked() { accept(); } void SimpleHTMLBrowser::closeWindow() { reject(); } void SimpleHTMLBrowser::docIndex() { INFOLOG( "[docIndex]" ); QFile file( m_sFilename ); // Read the text from a file if ( file.open( QIODevice::ReadOnly ) ) { QTextStream stream( &file ); m_pBrowser->setHtml( stream.readAll() ); } } hydrogen-0.9.6-beta3/src/gui/src/HelpBrowser.h000066400000000000000000000032541211146647700211250ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef HELPBROWSER_H #define HELPBROWSER_H #include #include #include #include class SimpleHTMLBrowser : public QDialog, public H2Core::Object { H2_OBJECT Q_OBJECT public: enum SimpleHTMLBrowserType { WELCOME, MANUAL }; SimpleHTMLBrowser( QWidget *pParent, const QString& sDataPath, const QString& sFilename, SimpleHTMLBrowserType type ); ~SimpleHTMLBrowser(); public slots: void dontShowAnymoreBtnClicked(); void closeWindow(); void docIndex(); private: SimpleHTMLBrowserType m_type; QTextBrowser *m_pBrowser; QPushButton *m_pDontShowAnymoreBtn; QPushButton *m_pCloseWindowBtn; QPushButton *m_pDocHomeBtn; QString m_sDataPath; QString m_sFilename; virtual void showEvent ( QShowEvent *ev ); virtual void resizeEvent( QResizeEvent *ev ); }; #endif hydrogen-0.9.6-beta3/src/gui/src/HydrogenApp.cpp000066400000000000000000000437621211146647700214540ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include "HydrogenApp.h" #include "Skin.h" #include "PreferencesDialog.h" #include "MainForm.h" #include "PlayerControl.h" #include "AudioEngineInfoForm.h" #include "HelpBrowser.h" #include "LadspaFXProperties.h" #include "InstrumentRack.h" #include "Director.h" #include "PatternEditor/PatternEditorPanel.h" #include "InstrumentEditor/InstrumentEditorPanel.h" #include "SongEditor/SongEditor.h" #include "SongEditor/SongEditorPanel.h" #include "SoundLibrary/SoundLibraryDatastructures.h" #include "PlaylistEditor/PlaylistDialog.h" #include "SampleEditor/SampleEditor.h" #include "Mixer/Mixer.h" #include "Mixer/MixerLine.h" #include "UndoActions.h" #include using namespace H2Core; HydrogenApp* HydrogenApp::m_pInstance = NULL; const char* HydrogenApp::__class_name = "HydrogenApp"; HydrogenApp::HydrogenApp( MainForm *pMainForm, Song *pFirstSong ) : Object( __class_name ) , m_pMainForm( pMainForm ) , m_pMixer( NULL ) , m_pPatternEditorPanel( NULL ) , m_pAudioEngineInfoForm( NULL ) , m_pSongEditorPanel( NULL ) , m_pHelpBrowser( NULL ) , m_pFirstTimeInfo( NULL ) , m_pPlayerControl( NULL ) , m_pPlaylistDialog( NULL ) , m_pSampleEditor( NULL ) , m_pDirector( NULL ) { m_pInstance = this; m_pEventQueueTimer = new QTimer(this); connect( m_pEventQueueTimer, SIGNAL( timeout() ), this, SLOT( onEventQueueTimer() ) ); m_pEventQueueTimer->start(50); // update at 20 fps // Create the audio engine :) Hydrogen::create_instance(); Hydrogen::get_instance()->setSong( pFirstSong ); Preferences::get_instance()->setLastSongFilename( pFirstSong->get_filename() ); SoundLibraryDatabase::create_instance(); //setup the undo stack m_undoStack = new QUndoStack( this ); // set initial title QString qsSongName( pFirstSong->__name ); if( qsSongName == "Untitled Song" && !pFirstSong->get_filename().isEmpty() ){ qsSongName = pFirstSong->get_filename(); qsSongName = qsSongName.section( '/', -1 ); } setWindowTitle( qsSongName ); Preferences *pPref = Preferences::get_instance(); setupSinglePanedInterface(); // restore audio engine form properties m_pAudioEngineInfoForm = new AudioEngineInfoForm( 0 ); WindowProperties audioEngineInfoProp = pPref->getAudioEngineInfoProperties(); m_pAudioEngineInfoForm->move( audioEngineInfoProp.x, audioEngineInfoProp.y ); if ( audioEngineInfoProp.visible ) { m_pAudioEngineInfoForm->show(); } else { m_pAudioEngineInfoForm->hide(); } m_pPlaylistDialog = new PlaylistDialog( 0 ); m_pDirector = new Director( 0 ); // m_pSampleEditor = new SampleEditor( 0 ); showInfoSplash(); // First time information } HydrogenApp::~HydrogenApp() { INFOLOG( "[~HydrogenApp]" ); m_pEventQueueTimer->stop(); //delete the undo tmp directory cleanupTemporaryFiles(); delete m_pHelpBrowser; delete m_pAudioEngineInfoForm; delete m_pMixer; delete m_pPlaylistDialog; delete m_pDirector; delete m_pSampleEditor; delete SoundLibraryDatabase::get_instance(); Hydrogen *engine = Hydrogen::get_instance(); if (engine) { H2Core::Song * song = engine->getSong(); // Hydrogen calls removeSong on from its destructor, so here we just delete the objects: delete engine; delete song; } #ifdef H2CORE_HAVE_LADSPA for (uint nFX = 0; nFX < MAX_FX; nFX++) { delete m_pLadspaFXProperties[nFX]; } #endif } /// Return an HydrogenApp m_pInstance HydrogenApp* HydrogenApp::get_instance() { if (m_pInstance == NULL) { std::cerr << "Error! HydrogenApp::get_instance (m_pInstance = NULL)" << std::endl; } return m_pInstance; } void HydrogenApp::setupSinglePanedInterface() { Preferences *pPref = Preferences::get_instance(); int uiLayout = pPref->getDefaultUILayout(); // MAINFORM WindowProperties mainFormProp = pPref->getMainFormProperties(); m_pMainForm->resize( mainFormProp.width, mainFormProp.height ); m_pMainForm->move( mainFormProp.x, mainFormProp.y ); pSplitter = new QSplitter( NULL ); pSplitter->setOrientation( Qt::Vertical ); pSplitter->setOpaqueResize( true ); pTab = new QTabWidget( NULL ); pTab->setStyleSheet("color: white;"); // SONG EDITOR if( uiLayout == Preferences::UI_LAYOUT_SINGLE_PANE) m_pSongEditorPanel = new SongEditorPanel( pSplitter ); else m_pSongEditorPanel = new SongEditorPanel( pTab ); WindowProperties songEditorProp = pPref->getSongEditorProperties(); m_pSongEditorPanel->resize( songEditorProp.width, songEditorProp.height ); if( uiLayout == Preferences::UI_LAYOUT_TABBED) pTab->addTab( m_pSongEditorPanel, trUtf8("Song Editor") ); // this HBox will contain the InstrumentRack and the Pattern editor QWidget *pSouthPanel = new QWidget( pSplitter ); QHBoxLayout *pEditorHBox = new QHBoxLayout(); pEditorHBox->setSpacing( 5 ); pEditorHBox->setMargin( 0 ); pSouthPanel->setLayout( pEditorHBox ); // INSTRUMENT RACK m_pInstrumentRack = new InstrumentRack( NULL ); if( uiLayout == Preferences::UI_LAYOUT_TABBED ){ pTab->setMovable( false ); pTab->setTabsClosable( false ); pTab->addTab( pSouthPanel, trUtf8( "Instrument + Pattern") ); } // PATTERN EDITOR m_pPatternEditorPanel = new PatternEditorPanel( NULL ); WindowProperties patternEditorProp = pPref->getPatternEditorProperties(); m_pPatternEditorPanel->resize( patternEditorProp.width, patternEditorProp.height ); pEditorHBox->addWidget( m_pPatternEditorPanel ); pEditorHBox->addWidget( m_pInstrumentRack ); // PLayer control m_pPlayerControl = new PlayerControl( NULL ); QWidget *mainArea = new QWidget( m_pMainForm ); // this is the main widget m_pMainForm->setCentralWidget( mainArea ); // LAYOUT!! QVBoxLayout *pMainVBox = new QVBoxLayout(); pMainVBox->setSpacing( 5 ); pMainVBox->setMargin( 0 ); pMainVBox->addWidget( m_pPlayerControl ); if( uiLayout == Preferences::UI_LAYOUT_SINGLE_PANE) pMainVBox->addWidget( pSplitter ); else { pMainVBox->addWidget( pTab ); } mainArea->setLayout( pMainVBox ); // MIXER m_pMixer = new Mixer(0); WindowProperties mixerProp = pPref->getMixerProperties(); m_pMixer->resize( mixerProp.width, mixerProp.height ); m_pMixer->move( mixerProp.x, mixerProp.y ); if( uiLayout == Preferences::UI_LAYOUT_TABBED){ pTab->addTab(m_pMixer,trUtf8("Mixer")); } m_pMixer->updateMixer(); if ( mixerProp.visible && uiLayout == Preferences::UI_LAYOUT_SINGLE_PANE ) { m_pMixer->show(); } else { m_pMixer->hide(); } // HELP BROWSER QString sDocPath = H2Core::Filesystem::doc_dir(); QString sDocURI = sDocPath + "/manual.html"; m_pHelpBrowser = new SimpleHTMLBrowser( NULL, sDocPath, sDocURI, SimpleHTMLBrowser::MANUAL ); #ifdef H2CORE_HAVE_LADSPA // LADSPA FX for (uint nFX = 0; nFX < MAX_FX; nFX++) { m_pLadspaFXProperties[nFX] = new LadspaFXProperties( NULL, nFX ); m_pLadspaFXProperties[nFX]->hide(); WindowProperties prop = pPref->getLadspaProperties(nFX); m_pLadspaFXProperties[nFX]->move( prop.x, prop.y ); if ( prop.visible ) { m_pLadspaFXProperties[nFX]->show(); } else { m_pLadspaFXProperties[nFX]->hide(); } } #endif if( uiLayout == Preferences::UI_LAYOUT_TABBED){ pTab->setCurrentIndex( Preferences::get_instance()->getLastOpenTab() ); QObject::connect(pTab, SIGNAL(currentChanged(int)),this,SLOT(currentTabChanged(int))); } } void HydrogenApp::currentTabChanged(int index) { Preferences::get_instance()->setLastOpenTab( index ); } void HydrogenApp::closeFXProperties() { #ifdef H2CORE_HAVE_LADSPA for (uint nFX = 0; nFX < MAX_FX; nFX++) { m_pLadspaFXProperties[nFX]->close(); } #endif } void HydrogenApp::setSong(Song* song) { Song* oldSong = (Hydrogen::get_instance())->getSong(); if (oldSong != NULL) { (Hydrogen::get_instance())->removeSong(); delete oldSong; oldSong = NULL; } Hydrogen::get_instance()->setSong( song ); Preferences::get_instance()->setLastSongFilename( song->get_filename() ); m_pSongEditorPanel->updateAll(); m_pPatternEditorPanel->updateSLnameLabel(); QString songName( song->__name ); if( songName == "Untitled Song" && !song->get_filename().isEmpty() ){ songName = song->get_filename(); songName = songName.section( '/', -1 ); } setWindowTitle( songName ); m_pMainForm->updateRecentUsedSongList(); } void HydrogenApp::showMixer(bool show) { /* * Switch to Mixer tab with alt+m in tabbed mode, * otherwise open mixer window */ Preferences *pPref = Preferences::get_instance(); int uiLayout = pPref->getDefaultUILayout(); if( uiLayout == Preferences::UI_LAYOUT_TABBED ) { pTab->setCurrentIndex( 2 ); } else { m_pMixer->setVisible( show ); } } void HydrogenApp::showInstrumentPanel(bool show) { /* * Switch to pattern editor/instrument tab in tabbed mode, * otherwise hide instrument panel */ Preferences *pPref = Preferences::get_instance(); int uiLayout = pPref->getDefaultUILayout(); if( uiLayout == Preferences::UI_LAYOUT_TABBED ) { pTab->setCurrentIndex( 1 ); getInstrumentRack()->setHidden( show ); } else { getInstrumentRack()->setHidden( show ); } } void HydrogenApp::showPreferencesDialog() { PreferencesDialog preferencesDialog(m_pMainForm); preferencesDialog.exec(); } void HydrogenApp::setStatusBarMessage( const QString& msg, int msec ) { getPlayerControl()->resetStatusLabel(); getPlayerControl()->showMessage( msg, msec ); } void HydrogenApp::setWindowTitle( const QString& title){ m_pMainForm->setWindowTitle( ( "Hydrogen " + QString( get_version().c_str()) + QString( " - " ) + title ) ); } void HydrogenApp::setScrollStatusBarMessage( const QString& msg, int msec, bool test ) { getPlayerControl()->showScrollMessage( msg, msec , test); } void HydrogenApp::showAudioEngineInfoForm() { m_pAudioEngineInfoForm->hide(); m_pAudioEngineInfoForm->show(); } void HydrogenApp::showPlaylistDialog() { m_pPlaylistDialog->hide(); m_pPlaylistDialog->show(); } void HydrogenApp::showDirector() { m_pDirector->hide(); m_pDirector->show(); } void HydrogenApp::showSampleEditor( QString name, int mSelectedLayer ) { if ( m_pSampleEditor ){ QApplication::setOverrideCursor(Qt::WaitCursor); m_pSampleEditor->close(); delete m_pSampleEditor; m_pSampleEditor = NULL; QApplication::restoreOverrideCursor(); } QApplication::setOverrideCursor(Qt::WaitCursor); m_pSampleEditor = new SampleEditor( 0, mSelectedLayer, name ); m_pSampleEditor->show(); QApplication::restoreOverrideCursor(); } void HydrogenApp::showInfoSplash() { QString sDocPath = H2Core::Filesystem::doc_dir().append("/infoSplash"); QDir dir(sDocPath); if ( !dir.exists() ) { ERRORLOG( QString("[showInfoSplash] Directory ").append( sDocPath ).append( " not found." ) ); return; } QString sFilename; int nNewsID = 0; QFileInfoList list = dir.entryInfoList(); for ( int i =0; i < list.size(); ++i ) { QString sFile = list.at( i ).fileName(); if ( sFile == "." || sFile == ".." ) { continue; } int nPos = sFile.lastIndexOf( "-" ); QString sNewsID = sFile.mid( nPos + 1, sFile.length() - nPos - 1 ); int nID = sNewsID.toInt(); if ( nID > nNewsID ) { sFilename = sFile; } // INFOLOG( "news: " + sFilename + " id: " + sNewsID ); } INFOLOG( "[showInfoSplash] Selected news: " + sFilename ); QString sLastRead = Preferences::get_instance()->getLastNews(); if ( sLastRead != sFilename && !sFilename.isEmpty() ) { QString sDocURI = sDocPath; sDocURI.append( "/" ).append( sFilename ); SimpleHTMLBrowser *m_pFirstTimeInfo = new SimpleHTMLBrowser( m_pMainForm, sDocPath, sDocURI, SimpleHTMLBrowser::WELCOME ); if ( m_pFirstTimeInfo->exec() == QDialog::Accepted ) { Preferences::get_instance()->setLastNews( sFilename ); } } } void HydrogenApp::onDrumkitLoad( QString name ){ setStatusBarMessage( trUtf8( "Drumkit loaded: [%1]" ).arg( name ), 2000 ); m_pPatternEditorPanel->updateSLnameLabel( ); } void HydrogenApp::enableDestructiveRecMode(){ m_pPatternEditorPanel->displayorHidePrePostCB(); } void HydrogenApp::onEventQueueTimer() { // use the timer to do schedule instrument slaughter; EventQueue *pQueue = EventQueue::get_instance(); Event event; while ( ( event = pQueue->pop_event() ).type != EVENT_NONE ) { for (int i = 0; i < (int)m_eventListeners.size(); i++ ) { EventListener *pListener = m_eventListeners[ i ]; switch ( event.type ) { case EVENT_STATE: pListener->stateChangedEvent( event.value ); break; case EVENT_PATTERN_CHANGED: pListener->patternChangedEvent(); break; case EVENT_PATTERN_MODIFIED: pListener->patternModifiedEvent(); break; case EVENT_SELECTED_PATTERN_CHANGED: pListener->selectedPatternChangedEvent(); break; case EVENT_SELECTED_INSTRUMENT_CHANGED: pListener->selectedInstrumentChangedEvent(); break; case EVENT_MIDI_ACTIVITY: pListener->midiActivityEvent(); break; case EVENT_NOTEON: pListener->noteOnEvent( event.value ); break; case EVENT_ERROR: pListener->errorEvent( event.value ); break; case EVENT_XRUN: pListener->XRunEvent(); break; case EVENT_METRONOME: pListener->metronomeEvent( event.value ); break; case EVENT_RECALCULATERUBBERBAND: pListener->rubberbandbpmchangeEvent(); break; case EVENT_PROGRESS: pListener->progressEvent( event.value ); break; case EVENT_JACK_SESSION: pListener->jacksessionEvent( event.value ); break; case EVENT_PLAYLIST_LOADSONG: pListener->playlistLoadSongEvent( event.value ); break; case EVENT_UNDO_REDO: pListener->undoRedoActionEvent( event.value ); break; default: ERRORLOG( QString("[onEventQueueTimer] Unhandled event: %1").arg( event.type ) ); } } } // midi notes while(!pQueue->m_addMidiNoteVector.empty()){ int rounds = 1; if(pQueue->m_addMidiNoteVector[0].b_noteExist)// runn twice, delete old note and add new note. this let the undo stack consistent rounds = 2; for(int i = 0; im_addMidiNoteVector[0].m_column, pQueue->m_addMidiNoteVector[0].m_row, pQueue->m_addMidiNoteVector[0].m_pattern, pQueue->m_addMidiNoteVector[0].m_length, pQueue->m_addMidiNoteVector[0].f_velocity, pQueue->m_addMidiNoteVector[0].f_pan_L, pQueue->m_addMidiNoteVector[0].f_pan_R, 0.0, pQueue->m_addMidiNoteVector[0].nk_noteKeyVal, pQueue->m_addMidiNoteVector[0].no_octaveKeyVal, false, false, pQueue->m_addMidiNoteVector[0].b_isMidi, pQueue->m_addMidiNoteVector[0].b_isInstrumentMode); HydrogenApp::get_instance()->m_undoStack->push( action ); } pQueue->m_addMidiNoteVector.erase(pQueue->m_addMidiNoteVector.begin()); } } void HydrogenApp::addEventListener( EventListener* pListener ) { if (pListener) { m_eventListeners.push_back( pListener ); } } void HydrogenApp::removeEventListener( EventListener* pListener ) { for ( uint i = 0; i < m_eventListeners.size(); i++ ) { if ( pListener == m_eventListeners[ i ] ) { m_eventListeners.erase( m_eventListeners.begin() + i ); } } } /** * Adds temporary file to the list */ void HydrogenApp::addTemporaryFile( const QString& path) { temporaryFileList.append( path ); } /** * Removes temporary files that were created * for undo'ing things. */ void HydrogenApp::cleanupTemporaryFiles() { for (int i = 0; i < temporaryFileList.size(); ++i){ Filesystem::rm( temporaryFileList[i] ); } Filesystem::rm( Preferences::get_instance()->getTmpDirectory() ); } hydrogen-0.9.6-beta3/src/gui/src/HydrogenApp.h000066400000000000000000000105311211146647700211050ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef HYDROGEN_APP_H #define HYDROGEN_APP_H #include #include #include #include "EventListener.h" #include #include #include #include namespace H2Core { class Song; } class SongEditorPanel; class MainForm; class PlayerControl; class PatternEditorPanel; class InstrumentEditorPanel; class SongEditor; class Mixer; class AudioEngineInfoForm; class SimpleHTMLBrowser; class LadspaFXProperties; class LadspaFXInfo; class LadspaFXGroup; class InstrumentRack; class PlaylistDialog; class SampleEditor; class Director; class HydrogenApp : public QObject, public H2Core::Object { H2_OBJECT Q_OBJECT public: HydrogenApp( MainForm* pMainForm, H2Core::Song *pFirstSong ); /// Returns the instance of HydrogenApp class static HydrogenApp* get_instance(); virtual ~HydrogenApp(); void setSong( H2Core::Song* pSong ); void showPreferencesDialog(); void showMixer(bool bShow); void showInstrumentPanel(bool); void showAudioEngineInfoForm(); void showPlaylistDialog(); void showDirector(); void showSampleEditor( QString name, int mSelectedLayer ); Mixer* getMixer() { return m_pMixer; } MainForm* getMainForm() { return m_pMainForm; } SongEditorPanel* getSongEditorPanel() { return m_pSongEditorPanel; } AudioEngineInfoForm* getAudioEngineInfoForm() { return m_pAudioEngineInfoForm; } PlaylistDialog* getPlayListDialog() { return m_pPlaylistDialog; } Director* getDirector() { return m_pDirector; } SampleEditor* getSampleEditor() { return m_pSampleEditor; } SimpleHTMLBrowser* getHelpBrowser() { return m_pHelpBrowser; } PatternEditorPanel* getPatternEditorPanel() { return m_pPatternEditorPanel; } PlayerControl* getPlayerControl() { return m_pPlayerControl; } InstrumentRack* getInstrumentRack(){ return m_pInstrumentRack; } QUndoStack* m_undoStack; QTabWidget *pTab; QSplitter *pSplitter; void setStatusBarMessage( const QString& msg, int msec = 0 ); void setScrollStatusBarMessage( const QString& msg, int msec = 0, bool test = true ); void setWindowTitle( const QString& title); #ifdef H2CORE_HAVE_LADSPA LadspaFXProperties* getLadspaFXProperties(uint nFX) { return m_pLadspaFXProperties[nFX]; } #endif void addEventListener( EventListener* pListener ); void removeEventListener( EventListener* pListener ); void closeFXProperties(); void onDrumkitLoad( QString name ); void enableDestructiveRecMode(); void cleanupTemporaryFiles(); void addTemporaryFile( const QString& ); public slots: void onEventQueueTimer(); void currentTabChanged(int); private: static HydrogenApp *m_pInstance; ///< HydrogenApp instance #ifdef H2CORE_HAVE_LADSPA LadspaFXProperties *m_pLadspaFXProperties[MAX_FX]; #endif MainForm *m_pMainForm; Mixer *m_pMixer; PatternEditorPanel* m_pPatternEditorPanel; AudioEngineInfoForm *m_pAudioEngineInfoForm; SongEditorPanel *m_pSongEditorPanel; SimpleHTMLBrowser *m_pHelpBrowser; SimpleHTMLBrowser *m_pFirstTimeInfo; InstrumentRack* m_pInstrumentRack; PlayerControl *m_pPlayerControl; PlaylistDialog *m_pPlaylistDialog; SampleEditor *m_pSampleEditor; Director *m_pDirector; QTimer *m_pEventQueueTimer; std::vector m_eventListeners; QStringList temporaryFileList; // implement EngineListener interface void engineError(uint nErrorCode); //void setupTopLevelInterface(); void setupSinglePanedInterface(); void showInfoSplash(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/InstrumentEditor/000077500000000000000000000000001211146647700220335ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/src/InstrumentEditor/InstrumentEditor.cpp000066400000000000000000000652521211146647700260700ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace H2Core; #include "../HydrogenApp.h" #include "../Skin.h" #include "../widgets/Rotary.h" #include "../widgets/ClickableLabel.h" #include "../widgets/Button.h" #include "../widgets/LCD.h" #include "../widgets/Fader.h" #include "InstrumentEditor.h" #include "WaveDisplay.h" #include "LayerPreview.h" #include "AudioFileBrowser/AudioFileBrowser.h" const char* InstrumentEditor::__class_name = "InstrumentEditor"; InstrumentEditor::InstrumentEditor( QWidget* pParent ) : QWidget( pParent ) , Object( __class_name ) , m_pInstrument( NULL ) , m_nSelectedLayer( 0 ) { setFixedWidth( 290 ); // Instrument properties top m_pInstrumentPropTop = new PixmapWidget( this ); m_pInstrumentPropTop->setPixmap( "/instrumentEditor/instrumentTab_top.png" ); m_pShowInstrumentBtn = new ToggleButton( m_pInstrumentPropTop, "/skin_btn_on.png", "/skin_btn_off.png", "/skin_btn_over.png", QSize( 100, 17 ), true ); m_pShowInstrumentBtn->setText(trUtf8("General")); m_pShowInstrumentBtn->setToolTip( trUtf8( "Show instrument properties" ) ); connect( m_pShowInstrumentBtn, SIGNAL( clicked(Button*) ), this, SLOT( buttonClicked(Button*) ) ); m_pShowInstrumentBtn->move( 40, 7 ); m_pShowInstrumentBtn->setPressed( true ); m_pShowLayersBtn = new ToggleButton( m_pInstrumentPropTop, "/skin_btn_on.png", "/skin_btn_off.png", "/skin_btn_over.png", QSize( 100, 17 ), true ); m_pShowLayersBtn->setText( trUtf8("Layers") ); m_pShowLayersBtn->setToolTip( trUtf8( "Show layers properties" ) ); connect( m_pShowLayersBtn, SIGNAL( clicked(Button*) ), this, SLOT( buttonClicked(Button*) ) ); m_pShowLayersBtn->move( 144, 7 ); // Instrument properties m_pInstrumentProp = new PixmapWidget( this ); m_pInstrumentProp->move(0, 31); m_pInstrumentProp->setPixmap( "/instrumentEditor/instrumentTab.png" ); m_pNameLbl = new ClickableLabel( m_pInstrumentProp ); m_pNameLbl->setGeometry( 8, 5, 275, 28 ); ///////////// //Midi Out m_pMidiOutChannelLCD = new LCDDisplay( m_pInstrumentProp, LCDDigit::SMALL_BLUE, 4 ); m_pMidiOutChannelLCD->move( 67, 243 ); m_pAddMidiOutChannelBtn = new Button( m_pInstrumentProp, "/lcd/LCDSpinBox_up_on.png", "/lcd/LCDSpinBox_up_off.png", "/lcd/LCDSpinBox_up_over.png", QSize( 16, 8 ) ); m_pAddMidiOutChannelBtn->move( 109, 243 ); connect( m_pAddMidiOutChannelBtn, SIGNAL( clicked(Button*) ), this, SLOT( midiOutChannelBtnClicked(Button*) ) ); m_pDelMidiOutChannelBtn = new Button( m_pInstrumentProp, "/lcd/LCDSpinBox_down_on.png", "/lcd/LCDSpinBox_down_off.png", "/lcd/LCDSpinBox_down_over.png", QSize(16,8) ); m_pDelMidiOutChannelBtn->move( 109, 251 ); connect( m_pDelMidiOutChannelBtn, SIGNAL( clicked(Button*) ), this, SLOT( midiOutChannelBtnClicked(Button*) ) ); /// m_pMidiOutNoteLCD = new LCDDisplay( m_pInstrumentProp, LCDDigit::SMALL_BLUE, 4 ); m_pMidiOutNoteLCD->move( 160, 243 ); m_pAddMidiOutNoteBtn = new Button( m_pInstrumentProp, "/lcd/LCDSpinBox_up_on.png", "/lcd/LCDSpinBox_up_off.png", "/lcd/LCDSpinBox_up_over.png", QSize( 16, 8 ) ); m_pAddMidiOutNoteBtn->move( 202, 243 ); connect( m_pAddMidiOutNoteBtn, SIGNAL( clicked(Button*) ), this, SLOT( midiOutNoteBtnClicked(Button*) ) ); m_pDelMidiOutNoteBtn = new Button( m_pInstrumentProp, "/lcd/LCDSpinBox_down_on.png", "/lcd/LCDSpinBox_down_off.png", "/lcd/LCDSpinBox_down_over.png", QSize(16,8) ); m_pDelMidiOutNoteBtn->move( 202, 251 ); connect( m_pDelMidiOutNoteBtn, SIGNAL( clicked(Button*) ), this, SLOT( midiOutNoteBtnClicked(Button*) ) ); ///////////// QFont boldFont; boldFont.setBold(true); m_pNameLbl->setFont( boldFont ); connect( m_pNameLbl, SIGNAL( labelClicked(ClickableLabel*) ), this, SLOT( labelClicked(ClickableLabel*) ) ); m_pRandomPitchRotary = new Rotary( m_pInstrumentProp, Rotary::TYPE_NORMAL, trUtf8( "Random pitch factor" ), false, true ); m_pRandomPitchRotary->move( 117, 192 ); connect( m_pRandomPitchRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); // Filter m_pFilterBypassBtn = new ToggleButton( m_pInstrumentProp, "/instrumentEditor/bypass_on.png", "/instrumentEditor/bypass_off.png", "/instrumentEditor/bypass_over.png", QSize( 30, 13 ) ); connect( m_pFilterBypassBtn, SIGNAL( clicked(Button*) ), this, SLOT( filterActiveBtnClicked(Button*) ) ); m_pCutoffRotary = new Rotary( m_pInstrumentProp, Rotary::TYPE_NORMAL, trUtf8( "Filter Cutoff" ), false, true ); connect( m_pCutoffRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pResonanceRotary = new Rotary( m_pInstrumentProp, Rotary::TYPE_NORMAL, trUtf8( "Filter resonance" ), false, true ); connect( m_pResonanceRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pFilterBypassBtn->move( 70, 152 ); m_pCutoffRotary->move( 117, 146 ); m_pResonanceRotary->move( 170, 146 ); //~ Filter // ADSR m_pAttackRotary = new Rotary( m_pInstrumentProp, Rotary::TYPE_NORMAL, trUtf8( "Attack" ), false, true ); m_pDecayRotary = new Rotary( m_pInstrumentProp, Rotary::TYPE_NORMAL, trUtf8( "Decay" ), false, true ); m_pSustainRotary = new Rotary( m_pInstrumentProp, Rotary::TYPE_NORMAL, trUtf8( "Sustain" ), false, true ); m_pReleaseRotary = new Rotary( m_pInstrumentProp, Rotary::TYPE_NORMAL, trUtf8( "Release" ), false, true ); connect( m_pAttackRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); connect( m_pDecayRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); connect( m_pSustainRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); connect( m_pReleaseRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pAttackRotary->move( 53, 52 ); m_pDecayRotary->move( 105, 52 ); m_pSustainRotary->move( 157, 52 ); m_pReleaseRotary->move( 209, 52 ); //~ ADSR // instrument gain m_pInstrumentGainLCD = new LCDDisplay( m_pInstrumentProp, LCDDigit::SMALL_BLUE, 4 ); m_pInstrumentGain = new Rotary( m_pInstrumentProp, Rotary::TYPE_NORMAL, trUtf8( "Instrument gain" ), false, false ); connect( m_pInstrumentGain, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pInstrumentGainLCD->move( 67, 105 ); m_pInstrumentGain->move( 117, 100 ); m_pMuteGroupLCD = new LCDDisplay( m_pInstrumentProp, LCDDigit::SMALL_BLUE, 4 ); m_pMuteGroupLCD->move( 160, 105 ); m_pAddMuteGroupBtn = new Button( m_pInstrumentProp, "/lcd/LCDSpinBox_up_on.png", "/lcd/LCDSpinBox_up_off.png", "/lcd/LCDSpinBox_up_over.png", QSize( 16, 8 ) ); m_pAddMuteGroupBtn->move( 202, 104 ); connect( m_pAddMuteGroupBtn, SIGNAL( clicked(Button*) ), this, SLOT( muteGroupBtnClicked(Button*) ) ); m_pDelMuteGroupBtn = new Button( m_pInstrumentProp, "/lcd/LCDSpinBox_down_on.png", "/lcd/LCDSpinBox_down_off.png", "/lcd/LCDSpinBox_down_over.png", QSize(16,8) ); m_pDelMuteGroupBtn->move( 202, 113 ); connect( m_pDelMuteGroupBtn, SIGNAL( clicked(Button*) ), this, SLOT( muteGroupBtnClicked(Button*) ) ); m_pIsStopNoteCheckBox = new QCheckBox ( trUtf8( "Auto-Stop-Note" ), m_pInstrumentProp ); m_pIsStopNoteCheckBox->move( 15, 300 ); m_pIsStopNoteCheckBox->setToolTip( trUtf8( "Stop the current playing instrument-note before trigger the next note sample." ) ); connect( m_pIsStopNoteCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( onIsStopNoteCheckBoxClicked( bool ) ) ); //~ Instrument properties // LAYER properties m_pLayerProp = new PixmapWidget( this ); m_pLayerProp->move( 0, 31 ); m_pLayerProp->hide(); m_pLayerProp->setPixmap( "/instrumentEditor/layerTabnew.png" ); // Layer preview m_pLayerPreview = new LayerPreview( NULL ); m_pLayerScrollArea = new QScrollArea( m_pLayerProp); m_pLayerScrollArea->setFrameShape( QFrame::NoFrame ); m_pLayerScrollArea->move( 6, 4 ); m_pLayerScrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); if ( MAX_LAYERS > 16) m_pLayerScrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); m_pLayerScrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pLayerScrollArea->setMaximumHeight( 182 ); m_pLayerScrollArea->setWidget( m_pLayerPreview ); // Waveform display m_pWaveDisplay = new WaveDisplay( m_pLayerProp ); m_pWaveDisplay->updateDisplay( NULL ); m_pWaveDisplay->move( 5, 201 ); m_pLoadLayerBtn = new Button( m_pLayerProp, "/instrumentEditor/loadLayer_on.png", "/instrumentEditor/loadLayer_off.png", "/instrumentEditor/loadLayer_over.png", QSize( 90, 13 ) ); m_pRemoveLayerBtn = new Button( m_pLayerProp, "/instrumentEditor/deleteLayer_on.png", "/instrumentEditor/deleteLayer_off.png", "/instrumentEditor/deleteLayer_over.png", QSize( 90, 13 ) ); m_pSampleEditorBtn = new Button( m_pLayerProp, "/instrumentEditor/editLayer_on.png", "/instrumentEditor/editLayer_off.png", "/instrumentEditor/editLayer_over.png", QSize( 90, 13 ) ); m_pLoadLayerBtn->move( 48, 267 ); m_pRemoveLayerBtn->move( 145, 267 ); m_pLoadLayerBtn->move( 6, 266 ); m_pRemoveLayerBtn->move( 99, 266 ); m_pSampleEditorBtn->move( 191, 266 ); connect( m_pLoadLayerBtn, SIGNAL( clicked(Button*) ), this, SLOT( buttonClicked(Button*) ) ); connect( m_pRemoveLayerBtn, SIGNAL( clicked(Button*) ), this, SLOT( buttonClicked(Button*) ) ); connect( m_pSampleEditorBtn, SIGNAL( clicked(Button*) ), this, SLOT( buttonClicked(Button*) ) ); // Layer gain m_pLayerGainLCD = new LCDDisplay( m_pLayerProp, LCDDigit::SMALL_BLUE, 4 ); m_pLayerGainRotary = new Rotary( m_pLayerProp, Rotary::TYPE_NORMAL, trUtf8( "Layer gain" ), false, false ); connect( m_pLayerGainRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pLayerPitchCoarseLCD = new LCDDisplay( m_pLayerProp, LCDDigit::SMALL_BLUE, 4 ); m_pLayerPitchFineLCD = new LCDDisplay( m_pLayerProp, LCDDigit::SMALL_BLUE, 4 ); m_pLayerPitchCoarseRotary = new Rotary( m_pLayerProp, Rotary::TYPE_CENTER, trUtf8( "Layer pitch (Coarse)" ), true, false ); m_pLayerPitchCoarseRotary->setMin( -24.0 ); m_pLayerPitchCoarseRotary->setMax( 24.0 ); connect( m_pLayerPitchCoarseRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pLayerPitchFineRotary = new Rotary( m_pLayerProp, Rotary::TYPE_CENTER, trUtf8( "Layer pitch (Fine)" ), false, false ); m_pLayerPitchFineRotary->setMin( -50.0 ); m_pLayerPitchFineRotary->setMax( 50.0 ); connect( m_pLayerPitchFineRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pLayerGainLCD->move( 54, 301 + 3 ); m_pLayerGainRotary->move( 102, 301 ); m_pLayerPitchCoarseLCD->move( 54, 360 + 3 ); m_pLayerPitchCoarseRotary->move( 102, 360 ); m_pLayerPitchFineLCD->move( 151, 360 + 3 ); m_pLayerPitchFineRotary->move( 199, 360 ); //~ Layer properties selectLayer( m_nSelectedLayer ); HydrogenApp::get_instance()->addEventListener(this); selectedInstrumentChangedEvent(); // force an update } InstrumentEditor::~InstrumentEditor() { //INFOLOG( "DESTROY" ); } void InstrumentEditor::selectedInstrumentChangedEvent() { AudioEngine::get_instance()->lock( RIGHT_HERE ); Song *pSong = Hydrogen::get_instance()->getSong(); if (pSong != NULL) { InstrumentList *pInstrList = pSong->get_instrument_list(); int nInstr = Hydrogen::get_instance()->getSelectedInstrumentNumber(); if ( nInstr >= (int)pInstrList->size() ) { nInstr = -1; } if (nInstr == -1) { m_pInstrument = NULL; } else { m_pInstrument = pInstrList->get( nInstr ); //INFOLOG( "new instr: " + m_pInstrument->m_sName ); } } else { m_pInstrument = NULL; } AudioEngine::get_instance()->unlock(); // update layer list if (m_pInstrument) { m_pNameLbl->setText( m_pInstrument->get_name() ); // ADSR m_pAttackRotary->setValue( sqrtf(m_pInstrument->get_adsr()->get_attack() / 100000.0) ); m_pDecayRotary->setValue( sqrtf(m_pInstrument->get_adsr()->get_decay() / 100000.0) ); m_pSustainRotary->setValue( m_pInstrument->get_adsr()->get_sustain() ); float fTmp = m_pInstrument->get_adsr()->get_release() - 256.0; if( fTmp < 0.0 ) { fTmp = 0.0; } m_pReleaseRotary->setValue( sqrtf(fTmp / 100000.0) ); //~ ADSR // filter m_pFilterBypassBtn->setPressed( !m_pInstrument->is_filter_active()); m_pCutoffRotary->setValue( m_pInstrument->get_filter_cutoff()); m_pResonanceRotary->setValue( m_pInstrument->get_filter_resonance()); //~ filter // random pitch m_pRandomPitchRotary->setValue( m_pInstrument->get_random_pitch_factor()); //Stop Note m_pIsStopNoteCheckBox->setChecked( m_pInstrument->is_stop_notes() ); // instr gain char tmp[20]; sprintf( tmp, "%#.2f", m_pInstrument->get_gain()); m_pInstrumentGainLCD->setText( tmp ); m_pInstrumentGain->setValue( m_pInstrument->get_gain()/ 5.0 ); // instr mute group QString sMuteGroup = QString("%1").arg( m_pInstrument->get_mute_group() ); if (m_pInstrument->get_mute_group() == -1 ) { sMuteGroup = "Off"; } m_pMuteGroupLCD->setText( sMuteGroup ); // midi out QString sMidiOutChannel = QString("%1").arg( m_pInstrument->get_midi_out_channel()+1); if (m_pInstrument->get_midi_out_channel() == -1 ) { sMidiOutChannel = "Off"; } m_pMidiOutChannelLCD->setText( sMidiOutChannel ); //Convert note id into notation { int note = m_pInstrument->get_midi_out_note(); int octave = (note / 12) - 2; const char *noteStrs[12] = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" }; QString sMidiOutNote = QString(noteStrs[note % 12]) + QString::number(octave); m_pMidiOutNoteLCD->setText( sMidiOutNote ); } // select the last valid layer for (int i = MAX_LAYERS - 1; i >= 0; i-- ) { if ( m_pInstrument->get_layer( i ) ) { m_nSelectedLayer = i; break; } } m_pWaveDisplay->updateDisplay( m_pInstrument->get_layer( m_nSelectedLayer ) ); } else { m_pNameLbl->setText( QString( "NULL Instrument..." ) ); m_pWaveDisplay->updateDisplay( NULL ); m_nSelectedLayer = 0; } selectLayer( m_nSelectedLayer ); } void InstrumentEditor::rotaryChanged(Rotary *ref) { float fVal = ref->getValue(); if ( m_pInstrument ) { if ( ref == m_pRandomPitchRotary ){ m_pInstrument->set_random_pitch_factor( fVal ); } else if ( ref == m_pCutoffRotary ) { m_pInstrument->set_filter_cutoff( fVal ); } else if ( ref == m_pResonanceRotary ) { if ( fVal > 0.95f ) { fVal = 0.95f; } m_pInstrument->set_filter_resonance( fVal ); } else if ( ref == m_pAttackRotary ) { m_pInstrument->get_adsr()->set_attack( fVal * fVal * 100000 ); } else if ( ref == m_pDecayRotary ) { m_pInstrument->get_adsr()->set_decay( fVal * fVal * 100000 ); } else if ( ref == m_pSustainRotary ) { m_pInstrument->get_adsr()->set_sustain( fVal ); } else if ( ref == m_pReleaseRotary ) { m_pInstrument->get_adsr()->set_release( 256.0 + fVal * fVal * 100000 ); } else if ( ref == m_pLayerGainRotary ) { fVal = fVal * 5.0; char tmp[20]; sprintf( tmp, "%#.2f", fVal ); m_pLayerGainLCD->setText( tmp ); H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); if ( pLayer ) { pLayer->set_gain( fVal ); m_pWaveDisplay->updateDisplay( pLayer ); } } else if ( ref == m_pLayerPitchCoarseRotary ) { //fVal = fVal * 24.0 - 12.0; m_pLayerPitchCoarseLCD->setText( QString( "%1" ).arg( (int)fVal ) ); H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); if ( pLayer ) { int nCoarse = (int)m_pLayerPitchCoarseRotary->getValue(); float fFine = m_pLayerPitchFineRotary->getValue() / 100.0; pLayer->set_pitch( nCoarse + fFine ); INFOLOG( QString("pitch: %1").arg( pLayer->get_pitch() ) ); } } else if ( ref == m_pLayerPitchFineRotary ) { m_pLayerPitchFineLCD->setText( QString( "%1" ).arg( fVal ) ); H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); if ( pLayer ) { int nCoarse = (int)m_pLayerPitchCoarseRotary->getValue(); float fFine = m_pLayerPitchFineRotary->getValue() / 100.0; pLayer->set_pitch( nCoarse + fFine ); INFOLOG( QString("pitch: %1").arg( pLayer->get_pitch()) ); } } else if ( ref == m_pInstrumentGain ) { fVal = fVal * 5.0; char tmp[20]; sprintf( tmp, "%#.2f", fVal ); m_pInstrumentGainLCD->setText( tmp ); m_pInstrument->set_gain( fVal ); } else { ERRORLOG( "[rotaryChanged] unhandled rotary" ); } } } void InstrumentEditor::filterActiveBtnClicked(Button *ref) { if ( m_pInstrument ) { m_pInstrument->set_filter_active( !ref->isPressed() ); } } void InstrumentEditor::buttonClicked( Button* pButton ) { if ( pButton == m_pShowInstrumentBtn ) { m_pShowInstrumentBtn->setPressed( true ); m_pShowLayersBtn->setPressed( false ); m_pInstrumentProp->show(); m_pLayerProp->hide(); m_pShowLayersBtn->show(); m_pShowInstrumentBtn->show(); } else if ( pButton == m_pShowLayersBtn ) { m_pShowLayersBtn->setPressed( true ); m_pShowInstrumentBtn->setPressed( false ); m_pLayerProp->show(); m_pInstrumentProp->hide(); m_pShowLayersBtn->show(); m_pShowInstrumentBtn->show(); } else if ( pButton == m_pLoadLayerBtn ) { loadLayer(); } else if ( pButton == m_pRemoveLayerBtn ) { //Hydrogen *pEngine = Hydrogen::get_instance(); AudioEngine::get_instance()->lock( RIGHT_HERE ); if ( m_pInstrument ) { H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); if ( pLayer ) { m_pInstrument->set_layer( NULL, m_nSelectedLayer ); delete pLayer; } } AudioEngine::get_instance()->unlock(); selectedInstrumentChangedEvent(); // update all m_pLayerPreview->updateAll(); } else if ( pButton == m_pSampleEditorBtn ){ if ( m_pInstrument ) { H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); if ( pLayer ) { Sample* pSample = pLayer->get_sample(); if( pSample == NULL) return; QString name = pSample->get_filepath(); HydrogenApp::get_instance()->showSampleEditor( name, m_nSelectedLayer ); } } } else { ERRORLOG( "[buttonClicked] unhandled button" ); } } void InstrumentEditor::loadLayer() { static QString lastUsedDir = QDir::homePath(); Hydrogen *engine = Hydrogen::get_instance(); AudioFileBrowser *fb = new AudioFileBrowser( NULL ); QStringList filename; filename << "false" << "false" << ""; if (fb->exec() == QDialog::Accepted) { filename = fb->selectedFile(); } delete fb; if ( filename[2].isEmpty() ) return; bool fnc = false; if ( filename[0] == "true" ){ fnc = true; } //use auto velocity if we want to work with multiple filenames if ( filename.size() > 3) filename[1] = "true"; int selectedLayer = m_nSelectedLayer; int firstSelection = selectedLayer; if (filename.size() > 2) { for(int i=2;i < filename.size();++i) { selectedLayer = m_nSelectedLayer + i - 2; if( ( i-2 >= MAX_LAYERS ) || ( selectedLayer + 1 > MAX_LAYERS ) ) break; Sample *newSample = Sample::load( filename[i] ); H2Core::Instrument *pInstr = NULL; AudioEngine::get_instance()->lock( RIGHT_HERE ); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); pInstr = instrList->get( engine->getSelectedInstrumentNumber() ); /* if we're using multiple layers, we start inserting the first layer at m_nSelectedLayer and the next layer at m_nSelectedLayer+1 */ H2Core::InstrumentLayer *pLayer = pInstr->get_layer( selectedLayer ); if (pLayer != NULL) { // delete old sample Sample *oldSample = pLayer->get_sample(); delete oldSample; // insert new sample from newInstrument pLayer->set_sample( newSample ); } else { pLayer = new H2Core::InstrumentLayer(newSample); pInstr->set_layer( pLayer, selectedLayer ); } if ( fnc ){ QString newFilename = filename[i].section( '/', -1 ); newFilename.replace( "." + newFilename.section( '.', -1 ), ""); m_pInstrument->set_name( newFilename ); } //set automatic velocity if ( filename[1] == "true" ){ setAutoVelocity(); } //pInstr->set_drumkit_name( "" ); // external sample, no drumkit info AudioEngine::get_instance()->unlock(); } } selectedInstrumentChangedEvent(); // update all selectLayer( firstSelection ); m_pLayerPreview->updateAll(); } void InstrumentEditor::setAutoVelocity() { int layerInUse[ MAX_LAYERS ] = {0}; int layers = 0; for ( int i = 0; i < MAX_LAYERS ; i++ ) { InstrumentLayer *pLayers = m_pInstrument->get_layer( i ); if ( pLayers ) { layers++; layerInUse[i] = i; } } float velocityrange = 1.0 / layers; for ( int i = 0; i < MAX_LAYERS ; i++ ) { if ( layerInUse[i] == i ){ layers--; InstrumentLayer *pLayer = m_pInstrument->get_layer( i ); if ( pLayer ) { pLayer->set_start_velocity( layers * velocityrange); pLayer->set_end_velocity( layers * velocityrange + velocityrange ); } } } } void InstrumentEditor::labelClicked( ClickableLabel* pRef ) { UNUSED( pRef ); if (m_pInstrument) { QString sOldName = m_pInstrument->get_name(); bool bIsOkPressed; QString sNewName = QInputDialog::getText( this, "Hydrogen", trUtf8( "New instrument name" ), QLineEdit::Normal, sOldName, &bIsOkPressed ); if ( bIsOkPressed ) { m_pInstrument->set_name( sNewName ); selectedInstrumentChangedEvent(); #ifdef H2CORE_HAVE_JACK AudioEngine::get_instance()->lock( RIGHT_HERE ); Hydrogen *engine = Hydrogen::get_instance(); engine->renameJackPorts(); AudioEngine::get_instance()->unlock(); #endif // this will force an update... EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); } else { // user entered nothing or pressed Cancel } } } void InstrumentEditor::selectLayer( int nLayer ) { if (!m_pInstrument) { return; } m_nSelectedLayer = nLayer; H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( nLayer ); m_pWaveDisplay->updateDisplay( pLayer ); if (pLayer) { char tmp[20]; // Layer GAIN m_pLayerGainRotary->setValue( pLayer->get_gain() / 5.0 ); sprintf( tmp, "%#.2f", pLayer->get_gain() ); m_pLayerGainLCD->setText( tmp ); // Layer PITCH int nCoarsePitch = (int) ::round(pLayer->get_pitch()); float fFinePitch = pLayer->get_pitch() - nCoarsePitch; //INFOLOG( "fine pitch: " + to_string( fFinePitch ) ); m_pLayerPitchCoarseRotary->setValue( nCoarsePitch ); m_pLayerPitchFineRotary->setValue( fFinePitch * 100 ); m_pLayerPitchCoarseLCD->setText( QString( "%1" ).arg( nCoarsePitch ) ); m_pLayerPitchFineLCD->setText( QString( "%1" ).arg( fFinePitch * 100 ) ); } else { // Layer GAIN m_pLayerGainRotary->setValue( 1.0 ); m_pLayerGainLCD->setText( "" ); // Layer PITCH m_pLayerPitchCoarseRotary->setValue( 0.0 ); m_pLayerPitchFineRotary->setValue( 0.0 ); m_pLayerPitchCoarseLCD->setText( "" ); m_pLayerPitchFineLCD->setText( "" ); } } void InstrumentEditor::muteGroupBtnClicked(Button *pRef) { assert( m_pInstrument ); int mute_grp = m_pInstrument->get_mute_group(); if (pRef == m_pAddMuteGroupBtn ) { mute_grp += 1; } else if (pRef == m_pDelMuteGroupBtn ) { mute_grp -= 1; } m_pInstrument->set_mute_group( mute_grp ); selectedInstrumentChangedEvent(); // force an update } void InstrumentEditor::onIsStopNoteCheckBoxClicked( bool on ) { m_pInstrument->set_stop_notes( on ); selectedInstrumentChangedEvent(); // force an update } void InstrumentEditor::midiOutChannelBtnClicked(Button *pRef) { assert( m_pInstrument ); if (pRef == m_pAddMidiOutChannelBtn ) { m_pInstrument->set_midi_out_channel( m_pInstrument->get_midi_out_channel() + 1); } else if (pRef == m_pDelMidiOutChannelBtn ) { m_pInstrument->set_midi_out_channel( m_pInstrument->get_midi_out_channel() - 1); } selectedInstrumentChangedEvent(); // force an update } void InstrumentEditor::midiOutNoteBtnClicked(Button *pRef) { assert( m_pInstrument ); if (pRef == m_pAddMidiOutNoteBtn ) { m_pInstrument->set_midi_out_note( m_pInstrument->get_midi_out_note() + 1); } else if (pRef == m_pDelMidiOutNoteBtn ) { m_pInstrument->set_midi_out_note( m_pInstrument->get_midi_out_note() - 1); } selectedInstrumentChangedEvent(); // force an update } void InstrumentEditor::rubberbandbpmchangeEvent() { if( !Preferences::get_instance()->getRubberBandBatchMode() /*&& Preferences::get_instance()->__usetimeline */){ //we return also if time-line is activated. this wont work. // INFOLOG( "Tempo change: Recomputing rubberband samples is disabled" ); return; } // INFOLOG( "Tempo change: Recomputing rubberband samples." ); Hydrogen *pEngine = Hydrogen::get_instance(); Song *song = pEngine->getSong(); assert(song); if(song){ InstrumentList *songInstrList = song->get_instrument_list(); assert(songInstrList); for ( unsigned nInstr = 0; nInstr < songInstrList->size(); ++nInstr ) { Instrument *pInstr = songInstrList->get( nInstr ); assert( pInstr ); if ( pInstr ){ for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { InstrumentLayer *pLayer = pInstr->get_layer( nLayer ); if ( pLayer ) { Sample *pSample = pLayer->get_sample(); if ( pSample ) { if( pSample->get_rubberband().use ) { //INFOLOG( QString("Instrument %1 Layer %2" ).arg(nInstr).arg(nLayer)); Sample *newSample = Sample::load( pSample->get_filepath(), pSample->get_loops(), pSample->get_rubberband(), *pSample->get_velocity_envelope(), *pSample->get_pan_envelope() ); if( !newSample ){ continue; } delete pSample; // insert new sample from newInstrument AudioEngine::get_instance()->lock( RIGHT_HERE ); pLayer->set_sample( newSample ); AudioEngine::get_instance()->unlock(); } } } } } } } } hydrogen-0.9.6-beta3/src/gui/src/InstrumentEditor/InstrumentEditor.h000066400000000000000000000071011211146647700255220ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef INSTRUMENT_EDITOR_DIALOG_H #define INSTRUMENT_EDITOR_DIALOG_H #include #include #include #include "../EventListener.h" #include "../widgets/PixmapWidget.h" class Fader; class LCDDisplay; class Button; class ToggleButton; class ClickableLabel; class Rotary; class WaveDisplay; class LayerPreview; /// /// Instrument Editor /// class InstrumentEditor : public QWidget, public H2Core::Object, public EventListener { H2_OBJECT Q_OBJECT public: InstrumentEditor( QWidget* parent ); ~InstrumentEditor(); void selectLayer( int nLayer ); void setFileforLayer(QString filename ); // implements EventListener interface virtual void selectedInstrumentChangedEvent(); virtual void rubberbandbpmchangeEvent(); //~ implements EventListener interface private slots: void rotaryChanged(Rotary *ref); void filterActiveBtnClicked(Button *ref); void buttonClicked(Button*); void labelClicked( ClickableLabel* pRef ); void muteGroupBtnClicked(Button *pRef); void onIsStopNoteCheckBoxClicked( bool on ); void midiOutChannelBtnClicked(Button *pRef); void midiOutNoteBtnClicked(Button *pRef); private: H2Core::Instrument *m_pInstrument; int m_nSelectedLayer; ToggleButton *m_pShowInstrumentBtn; ToggleButton *m_pShowLayersBtn; // Instrument properties PixmapWidget *m_pInstrumentProp; PixmapWidget *m_pInstrumentPropTop; ClickableLabel *m_pNameLbl; // ADSR Rotary *m_pAttackRotary; Rotary *m_pDecayRotary; Rotary *m_pSustainRotary; Rotary *m_pReleaseRotary; // Random pitch Rotary *m_pRandomPitchRotary; // Low pass filter ToggleButton *m_pFilterBypassBtn; Rotary *m_pCutoffRotary; Rotary *m_pResonanceRotary; // Instrument gain LCDDisplay *m_pInstrumentGainLCD; Rotary *m_pInstrumentGain; // Instrument mute group LCDDisplay *m_pMuteGroupLCD; Button *m_pAddMuteGroupBtn; Button *m_pDelMuteGroupBtn; // Instrument midi out LCDDisplay *m_pMidiOutChannelLCD; Button *m_pAddMidiOutChannelBtn; Button *m_pDelMidiOutChannelBtn; LCDDisplay *m_pMidiOutNoteLCD; Button *m_pAddMidiOutNoteBtn; Button *m_pDelMidiOutNoteBtn; //~ Instrument properties // Layer properties LayerPreview *m_pLayerPreview; QScrollArea *m_pLayerScrollArea; PixmapWidget *m_pLayerProp; Rotary *m_pLayerGainRotary; LCDDisplay *m_pLayerGainLCD; Rotary *m_pLayerPitchCoarseRotary; Rotary *m_pLayerPitchFineRotary; LCDDisplay *m_pLayerPitchCoarseLCD; LCDDisplay *m_pLayerPitchFineLCD; WaveDisplay *m_pWaveDisplay; Button *m_pLoadLayerBtn; Button *m_pRemoveLayerBtn; Button *m_pSampleEditorBtn; QCheckBox *m_pIsStopNoteCheckBox; //~ Layer properties void loadLayer(); void setAutoVelocity(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/InstrumentEditor/InstrumentEditorPanel.cpp000066400000000000000000000037271211146647700270470ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include "InstrumentEditorPanel.h" #include "../Skin.h" InstrumentEditorPanel* InstrumentEditorPanel::m_pInstance = NULL; const char* InstrumentEditorPanel::__class_name = "InstrumentEditorPanel"; InstrumentEditorPanel* InstrumentEditorPanel::get_instance() { if ( m_pInstance == NULL ) { m_pInstance = new InstrumentEditorPanel( NULL ); } return m_pInstance; } InstrumentEditorPanel::InstrumentEditorPanel( QWidget *pParent ) : Object( __class_name ) { UNUSED( pParent ); INFOLOG( "INIT" ); m_pInstance = this; m_pInstrumentEditor = new InstrumentEditor( 0 ); // LAYOUT QGridLayout *vbox = new QGridLayout(); vbox->setSpacing( 0 ); vbox->setMargin( 0 ); vbox->addWidget( m_pInstrumentEditor, 0, 0 ); this->setLayout( vbox ); m_pLayer = 0; } InstrumentEditorPanel::~InstrumentEditorPanel() { INFOLOG( "DESTROY" ); } void InstrumentEditorPanel::updateInstrumentEditor() { m_pInstrumentEditor->selectedInstrumentChangedEvent(); } void InstrumentEditorPanel::selectLayer( int nLayer ) { m_pInstrumentEditor->selectLayer( nLayer ); m_pLayer = nLayer; } hydrogen-0.9.6-beta3/src/gui/src/InstrumentEditor/InstrumentEditorPanel.h000066400000000000000000000030001211146647700264740ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef INSTRUMENT_EDITOR_PANEL_H #define INSTRUMENT_EDITOR_PANEL_H #include #include #include "InstrumentEditor.h" /// /// Container for the Instrument Editor (Singleton). /// class InstrumentEditorPanel : public QWidget, private H2Core::Object { H2_OBJECT Q_OBJECT public: static InstrumentEditorPanel* get_instance(); ~InstrumentEditorPanel(); void updateInstrumentEditor(); void selectLayer( int nLayer ); int getSelectedLayer() { return m_pLayer; } private: static InstrumentEditorPanel* m_pInstance; InstrumentEditor* m_pInstrumentEditor; InstrumentEditorPanel( QWidget *pParent ); int m_pLayer; }; #endif hydrogen-0.9.6-beta3/src/gui/src/InstrumentEditor/LayerPreview.cpp000066400000000000000000000232621211146647700251620ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include #include using namespace H2Core; #include "../Skin.h" #include "../HydrogenApp.h" #include "InstrumentEditorPanel.h" #include "LayerPreview.h" const char* LayerPreview::__class_name = "LayerPreview"; LayerPreview::LayerPreview( QWidget* pParent ) : QWidget( pParent ) , Object( __class_name ) , m_pInstrument( NULL ) , m_nSelectedLayer( 0 ) , m_bMouseGrab( false ) { setAttribute(Qt::WA_NoBackground); //INFOLOG( "INIT" ); setMouseTracking( true ); // int w = 276; if( MAX_LAYERS > 16) w = 261; int h = 20 + m_nLayerHeight * MAX_LAYERS; resize( w, h ); m_speakerPixmap.load( Skin::getImagePath() + "/instrumentEditor/speaker.png" ); HydrogenApp::get_instance()->addEventListener( this ); /** * We get a style similar to the one used for the 2 buttons on top of the instrument editor panel */ this->setStyleSheet("font-size: 9px; font-weight: bold;"); } LayerPreview::~ LayerPreview() { //INFOLOG( "DESTROY" ); } void LayerPreview::paintEvent(QPaintEvent *ev) { QPainter p( this ); p.fillRect( ev->rect(), QColor( 58, 62, 72 ) ); int nLayers = 0; for ( int i = 0; i < MAX_LAYERS; i++ ) { if ( m_pInstrument ) { InstrumentLayer *pLayer = m_pInstrument->get_layer( i ); if ( pLayer ) { nLayers++; } } } int nLayer = 0; for ( int i = MAX_LAYERS - 1; i >= 0; i-- ) { int y = 20 + m_nLayerHeight * i; if ( m_pInstrument ) { InstrumentLayer *pLayer = m_pInstrument->get_layer( i ); if ( pLayer ) { int x1 = (int)( pLayer->get_start_velocity() * width() ); int x2 = (int)( pLayer->get_end_velocity() * width() ); int red = (int)( 128.0 / nLayers * nLayer ); int green = (int)( 134.0 / nLayers * nLayer ); int blue = (int)( 152.0 / nLayers * nLayer ); QColor layerColor( red, green, blue ); p.fillRect( x1, 0, x2 - x1, 19, layerColor ); p.setPen( QColor( 230, 230, 230 ) ); p.drawText( x1, 0, x2 - x1, 20, Qt::AlignCenter, QString("%1").arg( i + 1 ) ); if ( m_nSelectedLayer == i ) { p.setPen( QColor( 210, 0, 0 ) ); } p.drawRect( x1, 1, x2 - x1 - 1, 18 ); // bordino in alto // layer view p.fillRect( 0, y, width(), m_nLayerHeight, QColor( 25, 44, 65 ) ); p.fillRect( x1, y, x2 - x1, m_nLayerHeight, QColor( 90, 160, 233 ) ); nLayer++; } else { // layer view p.fillRect( 0, y, width(), m_nLayerHeight, QColor( 59, 73, 96 ) ); } } else { // layer view p.fillRect( 0, y, width(), m_nLayerHeight, QColor( 59, 73, 96 ) ); } p.setPen( QColor( 128, 134, 152 ) ); p.drawRect( 0, y, width() - 1, m_nLayerHeight ); } // selected layer p.setPen( QColor( 210, 0, 0 ) ); int y = 20 + m_nLayerHeight * m_nSelectedLayer; p.drawRect( 0, y, width() - 1, m_nLayerHeight ); } void LayerPreview::selectedInstrumentChangedEvent() { AudioEngine::get_instance()->lock( RIGHT_HERE ); Song *pSong = Hydrogen::get_instance()->getSong(); if (pSong != NULL) { InstrumentList *pInstrList = pSong->get_instrument_list(); int nInstr = Hydrogen::get_instance()->getSelectedInstrumentNumber(); if ( nInstr >= (int)pInstrList->size() ) { nInstr = -1; } if (nInstr == -1) { m_pInstrument = NULL; } else { m_pInstrument = pInstrList->get( nInstr ); } } else { m_pInstrument = NULL; } AudioEngine::get_instance()->unlock(); // select the last valid layer if ( m_pInstrument ) { for (int i = MAX_LAYERS - 1; i >= 0; i-- ) { if ( m_pInstrument->get_layer( i ) ) { m_nSelectedLayer = i; break; } } } else { m_nSelectedLayer = 0; } update(); } void LayerPreview::mouseReleaseEvent(QMouseEvent *ev) { m_bMouseGrab = false; setCursor( QCursor( Qt::ArrowCursor ) ); /* * We want the tooltip to still show if mouse pointer * is over an active layer's boundary */ InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); if ( pLayer ) { int x1 = (int)( pLayer->get_start_velocity() * width() ); int x2 = (int)( pLayer->get_end_velocity() * width() ); if ( ( ev->x() < x1 + 5 ) && ( ev->x() > x1 - 5 ) ){ setCursor( QCursor( Qt::SizeHorCursor ) ); showLayerStartVelocity(pLayer, ev); } else if ( ( ev->x() < x2 + 5 ) && ( ev->x() > x2 - 5 ) ){ setCursor( QCursor( Qt::SizeHorCursor ) ); showLayerEndVelocity(pLayer, ev); } } } void LayerPreview::mousePressEvent(QMouseEvent *ev) { const unsigned nPosition = 0; const float fPan_L = 0.5f; const float fPan_R = 0.5f; const int nLength = -1; const float fPitch = 0.0f; if ( !m_pInstrument ) { return; } if ( ev->y() < 20 ) { float fVelocity = (float)ev->x() / (float)width(); Note *note = new Note( m_pInstrument, nPosition, fVelocity, fPan_L, fPan_R, nLength, fPitch ); AudioEngine::get_instance()->get_sampler()->note_on(note); for ( int i = 0; i < MAX_LAYERS; i++ ) { InstrumentLayer *pLayer = m_pInstrument->get_layer( i ); if ( pLayer ) { if ( ( fVelocity > pLayer->get_start_velocity()) && ( fVelocity < pLayer->get_end_velocity() ) ) { if ( i != m_nSelectedLayer ) { m_nSelectedLayer = i; update(); InstrumentEditorPanel::get_instance()->selectLayer( m_nSelectedLayer ); } break; } } } } else { m_nSelectedLayer = ( ev->y() - 20 ) / m_nLayerHeight; InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); update(); InstrumentEditorPanel::get_instance()->selectLayer( m_nSelectedLayer ); if ( m_pInstrument->get_layer( m_nSelectedLayer ) ) { Note *note = new Note( m_pInstrument , nPosition, m_pInstrument->get_layer( m_nSelectedLayer )->get_end_velocity() - 0.01, fPan_L, fPan_R, nLength, fPitch ); AudioEngine::get_instance()->get_sampler()->note_on(note); } if ( pLayer ) { int x1 = (int)( pLayer->get_start_velocity() * width() ); int x2 = (int)( pLayer->get_end_velocity() * width() ); if ( ( ev->x() < x1 + 5 ) && ( ev->x() > x1 - 5 ) ){ setCursor( QCursor( Qt::SizeHorCursor ) ); m_bGrabLeft = true; m_bMouseGrab = true; showLayerStartVelocity(pLayer, ev); } else if ( ( ev->x() < x2 + 5 ) && ( ev->x() > x2 - 5 ) ){ setCursor( QCursor( Qt::SizeHorCursor ) ); m_bGrabLeft = false; m_bMouseGrab = true; showLayerEndVelocity(pLayer, ev); } else { setCursor( QCursor( Qt::ArrowCursor ) ); } } } } void LayerPreview::mouseMoveEvent( QMouseEvent *ev ) { if ( !m_pInstrument ) { return; } int x = ev->pos().x(); int y = ev->pos().y(); float fVel = (float)x / (float)width(); if (fVel < 0 ) { fVel = 0; } else if (fVel > 1) { fVel = 1; } if ( y < 20 ) { setCursor( QCursor( m_speakerPixmap ) ); return; } if ( m_bMouseGrab ) { InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); if ( pLayer ) { if ( m_bMouseGrab ) { if ( m_bGrabLeft ) { if ( fVel < pLayer->get_end_velocity()) { pLayer->set_start_velocity(fVel); showLayerStartVelocity(pLayer, ev); } } else { if ( fVel > pLayer->get_start_velocity()) { pLayer->set_end_velocity( fVel ); showLayerEndVelocity(pLayer, ev); } } update(); } } } else { m_nSelectedLayer = ( ev->y() - 20 ) / m_nLayerHeight; if ( m_nSelectedLayer < MAX_LAYERS ) { InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); if ( pLayer ) { int x1 = (int)( pLayer->get_start_velocity() * width() ); int x2 = (int)( pLayer->get_end_velocity() * width() ); if ( ( x < x1 + 5 ) && ( x > x1 - 5 ) ){ setCursor( QCursor( Qt::SizeHorCursor ) ); showLayerStartVelocity(pLayer, ev); } else if ( ( x < x2 + 5 ) && ( x > x2 - 5 ) ){ setCursor( QCursor( Qt::SizeHorCursor ) ); showLayerEndVelocity(pLayer, ev); } else { setCursor( QCursor( Qt::ArrowCursor ) ); QToolTip::hideText(); } } else { setCursor( QCursor( Qt::ArrowCursor ) ); QToolTip::hideText(); } } } } void LayerPreview::updateAll() { update(); } int LayerPreview::getMidiVelocityFromRaw( const float raw ) { return static_cast (raw * 127); } void LayerPreview::showLayerStartVelocity( const InstrumentLayer* pLayer, const QMouseEvent* pEvent ) { const float fVelo = pLayer->get_start_velocity(); QToolTip::showText( pEvent->globalPos(), trUtf8( "Dec. = %1\nMIDI = %2" ) .arg( QString::number( fVelo, 'f', 2) ) .arg( getMidiVelocityFromRaw( fVelo ) +1 ), this); } void LayerPreview::showLayerEndVelocity( const InstrumentLayer* pLayer, const QMouseEvent* pEvent ) { const float fVelo = pLayer->get_end_velocity(); QToolTip::showText( pEvent->globalPos(), trUtf8( "Dec. = %1\nMIDI = %2" ) .arg( QString::number( fVelo, 'f', 2) ) .arg( getMidiVelocityFromRaw( fVelo ) +1 ), this); } hydrogen-0.9.6-beta3/src/gui/src/InstrumentEditor/LayerPreview.h000066400000000000000000000046141211146647700246270ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef LAYER_PREVIEW_H #define LAYER_PREVIEW_H #include #include #include #include "../EventListener.h" namespace H2Core { class InstrumentLayer; } using H2Core::InstrumentLayer; class LayerPreview : public QWidget, public H2Core::Object, public EventListener { H2_OBJECT Q_OBJECT public: LayerPreview(QWidget* pParent); ~LayerPreview(); void updateAll(); void paintEvent(QPaintEvent *ev); virtual void mousePressEvent(QMouseEvent *ev); virtual void mouseReleaseEvent(QMouseEvent *ev); virtual void mouseMoveEvent ( QMouseEvent *ev ); private: static const int m_nLayerHeight = 10; QPixmap m_speakerPixmap; H2Core::Instrument *m_pInstrument; int m_nSelectedLayer; bool m_bMouseGrab; bool m_bGrabLeft; /** * convert a raw velocity value (0.0 to 1.0) * into a MIDI velocity value (0 to 127) * * @param raw Raw velocity value * @return MIDI velocity value */ int getMidiVelocityFromRaw( const float raw ); /** * display a layer's start velocity in a tooltip * * @param pLayer The layer * @param pEvent The event carrying mouse position */ void showLayerStartVelocity( const InstrumentLayer* pLayer, const QMouseEvent* pEvent ); /** * display a layer's end velocity in a tooltip * * @param pLayer The layer * @param pEvent The event carrying mouse position */ void showLayerEndVelocity( const InstrumentLayer* pLayer, const QMouseEvent* pEvent ); virtual void selectedInstrumentChangedEvent(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/InstrumentEditor/WaveDisplay.cpp000066400000000000000000000061211211146647700247670ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include using namespace H2Core; #include "WaveDisplay.h" #include "../Skin.h" const char* WaveDisplay::__class_name = "WaveDisplay"; WaveDisplay::WaveDisplay(QWidget* pParent) : QWidget( pParent ) , Object( __class_name ) , m_sSampleName( "" ) { setAttribute(Qt::WA_NoBackground); //INFOLOG( "INIT" ); int w = 277; int h = 58; resize( w, h ); bool ok = m_background.load( Skin::getImagePath() + "/waveDisplay/background.png" ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } m_pPeakData = new int[ w ]; } WaveDisplay::~WaveDisplay() { //INFOLOG( "DESTROY" ); delete[] m_pPeakData; } void WaveDisplay::paintEvent(QPaintEvent *ev) { QPainter painter( this ); painter.setRenderHint( QPainter::Antialiasing ); painter.drawPixmap( ev->rect(), m_background, ev->rect() ); painter.setPen( QColor( 102, 150, 205 ) ); int VCenter = height() / 2; for ( int x = 0; x < width(); x++ ) { painter.drawLine( x, VCenter, x, m_pPeakData[x] + VCenter ); painter.drawLine( x, VCenter, x, -m_pPeakData[x] + VCenter ); } QFont font; font.setWeight( 63 ); painter.setFont( font ); painter.setPen( QColor( 255 , 255, 255, 200 ) ); painter.drawText( 0, 0, width(), 20, Qt::AlignCenter, m_sSampleName ); } void WaveDisplay::updateDisplay( H2Core::InstrumentLayer *pLayer ) { if ( pLayer && pLayer->get_sample() ) { m_sSampleName = pLayer->get_sample()->get_filename(); // INFOLOG( "[updateDisplay] sample: " + m_sSampleName ); int nSampleLength = pLayer->get_sample()->get_frames(); float nScaleFactor = nSampleLength / width(); float fGain = height() / 2.0 * pLayer->get_gain(); float *pSampleData = pLayer->get_sample()->get_data_l(); int nSamplePos =0; int nVal; for ( int i = 0; i < width(); ++i ){ nVal = 0; for ( int j = 0; j < nScaleFactor; ++j ) { if ( j < nSampleLength ) { int newVal = (int)( pSampleData[ nSamplePos ] * fGain ); if ( newVal > nVal ) { nVal = newVal; } } ++nSamplePos; } m_pPeakData[ i ] = nVal; } } else { m_sSampleName = "-"; for ( int i =0; i < width(); ++i ){ m_pPeakData[ i ] = 0; } } update(); } hydrogen-0.9.6-beta3/src/gui/src/InstrumentEditor/WaveDisplay.h000066400000000000000000000024511211146647700244360ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef WAVE_DISPLAY #define WAVE_DISPLAY #include #include namespace H2Core { class InstrumentLayer; } class WaveDisplay : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: WaveDisplay(QWidget* pParent); ~WaveDisplay(); void updateDisplay( H2Core::InstrumentLayer *pLayer ); void paintEvent(QPaintEvent *ev); private: QPixmap m_background; QString m_sSampleName; int *m_pPeakData; }; #endif hydrogen-0.9.6-beta3/src/gui/src/InstrumentRack.cpp000066400000000000000000000075101211146647700221740ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "InstrumentRack.h" #include "Skin.h" #include "widgets/Button.h" #include "InstrumentEditor/InstrumentEditorPanel.h" #include "SoundLibrary/SoundLibraryPanel.h" #include const char* InstrumentRack::__class_name = "InstrumentRack"; InstrumentRack::InstrumentRack( QWidget *pParent ) : QWidget( pParent ) , Object( __class_name ) { INFOLOG( "INIT" ); resize( 290, 450 ); setMinimumSize( width(), height() ); setFixedWidth( width() ); // TAB buttons QWidget *pTabButtonsPanel = new QWidget( NULL ); pTabButtonsPanel->setFixedHeight( 24 ); pTabButtonsPanel->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) ); // instrument editor button m_pShowInstrumentEditorBtn = new ToggleButton( pTabButtonsPanel, "/instrumentEditor/instrument_show_on.png", "/instrumentEditor/instrument_show_off.png", "/instrumentEditor/instrument_show_off.png", QSize( 130, 24 ) ); m_pShowInstrumentEditorBtn->setToolTip( trUtf8( "Show Instrument editor" ) ); m_pShowInstrumentEditorBtn->setText( trUtf8( "Instrument" ) ); connect( m_pShowInstrumentEditorBtn, SIGNAL( clicked( Button* ) ), this, SLOT( on_showInstrumentEditorBtnClicked() ) ); // show sound library button m_pShowSoundLibraryBtn = new ToggleButton( pTabButtonsPanel, "/instrumentEditor/library_show_on.png", "/instrumentEditor/library_show_off.png", "/instrumentEditor/library_show_off.png", QSize( 150, 24 ) ); m_pShowSoundLibraryBtn->setToolTip( trUtf8( "Show sound library" ) ); m_pShowSoundLibraryBtn->setText( trUtf8( "Sound library" ) ); connect( m_pShowSoundLibraryBtn, SIGNAL( clicked( Button* ) ), this, SLOT( on_showSoundLibraryBtnClicked() ) ); QHBoxLayout *pTabHBox = new QHBoxLayout(); pTabHBox->setSpacing( 0 ); pTabHBox->setMargin( 0 ); pTabHBox->addWidget( m_pShowInstrumentEditorBtn ); pTabHBox->addWidget( m_pShowSoundLibraryBtn ); pTabButtonsPanel->setLayout( pTabHBox ); //~ TAB buttons InstrumentEditorPanel::get_instance()->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) ); m_pSoundLibraryPanel = new SoundLibraryPanel( NULL ); // LAYOUT QGridLayout *pGrid = new QGridLayout(); pGrid->setSpacing( 0 ); pGrid->setMargin( 0 ); pGrid->addWidget( pTabButtonsPanel, 0, 0, 1, 3 ); pGrid->addWidget( InstrumentEditorPanel::get_instance(), 2, 1 ); pGrid->addWidget( m_pSoundLibraryPanel, 2, 1 ); this->setLayout( pGrid ); on_showInstrumentEditorBtnClicked(); // show the instrument editor as default } InstrumentRack::~InstrumentRack() { INFOLOG( "DESTROY" ); } void InstrumentRack::on_showSoundLibraryBtnClicked() { m_pShowSoundLibraryBtn->setPressed( true ); m_pShowInstrumentEditorBtn->setPressed( false ); m_pSoundLibraryPanel->show(); InstrumentEditorPanel::get_instance()->hide(); } void InstrumentRack::on_showInstrumentEditorBtnClicked() { m_pShowInstrumentEditorBtn->setPressed( true ); m_pShowSoundLibraryBtn->setPressed( false ); InstrumentEditorPanel::get_instance()->show(); m_pSoundLibraryPanel->hide(); } hydrogen-0.9.6-beta3/src/gui/src/InstrumentRack.h000066400000000000000000000030531211146647700216370ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef INSTRUMENT_RACK_H #define INSTRUMENT_RACK_H #include #include class ToggleButton; class SoundLibraryPanel; class InstrumentRack : public QWidget, private H2Core::Object { H2_OBJECT Q_OBJECT public: InstrumentRack( QWidget *pParent ); ~InstrumentRack(); SoundLibraryPanel* getSoundLibraryPanel() { return m_pSoundLibraryPanel; } private slots: void on_showSoundLibraryBtnClicked(); void on_showInstrumentEditorBtnClicked(); private: /// button for showing the Sound Library ToggleButton *m_pShowSoundLibraryBtn; /// button for showing the Instrument Editor ToggleButton *m_pShowInstrumentEditorBtn; SoundLibraryPanel* m_pSoundLibraryPanel; }; #endif hydrogen-0.9.6-beta3/src/gui/src/LadspaFXProperties.cpp000066400000000000000000000315101211146647700227370ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include "LadspaFXProperties.h" #include "HydrogenApp.h" #include "LadspaFXSelector.h" #include "Skin.h" #include "widgets/Fader.h" #include "widgets/LCD.h" #include "Mixer/Mixer.h" #include "Mixer/MixerLine.h" using namespace std; using namespace H2Core; const char* LadspaFXProperties::__class_name = "LadspaFXProperties"; LadspaFXProperties::LadspaFXProperties(QWidget* parent, uint nLadspaFX) : QWidget( parent ) , Object( __class_name ) { // INFOLOG( "INIT" ); m_nLadspaFX = nLadspaFX; resize( 500, 200 ); setMinimumSize( width(), height() ); setFixedHeight( height() ); setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); QHBoxLayout *hbox = new QHBoxLayout(); hbox->setSpacing( 0 ); hbox->setMargin( 0 ); setLayout( hbox ); // Background image QPixmap background; bool ok = background.load( Skin::getImagePath() + "/mixerPanel/mixer_background.png" ); if( !ok ){ ERRORLOG( "Error loading pixmap" ); } m_pScrollArea = new QScrollArea( NULL ); hbox->addWidget( m_pScrollArea ); m_pScrollArea->move( 0, 0 ); m_pScrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pScrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pScrollArea->resize( width(), height() ); m_pFrame = new QFrame( this ); m_pFrame->resize( width(), height() ); m_pScrollArea->setWidget( m_pFrame ); m_pNameLbl = new QLabel(this); m_pNameLbl->move( 10, 10 ); m_pNameLbl->resize( 270, 24 ); QFont boldFont; boldFont.setBold(true); m_pNameLbl->setFont( boldFont ); m_pSelectFXBtn = new QPushButton( trUtf8("Select FX"), this); m_pSelectFXBtn->move( 170, 10 ); m_pSelectFXBtn->resize( 100, 24 ); connect( m_pSelectFXBtn, SIGNAL(clicked()), this, SLOT(selectFXBtnClicked()) ); m_pRemoveFXBtn = new QPushButton( trUtf8("Remove FX"), this); m_pRemoveFXBtn->move( 280, 10 ); m_pRemoveFXBtn->resize( 100, 24 ); connect( m_pRemoveFXBtn, SIGNAL(clicked()), this, SLOT(removeFXBtnClicked()) ); m_pActivateBtn = new QPushButton( trUtf8("Activate"), this); m_pActivateBtn->move( 390, 10 ); m_pActivateBtn->resize( 100, 24 ); connect( m_pActivateBtn, SIGNAL(clicked()), this, SLOT(activateBtnClicked()) ); m_pTimer = new QTimer( this ); connect(m_pTimer, SIGNAL( timeout() ), this, SLOT( updateOutputControls() ) ); } LadspaFXProperties::~LadspaFXProperties() { // INFOLOG( "DESTROY" ); } void LadspaFXProperties::showEvent ( QShowEvent* ) { updateControls(); } void LadspaFXProperties::closeEvent( QCloseEvent *ev ) { ev->accept(); } void LadspaFXProperties::faderChanged( Fader * ref ) { ref->setPeak_L( ref->getValue() ); ref->setPeak_R( ref->getValue() ); Song *pSong = (Hydrogen::get_instance() )->getSong(); #ifdef H2CORE_HAVE_LADSPA LadspaFX *pFX = Effects::get_instance()->getLadspaFX( m_nLadspaFX ); for ( uint i = 0; i < m_pInputControlFaders.size(); i++ ) { if (ref == m_pInputControlFaders[ i ] ) { LadspaControlPort *pControl = pFX->inputControlPorts[ i ]; pControl->fControlValue = ref->getValue(); //float fInterval = pControl->fUpperBound - pControl->fLowerBound; //pControl->fControlValue = pControl->fLowerBound + fValue * fInterval; QString sValue; if (pControl->fControlValue < 1.0 ) { sValue = QString("%1").arg( pControl->fControlValue, 0, 'f', 2 ); } else if ( pControl->fControlValue < 100.0 ) { sValue = QString("%1").arg( pControl->fControlValue, 0, 'f', 1 ); } else { sValue = QString("%1").arg( pControl->fControlValue, 0, 'f', 0 ); } m_pInputControlLabel[ i ]->setText( sValue ); } } pSong->__is_modified = true; #endif } void LadspaFXProperties::updateControls() { #ifdef H2CORE_HAVE_LADSPA INFOLOG( "*** [updateControls] ***" ); m_pTimer->stop(); LadspaFX *pFX = Effects::get_instance()->getLadspaFX( m_nLadspaFX ); // svuoto i vettori.. if ( m_pInputControlNames.size() != 0 ) { for (uint i = 0; i < m_pInputControlNames.size(); i++) { delete m_pInputControlNames[ i ]; } m_pInputControlNames.clear(); } if ( m_pInputControlLabel.size() != 0 ) { for (uint i = 0; i < m_pInputControlLabel.size(); i++) { delete m_pInputControlLabel[ i ]; } m_pInputControlLabel.clear(); } if ( m_pInputControlFaders.size() != 0 ) { for (uint i = 0; i < m_pInputControlFaders.size(); i++) { delete m_pInputControlFaders[ i ]; } m_pInputControlFaders.clear(); } if ( m_pOutputControlFaders.size() != 0 ) { for (uint i = 0; i < m_pOutputControlFaders.size(); i++) { delete m_pOutputControlFaders[ i ]; } m_pOutputControlFaders.clear(); } if ( m_pOutputControlNames.size() != 0 ) { for (uint i = 0; i < m_pOutputControlNames.size(); i++) { delete m_pOutputControlNames[ i ]; } m_pOutputControlNames.clear(); } if (pFX) { QString sPluginName = pFX->getPluginLabel(); setWindowTitle( trUtf8( "[%1] LADSPA FX Properties" ).arg( sPluginName ) ); int nControlsFrameWidth = 10 + 45 * (pFX->inputControlPorts.size() + pFX->outputControlPorts.size()) + 10 + 45; if ( nControlsFrameWidth < width() ) { nControlsFrameWidth = width(); } m_pFrame->resize( nControlsFrameWidth, height() ); m_pActivateBtn->setEnabled(true); if (pFX->isEnabled()) { m_pActivateBtn->setText( trUtf8("Deactivate") ); } else { m_pActivateBtn->setText( trUtf8("Activate") ); } QString mixerline_text_path = Skin::getImagePath() + "/mixerPanel/mixer_background.png"; QPixmap textBackground; if( textBackground.load( mixerline_text_path ) == false ){ ERRORLOG( "Error loading pixmap" ); } // input controls uint nInputControl_X = 0; for (uint i = 0; i < pFX->inputControlPorts.size(); i++) { LadspaControlPort *pControlPort = pFX->inputControlPorts[ i ]; nInputControl_X = 10 + 45 * i; if (pControlPort->isToggle){ // toggle button WARNINGLOG( "[updateControls] LADSPA toggle controls not implemented yet"); } // peak volume label QString sValue; if (pControlPort->fControlValue < 1.0 ) { sValue = QString("%1").arg( pControlPort->fControlValue, 0, 'f', 2); } else if ( pControlPort->fControlValue < 100.0 ) { sValue = QString("%1").arg( pControlPort->fControlValue, 0, 'f', 1); } else { sValue = QString("%1").arg( pControlPort->fControlValue, 0, 'f', 0); } LCDDisplay *pLCD = new LCDDisplay( m_pFrame, LCDDigit::SMALL_BLUE, 4 ); pLCD->move( nInputControl_X, 40 ); pLCD->setText( sValue ); pLCD->show(); QPalette lcdPalette; lcdPalette.setColor( QPalette::Background, QColor( 58, 62, 72 ) ); pLCD->setPalette( lcdPalette ); m_pInputControlLabel.push_back( pLCD ); InstrumentNameWidget *pName = new InstrumentNameWidget( m_pFrame ); pName->move( nInputControl_X, 60 ); pName->show(); pName->setText( pControlPort->sName ); m_pInputControlNames.push_back( pName ); pName->setToolTip( pName->text() ); // fader Fader *pFader = new Fader( m_pFrame, pControlPort->m_bIsInteger, false ); connect( pFader, SIGNAL( valueChanged(Fader*) ), this, SLOT( faderChanged(Fader*) ) ); m_pInputControlFaders.push_back( pFader ); pFader->move( nInputControl_X + 20, 60 ); pFader->show(); pFader->setMaxValue( pControlPort->fUpperBound ); pFader->setMinValue( pControlPort->fLowerBound ); pFader->setMaxPeak( pControlPort->fUpperBound ); pFader->setMinPeak( pControlPort->fLowerBound ); pFader->setValue( pControlPort->fControlValue ); pFader->setPeak_L( pControlPort->fControlValue ); pFader->setPeak_R( pControlPort->fControlValue ); //float fInterval = pControlPort->fUpperBound - pControlPort->fLowerBound; //float fValue = ( pControlPort->fControlValue - pControlPort->fLowerBound ) / fInterval; //pFader->setValue( fValue ); //pFader->setPeak_L( fValue ); //pFader->setPeak_R( fValue ); faderChanged( pFader ); m_pNameLbl->setText( pFX->getPluginName() ); } nInputControl_X += 45; for (uint i = 0; i < pFX->outputControlPorts.size(); i++) { LadspaControlPort *pControl = pFX->outputControlPorts[ i ]; uint xPos = nInputControl_X + 10 + 45 * i; InstrumentNameWidget *pName = new InstrumentNameWidget( m_pFrame ); pName->move( xPos, 60 ); pName->show(); pName->setText( pControl->sName ); m_pInputControlNames.push_back( pName ); pName->setToolTip( pName->text() ); // fader Fader *pFader = new Fader( m_pFrame, true, true ); // without knob! pFader->move( xPos + 20, 60 ); //float fInterval = pControl->fUpperBound - pControl->fLowerBound; //float fValue = pControl->fControlValue / fInterval; pFader->show(); pFader->setMaxValue( pControl->fUpperBound ); pFader->setMinValue( pControl->fLowerBound ); pFader->setMaxPeak( pControl->fUpperBound ); pFader->setMinPeak( pControl->fLowerBound ); pFader->setValue( pControl->fControlValue ); pFader->setPeak_L( pControl->fControlValue ); pFader->setPeak_R( pControl->fControlValue ); m_pOutputControlFaders.push_back( pFader ); } } else { INFOLOG( "NULL PLUGIN" ); setWindowTitle( trUtf8( "LADSPA FX %1 Properties" ).arg( m_nLadspaFX) ); m_pNameLbl->setText( trUtf8("No plugin") ); m_pActivateBtn->setEnabled(false); } m_pTimer->start(100); #endif } void LadspaFXProperties::selectFXBtnClicked() { #ifdef H2CORE_HAVE_LADSPA LadspaFXSelector fxSelector(m_nLadspaFX); if (fxSelector.exec() == QDialog::Accepted) { QString sSelectedFX = fxSelector.getSelectedFX(); if ( !sSelectedFX.isEmpty() ) { LadspaFX *pFX = NULL; vector pluginList = Effects::get_instance()->getPluginList(); for (uint i = 0; i < pluginList.size(); i++) { H2Core::LadspaFXInfo *pFXInfo = pluginList[i]; if (pFXInfo->m_sName == sSelectedFX ) { int nSampleRate = Hydrogen::get_instance()->getAudioOutput()->getSampleRate(); pFX = LadspaFX::load( pFXInfo->m_sFilename, pFXInfo->m_sLabel, nSampleRate ); pFX->setEnabled( true ); break; } } Song *pSong = (Hydrogen::get_instance() )->getSong(); pSong->__is_modified = true; Effects::get_instance()->setLadspaFX( pFX, m_nLadspaFX ); //AudioEngine::get_instance()->unlock(); Hydrogen::get_instance()->restartLadspaFX(); updateControls(); } else { // no plugin selected INFOLOG( "no plugin selected" ); } } #endif } void LadspaFXProperties::removeFXBtnClicked() { #ifdef H2CORE_HAVE_LADSPA Song *pSong = (Hydrogen::get_instance() )->getSong(); pSong->__is_modified = true; Effects::get_instance()->setLadspaFX( NULL, m_nLadspaFX ); Hydrogen::get_instance()->restartLadspaFX(); updateControls(); #endif } void LadspaFXProperties::updateOutputControls() { #ifdef H2CORE_HAVE_LADSPA // INFOLOG( "[updateOutputControls]" ); // Song *pSong = (Hydrogen::get_instance() )->getSong(); LadspaFX *pFX = Effects::get_instance()->getLadspaFX(m_nLadspaFX); if (pFX) { m_pActivateBtn->setEnabled(true); if (pFX->isEnabled()) { m_pActivateBtn->setText( trUtf8("Deactivate") ); } else { m_pActivateBtn->setText( trUtf8("Activate") ); } for (uint i = 0; i < pFX->outputControlPorts.size(); i++) { LadspaControlPort *pControl = pFX->outputControlPorts[i]; vector::iterator it = m_pOutputControlFaders.begin() + i; if (it != m_pOutputControlFaders.end() ) { Fader *pFader = *it; if (pFader == NULL) { ERRORLOG( "[updateOutputControls] pFader = NULL" ); continue; } float fValue = pControl->fControlValue; float fInterval = pControl->fUpperBound - pControl->fLowerBound; fValue = pControl->fControlValue / fInterval; if (fValue < 0) fValue = -fValue; pFader->setPeak_L( fValue ); pFader->setPeak_R( fValue ); } } } else { m_pActivateBtn->setEnabled(false); } #endif } void LadspaFXProperties::activateBtnClicked() { #ifdef H2CORE_HAVE_LADSPA // Song *pSong = (Hydrogen::get_instance() )->getSong(); LadspaFX *pFX = Effects::get_instance()->getLadspaFX(m_nLadspaFX); if (pFX) { AudioEngine::get_instance()->lock( RIGHT_HERE ); pFX->setEnabled( !pFX->isEnabled() ); AudioEngine::get_instance()->unlock(); } #endif } hydrogen-0.9.6-beta3/src/gui/src/LadspaFXProperties.h000066400000000000000000000037041211146647700224100ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef LADSPA_FX_PROPERTIES_H #define LADSPA_FX_PROPERTIES_H #include #include #include class Fader; class LCDDisplay; class InstrumentNameWidget; class LadspaFXProperties : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: LadspaFXProperties(QWidget* parent, uint nLadspaFX); ~LadspaFXProperties(); void updateControls(); void showEvent ( QShowEvent *ev ); void closeEvent( QCloseEvent *ev ); public slots: void faderChanged( Fader* ref ); void selectFXBtnClicked(); void removeFXBtnClicked(); void activateBtnClicked(); void updateOutputControls(); private: uint m_nLadspaFX; QLabel *m_pNameLbl; std::vector m_pInputControlFaders; std::vector m_pInputControlNames; std::vector m_pInputControlLabel; std::vector m_pOutputControlFaders; std::vector m_pOutputControlNames; QScrollArea* m_pScrollArea; QFrame* m_pFrame; QPushButton *m_pSelectFXBtn; QPushButton *m_pActivateBtn; QPushButton *m_pRemoveFXBtn; QTimer* m_pTimer; }; #endif hydrogen-0.9.6-beta3/src/gui/src/LadspaFXSelector.cpp000066400000000000000000000200641211146647700223650ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "LadspaFXSelector.h" #include "HydrogenApp.h" #include #include "Skin.h" #include #include #include #include using namespace std; using namespace H2Core; const char* LadspaFXSelector::__class_name = "LadspaFXSelector"; LadspaFXSelector::LadspaFXSelector(int nLadspaFX) : QDialog( NULL ) , Object( __class_name ) , m_pCurrentItem( NULL ) { //INFOLOG( "INIT" ); setupUi( this ); setFixedSize( width(), height() ); setWindowTitle( trUtf8( "Select LADSPA FX" ) ); setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); m_sSelectedPluginName = ""; m_nameLbl->setText( QString("") ); m_labelLbl->setText( QString("") ); m_typeLbl->setText( QString("") ); m_pIDLbl->setText( QString("") ); m_pMakerLbl->setText( QString("") ); m_pCopyrightLbl->setText( QString("") ); m_pPluginsListBox->clear(); m_pOkBtn->setEnabled(false); m_pGroupsListView->setHeaderLabels( QStringList( trUtf8( "Groups" ) ) ); #ifdef H2CORE_HAVE_LADSPA //Song *pSong = Hydrogen::get_instance()->getSong(); LadspaFX *pFX = Effects::get_instance()->getLadspaFX(nLadspaFX); if (pFX) { m_sSelectedPluginName = pFX->getPluginName(); } buildLadspaGroups(); m_pGroupsListView->setItemHidden( m_pGroupsListView->headerItem(), true ); // LadspaFXGroup* pFXGroup = LadspaFX::getLadspaFXGroup(); // vector list = findPluginsInGroup( m_sSelectedPluginName, pFXGroup ); // for (uint i = 0; i < list.size(); i++) { // m_pPluginsListBox->addItem( list[i]->m_sName.c_str() ); // } #endif connect( m_pPluginsListBox, SIGNAL( itemSelectionChanged () ), this, SLOT( pluginSelected() ) ); pluginSelected(); // on_m_pGroupsListView_currentItemChanged( m_pGroupsListView->currentItem(), NULL ); } LadspaFXSelector::~LadspaFXSelector() { //INFOLOG( "DESTROY" ); } void LadspaFXSelector::buildLadspaGroups() { #ifdef H2CORE_HAVE_LADSPA m_pGroupsListView->clear(); // QTreeWidgetItem* pRootItem = new QTreeWidgetItem( ); // pRootItem->setText( 0, trUtf8("Groups") ); // m_pGroupsListView->addTopLevelItem( pRootItem ); // m_pGroupsListView->setItemExpanded( pRootItem, true ); H2Core::LadspaFXGroup* pFXGroup = Effects::get_instance()->getLadspaFXGroup(); for (uint i = 0; i < pFXGroup->getChildList().size(); i++) { H2Core::LadspaFXGroup *pNewGroup = ( pFXGroup->getChildList() )[ i ]; addGroup( m_pGroupsListView, pNewGroup ); } m_pGroupsListView->setCurrentItem( m_pCurrentItem ); #endif } #ifdef H2CORE_HAVE_LADSPA void LadspaFXSelector::addGroup( QTreeWidget *parent, H2Core::LadspaFXGroup *pGroup ) { QTreeWidgetItem* pNewItem = new QTreeWidgetItem( parent ); QFont f = pNewItem->font( 0 ); f.setBold( true ); pNewItem->setFont( 0, f ); buildGroup( pNewItem, pGroup ); } void LadspaFXSelector::addGroup( QTreeWidgetItem * parent, H2Core::LadspaFXGroup *pGroup ) { QTreeWidgetItem* pNewItem = new QTreeWidgetItem( parent ); buildGroup( pNewItem, pGroup ); } void LadspaFXSelector::buildGroup( QTreeWidgetItem *pNewItem, H2Core::LadspaFXGroup *pGroup ) { QString sGroupName = pGroup->getName(); if (sGroupName == QString("Uncategorized")) { sGroupName = trUtf8("Alphabetic List"); } else if (sGroupName == QString("Categorized(LRDF)")) { sGroupName = trUtf8("Categorized"); } else if (sGroupName == QString("Recently Used")) { sGroupName = trUtf8("Recently Used"); } pNewItem->setText( 0, sGroupName ); for ( uint i = 0; i < pGroup->getChildList().size(); i++ ) { H2Core::LadspaFXGroup *pNewGroup = ( pGroup->getChildList() )[ i ]; addGroup( pNewItem, pNewGroup ); } for(uint i = 0; i < pGroup->getLadspaInfo().size(); i++) { H2Core::LadspaFXInfo* pInfo = (pGroup->getLadspaInfo())[i]; if (pInfo->m_sName == m_sSelectedPluginName) { m_pCurrentItem = pNewItem; break; } } } #endif QString LadspaFXSelector::getSelectedFX() { return m_sSelectedPluginName; } void LadspaFXSelector::pluginSelected() { #ifdef H2CORE_HAVE_LADSPA //INFOLOG( "[pluginSelected]" ); // if ( m_pPluginsListBox->selectedItems().isEmpty() ) return; QString sSelected = m_pPluginsListBox->currentItem()->text(); m_sSelectedPluginName = sSelected; std::vector pluginList = Effects::get_instance()->getPluginList(); for (uint i = 0; i < pluginList.size(); i++) { H2Core::LadspaFXInfo *pFXInfo = pluginList[i]; if (pFXInfo->m_sName == m_sSelectedPluginName ) { m_nameLbl->setText( pFXInfo->m_sName ); m_labelLbl->setText( pFXInfo->m_sLabel ); if ( ( pFXInfo->m_nIAPorts == 2 ) && ( pFXInfo->m_nOAPorts == 2 ) ) { // Stereo plugin m_typeLbl->setText( trUtf8("Stereo") ); } else if ( ( pFXInfo->m_nIAPorts == 1 ) && ( pFXInfo->m_nOAPorts == 1 ) ) { // Mono plugin m_typeLbl->setText( trUtf8("Mono") ); } else { // not supported m_typeLbl->setText( trUtf8("Not supported") ); } m_pIDLbl->setText( pFXInfo->m_sID ); m_pMakerLbl->setText( pFXInfo->m_sMaker ); m_pCopyrightLbl->setText( pFXInfo->m_sCopyright ); break; } } m_pOkBtn->setEnabled(true); #endif } void LadspaFXSelector::on_m_pGroupsListView_currentItemChanged( QTreeWidgetItem * currentItem, QTreeWidgetItem * previous ) { UNUSED( previous ); #ifdef H2CORE_HAVE_LADSPA //INFOLOG( "new selection: " + currentItem->text(0).toLocal8Bit().constData() ); m_pOkBtn->setEnabled(false); m_nameLbl->setText( QString("") ); m_labelLbl->setText( QString("") ); m_typeLbl->setText( QString("") ); m_pIDLbl->setText( QString("") ); m_pMakerLbl->setText( QString("") ); m_pCopyrightLbl->setText( QString("") ); // nothing was selected if ( currentItem == NULL ) { return; } if ( currentItem->childCount() ) { currentItem->setExpanded( true ); } QString itemText = currentItem->text( 0 ); m_pPluginsListBox->clear(); // ... Why not anyway ? Jakob Lund H2Core::LadspaFXGroup* pFXGroup = Effects::get_instance()->getLadspaFXGroup(); std::vector pluginList = findPluginsInGroup( itemText, pFXGroup ); int selectedIndex = -1; for (int i = 0; i < (int)pluginList.size(); i++) { //INFOLOG( "adding plugin: " + pluginList[ i ]->m_sName ); m_pPluginsListBox->addItem( pluginList[ i ]->m_sName ); if ( pluginList[ i ]->m_sName == m_sSelectedPluginName ) { selectedIndex = i; } } if ( selectedIndex >= 0 ) m_pPluginsListBox->setCurrentRow( selectedIndex ); #endif } #ifdef H2CORE_HAVE_LADSPA std::vector LadspaFXSelector::findPluginsInGroup( const QString& sSelectedGroup, H2Core::LadspaFXGroup *pGroup ) { //INFOLOG( "group: " + sSelectedGroup ); vector list; if ( pGroup->getName() == sSelectedGroup ) { //INFOLOG( "found..." ); for ( uint i = 0; i < pGroup->getLadspaInfo().size(); ++i ) { H2Core::LadspaFXInfo *pInfo = ( pGroup->getLadspaInfo() )[i]; list.push_back( pInfo ); } return list; } else { //INFOLOG( "not found...searching in the child groups" ); for ( uint i = 0; i < pGroup->getChildList().size(); ++i ) { H2Core::LadspaFXGroup *pNewGroup = ( pGroup->getChildList() )[ i ]; list = findPluginsInGroup( sSelectedGroup, pNewGroup ); if (list.size() != 0) { return list; } } } //WARNINGLOG( "[findPluginsInGroup] no group found ('" + sSelectedGroup + "')" ); return list; } #endif hydrogen-0.9.6-beta3/src/gui/src/LadspaFXSelector.h000066400000000000000000000037051211146647700220350ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef LADSPA_FX_SELECTOR_H #define LADSPA_FX_SELECTOR_H #include "ui_LadspaFXSelector_UI.h" #include #include #include #include #include namespace H2Core { class LadspaFXInfo; class LadspaFXGroup; } class LadspaFXSelector : public QDialog, public Ui_LadspaFXSelector_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: LadspaFXSelector(int nLadspaFX); ~LadspaFXSelector(); QString getSelectedFX(); private slots: void on_m_pGroupsListView_currentItemChanged( QTreeWidgetItem * current, QTreeWidgetItem * previous ); void pluginSelected(); private: QTreeWidgetItem* m_pCurrentItem; QString m_sSelectedPluginName; void buildLadspaGroups(); #ifdef H2CORE_HAVE_LADSPA void addGroup(QTreeWidgetItem *parent, H2Core::LadspaFXGroup *pGroup); void addGroup( QTreeWidget *parent, H2Core::LadspaFXGroup *pGroup ); void buildGroup(QTreeWidgetItem *pNewItem, H2Core::LadspaFXGroup *pGroup); std::vector findPluginsInGroup( const QString& sSelectedGroup, H2Core::LadspaFXGroup *pGroup ); #endif }; #endif hydrogen-0.9.6-beta3/src/gui/src/MainForm.cpp000066400000000000000000001422461211146647700207410ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include #include #include #include #include #include "AboutDialog.h" #include "AudioEngineInfoForm.h" #include "ExportSongDialog.h" #include "HydrogenApp.h" #include "InstrumentRack.h" #include "Skin.h" #include "MainForm.h" #include "PlayerControl.h" #include "HelpBrowser.h" #include "LadspaFXProperties.h" #include "SongPropertiesDialog.h" #include "UndoActions.h" #include "Director.h" #include "Mixer/Mixer.h" #include "InstrumentEditor/InstrumentEditorPanel.h" #include "PatternEditor/PatternEditorPanel.h" #include "SongEditor/SongEditor.h" #include "SongEditor/SongEditorPanel.h" #include "SoundLibrary/SoundLibraryPanel.h" #include "SoundLibrary/SoundLibraryImportDialog.h" #include "SoundLibrary/SoundLibrarySaveDialog.h" #include "SoundLibrary/SoundLibraryExportDialog.h" #include "PlaylistEditor/PlaylistDialog.h" #include #ifndef WIN32 #include #include #endif #ifdef H2CORE_HAVE_LASH #include #include #endif #include #include using namespace std; using namespace H2Core; int MainForm::sigusr1Fd[2]; const char* MainForm::__class_name = "MainForm"; MainForm::MainForm( QApplication *app, const QString& songFilename ) : QMainWindow( 0, 0 ) , Object( __class_name ) { setMinimumSize( QSize( 1000, 500 ) ); setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); #ifndef WIN32 if (::socketpair(AF_UNIX, SOCK_STREAM, 0, sigusr1Fd)) qFatal("Couldn't create HUP socketpair"); snUsr1 = new QSocketNotifier(sigusr1Fd[1], QSocketNotifier::Read, this); connect(snUsr1, SIGNAL(activated(int)), this, SLOT( handleSigUsr1() )); #endif m_pQApp = app; m_pQApp->processEvents(); // Load default song Song *song = NULL; if ( !songFilename.isEmpty() ) { song = Song::load( songFilename ); if (song == NULL) { //QMessageBox::warning( this, "Hydrogen", trUtf8("Error loading song.") ); song = Song::get_empty_song(); song->set_filename( "" ); } } else { Preferences *pref = Preferences::get_instance(); bool restoreLastSong = pref->isRestoreLastSongEnabled(); QString filename = pref->getLastSongFilename(); if ( restoreLastSong && ( !filename.isEmpty() )) { song = Song::load( filename ); if (song == NULL) { //QMessageBox::warning( this, "Hydrogen", trUtf8("Error restoring last song.") ); song = Song::get_empty_song(); song->set_filename( "" ); } } else { song = Song::get_empty_song(); song->set_filename( "" ); } } h2app = new HydrogenApp( this, song ); h2app->addEventListener( this ); createMenuBar(); h2app->setStatusBarMessage( trUtf8("Hydrogen Ready."), 10000 ); initKeyInstMap(); // we need to do all this to support the keyboard playing // for all the window modes h2app->getMixer()->installEventFilter (this); h2app->getPatternEditorPanel()->installEventFilter (this); h2app->getPatternEditorPanel()->getPianoRollEditor()->installEventFilter (this); h2app->getSongEditorPanel()->installEventFilter (this); h2app->getPlayerControl()->installEventFilter(this); InstrumentEditorPanel::get_instance()->installEventFilter(this); h2app->getAudioEngineInfoForm()->installEventFilter(this); h2app->getDirector()->installEventFilter(this); // h2app->getPlayListDialog()->installEventFilter(this); installEventFilter( this ); showDevelWarning(); connect( &m_autosaveTimer, SIGNAL(timeout()), this, SLOT(onAutoSaveTimer())); m_autosaveTimer.start( 60 * 1000 ); #ifdef H2CORE_HAVE_LASH if ( Preferences::get_instance()->useLash() ){ LashClient* lashClient = LashClient::get_instance(); if (lashClient->isConnected()) { // send alsa client id now since it can only be sent // after the audio engine has been started. Preferences *pref = Preferences::get_instance(); if ( pref->m_sMidiDriver == "ALSA" ) { // infoLog("[LASH] Sending alsa seq id to LASH server"); lashClient->sendAlsaClientId(); } // start timer for polling lash events lashPollTimer = new QTimer(this); connect( lashPollTimer, SIGNAL( timeout() ), this, SLOT( onLashPollTimer() ) ); lashPollTimer->start(500); } } #endif //playlist display timer QTimer *playlistDisplayTimer = new QTimer(this); connect( playlistDisplayTimer, SIGNAL( timeout() ), this, SLOT( onPlaylistDisplayTimer() ) ); playlistDisplayTimer->start(30000); // update player control at // ~ playlist display timer //beatcouter Hydrogen::get_instance()->setBcOffsetAdjust(); // director EventQueue::get_instance()->push_event( EVENT_METRONOME, 1 ); EventQueue::get_instance()->push_event( EVENT_METRONOME, 3 ); undoView = new QUndoView(h2app->m_undoStack); undoView->setWindowTitle(tr("Undo history")); undoView->setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); //restore last playlist if( Preferences::get_instance()->isRestoreLastPlaylistEnabled() ){ bool loadlist = h2app->getPlayListDialog()->loadListByFileName( Preferences::get_instance()->getLastPlaylistFilename() ); if( !loadlist ){ _ERRORLOG ( "Error loading the playlist" ); } } } MainForm::~MainForm() { // remove the autosave file QFile file( getAutoSaveFilename() ); file.remove(); //if a playlist is used, we save the last playlist-path to hydrogen.conf Preferences::get_instance()->setLastPlaylistFilename( Playlist::get_instance()->__playlistName ); if ( (Hydrogen::get_instance()->getState() == STATE_PLAYING) ) { Hydrogen::get_instance()->sequencer_stop(); } // remove the autosave file m_autosaveTimer.stop(); QFile autosaveFile( "hydrogen_autosave.h2song" ); autosaveFile.remove(); hide(); if (h2app != NULL) { delete Playlist::get_instance(); delete h2app; h2app = NULL; } } /// /// Create the menubar /// void MainForm::createMenuBar() { // menubar QMenuBar *m_pMenubar = new QMenuBar( this ); setMenuBar( m_pMenubar ); // FILE menu QMenu *m_pFileMenu = m_pMenubar->addMenu( trUtf8( "&Project" ) ); m_pFileMenu->addAction( trUtf8( "&New" ), this, SLOT( action_file_new() ), QKeySequence( "Ctrl+N" ) ); m_pFileMenu->addAction( trUtf8( "Show &info" ), this, SLOT( action_file_songProperties() ), QKeySequence( "" ) ); m_pFileMenu->addSeparator(); // ----- m_pFileMenu->addAction( trUtf8( "&Open" ), this, SLOT( action_file_open() ), QKeySequence( "Ctrl+O" ) ); m_pFileMenu->addAction( trUtf8( "Open &Demo" ), this, SLOT( action_file_openDemo() ), QKeySequence( "Ctrl+D" ) ); m_pRecentFilesMenu = m_pFileMenu->addMenu( trUtf8( "Open &recent" ) ); m_pFileMenu->addSeparator(); // ----- m_pFileMenu->addAction( trUtf8( "&Save" ), this, SLOT( action_file_save() ), QKeySequence( "Ctrl+S" ) ); m_pFileMenu->addAction( trUtf8( "Save &as..." ), this, SLOT( action_file_save_as() ), QKeySequence( "Ctrl+Shift+S" ) ); m_pFileMenu->addSeparator(); // ----- m_pFileMenu->addAction ( trUtf8 ( "Open &Pattern" ), this, SLOT ( action_file_openPattern() ), QKeySequence ( "" ) ); m_pFileMenu->addAction( trUtf8( "Expor&t pattern as..." ), this, SLOT( action_file_export_pattern_as() ), QKeySequence( "Ctrl+P" ) ); m_pFileMenu->addSeparator(); // ----- m_pFileMenu->addAction( trUtf8( "Export &MIDI file" ), this, SLOT( action_file_export_midi() ), QKeySequence( "Ctrl+M" ) ); m_pFileMenu->addAction( trUtf8( "&Export song" ), this, SLOT( action_file_export() ), QKeySequence( "Ctrl+E" ) ); #ifndef Q_OS_MACX m_pFileMenu->addSeparator(); // ----- m_pFileMenu->addAction( trUtf8("&Quit"), this, SLOT( action_file_exit() ), QKeySequence( "Ctrl+Q" ) ); #endif updateRecentUsedSongList(); connect( m_pRecentFilesMenu, SIGNAL( triggered(QAction*) ), this, SLOT( action_file_open_recent(QAction*) ) ); //~ FILE menu // Undo menu QMenu *m_pUndoMenu = m_pMenubar->addMenu( trUtf8( "&Undo" ) ); m_pUndoMenu->addAction( trUtf8( "Undo" ), this, SLOT( action_undo() ), QKeySequence( "Ctrl+Z" ) ); m_pUndoMenu->addAction( trUtf8( "Redo" ), this, SLOT( action_redo() ), QKeySequence( "Shift+Ctrl+Z" ) ); m_pUndoMenu->addAction( trUtf8( "Undo history" ), this, SLOT( openUndoStack() ), QKeySequence( "" ) ); // INSTRUMENTS MENU QMenu *m_pInstrumentsMenu = m_pMenubar->addMenu( trUtf8( "I&nstruments" ) ); m_pInstrumentsMenu->addAction( trUtf8( "&Add instrument" ), this, SLOT( action_instruments_addInstrument() ), QKeySequence( "" ) ); m_pInstrumentsMenu->addAction( trUtf8( "&Clear all" ), this, SLOT( action_instruments_clearAll() ), QKeySequence( "" ) ); m_pInstrumentsMenu->addAction( trUtf8( "&Save library" ), this, SLOT( action_instruments_saveLibrary() ), QKeySequence( "" ) ); m_pInstrumentsMenu->addAction( trUtf8( "&Export library" ), this, SLOT( action_instruments_exportLibrary() ), QKeySequence( "" ) ); m_pInstrumentsMenu->addAction( trUtf8( "&Import library" ), this, SLOT( action_instruments_importLibrary() ), QKeySequence( "" ) ); // Tools menu QMenu *m_pToolsMenu = m_pMenubar->addMenu( trUtf8( "&Tools" )); m_pToolsMenu->addAction( trUtf8("Playlist &editor"), this, SLOT( action_window_showPlaylistDialog() ), QKeySequence( "" ) ); m_pToolsMenu->addAction( trUtf8("Director"), this, SLOT( action_window_show_DirectorWidget() ), QKeySequence( "Alt+D" ) ); m_pToolsMenu->addAction( trUtf8("&Mixer"), this, SLOT( action_window_showMixer() ), QKeySequence( "Alt+M" ) ); m_pToolsMenu->addAction( trUtf8("&Instrument Rack"), this, SLOT( action_window_showDrumkitManagerPanel() ), QKeySequence( "Alt+I" ) ); m_pInputModeMenu = m_pToolsMenu->addMenu( trUtf8( "Input mode" ) ); m_pInstrumentAction = m_pInputModeMenu->addAction( trUtf8( "Instrument" ), this, SLOT( action_toggle_input_mode()), QKeySequence( "Ctrl+Alt+I" ) ); m_pInstrumentAction->setCheckable( true ); m_pDrumkitAction = m_pInputModeMenu->addAction( trUtf8( "Drumkit" ), this, SLOT( action_toggle_input_mode()), QKeySequence( "Ctrl+Alt+D" ) ); m_pDrumkitAction->setCheckable( true ); if( Preferences::get_instance()->__playselectedinstrument ) { m_pInstrumentAction->setChecked( true ); m_pDrumkitAction->setChecked (false ); } else { m_pInstrumentAction->setChecked( false ); m_pDrumkitAction->setChecked (true ); } m_pToolsMenu->addAction( trUtf8("&Preferences"), this, SLOT( showPreferencesDialog() ), QKeySequence( "Alt+P" ) ); //~ Tools menu Logger *l = Logger::get_instance(); if ( l->bit_mask() >= 1 ) { // DEBUG menu QMenu *m_pDebugMenu = m_pMenubar->addMenu( trUtf8("De&bug") ); m_pDebugMenu->addAction( trUtf8( "Show &audio engine info" ), this, SLOT( action_debug_showAudioEngineInfo() ) ); if(l->bit_mask() == 8) // hydrogen -V8 list object map in console m_pDebugMenu->addAction( trUtf8( "Print Objects" ), this, SLOT( action_debug_printObjects() ) ); //~ DEBUG menu } // INFO menu QMenu *m_pInfoMenu = m_pMenubar->addMenu( trUtf8( "&Info" ) ); m_pInfoMenu->addAction( trUtf8("&User manual"), this, SLOT( showUserManual() ), QKeySequence( "Ctrl+?" ) ); m_pInfoMenu->addSeparator(); m_pInfoMenu->addAction( trUtf8("&About"), this, SLOT( action_help_about() ), QKeySequence( trUtf8("", "Info|About") ) ); m_pInfoMenu->addAction( trUtf8("Report bug"), this, SLOT( action_report_bug() )); //~ INFO menu } void MainForm::onLashPollTimer() { #ifdef H2CORE_HAVE_LASH if ( Preferences::get_instance()->useLash() ){ LashClient* client = LashClient::get_instance(); if (!client->isConnected()) { WARNINGLOG("[LASH] Not connected to server!"); return; } bool keep_running = true; lash_event_t* event; string songFilename; QString filenameSong; Song *song = Hydrogen::get_instance()->getSong(); // Extra parentheses for -Wparentheses while ( (event = client->getNextEvent()) ) { switch (lash_event_get_type(event)) { case LASH_Save_File: INFOLOG("[LASH] Save file"); songFilename.append(lash_event_get_string(event)); songFilename.append("/hydrogen.h2song"); filenameSong = QString::fromLocal8Bit( songFilename.c_str() ); song->set_filename( filenameSong ); action_file_save(); client->sendEvent(LASH_Save_File); break; case LASH_Restore_File: songFilename.append(lash_event_get_string(event)); songFilename.append("/hydrogen.h2song"); INFOLOG( QString("[LASH] Restore file: %1") .arg( songFilename.c_str() ) ); filenameSong = QString::fromLocal8Bit( songFilename.c_str() ); openSongFile( filenameSong ); client->sendEvent(LASH_Restore_File); break; case LASH_Quit: // infoLog("[LASH] Quit!"); keep_running = false; break; default: ; // infoLog("[LASH] Got unknown event!"); } lash_event_destroy(event); } if (!keep_running) { lashPollTimer->stop(); action_file_exit(); } } #endif } /// return true if the app needs to be closed. bool MainForm::action_file_exit() { bool proceed = handleUnsavedChanges(); if(!proceed) { return false; } closeAll(); return true; } void MainForm::action_file_new() { if ( (Hydrogen::get_instance()->getState() == STATE_PLAYING) ) { Hydrogen::get_instance()->sequencer_stop(); } bool proceed = handleUnsavedChanges(); if(!proceed) { return; } h2app->m_undoStack->clear(); Hydrogen::get_instance()->m_timelinevector.clear(); Song * song = Song::get_empty_song(); song->set_filename( "" ); h2app->setSong(song); Hydrogen::get_instance()->setSelectedPatternNumber( 0 ); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->update_background_color(); HydrogenApp::get_instance()->getSongEditorPanel()->updatePositionRuler(); Hydrogen::get_instance()->m_timelinetagvector.clear(); // update director tags EventQueue::get_instance()->push_event( EVENT_METRONOME, 2 ); // update director songname EventQueue::get_instance()->push_event( EVENT_METRONOME, 3 ); } void MainForm::action_file_save_as() { if ( (Hydrogen::get_instance()->getState() == STATE_PLAYING) ) { Hydrogen::get_instance()->sequencer_stop(); } std::auto_ptr fd( new QFileDialog ); fd->setFileMode( QFileDialog::AnyFile ); fd->setFilter( trUtf8("Hydrogen Song (*.h2song)") ); fd->setAcceptMode( QFileDialog::AcceptSave ); fd->setWindowTitle( trUtf8( "Save song" ) ); fd->setSidebarUrls( fd->sidebarUrls() << QUrl::fromLocalFile( Filesystem::songs_dir() ) ); Song *song = Hydrogen::get_instance()->getSong(); QString defaultFilename; QString lastFilename = song->get_filename(); if ( lastFilename.isEmpty() ) { defaultFilename = Hydrogen::get_instance()->getSong()->__name; defaultFilename += ".h2song"; } else { defaultFilename = lastFilename; } fd->selectFile( defaultFilename ); QString filename; if (fd->exec() == QDialog::Accepted) { filename = fd->selectedFiles().first(); } if ( !filename.isEmpty() ) { QString sNewFilename = filename; if ( sNewFilename.endsWith(".h2song") == false ) { filename += ".h2song"; } song->set_filename(filename); action_file_save(); } h2app->setScrollStatusBarMessage( trUtf8("Song saved as.") + QString(" Into: ") + defaultFilename, 2000 ); h2app->setWindowTitle( filename ); } void MainForm::action_file_save() { Song *song = Hydrogen::get_instance()->getSong(); QString filename = song->get_filename(); if ( filename.isEmpty() ) { // just in case! return action_file_save_as(); } bool saved = false; saved = song->save( filename ); if(! saved) { QMessageBox::warning( this, "Hydrogen", trUtf8("Could not save song.") ); } else { Preferences::get_instance()->setLastSongFilename( song->get_filename() ); // add the new loaded song in the "last used song" vector Preferences *pPref = Preferences::get_instance(); vector recentFiles = pPref->getRecentFiles(); recentFiles.insert( recentFiles.begin(), filename ); pPref->setRecentFiles( recentFiles ); updateRecentUsedSongList(); h2app->setScrollStatusBarMessage( trUtf8("Song saved.") + QString(" Into: ") + filename, 2000 ); EventQueue::get_instance()->push_event( EVENT_METRONOME, 3 ); } } void MainForm::action_toggle_input_mode() { if( !Preferences::get_instance()->__playselectedinstrument ) { Preferences::get_instance()->__playselectedinstrument = true; m_pInstrumentAction->setChecked( true ); m_pDrumkitAction->setChecked (false ); } else { Preferences::get_instance()->__playselectedinstrument = false; m_pInstrumentAction->setChecked( false ); m_pDrumkitAction->setChecked (true ); } } void MainForm::action_help_about() { AboutDialog *dialog = new AboutDialog( NULL ); dialog->exec(); } void MainForm::action_report_bug() { QDesktopServices::openUrl(QString("https://github.com/hydrogen-music/hydrogen/issues")); } void MainForm::showUserManual() { h2app->getHelpBrowser()->hide(); h2app->getHelpBrowser()->show(); } void MainForm::action_file_export_pattern_as() { if ( ( Hydrogen::get_instance()->getState() == STATE_PLAYING ) ) { Hydrogen::get_instance()->sequencer_stop(); } Hydrogen *engine = Hydrogen::get_instance(); int selectedpattern = engine->getSelectedPatternNumber(); Song *song = engine->getSong(); Pattern *pat = song->get_pattern_list()->get ( selectedpattern ); Instrument *instr = song->get_instrument_list()->get ( 0 ); assert ( instr ); QDir dir = Preferences::get_instance()->__lastspatternDirectory; std::auto_ptr fd( new QFileDialog ); fd->setFileMode ( QFileDialog::AnyFile ); fd->setFilter ( trUtf8 ( "Hydrogen Pattern (*.h2pattern)" ) ); fd->setAcceptMode ( QFileDialog::AcceptSave ); fd->setWindowTitle ( trUtf8 ( "Save Pattern as ..." ) ); fd->setDirectory ( dir ); fd->setSidebarUrls( fd->sidebarUrls() << QUrl::fromLocalFile( Filesystem::patterns_dir() ) ); QString defaultPatternname = QString ( pat->get_name() ); fd->selectFile ( defaultPatternname ); LocalFileMng fileMng; QString filename; if ( fd->exec() == QDialog::Accepted ) { filename = fd->selectedFiles().first(); QString tmpfilename = filename; QString toremove = tmpfilename.section( '/', -1 ); QString newdatapath = tmpfilename.replace( toremove, "" ); Preferences::get_instance()->__lastspatternDirectory = newdatapath; } if ( !filename.isEmpty() ) { QString sNewFilename = filename; if(sNewFilename.endsWith( ".h2pattern" ) ){ sNewFilename += ""; } else{ sNewFilename += ".h2pattern"; } QString patternname = sNewFilename; QString realpatternname = filename; QString realname = realpatternname.mid( realpatternname.lastIndexOf( "/" ) + 1 ); if ( realname.endsWith( ".h2pattern" ) ) realname.replace( ".h2pattern", "" ); pat->set_name(realname); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); int err = fileMng.savePattern ( song, engine->getCurrentDrumkitname(), selectedpattern, patternname, realname, 2 ); if ( err != 0 ) { QMessageBox::warning( this, "Hydrogen", trUtf8("Could not export pattern.") ); _ERRORLOG ( "Error saving the pattern" ); } } h2app->setStatusBarMessage ( trUtf8 ( "Pattern saved." ), 10000 ); //update SoundlibraryPanel HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->test_expandedItems(); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->updateDrumkitList(); } void MainForm::action_file_open() { if ( ((Hydrogen::get_instance())->getState() == STATE_PLAYING) ) { Hydrogen::get_instance()->sequencer_stop(); } bool proceed = handleUnsavedChanges(); if(!proceed) { return; } static QString lastUsedDir = Preferences::get_instance()->getDataDirectory() + "/songs"; std::auto_ptr fd( new QFileDialog ); fd->setFileMode(QFileDialog::ExistingFile); fd->setFilter( trUtf8("Hydrogen Song (*.h2song)") ); fd->setDirectory( lastUsedDir ); fd->setWindowTitle( trUtf8( "Open song" ) ); QString filename; if (fd->exec() == QDialog::Accepted) { filename = fd->selectedFiles().first(); lastUsedDir = fd->directory().absolutePath(); } if ( !filename.isEmpty() ) { openSongFile( filename ); } HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->update_background_color(); } void MainForm::action_file_openPattern() { Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *pPatternList = song->get_pattern_list(); Instrument *instr = song->get_instrument_list()->get ( 0 ); assert ( instr ); QDir dirPattern( Preferences::get_instance()->getDataDirectory() + "/patterns" ); std::auto_ptr fd( new QFileDialog ); fd->setFileMode ( QFileDialog::ExistingFile ); fd->setFilter ( trUtf8 ( "Hydrogen Pattern (*.h2pattern)" ) ); fd->setDirectory ( dirPattern ); fd->setWindowTitle ( trUtf8 ( "Open Pattern" ) ); QString filename; if ( fd->exec() == QDialog::Accepted ) { filename = fd->selectedFiles().first(); } QString patternname = filename; LocalFileMng mng; LocalFileMng fileMng; Pattern* err = fileMng.loadPattern ( patternname ); if ( err == 0 ) { _ERRORLOG( "Error loading the pattern" ); _ERRORLOG( patternname ); } else { H2Core::Pattern *pNewPattern = err; pPatternList->add ( pNewPattern ); song->__is_modified = true; } HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); } /// \todo parametrizzare il metodo action_file_open ed eliminare il seguente... void MainForm::action_file_openDemo() { if ( (Hydrogen::get_instance()->getState() == STATE_PLAYING) ) { Hydrogen::get_instance()->sequencer_stop(); } bool proceed = handleUnsavedChanges(); if(!proceed) { return; } h2app->m_undoStack->clear(); std::auto_ptr fd( new QFileDialog ); fd->setFileMode(QFileDialog::ExistingFile); fd->setFilter( trUtf8("Hydrogen Song (*.h2song)") ); fd->setWindowTitle( trUtf8( "Open song" ) ); fd->setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); fd->setDirectory( QString( Preferences::get_instance()->getDemoPath() ) ); QString filename; if (fd->exec() == QDialog::Accepted) { filename = fd->selectedFiles().first(); } if ( !filename.isEmpty() ) { openSongFile( filename ); Hydrogen::get_instance()->getSong()->set_filename( "" ); } } void MainForm::showPreferencesDialog() { h2app->showPreferencesDialog(); } void MainForm::action_window_showPlaylistDialog() { h2app->showPlaylistDialog(); } void MainForm::action_window_show_DirectorWidget() { h2app->showDirector(); } void MainForm::action_window_showMixer() { bool isVisible = HydrogenApp::get_instance()->getMixer()->isVisible(); h2app->showMixer( !isVisible ); } void MainForm::action_debug_showAudioEngineInfo() { h2app->showAudioEngineInfoForm(); } /// /// Shows the song editor /// void MainForm::action_window_showSongEditor() { bool isVisible = h2app->getSongEditorPanel()->isVisible(); h2app->getSongEditorPanel()->setHidden( isVisible ); } void MainForm::action_instruments_addInstrument() { SE_mainMenuAddInstrumentAction *action = new SE_mainMenuAddInstrumentAction(); HydrogenApp::get_instance()->m_undoStack->push( action ); } void MainForm::action_instruments_clearAll() { switch( QMessageBox::information( this, "Hydrogen", trUtf8("Clear all instruments?"), trUtf8("Ok"), trUtf8("Cancel"), 0, // Enter == button 0 1 )) { // Escape == button 2 case 0: // ok btn pressed break; case 1: // cancel btn pressed return; } // Remove all layers // AudioEngine::get_instance()->lock( RIGHT_HERE ); Song *pSong = Hydrogen::get_instance()->getSong(); InstrumentList* pList = pSong->get_instrument_list(); for (uint i = pList->size(); i > 0; i--) { functionDeleteInstrument(i - 1); /* Instrument* pInstr = pList->get( i ); pInstr->set_name( (QString( trUtf8( "Instrument %1" ) ).arg( i + 1 )) ); // remove all layers for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { InstrumentLayer* pLayer = pInstr->get_layer( nLayer ); delete pLayer; pInstr->set_layer( NULL, nLayer ); } */ } // AudioEngine::get_instance()->unlock(); EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); } void MainForm::functionDeleteInstrument(int instrument) { Hydrogen * H = Hydrogen::get_instance(); Instrument *pSelectedInstrument = H->getSong()->get_instrument_list()->get( instrument ); std::list< Note* > noteList; Song* song = H->getSong(); PatternList *patList = song->get_pattern_list(); QString instrumentName = pSelectedInstrument->get_name(); QString drumkitName = H->getCurrentDrumkitname(); for ( int i = 0; i < patList->size(); i++ ) { H2Core::Pattern *pPattern = song->get_pattern_list()->get(i); const Pattern::notes_t* notes = pPattern->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pNote = it->second; assert( pNote ); if ( pNote->get_instrument() == pSelectedInstrument ) { pNote->set_pattern_idx( i ); noteList.push_back( pNote ); } } } SE_deleteInstrumentAction *action = new SE_deleteInstrumentAction( noteList, drumkitName, instrumentName, instrument ); HydrogenApp::get_instance()->m_undoStack->push( action ); } void MainForm::action_instruments_exportLibrary() { SoundLibraryExportDialog exportDialog( this, QString() ); exportDialog.exec(); } void MainForm::action_instruments_importLibrary() { SoundLibraryImportDialog dialog( this ); dialog.exec(); } void MainForm::action_instruments_saveLibrary() { SoundLibrarySaveDialog dialog( this ); dialog.exec(); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->test_expandedItems(); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->updateDrumkitList(); } /// /// Window close event /// void MainForm::closeEvent( QCloseEvent* ev ) { if ( action_file_exit() == false ) { // don't close!!! ev->ignore(); return; } ev->accept(); } void MainForm::action_file_export() { if ( (Hydrogen::get_instance()->getState() == STATE_PLAYING) ) { Hydrogen::get_instance()->sequencer_stop(); } ExportSongDialog *dialog = new ExportSongDialog(this); dialog->exec(); delete dialog; } void MainForm::action_window_showDrumkitManagerPanel() { InstrumentRack *pPanel = HydrogenApp::get_instance()->getInstrumentRack(); pPanel->setHidden( pPanel->isVisible() ); } void MainForm::closeAll() { // save window properties in the preferences files Preferences *pref = Preferences::get_instance(); // mainform WindowProperties mainFormProp; mainFormProp.x = x(); mainFormProp.y = y(); mainFormProp.height = height(); mainFormProp.width = width(); pref->setMainFormProperties( mainFormProp ); // Save mixer properties WindowProperties mixerProp; mixerProp.x = h2app->getMixer()->x(); mixerProp.y = h2app->getMixer()->y(); mixerProp.width = h2app->getMixer()->width(); mixerProp.height = h2app->getMixer()->height(); mixerProp.visible = h2app->getMixer()->isVisible(); pref->setMixerProperties( mixerProp ); // save pattern editor properties WindowProperties patternEditorProp; patternEditorProp.x = h2app->getPatternEditorPanel()->x(); patternEditorProp.y = h2app->getPatternEditorPanel()->y(); patternEditorProp.width = h2app->getPatternEditorPanel()->width(); patternEditorProp.height = h2app->getPatternEditorPanel()->height(); patternEditorProp.visible = h2app->getPatternEditorPanel()->isVisible(); pref->setPatternEditorProperties( patternEditorProp ); // save song editor properties WindowProperties songEditorProp; songEditorProp.x = h2app->getSongEditorPanel()->x(); songEditorProp.y = h2app->getSongEditorPanel()->y(); songEditorProp.width = h2app->getSongEditorPanel()->width(); songEditorProp.height = h2app->getSongEditorPanel()->height(); QSize size = h2app->getSongEditorPanel()->frameSize(); songEditorProp.visible = h2app->getSongEditorPanel()->isVisible(); pref->setSongEditorProperties( songEditorProp ); // save audio engine info properties WindowProperties audioEngineInfoProp; audioEngineInfoProp.x = h2app->getAudioEngineInfoForm()->x(); audioEngineInfoProp.y = h2app->getAudioEngineInfoForm()->y(); audioEngineInfoProp.visible = h2app->getAudioEngineInfoForm()->isVisible(); pref->setAudioEngineInfoProperties( audioEngineInfoProp ); #ifdef H2CORE_HAVE_LADSPA // save LADSPA FX window properties for (uint nFX = 0; nFX < MAX_FX; nFX++) { WindowProperties prop; prop.x = h2app->getLadspaFXProperties(nFX)->x(); prop.y = h2app->getLadspaFXProperties(nFX)->y(); prop.visible= h2app->getLadspaFXProperties(nFX)->isVisible(); pref->setLadspaProperties(nFX, prop); } #endif m_pQApp->quit(); } // keybindings.. void MainForm::onPlayStopAccelEvent() { int nState = Hydrogen::get_instance()->getState(); switch (nState) { case STATE_READY: Hydrogen::get_instance()->sequencer_play(); break; case STATE_PLAYING: Hydrogen::get_instance()->sequencer_stop(); break; default: ERRORLOG( "[MainForm::onPlayStopAccelEvent()] Unhandled case." ); } } void MainForm::onRestartAccelEvent() { Hydrogen* pEngine = Hydrogen::get_instance(); pEngine->setPatternPos( 0 ); } void MainForm::onBPMPlusAccelEvent() { Hydrogen* pEngine = Hydrogen::get_instance(); AudioEngine::get_instance()->lock( RIGHT_HERE ); Song* pSong = pEngine->getSong(); if (pSong->__bpm < 300) { pEngine->setBPM( pSong->__bpm + 0.1 ); } AudioEngine::get_instance()->unlock(); } void MainForm::onBPMMinusAccelEvent() { Hydrogen* pEngine = Hydrogen::get_instance(); AudioEngine::get_instance()->lock( RIGHT_HERE ); Song* pSong = pEngine->getSong(); if (pSong->__bpm > 40 ) { pEngine->setBPM( pSong->__bpm - 0.1 ); } AudioEngine::get_instance()->unlock(); } void MainForm::onSaveAsAccelEvent() { action_file_save_as(); } void MainForm::onSaveAccelEvent() { action_file_save(); } void MainForm::onOpenAccelEvent() { action_file_open(); } void MainForm::updateRecentUsedSongList() { m_pRecentFilesMenu->clear(); Preferences *pPref = Preferences::get_instance(); vector recentUsedSongs = pPref->getRecentFiles(); QString sFilename; for ( uint i = 0; i < recentUsedSongs.size(); ++i ) { sFilename = recentUsedSongs[ i ]; if ( !sFilename.isEmpty() ) { QAction *pAction = new QAction( this ); pAction->setText( sFilename ); m_pRecentFilesMenu->addAction( pAction ); } } } void MainForm::action_file_open_recent(QAction *pAction) { // INFOLOG( pAction->text() ); openSongFile( pAction->text() ); } void MainForm::openSongFile( const QString& sFilename ) { Hydrogen *engine = Hydrogen::get_instance(); if ( engine->getState() == STATE_PLAYING ) { engine->sequencer_stop(); } engine->m_timelinetagvector.clear(); h2app->closeFXProperties(); LocalFileMng mng; Song *pSong = Song::load( sFilename ); if ( pSong == NULL ) { QMessageBox::information( this, "Hydrogen", trUtf8("Error loading song.") ); return; } h2app->m_undoStack->clear(); // add the new loaded song in the "last used song" vector Preferences *pPref = Preferences::get_instance(); vector recentFiles = pPref->getRecentFiles(); recentFiles.insert( recentFiles.begin(), sFilename ); pPref->setRecentFiles( recentFiles ); h2app->setSong( pSong ); updateRecentUsedSongList(); engine->setSelectedPatternNumber( 0 ); HydrogenApp::get_instance()->getSongEditorPanel()->updatePositionRuler(); // EventQueue::get_instance()->push_event( EVENT_METRONOME, 1 ); EventQueue::get_instance()->push_event( EVENT_METRONOME, 3 ); } void MainForm::initKeyInstMap() { QString loc = QLocale::system().name(); int instr = 0; ///POSIX Locale //locale for keyboardlayout QWERTZ // de_DE, de_AT, de_LU, de_CH, de //locale for keyboardlayout AZERTY // fr_BE, fr_CA, fr_FR, fr_LU, fr_CH //locale for keyboardlayout QWERTY // en_GB, en_US, en_ZA, usw. if ( loc.contains( "de" ) || loc.contains( "DE" )){ ///QWERTZ keycodeInstrumentMap[Qt::Key_Y] = instr++; keycodeInstrumentMap[Qt::Key_S] = instr++; keycodeInstrumentMap[Qt::Key_X] = instr++; keycodeInstrumentMap[Qt::Key_D] = instr++; keycodeInstrumentMap[Qt::Key_C] = instr++; keycodeInstrumentMap[Qt::Key_V] = instr++; keycodeInstrumentMap[Qt::Key_G] = instr++; keycodeInstrumentMap[Qt::Key_B] = instr++; keycodeInstrumentMap[Qt::Key_H] = instr++; keycodeInstrumentMap[Qt::Key_N] = instr++; keycodeInstrumentMap[Qt::Key_J] = instr++; keycodeInstrumentMap[Qt::Key_M] = instr++; keycodeInstrumentMap[Qt::Key_Q] = instr++; keycodeInstrumentMap[Qt::Key_2] = instr++; keycodeInstrumentMap[Qt::Key_W] = instr++; keycodeInstrumentMap[Qt::Key_3] = instr++; keycodeInstrumentMap[Qt::Key_E] = instr++; keycodeInstrumentMap[Qt::Key_R] = instr++; keycodeInstrumentMap[Qt::Key_5] = instr++; keycodeInstrumentMap[Qt::Key_T] = instr++; keycodeInstrumentMap[Qt::Key_6] = instr++; keycodeInstrumentMap[Qt::Key_Z] = instr++; keycodeInstrumentMap[Qt::Key_7] = instr++; keycodeInstrumentMap[Qt::Key_U] = instr++; } else if ( loc.contains( "fr" ) || loc.contains( "FR" )){ ///AZERTY keycodeInstrumentMap[Qt::Key_W] = instr++; keycodeInstrumentMap[Qt::Key_S] = instr++; keycodeInstrumentMap[Qt::Key_X] = instr++; keycodeInstrumentMap[Qt::Key_D] = instr++; keycodeInstrumentMap[Qt::Key_C] = instr++; keycodeInstrumentMap[Qt::Key_V] = instr++; keycodeInstrumentMap[Qt::Key_G] = instr++; keycodeInstrumentMap[Qt::Key_B] = instr++; keycodeInstrumentMap[Qt::Key_H] = instr++; keycodeInstrumentMap[Qt::Key_N] = instr++; keycodeInstrumentMap[Qt::Key_J] = instr++; keycodeInstrumentMap[Qt::Key_Question] = instr++; keycodeInstrumentMap[Qt::Key_A] = instr++; keycodeInstrumentMap[Qt::Key_2] = instr++; keycodeInstrumentMap[Qt::Key_Z] = instr++; keycodeInstrumentMap[Qt::Key_3] = instr++; keycodeInstrumentMap[Qt::Key_E] = instr++; keycodeInstrumentMap[Qt::Key_R] = instr++; keycodeInstrumentMap[Qt::Key_5] = instr++; keycodeInstrumentMap[Qt::Key_T] = instr++; keycodeInstrumentMap[Qt::Key_6] = instr++; keycodeInstrumentMap[Qt::Key_Y] = instr++; keycodeInstrumentMap[Qt::Key_7] = instr++; keycodeInstrumentMap[Qt::Key_U] = instr++; }else { /// default QWERTY keycodeInstrumentMap[Qt::Key_Z] = instr++; keycodeInstrumentMap[Qt::Key_S] = instr++; keycodeInstrumentMap[Qt::Key_X] = instr++; keycodeInstrumentMap[Qt::Key_D] = instr++; keycodeInstrumentMap[Qt::Key_C] = instr++; keycodeInstrumentMap[Qt::Key_V] = instr++; keycodeInstrumentMap[Qt::Key_G] = instr++; keycodeInstrumentMap[Qt::Key_B] = instr++; keycodeInstrumentMap[Qt::Key_H] = instr++; keycodeInstrumentMap[Qt::Key_N] = instr++; keycodeInstrumentMap[Qt::Key_J] = instr++; keycodeInstrumentMap[Qt::Key_M] = instr++; keycodeInstrumentMap[Qt::Key_Q] = instr++; keycodeInstrumentMap[Qt::Key_2] = instr++; keycodeInstrumentMap[Qt::Key_W] = instr++; keycodeInstrumentMap[Qt::Key_3] = instr++; keycodeInstrumentMap[Qt::Key_E] = instr++; keycodeInstrumentMap[Qt::Key_R] = instr++; keycodeInstrumentMap[Qt::Key_5] = instr++; keycodeInstrumentMap[Qt::Key_T] = instr++; keycodeInstrumentMap[Qt::Key_6] = instr++; keycodeInstrumentMap[Qt::Key_Y] = instr++; keycodeInstrumentMap[Qt::Key_7] = instr++; keycodeInstrumentMap[Qt::Key_U] = instr++; } } bool MainForm::eventFilter( QObject *o, QEvent *e ) { UNUSED( o ); if ( e->type() == QEvent::KeyPress) { // special processing for key press QKeyEvent *k = (QKeyEvent *)e; // qDebug( "Got key press for instrument '%c'", k->ascii() ); //int songnumber = 0; HydrogenApp* app = HydrogenApp::get_instance(); Hydrogen* engine = Hydrogen::get_instance(); switch (k->key()) { case Qt::Key_Space: onPlayStopAccelEvent(); return TRUE; // eat event case Qt::Key_Comma: engine->handleBeatCounter(); return TRUE; // eat even break; case Qt::Key_Backspace: onRestartAccelEvent(); return TRUE; // eat event break; case Qt::Key_Plus: onBPMPlusAccelEvent(); return TRUE; // eat event break; case Qt::Key_Minus: onBPMMinusAccelEvent(); return TRUE; // eat event break; case Qt::Key_Backslash: engine->onTapTempoAccelEvent(); return TRUE; // eat event break; case Qt::Key_S | Qt::CTRL: onSaveAccelEvent(); return TRUE; break; /* case Qt::Key_T: if( engine->getSong()->get_mode() == Song::PATTERN_MODE ){ engine->getSong()->set_mode( Song::SONG_MODE); } else if ( engine->getSong()->get_mode() == Song::SONG_MODE ) { engine->getSong()->set_mode( Song::PATTERN_MODE ); } return TRUE; break; */ case Qt::Key_F5 : if( engine->m_PlayList.size() == 0) break; return handleSelectNextPrevSongOnPlaylist( -1 ); break; case Qt::Key_F6 : if( Hydrogen::get_instance()->m_PlayList.size() == 0) break; return handleSelectNextPrevSongOnPlaylist( 1 ); break; case Qt::Key_F12 : //panic button stop all playing notes engine->__panic(); // QMessageBox::information( this, "Hydrogen", trUtf8( "Panic" ) ); return TRUE; break; case Qt::Key_F9 : // Qt::Key_Left do not work. Some ideas ? engine->setPatternPos( Hydrogen::get_instance()->getPatternPos() - 1 ); return TRUE; break; case Qt::Key_F10 : // Qt::Key_Right do not work. Some ideas ? engine->setPatternPos( Hydrogen::get_instance()->getPatternPos() + 1 ); return TRUE; break; case Qt::Key_L : engine->togglePlaysSelected(); QString msg = Preferences::get_instance()->patternModePlaysSelected() ? "Single pattern mode" : "Stacked pattern mode"; app->setStatusBarMessage( msg, 5000 ); app->getSongEditorPanel()->setModeActionBtn( Preferences::get_instance()->patternModePlaysSelected() ); app->getSongEditorPanel()->updateAll(); return TRUE; break; // QAccel *a = new QAccel( this ); // a->connectItem( a->insertItem(Key_S + CTRL), this, SLOT( onSaveAccelEvent() ) ); // a->connectItem( a->insertItem(Key_O + CTRL), this, SLOT( onOpenAccelEvent() ) ); } // virtual keyboard handling map::iterator found = keycodeInstrumentMap.find ( k->key() ); if (found != keycodeInstrumentMap.end()) { // INFOLOG( "[eventFilter] virtual keyboard event" ); // insert note at the current column in time // if event recording enabled int row = (*found).second; Hydrogen* engine = Hydrogen::get_instance(); float velocity = 0.8; float pan_L = 1.0; float pan_R = 1.0; engine->addRealtimeNote (row, velocity, pan_L, pan_R, 0, NULL, NULL , row + 36); return TRUE; // eat event } else { return FALSE; // let it go } } else { return FALSE; // standard event processing } } /// print the object map void MainForm::action_debug_printObjects() { INFOLOG( "[action_debug_printObjects]" ); Object::write_objects_map_to_cerr(); } void MainForm::action_file_export_midi() { if ( ((Hydrogen::get_instance())->getState() == STATE_PLAYING) ) { Hydrogen::get_instance()->sequencer_stop(); } std::auto_ptr fd( new QFileDialog ); fd->setFileMode(QFileDialog::AnyFile); fd->setFilter( trUtf8("Midi file (*.mid)") ); fd->setDirectory( QDir::homePath() ); fd->setWindowTitle( trUtf8( "Export MIDI file" ) ); fd->setAcceptMode( QFileDialog::AcceptSave ); fd->setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); QString sFilename; if ( fd->exec() == QDialog::Accepted ) { sFilename = fd->selectedFiles().first(); } if ( !sFilename.isEmpty() ) { if ( sFilename.endsWith(".mid") == false ) { sFilename += ".mid"; } Song *pSong = Hydrogen::get_instance()->getSong(); // create the Standard Midi File object SMFWriter *pSmfWriter = new SMFWriter(); pSmfWriter->save( sFilename, pSong ); delete pSmfWriter; } } void MainForm::errorEvent( int nErrorCode ) { //ERRORLOG( "[errorEvent]" ); QString msg; switch (nErrorCode) { case Hydrogen::UNKNOWN_DRIVER: msg = trUtf8( "Unknown audio driver" ); break; case Hydrogen::ERROR_STARTING_DRIVER: msg = trUtf8( "Error starting audio driver" ); break; case Hydrogen::JACK_SERVER_SHUTDOWN: msg = trUtf8( "Jack driver: server shutdown" ); break; case Hydrogen::JACK_CANNOT_ACTIVATE_CLIENT: msg = trUtf8( "Jack driver: cannot activate client" ); break; case Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT: msg = trUtf8( "Jack driver: cannot connect output port" ); break; case Hydrogen::JACK_ERROR_IN_PORT_REGISTER: msg = trUtf8( "Jack driver: error in port register" ); break; default: msg = QString( trUtf8( "Unknown error %1" ) ).arg( nErrorCode ); } QMessageBox::information( this, "Hydrogen", msg ); } void MainForm::playlistLoadSongEvent(int nIndex) { QString selected = Hydrogen::get_instance()->m_PlayList[ nIndex ].m_hFile; openSongFile(selected); EventQueue::get_instance()->push_event( EVENT_METRONOME, 3 ); HydrogenApp::get_instance()->setScrollStatusBarMessage( trUtf8( "Playlist: Set song No. %1" ).arg( nIndex +1 ), 5000 ); } void MainForm::jacksessionEvent( int nEvent ) { switch (nEvent){ case 0: action_file_save(); break; case 1: action_file_exit(); break; } } void MainForm::action_file_songProperties() { SongPropertiesDialog *pDialog = new SongPropertiesDialog( this ); if ( pDialog->exec() == QDialog::Accepted ) { Hydrogen::get_instance()->getSong()->__is_modified = true; } delete pDialog; } void MainForm::action_window_showPatternEditor() { bool isVisible = HydrogenApp::get_instance()->getPatternEditorPanel()->isVisible(); HydrogenApp::get_instance()->getPatternEditorPanel()->setHidden( isVisible ); } void MainForm::showDevelWarning() { //set this to 'false' for the case that you want to make a release.. if ( true ) { Preferences *pref = Preferences::get_instance(); bool isDevelWarningEnabled = pref->getShowDevelWarning(); if(isDevelWarningEnabled) { QString msg = trUtf8( "You're using a development version of Hydrogen, please help us reporting bugs or suggestions in the hydrogen-devel mailing list.

    Thank you!" ); QMessageBox develMessageBox( this ); develMessageBox.setText( msg ); develMessageBox.addButton( QMessageBox::Ok ); develMessageBox.addButton( trUtf8( "Don't show this message anymore" ) , QMessageBox::AcceptRole ); if( develMessageBox.exec() == 0 ){ //don't show warning again pref->setShowDevelWarning( false ); } } } } QString MainForm::getAutoSaveFilename() { Song *pSong = Hydrogen::get_instance()->getSong(); assert( pSong ); QString sOldFilename = pSong->get_filename(); QString newName = "autosave.h2song"; if ( !sOldFilename.isEmpty() ) { newName = sOldFilename.left( sOldFilename.length() - 7 ) + ".autosave.h2song"; } return newName; } void MainForm::onAutoSaveTimer() { //INFOLOG( "[onAutoSaveTimer]" ); Song *pSong = Hydrogen::get_instance()->getSong(); assert( pSong ); QString sOldFilename = pSong->get_filename(); pSong->save( getAutoSaveFilename() ); pSong->set_filename(sOldFilename); /* Song *pSong = h2app->getSong(); if (pSong->getFilename() == "") { pSong->save( "autosave.h2song" ); return; } action_file_save(); */ } void MainForm::onPlaylistDisplayTimer() { if( Hydrogen::get_instance()->m_PlayList.size() == 0) return; int songnumber = Playlist::get_instance()->getActiveSongNumber(); QString songname; if ( songnumber == -1 ) return; if ( Hydrogen::get_instance()->getSong()->__name == "Untitled Song" ){ songname = Hydrogen::get_instance()->getSong()->get_filename(); }else { songname = Hydrogen::get_instance()->getSong()->__name; } QString message = (trUtf8("Playlist: Song No. %1").arg( songnumber + 1)) + QString(" --- Songname: ") + songname + QString(" --- Author: ") + Hydrogen::get_instance()->getSong()->__author; HydrogenApp::get_instance()->setScrollStatusBarMessage( message, 2000 ); } // Returns true if unsaved changes are successfully handled (saved, discarded, etc.) // Returns false if not (i.e. Cancel) bool MainForm::handleUnsavedChanges() { bool done = false; bool rv = true; while ( !done && Hydrogen::get_instance()->getSong()->__is_modified ) { switch( QMessageBox::information( this, "Hydrogen", trUtf8("\nThe document contains unsaved changes.\n" "Do you want to save the changes?\n"), trUtf8("&Save"), trUtf8("&Discard"), trUtf8("&Cancel"), 0, // Enter == button 0 2 ) ) { // Escape == button 2 case 0: // Save clicked or Alt+S pressed or Enter pressed. // If the save fails, the __is_modified flag will still be true if ( ! Hydrogen::get_instance()->getSong()->get_filename().isEmpty() ) { action_file_save(); } else { // never been saved action_file_save_as(); } // save break; case 1: // Discard clicked or Alt+D pressed // don't save but exit done = true; break; case 2: // Cancel clicked or Alt+C pressed or Escape pressed // don't exit done = true; rv = false; break; } } return rv; } void MainForm::usr1SignalHandler(int) { char a = 1; size_t ret = ::write(sigusr1Fd[0], &a, sizeof(a)); } void MainForm::handleSigUsr1() { snUsr1->setEnabled(false); char tmp; size_t ret = ::read(sigusr1Fd[1], &tmp, sizeof(tmp)); action_file_save(); snUsr1->setEnabled(true); } void MainForm::openUndoStack() { undoView->show(); undoView->setAttribute(Qt::WA_QuitOnClose, false); } void MainForm::action_undo(){ h2app->m_undoStack->undo(); } void MainForm::action_redo(){ h2app->m_undoStack->redo(); } void MainForm::undoRedoActionEvent( int nEvent ){ if(nEvent == 0) h2app->m_undoStack->undo(); else if(nEvent == 1) h2app->m_undoStack->redo(); } bool MainForm::handleSelectNextPrevSongOnPlaylist( int step ) { int playlistSize= Hydrogen::get_instance()->m_PlayList.size(); HydrogenApp* app = HydrogenApp::get_instance(); int songnumber = Playlist::get_instance()->getActiveSongNumber(); if(songnumber+step >= 0 && songnumber+step <= playlistSize-1){ Playlist::get_instance()->setNextSongByNumber( songnumber + step ); } else return FALSE; return TRUE; } hydrogen-0.9.6-beta3/src/gui/src/MainForm.h000066400000000000000000000103021211146647700203710ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef MAINFORM_H #define MAINFORM_H #include #include #include #include #include "EventListener.h" #include #include class HydrogenApp; class QUndoView;///debug only /// /// Main window /// class MainForm : public QMainWindow, public EventListener, public H2Core::Object { H2_OBJECT Q_OBJECT public: QApplication* m_pQApp; MainForm( QApplication *app, const QString& songFilename ); ~MainForm(); void updateRecentUsedSongList(); virtual void errorEvent( int nErrorCode ); virtual void jacksessionEvent( int nValue); virtual void playlistLoadSongEvent(int nIndex); virtual void undoRedoActionEvent( int nEvent ); static void usr1SignalHandler(int unused); public slots: void showPreferencesDialog(); void showUserManual(); void action_file_new(); void action_file_open(); void action_file_openDemo(); void action_file_save(); void action_file_save_as(); void action_file_openPattern(); void action_file_export_pattern_as(); bool action_file_exit(); void action_file_export(); void action_file_export_midi(); void action_file_songProperties(); void action_help_about(); void action_report_bug(); void action_instruments_addInstrument(); void action_instruments_clearAll(); void action_instruments_saveLibrary(); void action_instruments_exportLibrary(); void action_instruments_importLibrary(); void action_window_showMixer(); void action_window_showPlaylistDialog(); void action_window_show_DirectorWidget(); void action_window_showSongEditor(); void action_window_showPatternEditor(); void action_window_showDrumkitManagerPanel(); void action_debug_printObjects(); void action_debug_showAudioEngineInfo(); void closeEvent( QCloseEvent* ev ); void onPlayStopAccelEvent(); void onRestartAccelEvent(); void onBPMPlusAccelEvent(); void onBPMMinusAccelEvent(); void onSaveAsAccelEvent(); void onSaveAccelEvent(); void onOpenAccelEvent(); void action_file_open_recent( QAction *pAction ); void showDevelWarning(); void onLashPollTimer(); void openUndoStack(); void action_undo(); void action_redo(); void action_toggle_input_mode(); void handleSigUsr1(); private slots: void onAutoSaveTimer(); void onPlaylistDisplayTimer(); protected: // Returns true if handled, false if aborted. bool handleUnsavedChanges(); private: HydrogenApp* h2app; static int sigusr1Fd[2]; QSocketNotifier *snUsr1; void functionDeleteInstrument(int instrument); QMenu *m_pInputModeMenu; QAction *m_pInstrumentAction; QAction *m_pDrumkitAction; QMenu *m_pRecentFilesMenu; QAction *m_pRecentFileAction0; QAction *m_pRecentFileAction1; QAction *m_pRecentFileAction2; QAction *m_pRecentFileAction3; QAction *m_pRecentFileAction4; QHttp m_http; QTimer m_autosaveTimer; /** Create the menubar */ void createMenuBar(); void closeAll(); void openSongFile( const QString& sFilename ); bool eventFilter( QObject *o, QEvent *e ); std::map keycodeInstrumentMap; void initKeyInstMap(); QString getAutoSaveFilename(); #ifdef H2CORE_HAVE_LASH QTimer *lashPollTimer; #endif QUndoView *undoView;///debug only bool handleSelectNextPrevSongOnPlaylist(int step); }; #endif hydrogen-0.9.6-beta3/src/gui/src/Mixer/000077500000000000000000000000001211146647700176005ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/src/Mixer/Mixer.cpp000066400000000000000000000530761211146647700214030ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "Mixer.h" #include "MixerLine.h" #include "../Skin.h" #include "../HydrogenApp.h" #include "../LadspaFXProperties.h" #include "../InstrumentEditor/InstrumentEditorPanel.h" #include "../widgets/Button.h" #include "../widgets/PixmapWidget.h" #include #include #include #include #include #include #include #include using namespace H2Core; #include #define MIXER_STRIP_WIDTH 56 #define MASTERMIXER_STRIP_WIDTH 126 const char* Mixer::__class_name = "Mixer"; Mixer::Mixer( QWidget* pParent ) : QWidget( pParent ) // : QWidget( pParent, Qt::WindowStaysOnTopHint ) // : QWidget( pParent, Qt::Tool ) , Object( __class_name ) { setWindowTitle( trUtf8( __class_name ) ); setMaximumHeight( 284 ); setMinimumHeight( 284 ); setFixedHeight( 284 ); setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); // fader Panel m_pFaderHBox = new QHBoxLayout(); m_pFaderHBox->setSpacing( 0 ); m_pFaderHBox->setMargin( 0 ); m_pFaderPanel = new QWidget( NULL ); m_pFaderPanel->resize( MIXER_STRIP_WIDTH * MAX_INSTRUMENTS, height() ); m_pFaderPanel->setLayout( m_pFaderHBox ); m_pFaderScrollArea = new QScrollArea( NULL ); m_pFaderScrollArea->setFrameShape( QFrame::NoFrame ); m_pFaderScrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pFaderScrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); m_pFaderScrollArea->setMinimumWidth( MIXER_STRIP_WIDTH * 4 ); m_pFaderScrollArea->setWidget( m_pFaderPanel ); for ( uint i = 0; i < MAX_INSTRUMENTS; ++i ) { m_pMixerLine[ i ] = NULL; } //~ fader panel // fX frame m_pFXFrame = new PixmapWidget( NULL ); m_pFXFrame->setFixedSize( 213, height() ); m_pFXFrame->setPixmap( "/mixerPanel/background_FX.png" ); for (uint nFX = 0; nFX < MAX_FX; nFX++) { m_pLadspaFXLine[nFX] = new LadspaFXMixerLine( m_pFXFrame ); m_pLadspaFXLine[nFX]->move( 13, 43 * nFX + 84 ); connect( m_pLadspaFXLine[nFX], SIGNAL( activeBtnClicked(LadspaFXMixerLine*) ), this, SLOT( ladspaActiveBtnClicked( LadspaFXMixerLine*) ) ); connect( m_pLadspaFXLine[nFX], SIGNAL( editBtnClicked(LadspaFXMixerLine*) ), this, SLOT( ladspaEditBtnClicked( LadspaFXMixerLine*) ) ); connect( m_pLadspaFXLine[nFX], SIGNAL( volumeChanged(LadspaFXMixerLine*) ), this, SLOT( ladspaVolumeChanged( LadspaFXMixerLine*) ) ); } if ( Preferences::get_instance()->isFXTabVisible() ) { m_pFXFrame->show(); } else { m_pFXFrame->hide(); } //~ fX frame // Master frame m_pMasterLine = new MasterMixerLine( NULL ); m_pMasterLine->move( 0, 0 ); connect( m_pMasterLine, SIGNAL( volumeChanged(MasterMixerLine*) ), this, SLOT( masterVolumeChanged(MasterMixerLine*) ) ); m_pShowFXPanelBtn = new ToggleButton( m_pMasterLine, "/mixerPanel/showFX_on.png", "/mixerPanel/showFX_off.png", "/mixerPanel/showFX_over.png", QSize(42, 13) ); m_pShowFXPanelBtn->move( 67, 242 ); m_pShowFXPanelBtn->setPressed(false); m_pShowFXPanelBtn->setToolTip( trUtf8( "Show FX panel" ) ); connect( m_pShowFXPanelBtn, SIGNAL(clicked(Button*)), this, SLOT( showFXPanelClicked(Button*))); m_pShowFXPanelBtn->setPressed( Preferences::get_instance()->isFXTabVisible() ); #ifndef H2CORE_HAVE_LADSPA m_pShowFXPanelBtn->hide(); #endif m_pShowPeaksBtn = new ToggleButton( m_pMasterLine, "/mixerPanel/showPeaks_on.png", "/mixerPanel/showPeaks_off.png", "/mixerPanel/showPeaks_over.png", QSize(42, 13) ); m_pShowPeaksBtn->move( 67, 258 ); m_pShowPeaksBtn->setPressed( (Preferences::get_instance())->showInstrumentPeaks() ); m_pShowPeaksBtn->setToolTip( trUtf8( "Show instrument peaks" ) ); connect( m_pShowPeaksBtn, SIGNAL(clicked(Button*)), this, SLOT( showPeaksBtnClicked(Button*))); //~ Master frame // LAYOUT! QHBoxLayout *pLayout = new QHBoxLayout(); pLayout->setSpacing( 0 ); pLayout->setMargin( 0 ); pLayout->addWidget( m_pFaderScrollArea ); pLayout->addWidget( m_pFXFrame ); pLayout->addWidget( m_pMasterLine ); this->setLayout( pLayout ); m_pUpdateTimer = new QTimer( this ); connect( m_pUpdateTimer, SIGNAL( timeout() ), this, SLOT( updateMixer() ) ); m_pUpdateTimer->start(50); HydrogenApp::get_instance()->addEventListener( this ); } Mixer::~Mixer() { m_pUpdateTimer->stop(); } MixerLine* Mixer::createMixerLine( int nInstr ) { MixerLine *pMixerLine = new MixerLine( 0 , nInstr); pMixerLine->setVolume( 0.2 ); pMixerLine->setMuteClicked( false ); pMixerLine->setSoloClicked( false ); connect( pMixerLine, SIGNAL( noteOnClicked(MixerLine*) ), this, SLOT( noteOnClicked(MixerLine*) ) ); connect( pMixerLine, SIGNAL( noteOffClicked(MixerLine*) ), this, SLOT( noteOffClicked(MixerLine*) ) ); connect( pMixerLine, SIGNAL( muteBtnClicked(MixerLine*) ), this, SLOT( muteClicked(MixerLine*) ) ); connect( pMixerLine, SIGNAL( soloBtnClicked(MixerLine*) ), this, SLOT( soloClicked(MixerLine*) ) ); connect( pMixerLine, SIGNAL( volumeChanged(MixerLine*) ), this, SLOT( volumeChanged(MixerLine*) ) ); connect( pMixerLine, SIGNAL( instrumentNameClicked(MixerLine*) ), this, SLOT( nameClicked(MixerLine*) ) ); connect( pMixerLine, SIGNAL( instrumentNameSelected(MixerLine*) ), this, SLOT( nameSelected(MixerLine*) ) ); connect( pMixerLine, SIGNAL( panChanged(MixerLine*) ), this, SLOT( panChanged( MixerLine*) ) ); connect( pMixerLine, SIGNAL( knobChanged(MixerLine*, int) ), this, SLOT( knobChanged( MixerLine*, int) ) ); return pMixerLine; } void Mixer::muteClicked(MixerLine* ref) { int nLine = findMixerLineByRef(ref); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); bool isMuteClicked = ref->isMuteClicked(); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); Instrument *pInstr = instrList->get(nLine); pInstr->set_muted( isMuteClicked); //(HydrogenApp::get_instance())->setSelectedInstrument(nLine); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } void Mixer::unmuteAll( bool findSelectedInstr ) { if(findSelectedInstr) unmuteAll( Hydrogen::get_instance()->getSelectedInstrumentNumber() ); else unmuteAll( 0 ); } void Mixer::unmuteAll( int selectedInstrument ) { Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); InstrumentList *pInstrList = pSong->get_instrument_list(); int nInstruments = pInstrList->size(); for ( int i = 0; i < nInstruments; ++i ) { m_pMixerLine[i]->setMuteClicked( false ); m_pMixerLine[i]->setSoloClicked( false ); pInstrList->get( i )->set_muted( false ); } // select first instrument after unmute all Hydrogen::get_instance()->setSelectedInstrumentNumber(selectedInstrument); } void Mixer::soloClicked(MixerLine* ref) { Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); InstrumentList *pInstrList = pSong->get_instrument_list(); int nInstruments = pInstrList->size(); int nLine = findMixerLineByRef(ref); pEngine->setSelectedInstrumentNumber( nLine ); bool isSoloClicked = ref->isSoloClicked(); if (isSoloClicked) { for ( int i = 0; i < nInstruments; ++i ) { m_pMixerLine[i]->setSoloClicked( false ); m_pMixerLine[i]->setMuteClicked( true ); pInstrList->get( i )->set_muted( true ); } m_pMixerLine[nLine]->setSoloClicked( true ); m_pMixerLine[nLine]->setMuteClicked( false ); pInstrList->get( nLine )->set_muted( false ); } else { for ( int i = 0; i < nInstruments; ++i ) { m_pMixerLine[i]->setMuteClicked( false ); m_pMixerLine[i]->setSoloClicked( false ); pInstrList->get( i )->set_muted( false ); } } Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } /// used in PatternEditorInstrumentList void Mixer::soloClicked(uint nLine) { MixerLine * L = m_pMixerLine[ nLine ]; L->setSoloClicked( !L->isSoloClicked() ); soloClicked( L ); // Hydrogen *pEngine = Hydrogen::get_instance(); // Song *pSong = pEngine->getSong(); // InstrumentList *pInstrList = pSong->get_instrument_list(); // int nInstruments = pInstrList->size(); // // bool isSoloClicked = m_pMixerLine[ nLine ]->isSoloClicked(); // // if (!isSoloClicked) { // for ( int i = 0; i < nInstruments; i++ ) { // m_pMixerLine[i]->setSoloClicked( false ); // m_pMixerLine[i]->setMuteClicked( true ); // pInstrList->get( i )->set_muted( true ); // } // m_pMixerLine[nLine]->setSoloClicked( true ); // m_pMixerLine[nLine]->setMuteClicked( false ); // pInstrList->get( nLine )->set_muted( false ); // } // else { // for ( int i = 0; i < nInstruments; i++ ) { // m_pMixerLine[i]->setMuteClicked( false ); // m_pMixerLine[i]->setSoloClicked( false ); // pInstrList->get( i )->set_muted( false ); // } // } } bool Mixer::isSoloClicked( uint n ) { if ( n >= MAX_INSTRUMENTS || m_pMixerLine[ n ] == NULL ) { return false; } return m_pMixerLine[ n ]->isSoloClicked(); } void Mixer::noteOnClicked( MixerLine* ref ) { int nLine = findMixerLineByRef( ref ); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); const float fPitch = 0.0f; Note *note = new Note( instrList->get(nLine), 0, 1.0, 0.5f, 0.5f, -1, fPitch ); AudioEngine::get_instance()->get_sampler()->note_on(note); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } /// Play sample button, right-clicked (note off) void Mixer::noteOffClicked( MixerLine* ref ) { int nLine = findMixerLineByRef( ref ); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); const float fPitch = 0.0f; Note *note = new Note( instrList->get( nLine ), 0, 1.0, 0.5, 0.5, -1, fPitch ); AudioEngine::get_instance()->get_sampler()->note_off(note); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } uint Mixer::findMixerLineByRef(MixerLine* ref) { for (uint i = 0; i < MAX_INSTRUMENTS; i++) { if (m_pMixerLine[i] == ref) { return i; } } return 0; } void Mixer::volumeChanged(MixerLine* ref) { int nLine = findMixerLineByRef(ref); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); Instrument *instr = instrList->get(nLine); instr->set_volume( ref->getVolume() ); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } void Mixer::masterVolumeChanged(MasterMixerLine* ref) { float volume = ref->getVolume(); Song *song = Hydrogen::get_instance()->getSong(); song->set_volume(volume); } void Mixer::updateMixer() { Preferences *pPref = Preferences::get_instance(); bool bShowPeaks = pPref->showInstrumentPeaks(); Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); InstrumentList *pInstrList = pSong->get_instrument_list(); uint nSelectedInstr = pEngine->getSelectedInstrumentNumber(); float fallOff = pPref->getMixerFalloffSpeed(); uint nMuteClicked = 0; uint nInstruments = pInstrList->size(); for ( unsigned nInstr = 0; nInstr < MAX_INSTRUMENTS; ++nInstr ) { if ( nInstr >= nInstruments ) { // unused instrument! let's hide and destroy the mixerline! if ( m_pMixerLine[ nInstr ] ) { delete m_pMixerLine[ nInstr ]; m_pMixerLine[ nInstr ] = NULL; int newWidth = MIXER_STRIP_WIDTH * nInstruments; if ( m_pFaderPanel->width() != newWidth ) { m_pFaderPanel->resize( newWidth, height() ); } } continue; } else { if ( m_pMixerLine[ nInstr ] == NULL ) { // the mixerline doesn't exists..I'll create a new one! m_pMixerLine[ nInstr ] = createMixerLine( nInstr ); m_pFaderHBox->addWidget( m_pMixerLine[ nInstr ] ); int newWidth = MIXER_STRIP_WIDTH * nInstruments; if ( m_pFaderPanel->width() != newWidth ) { m_pFaderPanel->resize( newWidth, height() ); } } MixerLine *pLine = m_pMixerLine[ nInstr ]; Instrument *pInstr = pInstrList->get( nInstr ); assert( pInstr ); float fNewPeak_L = pInstr->get_peak_l(); pInstr->set_peak_l( 0.0f ); // reset instrument peak float fNewPeak_R = pInstr->get_peak_r(); pInstr->set_peak_r( 0.0f ); // reset instrument peak float fNewVolume = pInstr->get_volume(); bool bMuted = pInstr->is_muted(); QString sName = pInstr->get_name(); float fPan_L = pInstr->get_pan_l(); float fPan_R = pInstr->get_pan_r(); // fader float fOldPeak_L = pLine->getPeak_L(); float fOldPeak_R = pLine->getPeak_R(); if (!bShowPeaks) { fNewPeak_L = 0.0f; fNewPeak_R = 0.0f; } if ( fNewPeak_L >= fOldPeak_L) { // LEFT peak pLine->setPeak_L( fNewPeak_L ); } else { pLine->setPeak_L( fOldPeak_L / fallOff ); } if ( fNewPeak_R >= fOldPeak_R) { // Right peak pLine->setPeak_R( fNewPeak_R ); } else { pLine->setPeak_R( fOldPeak_R / fallOff ); } // fader position pLine->setVolume( fNewVolume ); // mute if ( bMuted ) { nMuteClicked++; } pLine->setMuteClicked( bMuted ); // instr name pLine->setName( sName ); // pan float fPanValue = 0.0; if (fPan_R == 1.0) { fPanValue = 1.0 - (fPan_L / 2.0); } else { fPanValue = fPan_R / 2.0; } pLine->setPan( fPanValue ); // activity if ( pLine->getActivity() > 0 ) { pLine->setActivity( m_pMixerLine[ nInstr ]->getActivity() - 30 ); pLine->setPlayClicked( true ); } else { pLine->setPlayClicked( false ); } for (uint nFX = 0; nFX < MAX_FX; nFX++) { pLine->setFXLevel( nFX, pInstr->get_fx_level( nFX ) ); } pLine->setSelected( nInstr == nSelectedInstr ); pLine->updateMixerLine(); } } if (nMuteClicked == nInstruments - 1) { // find the not muted button for (uint i = 0; i < nInstruments; i++) { Instrument *instr = pInstrList->get(i); if (instr->is_muted() == false) { m_pMixerLine[i]->setSoloClicked(true); break; } } } else { for (uint i = 0; i < nInstruments; i++) { m_pMixerLine[i]->setSoloClicked(false); } } // update MasterPeak float oldPeak_L = m_pMasterLine->getPeak_L(); float newPeak_L = pEngine->getMasterPeak_L(); pEngine->setMasterPeak_L(0.0); float oldPeak_R = m_pMasterLine->getPeak_R(); float newPeak_R = pEngine->getMasterPeak_R(); pEngine->setMasterPeak_R(0.0); if (!bShowPeaks) { newPeak_L = 0.0; newPeak_R = 0.0; } if (newPeak_L >= oldPeak_L) { m_pMasterLine->setPeak_L( newPeak_L ); } else { m_pMasterLine->setPeak_L( oldPeak_L / fallOff ); } if (newPeak_R >= oldPeak_R) { m_pMasterLine->setPeak_R(newPeak_R); } else { m_pMasterLine->setPeak_R( oldPeak_R / fallOff ); } // set master fader position float newVolume = pSong->get_volume(); float oldVolume = m_pMasterLine->getVolume(); if (oldVolume != newVolume) { m_pMasterLine->setVolume(newVolume); } m_pMasterLine->updateMixerLine(); #ifdef H2CORE_HAVE_LADSPA // LADSPA for (uint nFX = 0; nFX < MAX_FX; nFX++) { LadspaFX *pFX = Effects::get_instance()->getLadspaFX( nFX ); if ( pFX ) { m_pLadspaFXLine[nFX]->setName( pFX->getPluginName() ); float fNewPeak_L = 0.0; float fNewPeak_R = 0.0; float fOldPeak_L = 0.0; float fOldPeak_R = 0.0; m_pLadspaFXLine[nFX]->getPeaks( &fOldPeak_L, &fOldPeak_R ); if (fNewPeak_L < fOldPeak_L) fNewPeak_L = fOldPeak_L / fallOff; if (fNewPeak_R < fOldPeak_R) fNewPeak_R = fOldPeak_R / fallOff; m_pLadspaFXLine[nFX]->setPeaks( fNewPeak_L, fNewPeak_R ); m_pLadspaFXLine[nFX]->setFxActive( pFX->isEnabled() ); m_pLadspaFXLine[nFX]->setVolume( pFX->getVolume() ); } else { m_pLadspaFXLine[nFX]->setName( "No plugin" ); m_pLadspaFXLine[nFX]->setFxActive( false ); m_pLadspaFXLine[nFX]->setVolume( 0.0 ); } } // ~LADSPA #endif } /// show event void Mixer::showEvent ( QShowEvent *ev ) { UNUSED( ev ); updateMixer(); } /// hide event void Mixer::hideEvent ( QHideEvent *ev ) { UNUSED( ev ); } void Mixer::nameClicked(MixerLine* ref) { UNUSED( ref ); InstrumentEditorPanel::get_instance()->show(); } void Mixer::nameSelected(MixerLine* ref) { int nLine = findMixerLineByRef(ref); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } void Mixer::panChanged(MixerLine* ref) { float panValue = ref->getPan(); float pan_L; float pan_R; if (panValue >= 0.5) { pan_L = (1.0 - panValue) * 2; pan_R = 1.0; } else { pan_L = 1.0; pan_R = panValue * 2; } int nLine = findMixerLineByRef(ref); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); Instrument *instr = instrList->get(nLine); instr->set_pan_l( pan_L ); instr->set_pan_r( pan_R ); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } void Mixer::knobChanged(MixerLine* ref, int nKnob) { int nLine = findMixerLineByRef(ref); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); Instrument *pInstr = instrList->get(nLine); pInstr->set_fx_level( ref->getFXLevel(nKnob), nKnob ); QString sInfo = trUtf8( "Set FX %1 level ").arg( nKnob + 1 ); ( HydrogenApp::get_instance() )->setStatusBarMessage( sInfo+ QString( "[%1]" ).arg( ref->getFXLevel(nKnob), 0, 'f', 2 ), 2000 ); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } void Mixer::noteOnEvent( int nInstrument ) { if ( m_pMixerLine[ nInstrument ] ) { m_pMixerLine[ nInstrument ]->setActivity( 100 ); } } void Mixer::resizeEvent ( QResizeEvent *ev ) { UNUSED( ev ); /* uint nMaster_X = width() - MASTERMIXER_STRIP_WIDTH; int nFXFrameWidth = 213; if ( m_pFXFrame->isVisible() ) { int w = width() - MASTERMIXER_STRIP_WIDTH - nFXFrameWidth; m_pFaderScrollArea->resize( w, m_nMixerHeight ); } else { int w = width() - MASTERMIXER_STRIP_WIDTH; m_pFaderScrollArea->resize( w, m_nMixerHeight ); } m_pFXFrame->move( nMaster_X - nFXFrameWidth, 0 ); m_pMasterLine->move( nMaster_X, 0); m_pShowPeaksBtn->move( nMaster_X + 67, 242 ); m_pShowFXPanelBtn->move( nMaster_X + 67, 258 ); resize(width(), m_nMixerHeight); // qt bug workaround */ } void Mixer::showFXPanelClicked(Button* ref) { if ( ref->isPressed() ) { m_pFXFrame->show(); Preferences::get_instance()->setFXTabVisible( true ); } else { m_pFXFrame->hide(); Preferences::get_instance()->setFXTabVisible( false ); } resizeEvent( NULL ); // force an update } void Mixer::showPeaksBtnClicked(Button* ref) { Preferences *pPref = Preferences::get_instance(); if ( ref->isPressed() ) { pPref->setInstrumentPeaks( true ); ( HydrogenApp::get_instance() )->setStatusBarMessage( trUtf8( "Show instrument peaks = On"), 2000 ); } else { pPref->setInstrumentPeaks( false ); ( HydrogenApp::get_instance() )->setStatusBarMessage( trUtf8( "Show instrument peaks = Off"), 2000 ); } } void Mixer::ladspaActiveBtnClicked( LadspaFXMixerLine* ref ) { #ifdef H2CORE_HAVE_LADSPA bool bActive = ref->isFxActive(); //Hydrogen *engine = Hydrogen::get_instance(); //Song *song = engine->getSong(); for (uint nFX = 0; nFX < MAX_FX; nFX++) { if (ref == m_pLadspaFXLine[ nFX ] ) { LadspaFX *pFX = Effects::get_instance()->getLadspaFX(nFX); if (pFX) { pFX->setEnabled( bActive ); } break; } } #endif } void Mixer::ladspaEditBtnClicked( LadspaFXMixerLine *ref ) { #ifdef H2CORE_HAVE_LADSPA for (uint nFX = 0; nFX < MAX_FX; nFX++) { if (ref == m_pLadspaFXLine[ nFX ] ) { HydrogenApp::get_instance()->getLadspaFXProperties(nFX)->hide(); HydrogenApp::get_instance()->getLadspaFXProperties(nFX)->show(); } } Hydrogen::get_instance()->getSong()->__is_modified = true; #endif } void Mixer::ladspaVolumeChanged( LadspaFXMixerLine* ref) { #ifdef H2CORE_HAVE_LADSPA Song *pSong = (Hydrogen::get_instance() )->getSong(); pSong->__is_modified = true; for (uint nFX = 0; nFX < MAX_FX; nFX++) { if (ref == m_pLadspaFXLine[ nFX ] ) { LadspaFX *pFX = Effects::get_instance()->getLadspaFX(nFX); if (pFX) { pFX->setVolume( ref->getVolume() ); QString sInfo = trUtf8( "Set LADSPA FX ( %1 ) volume").arg( QString(pFX->getPluginName() ) ); HydrogenApp::get_instance()->setStatusBarMessage( sInfo+ QString( " [%1]" ).arg( ref->getVolume(), 0, 'f', 2 ), 2000 ); } } } #endif } void Mixer::getPeaksInMixerLine( uint nMixerLine, float& fPeak_L, float& fPeak_R ) { if ( nMixerLine < MAX_INSTRUMENTS ) { fPeak_L = m_pMixerLine[ nMixerLine ]->getPeak_L(); fPeak_R = m_pMixerLine[ nMixerLine ]->getPeak_R(); } else { fPeak_L = 0; fPeak_R = 0; } } hydrogen-0.9.6-beta3/src/gui/src/Mixer/Mixer.h000066400000000000000000000055241211146647700210430ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef MIXER_H #define MIXER_H #include #include #include #include "../EventListener.h" class Button; class ToggleButton; class MixerLine; class FxMixerLine; class MasterMixerLine; class LadspaFXMixerLine; class PixmapWidget; class Mixer : public QWidget, public EventListener, public H2Core::Object { H2_OBJECT Q_OBJECT public: Mixer(QWidget* parent); ~Mixer(); void showEvent ( QShowEvent *ev ); void hideEvent ( QHideEvent *ev ); void resizeEvent ( QResizeEvent *ev ); void soloClicked(uint nLine); bool isSoloClicked(uint nLine); void getPeaksInMixerLine( uint nMixerLine, float& fPeak_L, float& fPeak_R ); public slots: void noteOnClicked(MixerLine* ref); void noteOffClicked(MixerLine* ref); void muteClicked(MixerLine* ref); void unmuteAll( bool findSelectedInstr); void unmuteAll( int selectedInstr); void soloClicked(MixerLine* ref); void volumeChanged(MixerLine* ref); void panChanged(MixerLine* ref); void knobChanged(MixerLine* ref, int nKnob); void masterVolumeChanged(MasterMixerLine*); void nameClicked(MixerLine* ref); void nameSelected(MixerLine* ref); void updateMixer(); void showFXPanelClicked(Button* ref); void showPeaksBtnClicked(Button* ref); void ladspaActiveBtnClicked( LadspaFXMixerLine* ref ); void ladspaEditBtnClicked( LadspaFXMixerLine *ref ); void ladspaVolumeChanged( LadspaFXMixerLine* ref); private: QHBoxLayout *m_pFaderHBox; LadspaFXMixerLine *m_pLadspaFXLine[MAX_FX]; QScrollArea* m_pFaderScrollArea; ToggleButton *m_pShowFXPanelBtn; ToggleButton *m_pShowPeaksBtn; MasterMixerLine *m_pMasterLine; QWidget *m_pFaderPanel; MixerLine *m_pMixerLine[MAX_INSTRUMENTS]; PixmapWidget *m_pFXFrame; QTimer *m_pUpdateTimer; uint findMixerLineByRef(MixerLine* ref); MixerLine* createMixerLine( int ); // Implements EventListener interface virtual void noteOnEvent( int nInstrument ); //~ Implements EventListener interface }; #endif hydrogen-0.9.6-beta3/src/gui/src/Mixer/MixerLine.cpp000066400000000000000000000603411211146647700222040ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include "../InstrumentEditor/InstrumentEditor.h" #include "../widgets/Fader.h" #include "../HydrogenApp.h" #include "../Skin.h" #include "../widgets/Rotary.h" #include "../widgets/Button.h" #include "../widgets/LCD.h" #include #include #include #include using namespace H2Core; #include "MixerLine.h" #define MIXERLINE_WIDTH 56 #define MIXERLINE_HEIGHT 254 #define MASTERMIXERLINE_WIDTH 126 #define MASTERMIXERLINE_HEIGHT 284 #define MIXERLINE_LABEL_H 115 #define MASTERMIXERLINE_FADER_H 75 using namespace H2Core; const char* MixerLine::__class_name = "MixerLine"; MixerLine::MixerLine(QWidget* parent, int nInstr) : PixmapWidget( parent, __class_name ) { // INFOLOG( "INIT" ); m_nWidth = MIXERLINE_WIDTH; m_nHeight = MIXERLINE_HEIGHT; m_fMaxPeak = 0.0; m_nActivity = 0; m_bIsSelected = false; m_nPeakTimer = 0; MidiAction* pAction; resize( m_nWidth, m_nHeight ); setFixedSize( m_nWidth, m_nHeight ); setPixmap( "/mixerPanel/mixerline_background.png" ); // Play sample button m_pPlaySampleBtn = new Button( this, "/mixerPanel/btn_play_on.png", "/mixerPanel/btn_play_off.png", "/mixerPanel/btn_play_over.png", QSize( 18, 13 ) ); m_pPlaySampleBtn->move( 8, 2 ); m_pPlaySampleBtn->setToolTip( trUtf8( "Play sample" ) ); connect(m_pPlaySampleBtn, SIGNAL(clicked(Button*)), this, SLOT(click(Button*))); connect(m_pPlaySampleBtn, SIGNAL(rightClicked(Button*)), this, SLOT(rightClick(Button*))); // Trigger sample LED m_pTriggerSampleLED = new Button( this, "/mixerPanel/led_trigger_on.png", "/mixerPanel/led_trigger_off.png", "/mixerPanel/led_trigger_off.png", QSize( 5, 13 ) ); m_pTriggerSampleLED->move( 26, 2 ); connect(m_pTriggerSampleLED, SIGNAL(clicked(Button*)), this, SLOT(click(Button*))); // Mute button m_pMuteBtn = new ToggleButton( this, "/mixerPanel/btn_mute_on.png", "/mixerPanel/btn_mute_off.png", "/mixerPanel/btn_mute_over.png", QSize( 18, 13 ) ); m_pMuteBtn->move( 8, 17 ); m_pMuteBtn->setToolTip( trUtf8( "Mute" ) ); connect(m_pMuteBtn, SIGNAL(clicked(Button*)), this, SLOT(click(Button*))); // Solo button m_pSoloBtn = new ToggleButton( this, "/mixerPanel/btn_solo_on.png", "/mixerPanel/btn_solo_off.png", "/mixerPanel/btn_solo_over.png", QSize( 18, 13 ) ); m_pSoloBtn->move( 30, 17); m_pSoloBtn->setToolTip( trUtf8( "Solo" ) ); connect(m_pSoloBtn, SIGNAL(clicked(Button*)), this, SLOT(click(Button*))); // pan rotary m_pPanRotary = new Rotary( this, Rotary::TYPE_CENTER, trUtf8( "Pan" ), false, true); m_pPanRotary->move( 14, 32 ); connect( m_pPanRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( panChanged(Rotary*) ) ); pAction = new MidiAction("PAN_ABSOLUTE"); pAction->setParameter1( QString::number(nInstr )); pAction->setParameter2( QString::number( 1 )); m_pPanRotary->setAction(pAction); // FX send uint y = 0; for (uint i = 0; i < MAX_FX; i++) { m_pKnob[i] = new Knob(this); pAction = new MidiAction(QString( "EFFECT%1_LEVEL_ABSOLUTE" ).arg( QString::number(i+1) )); pAction->setParameter1( QString::number( nInstr ) ); m_pKnob[i]->setAction( pAction ); if ( (i % 2) == 0 ) { m_pKnob[i]->move( 9, 63 + (20 * y) ); } else { m_pKnob[i]->move( 30, 63 + (20 * y) ); y++; } connect( m_pKnob[i], SIGNAL( valueChanged(Knob*) ), this, SLOT( knobChanged(Knob*) ) ); } Preferences *pref = Preferences::get_instance(); QString family = pref->getMixerFontFamily(); int size = pref->getMixerFontPointSize(); QFont mixerFont( family, size ); float m_fFalloffTemp = pref->getMixerFalloffSpeed(); m_fFalloffTemp = (m_fFalloffTemp * 20) - 2; m_nFalloff = (int)m_fFalloffTemp; QPixmap textBackground; bool ok = textBackground.load( Skin::getImagePath() + "/mixerPanel/mixerline_text_background.png" ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } // instrument name widget m_pNameWidget = new InstrumentNameWidget( this ); m_pNameWidget->move( 6, 128 ); m_pNameWidget->setToolTip( trUtf8( "Instrument name (double click to edit)" ) ); connect( m_pNameWidget, SIGNAL( doubleClicked () ), this, SLOT( nameClicked() ) ); connect( m_pNameWidget, SIGNAL( clicked () ), this, SLOT( nameSelected() ) ); // m_pFader m_pFader = new Fader( this, false, false ); m_pFader->move( 23, 128 ); m_pFader->setMinValue( 0.0 ); m_pFader->setMaxValue( 1.5 ); connect( m_pFader, SIGNAL( valueChanged(Fader*) ), this, SLOT( faderChanged(Fader*) ) ); pAction = new MidiAction("STRIP_VOLUME_ABSOLUTE"); pAction->setParameter1( QString::number(nInstr) ); m_pFader->setAction( pAction ); m_pPeakLCD = new LCDDisplay( this, LCDDigit::SMALL_BLUE, 4 ); m_pPeakLCD->move( 10, 106 ); m_pPeakLCD->setText( "0.00" ); QPalette lcdPalette; lcdPalette.setColor( QPalette::Background, QColor( 49, 53, 61 ) ); m_pPeakLCD->setPalette( lcdPalette ); } MixerLine::~MixerLine() { // INFOLOG( "DESTROY" ); //delete m_pFader; } void MixerLine::updateMixerLine() { if ( m_nPeakTimer > m_nFalloff ) { if ( m_fMaxPeak > 0.05f ) { m_fMaxPeak = m_fMaxPeak - 0.05f; } else { m_fMaxPeak = 0.0f; m_nPeakTimer = 0; } char tmp[20]; sprintf(tmp, "%#.2f", m_fMaxPeak ); m_pPeakLCD->setText(tmp); if ( m_fMaxPeak > 1.0 ) { m_pPeakLCD->setSmallRed(); } else { m_pPeakLCD->setSmallBlue(); } } m_nPeakTimer++; } void MixerLine::click(Button *ref) { Song *song = (Hydrogen::get_instance())->getSong(); if (ref == m_pMuteBtn) { song->__is_modified = true; emit muteBtnClicked(this); } else if (ref == m_pSoloBtn) { song->__is_modified = true; emit soloBtnClicked(this); } else if (ref == m_pPlaySampleBtn) { emit noteOnClicked(this); } } void MixerLine::rightClick(Button *ref) { if (ref == m_pPlaySampleBtn) { emit noteOffClicked(this); } } void MixerLine::faderChanged(Fader *ref) { Song *song = (Hydrogen::get_instance())->getSong(); song->__is_modified = true; emit volumeChanged(this); double value = (double) ref->getValue(); ( HydrogenApp::get_instance() )->setStatusBarMessage( trUtf8( "Set instrument volume [%1]" ).arg( value, 0, 'f', 2 ), 2000 ); } bool MixerLine::isMuteClicked() { return m_pMuteBtn->isPressed(); } void MixerLine::setMuteClicked(bool isClicked) { m_pMuteBtn->setPressed(isClicked); } bool MixerLine::isSoloClicked() { return m_pSoloBtn->isPressed(); } void MixerLine::setSoloClicked(bool isClicked) { m_pSoloBtn->setPressed(isClicked); } float MixerLine::getVolume() { return m_pFader->getValue(); } void MixerLine::setVolume( float value ) { m_pFader->setValue( value ); } void MixerLine::setPeak_L( float peak ) { if (peak != getPeak_L() ) { m_pFader->setPeak_L( peak ); if (peak > m_fMaxPeak) { if ( peak < 0.1f ) { peak = 0.0f; } char tmp[20]; sprintf(tmp, "%#.2f", peak); m_pPeakLCD->setText( tmp ); if ( peak > 1.0 ) { m_pPeakLCD->setSmallRed(); } else { m_pPeakLCD->setSmallBlue(); } m_fMaxPeak = peak; m_nPeakTimer = 0; } } } float MixerLine::getPeak_L() { return m_pFader->getPeak_L(); } void MixerLine::setPeak_R( float peak ) { if (peak != getPeak_R() ) { m_pFader->setPeak_R( peak ); if (peak > m_fMaxPeak) { if ( peak < 0.1f ) { peak = 0.0f; } char tmp[20]; sprintf(tmp, "%#.2f", peak); m_pPeakLCD->setText( tmp ); if ( peak > 1.0 ) { m_pPeakLCD->setSmallRed(); } else { m_pPeakLCD->setSmallBlue(); } m_fMaxPeak = peak; m_nPeakTimer = 0; } } } float MixerLine::getPeak_R() { return m_pFader->getPeak_R(); } void MixerLine::nameClicked() { emit instrumentNameClicked(this); } void MixerLine::nameSelected() { emit instrumentNameSelected(this); } void MixerLine::panChanged(Rotary *ref) { Song *song = Hydrogen::get_instance()->getSong(); song->__is_modified = true; emit panChanged( this ); float panValue = ref->getValue(); float pan_L, pan_R; if (panValue > 0.5) { pan_L = (1.0 - panValue) * 2.0; pan_R = 1.0; } else { pan_L = 1.0; pan_R = panValue * 2.0; } char m_pFaderPos[100]; sprintf( m_pFaderPos, "%#.2fL, %#.2fR", pan_L, pan_R); HydrogenApp::get_instance()->setStatusBarMessage( trUtf8( "Set instr. pan [%1]" ).arg( m_pFaderPos ), 2000 ); m_pPanRotary->setToolTip( QString("Pan ") + QString( m_pFaderPos ) ); } float MixerLine::getPan() { return m_pPanRotary->getValue(); } void MixerLine::setPan(float fValue) { if ( fValue != m_pPanRotary->getValue() ) { m_pPanRotary->setValue( fValue ); float pan_L, pan_R; if (fValue > 0.5) { pan_L = (1.0 - fValue) * 2.0; pan_R = 1.0; } else { pan_L = 1.0; pan_R = fValue * 2.0; } char m_pFaderPos[100]; sprintf( m_pFaderPos, "Pan %#.2fL, %#.2fR", pan_L, pan_R); m_pPanRotary->setToolTip( QString( m_pFaderPos ) ); } } void MixerLine::setPlayClicked( bool clicked ) { m_pTriggerSampleLED->setPressed( clicked ); } void MixerLine::knobChanged(Knob* pRef) { // infoLog( "knobChanged" ); for (uint i = 0; i < MAX_FX; i++) { if (m_pKnob[i] == pRef) { emit knobChanged( this, i ); break; } } } void MixerLine::setFXLevel( uint nFX, float fValue ) { if (nFX > MAX_FX) { ERRORLOG( QString("[setFXLevel] nFX > MAX_FX (nFX=%1)").arg(nFX) ); } m_pKnob[nFX]->setValue( fValue ); } float MixerLine::getFXLevel(uint nFX) { if (nFX > MAX_FX) { ERRORLOG( QString("[setFXLevel] nFX > MAX_FX (nFX=%1)").arg(nFX) ); } return m_pKnob[nFX]->getValue(); } void MixerLine::setSelected( bool bIsSelected ) { if (m_bIsSelected == bIsSelected ) return; m_bIsSelected = bIsSelected; if (m_bIsSelected) { setPixmap( "/mixerPanel/mixerline_background_on.png" ); } else { setPixmap( "/mixerPanel/mixerline_background.png" ); } } // :::::::::::::::::::::::::::: const char* MasterMixerLine::__class_name = "MasterMixerLine"; MasterMixerLine::MasterMixerLine(QWidget* parent) : PixmapWidget( parent, __class_name ) { m_nWidth = MASTERMIXERLINE_WIDTH; m_nHeight = MASTERMIXERLINE_HEIGHT; m_nPeakTimer = 0; setMinimumSize( m_nWidth, m_nHeight ); setMaximumSize( m_nWidth, m_nHeight ); resize( m_nWidth, m_nHeight ); QPalette defaultPalette; defaultPalette.setColor( QPalette::Background, QColor( 58, 62, 72 ) ); this->setPalette( defaultPalette ); // Background image setPixmap( "/mixerPanel/masterMixerline_background.png" ); Preferences *pref = Preferences::get_instance(); int size = pref->getMixerFontPointSize(); QString family = pref->getMixerFontFamily(); float m_fFalloffTemp = pref->getMixerFalloffSpeed(); m_fFalloffTemp = (m_fFalloffTemp * 20) - 2; m_nFalloff = (int)m_fFalloffTemp; m_pMasterFader = new MasterFader( this ); m_pMasterFader->setMin( 0.0 ); m_pMasterFader->setMax( 1.5 ); m_pMasterFader->move( 24, MASTERMIXERLINE_FADER_H ); connect( m_pMasterFader, SIGNAL( valueChanged(MasterFader*) ), this, SLOT( faderChanged(MasterFader*) ) ); MidiAction* pAction = new MidiAction("MASTER_VOLUME_ABSOLUTE"); m_pMasterFader->setAction( pAction ); QFont mixerFont( family, size ); m_pPeakLCD = new LCDDisplay( this, LCDDigit::SMALL_BLUE, 4 ); m_pPeakLCD->move( 23, 53 ); m_pPeakLCD->setText( "0.00" ); QPalette lcdPalette; lcdPalette.setColor( QPalette::Background, QColor( 49, 53, 61 ) ); m_pPeakLCD->setPalette( lcdPalette ); m_pHumanizeVelocityRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Humanize velocity" ), false, false ); m_pHumanizeVelocityRotary->move( 74, 88 ); connect( m_pHumanizeVelocityRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pHumanizeTimeRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Humanize time" ), false, false ); m_pHumanizeTimeRotary->move( 74, 125 ); connect( m_pHumanizeTimeRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pSwingRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Swing" ), false, false ); m_pSwingRotary->move( 74, 162 ); connect( m_pSwingRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); // Mute btn m_pMuteBtn = new ToggleButton( this, "/mixerPanel/master_mute_on.png", "/mixerPanel/master_mute_off.png", "/mixerPanel/master_mute_over.png", QSize( 42, 13 ) ); m_pMuteBtn->move( 20, 32 ); connect( m_pMuteBtn, SIGNAL( clicked(Button*) ), this, SLOT( muteClicked(Button*) ) ); m_pMuteBtn->setAction( new MidiAction("MUTE_TOGGLE")); } MasterMixerLine::~MasterMixerLine() { // cout << "MixerLine destroy" << endl; m_fMaxPeak = 0.0; } void MasterMixerLine::muteClicked(Button* pBtn) { Hydrogen::get_instance()->getSong()->__is_muted = pBtn->isPressed(); } void MasterMixerLine::faderChanged(MasterFader *ref) { m_pMasterFader->setValue( ref->getValue() ); emit volumeChanged(this); Song *song = Hydrogen::get_instance()->getSong(); song->__is_modified = true; double value = (double) ref->getValue(); ( HydrogenApp::get_instance() )->setStatusBarMessage( trUtf8( "Set master volume [%1]" ).arg( value, 0, 'f', 2 ), 2000 ); } float MasterMixerLine::getVolume() { return m_pMasterFader->getValue(); } void MasterMixerLine::setVolume( float value ) { m_pMasterFader->setValue( value ); } void MasterMixerLine::setPeak_L(float peak) { if ( peak != getPeak_L() ) { m_pMasterFader->setPeak_L(peak); if (peak > m_fMaxPeak) { if ( peak < 0.1f ) { peak = 0.0f; } char tmp[20]; sprintf(tmp, "%#.2f", peak); m_pPeakLCD->setText(tmp); if ( peak > 1.0 ) { m_pPeakLCD->setSmallRed(); } else { m_pPeakLCD->setSmallBlue(); } m_fMaxPeak = peak; m_nPeakTimer = 0; } } } float MasterMixerLine::getPeak_L() { return m_pMasterFader->getPeak_L(); } void MasterMixerLine::setPeak_R(float peak) { if ( peak != getPeak_R() ) { m_pMasterFader->setPeak_R(peak); if (peak > m_fMaxPeak) { if ( peak < 0.1f ) { peak = 0.0f; } char tmp[20]; sprintf(tmp, "%#.2f", peak); m_pPeakLCD->setText(tmp); if ( peak > 1.0 ) { m_pPeakLCD->setSmallRed(); } else { m_pPeakLCD->setSmallBlue(); } m_fMaxPeak = peak; m_nPeakTimer = 0; } } } float MasterMixerLine::getPeak_R() { return m_pMasterFader->getPeak_R(); } void MasterMixerLine::updateMixerLine() { if ( m_nPeakTimer > m_nFalloff ) { if ( m_fMaxPeak > 0.05f ) { m_fMaxPeak = m_fMaxPeak - 0.05f; } else { m_fMaxPeak = 0.0f; m_nPeakTimer = 0; } char tmp[20]; sprintf(tmp, "%#.2f", m_fMaxPeak ); m_pPeakLCD->setText(tmp); if ( m_fMaxPeak > 1.0 ) { m_pPeakLCD->setSmallRed(); } else { m_pPeakLCD->setSmallBlue(); } } m_nPeakTimer++; Song *pSong = Hydrogen::get_instance()->getSong(); if ( pSong ) { m_pHumanizeTimeRotary->setValue( pSong->get_humanize_time_value() ); m_pHumanizeVelocityRotary->setValue( pSong->get_humanize_velocity_value() ); m_pSwingRotary->setValue( pSong->get_swing_factor() ); } else { WARNINGLOG( "pSong == NULL "); } } void MasterMixerLine::rotaryChanged( Rotary *pRef ) { QString sMsg; double fVal = (double) pRef->getValue(); Hydrogen *pEngine = Hydrogen::get_instance(); AudioEngine::get_instance()->lock( RIGHT_HERE ); if ( pRef == m_pHumanizeTimeRotary ) { pEngine->getSong()->set_humanize_time_value( fVal ); sMsg = trUtf8( "Set humanize time parameter [%1]").arg( fVal, 0, 'f', 2 ); } else if ( pRef == m_pHumanizeVelocityRotary ) { pEngine->getSong()->set_humanize_velocity_value( fVal ); sMsg = trUtf8( "Set humanize velocity parameter [%1]").arg( fVal, 0, 'f', 2 ); } else if ( pRef == m_pSwingRotary ) { pEngine->getSong()->set_swing_factor( fVal ); sMsg = trUtf8( "Set swing factor [%1]").arg( fVal, 0, 'f', 2 ); } else { ERRORLOG( "[knobChanged] Unhandled knob" ); } AudioEngine::get_instance()->unlock(); ( HydrogenApp::get_instance() )->setStatusBarMessage( sMsg, 2000 ); } ///////////////////////////////////////// FxMixerLine::FxMixerLine(QWidget* parent) : PixmapWidget( parent, "FxMixerLine" ) { m_nWidth = MIXERLINE_WIDTH; m_nHeight = MIXERLINE_HEIGHT; setMinimumSize( m_nWidth, m_nHeight ); setMaximumSize( m_nWidth, m_nHeight ); resize( m_nWidth, m_nHeight ); // QPalette defaultPalette; // defaultPalette.setColor( QPalette::Background, QColor( 58, 62, 72 ) ); // this->setPalette( defaultPalette ); m_fMaxPeak = 0.0; // MixerLine Background image setPixmap( "/mixerPanel/mixerline_background.png" ); // MixerLine LABEL Background image // QPixmap mixerLineLabelBackground; // ok = mixerLineLabelBackground.load(Skin::getImagePath() + "/mixerPanel/mixerline_label_background.png"); // if( ok == false ){ // ERRORLOG( "Error loading pixmap" ); // } // QPixmap textBackground; // ok = textBackground.load( Skin::getImagePath() + "/mixerPanel/mixerline_text_background.png" ); // if( ok == false ){ // ERRORLOG( "Error loading pixmap" ); // } // active button activeBtn = new ToggleButton( this, "/mixerPanel/btn_on_on.png", "/mixerPanel/btn_on_off.png", "/mixerPanel/btn_on_over.png", QSize( 18, 12 ) ); activeBtn->move( 2, 5 ); activeBtn->setToolTip( trUtf8( "FX on/off") ); connect( activeBtn, SIGNAL( clicked(Button*) ), this, SLOT( click(Button*) ) ); Preferences *pref = Preferences::get_instance(); // m_pFader m_pFader = new Fader( this, false, false ); m_pFader->move( 22, 106 ); connect( m_pFader, SIGNAL( valueChanged(Fader*) ), this, SLOT( faderChanged(Fader*) ) ); QString family = pref->getMixerFontFamily(); int size = pref->getMixerFontPointSize(); QFont mixerFont( family, size ); m_pNameWidget = new InstrumentNameWidget( this ); m_pNameWidget->move( 2, 106 ); m_pNameWidget->setText( trUtf8( "Master output" ) ); m_pPeakLCD = new LCDDisplay( this, LCDDigit::SMALL_BLUE, 4 ); m_pPeakLCD->move( 2, MIXERLINE_LABEL_H ); m_pPeakLCD->setText( "0.00" ); } FxMixerLine::~FxMixerLine() { delete m_pFader; } void FxMixerLine::click(Button *ref) { Song *song = Hydrogen::get_instance()->getSong(); if (ref == activeBtn ) { song->__is_modified = true; emit activeBtnClicked( this ); } } void FxMixerLine::faderChanged(Fader *ref) { UNUSED( ref ); m_fMaxPeak = 0.0; char tmp[20]; sprintf( tmp, "%#.2f", m_fMaxPeak ); m_pPeakLCD->setText( tmp ); if ( m_fMaxPeak > 1.0 ) { m_pPeakLCD->setSmallRed(); } else { m_pPeakLCD->setSmallBlue(); } Song *song = Hydrogen::get_instance()->getSong(); song->__is_modified = true; emit volumeChanged( this ); } float FxMixerLine::getVolume() { return m_pFader->getValue(); } void FxMixerLine::setVolume( float value ) { m_pFader->setValue( value ); } void FxMixerLine::setPeak_L( float peak ) { if (peak != getPeak_L() ) { m_pFader->setPeak_L( peak ); if (peak > m_fMaxPeak) { char tmp[20]; sprintf(tmp, "%#.2f", peak); m_pPeakLCD->setText(tmp); if ( peak > 1.0 ) { m_pPeakLCD->setSmallRed(); } else { m_pPeakLCD->setSmallBlue(); } m_fMaxPeak = peak; } } } float FxMixerLine::getPeak_L() { return m_pFader->getPeak_L(); } void FxMixerLine::setPeak_R(float peak) { if (peak != getPeak_R() ) { m_pFader->setPeak_R( peak ); if (peak > m_fMaxPeak) { char tmp[20]; sprintf(tmp, "%#.2f", peak); m_pPeakLCD->setText(tmp); if ( peak > 1.0 ) { m_pPeakLCD->setSmallRed(); } else { m_pPeakLCD->setSmallBlue(); } m_fMaxPeak = peak; } } } float FxMixerLine::getPeak_R() { return m_pFader->getPeak_R(); } bool FxMixerLine::isFxActive() { return activeBtn->isPressed(); } void FxMixerLine::setFxActive( bool active ) { activeBtn->setPressed( active ); } //////////////////////////////// //QPixmap* InstrumentNameWidget::m_pBackground = NULL; InstrumentNameWidget::InstrumentNameWidget(QWidget* parent) : PixmapWidget( parent, "InstrumentNameWidget" ) { // infoLog( "INIT" ); m_nWidgetWidth = 17; m_nWidgetHeight = 116; Preferences *pref = Preferences::get_instance(); QString family = pref->getMixerFontFamily(); int size = pref->getMixerFontPointSize(); m_mixerFont.setFamily( family ); m_mixerFont.setPointSize( size ); // m_mixerFont.setBold( true ); // m_mixerFont.setItalic( true ); setPixmap( "/mixerPanel/mixerline_label_background.png" ); this->resize( m_nWidgetWidth, m_nWidgetHeight ); } InstrumentNameWidget::~InstrumentNameWidget() { // infoLog( "DESTROY" ); } void InstrumentNameWidget::paintEvent( QPaintEvent* ev ) { PixmapWidget::paintEvent( ev ); QPainter p( this ); p.setPen( QColor(230, 230, 230) ); p.setFont( m_mixerFont ); p.rotate( -90 ); p.drawText( -m_nWidgetHeight + 5, 0, m_nWidgetHeight - 10, m_nWidgetWidth, Qt::AlignVCenter, m_sInstrName ); } void InstrumentNameWidget::setText( QString text ) { if (m_sInstrName != text ) { m_sInstrName = text; update(); } } QString InstrumentNameWidget::text() { return m_sInstrName; } void InstrumentNameWidget::mousePressEvent( QMouseEvent * e ) { UNUSED( e ); emit clicked(); } void InstrumentNameWidget::mouseDoubleClickEvent( QMouseEvent * e ) { UNUSED( e ); emit doubleClicked(); } // ::::::::::::::::::::: LadspaFXMixerLine::LadspaFXMixerLine(QWidget* parent) : PixmapWidget( parent, "LadspaFXMixerLine" ) { resize( 194, 43 ); setMinimumSize( width(), height() ); setMaximumSize( width(), height() ); setPixmap( "/mixerPanel/fxline_background.png" ); // active button m_pActiveBtn = new ToggleButton( this, "/mixerPanel/bypass_on.png", "/mixerPanel/bypass_off.png", "/mixerPanel/bypass_over.png", QSize( 30, 13 ) ); m_pActiveBtn->move( 55, 25 ); m_pActiveBtn->setToolTip( trUtf8( "FX bypass") ); connect( m_pActiveBtn, SIGNAL( clicked(Button*) ), this, SLOT( click(Button*) ) ); // edit button m_pEditBtn = new Button( this, "/mixerPanel/edit_on.png", "/mixerPanel/edit_off.png", "/mixerPanel/edit_over.png", QSize( 30, 13 ) ); m_pEditBtn->move( 87, 25 ); m_pEditBtn->setToolTip( trUtf8( "Edit FX parameters") ); connect( m_pEditBtn, SIGNAL( clicked(Button*) ), this, SLOT( click(Button*) ) ); // instrument name widget m_pNameLCD = new LCDDisplay( this, LCDDigit::SMALL_BLUE, 13 ); m_pNameLCD->move( 11, 9 ); m_pNameLCD->setText( "No name" ); m_pNameLCD->setToolTip( trUtf8( "Ladspa FX name" ) ); // m_pRotary m_pRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Effect return" ), false, false ); m_pRotary->move( 132, 4 ); connect( m_pRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); } LadspaFXMixerLine::~LadspaFXMixerLine() { // infoLog( "DESTROY" ); } void LadspaFXMixerLine::setName(QString name) { m_pNameLCD->setText( name ); } void LadspaFXMixerLine::click(Button *ref) { if ( ref == m_pActiveBtn ) { emit activeBtnClicked( this ); } else if( ref == m_pEditBtn ) { emit editBtnClicked( this ); } } bool LadspaFXMixerLine::isFxActive() { return !m_pActiveBtn->isPressed(); } void LadspaFXMixerLine::setFxActive( bool active ) { m_pActiveBtn->setPressed( !active ); } void LadspaFXMixerLine::rotaryChanged(Rotary *ref) { UNUSED( ref ); m_fMaxPeak = 0.0; // char tmp[20]; // sprintf(tmp, "%#.1f", fMaxPeak); // m_pVolumeLbl->setText(tmp); Song *song = Hydrogen::get_instance()->getSong(); song->__is_modified = true; emit volumeChanged(this); } void LadspaFXMixerLine::setPeaks( float fPeak_L, float fPeak_R ) { UNUSED( fPeak_L ); UNUSED( fPeak_R ); /* m_pPeakmeter->setPeak_L( fPeak_L ); m_pPeakmeter->setPeak_R( fPeak_R ); m_pPeakmeter->updateFader(); */ } void LadspaFXMixerLine::getPeaks( float *fPeak_L, float *fPeak_R ) { UNUSED( fPeak_L ); UNUSED( fPeak_R ); /* (*fPeak_L) = m_pFader->getPeak_L(); (*fPeak_R) = m_pFader->getPeak_R(); */ } float LadspaFXMixerLine::getVolume() { return m_pRotary->getValue(); } void LadspaFXMixerLine::setVolume(float value) { m_pRotary->setValue( value ); // m_pRotary->updateRotary(); } hydrogen-0.9.6-beta3/src/gui/src/Mixer/MixerLine.h000066400000000000000000000137771211146647700216640ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef MIXERLINE_H #define MIXERLINE_H #include #include #include class Fader; class MasterFader; class PanFader; class Knob; class Button; class ToggleButton; class InstrumentPropertiesDialog; class InstrumentNameWidget; class LCDDisplay; class Rotary; #include "../widgets/PixmapWidget.h" class InstrumentNameWidget : public PixmapWidget { H2_OBJECT Q_OBJECT public: InstrumentNameWidget(QWidget* parent); ~InstrumentNameWidget(); void setText(QString text); QString text(); void mousePressEvent( QMouseEvent * e ); void mouseDoubleClickEvent( QMouseEvent * e ); signals: void clicked(); void doubleClicked(); protected: virtual void paintEvent(QPaintEvent *ev); private: int m_nWidgetWidth; int m_nWidgetHeight; QString m_sInstrName; QFont m_mixerFont; }; /// /// A mixer strip /// class MixerLine: public PixmapWidget { H2_OBJECT Q_OBJECT public: MixerLine(QWidget* parent, int nInstr); ~MixerLine(); void updateMixerLine(); bool isMuteClicked(); void setMuteClicked(bool isClicked); bool isSoloClicked(); void setSoloClicked(bool isClicked); float getVolume(); void setVolume(float value); void setPeak_L( float peak ); float getPeak_L(); void setPeak_R( float peak ); float getPeak_R(); void setName(QString name) { m_pNameWidget->setText( name ); } QString getName() { return m_pNameWidget->text(); } float getPan(); void setPan(float value); int getActivity() { return m_nActivity; } void setActivity( uint value ) { m_nActivity = value; } void setPlayClicked( bool clicked ); void setFXLevel( uint nFX, float fValue ); float getFXLevel( uint nFX ); void setSelected( bool bIsSelected ); signals: void muteBtnClicked(MixerLine *ref); void soloBtnClicked(MixerLine *ref); void volumeChanged(MixerLine *ref); void instrumentNameClicked(MixerLine *ref); void instrumentNameSelected(MixerLine *ref); void noteOnClicked(MixerLine *ref); void noteOffClicked(MixerLine *ref); void panChanged(MixerLine *ref); void knobChanged(MixerLine *ref, int nKnob); public slots: void click(Button *ref); void rightClick(Button *ref); void faderChanged(Fader *ref); void panChanged(Rotary *ref); void knobChanged(Knob *ref); void nameClicked(); void nameSelected(); private: uint m_nWidth; uint m_nHeight; bool m_bIsSelected; uint m_nActivity; uint m_nPeakTimer; float m_fMaxPeak; float m_nFalloff; Fader *m_pFader; Rotary *m_pPanRotary; InstrumentNameWidget *m_pNameWidget; ToggleButton *m_pMuteBtn; ToggleButton *m_pSoloBtn; Button *m_pPlaySampleBtn; Button *m_pTriggerSampleLED; Knob *m_pKnob[MAX_FX]; LCDDisplay *m_pPeakLCD; }; class MasterMixerLine: public PixmapWidget { H2_OBJECT Q_OBJECT public: MasterMixerLine(QWidget* parent); ~MasterMixerLine(); void updateMixerLine(); float getVolume(); void setVolume(float value); void setPeak_L(float peak); float getPeak_L(); void setPeak_R(float peak); float getPeak_R(); signals: void volumeChanged(MasterMixerLine *ref); public slots: void faderChanged(MasterFader * ref); void rotaryChanged( Rotary *pRef ); void muteClicked(Button*); private: uint m_nWidth; uint m_nHeight; uint m_nPeakTimer; float m_fMaxPeak; float m_nFalloff; Fader *m_pFader; MasterFader *m_pMasterFader; LCDDisplay *m_pPeakLCD; Rotary *m_pSwingRotary; Rotary *m_pHumanizeTimeRotary; Rotary *m_pHumanizeVelocityRotary; ToggleButton *m_pMuteBtn; }; /// /// Mixer strip for FX /// class FxMixerLine: public PixmapWidget { H2_OBJECT Q_OBJECT public: FxMixerLine(QWidget* parent); ~FxMixerLine(); float getVolume(); void setVolume(float value); void setPeak_L(float peak); float getPeak_L(); void setPeak_R(float peak); float getPeak_R(); void setName(QString name) { m_pNameWidget->setText( name ); } QString getName() { return m_pNameWidget->text(); } bool isFxActive(); void setFxActive( bool active ); signals: void volumeChanged( FxMixerLine *ref ); void instrumentNameClicked( FxMixerLine *ref ); void activeBtnClicked( FxMixerLine *ref ); public slots: void click(Button *ref); void faderChanged(Fader * ref); private: uint m_nWidth; uint m_nHeight; float m_fMaxPeak; Fader *m_pFader; InstrumentNameWidget *m_pNameWidget; ToggleButton *activeBtn; LCDDisplay *m_pPeakLCD; }; class LadspaFXMixerLine : public PixmapWidget { H2_OBJECT Q_OBJECT public: LadspaFXMixerLine(QWidget* parent); ~LadspaFXMixerLine(); bool isFxActive(); void setFxActive( bool active ); void setPeaks( float fPeak_L, float fPeak_R ); void getPeaks( float *fPeak_L, float *fPeak_R ); void setName( QString name ); float getVolume(); void setVolume( float value ); public slots: void click(Button *ref); void rotaryChanged(Rotary * ref); signals: void activeBtnClicked( LadspaFXMixerLine *ref ); void editBtnClicked( LadspaFXMixerLine *ref ); void volumeChanged( LadspaFXMixerLine *ref); private: float m_fMaxPeak; ToggleButton *m_pActiveBtn; Button *m_pEditBtn; Rotary *m_pRotary; LCDDisplay *m_pNameLCD; }; #endif hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/000077500000000000000000000000001211146647700213005ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/DrumPatternEditor.cpp000066400000000000000000001140021211146647700254160ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "DrumPatternEditor.h" #include "PatternEditorPanel.h" #include "NotePropertiesRuler.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "UndoActions.h" #include "../HydrogenApp.h" #include "../Mixer/Mixer.h" #include "../Skin.h" #include #include #include using namespace std; using namespace H2Core; const char* DrumPatternEditor::__class_name = "DrumPatternEditor"; DrumPatternEditor::DrumPatternEditor(QWidget* parent, PatternEditorPanel *panel) : QWidget( parent ) , Object( __class_name ) , m_nResolution( 8 ) , m_bUseTriplets( false ) , m_bRightBtnPressed( false ) , m_pDraggedNote( NULL ) , m_pPattern( NULL ) , m_pPatternEditorPanel( panel ) { setFocusPolicy(Qt::ClickFocus); m_nGridWidth = Preferences::get_instance()->getPatternEditorGridWidth(); m_nGridHeight = Preferences::get_instance()->getPatternEditorGridHeight(); unsigned nEditorWidth = 20 + m_nGridWidth * ( MAX_NOTES * 4 ); m_nEditorHeight = m_nGridHeight * MAX_INSTRUMENTS; resize( nEditorWidth, m_nEditorHeight ); HydrogenApp::get_instance()->addEventListener( this ); } DrumPatternEditor::~DrumPatternEditor() { } void DrumPatternEditor::updateEditor() { Hydrogen* engine = Hydrogen::get_instance(); // check engine state int state = engine->getState(); if ( (state != STATE_READY) && (state != STATE_PLAYING) ) { ERRORLOG( "FIXME: skipping pattern editor update (state shoud be READY or PLAYING)" ); return; } Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); int nSelectedPatternNumber = pEngine->getSelectedPatternNumber(); if ( (nSelectedPatternNumber != -1) && ( (uint)nSelectedPatternNumber < pPatternList->size() ) ) { m_pPattern = pPatternList->get( nSelectedPatternNumber ); } else { m_pPattern = NULL; } __selectedPatternNumber = nSelectedPatternNumber; uint nEditorWidth; if ( m_pPattern ) { nEditorWidth = 20 + m_nGridWidth * m_pPattern->get_length(); } else { nEditorWidth = 20 + m_nGridWidth * MAX_NOTES; } resize( nEditorWidth, height() ); // redraw all update( 0, 0, width(), height() ); } int DrumPatternEditor::getColumn(QMouseEvent *ev) { int nBase; if (m_bUseTriplets) { nBase = 3; } else { nBase = 4; } int nWidth = (m_nGridWidth * 4 * MAX_NOTES) / (nBase * m_nResolution); int x = ev->x(); int nColumn; nColumn = x - 20 + (nWidth / 2); nColumn = nColumn / nWidth; nColumn = (nColumn * 4 * MAX_NOTES) / (nBase * m_nResolution); return nColumn; } void DrumPatternEditor::mousePressEvent(QMouseEvent *ev) { if ( m_pPattern == NULL ) { return; } Song *pSong = Hydrogen::get_instance()->getSong(); int nInstruments = pSong->get_instrument_list()->size(); int row = (int)( ev->y() / (float)m_nGridHeight); if (row >= nInstruments) { return; } int nColumn = getColumn( ev ); int nRealColumn = 0; if( ev->x() > 20 ) { nRealColumn = (ev->x() - 20) / static_cast(m_nGridWidth); } if ( nColumn >= (int)m_pPattern->get_length() ) { update( 0, 0, width(), height() ); return; } Instrument *pSelectedInstrument = pSong->get_instrument_list()->get( row ); if( ev->button() == Qt::LeftButton && (ev->modifiers() & Qt::ShiftModifier) ) { //shift + leftClick: add noteOff note SE_addNoteRightClickAction *action = new SE_addNoteRightClickAction( nColumn, row, __selectedPatternNumber ); HydrogenApp::get_instance()->m_undoStack->push( action ); } else if (ev->button() == Qt::LeftButton ) { H2Core::Note *pDraggedNote = m_pPattern->find_note( nColumn, nRealColumn, pSelectedInstrument ); int oldLength = -1; float oldVelocity = 0.8f; float oldPan_L = 0.5f; float oldPan_R = 0.5f; float oldLeadLag = 0.0f; Note::Key oldNoteKeyVal = Note::C; Note::Octave oldOctaveKeyVal = Note::P8; bool noteExisted = false; if( pDraggedNote ){ oldLength = pDraggedNote->get_length(); oldVelocity = pDraggedNote->get_velocity(); oldPan_L = pDraggedNote->get_pan_l(); oldPan_R = pDraggedNote->get_pan_r(); oldLeadLag = pDraggedNote->get_lead_lag(); oldNoteKeyVal = pDraggedNote->get_key(); oldOctaveKeyVal = pDraggedNote->get_octave(); noteExisted = true; } SE_addNoteAction *action = new SE_addNoteAction( nColumn, row, __selectedPatternNumber, oldLength, oldVelocity, oldPan_L, oldPan_R, oldLeadLag, oldNoteKeyVal, oldOctaveKeyVal, noteExisted, Preferences::get_instance()->getHearNewNotes(), false, false); HydrogenApp::get_instance()->m_undoStack->push( action ); } else if (ev->button() == Qt::RightButton ) { m_bRightBtnPressed = true; m_pDraggedNote = m_pPattern->find_note( nColumn, nRealColumn, pSelectedInstrument, false ); // needed for undo note length __nRealColumn = nRealColumn; __nColumn = nColumn; __row = row; if( m_pDraggedNote ){ __oldLength = m_pDraggedNote->get_length(); } else { __oldLength = -1; } } } void DrumPatternEditor::addOrDeleteNoteAction( int nColumn, int row, int selectedPatternNumber, int oldLength, float oldVelocity, float oldPan_L, float oldPan_R, float oldLeadLag, int oldNoteKeyVal, int oldOctaveKeyVal, bool listen, bool isMidi, bool isInstrumentMode, bool isNoteOff) { Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); H2Core::Pattern *pPattern; if ( ( selectedPatternNumber != -1 ) && ( (uint)selectedPatternNumber < pPatternList->size() ) ) { pPattern = pPatternList->get( selectedPatternNumber ); } else { pPattern = NULL; } Song *pSong = Hydrogen::get_instance()->getSong(); Instrument *pSelectedInstrument = pSong->get_instrument_list()->get( row ); m_bRightBtnPressed = false; AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine bool bNoteAlreadyExist = false; if(!isInstrumentMode){ Pattern::notes_t* notes = (Pattern::notes_t*)pPattern->get_notes(); FOREACH_NOTE_IT_BOUND(notes,it,nColumn) { Note *pNote = it->second; assert( pNote ); if ( pNote->get_instrument() == pSelectedInstrument ) { // the note exists...remove it! bNoteAlreadyExist = true; delete pNote; notes->erase( it ); break; } } } else { Note* note = pPattern->find_note( nColumn, -1, pSelectedInstrument, (Note::Key)oldNoteKeyVal, (Note::Octave)oldOctaveKeyVal ); if( note ) { // the note exists...remove it! bNoteAlreadyExist = true; m_pPattern->remove_note( note ); delete note; } } if ( bNoteAlreadyExist == false ) { // create the new note unsigned nPosition = nColumn; float fVelocity = oldVelocity; float fPan_L = oldPan_L ; float fPan_R = oldPan_R; int nLength = oldLength; if( isNoteOff ) { fVelocity = 0.0f; fPan_L = 0.5f; fPan_R = 0.5f; nLength = 1; } const float fPitch = 0.0f; Note *pNote = new Note( pSelectedInstrument, nPosition, fVelocity, fPan_L, fPan_R, nLength, fPitch ); pNote->set_note_off( isNoteOff ); if( !isNoteOff ) pNote->set_lead_lag( oldLeadLag ); pNote->set_key_octave( (Note::Key)oldNoteKeyVal, (Note::Octave)oldOctaveKeyVal ); pPattern->insert_note( pNote ); if(isMidi){ pNote->set_just_recorded(true); } // hear note if ( listen && !isNoteOff ) { Note *pNote2 = new Note( pSelectedInstrument, 0, fVelocity, fPan_L, fPan_R, nLength, fPitch); AudioEngine::get_instance()->get_sampler()->note_on(pNote2); } } pSong->__is_modified = true; AudioEngine::get_instance()->unlock(); // unlock the audio engine // update the selected line int nSelectedInstrument = Hydrogen::get_instance()->getSelectedInstrumentNumber(); if (nSelectedInstrument != row) { Hydrogen::get_instance()->setSelectedInstrumentNumber( row ); } else { update( 0, 0, width(), height() ); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pPatternEditorPanel->getPianoRollEditor()->updateEditor(); } } void DrumPatternEditor::mouseReleaseEvent(QMouseEvent *ev) { UNUSED( ev ); setCursor( QCursor( Qt::ArrowCursor ) ); if (m_pPattern == NULL) { return; } if ( m_bRightBtnPressed && m_pDraggedNote ) { if ( m_pDraggedNote->get_note_off() ) return; SE_editNoteLenghtAction *action = new SE_editNoteLenghtAction( m_pDraggedNote->get_position(), m_pDraggedNote->get_position(), __row, m_pDraggedNote->get_length(),__oldLength, __selectedPatternNumber); HydrogenApp::get_instance()->m_undoStack->push( action ); } } void DrumPatternEditor::editNoteLengthAction( int nColumn, int nRealColumn, int row, int length, int selectedPatternNumber ) { Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); H2Core::Pattern *pPattern; if ( (selectedPatternNumber != -1) && ( (uint)selectedPatternNumber < pPatternList->size() ) ) { pPattern = pPatternList->get( selectedPatternNumber ); } else { pPattern = NULL; } Note *pDraggedNote; Song *pSong = pEngine->getSong(); Instrument *pSelectedInstrument = pSong->get_instrument_list()->get( row ); AudioEngine::get_instance()->lock( RIGHT_HERE ); pDraggedNote = pPattern->find_note( nColumn, nRealColumn, pSelectedInstrument, false ); pDraggedNote->set_length( length ); AudioEngine::get_instance()->unlock(); update( 0, 0, width(), height() ); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pPatternEditorPanel->getPianoRollEditor()->updateEditor(); } void DrumPatternEditor::mouseMoveEvent(QMouseEvent *ev) { if (m_pPattern == NULL) { return; } int row = MAX_INSTRUMENTS - 1 - (ev->y() / (int)m_nGridHeight); if (row >= MAX_INSTRUMENTS) { return; } if ( m_bRightBtnPressed && m_pDraggedNote ) { if ( m_pDraggedNote->get_note_off() ) return; int nTickColumn = getColumn( ev ); AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine int nLen = nTickColumn - (int)m_pDraggedNote->get_position(); if (nLen <= 0) { nLen = -1; } float fNotePitch = m_pDraggedNote->get_octave() * 12 + m_pDraggedNote->get_key(); float fStep = 0; if(nLen > -1){ fStep = pow( 1.0594630943593, ( double )fNotePitch ); }else { fStep = 1.0; } m_pDraggedNote->set_length( nLen * fStep); Hydrogen::get_instance()->getSong()->__is_modified = true; AudioEngine::get_instance()->unlock(); // unlock the audio engine //__draw_pattern(); update( 0, 0, width(), height() ); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); } } void DrumPatternEditor::keyPressEvent (QKeyEvent *ev) { ev->ignore(); } /// /// Draws a pattern /// void DrumPatternEditor::__draw_pattern(QPainter& painter) { const UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); const QColor selectedRowColor( pStyle->m_patternEditor_selectedRowColor.getRed(), pStyle->m_patternEditor_selectedRowColor.getGreen(), pStyle->m_patternEditor_selectedRowColor.getBlue() ); __create_background( painter ); if (m_pPattern == NULL) { return; } int nNotes = m_pPattern->get_length(); int nSelectedInstrument = Hydrogen::get_instance()->getSelectedInstrumentNumber(); Song *pSong = Hydrogen::get_instance()->getSong(); InstrumentList * pInstrList = pSong->get_instrument_list(); if ( m_nEditorHeight != (int)( m_nGridHeight * pInstrList->size() ) ) { // the number of instruments is changed...recreate all m_nEditorHeight = m_nGridHeight * pInstrList->size(); resize( width(), m_nEditorHeight ); } for ( uint nInstr = 0; nInstr < pInstrList->size(); ++nInstr ) { uint y = m_nGridHeight * nInstr; if ( nInstr == (uint)nSelectedInstrument ) { // selected instrument painter.fillRect( 0, y + 1, ( 20 + nNotes * m_nGridWidth ), m_nGridHeight - 1, selectedRowColor ); } } // draw the grid __draw_grid( painter ); /* BUGFIX if m_pPattern is not renewed every time we draw a note, hydrogen will crash after you save a song and create a new one. -smoors */ Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); int nSelectedPatternNumber = pEngine->getSelectedPatternNumber(); if ( (nSelectedPatternNumber != -1) && ( (uint)nSelectedPatternNumber < pPatternList->size() ) ) { m_pPattern = pPatternList->get( nSelectedPatternNumber ); } else { m_pPattern = NULL; } // ~ FIX if( m_pPattern->get_notes()->size() == 0) return; const Pattern::notes_t* notes = m_pPattern->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *note = it->second; assert( note ); __draw_note( note, painter ); } } QColor DrumPatternEditor::computeNoteColor( float velocity ){ int red; int green; int blue; /* The note gets painted black if it has the default velocity (0.8). The color changes if you alter the velocity.. */ //qDebug() << "x: " << x; //qDebug() << "x2: " << x*x; if( velocity < 0.8){ red = fabs(-( velocity - 0.8))*255; green = fabs(-( velocity - 0.8))*255; blue = green * 1.25; } else { green = blue = 0; red = (velocity-0.8)*5*255; } //qDebug() << "R " << red << "G " << green << "blue " << blue; return QColor( red, green, blue ); } /// /// Draws a note /// void DrumPatternEditor::__draw_note( Note *note, QPainter& p ) { static const UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); static const QColor noteColor( pStyle->m_patternEditor_noteColor.getRed(), pStyle->m_patternEditor_noteColor.getGreen(), pStyle->m_patternEditor_noteColor.getBlue() ); static const QColor noteoffColor( pStyle->m_patternEditor_noteoffColor.getRed(), pStyle->m_patternEditor_noteoffColor.getGreen(), pStyle->m_patternEditor_noteoffColor.getBlue() ); p.setRenderHint( QPainter::Antialiasing ); int nInstrument = -1; InstrumentList * pInstrList = Hydrogen::get_instance()->getSong()->get_instrument_list(); for ( uint nInstr = 0; nInstr < pInstrList->size(); ++nInstr ) { Instrument *pInstr = pInstrList->get( nInstr ); if ( pInstr == note->get_instrument() ) { nInstrument = nInstr; break; } } if ( nInstrument == -1 ) { ERRORLOG( "Instrument not found..skipping note" ); return; } uint pos = note->get_position(); p.setPen( noteColor ); QColor color = computeNoteColor( note->get_velocity() ); uint w = 8; uint h = m_nGridHeight / 3; if ( note->get_length() == -1 && note->get_note_off() == false ) { // trigger note uint x_pos = 20 + (pos * m_nGridWidth);// - m_nGridWidth / 2.0; uint y_pos = ( nInstrument * m_nGridHeight) + (m_nGridHeight / 2) - 3; p.setBrush( color ); p.drawEllipse( x_pos -4 , y_pos, w, h ); } else if ( note->get_length() == 1 && note->get_note_off() == true ){ p.setPen( noteoffColor ); uint x_pos = 20 + ( pos * m_nGridWidth );// - m_nGridWidth / 2.0; uint y_pos = ( nInstrument * m_nGridHeight ) + (m_nGridHeight / 2) - 3; p.setBrush(QColor( noteoffColor)); p.drawEllipse( x_pos -4 , y_pos, w, h ); } else { float fNotePitch = note->get_octave() * 12 + note->get_key(); float fStep = pow( 1.0594630943593, ( double )fNotePitch ); uint x = 20 + (pos * m_nGridWidth); int w = m_nGridWidth * note->get_length() / fStep; w = w - 1; // lascio un piccolo spazio tra una nota ed un altra int y = (int) ( ( nInstrument ) * m_nGridHeight + (m_nGridHeight / 100.0 * 30.0) ); int h = (int) (m_nGridHeight - ((m_nGridHeight / 100.0 * 30.0) * 2.0) ); p.setBrush( color ); p.fillRect( x, y + 1, w, h + 1, color ); /// \todo: definire questo colore nelle preferenze p.drawRect( x, y + 1, w, h + 1 ); } } void DrumPatternEditor::__draw_grid( QPainter& p ) { static const UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); static const QColor res_1( pStyle->m_patternEditor_line1Color.getRed(), pStyle->m_patternEditor_line1Color.getGreen(), pStyle->m_patternEditor_line1Color.getBlue() ); static const QColor res_2( pStyle->m_patternEditor_line2Color.getRed(), pStyle->m_patternEditor_line2Color.getGreen(), pStyle->m_patternEditor_line2Color.getBlue() ); static const QColor res_3( pStyle->m_patternEditor_line3Color.getRed(), pStyle->m_patternEditor_line3Color.getGreen(), pStyle->m_patternEditor_line3Color.getBlue() ); static const QColor res_4( pStyle->m_patternEditor_line4Color.getRed(), pStyle->m_patternEditor_line4Color.getGreen(), pStyle->m_patternEditor_line4Color.getBlue() ); static const QColor res_5( pStyle->m_patternEditor_line5Color.getRed(), pStyle->m_patternEditor_line5Color.getGreen(), pStyle->m_patternEditor_line5Color.getBlue() ); // vertical lines p.setPen( QPen( res_1, 0, Qt::DotLine ) ); int nBase; if (m_bUseTriplets) { nBase = 3; } else { nBase = 4; } int n4th = 4 * MAX_NOTES / (nBase * 4); int n8th = 4 * MAX_NOTES / (nBase * 8); int n16th = 4 * MAX_NOTES / (nBase * 16); int n32th = 4 * MAX_NOTES / (nBase * 32); int n64th = 4 * MAX_NOTES / (nBase * 64); int nNotes = MAX_NOTES; if ( m_pPattern ) { nNotes = m_pPattern->get_length(); } if (!m_bUseTriplets) { for ( int i = 0; i < nNotes + 1; i++ ) { uint x = 20 + i * m_nGridWidth; if ( (i % n4th) == 0 ) { if (m_nResolution >= 4) { p.setPen( QPen( res_1, 0 ) ); p.drawLine(x, 1, x, m_nEditorHeight - 1); } } else if ( (i % n8th) == 0 ) { if (m_nResolution >= 8) { p.setPen( QPen( res_2, 0 ) ); p.drawLine(x, 1, x, m_nEditorHeight - 1); } } else if ( (i % n16th) == 0 ) { if (m_nResolution >= 16) { p.setPen( QPen( res_3, 0 ) ); p.drawLine(x, 1, x, m_nEditorHeight - 1); } } else if ( (i % n32th) == 0 ) { if (m_nResolution >= 32) { p.setPen( QPen( res_4, 0 ) ); p.drawLine(x, 1, x, m_nEditorHeight - 1); } } else if ( (i % n64th) == 0 ) { if (m_nResolution >= 64) { p.setPen( QPen( res_5, 0 ) ); p.drawLine(x, 1, x, m_nEditorHeight - 1); } } } } else { // Triplets uint nCounter = 0; int nSize = 4 * MAX_NOTES / (nBase * m_nResolution); for ( int i = 0; i < nNotes + 1; i++ ) { uint x = 20 + i * m_nGridWidth; if ( (i % nSize) == 0) { if ((nCounter % 3) == 0) { p.setPen( QPen( res_1, 0 ) ); } else { p.setPen( QPen( res_3, 0 ) ); } p.drawLine(x, 1, x, m_nEditorHeight - 1); nCounter++; } } } // fill the first half of the rect with a solid color static const QColor backgroundColor( pStyle->m_patternEditor_backgroundColor.getRed(), pStyle->m_patternEditor_backgroundColor.getGreen(), pStyle->m_patternEditor_backgroundColor.getBlue() ); static const QColor selectedRowColor( pStyle->m_patternEditor_selectedRowColor.getRed(), pStyle->m_patternEditor_selectedRowColor.getGreen(), pStyle->m_patternEditor_selectedRowColor.getBlue() ); int nSelectedInstrument = Hydrogen::get_instance()->getSelectedInstrumentNumber(); Song *pSong = Hydrogen::get_instance()->getSong(); int nInstruments = pSong->get_instrument_list()->size(); for ( uint i = 0; i < (uint)nInstruments; i++ ) { uint y = m_nGridHeight * i + 1; if ( i == (uint)nSelectedInstrument ) { p.fillRect( 0, y, (20 + nNotes * m_nGridWidth), (int)( m_nGridHeight * 0.7 ), selectedRowColor ); } else { p.fillRect( 0, y, (20 + nNotes * m_nGridWidth), (int)( m_nGridHeight * 0.7 ), backgroundColor ); } } } void DrumPatternEditor::__create_background( QPainter& p) { static const UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); static const QColor backgroundColor( pStyle->m_patternEditor_backgroundColor.getRed(), pStyle->m_patternEditor_backgroundColor.getGreen(), pStyle->m_patternEditor_backgroundColor.getBlue() ); static const QColor alternateRowColor( pStyle->m_patternEditor_alternateRowColor.getRed(), pStyle->m_patternEditor_alternateRowColor.getGreen(), pStyle->m_patternEditor_alternateRowColor.getBlue() ); static const QColor lineColor( pStyle->m_patternEditor_lineColor.getRed(), pStyle->m_patternEditor_lineColor.getGreen(), pStyle->m_patternEditor_lineColor.getBlue() ); int nNotes = MAX_NOTES; if ( m_pPattern ) { nNotes = m_pPattern->get_length(); } Song *pSong = Hydrogen::get_instance()->getSong(); int nInstruments = pSong->get_instrument_list()->size(); if ( m_nEditorHeight != (int)( m_nGridHeight * nInstruments ) ) { // the number of instruments is changed...recreate all m_nEditorHeight = m_nGridHeight * nInstruments; resize( width(), m_nEditorHeight ); } p.fillRect(0, 0, 20 + nNotes * m_nGridWidth, height(), backgroundColor); for ( uint i = 0; i < (uint)nInstruments; i++ ) { uint y = m_nGridHeight * i; if ( ( i % 2) != 0) { p.fillRect( 0, y, (20 + nNotes * m_nGridWidth), m_nGridHeight, alternateRowColor ); } } // horizontal lines p.setPen( lineColor ); for ( uint i = 0; i < (uint)nInstruments; i++ ) { uint y = m_nGridHeight * i + m_nGridHeight; p.drawLine( 0, y, (20 + nNotes * m_nGridWidth), y); } p.drawLine( 0, m_nEditorHeight, (20 + nNotes * m_nGridWidth), m_nEditorHeight ); } void DrumPatternEditor::paintEvent( QPaintEvent* /*ev*/ ) { //INFOLOG( "paint" ); //QWidget::paintEvent(ev); QPainter painter( this ); __draw_pattern( painter ); } void DrumPatternEditor::showEvent ( QShowEvent *ev ) { UNUSED( ev ); updateEditor(); } void DrumPatternEditor::hideEvent ( QHideEvent *ev ) { UNUSED( ev ); } void DrumPatternEditor::setResolution(uint res, bool bUseTriplets) { this->m_nResolution = res; this->m_bUseTriplets = bUseTriplets; // redraw all update( 0, 0, width(), height() ); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); } void DrumPatternEditor::zoom_in() { if (m_nGridWidth >= 3){ m_nGridWidth *= 2; }else { m_nGridWidth *= 1.5; } updateEditor(); } void DrumPatternEditor::zoom_out() { if ( m_nGridWidth > 1.5 ) { if (m_nGridWidth > 3){ m_nGridWidth /= 2; }else { m_nGridWidth /= 1.5; } updateEditor(); } } void DrumPatternEditor::selectedInstrumentChangedEvent() { update( 0, 0, width(), height() ); } /// This method is called from another thread (audio engine) void DrumPatternEditor::patternModifiedEvent() { update( 0, 0, width(), height() ); } void DrumPatternEditor::patternChangedEvent() { updateEditor(); } void DrumPatternEditor::selectedPatternChangedEvent() { updateEditor(); } ///NotePropertiesRuler undo redo action void DrumPatternEditor::undoRedoAction( int column, QString mode, int nSelectedPatternNumber, int nSelectedInstrument, float velocity, float pan_L, float pan_R, float leadLag, int noteKeyVal, int octaveKeyVal) { Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); Pattern *pPattern; PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); if ( (nSelectedPatternNumber != -1) && ( (uint)nSelectedPatternNumber < pPatternList->size() ) ) { pPattern = pPatternList->get( nSelectedPatternNumber ); } else { pPattern = NULL; } const Pattern::notes_t* notes = pPattern->get_notes(); FOREACH_NOTE_CST_IT_BOUND(notes,it,column) { Note *pNote = it->second; assert( pNote ); assert( (int)pNote->get_position() == column ); if ( pNote->get_instrument() != pSong->get_instrument_list()->get( nSelectedInstrument ) ) { continue; } if ( mode == "VELOCITY" && !pNote->get_note_off() ) { pNote->set_velocity( velocity ); } else if ( mode == "PAN" ){ pNote->set_pan_l( pan_L ); pNote->set_pan_r( pan_R ); } else if ( mode == "LEADLAG" ){ pNote->set_lead_lag( leadLag ); } else if ( mode == "NOTEKEY" ){ pNote->set_key_octave( (Note::Key)noteKeyVal, (Note::Octave)octaveKeyVal ); } pSong->__is_modified = true; break; } updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pPatternEditorPanel->getPianoRollEditor()->updateEditor(); } ///========================================================== ///undo / redo actions from pattern editor instrument list void DrumPatternEditor::functionClearNotesRedoAction( int nSelectedInstrument, int patternNumber ) { Hydrogen * H = Hydrogen::get_instance(); PatternList *pPatternList = Hydrogen::get_instance()->getSong()->get_pattern_list(); Pattern *pPattern = pPatternList->get( patternNumber ); Instrument *pSelectedInstrument = H->getSong()->get_instrument_list()->get( nSelectedInstrument ); pPattern->purge_instrument( pSelectedInstrument ); EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); } void DrumPatternEditor::functionClearNotesUndoAction( std::list< H2Core::Note* > noteList, int nSelectedInstrument, int patternNumber ) { Hydrogen * H = Hydrogen::get_instance(); PatternList *pPatternList = Hydrogen::get_instance()->getSong()->get_pattern_list(); Pattern *pPattern = pPatternList->get( patternNumber ); std::list < H2Core::Note *>::const_iterator pos; for ( pos = noteList.begin(); pos != noteList.end(); ++pos){ Note *pNote; pNote = new Note(*pos); assert( pNote ); pPattern->insert_note( pNote ); } EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pPatternEditorPanel->getPianoRollEditor()->updateEditor(); } void DrumPatternEditor::functionFillNotesUndoAction( QStringList noteList, int nSelectedInstrument, int patternNumber ) { Hydrogen * H = Hydrogen::get_instance(); PatternList *pPatternList = Hydrogen::get_instance()->getSong()->get_pattern_list(); Pattern *pPattern = pPatternList->get( patternNumber ); Instrument *pSelectedInstrument = H->getSong()->get_instrument_list()->get( nSelectedInstrument ); AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine for (int i = 0; i < noteList.size(); i++ ) { int nColumn = noteList.value(i).toInt(); Pattern::notes_t* notes = (Pattern::notes_t*)pPattern->get_notes(); FOREACH_NOTE_IT_BOUND(notes,it,nColumn) { Note *pNote = it->second; assert( pNote ); if ( pNote->get_instrument() == pSelectedInstrument ) { // the note exists...remove it! notes->erase( it ); delete pNote; break; } } } AudioEngine::get_instance()->unlock(); // unlock the audio engine EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pPatternEditorPanel->getPianoRollEditor()->updateEditor(); } void DrumPatternEditor::functionFillNotesRedoAction( QStringList noteList, int nSelectedInstrument, int patternNumber ) { Hydrogen * H = Hydrogen::get_instance(); PatternList *pPatternList = Hydrogen::get_instance()->getSong()->get_pattern_list(); Pattern *pPattern = pPatternList->get( patternNumber ); Instrument *pSelectedInstrument = H->getSong()->get_instrument_list()->get( nSelectedInstrument ); const float velocity = 0.8f; const float pan_L = 0.5f; const float pan_R = 0.5f; const float fPitch = 0.0f; const int nLength = -1; AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine for (int i = 0; i < noteList.size(); i++ ) { // create the new note int position = noteList.value(i).toInt(); Note *pNote = new Note( pSelectedInstrument, position, velocity, pan_L, pan_R, nLength, fPitch ); pPattern->insert_note( pNote ); } AudioEngine::get_instance()->unlock(); // unlock the audio engine EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pPatternEditorPanel->getPianoRollEditor()->updateEditor(); } void DrumPatternEditor::functionRandomVelocityAction( QStringList noteVeloValue, int nSelectedInstrument, int selectedPatternNumber ) { Hydrogen * H = Hydrogen::get_instance(); PatternList *pPatternList = Hydrogen::get_instance()->getSong()->get_pattern_list(); Pattern *pPattern = pPatternList->get( selectedPatternNumber ); Instrument *pSelectedInstrument = H->getSong()->get_instrument_list()->get( nSelectedInstrument ); AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine int nBase; if ( isUsingTriplets() ) { nBase = 3; } else { nBase = 4; } int nResolution = 4 * MAX_NOTES / ( nBase * getResolution() ); int positionCount = 0; for (int i = 0; i < pPattern->get_length(); i += nResolution) { const Pattern::notes_t* notes = pPattern->get_notes(); FOREACH_NOTE_CST_IT_BOUND(notes,it,i) { Note *pNote = it->second; if ( pNote->get_instrument() == pSelectedInstrument) { float velocity = noteVeloValue.value( positionCount ).toFloat(); pNote->set_velocity(velocity); positionCount++; } } } AudioEngine::get_instance()->unlock(); // unlock the audio engine EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pPatternEditorPanel->getPianoRollEditor()->updateEditor(); } void DrumPatternEditor::functionMoveInstrumentAction( int nSourceInstrument, int nTargetInstrument ) { Hydrogen *engine = Hydrogen::get_instance(); AudioEngine::get_instance()->lock( RIGHT_HERE ); Song *pSong = engine->getSong(); InstrumentList *pInstrumentList = pSong->get_instrument_list(); if ( ( nTargetInstrument > (int)pInstrumentList->size() ) || ( nTargetInstrument < 0) ) { AudioEngine::get_instance()->unlock(); return; } pInstrumentList->move( nSourceInstrument, nTargetInstrument ); #ifdef H2CORE_HAVE_JACK engine->renameJackPorts(); #endif AudioEngine::get_instance()->unlock(); engine->setSelectedInstrumentNumber( nTargetInstrument ); pSong->__is_modified = true; } void DrumPatternEditor::functionDropInstrumentUndoAction( int nTargetInstrument ) { Hydrogen *pEngine = Hydrogen::get_instance(); pEngine->removeInstrument( nTargetInstrument, false ); AudioEngine::get_instance()->lock( RIGHT_HERE ); #ifdef H2CORE_HAVE_JACK pEngine->renameJackPorts(); #endif AudioEngine::get_instance()->unlock(); updateEditor(); } void DrumPatternEditor::functionDropInstrumentRedoAction( QString sDrumkitName, QString sInstrumentName, int nTargetInstrument ) { Instrument *pNewInstrument = Instrument::load_instrument( sDrumkitName, sInstrumentName ); if( pNewInstrument == NULL ) return; Hydrogen *pEngine = Hydrogen::get_instance(); // create a new valid ID for this instrument int nID = -1; for ( uint i = 0; i < pEngine->getSong()->get_instrument_list()->size(); ++i ) { Instrument* pInstr = pEngine->getSong()->get_instrument_list()->get( i ); if ( pInstr->get_id() > nID ) { nID = pInstr->get_id(); } } ++nID; pNewInstrument->set_id( nID ); AudioEngine::get_instance()->lock( RIGHT_HERE ); pEngine->getSong()->get_instrument_list()->add( pNewInstrument ); #ifdef H2CORE_HAVE_JACK pEngine->renameJackPorts(); #endif AudioEngine::get_instance()->unlock(); //move instrument to the position where it was dropped functionMoveInstrumentAction(pEngine->getSong()->get_instrument_list()->size() - 1 , nTargetInstrument ); // select the new instrument pEngine->setSelectedInstrumentNumber(nTargetInstrument); updateEditor(); } void DrumPatternEditor::functionDeleteInstrumentUndoAction( std::list< H2Core::Note* > noteList, int nSelectedInstrument, QString instrumentName, QString drumkitName ) { Hydrogen *pEngine = Hydrogen::get_instance(); Instrument *pNewInstrument; if( drumkitName == "" ){ pNewInstrument = new Instrument( pEngine->getSong()->get_instrument_list()->size() -1, instrumentName ); }else { pNewInstrument = Instrument::load_instrument( drumkitName, instrumentName ); } if( pNewInstrument == NULL ) return; // create a new valid ID for this instrument int nID = -1; for ( uint i = 0; i < pEngine->getSong()->get_instrument_list()->size(); ++i ) { Instrument* pInstr = pEngine->getSong()->get_instrument_list()->get( i ); if ( pInstr->get_id() > nID ) { nID = pInstr->get_id(); } } ++nID; pNewInstrument->set_id( nID ); // pNewInstrument->set_adsr( new ADSR( 0, 0, 1.0, 1000 ) ); AudioEngine::get_instance()->lock( RIGHT_HERE ); pEngine->getSong()->get_instrument_list()->add( pNewInstrument ); #ifdef H2CORE_HAVE_JACK pEngine->renameJackPorts(); #endif AudioEngine::get_instance()->unlock(); // unlock the audio engine //move instrument to the position where it was dropped functionMoveInstrumentAction(pEngine->getSong()->get_instrument_list()->size() - 1 , nSelectedInstrument ); // select the new instrument pEngine->setSelectedInstrumentNumber( nSelectedInstrument ); H2Core::Pattern *pPattern; PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); updateEditor(); EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); //restore all deleted instrument notes AudioEngine::get_instance()->lock( RIGHT_HERE ); if(noteList.size() > 0 ){ std::list < H2Core::Note *>::const_iterator pos; for ( pos = noteList.begin(); pos != noteList.end(); ++pos){ Note *pNote = new Note( *pos, pNewInstrument ); assert( pNote ); pPattern = pPatternList->get( pNote->get_pattern_idx() ); assert (pPattern); pPattern->insert_note( pNote ); //delete pNote; } } AudioEngine::get_instance()->unlock(); // unlock the audio engine } void DrumPatternEditor::functionAddEmptyInstrumentUndo() { Hydrogen *pEngine = Hydrogen::get_instance(); pEngine->removeInstrument( pEngine->getSong()->get_instrument_list()->size() -1 , false ); AudioEngine::get_instance()->lock( RIGHT_HERE ); #ifdef H2CORE_HAVE_JACK pEngine->renameJackPorts(); #endif AudioEngine::get_instance()->unlock(); updateEditor(); } void DrumPatternEditor::functionAddEmptyInstrumentRedo() { AudioEngine::get_instance()->lock( RIGHT_HERE ); InstrumentList* pList = Hydrogen::get_instance()->getSong()->get_instrument_list(); // create a new valid ID for this instrument int nID = -1; for ( uint i = 0; i < pList->size(); ++i ) { Instrument* pInstr = pList->get( i ); if ( pInstr->get_id() > nID ) { nID = pInstr->get_id(); } } ++nID; Instrument *pNewInstr = new Instrument( nID, "New instrument"); pList->add( pNewInstr ); #ifdef H2CORE_HAVE_JACK Hydrogen::get_instance()->renameJackPorts(); #endif AudioEngine::get_instance()->unlock(); Hydrogen::get_instance()->setSelectedInstrumentNumber( pList->size() - 1 ); } ///~undo / redo actions from pattern editor instrument list ///========================================================== hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/DrumPatternEditor.h000066400000000000000000000113661211146647700250740ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef DRUM_PATTERN_EDITOR_H #define DRUM_PATTERN_EDITOR_H #include "../EventListener.h" #include #include namespace H2Core { class Note; class Pattern; } class PatternEditorInstrumentList; class PatternEditorPanel; /// /// Drum pattern editor /// class DrumPatternEditor : public QWidget, public EventListener, public H2Core::Object { H2_OBJECT Q_OBJECT public: DrumPatternEditor(QWidget* parent, PatternEditorPanel *panel); ~DrumPatternEditor(); void setResolution(uint res, bool bUseTriplets); uint getResolution() { return m_nResolution; } bool isUsingTriplets() { return m_bUseTriplets; } void zoom_in(); void zoom_out(); static QColor computeNoteColor( float ); // Implements EventListener interface virtual void patternModifiedEvent(); virtual void patternChangedEvent(); virtual void selectedPatternChangedEvent(); virtual void selectedInstrumentChangedEvent(); //~ Implements EventListener interface void addOrDeleteNoteAction( int nColumn, int row, int selectedPatternNumber, int oldLength, float oldVelocity, float oldPan_L, float oldPan_R, float oldLeadLag, int oldNoteKeyVal, int oldOctaveKeyVal, bool listen, bool isMidi, bool isInstrumentMode, bool isNoteOff); void editNoteLengthAction( int nColumn, int nRealColumn, int row, int length, int selectedPatternNumber ); void undoRedoAction( int column, QString mode, int nSelectedPatternNumber, int nSelectedInstrument, float velocity, float pan_L, float pan_R, float leadLag, int noteKeyVal, int octaveKeyVal ); void functionClearNotesRedoAction( int nSelectedInstrument, int selectedPatternNumber ); void functionClearNotesUndoAction( std::list< H2Core::Note* > noteList, int nSelectedInstrument, int patternNumber ); void functionFillNotesUndoAction( QStringList noteList, int nSelectedInstrument, int patternNumber ); void functionFillNotesRedoAction( QStringList noteList, int nSelectedInstrument, int patternNumber ); void functionRandomVelocityAction( QStringList noteVeloValue, int nSelectedInstrument, int selectedPatternNumber ); void functionMoveInstrumentAction( int nSourceInstrument, int nTargetInstrument ); void functionDropInstrumentUndoAction( int nTargetInstrument ); void functionDropInstrumentRedoAction( QString sDrumkitName, QString sInstrumentName, int nTargetInstrument ); void functionDeleteInstrumentUndoAction( std::list< H2Core::Note* > noteList, int nSelectedInstrument, QString instrumentName, QString drumkitName ); void functionAddEmptyInstrumentUndo(); void functionAddEmptyInstrumentRedo(); public slots: void updateEditor(); private: float m_nGridWidth; uint m_nGridHeight; int m_nEditorHeight; uint m_nResolution; bool m_bUseTriplets; //QPixmap *m_pBackground; //QPixmap *m_pTemp; // usati per la lunghezza della nota bool m_bRightBtnPressed; H2Core::Note *m_pDraggedNote; //~ H2Core::Pattern *m_pPattern; PatternEditorPanel *m_pPatternEditorPanel; void __draw_note( H2Core::Note* note, QPainter& painter ); void __draw_pattern( QPainter& painter ); void __draw_grid( QPainter& painter ); void __create_background( QPainter& pointer ); virtual void mousePressEvent(QMouseEvent *ev); virtual void mouseReleaseEvent(QMouseEvent *ev); virtual void mouseMoveEvent(QMouseEvent *ev); virtual void keyPressEvent (QKeyEvent *ev); virtual void showEvent ( QShowEvent *ev ); virtual void hideEvent ( QHideEvent *ev ); virtual void paintEvent(QPaintEvent *ev); int getColumn(QMouseEvent *ev); int __nRealColumn; int __nColumn; int __row; int __oldLength; int __selectedPatternNumber; }; #endif hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/NotePropertiesRuler.cpp000066400000000000000000001111051211146647700257770ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include using namespace H2Core; #include #include "../HydrogenApp.h" #include "UndoActions.h" #include "NotePropertiesRuler.h" #include "PatternEditorPanel.h" #include "DrumPatternEditor.h" #include "PianoRollEditor.h" const char* NotePropertiesRuler::__class_name = "NotePropertiesRuler"; NotePropertiesRuler::NotePropertiesRuler( QWidget *parent, PatternEditorPanel *pPatternEditorPanel, NotePropertiesMode mode ) : QWidget( parent ) , Object( __class_name ) , m_mode( mode ) , m_pPatternEditorPanel( pPatternEditorPanel ) , m_pPattern( NULL ) { //infoLog("INIT"); //setAttribute(Qt::WA_NoBackground); m_nGridWidth = (Preferences::get_instance())->getPatternEditorGridWidth(); m_nEditorWidth = 20 + m_nGridWidth * ( MAX_NOTES * 4 ); if (m_mode == VELOCITY ) { m_nEditorHeight = 100; } else if ( m_mode == PAN ) { m_nEditorHeight = 100; } else if ( m_mode == LEADLAG ) { m_nEditorHeight = 100; } else if ( m_mode == NOTEKEY ) { m_nEditorHeight = 210; } resize( m_nEditorWidth, m_nEditorHeight ); setMinimumSize( m_nEditorWidth, m_nEditorHeight ); m_pBackground = new QPixmap( m_nEditorWidth, m_nEditorHeight ); //m_pBackground->load("/patternEditor/Klaviaturklein.png"); updateEditor(); show(); HydrogenApp::get_instance()->addEventListener( this ); m_bMouseIsPressed = false; } NotePropertiesRuler::~NotePropertiesRuler() { //infoLog("DESTROY"); } void NotePropertiesRuler::wheelEvent(QWheelEvent *ev ) { if (m_pPattern == NULL) return; pressAction( ev->x(), ev->y() ); //get all old values float delta; if (ev->modifiers() == Qt::ControlModifier) { delta = 0.01; // fine control } else { delta = 0.05; // course control } if ( ev->delta() < 0 ) { delta = (delta * -1.0); } DrumPatternEditor *pPatternEditor = m_pPatternEditorPanel->getDrumPatternEditor(); int nBase; if (pPatternEditor->isUsingTriplets()) { nBase = 3; } else { nBase = 4; } int width = (m_nGridWidth * 4 * MAX_NOTES) / ( nBase * pPatternEditor->getResolution()); int x_pos = ev->x(); int column; column = (x_pos - 20) + (width / 2); column = column / width; column = (column * 4 * MAX_NOTES) / ( nBase * pPatternEditor->getResolution() ); int nSelectedInstrument = Hydrogen::get_instance()->getSelectedInstrumentNumber(); Song *pSong = (Hydrogen::get_instance())->getSong(); const Pattern::notes_t* notes = m_pPattern->get_notes(); FOREACH_NOTE_CST_IT_BOUND(notes,it,column) { Note *pNote = it->second; assert( pNote ); assert( (int)pNote->get_position() == column ); if ( pNote->get_instrument() != pSong->get_instrument_list()->get( nSelectedInstrument ) ) { continue; } if ( m_mode == VELOCITY && !pNote->get_note_off() ) { float val = pNote->get_velocity() + delta; if (val > 1.0) { val = 1.0; } else if (val < 0.0) { val = 0.0; } pNote->set_velocity(val); __velocity = val; char valueChar[100]; sprintf( valueChar, "%#.2f", val); ( HydrogenApp::get_instance() )->setStatusBarMessage( QString("Set note velocity [%1]").arg( valueChar ), 2000 ); } else if ( m_mode == PAN && !pNote->get_note_off() ){ float pan_L, pan_R; float val = (pNote->get_pan_r() - pNote->get_pan_l() + 0.5) + delta; if (val > 1.0) { val = 1.0; } else if (val < 0.0) { val = 0.0; } if ( val > 0.5 ) { pan_L = 1.0 - val; pan_R = 0.5; } else { pan_L = 0.5; pan_R = val; } pNote->set_pan_l(pan_L); pNote->set_pan_r(pan_R); } else if ( m_mode == LEADLAG ){ float val = (pNote->get_lead_lag() - 1.0)/-2.0 + delta; if (val > 1.0) { val = 1.0; } else if (val < 0.0) { val = 0.0; } pNote->set_lead_lag((val * -2.0) + 1.0); char valueChar[100]; if (pNote->get_lead_lag() < 0.0) { sprintf( valueChar, "%.2f", ( pNote->get_lead_lag() * -5)); // FIXME: '5' taken from fLeadLagFactor calculation in hydrogen.cpp HydrogenApp::get_instance()->setStatusBarMessage( QString("Leading beat by: %1 ticks").arg( valueChar ), 2000 ); } else if (pNote->get_lead_lag() > 0.0) { sprintf( valueChar, "%.2f", ( pNote->get_lead_lag() * 5)); // FIXME: '5' taken from fLeadLagFactor calculation in hydrogen.cpp HydrogenApp::get_instance()->setStatusBarMessage( QString("Lagging beat by: %1 ticks").arg( valueChar ), 2000 ); } else { HydrogenApp::get_instance()->setStatusBarMessage( QString("Note on beat"), 2000 ); } } pSong->__is_modified = true; startUndoAction(); updateEditor(); break; } } void NotePropertiesRuler::mousePressEvent(QMouseEvent *ev) { m_bMouseIsPressed = true; pressAction( ev->x(), ev->y() ); mouseMoveEvent( ev ); } void NotePropertiesRuler::pressAction( int x, int y) { //create all needed old vars for undo if (m_pPattern == NULL) return; __oldVelocity = 0.8f; __oldPan_L = 0.5f; __oldPan_R = 0.5f; __oldLeadLag = 0.0f; __oldNoteKeyVal = 10; DrumPatternEditor *pPatternEditor = m_pPatternEditorPanel->getDrumPatternEditor(); int nBase; if (pPatternEditor->isUsingTriplets()) { nBase = 3; } else { nBase = 4; } int width = (m_nGridWidth * 4 * MAX_NOTES) / ( nBase * pPatternEditor->getResolution()); int x_pos = x; int column; column = (x_pos - 20) + (width / 2); column = column / width; column = (column * 4 * MAX_NOTES) / ( nBase * pPatternEditor->getResolution() ); float val = height() - y; if (val > height()) { val = height(); } else if (val < 0.0) { val = 0.0; } int keyval = val; val = val / height(); int nSelectedInstrument = Hydrogen::get_instance()->getSelectedInstrumentNumber(); Song *pSong = (Hydrogen::get_instance())->getSong(); __nSelectedInstrument = nSelectedInstrument; __undoColumn = column; const Pattern::notes_t* notes = m_pPattern->get_notes(); FOREACH_NOTE_CST_IT_BOUND(notes,it,column) { Note *pNote = it->second; assert( pNote ); assert( (int)pNote->get_position() == column ); if ( pNote->get_instrument() != pSong->get_instrument_list()->get( nSelectedInstrument ) ) { continue; } if ( m_mode == VELOCITY && !pNote->get_note_off() ) { __oldVelocity = pNote->get_velocity(); __mode = "VELOCITY"; } else if ( m_mode == PAN && !pNote->get_note_off() ){ __oldPan_L = pNote->get_pan_l(); __oldPan_R = pNote->get_pan_r(); __mode = "PAN"; } else if ( m_mode == LEADLAG ){ __oldLeadLag = pNote->get_lead_lag(); __mode = "LEADLAG"; } else if ( m_mode == NOTEKEY ){ __mode = "NOTEKEY"; __oldOctaveKeyVal = pNote->get_octave(); __oldNoteKeyVal = pNote->get_key(); } } } void NotePropertiesRuler::mouseMoveEvent( QMouseEvent *ev ) { if( m_bMouseIsPressed ){ __velocity = 0.8f; __pan_L = 0.5f; __pan_R = 0.5f; __leadLag = 0.0f ; __noteKeyVal = 10; if (m_pPattern == NULL) return; DrumPatternEditor *pPatternEditor = m_pPatternEditorPanel->getDrumPatternEditor(); int nBase; if (pPatternEditor->isUsingTriplets()) { nBase = 3; } else { nBase = 4; } int width = (m_nGridWidth * 4 * MAX_NOTES) / ( nBase * pPatternEditor->getResolution()); int x_pos = ev->x(); int column; column = (x_pos - 20) + (width / 2); column = column / width; column = (column * 4 * MAX_NOTES) / ( nBase * pPatternEditor->getResolution() ); bool columnChange = false; if( __columnCheckOnXmouseMouve != column ){ __undoColumn = column; columnChange = true; } float val = height() - ev->y(); if (val > height()) { val = height(); } else if (val < 0.0) { val = 0.0; } int keyval = val; val = val / height(); int nSelectedInstrument = Hydrogen::get_instance()->getSelectedInstrumentNumber(); Song *pSong = (Hydrogen::get_instance())->getSong(); const Pattern::notes_t* notes = m_pPattern->get_notes(); FOREACH_NOTE_CST_IT_BOUND(notes,it,column) { Note *pNote = it->second; assert( pNote ); assert( (int)pNote->get_position() == column ); if ( pNote->get_instrument() != pSong->get_instrument_list()->get( nSelectedInstrument ) ) { continue; } if ( m_mode == VELOCITY && !pNote->get_note_off() ) { if( columnChange ){ __oldVelocity = pNote->get_velocity(); } pNote->set_velocity( val ); __velocity = val; char valueChar[100]; sprintf( valueChar, "%#.2f", val); HydrogenApp::get_instance()->setStatusBarMessage( QString("Set note velocity [%1]").arg( valueChar ), 2000 ); } else if ( m_mode == PAN && !pNote->get_note_off() ){ float pan_L, pan_R; if ( (ev->button() == Qt::MidButton) || (ev->modifiers() == Qt::ControlModifier && ev->button() == Qt::LeftButton) ) { val = 0.5; } if ( val > 0.5 ) { pan_L = 1.0 - val; pan_R = 0.5; } else { pan_L = 0.5; pan_R = val; } if( columnChange ){ __oldPan_L = pNote->get_pan_l(); __oldPan_R = pNote->get_pan_r(); } pNote->set_pan_l( pan_L ); pNote->set_pan_r( pan_R ); __pan_L = pan_L; __pan_R = pan_R; } else if ( m_mode == LEADLAG ){ if ( (ev->button() == Qt::MidButton) || (ev->modifiers() == Qt::ControlModifier && ev->button() == Qt::LeftButton) ) { pNote->set_lead_lag(0.0); __leadLag = 0.0; } else { if( columnChange ){ __oldLeadLag = pNote->get_lead_lag(); } pNote->set_lead_lag((val * -2.0) + 1.0); __leadLag = (val * -2.0) + 1.0; char valueChar[100]; if (pNote->get_lead_lag() < 0.0) { sprintf( valueChar, "%.2f", ( pNote->get_lead_lag() * -5)); // FIXME: '5' taken from fLeadLagFactor calculation in hydrogen.cpp HydrogenApp::get_instance()->setStatusBarMessage( QString("Leading beat by: %1 ticks").arg( valueChar ), 2000 ); } else if (pNote->get_lead_lag() > 0.0) { sprintf( valueChar, "%.2f", ( pNote->get_lead_lag() * 5)); // FIXME: '5' taken from fLeadLagFactor calculation in hydrogen.cpp HydrogenApp::get_instance()->setStatusBarMessage( QString("Lagging beat by: %1 ticks").arg( valueChar ), 2000 ); } else { HydrogenApp::get_instance()->setStatusBarMessage( QString("Note on beat"), 2000 ); } } } else if ( m_mode == NOTEKEY ){ if ( (ev->button() == Qt::MidButton) || (ev->modifiers() == Qt::ControlModifier && ev->button() == Qt::LeftButton) ) { ; } else { //set the note hight //QMessageBox::information ( this, "Hydrogen", trUtf8( "val: %1" ).arg(keyval) ); int k = 666; int o = 666; if(keyval >=6 && keyval<=125) { k = (keyval-6)/10; } else if(keyval>=135 && keyval<=205) { o = (keyval-166)/10; if(o==-4) o=-3; // 135 } pNote->set_key_octave((Note::Key)k,(Note::Octave)o); // won't set wrong values see Note::set_key_octave __octaveKeyVal = pNote->get_octave(); __noteKeyVal = pNote->get_key(); } } if( columnChange ){ __columnCheckOnXmouseMouve = column; startUndoAction(); return; } __columnCheckOnXmouseMouve = column; pSong->__is_modified = true; updateEditor(); break; } m_pPatternEditorPanel->getPianoRollEditor()->updateEditor(); pPatternEditor->updateEditor(); } } void NotePropertiesRuler::mouseReleaseEvent(QMouseEvent *ev) { m_bMouseIsPressed = false; startUndoAction(); } void NotePropertiesRuler::startUndoAction() { SE_editNotePropertiesVolumeAction *action = new SE_editNotePropertiesVolumeAction( __undoColumn, __mode, __nSelectedPatternNumber, __nSelectedInstrument, __velocity, __oldVelocity, __pan_L, __oldPan_L, __pan_R, __oldPan_R, __leadLag, __oldLeadLag, __noteKeyVal, __oldNoteKeyVal, __octaveKeyVal, __oldOctaveKeyVal ); HydrogenApp::get_instance()->m_undoStack->push( action ); } void NotePropertiesRuler::paintEvent( QPaintEvent *ev) { QPainter painter(this); painter.drawPixmap( ev->rect(), *m_pBackground, ev->rect() ); } void NotePropertiesRuler::createVelocityBackground(QPixmap *pixmap) { if ( !isVisible() ) { return; } UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); H2RGBColor valueColor( (int)( pStyle->m_patternEditor_backgroundColor.getRed() * ( 1 - 0.3 ) ), (int)( pStyle->m_patternEditor_backgroundColor.getGreen() * ( 1 - 0.3 ) ), (int)( pStyle->m_patternEditor_backgroundColor.getBlue() * ( 1 - 0.3 ) ) ); QColor res_1( pStyle->m_patternEditor_line1Color.getRed(), pStyle->m_patternEditor_line1Color.getGreen(), pStyle->m_patternEditor_line1Color.getBlue() ); QColor res_2( pStyle->m_patternEditor_line2Color.getRed(), pStyle->m_patternEditor_line2Color.getGreen(), pStyle->m_patternEditor_line2Color.getBlue() ); QColor res_3( pStyle->m_patternEditor_line3Color.getRed(), pStyle->m_patternEditor_line3Color.getGreen(), pStyle->m_patternEditor_line3Color.getBlue() ); QColor res_4( pStyle->m_patternEditor_line4Color.getRed(), pStyle->m_patternEditor_line4Color.getGreen(), pStyle->m_patternEditor_line4Color.getBlue() ); QColor res_5( pStyle->m_patternEditor_line5Color.getRed(), pStyle->m_patternEditor_line5Color.getGreen(), pStyle->m_patternEditor_line5Color.getBlue() ); QColor backgroundColor( pStyle->m_patternEditor_backgroundColor.getRed(), pStyle->m_patternEditor_backgroundColor.getGreen(), pStyle->m_patternEditor_backgroundColor.getBlue() ); QColor horizLinesColor( pStyle->m_patternEditor_backgroundColor.getRed() - 20, pStyle->m_patternEditor_backgroundColor.getGreen() - 20, pStyle->m_patternEditor_backgroundColor.getBlue() - 20 ); unsigned nNotes = MAX_NOTES; if (m_pPattern) { nNotes = m_pPattern->get_length(); } QPainter p( pixmap ); p.fillRect( 0, 0, width(), height(), QColor(0,0,0) ); p.fillRect( 0, 0, 20 + nNotes * m_nGridWidth, height(), backgroundColor ); // vertical lines DrumPatternEditor *pPatternEditor = m_pPatternEditorPanel->getDrumPatternEditor(); int nBase; if (pPatternEditor->isUsingTriplets()) { nBase = 3; } else { nBase = 4; } int n4th = 4 * MAX_NOTES / (nBase * 4); int n8th = 4 * MAX_NOTES / (nBase * 8); int n16th = 4 * MAX_NOTES / (nBase * 16); int n32th = 4 * MAX_NOTES / (nBase * 32); int n64th = 4 * MAX_NOTES / (nBase * 64); int nResolution = pPatternEditor->getResolution(); if ( !pPatternEditor->isUsingTriplets() ) { for (uint i = 0; i < nNotes + 1; i++) { uint x = 20 + i * m_nGridWidth; if ( (i % n4th) == 0 ) { if (nResolution >= 4) { p.setPen( QPen( res_1, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n8th) == 0 ) { if (nResolution >= 8) { p.setPen( QPen( res_2, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n16th) == 0 ) { if (nResolution >= 16) { p.setPen( QPen( res_3, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n32th) == 0 ) { if (nResolution >= 32) { p.setPen( QPen( res_4, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n64th) == 0 ) { if (nResolution >= 64) { p.setPen( QPen( res_5, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } } } else { // Triplets uint nCounter = 0; int nSize = 4 * MAX_NOTES / (nBase * nResolution); for (uint i = 0; i < nNotes + 1; i++) { uint x = 20 + i * m_nGridWidth; if ( (i % nSize) == 0) { if ((nCounter % 3) == 0) { p.setPen( QPen( res_1, 0, Qt::DotLine ) ); } else { p.setPen( QPen( res_3, 0, Qt::DotLine ) ); } p.drawLine(x, 0, x, m_nEditorHeight); nCounter++; } } } p.setPen( horizLinesColor ); for (unsigned y = 0; y < m_nEditorHeight; y = y + (m_nEditorHeight / 10)) { p.drawLine(20, y, 20 + nNotes * m_nGridWidth, y); } // draw velocity lines if (m_pPattern != NULL) { int nSelectedInstrument = Hydrogen::get_instance()->getSelectedInstrumentNumber(); Song *pSong = Hydrogen::get_instance()->getSong(); const Pattern::notes_t* notes = m_pPattern->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pposNote = it->second; assert( pposNote ); uint pos = pposNote->get_position(); int xoffset = 0; FOREACH_NOTE_CST_IT_BOUND(notes,coit,pos) { Note *pNote = coit->second; assert( pNote ); if ( pNote->get_instrument() != pSong->get_instrument_list()->get( nSelectedInstrument ) ) { continue; } uint x_pos = 20 + pos * m_nGridWidth; uint line_end = height(); uint velocity = (uint)(pNote->get_velocity() * height()); uint line_start = line_end - velocity; QColor centerColor = DrumPatternEditor::computeNoteColor( pNote->get_velocity() ); int nLineWidth = 3; p.fillRect( x_pos - 1 + xoffset, line_start, nLineWidth, line_end - line_start , centerColor ); xoffset++; } } } p.setPen(res_1); p.drawLine(0, 0, m_nEditorWidth, 0); p.drawLine(0, m_nEditorHeight - 1, m_nEditorWidth, m_nEditorHeight - 1); } void NotePropertiesRuler::createPanBackground(QPixmap *pixmap) { if ( !isVisible() ) { return; } UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); QColor backgroundColor( pStyle->m_patternEditor_backgroundColor.getRed(), pStyle->m_patternEditor_backgroundColor.getGreen(), pStyle->m_patternEditor_backgroundColor.getBlue() ); //QColor backgroundColor( 255, 255, 255 ); QColor blackKeysColor( 240, 240, 240 ); QColor horizLinesColor( pStyle->m_patternEditor_backgroundColor.getRed() - 20, pStyle->m_patternEditor_backgroundColor.getGreen() - 20, pStyle->m_patternEditor_backgroundColor.getBlue() - 20 ); H2RGBColor valueColor( (int)( pStyle->m_patternEditor_backgroundColor.getRed() * ( 1 - 0.3 ) ), (int)( pStyle->m_patternEditor_backgroundColor.getGreen() * ( 1 - 0.3 ) ), (int)( pStyle->m_patternEditor_backgroundColor.getBlue() * ( 1 - 0.3 ) ) ); QColor res_1( pStyle->m_patternEditor_line1Color.getRed(), pStyle->m_patternEditor_line1Color.getGreen(), pStyle->m_patternEditor_line1Color.getBlue() ); QColor res_2( pStyle->m_patternEditor_line2Color.getRed(), pStyle->m_patternEditor_line2Color.getGreen(), pStyle->m_patternEditor_line2Color.getBlue() ); QColor res_3( pStyle->m_patternEditor_line3Color.getRed(), pStyle->m_patternEditor_line3Color.getGreen(), pStyle->m_patternEditor_line3Color.getBlue() ); QColor res_4( pStyle->m_patternEditor_line4Color.getRed(), pStyle->m_patternEditor_line4Color.getGreen(), pStyle->m_patternEditor_line4Color.getBlue() ); QColor res_5( pStyle->m_patternEditor_line5Color.getRed(), pStyle->m_patternEditor_line5Color.getGreen(), pStyle->m_patternEditor_line5Color.getBlue() ); QPainter p( pixmap ); p.fillRect( 0, 0, width(), height(), QColor(0, 0, 0) ); unsigned nNotes = MAX_NOTES; if (m_pPattern) { nNotes = m_pPattern->get_length(); } p.fillRect( 0, 0, 20 + nNotes * m_nGridWidth, height(), backgroundColor ); // central line p.setPen( horizLinesColor ); p.drawLine(0, height() / 2.0, m_nEditorWidth, height() / 2.0); // vertical lines DrumPatternEditor *pPatternEditor = m_pPatternEditorPanel->getDrumPatternEditor(); int nBase; if (pPatternEditor->isUsingTriplets()) { nBase = 3; } else { nBase = 4; } int n4th = 4 * MAX_NOTES / (nBase * 4); int n8th = 4 * MAX_NOTES / (nBase * 8); int n16th = 4 * MAX_NOTES / (nBase * 16); int n32th = 4 * MAX_NOTES / (nBase * 32); int n64th = 4 * MAX_NOTES / (nBase * 64); int nResolution = pPatternEditor->getResolution(); if ( !pPatternEditor->isUsingTriplets() ) { for (uint i = 0; i < nNotes +1 ; i++) { uint x = 20 + i * m_nGridWidth; if ( (i % n4th) == 0 ) { if (nResolution >= 4) { p.setPen( QPen( res_1, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n8th) == 0 ) { if (nResolution >= 8) { p.setPen( QPen( res_2, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n16th) == 0 ) { if (nResolution >= 16) { p.setPen( QPen( res_3, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n32th) == 0 ) { if (nResolution >= 32) { p.setPen( QPen( res_4, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n64th) == 0 ) { if (nResolution >= 64) { p.setPen( QPen( res_5, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } } } else { // Triplets uint nCounter = 0; int nSize = 4 * MAX_NOTES / (nBase * nResolution); for (uint i = 0; i < nNotes +1; i++) { uint x = 20 + i * m_nGridWidth; if ( (i % nSize) == 0) { if ((nCounter % 3) == 0) { p.setPen( QPen( res_1, 0, Qt::DotLine ) ); } else { p.setPen( QPen( res_3, 0, Qt::DotLine ) ); } p.drawLine(x, 0, x, m_nEditorHeight); nCounter++; } } } if ( m_pPattern ) { int nSelectedInstrument = Hydrogen::get_instance()->getSelectedInstrumentNumber(); Song *pSong = Hydrogen::get_instance()->getSong(); const Pattern::notes_t* notes = m_pPattern->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pposNote = it->second; assert( pposNote ); uint pos = pposNote->get_position(); int xoffset = 0; FOREACH_NOTE_CST_IT_BOUND(notes,coit,pos) { Note *pNote = coit->second; assert( pNote ); if ( pNote->get_note_off() || pNote->get_instrument() != pSong->get_instrument_list()->get( nSelectedInstrument ) ) { continue; } uint x_pos = 20 + pNote->get_position() * m_nGridWidth; QColor centerColor = DrumPatternEditor::computeNoteColor( pNote->get_velocity() ); if (pNote->get_pan_r() == pNote->get_pan_l()) { // pan value is centered - draw circle int y_pos = (int)( height() * 0.5 ); p.setBrush(QColor( centerColor )); p.drawEllipse( x_pos-4 + xoffset, y_pos-4, 8, 8); } else { int y_start = (int)( pNote->get_pan_l() * height() ); int y_end = (int)( height() - pNote->get_pan_r() * height() ); int nLineWidth = 3; p.fillRect( x_pos - 1 + xoffset, y_start, nLineWidth, y_end - y_start, QColor( centerColor) ); p.fillRect( x_pos - 1 + xoffset, ( height() / 2.0 ) - 2 , nLineWidth, 5, QColor( centerColor ) ); } xoffset++; } } } p.setPen(res_1); p.drawLine(0, 0, m_nEditorWidth, 0); p.drawLine(0, m_nEditorHeight - 1, m_nEditorWidth, m_nEditorHeight - 1); } void NotePropertiesRuler::createLeadLagBackground(QPixmap *pixmap) { if ( !isVisible() ) { return; } UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); QColor backgroundColor( pStyle->m_patternEditor_backgroundColor.getRed(), pStyle->m_patternEditor_backgroundColor.getGreen(), pStyle->m_patternEditor_backgroundColor.getBlue() ); QColor blackKeysColor( 240, 240, 240 ); QColor horizLinesColor( pStyle->m_patternEditor_backgroundColor.getRed() - 20, pStyle->m_patternEditor_backgroundColor.getGreen() - 20, pStyle->m_patternEditor_backgroundColor.getBlue() - 20 ); H2RGBColor valueColor( (int)( pStyle->m_patternEditor_backgroundColor.getRed() * ( 1 - 0.3 ) ), (int)( pStyle->m_patternEditor_backgroundColor.getGreen() * ( 1 - 0.3 ) ), (int)( pStyle->m_patternEditor_backgroundColor.getBlue() * ( 1 - 0.3 ) ) ); QColor res_1( pStyle->m_patternEditor_line1Color.getRed(), pStyle->m_patternEditor_line1Color.getGreen(), pStyle->m_patternEditor_line1Color.getBlue() ); QColor res_2( pStyle->m_patternEditor_line2Color.getRed(), pStyle->m_patternEditor_line2Color.getGreen(), pStyle->m_patternEditor_line2Color.getBlue() ); QColor res_3( pStyle->m_patternEditor_line3Color.getRed(), pStyle->m_patternEditor_line3Color.getGreen(), pStyle->m_patternEditor_line3Color.getBlue() ); QColor res_4( pStyle->m_patternEditor_line4Color.getRed(), pStyle->m_patternEditor_line4Color.getGreen(), pStyle->m_patternEditor_line4Color.getBlue() ); QColor res_5( pStyle->m_patternEditor_line5Color.getRed(), pStyle->m_patternEditor_line5Color.getGreen(), pStyle->m_patternEditor_line5Color.getBlue() ); QPainter p( pixmap ); p.fillRect( 0, 0, width(), height(), QColor(0, 0, 0) ); unsigned nNotes = MAX_NOTES; if (m_pPattern) { nNotes = m_pPattern->get_length(); } p.fillRect( 0, 0, 20 + nNotes * m_nGridWidth, height(), backgroundColor ); // central line p.setPen( horizLinesColor ); p.drawLine(0, height() / 2.0, m_nEditorWidth, height() / 2.0); // vertical lines DrumPatternEditor *pPatternEditor = m_pPatternEditorPanel->getDrumPatternEditor(); int nBase; if (pPatternEditor->isUsingTriplets()) { nBase = 3; } else { nBase = 4; } int n4th = 4 * MAX_NOTES / (nBase * 4); int n8th = 4 * MAX_NOTES / (nBase * 8); int n16th = 4 * MAX_NOTES / (nBase * 16); int n32th = 4 * MAX_NOTES / (nBase * 32); int n64th = 4 * MAX_NOTES / (nBase * 64); int nResolution = pPatternEditor->getResolution(); if ( !pPatternEditor->isUsingTriplets() ) { for (uint i = 0; i < nNotes + 1; i++) { uint x = 20 + i * m_nGridWidth; if ( (i % n4th) == 0 ) { if (nResolution >= 4) { p.setPen( QPen( res_1, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n8th) == 0 ) { if (nResolution >= 8) { p.setPen( QPen( res_2, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n16th) == 0 ) { if (nResolution >= 16) { p.setPen( QPen( res_3, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n32th) == 0 ) { if (nResolution >= 32) { p.setPen( QPen( res_4, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n64th) == 0 ) { if (nResolution >= 64) { p.setPen( QPen( res_5, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } } } else { // Triplets uint nCounter = 0; int nSize = 4 * MAX_NOTES / (nBase * nResolution); for (uint i = 0; i < nNotes + 1; i++) { uint x = 20 + i * m_nGridWidth; if ( (i % nSize) == 0) { if ((nCounter % 3) == 0) { p.setPen( QPen( res_1, 0, Qt::DotLine ) ); } else { p.setPen( QPen( res_3, 0, Qt::DotLine ) ); } p.drawLine(x, 0, x, m_nEditorHeight); nCounter++; } } } if ( m_pPattern ) { int nSelectedInstrument = Hydrogen::get_instance()->getSelectedInstrumentNumber(); Song *pSong = Hydrogen::get_instance()->getSong(); const Pattern::notes_t* notes = m_pPattern->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pposNote = it->second; assert( pposNote ); uint pos = pposNote->get_position(); int xoffset = 0; FOREACH_NOTE_CST_IT_BOUND(notes,coit,pos) { Note *pNote = coit->second; assert( pNote ); if ( pNote->get_instrument() != pSong->get_instrument_list()->get( nSelectedInstrument ) ) { continue; } uint x_pos = 20 + pNote->get_position() * m_nGridWidth; int red1 = (int) (pNote->get_velocity() * 255); int green1; int blue1; blue1 = ( 255 - (int) red1 )* .33; green1 = ( 255 - (int) red1 ); if (pNote->get_lead_lag() == 0) { // leadlag value is centered - draw circle int y_pos = (int)( height() * 0.5 ); p.setBrush(QColor( 0 , 0 , 0 )); p.drawEllipse( x_pos-4 + xoffset, y_pos-4, 8, 8); } else { int y_start = (int)( height() * 0.5 ); int y_end = y_start + ((pNote->get_lead_lag()/2) * height()); int nLineWidth = 3; int red; int green; int blue = (int) (pNote->get_lead_lag() * 255); if (blue < 0) { red = blue *-1; blue = (int) red * .33; green = (int) red * .33; } else { red = (int) blue * .33; green = (int) blue * .33; } p.fillRect( x_pos - 1 + xoffset, y_start, nLineWidth, y_end - y_start, QColor( red, green ,blue ) ); p.fillRect( x_pos - 1 + xoffset, ( height() / 2.0 ) - 2 , nLineWidth, 5, QColor( red1, green1 ,blue1 ) ); } xoffset++; } } } p.setPen(res_1); p.drawLine(0, 0, m_nEditorWidth, 0); p.drawLine(0, m_nEditorHeight - 1, m_nEditorWidth, m_nEditorHeight - 1); } void NotePropertiesRuler::createNoteKeyBackground(QPixmap *pixmap) { if ( !isVisible() ) { return; } UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); H2RGBColor valueColor( (int)( pStyle->m_patternEditor_backgroundColor.getRed() * ( 1 - 0.3 ) ), (int)( pStyle->m_patternEditor_backgroundColor.getGreen() * ( 1 - 0.3 ) ), (int)( pStyle->m_patternEditor_backgroundColor.getBlue() * ( 1 - 0.3 ) ) ); QColor res_1( pStyle->m_patternEditor_line1Color.getRed(), pStyle->m_patternEditor_line1Color.getGreen(), pStyle->m_patternEditor_line1Color.getBlue() ); QColor res_2( pStyle->m_patternEditor_line2Color.getRed(), pStyle->m_patternEditor_line2Color.getGreen(), pStyle->m_patternEditor_line2Color.getBlue() ); QColor res_3( pStyle->m_patternEditor_line3Color.getRed(), pStyle->m_patternEditor_line3Color.getGreen(), pStyle->m_patternEditor_line3Color.getBlue() ); QColor res_4( pStyle->m_patternEditor_line4Color.getRed(), pStyle->m_patternEditor_line4Color.getGreen(), pStyle->m_patternEditor_line4Color.getBlue() ); QColor res_5( pStyle->m_patternEditor_line5Color.getRed(), pStyle->m_patternEditor_line5Color.getGreen(), pStyle->m_patternEditor_line5Color.getBlue() ); QColor backgroundColor( pStyle->m_patternEditor_backgroundColor.getRed(), pStyle->m_patternEditor_backgroundColor.getGreen(), pStyle->m_patternEditor_backgroundColor.getBlue() ); QColor horizLinesColor( pStyle->m_patternEditor_backgroundColor.getRed() - 100, pStyle->m_patternEditor_backgroundColor.getGreen() - 100, pStyle->m_patternEditor_backgroundColor.getBlue() - 100 ); unsigned nNotes = MAX_NOTES; if (m_pPattern) { nNotes = m_pPattern->get_length(); } QPainter p( pixmap ); p.fillRect( 0, 0, width(), height(), QColor(0,0,0) ); p.fillRect( 0, 0, 20 + nNotes * m_nGridWidth, height(), backgroundColor ); p.setPen( horizLinesColor ); for (unsigned y = 10; y < 80; y = y + 10 ) { p.setPen( QPen( res_1, 1, Qt::DashLine ) ); if (y == 40) p.setPen( QPen( QColor(0,0,0), 1, Qt::SolidLine ) ); p.drawLine(20, y, 20 + nNotes * m_nGridWidth, y); } for (unsigned y = 90; y < 210; y = y + 10 ) { p.setPen( QPen( QColor( 255, 255, 255 ), 9, Qt::SolidLine, Qt::FlatCap) ); if ( y == 100 ||y == 120 ||y == 140 ||y == 170 ||y == 190) p.setPen( QPen( QColor( 0, 0, 0 ), 7, Qt::SolidLine, Qt::FlatCap ) ); p.drawLine(20, y, 20 + nNotes * m_nGridWidth, y); } // vertical lines DrumPatternEditor *pPatternEditor = m_pPatternEditorPanel->getDrumPatternEditor(); int nBase; if (pPatternEditor->isUsingTriplets()) { nBase = 3; } else { nBase = 4; } int n4th = 4 * MAX_NOTES / (nBase * 4); int n8th = 4 * MAX_NOTES / (nBase * 8); int n16th = 4 * MAX_NOTES / (nBase * 16); int n32th = 4 * MAX_NOTES / (nBase * 32); int n64th = 4 * MAX_NOTES / (nBase * 64); int nResolution = pPatternEditor->getResolution(); if ( !pPatternEditor->isUsingTriplets() ) { for (uint i = 0; i < nNotes + 1; i++) { uint x = 20 + i * m_nGridWidth; if ( (i % n4th) == 0 ) { if (nResolution >= 4) { p.setPen( QPen( res_1, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n8th) == 0 ) { if (nResolution >= 8) { p.setPen( QPen( res_2, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n16th) == 0 ) { if (nResolution >= 16) { p.setPen( QPen( res_3, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n32th) == 0 ) { if (nResolution >= 32) { p.setPen( QPen( res_4, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } else if ( (i % n64th) == 0 ) { if (nResolution >= 64) { p.setPen( QPen( res_5, 0, Qt::DotLine ) ); p.drawLine(x, 0, x, m_nEditorHeight); } } } } else { // Triplets uint nCounter = 0; int nSize = 4 * MAX_NOTES / (nBase * nResolution); for (uint i = 0; i < nNotes + 1; i++) { uint x = 20 + i * m_nGridWidth; if ( (i % nSize) == 0) { if ((nCounter % 3) == 0) { p.setPen( QPen( res_1, 0, Qt::DotLine ) ); } else { p.setPen( QPen( res_3, 0, Qt::DotLine ) ); } p.drawLine(x, 0, x, m_nEditorHeight); nCounter++; } } } p.setPen(res_1); p.drawLine(0, 0, m_nEditorWidth, 0); p.drawLine(0, m_nEditorHeight - 1, m_nEditorWidth, m_nEditorHeight - 1); //paint the oktave if ( m_pPattern ) { int nSelectedInstrument = Hydrogen::get_instance()->getSelectedInstrumentNumber(); Song *pSong = Hydrogen::get_instance()->getSong(); const Pattern::notes_t* notes = m_pPattern->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pNote = it->second; assert( pNote ); if ( pNote->get_instrument() != pSong->get_instrument_list()->get( nSelectedInstrument ) ) { continue; } if ( !pNote->get_note_off() ) { uint x_pos = 17 + pNote->get_position() * m_nGridWidth; uint y_pos = (4-pNote->get_octave())*10-3; p.setBrush(QColor( 99, 160, 233 )); p.drawEllipse( x_pos, y_pos, 6, 6); } } } //paint the note if ( m_pPattern ) { int nSelectedInstrument = Hydrogen::get_instance()->getSelectedInstrumentNumber(); Song *pSong = Hydrogen::get_instance()->getSong(); const Pattern::notes_t* notes = m_pPattern->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pNote = it->second; assert( pNote ); if ( pNote->get_instrument() != pSong->get_instrument_list()->get( nSelectedInstrument ) ) { continue; } if ( !pNote->get_note_off() ) { int d = 6; int k = pNote->get_key(); uint x_pos = 17 + pNote->get_position() * m_nGridWidth; uint y_pos = 200-(k*10)-3; if(k<5) { if(!(k&0x01)) { x_pos-=1; y_pos-=1; d+=2; } } else { if(k&0x01) { x_pos-=1; y_pos-=1; d+=2; } } p.setBrush(QColor( 0, 0, 0)); p.drawEllipse( x_pos, y_pos, d, d); } } } } void NotePropertiesRuler::updateEditor() { Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); int nSelectedPatternNumber = pEngine->getSelectedPatternNumber(); if ( (nSelectedPatternNumber != -1) && ( (uint)nSelectedPatternNumber < pPatternList->size() ) ) { m_pPattern = pPatternList->get( nSelectedPatternNumber ); } else { m_pPattern = NULL; } __nSelectedPatternNumber = nSelectedPatternNumber; // update editor width int editorWidth; if ( m_pPattern ) { editorWidth = 20 + m_pPattern->get_length() * m_nGridWidth; } else { editorWidth = 20 + MAX_NOTES * m_nGridWidth; } resize( editorWidth, height() ); delete m_pBackground; m_pBackground = new QPixmap( editorWidth, m_nEditorHeight ); if ( m_mode == VELOCITY ) { createVelocityBackground( m_pBackground ); } else if ( m_mode == PAN ) { createPanBackground( m_pBackground ); } else if ( m_mode == LEADLAG ) { createLeadLagBackground( m_pBackground ); } else if ( m_mode == NOTEKEY ) { createNoteKeyBackground( m_pBackground ); } // redraw all update(); } void NotePropertiesRuler::zoomIn() { if (m_nGridWidth >= 3){ m_nGridWidth *= 2; }else { m_nGridWidth *= 1.5; } updateEditor(); } void NotePropertiesRuler::zoomOut() { if ( m_nGridWidth > 1.5 ) { if (m_nGridWidth > 3){ m_nGridWidth /= 2; }else { m_nGridWidth /= 1.5; } updateEditor(); } } void NotePropertiesRuler::selectedPatternChangedEvent() { updateEditor(); } void NotePropertiesRuler::selectedInstrumentChangedEvent() { updateEditor(); } hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/NotePropertiesRuler.h000066400000000000000000000054421211146647700254520ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef NOTE_PROPERTIES_RULER_H #define NOTE_PROPERTIES_RULER_H #include "../EventListener.h" #include #include namespace H2Core { class Pattern; class NoteKey; } class PatternEditorPanel; class NotePropertiesRuler : public QWidget, public H2Core::Object, public EventListener { H2_OBJECT Q_OBJECT public: enum NotePropertiesMode { VELOCITY, PAN, LEADLAG, NOTEKEY }; NotePropertiesRuler( QWidget *parent, PatternEditorPanel *pPatternEditorPanel, NotePropertiesMode mode ); ~NotePropertiesRuler(); void zoomIn(); void zoomOut(); //public slots: void updateEditor(); private: static const int m_nKeys = 24; static const int m_nBasePitch = 12; NotePropertiesMode m_mode; PatternEditorPanel *m_pPatternEditorPanel; H2Core::Pattern *m_pPattern; float m_nGridWidth; uint m_nEditorWidth; uint m_nEditorHeight; QPixmap *m_pBackground; void createVelocityBackground(QPixmap *pixmap); void createPanBackground(QPixmap *pixmap); void createLeadLagBackground(QPixmap *pixmap); void createNoteKeyBackground(QPixmap *pixmap); void paintEvent(QPaintEvent *ev); void mousePressEvent(QMouseEvent *ev); void mouseMoveEvent(QMouseEvent *ev); void wheelEvent(QWheelEvent *ev); void mouseReleaseEvent(QMouseEvent *ev); void startUndoAction(); void pressAction( int x, int y); // Implements EventListener interface virtual void selectedPatternChangedEvent(); virtual void selectedInstrumentChangedEvent(); //~ Implements EventListener interface int __nSelectedPatternNumber; int __nSelectedInstrument; bool m_bMouseIsPressed; float __velocity; float __oldVelocity; float __pan_L; float __pan_R; float __oldPan_L; float __oldPan_R; float __leadLag; float __oldLeadLag; int __noteKeyVal; int __oldNoteKeyVal; int __octaveKeyVal; int __oldOctaveKeyVal; int __checkXPosition; int __columnCheckOnXmouseMouve; int __undoColumn; QString __mode; }; #endif hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/PatternEditorInstrumentList.cpp000066400000000000000000000423231211146647700275210ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "PatternEditorInstrumentList.h" #include #include #include #include #include #include #include #include #include #include using namespace H2Core; #include "UndoActions.h" #include "PatternEditorPanel.h" #include "DrumPatternEditor.h" #include "../HydrogenApp.h" #include "../Mixer/Mixer.h" #include "../widgets/Button.h" #include #include using namespace std; const char* InstrumentLine::__class_name = "InstrumentLine"; InstrumentLine::InstrumentLine(QWidget* pParent) : PixmapWidget(pParent, __class_name) , m_bIsSelected(false) { int h = Preferences::get_instance()->getPatternEditorGridHeight(); setFixedSize(181, h); m_pNameLbl = new QLabel(this); m_pNameLbl->resize( 145, h ); m_pNameLbl->move( 10, 1 ); QFont nameFont; nameFont.setPointSize( 10 ); nameFont.setBold( true ); m_pNameLbl->setFont(nameFont); m_pMuteBtn = new ToggleButton( this, "/mixerPanel/btn_mute_on.png", "/mixerPanel/btn_mute_off.png", "/mixerPanel/btn_mute_off.png", QSize( 18, 13 ) ); m_pMuteBtn->move( 145, 5 ); m_pMuteBtn->setPressed(false); m_pMuteBtn->setToolTip( trUtf8("Mute instrument") ); connect(m_pMuteBtn, SIGNAL(clicked(Button*)), this, SLOT(muteClicked())); m_pSoloBtn = new ToggleButton( this, "/mixerPanel/btn_solo_on.png", "/mixerPanel/btn_solo_off.png", "/mixerPanel/btn_solo_off.png", QSize( 18, 13 ) ); m_pSoloBtn->move( 163, 5 ); m_pSoloBtn->setPressed(false); m_pSoloBtn->setToolTip( trUtf8("Solo") ); connect(m_pSoloBtn, SIGNAL(clicked(Button*)), this, SLOT(soloClicked())); // Popup menu m_pFunctionPopup = new QMenu( this ); m_pFunctionPopup->addAction( trUtf8( "Clear notes" ), this, SLOT( functionClearNotes() ) ); m_pFunctionPopupSub = new QMenu( trUtf8( "Fill notes ..." ), m_pFunctionPopup ); m_pFunctionPopupSub->addAction( trUtf8( "Fill all notes" ), this, SLOT( functionFillAllNotes() ) ); m_pFunctionPopupSub->addAction( trUtf8( "Fill 1/2 notes" ), this, SLOT( functionFillEveryTwoNotes() ) ); m_pFunctionPopupSub->addAction( trUtf8( "Fill 1/3 notes" ), this, SLOT( functionFillEveryThreeNotes() ) ); m_pFunctionPopupSub->addAction( trUtf8( "Fill 1/4 notes" ), this, SLOT( functionFillEveryFourNotes() ) ); m_pFunctionPopupSub->addAction( trUtf8( "Fill 1/6 notes" ), this, SLOT( functionFillEverySixNotes() ) ); m_pFunctionPopupSub->addAction( trUtf8( "Fill 1/8 notes" ), this, SLOT( functionFillEveryEightNotes() ) ); m_pFunctionPopup->addMenu( m_pFunctionPopupSub ); m_pFunctionPopup->addAction( trUtf8( "Randomize velocity" ), this, SLOT( functionRandomizeVelocity() ) ); m_pFunctionPopup->addSeparator(); m_pFunctionPopup->addAction( trUtf8( "Delete instrument" ), this, SLOT( functionDeleteInstrument() ) ); m_bIsSelected = true; setSelected(false); } void InstrumentLine::setName(const QString& sName) { m_pNameLbl->setText(sName); } void InstrumentLine::setSelected(bool bSelected) { if (bSelected == m_bIsSelected) { return; } m_bIsSelected = bSelected; if (m_bIsSelected) { setPixmap( "/patternEditor/instrument_line_selected.png"); } else { setPixmap( "/patternEditor/instrument_line.png"); } } void InstrumentLine::setNumber(int nIndex) { m_nInstrumentNumber = nIndex; } void InstrumentLine::setMuted(bool isMuted) { m_pMuteBtn->setPressed(isMuted); } void InstrumentLine::setSoloed( bool soloed ) { m_pSoloBtn->setPressed( soloed ); } void InstrumentLine::muteClicked() { Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); Instrument *pInstr = instrList->get(m_nInstrumentNumber); pInstr->set_muted( !pInstr->is_muted()); } void InstrumentLine::soloClicked() { HydrogenApp::get_instance()->getMixer()->soloClicked( m_nInstrumentNumber ); } void InstrumentLine::mousePressEvent(QMouseEvent *ev) { Hydrogen::get_instance()->setSelectedInstrumentNumber( m_nInstrumentNumber ); HydrogenApp::get_instance()->getPatternEditorPanel()->updatePianorollEditor(); if ( ev->button() == Qt::LeftButton ) { const float velocity = 0.8f; const float pan_L = 0.5f; const float pan_R = 0.5f; const int nLength = -1; const float fPitch = 0.0f; Song *pSong = Hydrogen::get_instance()->getSong(); Instrument *pInstr = pSong->get_instrument_list()->get( m_nInstrumentNumber ); Note *pNote = new Note( pInstr, 0, velocity, pan_L, pan_R, nLength, fPitch); AudioEngine::get_instance()->get_sampler()->note_on(pNote); } else if (ev->button() == Qt::RightButton ) { m_pFunctionPopup->popup( QPoint( ev->globalX(), ev->globalY() ) ); } // propago l'evento al parent: serve per il drag&drop PixmapWidget::mousePressEvent(ev); } H2Core::Pattern* InstrumentLine::getCurrentPattern() { Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); assert( pPatternList != NULL ); int nSelectedPatternNumber = pEngine->getSelectedPatternNumber(); if ( nSelectedPatternNumber != -1 ) { Pattern* pCurrentPattern = pPatternList->get( nSelectedPatternNumber ); return pCurrentPattern; } return NULL; } void InstrumentLine::functionClearNotes() { Hydrogen * pEngine = Hydrogen::get_instance(); int selectedPatternNr = pEngine->getSelectedPatternNumber(); Pattern *pPattern = getCurrentPattern(); Instrument *pSelectedInstrument = pEngine->getSong()->get_instrument_list()->get( m_nInstrumentNumber ); std::list< Note* > noteList; const Pattern::notes_t* notes = pPattern->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pNote = it->second; assert( pNote ); if ( pNote->get_instrument() == pSelectedInstrument ) { noteList.push_back( pNote ); } } if( noteList.size() > 0 ){ SE_clearNotesPatternEditorAction *action = new SE_clearNotesPatternEditorAction( noteList, m_nInstrumentNumber,selectedPatternNr); HydrogenApp::get_instance()->m_undoStack->push( action ); } } void InstrumentLine::functionFillAllNotes(){ functionFillNotes(1); } void InstrumentLine::functionFillEveryTwoNotes(){ functionFillNotes(2); } void InstrumentLine::functionFillEveryThreeNotes(){ functionFillNotes(3); } void InstrumentLine::functionFillEveryFourNotes(){ functionFillNotes(4); } void InstrumentLine::functionFillEverySixNotes(){ functionFillNotes(6); } void InstrumentLine::functionFillEveryEightNotes(){ functionFillNotes(8); } void InstrumentLine::functionFillNotes( int every ) { Hydrogen *pEngine = Hydrogen::get_instance(); PatternEditorPanel *pPatternEditorPanel = HydrogenApp::get_instance()->getPatternEditorPanel(); DrumPatternEditor *pPatternEditor = pPatternEditorPanel->getDrumPatternEditor(); int nBase; if ( pPatternEditor->isUsingTriplets() ) { nBase = 3; } else { nBase = 4; } int nResolution = 4 * MAX_NOTES * every / ( nBase * pPatternEditor->getResolution() ); Song *pSong = pEngine->getSong(); QStringList notePositions; Pattern* pCurrentPattern = getCurrentPattern(); if (pCurrentPattern != NULL) { int nPatternSize = pCurrentPattern->get_length(); int nSelectedInstrument = pEngine->getSelectedInstrumentNumber(); if (nSelectedInstrument != -1) { Instrument *instrRef = (pSong->get_instrument_list())->get( nSelectedInstrument ); for (int i = 0; i < nPatternSize; i += nResolution) { bool noteAlreadyPresent = false; const Pattern::notes_t* notes = pCurrentPattern->get_notes(); FOREACH_NOTE_CST_IT_BOUND(notes,it,i) { Note *pNote = it->second; if ( pNote->get_instrument() == instrRef ) { // note already exists noteAlreadyPresent = true; break; } } if ( noteAlreadyPresent == false ) { notePositions << QString("%1").arg(i); } } SE_fillNotesRightClickAction *action = new SE_fillNotesRightClickAction( notePositions, nSelectedInstrument, pEngine->getSelectedPatternNumber() ); HydrogenApp::get_instance()->m_undoStack->push( action ); } } } void InstrumentLine::functionRandomizeVelocity() { Hydrogen *pEngine = Hydrogen::get_instance(); PatternEditorPanel *pPatternEditorPanel = HydrogenApp::get_instance()->getPatternEditorPanel(); DrumPatternEditor *pPatternEditor = pPatternEditorPanel->getDrumPatternEditor(); int nBase; if ( pPatternEditor->isUsingTriplets() ) { nBase = 3; } else { nBase = 4; } int nResolution = 4 * MAX_NOTES / ( nBase * pPatternEditor->getResolution() ); Song *pSong = pEngine->getSong(); QStringList noteVeloValue; QStringList oldNoteVeloValue; Pattern* pCurrentPattern = getCurrentPattern(); if (pCurrentPattern != NULL) { int nPatternSize = pCurrentPattern->get_length(); int nSelectedInstrument = pEngine->getSelectedInstrumentNumber(); if (nSelectedInstrument != -1) { Instrument *instrRef = (pSong->get_instrument_list())->get( nSelectedInstrument ); for (int i = 0; i < nPatternSize; i += nResolution) { const Pattern::notes_t* notes = pCurrentPattern->get_notes(); FOREACH_NOTE_CST_IT_BOUND(notes,it,i) { Note *pNote = it->second; if ( pNote->get_instrument() == instrRef ) { float fVal = ( rand() % 100 ) / 100.0; oldNoteVeloValue << QString("%1").arg( pNote->get_velocity() ); fVal = pNote->get_velocity() + ( ( fVal - 0.50 ) / 2 ); if ( fVal < 0 ) { fVal = 0; } if ( fVal > 1 ) { fVal = 1; } noteVeloValue << QString("%1").arg(fVal); } } } SE_randomVelocityRightClickAction *action = new SE_randomVelocityRightClickAction( noteVeloValue, oldNoteVeloValue, nSelectedInstrument, pEngine->getSelectedPatternNumber() ); HydrogenApp::get_instance()->m_undoStack->push( action ); } } } void InstrumentLine::functionDeleteInstrument() { Hydrogen * pEngine = Hydrogen::get_instance(); Instrument *pSelectedInstrument = pEngine->getSong()->get_instrument_list()->get( m_nInstrumentNumber ); std::list< Note* > noteList; Song* song = pEngine->getSong(); PatternList *patList = song->get_pattern_list(); QString instrumentName = pSelectedInstrument->get_name(); QString drumkitName = pEngine->getCurrentDrumkitname(); for ( int i = 0; i < patList->size(); i++ ) { H2Core::Pattern *pPattern = song->get_pattern_list()->get(i); const Pattern::notes_t* notes = pPattern->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pNote = it->second; assert( pNote ); if ( pNote->get_instrument() == pSelectedInstrument ) { pNote->set_pattern_idx( i ); noteList.push_back( pNote ); } } } SE_deleteInstrumentAction *action = new SE_deleteInstrumentAction( noteList, drumkitName, instrumentName, m_nInstrumentNumber ); HydrogenApp::get_instance()->m_undoStack->push( action ); } ////// const char* PatternEditorInstrumentList::__class_name = "PatternEditorInstrumentList"; PatternEditorInstrumentList::PatternEditorInstrumentList( QWidget *parent, PatternEditorPanel *pPatternEditorPanel ) : QWidget( parent ) , Object( __class_name ) { //INFOLOG("INIT"); m_pPattern = NULL; m_pPatternEditorPanel = pPatternEditorPanel; m_nGridHeight = Preferences::get_instance()->getPatternEditorGridHeight(); m_nEditorWidth = 181; m_nEditorHeight = m_nGridHeight * MAX_INSTRUMENTS; resize( m_nEditorWidth, m_nEditorHeight ); setAcceptDrops(true); for ( int i = 0; i < MAX_INSTRUMENTS; ++i) { m_pInstrumentLine[i] = NULL; } updateInstrumentLines(); m_pUpdateTimer = new QTimer( this ); connect( m_pUpdateTimer, SIGNAL( timeout() ), this, SLOT( updateInstrumentLines() ) ); m_pUpdateTimer->start(50); } PatternEditorInstrumentList::~PatternEditorInstrumentList() { //INFOLOG( "DESTROY" ); m_pUpdateTimer->stop(); } /// /// Create a new InstrumentLine /// InstrumentLine* PatternEditorInstrumentList::createInstrumentLine() { InstrumentLine *pLine = new InstrumentLine(this); return pLine; } /// /// Update every InstrumentLine, create or destroy lines if necessary. /// void PatternEditorInstrumentList::updateInstrumentLines() { //INFOLOG( "Update lines" ); Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); InstrumentList *pInstrList = pSong->get_instrument_list(); Mixer * mixer = HydrogenApp::get_instance()->getMixer(); unsigned nSelectedInstr = pEngine->getSelectedInstrumentNumber(); unsigned nInstruments = pInstrList->size(); for ( unsigned nInstr = 0; nInstr < MAX_INSTRUMENTS; ++nInstr ) { if ( nInstr >= nInstruments ) { // unused instrument! let's hide and destroy the mixerline! if ( m_pInstrumentLine[ nInstr ] ) { delete m_pInstrumentLine[ nInstr ]; m_pInstrumentLine[ nInstr ] = NULL; int newHeight = m_nGridHeight * nInstruments; resize( width(), newHeight ); } continue; } else { if ( m_pInstrumentLine[ nInstr ] == NULL ) { // the instrument line doesn't exists..I'll create a new one! m_pInstrumentLine[ nInstr ] = createInstrumentLine(); m_pInstrumentLine[nInstr]->move( 0, m_nGridHeight * nInstr ); m_pInstrumentLine[nInstr]->show(); int newHeight = m_nGridHeight * nInstruments; resize( width(), newHeight ); } InstrumentLine *pLine = m_pInstrumentLine[ nInstr ]; Instrument* pInstr = pInstrList->get(nInstr); assert(pInstr); pLine->setNumber(nInstr); pLine->setName( pInstr->get_name() ); pLine->setSelected( nInstr == nSelectedInstr ); pLine->setMuted( pInstr->is_muted() ); if ( mixer ) { pLine->setSoloed( mixer->isSoloClicked( nInstr ) ); } } } } void PatternEditorInstrumentList::dragEnterEvent(QDragEnterEvent *event) { INFOLOG( "[dragEnterEvent]" ); if ( event->mimeData()->hasFormat("text/plain") ) { Song *song = (Hydrogen::get_instance())->getSong(); int nInstruments = song->get_instrument_list()->size(); if ( nInstruments < MAX_INSTRUMENTS ) { event->acceptProposedAction(); } } } void PatternEditorInstrumentList::dropEvent(QDropEvent *event) { //WARNINGLOG("Drop!"); QString sText = event->mimeData()->text(); if(sText.startsWith("Songs:") || sText.startsWith("Patterns:") || sText.startsWith("move pattern:") || sText.startsWith("drag pattern:")) return; if (sText.startsWith("move instrument:")) { Hydrogen *engine = Hydrogen::get_instance(); int nSourceInstrument = engine->getSelectedInstrumentNumber(); int nTargetInstrument = event->pos().y() / m_nGridHeight; if ( nSourceInstrument == nTargetInstrument ) { event->acceptProposedAction(); return; } SE_moveInstrumentAction *action = new SE_moveInstrumentAction( nSourceInstrument, nTargetInstrument ); HydrogenApp::get_instance()->m_undoStack->push( action ); event->acceptProposedAction(); } if( sText.startsWith("importInstrument:") ) { //an instrument was dragged from the soundlibrary browser to the patterneditor sText = sText.remove(0,QString("importInstrument:").length()); QStringList tokens = sText.split( "::" ); QString sDrumkitName = tokens.at( 0 ); QString sInstrumentName = tokens.at( 1 ); int nTargetInstrument = event->pos().y() / m_nGridHeight; /* "X > 181": border between the instrument names on the left and the grid Because the right part of the grid starts above the name column, we have to subtract the difference */ if ( event->pos().x() > 181 ) nTargetInstrument = ( event->pos().y() - 90 ) / m_nGridHeight ; SE_dragInstrumentAction *action = new SE_dragInstrumentAction( sDrumkitName, sInstrumentName, nTargetInstrument ); HydrogenApp::get_instance()->m_undoStack->push( action ); event->acceptProposedAction(); } } void PatternEditorInstrumentList::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { __drag_start_position = event->pos(); } } void PatternEditorInstrumentList::mouseMoveEvent(QMouseEvent *event) { if (!(event->buttons() & Qt::LeftButton)) { return; } if ( abs(event->pos().y() - __drag_start_position.y()) < (int)m_nGridHeight) { return; } Hydrogen *pEngine = Hydrogen::get_instance(); int nSelectedInstr = pEngine->getSelectedInstrumentNumber(); Instrument *pInstr = pEngine->getSong()->get_instrument_list()->get(nSelectedInstr); QString sText = QString("move instrument:%1").arg( pInstr->get_name() ); QDrag *pDrag = new QDrag(this); QMimeData *pMimeData = new QMimeData; pMimeData->setText( sText ); pDrag->setMimeData( pMimeData); pDrag->start( Qt::CopyAction | Qt::MoveAction ); // propago l'evento QWidget::mouseMoveEvent(event); } hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/PatternEditorInstrumentList.h000066400000000000000000000056471211146647700271760ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PATTERN_EDITOR_INSTRUMENT_LIST_H #define PATTERN_EDITOR_INSTRUMENT_LIST_H #include #include #include #include "../widgets/PixmapWidget.h" namespace H2Core { class Pattern; } class PatternEditorPanel; class ToggleButton; class InstrumentLine : public PixmapWidget { H2_OBJECT Q_OBJECT public: InstrumentLine(QWidget* pParent); void setName(const QString& sName); void setSelected(bool isSelected); void setNumber(int nIndex); void setMuted(bool isMuted); void setSoloed( bool soloed ); private slots: void functionClearNotes(); void functionFillAllNotes(); void functionFillEveryTwoNotes(); void functionFillEveryThreeNotes(); void functionFillEveryFourNotes(); void functionFillEverySixNotes(); void functionFillEveryEightNotes(); void functionFillNotes( int every ); void functionRandomizeVelocity(); void functionDeleteInstrument(); void muteClicked(); void soloClicked(); private: QMenu *m_pFunctionPopup; QMenu *m_pFunctionPopupSub; QLabel *m_pNameLbl; bool m_bIsSelected; int m_nInstrumentNumber; ///< The related instrument number ToggleButton *m_pMuteBtn; ToggleButton *m_pSoloBtn; virtual void mousePressEvent(QMouseEvent *ev); H2Core::Pattern* getCurrentPattern(); }; class PatternEditorInstrumentList : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: PatternEditorInstrumentList( QWidget *parent, PatternEditorPanel *pPatternEditorPanel ); ~PatternEditorInstrumentList(); virtual void mousePressEvent(QMouseEvent *event); virtual void mouseMoveEvent(QMouseEvent *event); virtual void dragEnterEvent(QDragEnterEvent *event); virtual void dropEvent(QDropEvent *event); public slots: void updateInstrumentLines(); protected: PatternEditorPanel *m_pPatternEditorPanel; H2Core::Pattern *m_pPattern; uint m_nGridHeight; uint m_nEditorWidth; uint m_nEditorHeight; InstrumentLine* m_pInstrumentLine[MAX_INSTRUMENTS]; QTimer *m_pUpdateTimer; QPoint __drag_start_position; InstrumentLine* createInstrumentLine(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/PatternEditorPanel.cpp000066400000000000000000000732331211146647700255600ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include using namespace H2Core; #include "HydrogenApp.h" #include "PatternEditorPanel.h" #include "PatternEditorInstrumentList.h" #include "PatternEditorRuler.h" #include "NotePropertiesRuler.h" #include "DrumPatternEditor.h" #include "PianoRollEditor.h" #include "../MainForm.h" #include "../widgets/Button.h" #include "../widgets/Fader.h" #include "../widgets/PixmapWidget.h" #include "../widgets/LCDCombo.h" #include "../Skin.h" #include "../SongEditor/SongEditorPanel.h" #include void PatternEditorPanel::updateSLnameLabel( ) { QFont font; font.setBold( true ); pSLlabel->setFont( font ); pSLlabel->setText( Hydrogen::get_instance()->m_currentDrumkit ); } const char* PatternEditorPanel::__class_name = "PatternEditorPanel"; PatternEditorPanel::PatternEditorPanel( QWidget *pParent ) : QWidget( pParent ) , Object( __class_name ) , m_pPattern( NULL ) , m_bEnablePatternResize( true ) { setAcceptDrops(true); Preferences *pPref = Preferences::get_instance(); // Editor TOP PixmapWidget *editor_top = new PixmapWidget(0); editor_top->setPixmap("/patternEditor/editor_top.png", true); editor_top->setFixedHeight(24); PixmapWidget *editor_top_2 = new PixmapWidget(0); editor_top_2->setPixmap("/patternEditor/editor_top.png", true); editor_top_2->setFixedHeight(24); QHBoxLayout *editor_top_hbox = new QHBoxLayout(editor_top); editor_top_hbox->setSpacing(0); editor_top_hbox->setMargin(0); editor_top_hbox->setAlignment(Qt::AlignLeft); QHBoxLayout *editor_top_hbox_2 = new QHBoxLayout(editor_top_2); editor_top_hbox_2->setSpacing(0); editor_top_hbox_2->setMargin(0); editor_top_hbox_2->setAlignment(Qt::AlignLeft); //soundlibrary name pSLlabel = new QLabel( NULL ); pSLlabel->setText( Hydrogen::get_instance()->m_currentDrumkit ); pSLlabel->setFixedSize( 170, 20 ); pSLlabel->move( 10, 3 ); pSLlabel->setToolTip( trUtf8("Loaded Soundlibrary") ); editor_top_hbox->addWidget( pSLlabel ); //wolke some background images back_size_res PixmapWidget *pSizeResol = new PixmapWidget( NULL ); pSizeResol->setFixedSize( 200, 20 ); pSizeResol->setPixmap( "/patternEditor/background_res-new.png" ); pSizeResol->move( 0, 3 ); editor_top_hbox_2->addWidget( pSizeResol ); // PATTERN size __pattern_size_combo = new LCDCombo(pSizeResol, 4); __pattern_size_combo->move( 34, 2 ); __pattern_size_combo->setToolTip( trUtf8("Select pattern size") ); for ( int i = 1; i <= 32; i++) { __pattern_size_combo->addItem( QString( "%1" ).arg( i ) ); } __pattern_size_combo->update(); connect(__pattern_size_combo, SIGNAL( valueChanged( QString ) ), this, SLOT( patternSizeChanged(QString) ) ); // GRID resolution __resolution_combo = new LCDCombo( pSizeResol , 7); __resolution_combo->setToolTip(trUtf8("Select grid resolution")); __resolution_combo->addItem( "4" ); __resolution_combo->addItem( "8" ); __resolution_combo->addItem( "16" ); __resolution_combo->addItem( "32" ); __resolution_combo->addItem( "64" ); __resolution_combo->addSeparator(); __resolution_combo->addItem( "4T" ); __resolution_combo->addItem( "8T" ); __resolution_combo->addItem( "16T" ); __resolution_combo->addItem( "32T" ); __resolution_combo->addSeparator(); __resolution_combo->addItem( "off" ); __resolution_combo->update(); __resolution_combo->move( 121, 2 ); connect(__resolution_combo, SIGNAL(valueChanged(QString)), this, SLOT(gridResolutionChanged(QString))); PixmapWidget *pRec = new PixmapWidget( NULL ); pRec->setFixedSize( 158, 20 ); pRec->setPixmap( "/patternEditor/background_rec-new.png" ); pRec->move( 0, 3 ); editor_top_hbox_2->addWidget( pRec ); // Hear notes btn ToggleButton *hearNotesBtn = new ToggleButton( pRec, "/patternEditor/btn_hear_on.png", "/patternEditor/btn_hear_off.png", "/patternEditor/btn_hear_off.png", QSize(15, 13) ); hearNotesBtn->move( 34, 3 ); hearNotesBtn->setToolTip( trUtf8( "Hear new notes" ) ); connect( hearNotesBtn, SIGNAL(clicked(Button*)), this, SLOT( hearNotesBtnClick(Button*))); hearNotesBtn->setPressed( pPref->getHearNewNotes() ); // quantize ToggleButton* quantizeEventsBtn = new ToggleButton( pRec, "/patternEditor/btn_quant_on.png", "/patternEditor/btn_quant_off.png", "/patternEditor/btn_quant_off.png", QSize(15, 13) ); quantizeEventsBtn->move( 90, 3 ); quantizeEventsBtn->setPressed( pPref->getQuantizeEvents()); quantizeEventsBtn->setToolTip( trUtf8( "Quantize keyboard/midi events to grid" ) ); connect( quantizeEventsBtn, SIGNAL(clicked(Button*)), this, SLOT( quantizeEventsBtnClick(Button*))); // Editor mode __show_drum_btn = new ToggleButton( pRec, "/patternEditor/btn_drum_piano_on.png", "/patternEditor/btn_drum_piano_off.png", "/patternEditor/btn_drum_piano_off.png", QSize(17, 13) ); __show_drum_btn->move( 137, 3 ); __show_drum_btn->setPressed( false ); __show_drum_btn->setToolTip( trUtf8( "Show piano roll editor" ) ); connect(__show_drum_btn, SIGNAL(clicked(Button*)), this, SLOT( showDrumEditorBtnClick(Button*))); __recpredelete = new QComboBox( NULL ); __recpredelete->setFixedSize( 130, 20 ); __recpredelete->move( 2, 1 ); __recpredelete->addItem ( QString( "On play" )); __recpredelete->addItem ( QString( "On rec: once fp" )); __recpredelete->addItem ( QString( "On rec: 1/1 fp" )); __recpredelete->addItem ( QString( "On rec: 1/2 fp" )); __recpredelete->addItem ( QString( "On rec: 1/4 fp" )); __recpredelete->addItem ( QString( "On rec: 1/8 fp" )); __recpredelete->addItem ( QString( "On rec: 1/16 fp" )); __recpredelete->addItem ( QString( "On rec: 1/32 fp" )); __recpredelete->addItem ( QString( "On rec: 1/64 fp" )); __recpredelete->addItem ( QString( "On rec: 1/64" )); __recpredelete->addItem ( QString( "On rec: 1/32" )); __recpredelete->addItem ( QString( "On rec: 1/16" )); __recpredelete->addItem ( QString( "On rec: 1/8" )); __recpredelete->addItem ( QString( "On rec: 1/4" )); __recpredelete->addItem ( QString( "On rec: 1/2" )); __recpredelete->addItem ( QString( "On rec: 1/1" )); __recpredelete->addItem ( QString( "On rec: once" )); __recpredelete->update(); __recpredelete->setToolTip( trUtf8( "destructive mode pre delete settings" ) ); editor_top_hbox_2->addWidget( __recpredelete ); connect( __recpredelete, SIGNAL( currentIndexChanged( int ) ), this, SLOT( recPreDeleteSelect( int) ) ); __recpostdelete = new QComboBox( NULL ); __recpostdelete->setFixedSize( 60, 20 ); __recpostdelete->move( 2, 1 ); __recpostdelete->addItem ( QString( "off" )); __recpostdelete->addItem ( QString( "1/64" )); __recpostdelete->addItem ( QString( "1/32" )); __recpostdelete->addItem ( QString( "1/16" )); __recpostdelete->addItem ( QString( "1/8" )); __recpostdelete->addItem ( QString( "1/4" )); __recpostdelete->addItem ( QString( "1/2" )); __recpostdelete->addItem ( QString( "1/1" )); __recpostdelete->update(); __recpostdelete->setToolTip( trUtf8( "destructive mode post delete settings" ) ); editor_top_hbox_2->addWidget( __recpostdelete ); connect( __recpostdelete, SIGNAL( currentIndexChanged( int ) ), this, SLOT( recPostDeleteSelect( int) ) ); // zoom-in btn Button *zoom_in_btn = new Button( NULL, "/songEditor/btn_new_on.png", "/songEditor/btn_new_off.png", "/songEditor/btn_new_over.png", QSize(19, 13) ); zoom_in_btn->setToolTip( trUtf8( "Zoom in" ) ); connect(zoom_in_btn, SIGNAL(clicked(Button*)), this, SLOT( zoomInBtnClicked(Button*) ) ); // zoom-out btn Button *zoom_out_btn = new Button( NULL, "/songEditor/btn_minus_on.png", "/songEditor/btn_minus_off.png", "/songEditor/btn_minus_over.png", QSize(19, 13) ); zoom_out_btn->setToolTip( trUtf8( "Zoom out" ) ); connect( zoom_out_btn, SIGNAL(clicked(Button*)), this, SLOT( zoomOutBtnClicked(Button*) ) ); // End Editor TOP // RULER____________________________________ // Ruler ScrollView m_pRulerScrollView = new QScrollArea( NULL ); m_pRulerScrollView->setFrameShape( QFrame::NoFrame ); m_pRulerScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pRulerScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pRulerScrollView->setFixedHeight( 25 ); // Ruler m_pPatternEditorRuler = new PatternEditorRuler( m_pRulerScrollView->viewport() ); m_pRulerScrollView->setWidget( m_pPatternEditorRuler ); //~ RULER // EDITOR _____________________________________ // Editor scrollview m_pEditorScrollView = new QScrollArea( NULL ); m_pEditorScrollView->setFrameShape( QFrame::NoFrame ); m_pEditorScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pEditorScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); // Editor m_pDrumPatternEditor = new DrumPatternEditor( m_pEditorScrollView->viewport(), this ); m_pEditorScrollView->setWidget( m_pDrumPatternEditor ); connect( m_pEditorScrollView->verticalScrollBar(), SIGNAL( valueChanged(int) ), this, SLOT( on_patternEditorScroll(int) ) ); //PianoRollEditor m_pPianoRollScrollView = new QScrollArea( NULL ); m_pPianoRollScrollView->setFrameShape( QFrame::NoFrame ); m_pPianoRollScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded ); m_pPianoRollScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pPianoRollEditor = new PianoRollEditor( m_pPianoRollScrollView->viewport(), this ); m_pPianoRollScrollView->setWidget( m_pPianoRollEditor ); m_pPianoRollScrollView->hide(); //~ EDITOR // INSTRUMENT LIST // Instrument list scrollview m_pInstrListScrollView = new QScrollArea( NULL ); m_pInstrListScrollView->setFrameShape( QFrame::NoFrame ); m_pInstrListScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pInstrListScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); // Instrument list m_pInstrumentList = new PatternEditorInstrumentList( m_pInstrListScrollView->viewport(), this ); m_pInstrListScrollView->setWidget( m_pInstrumentList ); m_pInstrListScrollView->setFixedWidth( m_pInstrumentList->width() ); connect( m_pInstrListScrollView->verticalScrollBar(), SIGNAL( valueChanged(int) ), this, SLOT( on_patternEditorScroll(int) ) ); //~ INSTRUMENT LIST // NOTE_VELOCITY EDITOR m_pNoteVelocityScrollView = new QScrollArea( NULL ); m_pNoteVelocityScrollView->setFrameShape( QFrame::NoFrame ); m_pNoteVelocityScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteVelocityScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteVelocityEditor = new NotePropertiesRuler( m_pNoteVelocityScrollView->viewport(), this, NotePropertiesRuler::VELOCITY ); m_pNoteVelocityScrollView->setWidget( m_pNoteVelocityEditor ); m_pNoteVelocityScrollView->setFixedHeight( 100 ); //~ NOTE_VELOCITY EDITOR // NOTE_PAN EDITOR m_pNotePanScrollView = new QScrollArea( NULL ); m_pNotePanScrollView->setFrameShape( QFrame::NoFrame ); m_pNotePanScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNotePanScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNotePanEditor = new NotePropertiesRuler( m_pNotePanScrollView->viewport(), this, NotePropertiesRuler::PAN ); m_pNotePanScrollView->setWidget( m_pNotePanEditor ); m_pNotePanScrollView->setFixedHeight( 100 ); //~ NOTE_PAN EDITOR // NOTE_LEADLAG EDITOR m_pNoteLeadLagScrollView = new QScrollArea( NULL ); m_pNoteLeadLagScrollView->setFrameShape( QFrame::NoFrame ); m_pNoteLeadLagScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteLeadLagScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteLeadLagEditor = new NotePropertiesRuler( m_pNoteLeadLagScrollView->viewport(), this, NotePropertiesRuler::LEADLAG ); m_pNoteLeadLagScrollView->setWidget( m_pNoteLeadLagEditor ); m_pNoteLeadLagScrollView->setFixedHeight( 100 ); //~ NOTE_LEADLAG EDITOR // NOTE_NOTEKEY EDITOR m_pNoteNoteKeyScrollView = new QScrollArea( NULL ); m_pNoteNoteKeyScrollView->setFrameShape( QFrame::NoFrame ); m_pNoteNoteKeyScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteNoteKeyScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteNoteKeyEditor = new NotePropertiesRuler( m_pNoteNoteKeyScrollView->viewport(), this, NotePropertiesRuler::NOTEKEY ); m_pNoteNoteKeyScrollView->setWidget( m_pNoteNoteKeyEditor ); m_pNoteNoteKeyScrollView->setFixedHeight( 210 ); //~ NOTE_NOTEKEY EDITOR // external horizontal scrollbar m_pPatternEditorHScrollBar = new QScrollBar( Qt::Horizontal , NULL ); connect( m_pPatternEditorHScrollBar, SIGNAL(valueChanged(int)), this, SLOT( syncToExternalHorizontalScrollbar(int) ) ); // external vertical scrollbar m_pPatternEditorVScrollBar = new QScrollBar( Qt::Vertical, NULL ); connect( m_pPatternEditorVScrollBar, SIGNAL(valueChanged(int)), this, SLOT( syncToExternalHorizontalScrollbar(int) ) ); QHBoxLayout *pPatternEditorHScrollBarLayout = new QHBoxLayout(); pPatternEditorHScrollBarLayout->setSpacing( 0 ); pPatternEditorHScrollBarLayout->setMargin( 0 ); pPatternEditorHScrollBarLayout->addWidget( m_pPatternEditorHScrollBar ); pPatternEditorHScrollBarLayout->addWidget( zoom_in_btn ); pPatternEditorHScrollBarLayout->addWidget( zoom_out_btn ); QWidget *pPatternEditorHScrollBarContainer = new QWidget(); pPatternEditorHScrollBarContainer->setLayout( pPatternEditorHScrollBarLayout ); QPalette label_palette; label_palette.setColor( QPalette::Foreground, QColor( 230, 230, 230 ) ); QFont boldFont; boldFont.setBold( true ); m_pPatternNameLbl = new QLabel( NULL ); m_pPatternNameLbl->setFont( boldFont ); m_pPatternNameLbl->setText( "pattern name label" ); m_pPatternNameLbl->setPalette(label_palette); // NOTE_PROPERTIES BUTTONS PixmapWidget *pPropertiesPanel = new PixmapWidget( NULL ); pPropertiesPanel->setColor( QColor( 58, 62, 72 ) ); pPropertiesPanel->setFixedSize( 181, 100 ); QVBoxLayout *pPropertiesVBox = new QVBoxLayout( pPropertiesPanel ); pPropertiesVBox->setSpacing( 0 ); pPropertiesVBox->setMargin( 0 ); __pPropertiesCombo = new LCDCombo( NULL, 20); __pPropertiesCombo->setToolTip(trUtf8("Select note properties")); __pPropertiesCombo->addItem( trUtf8("Velocity") ); __pPropertiesCombo->addItem( trUtf8("Pan") ); __pPropertiesCombo->addItem( trUtf8("Lead and Lag") ); __pPropertiesCombo->addItem( trUtf8("NoteKey") ); __pPropertiesCombo->update(); connect( __pPropertiesCombo, SIGNAL(valueChanged(QString)), this, SLOT(propertiesComboChanged(QString))); pPropertiesVBox->addWidget( __pPropertiesCombo ); //~ NOTE_PROPERTIES BUTTONS // LAYOUT QWidget *pMainPanel = new QWidget(); QGridLayout *pGrid = new QGridLayout(); pGrid->setSpacing( 0 ); pGrid->setMargin( 0 ); pGrid->addWidget( editor_top, 0, 0); pGrid->addWidget( editor_top_2, 0, 1, 1, 3); pGrid->addWidget( m_pPatternNameLbl, 1, 0 ); pGrid->addWidget( m_pRulerScrollView, 1, 1 ); pGrid->addWidget( m_pInstrListScrollView, 2, 0 ); pGrid->addWidget( m_pEditorScrollView, 2, 1 ); pGrid->addWidget( m_pPianoRollScrollView, 2, 1 ); pGrid->addWidget( m_pPatternEditorVScrollBar, 2, 2 ); pGrid->addWidget( pPatternEditorHScrollBarContainer, 10, 1 ); pGrid->addWidget( m_pNoteVelocityScrollView, 4, 1 ); pGrid->addWidget( m_pNotePanScrollView, 4, 1 ); pGrid->addWidget( m_pNoteLeadLagScrollView, 4, 1 ); pGrid->addWidget( m_pNoteNoteKeyScrollView, 4, 1 ); pGrid->addWidget( pPropertiesPanel, 4, 0 ); pGrid->setRowStretch( 2, 100 ); pMainPanel->setLayout( pGrid ); // restore grid resolution int nIndex; if ( pPref->isPatternEditorUsingTriplets() == false ) { switch ( pPref->getPatternEditorGridResolution() ) { case 4: __resolution_combo->set_text( "4" ); nIndex = 0; break; case 8: __resolution_combo->set_text( "8" ); nIndex = 1; break; case 16: __resolution_combo->set_text( "16" ); nIndex = 2; break; case 32: __resolution_combo->set_text( "32" ); nIndex = 3; break; case 64: __resolution_combo->set_text( "64" ); nIndex = 4; break; default: ERRORLOG( QString("Wrong grid resolution: %1").arg( pPref->getPatternEditorGridResolution() ) ); __resolution_combo->set_text( "4" ); nIndex = 0; } } else { switch ( pPref->getPatternEditorGridResolution() ) { case 8: __resolution_combo->set_text( "4T" ); nIndex = 5; break; case 16: __resolution_combo->set_text( "8T" ); nIndex = 6; break; case 32: __resolution_combo->set_text( "16T" ); nIndex = 7; break; case 64: __resolution_combo->set_text( "32T" ); nIndex = 8; break; default: ERRORLOG( QString("Wrong grid resolution: %1").arg( pPref->getPatternEditorGridResolution() ) ); __resolution_combo->set_text( "4T" ); nIndex = 5; } } gridResolutionChanged(__resolution_combo->getText()); //set pre delete __recpredelete->setCurrentIndex(pPref->m_nRecPreDelete); __recpostdelete->setCurrentIndex(pPref->m_nRecPostDelete); displayorHidePrePostCB(); // LAYOUT QVBoxLayout *pVBox = new QVBoxLayout(); pVBox->setSpacing( 0 ); pVBox->setMargin( 0 ); this->setLayout( pVBox ); pVBox->addWidget( pMainPanel ); HydrogenApp::get_instance()->addEventListener( this ); selectedPatternChangedEvent(); // force an update __pPropertiesCombo->set_text( trUtf8("Velocity")); } PatternEditorPanel::~PatternEditorPanel() { } void PatternEditorPanel::syncToExternalHorizontalScrollbar(int) { //INFOLOG( "[syncToExternalHorizontalScrollbar]" ); // drum Editor m_pEditorScrollView->horizontalScrollBar()->setValue( m_pPatternEditorHScrollBar->value() ); m_pEditorScrollView->verticalScrollBar()->setValue( m_pPatternEditorVScrollBar->value() ); // piano roll Editor m_pPianoRollScrollView->horizontalScrollBar()->setValue( m_pPatternEditorHScrollBar->value() ); // m_pPianoRollScrollView->verticalScrollBar()->setValue( m_pPatternEditorVScrollBar->value() ); // Ruler m_pRulerScrollView->horizontalScrollBar()->setValue( m_pPatternEditorHScrollBar->value() ); // Instrument list m_pInstrListScrollView->verticalScrollBar()->setValue( m_pPatternEditorVScrollBar->value() ); // Velocity ruler m_pNoteVelocityScrollView->horizontalScrollBar()->setValue( m_pPatternEditorHScrollBar->value() ); // pan ruler m_pNotePanScrollView->horizontalScrollBar()->setValue( m_pPatternEditorHScrollBar->value() ); // leadlag ruler m_pNoteLeadLagScrollView->horizontalScrollBar()->setValue( m_pPatternEditorHScrollBar->value() ); // notekey ruler m_pNoteNoteKeyScrollView->horizontalScrollBar()->setValue( m_pPatternEditorHScrollBar->value() ); } void PatternEditorPanel::on_patternEditorScroll(int nValue) { //INFOLOG( "[on_patternEditorScroll] " + QString::number(nValue) ); m_pPatternEditorVScrollBar->setValue( nValue ); resizeEvent(NULL); } void PatternEditorPanel::gridResolutionChanged( QString str ) { int nResolution; bool bUseTriplets = false; if ( str.contains( "off" ) ) { nResolution=MAX_NOTES; } else if ( str.contains( "T" ) ) { bUseTriplets = true; QString temp = str; temp.chop( 1 ); nResolution = temp.toInt() * 2; } else { nResolution = str.toInt(); } //INFOLOG( to_string( nResolution ) ); m_pDrumPatternEditor->setResolution( nResolution, bUseTriplets ); m_pPianoRollEditor->setResolution( nResolution, bUseTriplets ); Preferences::get_instance()->setPatternEditorGridResolution( nResolution ); Preferences::get_instance()->setPatternEditorUsingTriplets( bUseTriplets ); } void PatternEditorPanel::selectedPatternChangedEvent() { PatternList *pPatternList = Hydrogen::get_instance()->getSong()->get_pattern_list(); int nSelectedPatternNumber = Hydrogen::get_instance()->getSelectedPatternNumber(); if ( (nSelectedPatternNumber != -1) && ( (uint)nSelectedPatternNumber < pPatternList->size() ) ) { // update pattern name text m_pPattern = pPatternList->get( nSelectedPatternNumber ); QString sCurrentPatternName = m_pPattern->get_name(); this->setWindowTitle( ( trUtf8( "Pattern editor - %1").arg( sCurrentPatternName ) ) ); m_pPatternNameLbl->setText( sCurrentPatternName ); // update pattern size combobox int nPatternSize = m_pPattern->get_length(); int nEighth = MAX_NOTES / 8; for ( int i = 1; i <= 32; i++ ) { if ( nPatternSize == nEighth * i ) { __pattern_size_combo->set_text( QString( "%1" ).arg( i ) ); break; } } } else { m_pPattern = NULL; this->setWindowTitle( ( trUtf8( "Pattern editor - %1").arg(QString("No pattern selected.")) ) ); m_pPatternNameLbl->setText( trUtf8( "No pattern selected" ) ); } resizeEvent( NULL ); // force an update of the scrollbars } void PatternEditorPanel::hearNotesBtnClick(Button *ref) { Preferences *pref = ( Preferences::get_instance() ); pref->setHearNewNotes( ref->isPressed() ); if (ref->isPressed() ) { ( HydrogenApp::get_instance() )->setStatusBarMessage( trUtf8( "Hear new notes = On" ), 2000 ); } else { ( HydrogenApp::get_instance() )->setStatusBarMessage( trUtf8( "Hear new notes = Off" ), 2000 ); } } void PatternEditorPanel::quantizeEventsBtnClick(Button *ref) { Preferences *pref = ( Preferences::get_instance() ); pref->setQuantizeEvents( ref->isPressed() ); if (ref->isPressed() ) { ( HydrogenApp::get_instance() )->setStatusBarMessage( trUtf8( "Quantize incoming keyboard/midi events = On" ), 2000 ); } else { ( HydrogenApp::get_instance() )->setStatusBarMessage( trUtf8( "Quantize incoming keyboard/midi events = Off" ), 2000 ); } } void PatternEditorPanel::stateChangedEvent(int state) { if ( state == STATE_READY) { m_bEnablePatternResize = true; } else { m_bEnablePatternResize = false; } } void PatternEditorPanel::resizeEvent( QResizeEvent *ev ) { UNUSED( ev ); QScrollArea *pScrollArea = m_pEditorScrollView; pScrollArea = m_pEditorScrollView; m_pPatternEditorHScrollBar->setMinimum( pScrollArea->horizontalScrollBar()->minimum() ); m_pPatternEditorHScrollBar->setMaximum( pScrollArea->horizontalScrollBar()->maximum() ); m_pPatternEditorHScrollBar->setSingleStep( pScrollArea->horizontalScrollBar()->singleStep() ); m_pPatternEditorHScrollBar->setPageStep( pScrollArea->horizontalScrollBar()->pageStep() ); m_pPatternEditorVScrollBar->setMinimum( pScrollArea->verticalScrollBar()->minimum() ); m_pPatternEditorVScrollBar->setMaximum( pScrollArea->verticalScrollBar()->maximum() ); m_pPatternEditorVScrollBar->setSingleStep( pScrollArea->verticalScrollBar()->singleStep() ); m_pPatternEditorVScrollBar->setPageStep( pScrollArea->verticalScrollBar()->pageStep() ); } void PatternEditorPanel::showEvent ( QShowEvent *ev ) { UNUSED( ev ); } /// richiamato dall'uso dello scroll del mouse void PatternEditorPanel::contentsMoving(int dummy) { UNUSED( dummy ); //INFOLOG( "contentsMoving" ); syncToExternalHorizontalScrollbar(0); } void PatternEditorPanel::selectedInstrumentChangedEvent() { //m_pNoteVelocityEditor->updateEditor(); //m_pNotePanEditor->updateEditor(); //m_pNoteLeadLagEditor->updateEditor(); resizeEvent(NULL); // force a scrollbar update } void PatternEditorPanel::showDrumEditorBtnClick(Button *ref) { UNUSED( ref ); if ( !__show_drum_btn->isPressed() ){ __show_drum_btn->setToolTip( trUtf8( "Show piano roll editor" ) ); m_pPianoRollScrollView->hide(); m_pEditorScrollView->show(); m_pInstrListScrollView->show(); m_pDrumPatternEditor->selectedInstrumentChangedEvent(); // force an update // force a re-sync of extern scrollbars resizeEvent( NULL ); } else { __show_drum_btn->setToolTip( trUtf8( "Show drum editor" ) ); m_pPianoRollScrollView->show(); m_pPianoRollScrollView->verticalScrollBar()->setValue( 250 ); m_pEditorScrollView->show(); m_pInstrListScrollView->show(); m_pPianoRollEditor->updateEditor(); // force an update // force a re-sync of extern scrollbars resizeEvent( NULL ); } } void PatternEditorPanel::zoomInBtnClicked(Button *ref) { if(m_pPatternEditorRuler->getGridWidth() >=24){ return; } UNUSED( ref ); m_pPatternEditorRuler->zoomIn(); m_pDrumPatternEditor->zoom_in(); m_pNoteVelocityEditor->zoomIn(); m_pNoteLeadLagEditor->zoomIn(); m_pNoteNoteKeyEditor->zoomIn(); m_pNotePanEditor->zoomIn(); m_pPianoRollEditor->zoom_in(); resizeEvent( NULL ); } void PatternEditorPanel::zoomOutBtnClicked(Button *ref) { UNUSED( ref ); m_pPatternEditorRuler->zoomOut(); m_pDrumPatternEditor->zoom_out(); m_pNoteVelocityEditor->zoomOut(); m_pNoteLeadLagEditor->zoomOut(); m_pNoteNoteKeyEditor->zoomOut(); m_pNotePanEditor->zoomOut(); m_pPianoRollEditor->zoom_out(); resizeEvent( NULL ); } void PatternEditorPanel::patternSizeChanged( QString str ) { INFOLOG( "pattern size changed" ); uint nEighth = MAX_NOTES / 8; int nSelected = str.toInt(); if ( !m_pPattern ) { return; } if ( m_pPattern->get_length() == nEighth * nSelected ) { // non e' necessario aggiornare return; } if ( !m_bEnablePatternResize ) { __pattern_size_combo->set_text(QString::number(m_pPattern->get_length() / nEighth ),false); QMessageBox::information( this, "Hydrogen", trUtf8( "Is not possible to change the pattern size when playing." ) ); return; } if ( nSelected > 0 && nSelected <= 32 ) { m_pPattern->set_length( nEighth * nSelected ); } else { ERRORLOG( QString("[patternSizeChanged] Unhandled case %1").arg( nSelected ) ); } m_pPatternEditorRuler->updateEditor( true ); // redraw all m_pNoteVelocityEditor->updateEditor(); m_pNotePanEditor->updateEditor(); m_pNoteLeadLagEditor->updateEditor(); m_pNoteNoteKeyEditor->updateEditor(); m_pPianoRollEditor->updateEditor(); resizeEvent( NULL ); EventQueue::get_instance()->push_event( EVENT_SELECTED_PATTERN_CHANGED, -1 ); } void PatternEditorPanel::moveUpBtnClicked(Button *) { Hydrogen *engine = Hydrogen::get_instance(); int nSelectedInstrument = engine->getSelectedInstrumentNumber(); AudioEngine::get_instance()->lock( RIGHT_HERE ); Song *pSong = engine->getSong(); InstrumentList *pInstrumentList = pSong->get_instrument_list(); if ( ( nSelectedInstrument - 1 ) >= 0 ) { pInstrumentList->swap( nSelectedInstrument -1, nSelectedInstrument ); AudioEngine::get_instance()->unlock(); engine->setSelectedInstrumentNumber( nSelectedInstrument - 1 ); pSong->__is_modified = true; } else { AudioEngine::get_instance()->unlock(); } } void PatternEditorPanel::moveDownBtnClicked(Button *) { Hydrogen *engine = Hydrogen::get_instance(); int nSelectedInstrument = engine->getSelectedInstrumentNumber(); AudioEngine::get_instance()->lock( RIGHT_HERE ); Song *pSong = engine->getSong(); InstrumentList *pInstrumentList = pSong->get_instrument_list(); if ( ( nSelectedInstrument + 1 ) < (int)pInstrumentList->size() ) { pInstrumentList->swap( nSelectedInstrument, nSelectedInstrument + 1 ); AudioEngine::get_instance()->unlock(); engine->setSelectedInstrumentNumber( nSelectedInstrument + 1 ); pSong->__is_modified = true; } else { AudioEngine::get_instance()->unlock(); } } void PatternEditorPanel::dragEnterEvent(QDragEnterEvent *event) { m_pInstrumentList->dragEnterEvent( event ); } void PatternEditorPanel::dropEvent(QDropEvent *event) { m_pInstrumentList->dropEvent( event ); } void PatternEditorPanel::propertiesComboChanged( QString text ) { if ( text == trUtf8( "Velocity" ) ) { m_pNotePanScrollView->hide(); m_pNoteLeadLagScrollView->hide(); m_pNoteNoteKeyScrollView->hide(); m_pNoteVelocityScrollView->show(); m_pNoteVelocityEditor->updateEditor(); } else if ( text == trUtf8( "Pan" ) ) { m_pNoteVelocityScrollView->hide(); m_pNoteLeadLagScrollView->hide(); m_pNoteNoteKeyScrollView->hide(); m_pNotePanScrollView->show(); m_pNotePanEditor->updateEditor(); } else if ( text == trUtf8( "Lead and Lag" ) ) { m_pNoteVelocityScrollView->hide(); m_pNotePanScrollView->hide(); m_pNoteNoteKeyScrollView->hide(); m_pNoteLeadLagScrollView->show(); m_pNoteLeadLagEditor->updateEditor(); } else if ( text == trUtf8( "NoteKey" ) ) { m_pNoteVelocityScrollView->hide(); m_pNotePanScrollView->hide(); m_pNoteLeadLagScrollView->hide(); m_pNoteNoteKeyScrollView->show(); m_pNoteNoteKeyEditor->updateEditor(); } else if ( text == trUtf8( "Cutoff" ) ) { } else if ( text == trUtf8( "Resonance" ) ) { } else { ERRORLOG( "Unknown text: " + text ); } } void PatternEditorPanel::recPreDeleteSelect( int index ) { Preferences::get_instance()->m_nRecPreDelete = index; if( index>=9 && index <=15 ){ __recpostdelete->show(); }else{ __recpostdelete->hide(); } } void PatternEditorPanel::recPostDeleteSelect( int index ) { Preferences::get_instance()->m_nRecPostDelete = index; } void PatternEditorPanel::displayorHidePrePostCB() { int index = __recpredelete->currentIndex(); if( Preferences::get_instance()->getDestructiveRecord() ){ __recpostdelete->show(); if( index>=8 && index <=14 ){ __recpostdelete->show(); }else{ __recpostdelete->hide(); } __recpredelete->show(); }else{ __recpostdelete->hide(); __recpredelete->hide(); } } void PatternEditorPanel::updatePianorollEditor() { m_pDrumPatternEditor->updateEditor(); // force an update } hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/PatternEditorPanel.h000066400000000000000000000114441211146647700252210ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PATTERN_EDITOR_PANEL_H #define PATTERN_EDITOR_PANEL_H #include #include "PianoRollEditor.h" #include "../EventListener.h" #include "../widgets/LCDCombo.h" class Button; class ToggleButton; class Fader; class PatternEditorRuler; class PatternEditorInstrumentList; class NotePropertiesRuler; class LCDCombo; class DrumPatternEditor; class PianoRollEditor; enum patternEditorRightClickMode { VELOCITY_SELECTED, PAN_SELECTED, LEAD_LAG_SELECTED }; namespace H2Core { class Pattern; } /// /// Pattern Editor Panel /// class PatternEditorPanel : public QWidget, public EventListener, public H2Core::Object { H2_OBJECT Q_OBJECT public: PatternEditorPanel(QWidget *parent); ~PatternEditorPanel(); DrumPatternEditor* getDrumPatternEditor() { return m_pDrumPatternEditor; } NotePropertiesRuler* getVelocityEditor() { return m_pNoteVelocityEditor; } NotePropertiesRuler* getPanEditor() { return m_pNotePanEditor; } NotePropertiesRuler* getLeadLagEditor() { return m_pNoteLeadLagEditor; } NotePropertiesRuler* getNoteKeyEditor() { return m_pNoteNoteKeyEditor; } PatternEditorInstrumentList* getInstrumentList() { return m_pInstrumentList; } PianoRollEditor* getPianoRollEditor() { return m_pPianoRollEditor; } QString getPropertiesComboText(){ return __pPropertiesCombo->getText(); } void updateSLnameLabel(); void displayorHidePrePostCB(); void updatePianorollEditor(); // Implements EventListener interface virtual void selectedPatternChangedEvent(); virtual void selectedInstrumentChangedEvent(); virtual void stateChangedEvent(int nState); //~ Implements EventListener interface private slots: void gridResolutionChanged( QString text ); void propertiesComboChanged( QString text ); void patternSizeChanged( QString text ); void hearNotesBtnClick(Button *ref); void quantizeEventsBtnClick(Button *ref); void showDrumEditorBtnClick(Button *ref); void syncToExternalHorizontalScrollbar(int); void contentsMoving(int dummy); void on_patternEditorScroll(int); void zoomInBtnClicked(Button *ref); void zoomOutBtnClicked(Button *ref); void moveDownBtnClicked(Button *); void moveUpBtnClicked(Button *); void recPreDeleteSelect( int index ); void recPostDeleteSelect( int index ); private: H2Core::Pattern *m_pPattern; QPixmap m_backgroundPixmap; QLabel *pSLlabel; // Editor top LCDCombo *__pattern_size_combo; LCDCombo *__resolution_combo; ToggleButton *__show_drum_btn; ToggleButton *__show_piano_btn; QComboBox *__recpredelete; QComboBox *__recpostdelete; // ~Editor top //note properties combo LCDCombo * __pPropertiesCombo; // drum editor QScrollArea* m_pEditorScrollView; DrumPatternEditor *m_pDrumPatternEditor; // piano roll editor QScrollArea* m_pPianoRollInternScrollView; QScrollArea* m_pPianoRollScrollView; PianoRollEditor *m_pPianoRollEditor; // ruler QScrollArea* m_pRulerScrollView; PatternEditorRuler *m_pPatternEditorRuler; // instr list QScrollArea* m_pInstrListScrollView; PatternEditorInstrumentList *m_pInstrumentList; // note velocity editor QScrollArea* m_pNoteVelocityScrollView; NotePropertiesRuler *m_pNoteVelocityEditor; // note pan editor QScrollArea* m_pNotePanScrollView; NotePropertiesRuler *m_pNotePanEditor; // note leadlag editor QScrollArea* m_pNoteLeadLagScrollView; NotePropertiesRuler *m_pNoteLeadLagEditor; // note notekey editor QScrollArea* m_pNoteNoteKeyScrollView; NotePropertiesRuler *m_pNoteNoteKeyEditor; QScrollBar *m_pPatternEditorHScrollBar; QScrollBar *m_pPatternEditorVScrollBar; // TOOLBAR QLabel *m_pPatternNameLbl; Button *m_pRandomVelocityBtn; //~ TOOLBAR Button *sizeDropdownBtn; Button *resDropdownBtn; bool m_bEnablePatternResize; virtual void dragEnterEvent(QDragEnterEvent *event); virtual void dropEvent(QDropEvent *event); virtual void resizeEvent(QResizeEvent *ev); virtual void showEvent(QShowEvent *ev); }; #endif hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/PatternEditorRuler.cpp000066400000000000000000000152721211146647700256110ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include using namespace H2Core; #include #include #include "PatternEditorRuler.h" #include "PatternEditorPanel.h" #include "../HydrogenApp.h" #include "../Skin.h" const char* PatternEditorRuler::__class_name = "PatternEditorRuler"; PatternEditorRuler::PatternEditorRuler( QWidget* parent ) : QWidget( parent ) , Object( __class_name ) { setAttribute(Qt::WA_NoBackground); //infoLog( "INIT" ); Preferences *pPref = Preferences::get_instance(); UIStyle *pStyle = pPref->getDefaultUIStyle(); QColor backgroundColor( pStyle->m_patternEditor_backgroundColor.getRed(), pStyle->m_patternEditor_backgroundColor.getGreen(), pStyle->m_patternEditor_backgroundColor.getBlue() ); m_pPattern = NULL; m_nGridWidth = Preferences::get_instance()->getPatternEditorGridWidth(); m_nRulerWidth = 20 + m_nGridWidth * ( MAX_NOTES * 4 ); m_nRulerHeight = 25; resize( m_nRulerWidth, m_nRulerHeight ); bool ok = m_tickPosition.load( Skin::getImagePath() + "/patternEditor/tickPosition.png" ); if( ok == false ){ ERRORLOG( "Error loading pixmap " ); } m_pBackground = new QPixmap( m_nRulerWidth, m_nRulerHeight ); m_pBackground->fill( backgroundColor ); m_pTimer = new QTimer(this); connect(m_pTimer, SIGNAL(timeout()), this, SLOT(updateEditor())); HydrogenApp::get_instance()->addEventListener( this ); } PatternEditorRuler::~PatternEditorRuler() { //infoLog( "DESTROY"); } void PatternEditorRuler::updateStart(bool start) { if (start) { m_pTimer->start(50); // update ruler at 20 fps } else { m_pTimer->stop(); } } void PatternEditorRuler::showEvent ( QShowEvent *ev ) { UNUSED( ev ); updateEditor(); updateStart(true); } void PatternEditorRuler::hideEvent ( QHideEvent *ev ) { UNUSED( ev ); updateStart(false); } void PatternEditorRuler::updateEditor( bool bRedrawAll ) { static int oldNTicks = 0; Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); int nSelectedPatternNumber = pEngine->getSelectedPatternNumber(); if ( (nSelectedPatternNumber != -1) && ( (uint)nSelectedPatternNumber < pPatternList->size() ) ) { m_pPattern = pPatternList->get( nSelectedPatternNumber ); } else { m_pPattern = NULL; } bool bActive = false; // is the pattern playing now? PatternList *pList = pEngine->getCurrentPatternList(); for (uint i = 0; i < pList->size(); i++) { if ( m_pPattern == pList->get(i) ) { bActive = true; break; } } int state = pEngine->getState(); if ( ( state == STATE_PLAYING ) && (bActive) ) { m_nTicks = pEngine->getTickPosition(); } else { m_nTicks = -1; // hide the tickPosition } if (oldNTicks != m_nTicks) { // redraw all bRedrawAll = true; } oldNTicks = m_nTicks; if (bRedrawAll) { update( 0, 0, width(), height() ); } } void PatternEditorRuler::paintEvent( QPaintEvent *ev) { if (!isVisible()) { return; } QPainter painter(this); painter.drawPixmap( ev->rect(), *m_pBackground, ev->rect() ); // gray background for unusable section of pattern if (m_pPattern) { int nXStart = 20 + m_pPattern->get_length() * m_nGridWidth; if ( (m_nRulerWidth - nXStart) != 0 ) { painter.fillRect( nXStart, 0, m_nRulerWidth - nXStart, m_nRulerHeight, QColor(170,170,170) ); } } // numbers QColor textColor( 100, 100, 100 ); QColor lineColor( 170, 170, 170 ); Preferences *pref = Preferences::get_instance(); QString family = pref->getApplicationFontFamily(); int size = pref->getApplicationFontPointSize(); QFont font( family, size ); painter.setFont(font); painter.drawLine( 0, 0, m_nRulerWidth, 0 ); painter.drawLine( 0, m_nRulerHeight - 1, m_nRulerWidth - 1, m_nRulerHeight - 1); uint nQuarter = 48; for ( int i = 0; i < 64 ; i++ ) { int nText_x = 20 + nQuarter / 4 * i * m_nGridWidth; if ( ( i % 4 ) == 0 ) { painter.setPen( textColor ); painter.drawText( nText_x - 30, 0, 60, m_nRulerHeight, Qt::AlignCenter, QString("%1").arg(i / 4 + 1) ); //ERRORLOG(QString("nText_x: %1, true, : %2").arg(nText_x).arg(m_nRulerWidth)); } else { painter.setPen( QPen( QColor( lineColor ), 1, Qt::SolidLine ) ); painter.drawLine( nText_x, ( m_nRulerHeight - 5 ) / 2, nText_x, m_nRulerHeight - ( (m_nRulerHeight - 5 ) / 2 )); //ERRORLOG("PAINT LINE"); } } // draw tickPosition if (m_nTicks != -1) { uint x = (uint)( 20 + m_nTicks * m_nGridWidth - 5 - 11 / 2.0 ); painter.drawPixmap( QRect( x, height() / 2, 11, 8 ), m_tickPosition, QRect( 0, 0, 11, 8 ) ); } } void PatternEditorRuler::zoomIn() { if (m_nGridWidth >= 3){ m_nGridWidth *= 2; }else { m_nGridWidth *= 1.5; } m_nRulerWidth = 20 + m_nGridWidth * ( MAX_NOTES * 4 ); resize( QSize(m_nRulerWidth, m_nRulerHeight )); delete m_pBackground; m_pBackground = new QPixmap( m_nRulerWidth, m_nRulerHeight ); UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); QColor backgroundColor( pStyle->m_patternEditor_backgroundColor.getRed(), pStyle->m_patternEditor_backgroundColor.getGreen(), pStyle->m_patternEditor_backgroundColor.getBlue() ); m_pBackground->fill( backgroundColor ); update(); } void PatternEditorRuler::zoomOut() { if ( m_nGridWidth > 1.5 ) { if (m_nGridWidth > 3){ m_nGridWidth /= 2; }else { m_nGridWidth /= 1.5; } m_nRulerWidth = 20 + m_nGridWidth * ( MAX_NOTES * 4 ); resize( QSize(m_nRulerWidth, m_nRulerHeight) ); delete m_pBackground; m_pBackground = new QPixmap( m_nRulerWidth, m_nRulerHeight ); UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); QColor backgroundColor( pStyle->m_patternEditor_backgroundColor.getRed(), pStyle->m_patternEditor_backgroundColor.getGreen(), pStyle->m_patternEditor_backgroundColor.getBlue() ); m_pBackground->fill( backgroundColor ); update(); } } void PatternEditorRuler::selectedPatternChangedEvent() { updateEditor( true ); } hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/PatternEditorRuler.h000066400000000000000000000036141211146647700252530ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PATTERN_EDITOR_RULER_H #define PATTERN_EDITOR_RULER_H #include "../EventListener.h" #include #include class PatternEditorPanel; namespace H2Core { class Pattern; } class PatternEditorRuler : public QWidget, public H2Core::Object, public EventListener { H2_OBJECT Q_OBJECT public: PatternEditorRuler( QWidget* parent ); ~PatternEditorRuler(); void paintEvent(QPaintEvent *ev); void updateStart(bool start); void showEvent( QShowEvent *ev ); void hideEvent( QHideEvent *ev ); void zoomIn(); void zoomOut(); float getGridWidth() const { return m_nGridWidth; }; public slots: void updateEditor( bool bRedrawAll = false ); private: uint m_nRulerWidth; uint m_nRulerHeight; float m_nGridWidth; QPixmap *m_pBackground; QPixmap m_tickPosition; QTimer *m_pTimer; int m_nTicks; PatternEditorPanel *m_pPatternEditorPanel; H2Core::Pattern *m_pPattern; // Implements EventListener interface virtual void selectedPatternChangedEvent(); //~ Implements EventListener interface }; #endif hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/PianoRollEditor.cpp000066400000000000000000001025331211146647700250560ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "PianoRollEditor.h" #include "PatternEditorPanel.h" #include "NotePropertiesRuler.h" #include "UndoActions.h" #include #include #include #include #include #include #include #include #include using namespace H2Core; #include "../HydrogenApp.h" const char* PianoRollEditor::__class_name = "PianoRollEditor"; PianoRollEditor::PianoRollEditor( QWidget *pParent, PatternEditorPanel *panel ) : QWidget( pParent ) , Object( __class_name ) , m_nResolution( 8 ) , m_bRightBtnPressed( false ) , m_bUseTriplets( false ) , m_pPattern( NULL ) , m_pPatternEditorPanel( panel ) , m_pDraggedNote( NULL ) { INFOLOG( "INIT" ); m_nRowHeight = 10; m_nOctaves = 7; setAttribute(Qt::WA_NoBackground); setFocusPolicy(Qt::ClickFocus); m_nGridWidth = Preferences::get_instance()->getPatternEditorGridWidth(); m_nEditorWidth = 20 + m_nGridWidth * (MAX_NOTES * 4); m_nEditorHeight = m_nOctaves * 12 * m_nRowHeight; m_pBackground = new QPixmap( m_nEditorWidth, m_nEditorHeight ); m_pTemp = new QPixmap( m_nEditorWidth, m_nEditorHeight ); resize( m_nEditorWidth, m_nEditorHeight ); createBackground(); HydrogenApp::get_instance()->addEventListener( this ); } PianoRollEditor::~PianoRollEditor() { INFOLOG( "DESTROY" ); } void PianoRollEditor::setResolution(uint res, bool bUseTriplets) { this->m_nResolution = res; this->m_bUseTriplets = bUseTriplets; updateEditor(); } void PianoRollEditor::updateEditor() { // uint nEditorWidth; if ( m_pPattern ) { m_nEditorWidth = 20 + m_nGridWidth * m_pPattern->get_length(); } else { m_nEditorWidth = 20 + m_nGridWidth * MAX_NOTES; } resize( m_nEditorWidth, height() ); // redraw all update( 0, 0, width(), height() ); createBackground(); drawPattern(); // ERRORLOG(QString("update editor %1").arg(m_nEditorWidth)); } //eventlistener void PianoRollEditor::patternModifiedEvent() { updateEditor(); } void PianoRollEditor::selectedInstrumentChangedEvent() { updateEditor(); } void PianoRollEditor::selectedPatternChangedEvent() { //INFOLOG( "updating m_pPattern pointer" ); Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); int nSelectedPatternNumber = pEngine->getSelectedPatternNumber(); if ( (nSelectedPatternNumber != -1) && ( (uint)nSelectedPatternNumber < pPatternList->size() ) ) { m_pPattern = pPatternList->get( nSelectedPatternNumber ); } else { m_pPattern = NULL; } __selectedPatternNumber = nSelectedPatternNumber; updateEditor(); } void PianoRollEditor::paintEvent(QPaintEvent *ev) { QPainter painter( this ); painter.drawPixmap( ev->rect(), *m_pTemp, ev->rect() ); } void PianoRollEditor::createBackground() { //INFOLOG( "(re)creating the background" ); QColor backgroundColor( 250, 250, 250 ); m_pBackground->fill( backgroundColor ); QColor octaveColor( 230, 230, 230 ); QColor octaveAlternateColor( 200, 200, 200 ); QColor baseOctaveColor( 245, 245, 245 ); QColor baseNoteColor( 255, 255, 255 ); QColor fbk( 160, 160, 160 ); unsigned start_x = 0; unsigned end_x = width(); QPainter p( m_pBackground ); for ( uint octave = 0; octave < m_nOctaves; ++octave ) { unsigned start_y = octave * 12 * m_nRowHeight; if ( octave % 2 ) { if ( octave == 3 ){ // p.fillRect( start_x, start_y, end_x - start_x, 12 * m_nRowHeight, baseOctaveColor ); p.fillRect( start_x, start_y, end_x - start_x, start_y + 1 * m_nRowHeight, baseOctaveColor ); p.fillRect( start_x, start_y + 1 * m_nRowHeight, end_x - start_x, start_y + 2 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 2 * m_nRowHeight, end_x - start_x, start_y + 3 * m_nRowHeight, baseOctaveColor ); p.fillRect( start_x, start_y + 3 * m_nRowHeight, end_x - start_x, start_y + 4 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 4 * m_nRowHeight, end_x - start_x, start_y + 5 * m_nRowHeight, baseOctaveColor ); p.fillRect( start_x, start_y + 5 * m_nRowHeight, end_x - start_x, start_y + 6 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 6 * m_nRowHeight, end_x - start_x, start_y + 7 * m_nRowHeight, baseOctaveColor ); p.fillRect( start_x, start_y + 7 * m_nRowHeight, end_x - start_x, start_y + 8 * m_nRowHeight, baseOctaveColor ); p.fillRect( start_x, start_y + 8 * m_nRowHeight, end_x - start_x, start_y + 9 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 9 * m_nRowHeight, end_x - start_x, start_y + 10 * m_nRowHeight, baseOctaveColor ); p.fillRect( start_x, start_y + 10 * m_nRowHeight, end_x - start_x, start_y + 11 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 11 * m_nRowHeight, end_x - start_x, start_y + 12 * m_nRowHeight, baseNoteColor ); } else { // p.fillRect( start_x, start_y, end_x - start_x, 12 * m_nRowHeight, octaveColor ); p.fillRect( start_x, start_y, end_x - start_x, start_y + 1 * m_nRowHeight, octaveColor ); p.fillRect( start_x, start_y + 1 * m_nRowHeight, end_x - start_x, start_y + 2 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 2 * m_nRowHeight, end_x - start_x, start_y + 3 * m_nRowHeight, octaveColor ); p.fillRect( start_x, start_y + 3 * m_nRowHeight, end_x - start_x, start_y + 4 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 4 * m_nRowHeight, end_x - start_x, start_y + 5 * m_nRowHeight, octaveColor ); p.fillRect( start_x, start_y + 5 * m_nRowHeight, end_x - start_x, start_y + 6 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 6 * m_nRowHeight, end_x - start_x, start_y + 7 * m_nRowHeight, octaveColor ); p.fillRect( start_x, start_y + 7 * m_nRowHeight, end_x - start_x, start_y + 8 * m_nRowHeight, octaveColor ); p.fillRect( start_x, start_y + 8 * m_nRowHeight, end_x - start_x, start_y + 9 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 9 * m_nRowHeight, end_x - start_x, start_y + 10 * m_nRowHeight, octaveColor ); p.fillRect( start_x, start_y + 10 * m_nRowHeight, end_x - start_x, start_y + 11 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 11 * m_nRowHeight, end_x - start_x, start_y + 12 * m_nRowHeight, octaveColor ); } } else { // p.fillRect( start_x, start_y, end_x - start_x, 12 * m_nRowHeight, octaveAlternateColor ); p.fillRect( start_x, start_y, end_x - start_x, start_y + 1 * m_nRowHeight, octaveAlternateColor ); p.fillRect( start_x, start_y + 1 * m_nRowHeight, end_x - start_x, start_y + 2 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 2 * m_nRowHeight, end_x - start_x, start_y + 3 * m_nRowHeight, octaveAlternateColor ); p.fillRect( start_x, start_y + 3 * m_nRowHeight, end_x - start_x, start_y + 4 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 4 * m_nRowHeight, end_x - start_x, start_y + 5 * m_nRowHeight, octaveAlternateColor ); p.fillRect( start_x, start_y + 5 * m_nRowHeight, end_x - start_x, start_y + 6 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 6 * m_nRowHeight, end_x - start_x, start_y + 7 * m_nRowHeight, octaveAlternateColor ); p.fillRect( start_x, start_y + 7 * m_nRowHeight, end_x - start_x, start_y + 8 * m_nRowHeight, octaveAlternateColor ); p.fillRect( start_x, start_y + 8 * m_nRowHeight, end_x - start_x, start_y + 9 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 9 * m_nRowHeight, end_x - start_x, start_y + 10 * m_nRowHeight, octaveAlternateColor ); p.fillRect( start_x, start_y + 10 * m_nRowHeight, end_x - start_x, start_y + 11 * m_nRowHeight, fbk ); p.fillRect( start_x, start_y + 11 * m_nRowHeight, end_x - start_x, start_y + 12 * m_nRowHeight, octaveAlternateColor ); } } // horiz lines for ( uint row = 0; row < ( 12 * m_nOctaves ); ++row ) { unsigned y = row * m_nRowHeight; p.drawLine( start_x, y,end_x , y ); } //draw text QFont font; font.setPointSize ( 9 ); // font.setWeight( 63 ); p.setFont( font ); p.setPen( QColor(10, 10, 10 ) ); int offset = 0; int insertx = 3; for ( int oct = 0; oct < (int)m_nOctaves; oct++ ){ if( oct > 3 ){ p.drawText( insertx, m_nRowHeight + offset, "B" ); p.drawText( insertx, 10 + m_nRowHeight + offset, "A#" ); p.drawText( insertx, 20 + m_nRowHeight + offset, "A" ); p.drawText( insertx, 30 + m_nRowHeight + offset, "G#" ); p.drawText( insertx, 40 + m_nRowHeight + offset, "G" ); p.drawText( insertx, 50 + m_nRowHeight + offset, "F#" ); p.drawText( insertx, 60 + m_nRowHeight + offset, "F" ); p.drawText( insertx, 70 + m_nRowHeight + offset, "E" ); p.drawText( insertx, 80 + m_nRowHeight + offset, "D#" ); p.drawText( insertx, 90 + m_nRowHeight + offset, "D" ); p.drawText( insertx, 100 + m_nRowHeight + offset, "C#" ); p.drawText( insertx, 110 + m_nRowHeight + offset, "C" ); offset += 12 * m_nRowHeight; }else { p.drawText( insertx, m_nRowHeight + offset, "b" ); p.drawText( insertx, 10 + m_nRowHeight + offset, "a#" ); p.drawText( insertx, 20 + m_nRowHeight + offset, "a" ); p.drawText( insertx, 30 + m_nRowHeight + offset, "g#" ); p.drawText( insertx, 40 + m_nRowHeight + offset, "g" ); p.drawText( insertx, 50 + m_nRowHeight + offset, "f#" ); p.drawText( insertx, 60 + m_nRowHeight + offset, "f" ); p.drawText( insertx, 70 + m_nRowHeight + offset, "e" ); p.drawText( insertx, 80 + m_nRowHeight + offset, "d#" ); p.drawText( insertx, 90 + m_nRowHeight + offset, "d" ); p.drawText( insertx, 100 + m_nRowHeight + offset, "c#" ); p.drawText( insertx, 110 + m_nRowHeight + offset, "c" ); offset += 12 * m_nRowHeight; } } draw_grid( p ); } void PianoRollEditor::draw_grid( QPainter& p ) { static const UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); static const QColor res_1( pStyle->m_patternEditor_line1Color.getRed(), pStyle->m_patternEditor_line1Color.getGreen(), pStyle->m_patternEditor_line1Color.getBlue() ); static const QColor res_2( pStyle->m_patternEditor_line2Color.getRed(), pStyle->m_patternEditor_line2Color.getGreen(), pStyle->m_patternEditor_line2Color.getBlue() ); static const QColor res_3( pStyle->m_patternEditor_line3Color.getRed(), pStyle->m_patternEditor_line3Color.getGreen(), pStyle->m_patternEditor_line3Color.getBlue() ); static const QColor res_4( pStyle->m_patternEditor_line4Color.getRed(), pStyle->m_patternEditor_line4Color.getGreen(), pStyle->m_patternEditor_line4Color.getBlue() ); static const QColor res_5( pStyle->m_patternEditor_line5Color.getRed(), pStyle->m_patternEditor_line5Color.getGreen(), pStyle->m_patternEditor_line5Color.getBlue() ); // vertical lines int nBase; if (m_bUseTriplets) { nBase = 3; } else { nBase = 4; } int n4th = 4 * MAX_NOTES / (nBase * 4); int n8th = 4 * MAX_NOTES / (nBase * 8); int n16th = 4 * MAX_NOTES / (nBase * 16); int n32th = 4 * MAX_NOTES / (nBase * 32); int n64th = 4 * MAX_NOTES / (nBase * 64); int nNotes = MAX_NOTES; if ( m_pPattern ) { nNotes = m_pPattern->get_length(); } if (!m_bUseTriplets) { for ( int i = 0; i < nNotes + 1; i++ ) { uint x = 20 + i * m_nGridWidth; if ( (i % n4th) == 0 ) { if (m_nResolution >= 4) { p.setPen( QPen( res_1, 1, Qt::DashLine) ); p.drawLine(x, 1, x, m_nEditorHeight - 1); } } else if ( (i % n8th) == 0 ) { if (m_nResolution >= 8) { p.setPen( QPen( res_2, 0, Qt::DashLine ) ); p.drawLine(x, 1, x, m_nEditorHeight - 1); } } else if ( (i % n16th) == 0 ) { if (m_nResolution >= 16) { p.setPen( QPen( res_3, 0, Qt::DashLine ) ); p.drawLine(x, 1, x, m_nEditorHeight - 1); } } else if ( (i % n32th) == 0 ) { if (m_nResolution >= 32) { p.setPen( QPen( res_4, 0, Qt::DashLine ) ); p.drawLine(x, 1, x, m_nEditorHeight - 1); } } else if ( (i % n64th) == 0 ) { if (m_nResolution >= 64) { p.setPen( QPen( res_5, 0, Qt::DashLine ) ); p.drawLine(x, 1, x, m_nEditorHeight - 1); } } } } else { // Triplets uint nCounter = 0; int nSize = 4 * MAX_NOTES / (nBase * m_nResolution); for ( int i = 0; i < nNotes + 1; i++ ) { uint x = 20 + i * m_nGridWidth; if ( (i % nSize) == 0) { if ((nCounter % 3) == 0) { p.setPen( QPen( res_1, 0, Qt::DashLine ) ); } else { p.setPen( QPen( res_3, 0, Qt::DashLine ) ); } p.drawLine(x, 1, x, m_nEditorHeight - 1); nCounter++; } } } } void PianoRollEditor::drawPattern() { if ( isVisible() == false ) { return; } //INFOLOG( "draw pattern" ); QPainter p( m_pTemp ); // copy the background image p.drawPixmap( rect(), *m_pBackground, rect() ); // for each note... const Pattern::notes_t* notes = m_pPattern->get_notes(); FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { //cout << "note" << endl; //cout << "note n: " << it->first << endl; Note *note = it->second; assert( note ); drawNote( note, &p ); } } void PianoRollEditor::drawNote( Note *pNote, QPainter *pPainter ) { static const UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); static const QColor noteColor( pStyle->m_patternEditor_noteColor.getRed(), pStyle->m_patternEditor_noteColor.getGreen(), pStyle->m_patternEditor_noteColor.getBlue() ); static const QColor noteoffColor( pStyle->m_patternEditor_noteoffColor.getRed(), pStyle->m_patternEditor_noteoffColor.getGreen(), pStyle->m_patternEditor_noteoffColor.getBlue() ); int nInstrument = -1; InstrumentList * pInstrList = Hydrogen::get_instance()->getSong()->get_instrument_list(); for ( uint nInstr = 0; nInstr < pInstrList->size(); ++nInstr ) { Instrument *pInstr = pInstrList->get( nInstr ); if ( pInstr == pNote->get_instrument() ) { nInstrument = nInstr; break; } } if ( nInstrument == -1 ) { //ERRORLOG( "Instrument not found..skipping note" ); return; } if ( nInstrument != Hydrogen::get_instance()->getSelectedInstrumentNumber() ) { return; } uint start_x = 20 + pNote->get_position() * m_nGridWidth; uint start_y = height() - m_nRowHeight - ( m_nRowHeight * pNote->get_key() + ( 12 * (pNote->get_octave() +3) ) * m_nRowHeight ) + 1; uint w = 8; uint h = m_nRowHeight - 2; QColor color = m_pPatternEditorPanel->getDrumPatternEditor()->computeNoteColor( pNote->get_velocity() ); if ( pNote->get_length() == -1 && pNote->get_note_off() == false ) { pPainter->setBrush( color ); pPainter->drawEllipse( start_x -4 , start_y, w, h ); } else if ( pNote->get_length() == 1 && pNote->get_note_off() == true ){ pPainter->setBrush(QColor( noteoffColor )); pPainter->drawEllipse( start_x -4 , start_y, w, h ); } else { float fNotePitch = pNote->get_octave() * 12 + pNote->get_key(); float fStep = pow( 1.0594630943593, ( double )fNotePitch ); int nend = m_nGridWidth * pNote->get_length() / fStep; nend = nend - 1; // lascio un piccolo spazio tra una nota ed un altra pPainter->setBrush( color ); pPainter->fillRect( start_x, start_y, nend, h, color ); pPainter->drawRect( start_x, start_y, nend, h ); } } int PianoRollEditor::getColumn(QMouseEvent *ev) { int nBase; if (m_bUseTriplets) { nBase = 3; } else { nBase = 4; } int nWidth = (m_nGridWidth * 4 * MAX_NOTES) / (nBase * m_nResolution); int x = ev->x(); int nColumn; nColumn = x - 20 + (nWidth / 2); nColumn = nColumn / nWidth; nColumn = (nColumn * 4 * MAX_NOTES) / (nBase * m_nResolution); return nColumn; } void PianoRollEditor::mousePressEvent(QMouseEvent *ev) { //ERRORLOG("Mouse press event"); if ( m_pPattern == NULL ) { return; } Song *pSong = Hydrogen::get_instance()->getSong(); int row = ((int) ev->y()) / ((int) m_nEditorHeight); if (row >= (int) m_nOctaves * 12 ) { return; } int nColumn = getColumn( ev ); if ( nColumn >= (int)m_pPattern->get_length() ) { update( 0, 0, width(), height() ); return; } int pressedline = ((int) ev->y()) / ((int) m_nRowHeight); Instrument *pSelectedInstrument = NULL; int nSelectedInstrumentnumber = Hydrogen::get_instance()->getSelectedInstrumentNumber(); pSelectedInstrument = pSong->get_instrument_list()->get( nSelectedInstrumentnumber ); assert(pSelectedInstrument); //ERRORLOG(QString("pressedline: %1, column %2, event ev: %3, editorhight %4").arg(pressedline).arg(nColumn).arg(ev->y()).arg(m_nEditorHeight)); Note::Octave pressedoctave = (Note::Octave)(3 - (pressedline / 12 )); Note::Key pressednotekey; if ( pressedline < 12 ){ pressednotekey = (Note::Key)(11 - pressedline); } else { pressednotekey = (Note::Key)(11 - pressedline % 12); } //ERRORLOG(QString("pressedline: %1, octave %2, notekey: %3").arg(pressedline).arg(pressedoctave).arg(pressednotekey)); if (ev->button() == Qt::LeftButton ) { if ( ev->modifiers() & Qt::ShiftModifier ){ SE_addPianoRollNoteOffAction *action = new SE_addPianoRollNoteOffAction( nColumn, pressedline, __selectedPatternNumber, nSelectedInstrumentnumber ); HydrogenApp::get_instance()->m_undoStack->push( action ); return; } unsigned nRealColumn = 0; if( ev->x() > 20 ) { nRealColumn = (ev->x() - 20) / static_cast(m_nGridWidth); } H2Core::Note* pDraggedNote = 0; pDraggedNote = m_pPattern->find_note( nColumn, nRealColumn, pSelectedInstrument, pressednotekey, pressedoctave ); int oldLength = -1; float oldVelocity = 0.8f; float oldPan_L = 0.5f; float oldPan_R = 0.5f; float oldLeadLag = 0.0f; int oldNoteKeyVal = 0; int oldOctaveKeyVal = 0; if( pDraggedNote ){ oldLength = pDraggedNote->get_length(); oldVelocity = pDraggedNote->get_velocity(); oldPan_L = pDraggedNote->get_pan_l(); oldPan_R = pDraggedNote->get_pan_r(); oldLeadLag = pDraggedNote->get_lead_lag(); oldNoteKeyVal = pDraggedNote->get_key(); oldOctaveKeyVal = pDraggedNote->get_octave(); } SE_addNotePianoRollAction *action = new SE_addNotePianoRollAction( nColumn, pressedline, __selectedPatternNumber, nSelectedInstrumentnumber, oldLength, oldVelocity, oldPan_L, oldPan_R, oldLeadLag, oldNoteKeyVal, oldOctaveKeyVal ); HydrogenApp::get_instance()->m_undoStack->push( action ); } else if (ev->button() == Qt::RightButton ) { m_bRightBtnPressed = true; m_pDraggedNote = NULL; m_pOldPoint = ev->y(); unsigned nRealColumn = 0; if( ev->x() > 20 ) { nRealColumn = (ev->x() - 20) / static_cast(m_nGridWidth); } // AudioEngine::get_instance()->lock( RIGHT_HERE ); m_pDraggedNote = m_pPattern->find_note( nColumn, nRealColumn, pSelectedInstrument, pressednotekey, pressedoctave, false ); //needed for undo note length __nRealColumn = nRealColumn; __nColumn = nColumn; __pressedLine = pressedline; __selectedInstrumentnumber = nSelectedInstrumentnumber; if( m_pDraggedNote ){ __oldLength = m_pDraggedNote->get_length(); //needed to undo note properties __oldVelocity = m_pDraggedNote->get_velocity(); __oldPan_L = m_pDraggedNote->get_pan_l(); __oldPan_R = m_pDraggedNote->get_pan_r(); __oldLeadLag = m_pDraggedNote->get_lead_lag(); __velocity = __oldVelocity; __pan_L = __oldPan_L; __pan_R = __oldPan_R; __leadLag = __oldLeadLag; }else { __oldLength = -1; } // AudioEngine::get_instance()->unlock(); } } void PianoRollEditor::addOrDeleteNoteAction( int nColumn, int pressedLine, int selectedPatternNumber, int selectedinstrument, int oldLength, float oldVelocity, float oldPan_L, float oldPan_R, float oldLeadLag, int oldNoteKeyVal, int oldOctaveKeyVal, bool noteOff ) { Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); H2Core::Pattern *pPattern; Instrument *pSelectedInstrument = NULL; pSelectedInstrument = pSong->get_instrument_list()->get( selectedinstrument ); assert(pSelectedInstrument); if ( ( selectedPatternNumber != -1 ) && ( (uint)selectedPatternNumber < pPatternList->size() ) ) { pPattern = pPatternList->get( selectedPatternNumber ); } else { pPattern = NULL; } Note::Octave pressedoctave = (Note::Octave)(3 - (pressedLine / 12 )); Note::Key pressednotekey; if ( pressedLine < 12 ){ pressednotekey = (Note::Key)(11 - pressedLine); } else { pressednotekey = (Note::Key)(11 - pressedLine % 12); } m_bRightBtnPressed = false; bool bNoteAlreadyExist = false; AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine Note* note = m_pPattern->find_note( nColumn, -1, pSelectedInstrument, pressednotekey, pressedoctave ); if( note ) { // the note exists...remove it! bNoteAlreadyExist = true; m_pPattern->remove_note( note ); delete note; } if ( bNoteAlreadyExist == false ) { // create the new note unsigned nPosition = nColumn; float fVelocity = oldVelocity; float fPan_L = oldPan_L; float fPan_R = oldPan_R; int nLength = oldLength; float fPitch = 0.0f; if(noteOff) { fVelocity = 0.0f; fPan_L = 0.5f; fPan_R = 0.5f; nLength = 1; fPitch = 0.0f; } Note *pNote = new Note( pSelectedInstrument, nPosition, fVelocity, fPan_L, fPan_R, nLength, fPitch ); pNote->set_note_off( noteOff ); if(! noteOff) pNote->set_lead_lag( oldLeadLag ); pNote->set_key_octave( pressednotekey, pressedoctave ); pPattern->insert_note( pNote ); // hear note Preferences *pref = Preferences::get_instance(); if ( pref->getHearNewNotes() && !noteOff ) { Note *pNote2 = new Note( pSelectedInstrument, 0, fVelocity, fPan_L, fPan_R, nLength, fPitch); pNote2->set_key_octave( pressednotekey, pressedoctave ); AudioEngine::get_instance()->get_sampler()->note_on(pNote2); } } pSong->__is_modified = true; AudioEngine::get_instance()->unlock(); // unlock the audio engine updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pPatternEditorPanel->getDrumPatternEditor()->updateEditor(); } void PianoRollEditor::mouseMoveEvent(QMouseEvent *ev) { if (m_pPattern == NULL) { return; } int row = ((int) ev->y()) / ((int) m_nEditorHeight); if (row >= (int) m_nOctaves * 12 ) { return; } if (m_bRightBtnPressed && m_pDraggedNote ) { if ( m_pDraggedNote->get_note_off() ) return; int nTickColumn = getColumn( ev ); AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine int nLen = nTickColumn - (int)m_pDraggedNote->get_position(); if (nLen <= 0) { nLen = -1; } float fNotePitch = m_pDraggedNote->get_octave() * 12 + m_pDraggedNote->get_key(); float fStep = 0; if(nLen > -1){ fStep = pow( 1.0594630943593, ( double )fNotePitch ); }else { fStep = 1.0; } m_pDraggedNote->set_length( nLen * fStep); Hydrogen::get_instance()->getSong()->__is_modified = true; AudioEngine::get_instance()->unlock(); // unlock the audio engine //__draw_pattern(); updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); } QString selectedProperty = m_pPatternEditorPanel->getPropertiesComboText(); //edit velocity if (m_bRightBtnPressed && m_pDraggedNote && selectedProperty == trUtf8( "Velocity" ) ) { if ( m_pDraggedNote->get_note_off() ) return; AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine float val = m_pDraggedNote->get_velocity(); float ymove = m_pOldPoint - ev->y(); val = val + (ymove / 100); if (val > 1) { val = 1; } else if (val < 0.0) { val = 0.0; } m_pDraggedNote->set_velocity( val ); __velocity = val; Hydrogen::get_instance()->getSong()->__is_modified = true; AudioEngine::get_instance()->unlock(); // unlock the audio engine //__draw_pattern(); updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pOldPoint = ev->y(); } //edit pan if (m_bRightBtnPressed && m_pDraggedNote && selectedProperty == trUtf8( "Pan" ) ) { if ( m_pDraggedNote->get_note_off() ) return; AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine float pan_L, pan_R; float val = (m_pDraggedNote->get_pan_r() - m_pDraggedNote->get_pan_l() + 0.5); float ymove = m_pOldPoint - ev->y(); val = val + (ymove / 100); if ( val > 0.5 ) { pan_L = 1.0 - val; pan_R = 0.5; } else { pan_L = 0.5; pan_R = val; } m_pDraggedNote->set_pan_l( pan_L ); m_pDraggedNote->set_pan_r( pan_R ); __pan_L = pan_L; __pan_R = pan_R; Hydrogen::get_instance()->getSong()->__is_modified = true; AudioEngine::get_instance()->unlock(); // unlock the audio engine //__draw_pattern(); updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pOldPoint = ev->y(); } //edit lead lag if (m_bRightBtnPressed && m_pDraggedNote && selectedProperty == trUtf8( "Lead and Lag" )) { if ( m_pDraggedNote->get_note_off() ) return; AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine float val = ( m_pDraggedNote->get_lead_lag() - 1.0 ) / -2.0 ; float ymove = m_pOldPoint - ev->y(); val = val + (ymove / 100); if (val > 1.0) { val = 1.0; } else if (val < 0.0) { val = 0.0; } m_pDraggedNote->set_lead_lag((val * -2.0) + 1.0); __leadLag = (val * -2.0) + 1.0; char valueChar[100]; if ( m_pDraggedNote->get_lead_lag() < 0.0 ) { sprintf( valueChar, "%.2f", ( m_pDraggedNote->get_lead_lag() * -5 ) ); // FIXME: '5' taken from fLeadLagFactor calculation in hydrogen.cpp HydrogenApp::get_instance()->setStatusBarMessage( QString("Leading beat by: %1 ticks").arg( valueChar ), 2000 ); } else if ( m_pDraggedNote->get_lead_lag() > 0.0 ) { sprintf( valueChar, "%.2f", ( m_pDraggedNote->get_lead_lag() * 5 ) ); // FIXME: '5' taken from fLeadLagFactor calculation in hydrogen.cpp HydrogenApp::get_instance()->setStatusBarMessage( QString("Lagging beat by: %1 ticks").arg( valueChar ), 2000 ); } else { HydrogenApp::get_instance()->setStatusBarMessage( QString("Note on beat"), 2000 ); } Hydrogen::get_instance()->getSong()->__is_modified = true; AudioEngine::get_instance()->unlock(); // unlock the audio engine //__draw_pattern(); updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pOldPoint = ev->y(); } } void PianoRollEditor::mouseReleaseEvent(QMouseEvent *ev) { //INFOLOG("Mouse release event" ); if (m_pPattern == NULL) { return; } if ( m_bRightBtnPressed && m_pDraggedNote ) { if ( m_pDraggedNote->get_note_off() ) return; if( m_pDraggedNote->get_length() != __oldLength ) { SE_editPianoRollNoteLengthAction *action = new SE_editPianoRollNoteLengthAction( m_pDraggedNote->get_position(), m_pDraggedNote->get_position(), m_pDraggedNote->get_length(),__oldLength, __selectedPatternNumber, __selectedInstrumentnumber, __pressedLine ); HydrogenApp::get_instance()->m_undoStack->push( action ); } if( __velocity == __oldVelocity && __oldLeadLag == __leadLag && __oldPan_L == __pan_L && __oldPan_R == __pan_R ) return; SE_editNotePropertiesPianoRollAction *action = new SE_editNotePropertiesPianoRollAction( m_pDraggedNote->get_position(), m_pDraggedNote->get_position(), __selectedPatternNumber, __selectedInstrumentnumber, __velocity, __oldVelocity, __pan_L, __oldPan_L, __pan_R, __oldPan_R, __leadLag, __oldLeadLag, __pressedLine ); HydrogenApp::get_instance()->m_undoStack->push( action ); } } void PianoRollEditor::editNoteLengthAction( int nColumn, int nRealColumn, int length, int selectedPatternNumber, int nSelectedInstrumentnumber, int pressedline) { Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); H2Core::Pattern *pPattern; if ( (selectedPatternNumber != -1) && ( (uint)selectedPatternNumber < pPatternList->size() ) ) { pPattern = pPatternList->get( selectedPatternNumber ); } else { pPattern = NULL; } Song *pSong = pEngine->getSong(); int nInstruments = pSong->get_instrument_list()->size(); Instrument *pSelectedInstrument = pSong->get_instrument_list()->get( nSelectedInstrumentnumber ); Note::Octave pressedoctave = (Note::Octave)(3 - (pressedline / 12 )); Note::Key pressednotekey; if ( pressedline < 12 ){ pressednotekey = (Note::Key)(11 - pressedline); } else { pressednotekey = (Note::Key)(11 - pressedline % 12); } Note* pDraggedNote = 0; AudioEngine::get_instance()->lock( RIGHT_HERE ); pDraggedNote = m_pPattern->find_note( nColumn, nRealColumn, pSelectedInstrument, pressednotekey, pressedoctave, false ); if ( pDraggedNote ){ pDraggedNote->set_length( length ); } AudioEngine::get_instance()->unlock(); updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pPatternEditorPanel->getDrumPatternEditor()->updateEditor(); } void PianoRollEditor::editNotePropertiesAction( int nColumn, int nRealColumn, int selectedPatternNumber, int selectedInstrumentnumber, float velocity, float pan_L, float pan_R, float leadLag, int pressedline ) { Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); H2Core::Pattern *pPattern; if ( (selectedPatternNumber != -1) && ( (uint)selectedPatternNumber < pPatternList->size() ) ) { pPattern = pPatternList->get( selectedPatternNumber ); } else { pPattern = NULL; } Note::Octave pressedoctave = (Note::Octave)(3 - (pressedline / 12 )); Note::Key pressednotekey; if ( pressedline < 12 ){ pressednotekey = (Note::Key)(11 - pressedline); } else { pressednotekey = (Note::Key)(11 - pressedline % 12); } Song *pSong = pEngine->getSong(); int nInstruments = pSong->get_instrument_list()->size(); Instrument *pSelectedInstrument = pSong->get_instrument_list()->get( selectedInstrumentnumber ); Note* pDraggedNote = 0; AudioEngine::get_instance()->lock( RIGHT_HERE ); pDraggedNote = m_pPattern->find_note( nColumn, nRealColumn, pSelectedInstrument, pressednotekey, pressedoctave, false ); if ( pDraggedNote ){ pDraggedNote->set_velocity( velocity ); pDraggedNote->set_pan_l( pan_L ); pDraggedNote->set_pan_r( pan_R ); pDraggedNote->set_lead_lag( leadLag ); } AudioEngine::get_instance()->unlock(); updateEditor(); m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); m_pPatternEditorPanel->getPanEditor()->updateEditor(); m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pPatternEditorPanel->getDrumPatternEditor()->updateEditor(); } void PianoRollEditor::zoom_in() { if (m_nGridWidth >= 3){ m_nGridWidth *= 2; }else { m_nGridWidth *= 1.5; } updateEditor(); } void PianoRollEditor::zoom_out() { if ( m_nGridWidth > 1.5 ) { if (m_nGridWidth > 3){ m_nGridWidth /= 2; }else { m_nGridWidth /= 1.5; } updateEditor(); } } hydrogen-0.9.6-beta3/src/gui/src/PatternEditor/PianoRollEditor.h000066400000000000000000000067721211146647700245330ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PIANO_ROLL_EDITOR_H #define PIANO_ROLL_EDITOR_H #include #include "../EventListener.h" #include namespace H2Core { class Pattern; class Note; } class PatternEditorPanel; class PianoRollEditor: public QWidget, public EventListener, public H2Core::Object { H2_OBJECT Q_OBJECT public: PianoRollEditor( QWidget *pParent, PatternEditorPanel *panel ); ~PianoRollEditor(); // Implements EventListener interface virtual void selectedPatternChangedEvent(); virtual void selectedInstrumentChangedEvent(); virtual void patternModifiedEvent(); //~ Implements EventListener interface void setResolution(uint res, bool bUseTriplets); void zoom_in(); void zoom_out(); void addOrDeleteNoteAction( int nColumn, int pressedLine, int selectedPatternNumber, int selectedinstrument, int oldLength, float oldVelocity, float oldPan_L, float oldPan_R, float oldLeadLag, int oldNoteKeyVal, int oldOctaveKeyVal, bool noteOff); void editNotePropertiesAction( int nColumn, int nRealColumn, int selectedPatternNumber, int selectedInstrumentnumber, float velocity, float pan_L, float pan_R, float leadLag, int pressedLine ); void editNoteLengthAction( int nColumn, int nRealColumn, int length, int selectedPatternNumber, int nSelectedInstrumentnumber, int pressedLine ); public slots: void updateEditor(); private: unsigned m_nRowHeight; unsigned m_nOctaves; uint m_nResolution; bool m_bRightBtnPressed; bool m_bUseTriplets; H2Core::Pattern *m_pPattern; float m_nGridWidth; uint m_nEditorWidth; uint m_nEditorHeight; QPixmap *m_pBackground; QPixmap *m_pTemp; int m_pOldPoint; PatternEditorPanel *m_pPatternEditorPanel; H2Core::Note *m_pDraggedNote; void createBackground(); void drawPattern(); void draw_grid(QPainter& p ); void drawNote( H2Core::Note *pNote, QPainter *pPainter ); virtual void paintEvent(QPaintEvent *ev); virtual void mousePressEvent(QMouseEvent *ev); virtual void mouseMoveEvent(QMouseEvent *ev); virtual void mouseReleaseEvent(QMouseEvent *ev); // virtual void keyPressEvent ( QKeyEvent * ev ); int getColumn(QMouseEvent *ev); int __selectedInstrumentnumber; int __selectedPatternNumber; int __nRealColumn; int __nColumn; int __pressedLine; int __oldLength; float __velocity; float __oldVelocity; float __pan_L; float __oldPan_L; float __pan_R; float __oldPan_R; float __leadLag; float __oldLeadLag; }; #endif hydrogen-0.9.6-beta3/src/gui/src/PatternFillDialog.cpp000066400000000000000000000041161211146647700225660ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * */ #include "PatternFillDialog.h" #include #include #include #include "Skin.h" const char* PatternFillDialog::__class_name = "PatternFillDialog"; PatternFillDialog::PatternFillDialog(QWidget* parent, FillRange* pRange) : QDialog(parent) , Object( __class_name ) { setupUi( this ); setFixedSize( width(), height() ); setWindowTitle( trUtf8( "Fill with selected pattern" ) ); __fill_range = pRange; __text_changed(); } PatternFillDialog::~PatternFillDialog() { } void PatternFillDialog::on_cancelBtn_clicked() { reject(); } void PatternFillDialog::on_okBtn_clicked() { __fill_range->fromVal = fromText->text().toUInt(); __fill_range->toVal = toText->text().toUInt(); __fill_range->bInsert = fillRB->isChecked(); accept(); } void PatternFillDialog::on_fromText_textChanged( const QString& ) { __text_changed(); } void PatternFillDialog::on_toText_textChanged( const QString& ) { __text_changed(); } void PatternFillDialog::__text_changed() { int fromVal, toVal; if ( ( fromVal = fromText->text().toUInt() ) && ( toVal = toText->text().toUInt() ) && ( toVal > fromVal ) ) { okBtn->setEnabled(true); } else { okBtn->setEnabled(false); } } hydrogen-0.9.6-beta3/src/gui/src/PatternFillDialog.h000066400000000000000000000032301211146647700222270ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PATTERN_FILL_DIALOG_H #define PATTERN_FILL_DIALOG_H #include #include "ui_PatternFillDialog_UI.h" #include namespace H2Core { class Pattern; } struct FillRange { int fromVal; int toVal; bool bInsert; }; /// /// Pattern Fill Dialog /// class PatternFillDialog : public QDialog, public Ui_PatternFillDialog_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: PatternFillDialog( QWidget* parent, FillRange* range ); ~PatternFillDialog(); private slots: void on_cancelBtn_clicked(); void on_okBtn_clicked(); void on_fromText_textChanged(const QString & text); void on_toText_textChanged(const QString & text); private: H2Core::Pattern* __pattern; FillRange* __fill_range; /// Does some name check void __text_changed(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/PatternPropertiesDialog.cpp000066400000000000000000000114371211146647700240400ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "PatternPropertiesDialog.h" #include "Skin.h" #include "HydrogenApp.h" #include "UndoActions.h" #include #include #include #include using namespace std; using namespace H2Core; PatternPropertiesDialog::PatternPropertiesDialog(QWidget* parent, Pattern *pattern, int nselectedPattern, bool savepattern) : QDialog(parent) { setupUi( this ); setWindowTitle( trUtf8( "Pattern properties" ) ); this->pattern = pattern; patternNameTxt->setText( pattern->get_name() ); patternNameTxt->selectAll(); patternDescTxt->setText( pattern->get_info() ); QString category = pattern->get_category(); __nselectedPattern = nselectedPattern; __savepattern = savepattern; if ( category == "" ){ category = "not_categorized"; } categoryComboBox->addItem( category ); Preferences *pPref = H2Core::Preferences::get_instance(); std::list::const_iterator cur_patternCategories; if ( pPref->m_patternCategories.size() == 0 ) { pPref->m_patternCategories.push_back( "not_categorized" ); } //categoryComboBox->clear(); for( cur_patternCategories = pPref->m_patternCategories.begin(); cur_patternCategories != pPref->m_patternCategories.end(); ++cur_patternCategories ) { if ( categoryComboBox->currentText() != *cur_patternCategories ){ categoryComboBox->addItem( *cur_patternCategories ); } } defaultNameCheck( pattern->get_name(), savepattern ); okBtn->setEnabled(true); } /** * Destructor */ PatternPropertiesDialog::~PatternPropertiesDialog() { } void PatternPropertiesDialog::on_cancelBtn_clicked() { reject(); } void PatternPropertiesDialog::on_okBtn_clicked() { QString pattName = patternNameTxt->text(); QString pattCategory = categoryComboBox->currentText(); QString pattInfo = patternDescTxt->toPlainText(); Preferences *pPref = H2Core::Preferences::get_instance(); std::list::const_iterator cur_testpatternCategories; bool test = true; for( cur_testpatternCategories = pPref->m_patternCategories.begin(); cur_testpatternCategories != pPref->m_patternCategories.end(); ++cur_testpatternCategories ) { if ( categoryComboBox->currentText() == *cur_testpatternCategories ){ test = false; } } if (test == true ) { pPref->m_patternCategories.push_back( pattCategory ); } if( __savepattern ){ pattern->set_name( pattName ); pattern->set_info( pattInfo ); pattern->set_category( pattCategory ); }else { SE_modifyPatternPropertiesAction *action = new SE_modifyPatternPropertiesAction( pattern->get_name() , pattern->get_info(), pattern->get_category(), pattName, pattInfo, pattCategory, __nselectedPattern ); HydrogenApp::get_instance()->m_undoStack->push( action ); } accept(); } void PatternPropertiesDialog::defaultNameCheck( QString pattName, bool savepattern ) { PatternList *patternList = Hydrogen::get_instance()->getSong()->get_pattern_list(); for (uint i = 0; i < patternList->size(); i++) { if ( patternList->get(i)->get_name() == pattName) { if (savepattern){ patternNameTxt->setText( trUtf8( "%1#2").arg(patternList->get(i)->get_name()) ); } else { patternNameTxt->setText( trUtf8( "%1").arg(patternList->get(i)->get_name()) ); } } } } bool PatternPropertiesDialog::nameCheck( QString pattName ) { if (pattName == "") { return false; } PatternList *patternList = Hydrogen::get_instance()->getSong()->get_pattern_list(); for (uint i = 0; i < patternList->size(); i++) { if ( patternList->get(i)->get_name() == pattName) { return false; } } return true; } void PatternPropertiesDialog::on_categoryComboBox_editTextChanged() { if ( categoryComboBox->currentText() == pattern->get_category() ) { okBtn->setEnabled( false ); } else { okBtn->setEnabled(true); } } void PatternPropertiesDialog::on_patternNameTxt_textChanged() { if ( nameCheck( patternNameTxt->text() ) ) { okBtn->setEnabled( true ); } else { okBtn->setEnabled( false ); } } hydrogen-0.9.6-beta3/src/gui/src/PatternPropertiesDialog.h000066400000000000000000000032111211146647700234740ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PATTERN_PROPERTIES_DIALOG_H #define PATTERN_PROPERTIES_DIALOG_H #include #include "ui_PatternPropertiesDialog_UI.h" namespace H2Core { class Pattern; } /// ///Pattern Properties Dialog /// class PatternPropertiesDialog : public QDialog, public Ui_PatternPropertiesDialog_UI { Q_OBJECT public: PatternPropertiesDialog( QWidget* parent, H2Core::Pattern* pattern, int nselectedPattern, bool save ); ~PatternPropertiesDialog(); /// Does some name check static bool nameCheck( QString ); void defaultNameCheck( QString , bool); private slots: void on_cancelBtn_clicked(); void on_okBtn_clicked(); void on_patternNameTxt_textChanged(); void on_categoryComboBox_editTextChanged(); private: H2Core::Pattern *pattern; int __nselectedPattern; bool __savepattern; }; #endif hydrogen-0.9.6-beta3/src/gui/src/PlayerControl.cpp000066400000000000000000001017221211146647700220200ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "Skin.h" #include "PlayerControl.h" #include "InstrumentRack.h" #include "HydrogenApp.h" #include "widgets/LCD.h" #include "widgets/Button.h" #include "widgets/CpuLoadWidget.h" #include "widgets/MidiActivityWidget.h" #include "widgets/PixmapWidget.h" #include "Mixer/Mixer.h" #include "SongEditor/SongEditorPanel.h" #include "PatternEditor/PatternEditorPanel.h" #include "InstrumentEditor/InstrumentEditorPanel.h" #include #include #include #include #include using namespace H2Core; //beatconter global int bcDisplaystatus = 0; //~ beatcounter const char* PlayerControl::__class_name = "PlayerControl"; PlayerControl::PlayerControl(QWidget *parent) : QLabel(parent) , Object( __class_name ) { // Background image setPixmap( QPixmap( Skin::getImagePath() + "/playerControlPanel/background.png" ) ); setScaledContents( true ); QHBoxLayout *hbox = new QHBoxLayout(); hbox->setSpacing( 0 ); hbox->setMargin( 0 ); setLayout( hbox ); // CONTROLS PixmapWidget *pControlsPanel = new PixmapWidget( NULL ); pControlsPanel->setFixedSize( 344, 43 ); pControlsPanel->setPixmap( "/playerControlPanel/background_Control.png" ); hbox->addWidget( pControlsPanel ); m_pTimeDisplayH = new LCDDisplay( pControlsPanel, LCDDigit::LARGE_GRAY, 2 ); m_pTimeDisplayH->move( 27, 12 ); m_pTimeDisplayH->setText( "00" ); m_pTimeDisplayM = new LCDDisplay( pControlsPanel, LCDDigit::LARGE_GRAY, 2 ); m_pTimeDisplayM->move( 61, 12 ); m_pTimeDisplayM->setText( "00" ); m_pTimeDisplayS = new LCDDisplay( pControlsPanel, LCDDigit::LARGE_GRAY, 2 ); m_pTimeDisplayS->move( 95, 12 ); m_pTimeDisplayS->setText( "00" ); m_pTimeDisplayMS = new LCDDisplay( pControlsPanel, LCDDigit::SMALL_GRAY, 3 ); m_pTimeDisplayMS->move( 122, 16 ); m_pTimeDisplayMS->setText( "000" ); // Rewind button m_pRwdBtn = new Button( pControlsPanel, "/playerControlPanel/btn_rwd_on.png", "/playerControlPanel/btn_rwd_off.png", "/playerControlPanel/btn_rwd_over.png", QSize(21, 15) ); m_pRwdBtn->move(168, 17); m_pRwdBtn->setToolTip( trUtf8("Rewind") ); connect(m_pRwdBtn, SIGNAL(clicked(Button*)), this, SLOT(RewindBtnClicked(Button*))); // Record button m_pRecBtn = new ToggleButton( pControlsPanel, "/playerControlPanel/btn_rec_on.png", "/playerControlPanel/btn_rec_off.png", "/playerControlPanel/btn_rec_over.png", QSize(21, 15) ); m_pRecBtn->move(195, 17); m_pRecBtn->setPressed(false); m_pRecBtn->setHidden(false); m_pRecBtn->setToolTip( trUtf8("Record") ); connect(m_pRecBtn, SIGNAL(clicked(Button*)), this, SLOT(recBtnClicked(Button*))); connect(m_pRecBtn, SIGNAL(rightClicked(Button*)), this, SLOT(recBtnRightClicked(Button*))); MidiAction* pAction = new MidiAction("RECORD_READY"); m_pRecBtn->setAction( pAction ); // Record+delete button m_pRecDelBtn = new ToggleButton( pControlsPanel, "/playerControlPanel/btn_recdel_on.png", "/playerControlPanel/btn_recdel_off.png", "/playerControlPanel/btn_recdel_over.png", QSize(21, 15) ); m_pRecDelBtn->move(195, 17); m_pRecDelBtn->setPressed(false); m_pRecDelBtn->setHidden(true); m_pRecDelBtn->setToolTip( trUtf8("Destructive Record") ); connect(m_pRecDelBtn, SIGNAL(clicked(Button*)), this, SLOT(recBtnClicked(Button*))); connect(m_pRecDelBtn, SIGNAL(rightClicked(Button*)), this, SLOT(recBtnRightClicked(Button*))); // Play button m_pPlayBtn = new ToggleButton( pControlsPanel, "/playerControlPanel/btn_play_on.png", "/playerControlPanel/btn_play_off.png", "/playerControlPanel/btn_play_over.png", QSize(26, 17) ); m_pPlayBtn->move(222, 17); m_pPlayBtn->setPressed(false); m_pPlayBtn->setToolTip( trUtf8("Play/ Pause") ); connect(m_pPlayBtn, SIGNAL(clicked(Button*)), this, SLOT(playBtnClicked(Button*))); pAction = new MidiAction("PLAY"); m_pPlayBtn->setAction( pAction ); // Stop button m_pStopBtn = new Button( pControlsPanel, "/playerControlPanel/btn_stop_on.png", "/playerControlPanel/btn_stop_off.png", "/playerControlPanel/btn_stop_over.png", QSize(21, 15) ); m_pStopBtn->move(254, 17); m_pStopBtn->setToolTip( trUtf8("Stop") ); connect(m_pStopBtn, SIGNAL(clicked(Button*)), this, SLOT(stopBtnClicked(Button*))); pAction = new MidiAction("STOP"); m_pStopBtn->setAction( pAction ); // Fast forward button m_pFfwdBtn = new Button( pControlsPanel, "/playerControlPanel/btn_ffwd_on.png", "/playerControlPanel/btn_ffwd_off.png", "/playerControlPanel/btn_ffwd_over.png", QSize(21, 15) ); m_pFfwdBtn->move(281, 17); m_pFfwdBtn->setToolTip( trUtf8("Fast Forward") ); connect(m_pFfwdBtn, SIGNAL(clicked(Button*)), this, SLOT(FFWDBtnClicked(Button*))); // Loop song button button m_pSongLoopBtn = new ToggleButton( pControlsPanel, "/playerControlPanel/btn_loop_on.png", "/playerControlPanel/btn_loop_off.png", "/playerControlPanel/btn_loop_over.png", QSize(21, 15) ); m_pSongLoopBtn->move(310, 17); m_pSongLoopBtn->setToolTip( trUtf8("Loop song") ); connect( m_pSongLoopBtn, SIGNAL( clicked(Button*) ), this, SLOT( songLoopBtnClicked(Button*) ) ); // Live mode button m_pLiveModeBtn = new ToggleButton( pControlsPanel, "/playerControlPanel/statusLED_on.png", "/playerControlPanel/statusLED_off.png", "/playerControlPanel/statusLED_off.png", QSize(68, 9) ); m_pLiveModeBtn->move(180, 5); m_pLiveModeBtn->setPressed(true); m_pLiveModeBtn->setToolTip( trUtf8("Pattern Mode") ); connect(m_pLiveModeBtn, SIGNAL(clicked(Button*)), this, SLOT(liveModeBtnClicked(Button*))); // Song mode button m_pSongModeBtn = new ToggleButton( pControlsPanel, "/playerControlPanel/statusLED_on.png", "/playerControlPanel/statusLED_off.png", "/playerControlPanel/statusLED_off.png", QSize(68, 9) ); m_pSongModeBtn->move(253, 5); m_pSongModeBtn->setPressed(false); m_pSongModeBtn->setToolTip( trUtf8("Song Mode") ); connect(m_pSongModeBtn, SIGNAL(clicked(Button*)), this, SLOT(songModeBtnClicked(Button*))); //~ CONTROLS // BC on off PixmapWidget *pControlsBBTBConoffPanel = new PixmapWidget( NULL ); pControlsBBTBConoffPanel->setFixedSize( 15, 43 ); pControlsBBTBConoffPanel->setPixmap( "/playerControlPanel/onoff.png" ); hbox->addWidget( pControlsBBTBConoffPanel ); m_pBConoffBtn = new ToggleButton( pControlsBBTBConoffPanel, "/playerControlPanel/bc_on.png", "/playerControlPanel/bc_off.png", "/playerControlPanel/bc_off.png", QSize(10, 40) ); m_pBConoffBtn->move(1, 1); m_pBConoffBtn->setPressed(false); m_pBConoffBtn->setToolTip( trUtf8("BeatCounter Panel on") ); connect(m_pBConoffBtn, SIGNAL(clicked(Button*)), this, SLOT(bconoffBtnClicked(Button*))); //~ BC on off //beatcounter m_pControlsBCPanel = new PixmapWidget( NULL ); m_pControlsBCPanel->setFixedSize( 86, 43 ); m_pControlsBCPanel->setPixmap( "/playerControlPanel/beatConter_BG.png" ); hbox->addWidget( m_pControlsBCPanel ); m_pBCDisplayZ = new LCDDisplay( m_pControlsBCPanel, LCDDigit::LARGE_GRAY, 2 ); m_pBCDisplayZ->move( 36, 8 ); m_pBCDisplayZ->setText( "--" ); m_pBCDisplayT = new LCDDisplay( m_pControlsBCPanel, LCDDigit::SMALL_GRAY, 1 ); m_pBCDisplayT->move( 23, 26 ); m_pBCDisplayT->setText( "4" ); m_pBCDisplayB = new LCDDisplay( m_pControlsBCPanel, LCDDigit::SMALL_GRAY, 2 ); m_pBCDisplayB->move( 39, 26 ); // set display from 4 to 04. fix against qt4 transparent problem // m_pBCDisplayB->setText( "4" ); m_pBCDisplayB->setText( "04" ); m_pBCTUpBtn = new Button( m_pControlsBCPanel, "/lcd/LCDSpinBox_up_on.png", "/lcd/LCDSpinBox_up_off.png", "/lcd/LCDSpinBox_up_over.png", QSize(16, 8) ); m_pBCTUpBtn->move( 4, 6 ); connect( m_pBCTUpBtn, SIGNAL( clicked( Button* ) ), this, SLOT(bctButtonClicked( Button* ) ) ); m_pBCTDownBtn = new Button( m_pControlsBCPanel, "/lcd/LCDSpinBox_down_on.png", "/lcd/LCDSpinBox_down_off.png", "/lcd/LCDSpinBox_down_over.png", QSize(16, 8) ); m_pBCTDownBtn->move( 4, 16 ); connect( m_pBCTDownBtn, SIGNAL( clicked( Button* ) ), this, SLOT(bctButtonClicked( Button* ) ) ); m_pBCBUpBtn = new Button( m_pControlsBCPanel, "/lcd/LCDSpinBox_up_on.png", "/lcd/LCDSpinBox_up_off.png", "/lcd/LCDSpinBox_up_over.png", QSize(16, 8) ); m_pBCBUpBtn->move( 65, 6 ); connect( m_pBCBUpBtn, SIGNAL( clicked( Button* ) ), this, SLOT(bcbButtonClicked( Button* ) ) ); m_pBCBDownBtn = new Button( m_pControlsBCPanel, "/lcd/LCDSpinBox_down_on.png", "/lcd/LCDSpinBox_down_off.png", "/lcd/LCDSpinBox_down_over.png", QSize(16, 8) ); m_pBCBDownBtn->move( 65, 16 ); connect( m_pBCBDownBtn, SIGNAL( clicked( Button* ) ), this, SLOT(bcbButtonClicked( Button* ) ) ); m_pBCSetPlayBtn = new ToggleButton( m_pControlsBCPanel, "/playerControlPanel/btn_set_play_on.png", "/playerControlPanel/btn_set_play_off.png", "/playerControlPanel/btn_set_play_off.png", QSize(15, 13) ); m_pBCSetPlayBtn->move(67, 27); m_pBCSetPlayBtn->setPressed(false); m_pBCSetPlayBtn->setToolTip( trUtf8("Set BPM / Set BPM and play") ); connect(m_pBCSetPlayBtn, SIGNAL(clicked(Button*)), this, SLOT(bcSetPlayBtnClicked(Button*))); //~ beatcounter // BPM PixmapWidget *pBPMPanel = new PixmapWidget( NULL ); pBPMPanel->setFixedSize( 145, 43 ); pBPMPanel->setPixmap( "/playerControlPanel/background_BPM.png" ); hbox->addWidget( pBPMPanel ); // LCD BPM SpinBox m_pLCDBPMSpinbox = new LCDSpinBox( pBPMPanel, 6, LCDSpinBox::FLOAT, 30, 400 ); m_pLCDBPMSpinbox->move( 43, 6 ); connect( m_pLCDBPMSpinbox, SIGNAL(changed(LCDSpinBox*)), this, SLOT(bpmChanged())); connect( m_pLCDBPMSpinbox, SIGNAL(spinboxClicked()), this, SLOT(bpmClicked())); m_pBPMUpBtn = new Button( pBPMPanel, "/lcd/LCDSpinBox_up_on.png", "/lcd/LCDSpinBox_up_off.png", "/lcd/LCDSpinBox_up_over.png", QSize(16, 8) ); m_pBPMUpBtn->move( 12, 5 ); connect( m_pBPMUpBtn, SIGNAL( clicked( Button* ) ), this, SLOT(bpmButtonClicked( Button* ) ) ); connect( m_pBPMUpBtn, SIGNAL( mousePress( Button* ) ), this, SLOT(bpmButtonPressed( Button* ) ) ); m_pBPMDownBtn = new Button( pBPMPanel, "/lcd/LCDSpinBox_down_on.png", "/lcd/LCDSpinBox_down_off.png", "/lcd/LCDSpinBox_down_over.png", QSize(16, 8) ); m_pBPMDownBtn->move( 12, 14 ); connect( m_pBPMDownBtn, SIGNAL( clicked( Button* ) ), this, SLOT(bpmButtonClicked( Button* ) ) ); connect( m_pBPMDownBtn, SIGNAL( mousePress( Button* ) ), this, SLOT(bpmButtonPressed( Button* ) ) ); m_pRubberBPMChange = new ToggleButton( pBPMPanel, "/playerControlPanel/rubber_on.png", "/playerControlPanel/rubber_off.png", "/playerControlPanel/rubber_off.png", QSize(9, 37) ); m_pRubberBPMChange->move( 133, 3 ); m_pRubberBPMChange->setToolTip( trUtf8("Recalculate Rubberband modified samples if bpm will change") ); m_pRubberBPMChange->setPressed( Preferences::get_instance()->getRubberBandBatchMode()); connect( m_pRubberBPMChange, SIGNAL( clicked( Button* ) ), this, SLOT(rubberbandButtonToggle( Button* ) ) ); QString program = Preferences::get_instance()->m_rubberBandCLIexecutable; //test the path. if test fails, no button if ( QFile( program ).exists() == false) { m_pRubberBPMChange->hide(); } m_pMetronomeWidget = new MetronomeWidget( pBPMPanel ); m_pMetronomeWidget->resize( 85, 5 ); m_pMetronomeWidget->move( 42, 25 ); m_pMetronomeBtn = new ToggleButton( pBPMPanel, "/playerControlPanel/btn_metronome_on.png", "/playerControlPanel/btn_metronome_off.png", "/playerControlPanel/btn_metronome_over.png", QSize( 20, 13 ) ); m_pMetronomeBtn->move( 10, 26 ); m_pMetronomeBtn->setToolTip( trUtf8("Switch metronome on/off") ); connect( m_pMetronomeBtn, SIGNAL( clicked( Button* ) ), this, SLOT(metronomeButtonClicked( Button* ) ) ); pAction = new MidiAction("TOGGLE_METRONOME"); m_pMetronomeBtn->setAction( pAction ); //~ BPM // JACK PixmapWidget *pJackPanel = new PixmapWidget( NULL ); pJackPanel->setFixedSize( 113, 43 ); pJackPanel->setPixmap( "/playerControlPanel/background_Jack.png" ); hbox->addWidget( pJackPanel ); // Jack transport mode button m_pJackTransportBtn = new ToggleButton( pJackPanel, "/playerControlPanel/jackTransportBtn_on.png", "/playerControlPanel/jackTransportBtn_off.png", "/playerControlPanel/jackTransportBtn_over.png", QSize(45, 13) ); m_pJackTransportBtn->hide(); m_pJackTransportBtn->setPressed(true); m_pJackTransportBtn->setToolTip( trUtf8("Jack-transport on/off") ); connect(m_pJackTransportBtn, SIGNAL(clicked(Button*)), this, SLOT(jackTransportBtnClicked(Button*))); m_pJackTransportBtn->move(10, 26); //jack time master m_pJackMasterBtn = new ToggleButton( pJackPanel, "/playerControlPanel/jackMasterBtn_on.png", "/playerControlPanel/jackMasterBtn_off.png", "/playerControlPanel/jackMasterBtn_over.png", QSize(45, 13) ); m_pJackMasterBtn->hide(); m_pJackMasterBtn->setPressed(true); m_pJackMasterBtn->setToolTip( trUtf8("Jack-Time-Master on/off") ); connect(m_pJackMasterBtn, SIGNAL(clicked(Button*)), this, SLOT(jackMasterBtnClicked(Button*))); m_pJackMasterBtn->move(56, 26); //~ jack time master m_pEngine = Hydrogen::get_instance(); // CPU load widget m_pCpuLoadWidget = new CpuLoadWidget( pJackPanel ); // Midi Activity widget m_pMidiActivityWidget = new MidiActivityWidget( pJackPanel ); m_pMidiActivityWidget->move( 10, 14 ); m_pCpuLoadWidget->move( 10, 4 ); //~ JACK PixmapWidget *pLcdBackGround = new PixmapWidget( NULL ); pLcdBackGround->setFixedSize( 256, 43 ); pLcdBackGround->setPixmap( "/playerControlPanel/lcd_background.png" ); hbox->addWidget( pLcdBackGround ); m_pShowMixerBtn = new ToggleButton( pLcdBackGround, "/skin_btn_on.png", "/skin_btn_off.png", "/skin_btn_over.png", QSize( 80, 17 ), true ); m_pShowMixerBtn->move( 7, 6 ); m_pShowMixerBtn->setToolTip( trUtf8( "Show mixer" ) ); m_pShowMixerBtn->setText( trUtf8( "Mixer" ) ); connect(m_pShowMixerBtn, SIGNAL(clicked(Button*)), this, SLOT(showButtonClicked(Button*))); m_pShowInstrumentRackBtn = new ToggleButton( pLcdBackGround, "/skin_btn_on.png", "/skin_btn_off.png", "/skin_btn_over.png", QSize( 160, 17 ), true ); m_pShowInstrumentRackBtn->move( 88, 6 ); m_pShowInstrumentRackBtn->setToolTip( trUtf8( "Show Instrument Rack" ) ); m_pShowInstrumentRackBtn->setText( trUtf8( "Instrument rack" ) ); connect( m_pShowInstrumentRackBtn, SIGNAL( clicked(Button*) ), this, SLOT( showButtonClicked( Button*)) ); m_pStatusLabel = new LCDDisplay(pLcdBackGround , LCDDigit::SMALL_BLUE, 30, true ); m_pStatusLabel->move( 7, 25 ); hbox->addStretch( 1000 ); // this must be the last widget in the HBOX!! QTimer *timer = new QTimer( this ); connect(timer, SIGNAL(timeout()), this, SLOT(updatePlayerControl())); timer->start(100); // update player control at 10 fps m_pBPMTimer = new QTimer( this ); connect(m_pBPMTimer, SIGNAL(timeout()), this, SLOT(onBpmTimerEvent())); m_pStatusTimer = new QTimer( this ); connect( m_pStatusTimer, SIGNAL( timeout() ), this, SLOT( onStatusTimerEvent() ) ); m_pScrollTimer = new QTimer( this ); connect( m_pScrollTimer, SIGNAL( timeout() ), this, SLOT( onScrollTimerEvent() ) ); m_pScrollMessage = ""; } PlayerControl::~PlayerControl() { } void PlayerControl::updatePlayerControl() { Preferences *pPref = Preferences::get_instance(); HydrogenApp *pH2App = HydrogenApp::get_instance(); m_pShowMixerBtn->setPressed( pH2App->getMixer()->isVisible() ); m_pShowInstrumentRackBtn->setPressed( pH2App->getInstrumentRack()->isVisible() ); int state = m_pEngine->getState(); if (state == STATE_PLAYING ) { m_pPlayBtn->setPressed(true); } else { m_pPlayBtn->setPressed(false); } if (pPref->getRecordEvents()) { m_pRecBtn->setPressed(true); m_pRecDelBtn->setPressed(true); } else { m_pRecBtn->setPressed(false); m_pRecDelBtn->setPressed(false); } if (pPref->getDestructiveRecord()) { if ( m_pRecDelBtn->isHidden() ) { m_pRecBtn->setHidden(true); m_pRecDelBtn->setHidden(false); } } else { if ( m_pRecBtn->isHidden() ) { m_pRecBtn->setHidden(false); m_pRecDelBtn->setHidden(true); } } Song *song = m_pEngine->getSong(); m_pSongLoopBtn->setPressed( song->is_loop_enabled() ); m_pLCDBPMSpinbox->setValue( song->__bpm ); if ( song->get_mode() == Song::PATTERN_MODE ) { m_pLiveModeBtn->setPressed( true ); m_pSongModeBtn->setPressed( false ); } else { m_pLiveModeBtn->setPressed( false ); m_pSongModeBtn->setPressed( true ); } //beatcounter if ( pPref->m_bbc == Preferences::BC_OFF ) { m_pControlsBCPanel->hide(); m_pBConoffBtn->setPressed(false); }else { m_pControlsBCPanel->show(); m_pBConoffBtn->setPressed(true); } if ( pPref->m_mmcsetplay == Preferences::SET_PLAY_OFF) { m_pBCSetPlayBtn->setPressed(false); }else { m_pBCSetPlayBtn->setPressed(true); } //~ beatcounter if ( pPref->m_sAudioDriver == "Jack" ) { m_pJackTransportBtn->show(); switch ( pPref->m_bJackTransportMode ) { case Preferences::NO_JACK_TRANSPORT: m_pJackTransportBtn->setPressed(false); // Jack Master Btn m_pJackMasterBtn->setPressed(false); break; case Preferences::USE_JACK_TRANSPORT: m_pJackTransportBtn->setPressed(true); //m_pJackMasterBtn->setPressed(false); break; } } else { m_pJackTransportBtn->hide(); } //jack transport master #ifdef H2CORE_HAVE_JACK if ( pPref->m_sAudioDriver == "Jack" ) { m_pJackMasterBtn->show(); switch ( pPref->m_bJackMasterMode ) { case Preferences::NO_JACK_TIME_MASTER: m_pJackMasterBtn->setPressed(false); break; case Preferences::USE_JACK_TIME_MASTER: if ( m_pJackTransportBtn->isPressed()){ m_pJackMasterBtn->setPressed(true); } else { m_pJackMasterBtn->setPressed(false); Hydrogen::get_instance()->offJackMaster(); pPref->m_bJackMasterMode = Preferences::NO_JACK_TIME_MASTER; } //m_pJackTransportBtn->setPressed(true); break; } } else { m_pJackMasterBtn->hide(); } #endif //~ jack transport master // time float fFrames = m_pEngine->getAudioOutput()->m_transport.m_nFrames; if ( Preferences::get_instance()->m_bJackTransportMode == Preferences::USE_JACK_TRANSPORT ) fFrames = m_pEngine->getHumantimeFrames(); float fSampleRate = m_pEngine->getAudioOutput()->getSampleRate(); if ( fSampleRate != 0 ) { float fSeconds = fFrames / fSampleRate; int nMSec = (int)( (fSeconds - (int)fSeconds) * 1000.0 ); int nSeconds = ( (int)fSeconds ) % 60; int nMins = (int)( fSeconds / 60.0 ) % 60; int nHours = (int)( fSeconds / 3600.0 ); char tmp[100]; sprintf(tmp, "%02d", nHours ); m_pTimeDisplayH->setText( QString( tmp ) ); sprintf(tmp, "%02d", nMins ); m_pTimeDisplayM->setText( QString( tmp ) ); sprintf(tmp, "%02d", nSeconds ); m_pTimeDisplayS->setText( QString( tmp ) ); sprintf(tmp, "%03d", nMSec ); m_pTimeDisplayMS->setText( QString( tmp ) ); } m_pMetronomeBtn->setPressed(pPref->m_bUseMetronome); //beatcounter get BC message char bcstatus[4]; int beatstocountondisplay = 1; beatstocountondisplay = m_pEngine->getBcStatus(); switch (beatstocountondisplay){ case 1 : if (bcDisplaystatus == 1){ Preferences::get_instance()->m_bbc = Preferences::BC_OFF; bcDisplaystatus = 0; } sprintf(bcstatus, "R"); m_pBCDisplayZ->setText( QString (bcstatus) ); break; default: if (Preferences::get_instance()->m_bbc == Preferences::BC_OFF){ Preferences::get_instance()->m_bbc = Preferences::BC_ON; bcDisplaystatus = 1; } sprintf(bcstatus, "%02d ", beatstocountondisplay -1); m_pBCDisplayZ->setText( QString (bcstatus) ); } //~ beatcounter //timeline check // if( Preferences::get_instance()->__usetimeline ){ // m_pRubberBPMChange->setPressed( false ); // Preferences::get_instance()->m_useTheRubberbandBpmChangeEvent = false; // } } /// Toggle record mode void PlayerControl::recBtnClicked(Button* ref) { if ( m_pEngine->getState() != STATE_PLAYING ) { if (ref->isPressed()) { Preferences::get_instance()->setRecordEvents(true); (HydrogenApp::get_instance())->setScrollStatusBarMessage(trUtf8("Record midi events = On" ), 2000 ); } else { Preferences::get_instance()->setRecordEvents(false); (HydrogenApp::get_instance())->setScrollStatusBarMessage(trUtf8("Record midi events = Off" ), 2000 ); } } } /// Toggle destructive/nondestructive move void PlayerControl::recBtnRightClicked(Button* ref) { UNUSED( ref ); if ( Preferences::get_instance()->getDestructiveRecord() ) { Preferences::get_instance()->setDestructiveRecord(false); (HydrogenApp::get_instance())->setScrollStatusBarMessage(trUtf8("Destructive mode = Off" ), 2000 ); } else { Preferences::get_instance()->setDestructiveRecord(true); (HydrogenApp::get_instance())->setScrollStatusBarMessage(trUtf8("Destructive mode = On" ), 2000 ); } HydrogenApp::get_instance()->enableDestructiveRecMode(); } /// Start audio engine void PlayerControl::playBtnClicked(Button* ref) { if (ref->isPressed()) { m_pEngine->sequencer_play(); (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8("Playing."), 5000); } else { // m_pPlayBtn->setPressed(true); m_pEngine->sequencer_stop(); (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8("Pause."), 5000); } } /// Stop audio engine void PlayerControl::stopBtnClicked(Button* ref) { UNUSED( ref ); m_pPlayBtn->setPressed(false); m_pEngine->sequencer_stop(); m_pEngine->setPatternPos( 0 ); (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8("Stopped."), 5000); Hydrogen::get_instance()->setTimelineBpm(); } /// Set Song mode void PlayerControl::songModeBtnClicked(Button* ref) { UNUSED( ref ); m_pEngine->sequencer_stop(); m_pEngine->setPatternPos( 0 ); // from start m_pEngine->getSong()->set_mode( Song::SONG_MODE ); m_pSongModeBtn->setPressed(true); m_pLiveModeBtn->setPressed(false); (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8("Song mode selected."), 5000); } ///Set Live mode void PlayerControl::liveModeBtnClicked(Button* ref) { UNUSED( ref ); m_pEngine->sequencer_stop(); m_pEngine->getSong()->set_mode( Song::PATTERN_MODE ); //m_pEngine->sequencer_setNextPattern( m_pEngine->getSelectedPatternNumber() ); // imposto il pattern correntemente selezionato come il prossimo da suonare m_pSongModeBtn->setPressed(false); m_pLiveModeBtn->setPressed(true); (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8("Pattern mode selected."), 5000); } void PlayerControl::bpmChanged() { float fNewBpmValue = m_pLCDBPMSpinbox->getValue(); if (fNewBpmValue < 30) { fNewBpmValue = 30; } else if (fNewBpmValue > 400 ) { fNewBpmValue = 400; } m_pEngine->getSong()->__is_modified = true; AudioEngine::get_instance()->lock( RIGHT_HERE ); m_pEngine->setBPM( fNewBpmValue ); AudioEngine::get_instance()->unlock(); } //beatcounter void PlayerControl::bconoffBtnClicked( Button* ) { Preferences *pPref = Preferences::get_instance(); if (m_pBConoffBtn->isPressed()) { pPref->m_bbc = Preferences::BC_ON; (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8(" BC Panel on"), 5000); m_pControlsBCPanel->show(); } else { pPref->m_bbc = Preferences::BC_OFF; (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8(" BC Panel off"), 5000); m_pControlsBCPanel->hide(); } } void PlayerControl::bcSetPlayBtnClicked( Button* ) { Preferences *pPref = Preferences::get_instance(); if (m_pBCSetPlayBtn->isPressed()) { pPref->m_mmcsetplay = Preferences::SET_PLAY_ON; (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8(" Count BPM and start PLAY"), 5000); } else { pPref->m_mmcsetplay = Preferences::SET_PLAY_OFF; (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8(" Count and set BPM"), 5000); } } void PlayerControl::rubberbandButtonToggle(Button* ) { Preferences *pPref = Preferences::get_instance(); if (m_pRubberBPMChange->isPressed()) { EventQueue::get_instance()->push_event( EVENT_RECALCULATERUBBERBAND, -1); pPref->setRubberBandBatchMode(true); (HydrogenApp::get_instance())->setScrollStatusBarMessage(trUtf8("Recalculate all samples using Rubberband ON"), 2000); } else { pPref->setRubberBandBatchMode(false); (HydrogenApp::get_instance())->setScrollStatusBarMessage(trUtf8("Recalculate all samples using Rubberband OFF"), 2000); } } void PlayerControl::bcbButtonClicked( Button* bBtn) { int tmp = m_pEngine->getbeatsToCount(); char tmpb[3]; // m_pBCBUpBtn if ( bBtn == m_pBCBUpBtn ) { tmp ++; if (tmp > 16) tmp = 2; //small fix against qt4 png transparent problem //think this will be solved in next time // if (tmp < 10 ){ // sprintf(tmpb, "%01d", tmp ); // }else // { sprintf(tmpb, "%02d", tmp ); // } m_pBCDisplayB->setText( QString( tmpb ) ); m_pEngine->setbeatsToCount( tmp ); } else { tmp --; if (tmp < 2 ) tmp = 16; //small fix against qt4 png transparent problem //think this will be solved in next time // if (tmp < 10 ){ // sprintf(tmpb, "%01d", tmp ); // }else // { sprintf(tmpb, "%02d", tmp ); // } m_pBCDisplayB->setText( QString( tmpb ) ); m_pEngine->setbeatsToCount( tmp ); } } void PlayerControl::bctButtonClicked( Button* tBtn) { float tmp = m_pEngine->getNoteLength() * 4; if ( tBtn == m_pBCTUpBtn) { tmp = tmp / 2 ; if (tmp < 1) tmp = 8; m_pBCDisplayT->setText( QString::number( tmp ) ); m_pEngine->setNoteLength( (tmp) / 4 ); } else { tmp = tmp * 2; if (tmp > 8 ) tmp = 1; m_pBCDisplayT->setText( QString::number(tmp) ); m_pEngine->setNoteLength( (tmp) / 4 ); } } //~ beatcounter void PlayerControl::jackTransportBtnClicked( Button* ) { Preferences *pPref = Preferences::get_instance(); if (pPref->m_sAudioDriver != "Jack") { QMessageBox::warning( this, "Hydrogen", trUtf8( "JACK-transport will work only with JACK driver." ) ); return; } if (m_pJackTransportBtn->isPressed()) { AudioEngine::get_instance()->lock( RIGHT_HERE ); pPref->m_bJackTransportMode = Preferences::USE_JACK_TRANSPORT; AudioEngine::get_instance()->unlock(); (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8("Jack-transport mode = On"), 5000); m_pJackMasterBtn->setDisabled( false ); } else { AudioEngine::get_instance()->lock( RIGHT_HERE ); pPref->m_bJackTransportMode = Preferences::NO_JACK_TRANSPORT; AudioEngine::get_instance()->unlock(); (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8("Jack-transport mode = Off"), 5000); m_pJackMasterBtn->setDisabled( true ); } } //jack time master void PlayerControl::jackMasterBtnClicked( Button* ) { #ifdef H2CORE_HAVE_JACK Preferences *pPref = Preferences::get_instance(); if (pPref->m_sAudioDriver != "Jack") { QMessageBox::warning( this, "Hydrogen", trUtf8( "JACK-transport will work only with JACK driver." ) ); return; } if (m_pJackMasterBtn->isPressed()) { AudioEngine::get_instance()->lock( RIGHT_HERE ); pPref->m_bJackMasterMode = Preferences::USE_JACK_TIME_MASTER; AudioEngine::get_instance()->unlock(); (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8(" Jack-Time-Master mode = On"), 5000); Hydrogen::get_instance()->onJackMaster(); } else { AudioEngine::get_instance()->lock( RIGHT_HERE ); pPref->m_bJackMasterMode = Preferences::NO_JACK_TIME_MASTER; AudioEngine::get_instance()->unlock(); (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8(" Jack-Time-Master mode = Off"), 5000); //m_pControlsBBTPanel->hide(); Hydrogen::get_instance()->offJackMaster(); } #endif } //~ jack time master void PlayerControl::bpmClicked() { bool bIsOkPressed; double fNewVal= QInputDialog::getDouble( this, "Hydrogen", trUtf8( "New BPM value" ), m_pLCDBPMSpinbox->getValue(), 10, 400, 2, &bIsOkPressed ); if ( bIsOkPressed ) { if ( fNewVal < 30 ) { return; } m_pEngine->getSong()->__is_modified = true; AudioEngine::get_instance()->lock( RIGHT_HERE ); m_pEngine->setBPM( fNewVal ); AudioEngine::get_instance()->unlock(); } else { // user entered nothing or pressed Cancel } } void PlayerControl::bpmButtonPressed( Button* pBtn) { if ( pBtn == m_pBPMUpBtn ) { m_pLCDBPMSpinbox->upBtnClicked(); m_nBPMIncrement = 1; } else { m_pLCDBPMSpinbox->downBtnClicked(); m_nBPMIncrement = -1; } m_pBPMTimer->start( 100 ); } void PlayerControl::bpmButtonClicked( Button* ) { m_pBPMTimer->stop(); } void PlayerControl::onBpmTimerEvent() { if (m_nBPMIncrement == 1) { m_pLCDBPMSpinbox->upBtnClicked(); } else { m_pLCDBPMSpinbox->downBtnClicked(); } } void PlayerControl::FFWDBtnClicked( Button* ) { Hydrogen *pEngine = Hydrogen::get_instance(); pEngine->setPatternPos( pEngine->getPatternPos() + 1 ); Hydrogen::get_instance()->setTimelineBpm(); } void PlayerControl::RewindBtnClicked( Button* ) { Hydrogen *pEngine = Hydrogen::get_instance(); pEngine->setPatternPos( pEngine->getPatternPos() - 1 ); Hydrogen::get_instance()->setTimelineBpm(); } void PlayerControl::songLoopBtnClicked( Button* ) { Hydrogen *pEngine = Hydrogen::get_instance(); Song *song = pEngine->getSong(); song->set_loop_enabled( ! song->is_loop_enabled() ); song->__is_modified = true; if ( song->is_loop_enabled() ) { HydrogenApp::get_instance()->setStatusBarMessage(trUtf8("Loop song = On"), 5000); } else { HydrogenApp::get_instance()->setStatusBarMessage(trUtf8("Loop song = Off"), 5000); } } void PlayerControl::metronomeButtonClicked(Button* ref) { Preferences::get_instance()->m_bUseMetronome = ref->isPressed(); } void PlayerControl::showButtonClicked( Button* pRef ) { //INFOLOG( "[showButtonClicked]" ); HydrogenApp *pH2App = HydrogenApp::get_instance(); if ( pRef == m_pShowMixerBtn ) { bool isVisible = pH2App->getMixer()->isVisible(); pH2App->showMixer( !isVisible ); } else if ( pRef == m_pShowInstrumentRackBtn ) { bool isVisible = pH2App->getInstrumentRack()->isVisible(); pH2App->showInstrumentPanel( isVisible ); } } void PlayerControl::showMessage( const QString& msg, int msec ) { if ( m_pScrollTimer->isActive ()) m_pScrollTimer->stop(); m_pStatusLabel->setText( msg ); m_pStatusTimer->start( msec ); } void PlayerControl::showScrollMessage( const QString& msg, int msec, bool test ) { if ( test == false ){ m_pStatusLabel->setText( msg ); m_pScrollTimer->start( msec ); }else { m_pScrollMessage = msg; m_pStatusLabel->setText( msg ); m_pStatusTimer->start( msec ); m_pScrollTimer->start( msec ); } } void PlayerControl::onScrollTimerEvent() { int lwl = 25; int msgLength = m_pScrollMessage.length(); if ( msgLength > lwl) m_pScrollMessage = m_pScrollMessage.right( msgLength - 1 ); m_pScrollTimer->stop(); if ( msgLength > lwl){ showScrollMessage( m_pScrollMessage, 150, false ); }else { showMessage( m_pScrollMessage, 2000 ); } } void PlayerControl::onStatusTimerEvent() { resetStatusLabel(); } void PlayerControl::resetStatusLabel() { m_pStatusTimer->stop(); m_pStatusLabel->setText( "" ); } //:::::::::::::::::::::::::::::::::::::::::::::::: const char* MetronomeWidget::__class_name = "MetronomeWidget"; MetronomeWidget::MetronomeWidget(QWidget *pParent) : QWidget( pParent ) , Object( __class_name ) , m_nValue( 0 ) , m_state( METRO_OFF ) { // INFOLOG( "INIT" ); HydrogenApp::get_instance()->addEventListener( this ); m_metro_off.load( Skin::getImagePath() + "/playerControlPanel/metronome_off.png" ); m_metro_on_firstbeat.load( Skin::getImagePath() + "/playerControlPanel/metronome_up.png" ); m_metro_on.load( Skin::getImagePath() + "/playerControlPanel/metronome_down.png" ); QTimer *timer = new QTimer(this); connect( timer, SIGNAL( timeout() ), this, SLOT( updateWidget() ) ); timer->start(50); // update player control at 20 fps } MetronomeWidget::~MetronomeWidget() { // INFOLOG( "DESTROY" ); } void MetronomeWidget::metronomeEvent( int nValue ) { if (nValue == 2) // 2 = set pattern position is not needed here return; if (nValue == 1) { m_state = METRO_FIRST; m_nValue = 5; } else { m_state = METRO_ON; m_nValue = 5; } updateWidget(); } void MetronomeWidget::updateWidget() { if ( m_nValue > 0 ) { m_nValue -= 1; if (m_nValue == 0 ) { m_nValue = 0; m_state = METRO_OFF; } update(); } } void MetronomeWidget::paintEvent( QPaintEvent* ev) { QPainter painter(this); switch( m_state ) { case METRO_FIRST: painter.drawPixmap( ev->rect(), m_metro_on_firstbeat, ev->rect() ); break; case METRO_ON: painter.drawPixmap( ev->rect(), m_metro_on, ev->rect() ); break; case METRO_OFF: painter.drawPixmap( ev->rect(), m_metro_off, ev->rect() ); break; } } hydrogen-0.9.6-beta3/src/gui/src/PlayerControl.h000066400000000000000000000107431211146647700214670ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PLAYER_CONTROL_H #define PLAYER_CONTROL_H #include #include "EventListener.h" #include namespace H2Core { class Hydrogen; } class LCDSpinBox; class LCDDisplay; class Button; class ToggleButton; class CpuLoadWidget; class MidiActivityWidget; class PixmapWidget; /// /// /// class MetronomeWidget : public QWidget,public EventListener, public H2Core::Object { H2_OBJECT Q_OBJECT public: MetronomeWidget(QWidget *pParent); ~MetronomeWidget(); virtual void metronomeEvent( int nValue ); virtual void paintEvent( QPaintEvent*); public slots: void updateWidget(); private: enum m_state { METRO_FIRST, METRO_ON, METRO_OFF }; int m_nValue; int m_state; QPixmap m_metro_off; QPixmap m_metro_on_firstbeat; QPixmap m_metro_on; }; /// /// Player control panel /// class PlayerControl : public QLabel, public H2Core::Object { H2_OBJECT Q_OBJECT public: PlayerControl(QWidget *parent); ~PlayerControl(); void showMessage( const QString& msg, int msec ); void showScrollMessage( const QString& msg, int msec, bool test ); void resetStatusLabel(); private slots: void recBtnClicked(Button* ref); void recBtnRightClicked(Button* ref); void playBtnClicked(Button* ref); void stopBtnClicked(Button* ref); void updatePlayerControl(); void songModeBtnClicked(Button* ref); void liveModeBtnClicked(Button* ref); void jackTransportBtnClicked(Button* ref); //jack time master void jackMasterBtnClicked(Button* ref); //~ jack time master void bpmChanged(); void bpmButtonClicked( Button *pRef ); void bpmButtonPressed( Button* pBtn); void bpmClicked(); void FFWDBtnClicked(Button *pRef); void RewindBtnClicked(Button *pRef); void songLoopBtnClicked(Button* ref); void metronomeButtonClicked(Button* ref); void onBpmTimerEvent(); void onStatusTimerEvent(); void onScrollTimerEvent(); void showButtonClicked( Button* pRef ); //beatcounter void bconoffBtnClicked( Button* ref); void bcSetPlayBtnClicked(Button* ref); void bcbButtonClicked(Button* bBtn); void bctButtonClicked(Button* tBtn); //~ beatcounter //rubberband void rubberbandButtonToggle(Button* ref); private: H2Core::Hydrogen *m_pEngine; QPixmap m_background; Button *m_pRwdBtn; ToggleButton *m_pRecBtn; ToggleButton *m_pRecDelBtn; ToggleButton *m_pPlayBtn; Button *m_pStopBtn; Button *m_pFfwdBtn; ToggleButton *m_pSongLoopBtn; ToggleButton *m_pSongModeBtn; ToggleButton *m_pLiveModeBtn; //beatcounter ToggleButton *m_pBConoffBtn; ToggleButton *m_pBCSpaceBtn; ToggleButton *m_pBCSetPlayBtn; Button *m_pBCTUpBtn; Button *m_pBCTDownBtn; Button *m_pBCBUpBtn; Button *m_pBCBDownBtn; //~ beatcounter //rubberbandBPMChange ToggleButton *m_pRubberBPMChange; ToggleButton *m_pJackTransportBtn; //jack time master ToggleButton *m_pJackMasterBtn; //~ jack time master Button *m_pBPMUpBtn; Button *m_pBPMDownBtn; CpuLoadWidget *m_pCpuLoadWidget; MidiActivityWidget *m_pMidiActivityWidget; LCDSpinBox *m_pLCDBPMSpinbox; LCDDisplay *m_pTimeDisplayH; LCDDisplay *m_pTimeDisplayM; LCDDisplay *m_pTimeDisplayS; LCDDisplay *m_pTimeDisplayMS; //beatcounter PixmapWidget *m_pControlsBCPanel; LCDDisplay *m_pBCDisplayZ; LCDDisplay *m_pBCDisplayB; LCDDisplay *m_pBCDisplayT; //~ beatcounter MetronomeWidget *m_pMetronomeWidget; ToggleButton *m_pMetronomeBtn; QTimer *m_pBPMTimer; int m_nBPMIncrement; ToggleButton *m_pShowMixerBtn; ToggleButton *m_pShowInstrumentRackBtn; LCDDisplay *m_pStatusLabel; QTimer *m_pStatusTimer; QTimer *m_pScrollTimer; QString m_pScrollMessage; }; #endif hydrogen-0.9.6-beta3/src/gui/src/PlaylistEditor/000077500000000000000000000000001211146647700214645ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/src/PlaylistEditor/PlaylistDialog.cpp000066400000000000000000000736711211146647700251270ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "PlaylistDialog.h" #include "../HydrogenApp.h" #include "../InstrumentRack.h" #include "SoundLibrary/SoundLibraryPanel.h" #include "SongEditor/SongEditorPanel.h" #include "widgets/PixmapWidget.h" #include #include #include #include #include #include #include "../widgets/Button.h" #include #include #include #include #include #include #include #include #include #include using namespace H2Core; using namespace std; const char* PlaylistDialog::__class_name = "PlaylistDialog"; PlaylistDialog::PlaylistDialog ( QWidget* pParent ) : QDialog ( pParent ) , Object ( __class_name ) { setupUi ( this ); INFOLOG ( "INIT" ); setWindowTitle ( trUtf8 ( "Playlist Browser" ) + QString(" - ") + QString( Playlist::get_instance()->__playlistName ) ); setFixedSize ( width(), height() ); installEventFilter( this ); // menubar QMenuBar *m_pMenubar = new QMenuBar( this ); // setMenuBar( m_pMenubar ); // Playlist menu QMenu *m_pPlaylistMenu = m_pMenubar->addMenu( trUtf8( "&Playlist" ) ); m_pPlaylistMenu->addAction( trUtf8( "Add song to Play&list" ), this, SLOT( addSong() ), QKeySequence( "" ) ); m_pPlaylistMenu->addAction( trUtf8( "Add ¤t song to Playlist" ), this, SLOT( addCurrentSong() ), QKeySequence( "" ) ); m_pPlaylistMenu->addSeparator(); // ----- m_pPlaylistMenu->addAction( trUtf8( "&Remove selected song from Playlist" ), this, SLOT( removeFromList() ), QKeySequence( "" ) ); m_pPlaylistMenu->addAction( trUtf8( "&New Playlist" ), this, SLOT( clearPlaylist() ), QKeySequence( "" ) ); m_pPlaylistMenu->addSeparator(); m_pPlaylistMenu->addAction( trUtf8( "&Open Playlist" ), this, SLOT( loadList() ), QKeySequence( "" ) ); m_pPlaylistMenu->addSeparator(); m_pPlaylistMenu->addAction( trUtf8( "&Save Playlist" ), this, SLOT( saveList() ), QKeySequence( "" ) ); m_pPlaylistMenu->addAction( trUtf8( "Save Playlist &as" ), this, SLOT( saveListAs() ), QKeySequence( "" ) ); #ifdef WIN32 //no scripts under windows #else // Script menu QMenu *m_pScriptMenu = m_pMenubar->addMenu( trUtf8( "&Scripts" ) ); m_pScriptMenu->addAction( trUtf8( "&Add Script to selected song" ), this, SLOT( loadScript() ), QKeySequence( "" ) ); m_pScriptMenu->addAction( trUtf8( "&Edit selected Script" ), this, SLOT( editScript() ), QKeySequence( "" ) ); m_pScriptMenu->addSeparator(); m_pScriptMenu->addAction( trUtf8( "&Remove selected Script" ), this, SLOT( removeScript() ), QKeySequence( "" ) ); m_pScriptMenu->addSeparator(); m_pScriptMenu->addAction( trUtf8( "&Create a new Script" ), this, SLOT( newScript() ), QKeySequence( "" ) ); #endif // CONTROLS PixmapWidget *pControlsPanel = new PixmapWidget( NULL ); pControlsPanel->setFixedSize( 119, 32 ); pControlsPanel->setPixmap( "/playerControlPanel/playlist_background_Control.png" ); vboxLayout->addWidget( pControlsPanel ); // Rewind button m_pRwdBtn = new Button( pControlsPanel, "/playerControlPanel/btn_rwd_on.png", "/playerControlPanel/btn_rwd_off.png", "/playerControlPanel/btn_rwd_over.png", QSize(21, 15) ); m_pRwdBtn->move(6, 6); m_pRwdBtn->setToolTip( trUtf8("Rewind") ); connect(m_pRwdBtn, SIGNAL(clicked(Button*)), this, SLOT(rewindBtnClicked(Button*))); // Play button m_pPlayBtn = new ToggleButton( pControlsPanel, "/playerControlPanel/btn_play_on.png", "/playerControlPanel/btn_play_off.png", "/playerControlPanel/btn_play_over.png", QSize(33, 17) ); m_pPlayBtn->move(33, 6); m_pPlayBtn->setPressed(false); m_pPlayBtn->setToolTip( trUtf8("Play/ Pause/ Load selected song") ); connect(m_pPlayBtn, SIGNAL(clicked(Button*)), this, SLOT(nodePlayBTN(Button*))); // Stop button m_pStopBtn = new Button( pControlsPanel, "/playerControlPanel/btn_stop_on.png", "/playerControlPanel/btn_stop_off.png", "/playerControlPanel/btn_stop_over.png", QSize(21, 15) ); m_pStopBtn->move(65, 6); m_pStopBtn->setToolTip( trUtf8("Stop") ); connect(m_pStopBtn, SIGNAL(clicked(Button*)), this, SLOT(nodeStopBTN(Button*))); // Fast forward button m_pFfwdBtn = new Button( pControlsPanel, "/playerControlPanel/btn_ffwd_on.png", "/playerControlPanel/btn_ffwd_off.png", "/playerControlPanel/btn_ffwd_over.png", QSize(21, 15) ); m_pFfwdBtn->move(92, 6); m_pFfwdBtn->setToolTip( trUtf8("Fast Forward") ); connect(m_pFfwdBtn, SIGNAL(clicked(Button*)), this, SLOT(ffWDBtnClicked(Button*))); #ifdef WIN32 QStringList headers; headers << trUtf8 ( "Song list" ); QTreeWidgetItem* header = new QTreeWidgetItem ( headers ); m_pPlaylistTree->setHeaderItem ( header ); m_pPlaylistTree->setAlternatingRowColors( true ); /*addSongBTN->setEnabled ( true ); loadListBTN->setEnabled ( true ); removeFromListBTN->setEnabled ( false ); removeFromListBTN->setEnabled ( false ); saveListBTN->setEnabled ( false ); saveListAsBTN->setEnabled ( false ); loadScriptBTN->hide(); removeScriptBTN->hide(); editScriptBTN->hide(); newScriptBTN->hide(); clearPlBTN->setEnabled ( false );*/ QVBoxLayout *sideBarLayout = new QVBoxLayout(sideBarWidget); sideBarLayout->setSpacing(0); sideBarLayout->setMargin(0); #else QStringList headers; headers << trUtf8 ( "Song list" ) << trUtf8 ( "Script" ) << trUtf8 ( "exec Script" ); QTreeWidgetItem* header = new QTreeWidgetItem ( headers ); m_pPlaylistTree->setHeaderItem ( header ); m_pPlaylistTree->header()->resizeSection ( 0, 405 ); m_pPlaylistTree->header()->resizeSection ( 1, 405 ); m_pPlaylistTree->header()->resizeSection ( 2, 15 ); m_pPlaylistTree->setAlternatingRowColors( true ); QVBoxLayout *sideBarLayout = new QVBoxLayout(sideBarWidget); sideBarLayout->setSpacing(0); sideBarLayout->setMargin(0); #endif // zoom-in btn Button *up_btn = new Button( NULL, "/songEditor/btn_up_on.png", "/songEditor/btn_up_off.png", "/songEditor/btn_up_over.png", QSize(18, 13) ); up_btn->setFontSize(7); up_btn->setToolTip( trUtf8( "sort" ) ); connect(up_btn, SIGNAL(clicked(Button*)), this, SLOT(o_upBClicked()) ); sideBarLayout->addWidget(up_btn); // zoom-in btn Button *down_btn = new Button( NULL, "/songEditor/btn_down_on.png", "/songEditor/btn_down_off.png", "/songEditor/btn_down_over.png", QSize(18, 13) ); down_btn->setFontSize(7); down_btn->setToolTip( trUtf8( "sort" ) ); connect(down_btn, SIGNAL(clicked(Button*)), this, SLOT(o_downBClicked())); sideBarLayout->addWidget(down_btn); //restore the playlist if( Hydrogen::get_instance()->m_PlayList.size() > 0 ){ for ( uint i = 0; i < Hydrogen::get_instance()->m_PlayList.size(); ++i ){ QTreeWidgetItem* m_pPlaylistItem = new QTreeWidgetItem ( m_pPlaylistTree ); m_pPlaylistItem->setText ( 0, Hydrogen::get_instance()->m_PlayList[i].m_hFile ); m_pPlaylistItem->setText ( 1, Hydrogen::get_instance()->m_PlayList[i].m_hScript ); if ( Hydrogen::get_instance()->m_PlayList[i].m_hScriptEnabled == "Use Script" ) { m_pPlaylistItem->setCheckState( 2, Qt::Checked ); }else{ m_pPlaylistItem->setCheckState( 2, Qt::Unchecked ); } } //restore the selected item int selected = Playlist::get_instance()->getActiveSongNumber(); int Selected = Playlist::get_instance()->getSelectedSongNr(); if( selected == -1 && Selected == -1 ) return; int aselected = 0; if( selected == -1 ){ aselected = Selected; }else { aselected = selected ; } QTreeWidget* m_pPlaylist = m_pPlaylistTree; QTreeWidgetItem* m_pPlaylistItem = m_pPlaylist->topLevelItem ( aselected ); m_pPlaylistItem->setBackgroundColor ( 0, QColor( 50, 50, 50) ); m_pPlaylistItem->setBackgroundColor ( 1, QColor( 50, 50, 50) ); m_pPlaylistItem->setBackgroundColor ( 2, QColor( 50, 50, 50) ); } timer = new QTimer( this ); connect(timer, SIGNAL(timeout() ), this, SLOT( updateActiveSongNumber() ) ); timer->start( 1000 ); // update player control at 1 fps } PlaylistDialog::~PlaylistDialog() { INFOLOG ( "DESTROY" ); } void PlaylistDialog::addSong() { static QString songDir = Preferences::get_instance()->getDataDirectory() + "/songs";; std::auto_ptr fd( new QFileDialog ); fd->setFileMode ( QFileDialog::ExistingFiles ); fd->setFilter ( "Hydrogen song (*.h2song)" ); fd->setDirectory ( songDir ); fd->setWindowTitle ( trUtf8 ( "Add Song to PlayList" ) ); QString filename; if ( fd->exec() == QDialog::Accepted ){ int i; for(i=0; i < fd->selectedFiles().size(); i++){ filename = fd->selectedFiles().at(i); updatePlayListNode ( filename ); } } } void PlaylistDialog::addCurrentSong() { Song *song = Hydrogen::get_instance()->getSong(); QString filename = song->get_filename(); if (filename == "") { // just in case! QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Please save your song first" )); return; } // filename += ".h2song"; updatePlayListNode ( filename ); } void PlaylistDialog::removeFromList() { QTreeWidget* m_pPlaylist = m_pPlaylistTree; QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem(); int index = m_pPlaylist->indexOfTopLevelItem ( m_pPlaylistItem ); QTreeWidgetItem * m_pItem = m_pPlaylist->topLevelItem ( 1 ); if (m_pPlaylistItem == NULL){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song selected!" )); return; }else { if (m_pItem == 0){ m_pPlaylist->clear(); Hydrogen::get_instance()->m_PlayList.clear(); Playlist::get_instance()->setSelectedSongNr( -1 ); Playlist::get_instance()->setActiveSongNumber( -1 ); Playlist::get_instance()->__playlistName = ""; setWindowTitle ( trUtf8 ( "Playlist Browser" ) ); return; }else { ///avoid segfault if the last item will be removed!! delete m_pPlaylistItem; updatePlayListVector(); if ( Playlist::get_instance()->getActiveSongNumber() == index ){ Playlist::get_instance()->setActiveSongNumber( -1 ); }else if ( Playlist::get_instance()->getActiveSongNumber() > index ){ Playlist::get_instance()->setActiveSongNumber( Playlist::get_instance()->getActiveSongNumber() -1 ); } } } } void PlaylistDialog::clearPlaylist() { QTreeWidget* m_pPlaylist = m_pPlaylistTree; m_pPlaylist->clear(); Hydrogen::get_instance()->m_PlayList.clear(); Playlist::get_instance()->setSelectedSongNr( -1 ); Playlist::get_instance()->setActiveSongNumber( -1 ); Playlist::get_instance()->__playlistName = ""; setWindowTitle ( trUtf8 ( "Playlist Browser" ) ); return; } void PlaylistDialog::updatePlayListNode ( QString file ) { QTreeWidgetItem* m_pPlaylistItem = new QTreeWidgetItem ( m_pPlaylistTree ); m_pPlaylistItem->setText ( 0, file ); m_pPlaylistItem->setText ( 1, trUtf8("no Script") ); m_pPlaylistItem->setCheckState( 2, Qt::Unchecked ); updatePlayListVector(); QTreeWidget* m_pPlaylist = m_pPlaylistTree; m_pPlaylist->setCurrentItem ( m_pPlaylistItem ); } void PlaylistDialog::loadList() { static QString sDirectory = Preferences::get_instance()->getDataDirectory() + "playlists/" ; std::auto_ptr fd( new QFileDialog ); fd->setFileMode ( QFileDialog::ExistingFile ); fd->setFilter ( "Hydrogen playlist (*.h2playlist)" ); fd->setDirectory ( sDirectory ); fd->setWindowTitle ( trUtf8 ( "Load Playlist" ) ); QString filename; if ( fd->exec() == QDialog::Accepted ){ filename = fd->selectedFiles().first(); LocalFileMng fileMng; int err = fileMng.loadPlayList( filename.toLocal8Bit().constData() ); if ( err != 0 ) { _ERRORLOG( "Error loading the playlist" ); } if(Hydrogen::get_instance()->m_PlayList.size() > 0){ QTreeWidget* m_pPlaylist = m_pPlaylistTree; m_pPlaylist->clear(); for ( uint i = 0; i < Hydrogen::get_instance()->m_PlayList.size(); ++i ){ QTreeWidgetItem* m_pPlaylistItem = new QTreeWidgetItem ( m_pPlaylistTree ); m_pPlaylistItem->setText ( 0, Hydrogen::get_instance()->m_PlayList[i].m_hFile ); m_pPlaylistItem->setText ( 1, Hydrogen::get_instance()->m_PlayList[i].m_hScript ); if ( Hydrogen::get_instance()->m_PlayList[i].m_hScriptEnabled == "Use Script" ) { m_pPlaylistItem->setCheckState( 2, Qt::Checked ); }else{ m_pPlaylistItem->setCheckState( 2, Qt::Unchecked ); } } QTreeWidgetItem* m_pPlaylistItem = m_pPlaylist->topLevelItem ( 0 ); m_pPlaylist->setCurrentItem ( m_pPlaylistItem ); Playlist::get_instance()->setSelectedSongNr( 0 ); Playlist::get_instance()->__playlistName = filename; setWindowTitle ( trUtf8 ( "Playlist Browser" ) + QString(" - ") + QString( Playlist::get_instance()->__playlistName ) ); } } } void PlaylistDialog::newScript() { Preferences *pPref = Preferences::get_instance(); QString sDirectory = ( Preferences::get_instance()->getDataDirectory() + "scripts/"); std::auto_ptr fd( new QFileDialog ); fd->setFileMode ( QFileDialog::AnyFile ); fd->setFilter ( trUtf8 ( "Hydrogen Scripts (*.sh)" ) ); fd->setAcceptMode ( QFileDialog::AcceptSave ); fd->setWindowTitle ( trUtf8 ( "New Script" ) ); fd->setDirectory ( sDirectory ); QString defaultFilename; defaultFilename += ".sh"; fd->selectFile ( defaultFilename ); QString filename; if ( fd->exec() == QDialog::Accepted ) { filename = fd->selectedFiles().first(); }else { return; } if( filename.contains(" ", Qt::CaseInsensitive)){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Script name or path to the script contains whitespaces.\nIMPORTANT\nThe path to the script and the scriptname must without whitespaces.") ); return; } QFile chngPerm ( filename ); if (!chngPerm.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream out(&chngPerm); out << "#!/bin/sh\n\n#have phun"; chngPerm.close(); if (chngPerm.exists() ) { chngPerm.setPermissions( QFile::ReadOwner|QFile::WriteOwner|QFile::ExeOwner ); QMessageBox::information ( this, "Hydrogen", trUtf8 ( "WARNING, the new file is executable by the owner of the file!" ) ); } if( pPref->getDefaultEditor().isEmpty() ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Default Editor Set. Please set your Default Editor\nDo not use a console based Editor\nSorry, but this will not work for the moment." ) ); static QString lastUsedDir = "/usr/bin/"; std::auto_ptr fd( new QFileDialog ); fd->setFileMode ( QFileDialog::ExistingFile ); fd->setDirectory ( lastUsedDir ); fd->setWindowTitle ( trUtf8 ( "Set your Default Editor" ) ); QString filename; if ( fd->exec() == QDialog::Accepted ){ filename = fd->selectedFiles().first(); pPref->setDefaultEditor( filename ); } } QString openfile = pPref->getDefaultEditor() + " " + filename + "&"; char *ofile; ofile = new char[openfile.length() + 1]; strcpy(ofile, openfile.toAscii()); int ret = std::system( ofile ); delete [] ofile; return; } void PlaylistDialog::saveListAs() { QString sDirectory = Preferences::get_instance()->getDataDirectory() + "playlists/"; std::auto_ptr fd( new QFileDialog ); fd->setFileMode ( QFileDialog::AnyFile ); fd->setFilter ( trUtf8 ( "Hydrogen Playlist (*.h2playlist)" ) ); fd->setAcceptMode ( QFileDialog::AcceptSave ); fd->setWindowTitle ( trUtf8 ( "Save Playlist" ) ); fd->setDirectory ( sDirectory ); QString defaultFilename; defaultFilename += ".h2playlist"; fd->selectFile ( defaultFilename ); QString filename; if ( fd->exec() == QDialog::Accepted ) { filename = fd->selectedFiles().first(); }else { return; } LocalFileMng fileMng; int err = fileMng.savePlayList( filename.toLocal8Bit().constData() ); if ( err != 0 ) { _ERRORLOG( "Error saving the playlist" ); }else { Playlist::get_instance()->__playlistName = filename; setWindowTitle ( trUtf8 ( "Playlist Browser" ) + QString(" - ") + QString( Playlist::get_instance()->__playlistName ) ); } } void PlaylistDialog::saveList() { if ( Playlist::get_instance()->__playlistName == "") { // just in case! return saveListAs(); } LocalFileMng fileMng; int err = fileMng.savePlayList( Playlist::get_instance()->__playlistName.toStdString() ); if ( err != 0 ) { _ERRORLOG( "Error saving the playlist" ); } } void PlaylistDialog::loadScript() { QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem(); if ( m_pPlaylistItem == NULL ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song in List or no Song selected!" ) ); return; } static QString lastUsedDir = Preferences::get_instance()->getDataDirectory() + "scripts/"; std::auto_ptr fd( new QFileDialog ); fd->setFileMode ( QFileDialog::ExistingFile ); fd->setDirectory ( lastUsedDir ); fd->setFilter ( trUtf8 ( "Hydrogen Playlist (*.sh)" ) ); fd->setWindowTitle ( trUtf8 ( "Add Script to selected Song" ) ); QString filename; if ( fd->exec() == QDialog::Accepted ){ filename = fd->selectedFiles().first(); // filename = filename.simplified(); if( filename.contains(" ", Qt::CaseInsensitive)){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Script name or path to the script contains whitespaces.\nIMPORTANT\nThe path to the script and the scriptname must without whitespaces.") ); return; } m_pPlaylistItem->setText ( 1, filename ); updatePlayListVector(); } } void PlaylistDialog::removeScript() { QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem(); if (m_pPlaylistItem == NULL){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song selected!" )); return; }else{ QString selected; selected = m_pPlaylistItem->text ( 1 ); if( !QFile( selected ).exists() ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Script in use!" )); return; }else { m_pPlaylistItem->setText ( 1, trUtf8("no Script") ); m_pPlaylistItem->setCheckState( 2, Qt::Unchecked ); updatePlayListVector(); } } } void PlaylistDialog::editScript() { Preferences *pPref = Preferences::get_instance(); if( pPref->getDefaultEditor().isEmpty() ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Default Editor Set. Please set your Default Editor\nDo not use a console based Editor\nSorry, but this will not work for the moment." ) ); static QString lastUsedDir = "/usr/bin/"; std::auto_ptr fd( new QFileDialog ); fd->setFileMode ( QFileDialog::ExistingFile ); fd->setDirectory ( lastUsedDir ); fd->setWindowTitle ( trUtf8 ( "Set your Default Editor" ) ); QString filename; if ( fd->exec() == QDialog::Accepted ){ filename = fd->selectedFiles().first(); pPref->setDefaultEditor( filename ); } } QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem(); if ( m_pPlaylistItem == NULL ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song selected!" ) ); return; } QString selected; selected = m_pPlaylistItem->text ( 1 ); QString filename = pPref->getDefaultEditor() + " " + selected + "&"; if( !QFile( selected ).exists() ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Script selected!" )); return; } char *file; file = new char[ filename.length() + 1 ]; strcpy( file , filename.toAscii() ); int ret = std::system( file ); delete [] file; return; } void PlaylistDialog::o_upBClicked() { timer->stop(); Playlist* pList = Playlist::get_instance(); QTreeWidget* m_pPlaylist = m_pPlaylistTree; QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem(); int index = m_pPlaylist->indexOfTopLevelItem ( m_pPlaylistItem ); if (index == 0 ){ timer->start( 1000 ); return; } QTreeWidgetItem* tmpPlaylistItem = m_pPlaylist->takeTopLevelItem ( index ); m_pPlaylist->insertTopLevelItem ( index -1, tmpPlaylistItem ); m_pPlaylist->setCurrentItem ( tmpPlaylistItem ); if ( pList->getSelectedSongNr() >= 0 ) pList->setSelectedSongNr( pList->getSelectedSongNr() -1 ); if ( pList->getActiveSongNumber() == index ){ pList->setActiveSongNumber( pList->getActiveSongNumber() -1 ); }else if ( pList->getActiveSongNumber() == index -1 ){ pList->setActiveSongNumber( pList->getActiveSongNumber() +1 ); } updatePlayListVector(); } void PlaylistDialog::o_downBClicked() { timer->stop(); Playlist* pList = Playlist::get_instance(); QTreeWidget* m_pPlaylist = m_pPlaylistTree; int length = m_pPlaylist->topLevelItemCount(); QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem(); int index = m_pPlaylist->indexOfTopLevelItem ( m_pPlaylistItem ); if ( index == length - 1){ timer->start( 1000 ); return; } QTreeWidgetItem* tmpPlaylistItem = m_pPlaylist->takeTopLevelItem ( index ); m_pPlaylist->insertTopLevelItem ( index +1, tmpPlaylistItem ); m_pPlaylist->setCurrentItem ( tmpPlaylistItem ); if ( pList->getSelectedSongNr() >= 0 ) pList->setSelectedSongNr( pList->getSelectedSongNr() +1 ); if (pList ->getActiveSongNumber() == index ){ pList->setActiveSongNumber( pList->getActiveSongNumber() +1 ); }else if ( pList->getActiveSongNumber() == index +1 ){ pList->setActiveSongNumber( pList->getActiveSongNumber() -1 ); } updatePlayListVector(); } void PlaylistDialog::on_m_pPlaylistTree_itemClicked ( QTreeWidgetItem * item, int column ) { if ( column == 2 ){ QString selected; selected = item->text ( 1 ); if( !QFile( selected ).exists() ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Script!" )); item->setCheckState( 2, Qt::Unchecked ); return; } updatePlayListVector(); } return; } void PlaylistDialog::nodePlayBTN( Button* ref ) { Hydrogen *engine = Hydrogen::get_instance(); HydrogenApp *pH2App = HydrogenApp::get_instance(); if (ref->isPressed()) { QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem(); if ( m_pPlaylistItem == NULL ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No song selected!" ) ); m_pPlayBtn->setPressed(false); return; } QString selected = ""; selected = m_pPlaylistItem->text ( 0 ); if( selected == engine->getSong()->get_filename()){ engine->sequencer_play(); return; } if ( engine->getState() == STATE_PLAYING ){ engine->sequencer_stop(); } LocalFileMng mng; Song *pSong = Song::load ( selected ); if ( pSong == NULL ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Error loading song." ) ); m_pPlayBtn->setPressed(false); return; } QTreeWidget* m_pPlaylist = m_pPlaylistTree; int index = m_pPlaylist->indexOfTopLevelItem ( m_pPlaylistItem ); Playlist::get_instance()->setActiveSongNumber( index ); pH2App->setSong ( pSong ); engine->setSelectedPatternNumber ( 0 ); engine->sequencer_play(); }else { engine->sequencer_stop(); pH2App->setStatusBarMessage(trUtf8("Pause."), 5000); } } void PlaylistDialog::nodeStopBTN( Button* ref ) { UNUSED( ref ); m_pPlayBtn->setPressed(false); Hydrogen::get_instance()->sequencer_stop(); Hydrogen::get_instance()->setPatternPos ( 0 ); } void PlaylistDialog::ffWDBtnClicked( Button* ref) { UNUSED( ref ); Hydrogen *pEngine = Hydrogen::get_instance(); pEngine->setPatternPos( pEngine->getPatternPos() + 1 ); } void PlaylistDialog::rewindBtnClicked( Button* ref ) { UNUSED( ref ); Hydrogen *pEngine = Hydrogen::get_instance(); pEngine->setPatternPos( pEngine->getPatternPos() - 1 ); } void PlaylistDialog::on_m_pPlaylistTree_itemDoubleClicked () { QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem(); if ( m_pPlaylistItem == NULL ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song selected!" ) ); return; } QString selected; selected = m_pPlaylistItem->text ( 0 ); QTreeWidget* m_pPlaylist = m_pPlaylistTree; int index = m_pPlaylist->indexOfTopLevelItem ( m_pPlaylistItem ); Playlist::get_instance()->setSelectedSongNr( index ); Playlist::get_instance()->setActiveSongNumber( index ); HydrogenApp *pH2App = HydrogenApp::get_instance(); Hydrogen *engine = Hydrogen::get_instance(); if ( engine->getState() == STATE_PLAYING ){ engine->sequencer_stop(); } m_pPlayBtn->setPressed(false); engine->m_timelinetagvector.clear(); LocalFileMng mng; Song *pSong = Song::load ( selected ); if ( pSong == NULL ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Error loading song." ) ); return; } pH2App->setSong ( pSong ); engine->setSelectedPatternNumber ( 0 ); HydrogenApp::get_instance()->getSongEditorPanel()->updatePositionRuler(); pH2App->setStatusBarMessage( trUtf8( "Playlist: set song no. %1" ).arg( index +1 ), 5000 ); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->update_background_color(); EventQueue::get_instance()->push_event( EVENT_METRONOME, 3 ); ///exec script ///this is very very simple and only an experiment #ifdef WIN32 //I know nothing about windows scripts -wolke- return; #else QString execscript; selected = m_pPlaylistItem->text ( 1 ); bool execcheckbox = m_pPlaylistItem->checkState ( 2 ); if( execcheckbox == false){ //QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Script selected!" )); return; } if( execscript == "Script not used"){ //QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Script not in use!" )); return; } char *file; file = new char[ selected.length() + 1 ]; strcpy( file , selected.toAscii() ); int ret = std::system( file ); delete [] file; return; #endif } void PlaylistDialog::updatePlayListVector() { QTreeWidget* m_pPlaylist = m_pPlaylistTree; int length = m_pPlaylist->topLevelItemCount(); Hydrogen::get_instance()->m_PlayList.clear(); for (int i = 0 ;i < length; i++){ QTreeWidgetItem * m_pPlaylistItem = m_pPlaylist->topLevelItem ( i ); QString execval; bool execcheckbox = m_pPlaylistItem->checkState ( 2 ); if ( execcheckbox == true ) { execval = "Use Script"; }else{ execval = "Script not used"; } Hydrogen::HPlayListNode playListItem; playListItem.m_hFile = m_pPlaylistItem->text ( 0 ); playListItem.m_hScript = m_pPlaylistItem->text ( 1 ); playListItem.m_hScriptEnabled = execval; Hydrogen::get_instance()->m_PlayList.push_back( playListItem ); } timer->start( 1000 ); } void PlaylistDialog::updateActiveSongNumber() { QTreeWidget* m_pPlaylist = m_pPlaylistTree; for ( uint i = 0; i < Hydrogen::get_instance()->m_PlayList.size(); ++i ){ if ( !m_pPlaylist->topLevelItem( i ) ) break; ( m_pPlaylist->topLevelItem( i ) )->setBackground( 0, QBrush() ); ( m_pPlaylist->topLevelItem( i ) )->setBackground( 1, QBrush() ); ( m_pPlaylist->topLevelItem( i ) )->setBackground( 2, QBrush() ); } int selected = Playlist::get_instance()->getActiveSongNumber(); if ( selected == -1 ) return; QTreeWidgetItem* m_pPlaylistItem = m_pPlaylist->topLevelItem ( selected ); if ( m_pPlaylistItem != NULL ){ //m_pPlaylist->setCurrentItem ( m_pPlaylistItem ); m_pPlaylistItem->setBackgroundColor ( 0, QColor( 50, 50, 50) ); m_pPlaylistItem->setBackgroundColor ( 1, QColor( 50, 50, 50) ); m_pPlaylistItem->setBackgroundColor ( 2, QColor( 50, 50, 50) ); } } bool PlaylistDialog::eventFilter ( QObject *o, QEvent *e ) { UNUSED ( o ); if ( e->type() == QEvent::KeyPress ) { QKeyEvent *k = ( QKeyEvent * ) e; switch ( k->key() ) { case Qt::Key_F5 : if( Hydrogen::get_instance()->m_PlayList.size() == 0 || Playlist::get_instance()->getActiveSongNumber() <=0) break; Playlist::get_instance()->setNextSongByNumber(Playlist::get_instance()->getActiveSongNumber()-1); return TRUE; break; case Qt::Key_F6 : if( Hydrogen::get_instance()->m_PlayList.size() == 0 || Playlist::get_instance()->getActiveSongNumber() >= Hydrogen::get_instance()->m_PlayList.size() -1) break; Playlist::get_instance()->setNextSongByNumber(Playlist::get_instance()->getActiveSongNumber()+1); return TRUE; break; } } else { return FALSE; // standard event processing } return NULL; } bool PlaylistDialog::loadListByFileName( QString filename ) { LocalFileMng fileMng; int err = fileMng.loadPlayList( filename.toLocal8Bit().constData() ); if ( err != 0 ) { _ERRORLOG( "Error loading the playlist" ); return 0; } Preferences::get_instance()->setLastPlaylistFilename( filename ); if(Hydrogen::get_instance()->m_PlayList.size() > 0){ QTreeWidget* m_pPlaylist = m_pPlaylistTree; m_pPlaylist->clear(); for ( uint i = 0; i < Hydrogen::get_instance()->m_PlayList.size(); ++i ){ QTreeWidgetItem* m_pPlaylistItem = new QTreeWidgetItem ( m_pPlaylistTree ); m_pPlaylistItem->setText ( 0, Hydrogen::get_instance()->m_PlayList[i].m_hFile ); m_pPlaylistItem->setText ( 1, Hydrogen::get_instance()->m_PlayList[i].m_hScript ); if ( Hydrogen::get_instance()->m_PlayList[i].m_hScriptEnabled == "Use Script" ) { m_pPlaylistItem->setCheckState( 2, Qt::Checked ); }else{ m_pPlaylistItem->setCheckState( 2, Qt::Unchecked ); } } QTreeWidgetItem* m_pPlaylistItem = m_pPlaylist->topLevelItem ( 0 ); m_pPlaylist->setCurrentItem ( m_pPlaylistItem ); Playlist::get_instance()->setSelectedSongNr( 0 ); Playlist::get_instance()->__playlistName = filename; setWindowTitle ( trUtf8 ( "Playlist Browser" ) + QString(" - ") + QString( Playlist::get_instance()->__playlistName ) ); } return 1; } hydrogen-0.9.6-beta3/src/gui/src/PlaylistEditor/PlaylistDialog.h000066400000000000000000000044521211146647700245630ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PLAYLIST_DIALOG_H #define PLAYLIST_DIALOG_H #include #include "ui_PlaylistDialog_UI.h" #include #include #include #include class Button; class ToggleButton; class PixmapWidget; /// /// This dialog is used to use the H2PlayList /// class PlaylistDialog : public QDialog, public Ui_PlaylistDialog_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: PlaylistDialog( QWidget* pParent ); ~PlaylistDialog(); bool loadListByFileName( QString filename); private slots: void addSong(); void addCurrentSong(); void removeFromList(); void removeScript(); void clearPlaylist(); void loadList(); void saveListAs(); void saveList(); void loadScript(); void ffWDBtnClicked(Button* ref); void nodePlayBTN( Button* ref ); void nodeStopBTN( Button* ref ); void rewindBtnClicked(Button *ref); void editScript(); void newScript(); void on_m_pPlaylistTree_itemClicked ( QTreeWidgetItem * item, int column ); void o_upBClicked(); void o_downBClicked(); void on_m_pPlaylistTree_itemDoubleClicked (); void updateActiveSongNumber(); bool eventFilter ( QObject *o, QEvent *e ); private: void updatePlayListNode( QString file ); void updatePlayListVector(); void setFirstItemCurrent(); Button *zoom_in_btn; QTimer *timer; Button *m_pRwdBtn; ToggleButton *m_pPlayBtn; Button *m_pStopBtn; Button *m_pFfwdBtn; }; #endif hydrogen-0.9.6-beta3/src/gui/src/PlaylistEditor/PlaylistDialog_UI.ui000066400000000000000000000044671211146647700253540ustar00rootroot00000000000000 PlaylistDialog_UI 0 0 961 397 PlayList Browser 12 29 921 321 0 271 false Qt::ScrollBarAsNeeded Qt::ScrollBarAsNeeded true false false false QAbstractItemView::NoDragDrop true true false false Song list 940 30 16 311 10 350 181 41 hydrogen-0.9.6-beta3/src/gui/src/PreferencesDialog.cpp000066400000000000000000000477661211146647700226250ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "Skin.h" #include "PreferencesDialog.h" #include "HydrogenApp.h" #include "MainForm.h" #include "qmessagebox.h" #include "qstylefactory.h" #include #include #include "widgets/midiTable.h" #include #include #include #include #include #include #include using namespace H2Core; const char* PreferencesDialog::__class_name = "PreferencesDialog"; PreferencesDialog::PreferencesDialog(QWidget* parent) : QDialog( parent ) , Object( __class_name ) { setupUi( this ); setWindowTitle( trUtf8( "Preferences" ) ); setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); setMinimumSize( width(), height() ); setMaximumSize( width(), height() ); Preferences *pPref = Preferences::get_instance(); pPref->loadPreferences( false ); // reload user's preferences driverComboBox->clear(); driverComboBox->addItem( "Auto" ); #ifdef H2CORE_HAVE_JACK driverComboBox->addItem( "Jack" ); #endif #ifdef H2CORE_HAVE_ALSA driverComboBox->addItem( "Alsa" ); #endif #ifdef H2CORE_HAVE_OSS driverComboBox->addItem( "Oss" ); #endif #ifdef H2CORE_HAVE_PORTAUDIO driverComboBox->addItem( "PortAudio" ); #endif #ifdef H2CORE_HAVE_COREAUDIO driverComboBox->addItem( "CoreAudio" ); #endif if( driverComboBox->findText(pPref->m_sAudioDriver) > -1){ driverComboBox->setCurrentIndex(driverComboBox->findText(pPref->m_sAudioDriver)); } else { driverInfoLbl->setText("Select your Audio Driver"); ERRORLOG( "Unknown midi input from preferences [" + pPref->m_sAudioDriver + "]" ); } m_pMidiDriverComboBox->clear(); #ifdef H2CORE_HAVE_ALSA m_pMidiDriverComboBox->addItem( "ALSA" ); #endif #ifdef H2CORE_HAVE_PORTMIDI m_pMidiDriverComboBox->addItem( "PortMidi" ); #endif #ifdef H2CORE_HAVE_COREMIDI m_pMidiDriverComboBox->addItem( "CoreMidi" ); #endif #ifdef H2CORE_HAVE_JACK m_pMidiDriverComboBox->addItem( "JackMidi" ); #endif if( m_pMidiDriverComboBox->findText(pPref->m_sMidiDriver) > -1){ m_pMidiDriverComboBox->setCurrentIndex(m_pMidiDriverComboBox->findText(pPref->m_sMidiDriver)); } else { driverInfoLbl->setText("Select your Midi Driver"); ERRORLOG( "Unknown midi input from preferences [" + pPref->m_sMidiDriver + "]" ); } m_pIgnoreNoteOffCheckBox->setChecked( pPref->m_bMidiNoteOffIgnore ); updateDriverInfo(); // metronome volume uint metronomeVol = (uint)( pPref->m_fMetronomeVolume * 100.0 ); metronomeVolumeSpinBox->setValue(metronomeVol); // max voices maxVoicesTxt->setValue( pPref->m_nMaxNotes ); // JACK trackOutsCheckBox->setChecked( pPref->m_bJackTrackOuts ); connect(trackOutsCheckBox, SIGNAL(toggled(bool)), this, SLOT(toggleTrackOutsCheckBox( bool ))); connectDefaultsCheckBox->setChecked( pPref->m_bJackConnectDefaults ); trackOutputComboBox->setCurrentIndex( pPref->m_nJackTrackOutputMode ); //~ JACK bufferSizeSpinBox->setValue( pPref->m_nBufferSize ); switch ( pPref->m_nSampleRate ) { case 44100: sampleRateComboBox->setCurrentIndex( 0 ); break; case 48000: sampleRateComboBox->setCurrentIndex( 1 ); break; case 88200: sampleRateComboBox->setCurrentIndex( 2 ); break; case 96000: sampleRateComboBox->setCurrentIndex( 3 ); break; default: ERRORLOG( QString("Wrong samplerate: %1").arg( pPref->m_nSampleRate ) ); } resampleComboBox->setCurrentIndex( (int) AudioEngine::get_instance()->get_sampler()->getInterpolateMode() ); // Appearance tab QString applicationFamily = pPref->getApplicationFontFamily(); int applicationPointSize = pPref->getApplicationFontPointSize(); QFont applicationFont( applicationFamily, applicationPointSize ); applicationFontLbl->setFont( applicationFont ); applicationFontLbl->setText( applicationFamily + QString(" %1").arg( applicationPointSize ) ); QString mixerFamily = pPref->getMixerFontFamily(); int mixerPointSize = pPref->getMixerFontPointSize(); QFont mixerFont( mixerFamily, mixerPointSize ); mixerFontLbl->setFont( mixerFont ); mixerFontLbl->setText( mixerFamily + QString(" %1").arg( mixerPointSize ) ); float falloffSpeed = pPref->getMixerFalloffSpeed(); if (falloffSpeed == FALLOFF_SLOW) { mixerFalloffComboBox->setCurrentIndex(0); } else if (falloffSpeed == FALLOFF_NORMAL) { mixerFalloffComboBox->setCurrentIndex(1); } else if (falloffSpeed == FALLOFF_FAST) { mixerFalloffComboBox->setCurrentIndex(2); } else { ERRORLOG( QString("PreferencesDialog: wrong mixerFalloff value = %1").arg(falloffSpeed) ); } uiLayoutComboBox->setCurrentIndex( pPref->getDefaultUILayout() ); // Style QStringList list = QStyleFactory::keys(); uint i = 0; for ( QStringList::Iterator it = list.begin(); it != list.end(); it++) { styleComboBox->addItem( *it ); //INFOLOG( "QT Stile: " + *it ); //string sStyle = (*it).latin1(); QString sStyle = (*it); if (sStyle == pPref->getQTStyle() ) { styleComboBox->setCurrentIndex( i ); } i++; } // midi tab midiPortChannelComboBox->setEnabled( false ); midiPortComboBox->setEnabled( false ); // list midi output ports midiPortComboBox->clear(); midiPortComboBox->addItem( "None" ); if ( Hydrogen::get_instance()->getMidiInput() ) { std::vector midiOutList = Hydrogen::get_instance()->getMidiInput()->getOutputPortList(); if ( midiOutList.size() != 0 ) { midiPortComboBox->setEnabled( true ); midiPortChannelComboBox->setEnabled( true ); } for (uint i = 0; i < midiOutList.size(); i++) { QString sPortName = midiOutList[i]; midiPortComboBox->addItem( sPortName ); if ( sPortName == pPref->m_sMidiPortName ) { midiPortComboBox->setCurrentIndex( i + 1 ); } } } if ( pPref->m_nMidiChannelFilter == -1 ) { midiPortChannelComboBox->setCurrentIndex( 0 ); } else { midiPortChannelComboBox->setCurrentIndex( pPref->m_nMidiChannelFilter + 1 ); } // General tab restoreLastUsedSongCheckbox->setChecked( pPref->isRestoreLastSongEnabled() ); restoreLastUsedPlaylistCheckbox->setChecked( pPref->isRestoreLastPlaylistEnabled() ); //restore the right m_bsetlash value if ( pPref->m_brestartLash == true ){ if (pPref->m_bsetLash == false ){ pPref->m_bsetLash = true ; pPref->m_brestartLash = false; } } useLashCheckbox->setChecked( pPref->m_bsetLash ); sBcountOffset->setValue( pPref->m_countOffset ); sBstartOffset->setValue( pPref->m_startOffset ); sBmaxBars->setValue( pPref->getMaxBars() ); QString pathtoRubberband = pPref->m_rubberBandCLIexecutable; rubberbandLineEdit->setText( pathtoRubberband ); #ifdef H2CORE_HAVE_RUBBERBAND pathToRubberbandExLable->hide(); rubberbandLineEdit->hide(); #endif m_bNeedDriverRestart = false; connect(m_pMidiDriverComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT( onMidiDriverComboBoxIndexChanged(int) )); } PreferencesDialog::~PreferencesDialog() { INFOLOG("~PREFERENCES_DIALOG"); } void PreferencesDialog::on_cancelBtn_clicked() { Preferences *preferencesMng = Preferences::get_instance(); preferencesMng->loadPreferences( false ); // reload old user's preferences //restore the right m_bsetlash value if ( preferencesMng->m_brestartLash == true ){ if (preferencesMng->m_bsetLash == false ){ preferencesMng->m_bsetLash = true ; preferencesMng->m_brestartLash = false; } } reject(); } void PreferencesDialog::on_okBtn_clicked() { // m_bNeedDriverRestart = true; Preferences *pPref = Preferences::get_instance(); MidiMap *mM = MidiMap::get_instance(); mM->reset_instance(); midiTable->saveMidiTable(); // Selected audio driver if (driverComboBox->currentText() == "Auto" ) { pPref->m_sAudioDriver = "Auto"; } else if (driverComboBox->currentText() == "JACK" ) { pPref->m_sAudioDriver = "Jack"; } else if (driverComboBox->currentText() == "ALSA" ) { pPref->m_sAudioDriver = "Alsa"; pPref->m_sAlsaAudioDevice = m_pAudioDeviceTxt->text(); } else if (driverComboBox->currentText() == "OSS" ) { pPref->m_sAudioDriver = "Oss"; pPref->m_sOSSDevice = m_pAudioDeviceTxt->text(); } else if (driverComboBox->currentText() == "PortAudio" ) { pPref->m_sAudioDriver = "PortAudio"; } else if (driverComboBox->currentText() == "CoreAudio" ) { pPref->m_sAudioDriver = "CoreAudio"; } else { ERRORLOG( "[okBtnClicked] Invalid audio driver" ); } // JACK pPref->m_bJackConnectDefaults = connectDefaultsCheckBox->isChecked(); if (trackOutputComboBox->currentText() == "Post-Fader") { pPref->m_nJackTrackOutputMode = Preferences::POST_FADER; } else { pPref->m_nJackTrackOutputMode = Preferences::PRE_FADER; } //~ JACK pPref->m_nBufferSize = bufferSizeSpinBox->value(); if ( sampleRateComboBox->currentText() == "44100" ) { pPref->m_nSampleRate = 44100; } else if ( sampleRateComboBox->currentText() == "48000" ) { pPref->m_nSampleRate = 48000; } else if ( sampleRateComboBox->currentText() == "88200" ) { pPref->m_nSampleRate = 88200; } else if ( sampleRateComboBox->currentText() == "96000" ) { pPref->m_nSampleRate = 96000; } // metronome pPref->m_fMetronomeVolume = (metronomeVolumeSpinBox->value()) / 100.0; // maxVoices pPref->m_nMaxNotes = maxVoicesTxt->value(); if ( m_pMidiDriverComboBox->currentText() == "ALSA" ) { pPref->m_sMidiDriver = "ALSA"; } else if ( m_pMidiDriverComboBox->currentText() == "PortMidi" ) { pPref->m_sMidiDriver = "PortMidi"; } else if ( m_pMidiDriverComboBox->currentText() == "CoreMidi" ) { pPref->m_sMidiDriver = "CoreMidi"; } else if ( m_pMidiDriverComboBox->currentText() == "JackMidi" ) { pPref->m_sMidiDriver = "JackMidi"; } pPref->m_bMidiNoteOffIgnore = m_pIgnoreNoteOffCheckBox->isChecked(); // Mixer falloff QString falloffStr = mixerFalloffComboBox->currentText(); if ( falloffStr== trUtf8("Slow") ) { pPref->setMixerFalloffSpeed(FALLOFF_SLOW); } else if ( falloffStr == trUtf8("Normal") ) { pPref->setMixerFalloffSpeed(FALLOFF_NORMAL); } else if ( falloffStr == trUtf8("Fast") ) { pPref->setMixerFalloffSpeed(FALLOFF_FAST); } else { ERRORLOG( "[okBtnClicked] Unknown mixerFallOffSpeed: " + falloffStr ); } QString sNewMidiPortName = midiPortComboBox->currentText(); if ( pPref->m_sMidiPortName != sNewMidiPortName ) { pPref->m_sMidiPortName = sNewMidiPortName; m_bNeedDriverRestart = true; } if ( pPref->m_nMidiChannelFilter != midiPortChannelComboBox->currentIndex() - 1 ) { //m_bNeedDriverRestart = true; } pPref->m_nMidiChannelFilter = midiPortChannelComboBox->currentIndex() - 1; // General tab pPref->setRestoreLastSongEnabled( restoreLastUsedSongCheckbox->isChecked() ); pPref->setRestoreLastPlaylistEnabled( restoreLastUsedPlaylistCheckbox->isChecked() ); pPref->m_bsetLash = useLashCheckbox->isChecked(); //restore m_bsetLash after saving pref. //path to rubberband pPref-> m_rubberBandCLIexecutable = rubberbandLineEdit->text(); //check preferences if ( pPref->m_brestartLash == true ){ pPref->m_bsetLash = true ; } pPref->m_countOffset = sBcountOffset->value(); pPref->m_startOffset = sBstartOffset->value(); pPref->setMaxBars( sBmaxBars->value() ); Hydrogen::get_instance()->setBcOffsetAdjust(); pPref->setDefaultUILayout( uiLayoutComboBox->currentIndex() ); pPref->savePreferences(); if (m_bNeedDriverRestart) { int res = QMessageBox::information( this, "Hydrogen", tr( "Driver restart required.\n Restart driver?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); if ( res == 0 ) { Hydrogen::get_instance()->restartDrivers(); } } accept(); } void PreferencesDialog::on_driverComboBox_activated( int index ) { UNUSED( index ); QString selectedDriver = driverComboBox->currentText(); updateDriverInfo(); m_bNeedDriverRestart = true; } void PreferencesDialog::updateDriverInfo() { Preferences *pPref = Preferences::get_instance(); QString info; bool bJack_support = false; #ifdef H2CORE_HAVE_JACK bJack_support = true; #endif bool bAlsa_support = false; #ifdef H2CORE_HAVE_ALSA bAlsa_support = true; #endif bool bOss_support = false; #ifdef H2CORE_HAVE_OSS bOss_support = true; #endif bool bPortAudio_support = false; #ifdef H2CORE_HAVE_PORTAUDIO bPortAudio_support = true; #endif bool bCoreAudio_support = false; #ifdef H2CORE_HAVE_COREAUDIO bCoreAudio_support = true; #endif if ( driverComboBox->currentText() == "Auto" ) { info += trUtf8("Automatic driver selection"); m_pAudioDeviceTxt->setEnabled(false); m_pAudioDeviceTxt->setText( "" ); bufferSizeSpinBox->setEnabled( false ); sampleRateComboBox->setEnabled( false ); trackOutputComboBox->setEnabled( false ); connectDefaultsCheckBox->setEnabled( false ); } else if ( driverComboBox->currentText() == "OSS" ) { // OSS info += trUtf8("Open Sound System
    Simple audio driver [/dev/dsp]"); if ( !bOss_support ) { info += trUtf8("
    Not compiled"); } m_pAudioDeviceTxt->setEnabled(true); m_pAudioDeviceTxt->setText( pPref->m_sOSSDevice ); bufferSizeSpinBox->setEnabled(true); sampleRateComboBox->setEnabled(true); trackOutputComboBox->setEnabled( false ); trackOutsCheckBox->setEnabled( false ); connectDefaultsCheckBox->setEnabled(false); } else if ( driverComboBox->currentText() == "Jack" ) { // JACK info += trUtf8("Jack Audio Connection Kit Driver
    Low latency audio driver"); if ( !bJack_support ) { info += trUtf8("
    Not compiled"); } m_pAudioDeviceTxt->setEnabled(false); m_pAudioDeviceTxt->setText( "" ); bufferSizeSpinBox->setEnabled(false); sampleRateComboBox->setEnabled(false); trackOutputComboBox->setEnabled( true ); connectDefaultsCheckBox->setEnabled(true); trackOutsCheckBox->setEnabled( true ); } else if ( driverComboBox->currentText() == "Alsa" ) { // ALSA info += trUtf8("ALSA Driver
    "); if ( !bAlsa_support ) { info += trUtf8("
    Not compiled"); } m_pAudioDeviceTxt->setEnabled(true); m_pAudioDeviceTxt->setText( pPref->m_sAlsaAudioDevice ); bufferSizeSpinBox->setEnabled(true); sampleRateComboBox->setEnabled(true); trackOutputComboBox->setEnabled( false ); trackOutsCheckBox->setEnabled( false ); connectDefaultsCheckBox->setEnabled(false); } else if ( driverComboBox->currentText() == "PortAudio" ) { info += trUtf8( "PortAudio Driver
    " ); if ( !bPortAudio_support ) { info += trUtf8("
    Not compiled"); } m_pAudioDeviceTxt->setEnabled(false); m_pAudioDeviceTxt->setText( "" ); bufferSizeSpinBox->setEnabled(true); sampleRateComboBox->setEnabled(true); trackOutsCheckBox->setEnabled( false ); connectDefaultsCheckBox->setEnabled(false); } else if ( driverComboBox->currentText() == "CoreAudio" ) { info += trUtf8( "CoreAudio Driver
    " ); if ( !bCoreAudio_support ) { info += trUtf8("
    Not compiled"); } m_pAudioDeviceTxt->setEnabled(false); m_pAudioDeviceTxt->setText( "" ); bufferSizeSpinBox->setEnabled(true); sampleRateComboBox->setEnabled(true); trackOutputComboBox->setEnabled( false ); trackOutsCheckBox->setEnabled( false ); connectDefaultsCheckBox->setEnabled(false); } else { QString selectedDriver = driverComboBox->currentText(); ERRORLOG( "Unknown driver = " + selectedDriver ); } metronomeVolumeSpinBox->setEnabled(true); bufferSizeSpinBox->setValue( pPref->m_nBufferSize ); driverInfoLbl->setText(info); } void PreferencesDialog::on_selectApplicationFontBtn_clicked() { Preferences *preferencesMng = Preferences::get_instance(); QString family = preferencesMng->getApplicationFontFamily(); int pointSize = preferencesMng->getApplicationFontPointSize(); bool ok; QFont font = QFontDialog::getFont( &ok, QFont( family, pointSize ), this ); if ( ok ) { // font is set to the font the user selected family = font.family(); pointSize = font.pointSize(); QString familyStr = family; preferencesMng->setApplicationFontFamily(familyStr); preferencesMng->setApplicationFontPointSize(pointSize); } else { // the user cancelled the dialog; font is set to the initial // value, in this case Times, 12. } QFont newFont(family, pointSize); applicationFontLbl->setFont(newFont); applicationFontLbl->setText(family + QString(" %1").arg(pointSize)); } void PreferencesDialog::on_bufferSizeSpinBox_valueChanged( int i ) { UNUSED( i ); m_bNeedDriverRestart = false; } void PreferencesDialog::on_sampleRateComboBox_editTextChanged( const QString& ) { m_bNeedDriverRestart = true; } void PreferencesDialog::on_restartDriverBtn_clicked() { Hydrogen::get_instance()->restartDrivers(); m_bNeedDriverRestart = false; } void PreferencesDialog::on_selectMixerFontBtn_clicked() { Preferences *preferencesMng = Preferences::get_instance(); QString family = preferencesMng->getMixerFontFamily(); int pointSize = preferencesMng->getMixerFontPointSize(); bool ok; QFont font = QFontDialog::getFont( &ok, QFont( family, pointSize ), this ); if ( ok ) { // font is set to the font the user selected family = font.family(); pointSize = font.pointSize(); QString familyStr = family; preferencesMng->setMixerFontFamily(familyStr); preferencesMng->setMixerFontPointSize(pointSize); } QFont newFont(family, pointSize); mixerFontLbl->setFont(newFont); mixerFontLbl->setText(family + QString(" %1").arg(pointSize)); } void PreferencesDialog::on_midiPortComboBox_activated( int index ) { UNUSED( index ); m_bNeedDriverRestart = true; } void PreferencesDialog::on_styleComboBox_activated( int index ) { UNUSED( index ); QApplication *pQApp = (HydrogenApp::get_instance())->getMainForm()->m_pQApp; QString sStyle = styleComboBox->currentText(); pQApp->setStyle( sStyle ); Preferences *pPref = Preferences::get_instance(); pPref->setQTStyle( sStyle ); } void PreferencesDialog::on_useLashCheckbox_clicked() { if ( useLashCheckbox->isChecked() ){ Preferences::get_instance()->m_brestartLash = true; } else { Preferences::get_instance()->m_bsetLash = false ; } QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Please restart hydrogen to enable/disable LASH support" ) ); } void PreferencesDialog::on_resampleComboBox_currentIndexChanged ( int index ) { switch ( index ){ case 0: AudioEngine::get_instance()->get_sampler()->setInterpolateMode( Sampler::LINEAR ); break; case 1: AudioEngine::get_instance()->get_sampler()->setInterpolateMode( Sampler::COSINE ); break; case 2: AudioEngine::get_instance()->get_sampler()->setInterpolateMode( Sampler::THIRD ); break; case 3: AudioEngine::get_instance()->get_sampler()->setInterpolateMode( Sampler::CUBIC ); break; case 4: AudioEngine::get_instance()->get_sampler()->setInterpolateMode( Sampler::HERMITE ); break; } } void PreferencesDialog::onMidiDriverComboBoxIndexChanged ( int index ) { m_bNeedDriverRestart = true; } void PreferencesDialog::toggleTrackOutsCheckBox(bool toggled) { Preferences::get_instance()->m_bJackTrackOuts = toggled; m_bNeedDriverRestart = true; } hydrogen-0.9.6-beta3/src/gui/src/PreferencesDialog.h000066400000000000000000000037141211146647700222530ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PREFERENCES_DIALOG_H #define PREFERENCES_DIALOG_H #include "ui_PreferencesDialog_UI.h" #include /// /// Preferences Dialog /// class PreferencesDialog : public QDialog, private Ui_PreferencesDialog_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: PreferencesDialog( QWidget* parent ); ~PreferencesDialog(); private slots: void on_okBtn_clicked(); void on_cancelBtn_clicked(); void on_selectApplicationFontBtn_clicked(); void on_selectMixerFontBtn_clicked(); void on_restartDriverBtn_clicked(); void on_driverComboBox_activated( int index ); void on_bufferSizeSpinBox_valueChanged( int i ); void on_resampleComboBox_currentIndexChanged ( int index ); void on_sampleRateComboBox_editTextChanged( const QString& text ); void on_midiPortComboBox_activated( int index ); void on_styleComboBox_activated( int index ); void on_useLashCheckbox_clicked(); void onMidiDriverComboBoxIndexChanged( int index ); void toggleTrackOutsCheckBox(bool toggled); private: bool m_bNeedDriverRestart; void updateDriverInfo(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/SampleEditor/000077500000000000000000000000001211146647700211045ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/src/SampleEditor/DetailWaveDisplay.cpp000066400000000000000000000102511211146647700251620ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include using namespace H2Core; #include "DetailWaveDisplay.h" #include "../Skin.h" const char* DetailWaveDisplay::__class_name = "DetailWaveDisplay"; DetailWaveDisplay::DetailWaveDisplay(QWidget* pParent ) : QWidget( pParent ) , Object( __class_name ) , m_sSampleName( "" ) { // setAttribute(Qt::WA_NoBackground); //INFOLOG( "INIT" ); int w = 180; int h = 265; resize( w, h ); bool ok = m_background.load( Skin::getImagePath() + "/waveDisplay/detailsamplewavedisplay.png" ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } m_pNormalImageDetailFrames = 180; m_pDetailSamplePosition = 0; m_pZoomFactor = 1; } DetailWaveDisplay::~DetailWaveDisplay() { //INFOLOG( "DESTROY" ); delete[] m_pPeakDatal; delete[] m_pPeakDatar; } void DetailWaveDisplay::setDetailSamplePosition( unsigned posi, float zoomfactor, QString type) { m_pDetailSamplePosition = posi ; m_pZoomFactor = zoomfactor; m_pType = type; update(); } void DetailWaveDisplay::paintEvent(QPaintEvent *ev) { QPainter painter( this ); painter.setRenderHint( QPainter::HighQualityAntialiasing ); painter.drawPixmap( ev->rect(), m_background, ev->rect() ); painter.setPen( QColor( 230, 230, 230 ) ); int VCenterl = height() / 4; int VCenterr = height() / 4 + height() / 2; // int imagedetailframes = m_pnormalimagedetailframes / m_pzoomFactor; int startpos = m_pDetailSamplePosition - m_pNormalImageDetailFrames / 2 ; for ( int x = 0; x < width() ; x++ ) { if ( (startpos) > 0 ){ painter.drawLine( x, (-m_pPeakDatal[startpos -1] *m_pZoomFactor) +VCenterl, x, (-m_pPeakDatal[startpos ] *m_pZoomFactor)+VCenterl ); painter.drawLine( x, (-m_pPeakDatar[startpos -1] *m_pZoomFactor) +VCenterr, x, (-m_pPeakDatar[startpos ] *m_pZoomFactor)+VCenterr ); //ERRORLOG( QString("startpos: %1").arg(startpos) ) } else { painter.drawLine( x, 0 +VCenterl, x, 0+VCenterl ); painter.drawLine( x, 0 +VCenterr, x, 0+VCenterr ); } startpos++; } painter.setPen( QPen( QColor( 255, 255, 255 ), 1, Qt::DotLine ) ); painter.drawLine( 0, VCenterl, width(),VCenterl ); painter.drawLine( 0, VCenterr, width(),VCenterr ); QColor _color; if ( m_pType == "Start" ) _color = QColor( 32, 173, 0 ); else if ( m_pType == "Loop" ) _color = QColor( 93, 170, 254 ); else if ( m_pType == "End" ) _color = QColor( 217, 68, 0 ); else _color = QColor( 255, 255, 255 ); painter.setPen( QPen( _color, 1, Qt::SolidLine ) ); painter.drawLine( 90, 0, 90,265 ); } void DetailWaveDisplay::updateDisplay( QString filename ) { Sample *pNewSample = Sample::load( filename ); if ( pNewSample ) { int mSampleLength = pNewSample->get_frames(); m_pPeakDatal = new int[ mSampleLength + m_pNormalImageDetailFrames /2 ]; m_pPeakDatar = new int[ mSampleLength + m_pNormalImageDetailFrames /2 ]; for ( int i = 0 ; i < mSampleLength + m_pNormalImageDetailFrames /2 ; i++){ m_pPeakDatal[ i ] = 0; m_pPeakDatar[ i ] = 0; } float fGain = height() / 4.0 * 1.0; float *pSampleDatal = pNewSample->get_data_l(); float *pSampleDatar = pNewSample->get_data_r(); for ( int i = 0; i < mSampleLength; i++ ){ m_pPeakDatal[ i ] = static_cast( pSampleDatal[ i ] * fGain ); m_pPeakDatar[ i ] = static_cast( pSampleDatar[ i ] * fGain ); } } delete pNewSample; } hydrogen-0.9.6-beta3/src/gui/src/SampleEditor/DetailWaveDisplay.h000066400000000000000000000030031211146647700246240ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef DETAIL_WAVE_DISPLAY #define DETAIL_WAVE_DISPLAY #include #include namespace H2Core { class Sample; } class DetailWaveDisplay : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: DetailWaveDisplay(QWidget* pParent); ~DetailWaveDisplay(); void updateDisplay( QString filename ); void paintEvent(QPaintEvent *ev); void setDetailSamplePosition( unsigned posi, float zoomfactor, QString type); private: QPixmap m_background; QString m_sSampleName; int *m_pPeakDatal; int *m_pPeakDatar; int m_pDetailSamplePosition; int m_pNormalImageDetailFrames; float m_pZoomFactor; QString m_pType; }; #endif hydrogen-0.9.6-beta3/src/gui/src/SampleEditor/MainSampleWaveDisplay.cpp000066400000000000000000000172141211146647700260140ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include "HydrogenApp.h" #include "SampleEditor.h" using namespace H2Core; #include "MainSampleWaveDisplay.h" #include "../Skin.h" const char* MainSampleWaveDisplay::__class_name = "MainSampleWaveDisplay"; MainSampleWaveDisplay::MainSampleWaveDisplay(QWidget* pParent) : QWidget( pParent ) , Object( __class_name ) { // setAttribute(Qt::WA_NoBackground); //INFOLOG( "INIT" ); int w = 624; int h = 265; resize( w, h ); bool ok = m_background.load( Skin::getImagePath() + "/waveDisplay/mainsamplewavedisplay.png" ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } m_pPeakDatal = new int[ w ]; m_pPeakDatar = new int[ w ]; m_pStartFramePosition = 25; m_pLoopFramePosition = 25; m_pEndFramePosition = width() -25; m_pmove = false; m_plocator = -1; m_pupdateposi = false; __startsliderismoved = false; __loopsliderismoved = false; __endsliderismoved = false; } MainSampleWaveDisplay::~MainSampleWaveDisplay() { //INFOLOG( "DESTROY" ); delete[] m_pPeakDatal; delete[] m_pPeakDatar; } void MainSampleWaveDisplay::paintLocatorEvent( int pos, bool updateposi) { m_pupdateposi = updateposi; if ( !updateposi ){ m_plocator = -1; }else { m_plocator = pos; } update(); } void MainSampleWaveDisplay::paintEvent(QPaintEvent *ev) { QPainter painter( this ); painter.setRenderHint( QPainter::HighQualityAntialiasing ); bool issmaller = false; painter.drawPixmap( ev->rect(), m_background, ev->rect() ); painter.setPen( QColor( 230, 230, 230 ) ); int VCenterl = height() / 4; int VCenterr = height() / 4 + height() / 2; if ( width() >= m_pSampleLength ) issmaller = true; for ( int x = 25; x < width() -25; x++ ) { if ( !issmaller || x <= m_pSampleLength){ painter.drawLine( x, -m_pPeakDatal[x -25] +VCenterl, x, -m_pPeakDatal[x -24] +VCenterl ); painter.drawLine( x, -m_pPeakDatar[x -25] +VCenterr, x, -m_pPeakDatar[x -24] +VCenterr ); }else { painter.drawLine( x, 0 +VCenterl, x, 0 +VCenterl ); painter.drawLine( x, 0 +VCenterr, x, 0 +VCenterr ); } } painter.setCompositionMode(QPainter::CompositionMode_SourceOver); painter.setPen( QPen( QColor( 255, 255, 255 ), 1, Qt::DotLine ) ); painter.drawLine( 23, 4, 23, height() -4 ); painter.drawLine( width() -23, 4,width() -23, height() -4 ); painter.setPen( QPen( QColor( 255, 255, 255 ), 1, Qt::SolidLine ) ); painter.drawLine( m_plocator, 4, m_plocator, height() -4); painter.drawLine( 0, VCenterl, width(),VCenterl ); painter.drawLine( 0, VCenterr, width(),VCenterr ); QFont font; font.setWeight( 63 ); painter.setFont( font ); //start frame pointer painter.setPen( QColor( 32, 173, 0, 200 ) ); painter.drawLine( m_pStartFramePosition, 4, m_pStartFramePosition, height() -4 ); painter.drawText( m_pStartFramePosition -10, 250, 10,20, Qt::AlignRight, "S" ); //endframe pointer painter.setPen( QColor( 217, 68, 0, 200 ) ); painter.drawLine( m_pEndFramePosition, 4, m_pEndFramePosition, height() -4 ); painter.drawText( m_pEndFramePosition -10, 123, 10, 20, Qt::AlignRight, "E" ); //loopframe pointer painter.setPen( QColor( 93, 170, 254, 200 ) ); painter.drawLine( m_pLoopFramePosition, 4, m_pLoopFramePosition, height() -4 ); painter.drawText( m_pLoopFramePosition , 0, 10, 20, Qt::AlignLeft, "L" ); } void MainSampleWaveDisplay::updateDisplayPointer() { update(); } void MainSampleWaveDisplay::updateDisplay( const QString& filename ) { Sample *pNewSample = Sample::load( filename ); if ( pNewSample ) { int nSampleLength = pNewSample->get_frames(); m_pSampleLength = nSampleLength; float nScaleFactor = nSampleLength / (width() -50); if ( nScaleFactor < 1 ){ nScaleFactor = 1; } float fGain = height() / 4.0 * 1.0; float *pSampleDatal = pNewSample->get_data_l(); float *pSampleDatar = pNewSample->get_data_r(); unsigned nSamplePos = 0; int nVall = 0; int nValr = 0; int newVall = 0; int newValr = 0; for ( int i = 0; i < width(); ++i ){ for ( int j = 0; j < nScaleFactor; ++j ) { if ( j < nSampleLength && nSamplePos < nSampleLength) { if ( pSampleDatal[ nSamplePos ] && pSampleDatar[ nSamplePos ] ){ newVall = static_cast( pSampleDatal[ nSamplePos ] * fGain ); newValr = static_cast( pSampleDatar[ nSamplePos ] * fGain ); nVall = newVall; nValr = newValr; }else { nVall = 0; nValr = 0; } } ++nSamplePos; } m_pPeakDatal[ i ] = nVall; m_pPeakDatar[ i ] = nValr; } } delete pNewSample; pNewSample = NULL; update(); } void MainSampleWaveDisplay::testPositionFromSampleeditor() { testPosition( NULL ); update(); } void MainSampleWaveDisplay::mouseMoveEvent(QMouseEvent *ev) { testPosition( ev ); update(); } void MainSampleWaveDisplay::mousePressEvent(QMouseEvent *ev) { testPosition( ev ); update(); } void MainSampleWaveDisplay::testPosition( QMouseEvent *ev ) { //startframepointer if (ev->y()>=200 ) { m_pStartFramePosition = ev->x() ; __startsliderismoved = true; if ( m_pStartFramePosition > m_pLoopFramePosition ){ m_pLoopFramePosition = m_pStartFramePosition; __loopsliderismoved = true; } if ( m_pStartFramePosition > m_pEndFramePosition ){ m_pEndFramePosition = m_pStartFramePosition; __endsliderismoved = true; } // update(); } //loopframeposition else if (ev->y()<=65 ) { m_pLoopFramePosition = ev->x() ; __loopsliderismoved = true; if ( m_pLoopFramePosition < m_pStartFramePosition ){ m_pStartFramePosition = m_pLoopFramePosition; __startsliderismoved = true; } if ( m_pLoopFramePosition > m_pEndFramePosition ){ m_pEndFramePosition = m_pLoopFramePosition; __endsliderismoved = true; } // update(); } //endframeposition else if ( ev->y() >= 86 && ev->y() <= 179 ) { m_pEndFramePosition = ev->x() ; __endsliderismoved = true; if ( m_pEndFramePosition < m_pLoopFramePosition ){ m_pLoopFramePosition = m_pEndFramePosition; __loopsliderismoved = true; } if ( m_pEndFramePosition < m_pStartFramePosition ){ m_pStartFramePosition = m_pEndFramePosition; __startsliderismoved = true; } // update(); } if ( ( m_pStartFramePosition ) >= width() -25 ) m_pStartFramePosition =width() -25; if ( ( m_pLoopFramePosition ) >= width() -25 ) m_pLoopFramePosition =width() -25; if ( ( m_pEndFramePosition ) >= width() -25 ) m_pEndFramePosition =width() -25; if ( ( m_pStartFramePosition ) <= 25 ) m_pStartFramePosition = 25; if ( ( m_pLoopFramePosition ) <= 25 ) m_pLoopFramePosition = 25; if ( ( m_pEndFramePosition ) <= 25 ) m_pEndFramePosition = 25; } void MainSampleWaveDisplay::mouseReleaseEvent(QMouseEvent *ev) { update(); bool test = HydrogenApp::get_instance()->getSampleEditor()->returnAllMainWaveDisplayValues(); if (test){ __startsliderismoved = false; __loopsliderismoved = false; __endsliderismoved = false; } } hydrogen-0.9.6-beta3/src/gui/src/SampleEditor/MainSampleWaveDisplay.h000066400000000000000000000036051211146647700254600ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef MAIN_SAMPLE_WAVE_DISPLAY #define MAIN_SAMPLE_WAVE_DISPLAY #include #include #include "SampleEditor.h" class SampleEditor; class MainSampleWaveDisplay : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: MainSampleWaveDisplay(QWidget* pParent); ~MainSampleWaveDisplay(); void updateDisplay( const QString& filename ); void updateDisplayPointer(); void paintLocatorEvent( int pos, bool last_event); void paintEvent(QPaintEvent *ev); int m_pStartFramePosition; int m_pLoopFramePosition; int m_pEndFramePosition; bool m_pmove; void testPositionFromSampleeditor(); bool __startsliderismoved; bool __loopsliderismoved; bool __endsliderismoved; private: QPixmap m_background; int *m_pPeakDatal; int *m_pPeakDatar; virtual void mouseMoveEvent(QMouseEvent *ev); virtual void mousePressEvent(QMouseEvent *ev); virtual void mouseReleaseEvent(QMouseEvent *ev); void testPosition( QMouseEvent *ev ); int m_pSampleLength; int m_plocator; bool m_pupdateposi; }; #endif hydrogen-0.9.6-beta3/src/gui/src/SampleEditor/SampleEditor.cpp000066400000000000000000000674161211146647700242160ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "SampleEditor.h" #include "../HydrogenApp.h" #include "../InstrumentEditor/InstrumentEditor.h" #include "../InstrumentEditor/InstrumentEditorPanel.h" #include "../widgets/Button.h" #include "MainSampleWaveDisplay.h" #include "DetailWaveDisplay.h" #include "TargetWaveDisplay.h" #include #include #include #include #include #include #include #include #include #include #include using namespace H2Core; using namespace std; const char* SampleEditor::__class_name = "SampleEditor"; SampleEditor::SampleEditor ( QWidget* pParent, int nSelectedLayer, QString mSamplefilename ) : QDialog ( pParent ) , Object ( __class_name ) { setupUi ( this ); INFOLOG ( "INIT" ); m_pTimer = new QTimer(this); connect(m_pTimer, SIGNAL(timeout()), this, SLOT(updateMainsamplePositionRuler())); m_pTargetDisplayTimer = new QTimer(this); connect(m_pTargetDisplayTimer, SIGNAL(timeout()), this, SLOT(updateTargetsamplePositionRuler())); m_pSampleEditorStatus = true; m_pSampleFromFile = NULL; m_pSelectedLayer = nSelectedLayer; m_samplename = mSamplefilename; m_pZoomfactor = 1; m_pDetailFrame = 0; m_pLineColor = "default"; m_pOnewayStart = false; m_pOnewayLoop = false; m_pOnewayEnd = false; m_pslframes = 0; m_pPositionsRulerPath = NULL; m_pPlayButton = false; m_pRatio = 1.0f; __rubberband.c_settings = 4; QString newfilename = mSamplefilename.section( '/', -1 ); //init Displays m_pMainSampleWaveDisplay = new MainSampleWaveDisplay( mainSampleview ); m_pSampleAdjustView = new DetailWaveDisplay( mainSampleAdjustView ); m_pTargetSampleView = new TargetWaveDisplay( targetSampleView ); setWindowTitle ( QString( "SampleEditor " + newfilename) ); setFixedSize ( width(), height() ); //this new sample give us the not changed real samplelength m_pSampleFromFile = Sample::load( mSamplefilename ); if (!m_pSampleFromFile) reject(); unsigned slframes = m_pSampleFromFile->get_frames(); LoopCountSpinBox->setRange(0, 20000 ); StartFrameSpinBox->setRange(0, slframes ); LoopFrameSpinBox->setRange(0, slframes ); EndFrameSpinBox->setRange(0, slframes ); EndFrameSpinBox->setValue( slframes ); rubberbandCsettingscomboBox->setCurrentIndex( 4 ); rubberComboBox->setCurrentIndex( 0 ); __rubberband.use = false; __rubberband.divider = 1.0; openDisplays(); getAllFrameInfos(); #ifndef H2CORE_HAVE_RUBBERBAND if ( QFile( Preferences::get_instance()->m_rubberBandCLIexecutable ).exists() == false ){ RubberbandCframe->setDisabled ( true ); __rubberband.use = false; m_pSampleEditorStatus = true; } #else RubberbandCframe->setDisabled ( false ); m_pSampleEditorStatus = true; #endif __rubberband.pitch = 0.0; } SampleEditor::~SampleEditor() { m_pMainSampleWaveDisplay->close(); delete m_pMainSampleWaveDisplay; m_pMainSampleWaveDisplay = NULL; m_pSampleAdjustView->close(); delete m_pSampleAdjustView; m_pSampleAdjustView = NULL; m_pTargetSampleView->close(); delete m_pTargetSampleView; m_pTargetSampleView = NULL; delete m_pSampleFromFile; m_pSampleFromFile = NULL; INFOLOG ( "DESTROY" ); } void SampleEditor::closeEvent(QCloseEvent *event) { if ( !m_pSampleEditorStatus ){ int err = QMessageBox::information( this, "Hydrogen", tr( "Unsaved changes left. This changes will be lost. \nAre you sure?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); if ( err == 0 ){ m_pSampleEditorStatus = true; accept(); }else { return; } }else { accept(); } } void SampleEditor::getAllFrameInfos() { H2Core::Instrument *pInstrument = NULL; Sample* pSample = NULL; Song *pSong = Hydrogen::get_instance()->getSong(); if (pSong != NULL) { InstrumentList *pInstrList = pSong->get_instrument_list(); int nInstr = Hydrogen::get_instance()->getSelectedInstrumentNumber(); if ( nInstr >= static_cast(pInstrList->size()) ) { nInstr = -1; } if (nInstr == -1) { pInstrument = NULL; } else { pInstrument = pInstrList->get( nInstr ); //INFOLOG( "new instr: " + pInstrument->m_sName ); } } H2Core::InstrumentLayer *pLayer = pInstrument->get_layer( m_pSelectedLayer ); if ( pLayer ) { pSample = pLayer->get_sample(); } //this values are needed if we restore a sample from from disk if a new song with sample changes will load m_sample_is_modified = pSample->get_is_modified(); m_pSamplerate = pSample->get_sample_rate(); __loops = pSample->get_loops(); __rubberband = pSample->get_rubberband(); if ( pSample->get_velocity_envelope()->size()==0 ) { m_pTargetSampleView->get_velocity()->clear(); m_pTargetSampleView->get_velocity()->push_back( Sample::EnvelopePoint( 0, 0 ) ); m_pTargetSampleView->get_velocity()->push_back( Sample::EnvelopePoint( m_pTargetSampleView->width(), 0 ) ); } else { *m_pTargetSampleView->get_velocity() = *pSample->get_velocity_envelope(); } if ( pSample->get_pan_envelope()->size()==0 ) { m_pTargetSampleView->get_pan()->clear(); m_pTargetSampleView->get_pan()->push_back( Sample::EnvelopePoint( 0, m_pTargetSampleView->height()/2 ) ); m_pTargetSampleView->get_pan()->push_back( Sample::EnvelopePoint( m_pTargetSampleView->width(), m_pTargetSampleView->height()/2 ) ); } else { *m_pTargetSampleView->get_pan() = *pSample->get_pan_envelope(); } if (m_sample_is_modified) { __loops.end_frame = pSample->get_loops().end_frame; if ( __loops.mode == Sample::Loops::FORWARD ) ProcessingTypeComboBox->setCurrentIndex ( 0 ); if ( __loops.mode == Sample::Loops::REVERSE ) ProcessingTypeComboBox->setCurrentIndex ( 1 ); if ( __loops.mode == Sample::Loops::PINGPONG ) ProcessingTypeComboBox->setCurrentIndex ( 2 ); StartFrameSpinBox->setValue( __loops.start_frame ); LoopFrameSpinBox->setValue( __loops.loop_frame ); EndFrameSpinBox->setValue( __loops.end_frame ); LoopCountSpinBox->setValue( __loops.count ); m_pMainSampleWaveDisplay->m_pStartFramePosition = __loops.start_frame / m_divider + 25 ; m_pMainSampleWaveDisplay->updateDisplayPointer(); m_pMainSampleWaveDisplay->m_pLoopFramePosition = __loops.loop_frame / m_divider + 25 ; m_pMainSampleWaveDisplay->updateDisplayPointer(); m_pMainSampleWaveDisplay->m_pEndFramePosition = __loops.end_frame / m_divider + 25 ; m_pMainSampleWaveDisplay->updateDisplayPointer(); if( !__rubberband.use )rubberComboBox->setCurrentIndex( 0 ); rubberbandCsettingscomboBox->setCurrentIndex( __rubberband.c_settings ); if( !__rubberband.use )rubberbandCsettingscomboBox->setCurrentIndex( 4 ); pitchdoubleSpinBox->setValue( __rubberband.pitch ); if( !__rubberband.use ) pitchdoubleSpinBox->setValue( 0.0 ); if( __rubberband.divider == 1.0/64.0) rubberComboBox->setCurrentIndex( 1 ); else if( __rubberband.divider == 1.0/32.0) rubberComboBox->setCurrentIndex( 2 ); else if( __rubberband.divider == 1.0/16.0) rubberComboBox->setCurrentIndex( 3 ); else if( __rubberband.divider == 1.0/8.0) rubberComboBox->setCurrentIndex( 4 ); else if( __rubberband.divider == 1.0/4.0) rubberComboBox->setCurrentIndex( 5 ); else if( __rubberband.divider == 1.0/2.0) rubberComboBox->setCurrentIndex( 6 ); else if( __rubberband.use && ( __rubberband.divider >= 1.0 ) ) rubberComboBox->setCurrentIndex( (int)(__rubberband.divider + 6) ); setSamplelengthFrames(); checkRatioSettings(); } m_pTargetSampleView->updateDisplay( pLayer ); connect( StartFrameSpinBox, SIGNAL( valueChanged( int ) ), this, SLOT( valueChangedStartFrameSpinBox(int) ) ); connect( LoopFrameSpinBox, SIGNAL( valueChanged( int ) ), this, SLOT( valueChangedLoopFrameSpinBox(int) ) ); connect( EndFrameSpinBox, SIGNAL( valueChanged( int ) ), this, SLOT( valueChangedEndFrameSpinBox(int) ) ); connect( LoopCountSpinBox, SIGNAL( valueChanged( int ) ), this, SLOT( valueChangedLoopCountSpinBox( int ) ) ); connect( ProcessingTypeComboBox, SIGNAL( currentIndexChanged ( const QString ) ), this, SLOT( valueChangedProcessingTypeComboBox( const QString ) ) ); connect( rubberComboBox, SIGNAL( currentIndexChanged ( const QString ) ), this, SLOT( valueChangedrubberComboBox( const QString ) ) ); connect( rubberbandCsettingscomboBox, SIGNAL( currentIndexChanged ( const QString ) ), this, SLOT( valueChangedrubberbandCsettingscomboBox( const QString ) ) ); connect( pitchdoubleSpinBox, SIGNAL ( valueChanged( double ) ), this, SLOT( valueChangedpitchdoubleSpinBox( double ) ) ); } void SampleEditor::getAllLocalFrameInfos() { __loops.start_frame = StartFrameSpinBox->value(); __loops.loop_frame = LoopFrameSpinBox->value(); __loops.count = LoopCountSpinBox->value(); __loops.end_frame = EndFrameSpinBox->value(); } void SampleEditor::openDisplays() { H2Core::Instrument *pInstrument = NULL; Song *pSong = Hydrogen::get_instance()->getSong(); if (pSong != NULL) { InstrumentList *pInstrList = pSong->get_instrument_list(); int nInstr = Hydrogen::get_instance()->getSelectedInstrumentNumber(); if ( nInstr >= static_cast(pInstrList->size()) ) { nInstr = -1; } if (nInstr == -1) { pInstrument = NULL; } else { pInstrument = pInstrList->get( nInstr ); //INFOLOG( "new instr: " + pInstrument->m_sName ); } } // wavedisplays m_divider = m_pSampleFromFile->get_frames() / 574.0F; m_pMainSampleWaveDisplay->updateDisplay( m_samplename ); m_pMainSampleWaveDisplay->move( 1, 1 ); m_pSampleAdjustView->updateDisplay( m_samplename ); m_pSampleAdjustView->move( 1, 1 ); m_pTargetSampleView->move( 1, 1 ); } void SampleEditor::on_ClosePushButton_clicked() { if ( !m_pSampleEditorStatus ){ int err = QMessageBox::information( this, "Hydrogen", tr( "Unsaved changes left. This changes will be lost. \nAre you sure?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); if ( err == 0 ){ m_pSampleEditorStatus = true; accept(); }else { return; } }else { accept(); } } void SampleEditor::on_PrevChangesPushButton_clicked() { QApplication::setOverrideCursor(Qt::WaitCursor); getAllLocalFrameInfos(); createNewLayer(); m_pSampleEditorStatus = true; QApplication::restoreOverrideCursor(); } bool SampleEditor::getCloseQuestion() { bool close = false; int err = QMessageBox::information( this, "Hydrogen", tr( "Close dialog! maybe there is some unsaved work on sample.\nAre you sure?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); if ( err == 0 ) close = true; return close; } void SampleEditor::createNewLayer() { if ( !m_pSampleEditorStatus ){ Sample *editSample = Sample::load( m_samplename, __loops, __rubberband, *m_pTargetSampleView->get_velocity(), *m_pTargetSampleView->get_pan() ); if( editSample == NULL ){ return; } AudioEngine::get_instance()->lock( RIGHT_HERE ); H2Core::Instrument *pInstrument = NULL; Song *pSong = Hydrogen::get_instance()->getSong(); if (pSong != NULL) { InstrumentList *pInstrList = pSong->get_instrument_list(); int nInstr = Hydrogen::get_instance()->getSelectedInstrumentNumber(); if ( nInstr >= static_cast(pInstrList->size()) ) { nInstr = -1; } if (nInstr == -1) { pInstrument = NULL; } else { pInstrument = pInstrList->get( nInstr ); } } H2Core::InstrumentLayer *pLayer = pInstrument->get_layer( m_pSelectedLayer ); Sample *oldSample = pLayer->get_sample(); delete oldSample; // insert new sample from newInstrument pLayer->set_sample( editSample ); AudioEngine::get_instance()->unlock(); m_pTargetSampleView->updateDisplay( pLayer ); } } void SampleEditor::mouseReleaseEvent(QMouseEvent *ev) { } bool SampleEditor::returnAllMainWaveDisplayValues() { testpTimer(); // QMessageBox::information ( this, "Hydrogen", trUtf8 ( "jep %1" ).arg(m_pSample->get_frames())); m_sample_is_modified = true; if( m_pMainSampleWaveDisplay->__startsliderismoved ) __loops.start_frame = m_pMainSampleWaveDisplay->m_pStartFramePosition * m_divider - 25 * m_divider; if( m_pMainSampleWaveDisplay->__loopsliderismoved ) __loops.loop_frame = m_pMainSampleWaveDisplay->m_pLoopFramePosition * m_divider - 25 * m_divider; if( m_pMainSampleWaveDisplay->__endsliderismoved ) __loops.end_frame = m_pMainSampleWaveDisplay->m_pEndFramePosition * m_divider - 25 * m_divider ; StartFrameSpinBox->setValue( __loops.start_frame ); LoopFrameSpinBox->setValue( __loops.loop_frame ); EndFrameSpinBox->setValue( __loops.end_frame ); m_pOnewayStart = true; m_pOnewayLoop = true; m_pOnewayEnd = true; setSamplelengthFrames(); return true; } void SampleEditor::returnAllTargetDisplayValues() { setSamplelengthFrames(); m_sample_is_modified = true; } void SampleEditor::setTrue() { m_pSampleEditorStatus = false; } void SampleEditor::valueChangedStartFrameSpinBox( int ) { testpTimer(); m_pDetailFrame = StartFrameSpinBox->value(); m_pLineColor = "Start"; if ( !m_pOnewayStart ){ m_pMainSampleWaveDisplay->m_pStartFramePosition = StartFrameSpinBox->value() / m_divider + 25 ; m_pMainSampleWaveDisplay->updateDisplayPointer(); m_pSampleAdjustView->setDetailSamplePosition( m_pDetailFrame, m_pZoomfactor , m_pLineColor); __loops.start_frame = StartFrameSpinBox->value(); }else { m_pSampleAdjustView->setDetailSamplePosition( m_pDetailFrame, m_pZoomfactor , m_pLineColor); m_pOnewayStart = false; } testPositionsSpinBoxes(); m_pSampleEditorStatus = false; setSamplelengthFrames(); } void SampleEditor::valueChangedLoopFrameSpinBox( int ) { testpTimer(); m_pDetailFrame = LoopFrameSpinBox->value(); m_pLineColor = "Loop"; if ( !m_pOnewayLoop ){ m_pMainSampleWaveDisplay->m_pLoopFramePosition = LoopFrameSpinBox->value() / m_divider + 25 ; m_pMainSampleWaveDisplay->updateDisplayPointer(); m_pSampleAdjustView->setDetailSamplePosition( m_pDetailFrame, m_pZoomfactor , m_pLineColor); __loops.loop_frame = LoopFrameSpinBox->value(); }else { m_pSampleAdjustView->setDetailSamplePosition( m_pDetailFrame, m_pZoomfactor , m_pLineColor); m_pOnewayLoop = false; } testPositionsSpinBoxes(); m_pSampleEditorStatus = false; setSamplelengthFrames(); } void SampleEditor::valueChangedEndFrameSpinBox( int ) { testpTimer(); m_pDetailFrame = EndFrameSpinBox->value(); m_pLineColor = "End"; if ( !m_pOnewayEnd ){ m_pMainSampleWaveDisplay->m_pEndFramePosition = EndFrameSpinBox->value() / m_divider + 25 ; m_pMainSampleWaveDisplay->updateDisplayPointer(); m_pSampleAdjustView->setDetailSamplePosition( m_pDetailFrame, m_pZoomfactor , m_pLineColor); __loops.end_frame = EndFrameSpinBox->value(); }else { m_pOnewayEnd = false; m_pSampleAdjustView->setDetailSamplePosition( m_pDetailFrame, m_pZoomfactor , m_pLineColor); } testPositionsSpinBoxes(); m_pSampleEditorStatus = false; setSamplelengthFrames(); } void SampleEditor::on_PlayPushButton_clicked() { if (PlayPushButton->text() == "Stop" ){ testpTimer(); return; } const float pan_L = 0.5f; const float pan_R = 0.5f; const int nLength = -1; const float fPitch = 0.0f; const int selectedLayer = InstrumentEditorPanel::get_instance()->getSelectedLayer(); Song *pSong = Hydrogen::get_instance()->getSong(); Instrument *pInstr = pSong->get_instrument_list()->get( Hydrogen::get_instance()->getSelectedInstrumentNumber() ); Note *pNote = new Note( pInstr, 0, pInstr->get_layer( selectedLayer )->get_end_velocity() - 0.01, pan_L, pan_R, nLength, fPitch); AudioEngine::get_instance()->get_sampler()->note_on(pNote); setSamplelengthFrames(); createPositionsRulerPath(); m_pPlayButton = true; m_pMainSampleWaveDisplay->paintLocatorEvent( StartFrameSpinBox->value() / m_divider + 24 , true); m_pSampleAdjustView->setDetailSamplePosition( __loops.start_frame, m_pZoomfactor , 0); if( __rubberband.use == false ){ m_pTimer->start(40); // update ruler at 25 fps } m_pRealtimeFrameEnd = Hydrogen::get_instance()->getRealtimeFrames() + m_pslframes; //calculate the new rubberband sample length if( __rubberband.use ){ m_prealtimeframeendfortarget = Hydrogen::get_instance()->getRealtimeFrames() + (m_pslframes * m_pRatio + 0.1); }else { m_prealtimeframeendfortarget = m_pRealtimeFrameEnd; } m_pTargetDisplayTimer->start(40); // update ruler at 25 fps PlayPushButton->setText( QString( "Stop") ); } void SampleEditor::on_PlayOrigPushButton_clicked() { if (PlayOrigPushButton->text() == "Stop" ){ testpTimer(); return; } const int selectedlayer = InstrumentEditorPanel::get_instance()->getSelectedLayer(); Song *pSong = Hydrogen::get_instance()->getSong(); Instrument *pInstr = pSong->get_instrument_list()->get( Hydrogen::get_instance()->getSelectedInstrumentNumber() ); /* *preview_instrument deletes the last used preview instrument, therefore we have to construct a temporary *instrument. Otherwise pInstr would be deleted if consumed by preview_instrument. */ Instrument *tmpInstrument = Instrument::load_instrument( pInstr->get_drumkit_name(), pInstr->get_name() ); Sample *pNewSample = Sample::load( pInstr->get_layer( selectedlayer )->get_sample()->get_filepath() ); if ( pNewSample ){ int length = ( ( pNewSample->get_frames() / pNewSample->get_sample_rate() + 1) * 100 ); AudioEngine::get_instance()->get_sampler()->preview_instrument( tmpInstrument ); AudioEngine::get_instance()->get_sampler()->preview_sample( pNewSample, length ); m_pslframes = pNewSample->get_frames(); } m_pMainSampleWaveDisplay->paintLocatorEvent( StartFrameSpinBox->value() / m_divider + 24 , true); m_pSampleAdjustView->setDetailSamplePosition( __loops.start_frame, m_pZoomfactor , 0); m_pTimer->start(40); // update ruler at 25 fps m_pRealtimeFrameEnd = Hydrogen::get_instance()->getRealtimeFrames() + m_pslframes; PlayOrigPushButton->setText( QString( "Stop") ); } void SampleEditor::updateMainsamplePositionRuler() { unsigned long realpos = Hydrogen::get_instance()->getRealtimeFrames(); if ( realpos < m_pRealtimeFrameEnd ){ unsigned frame = m_pslframes - ( m_pRealtimeFrameEnd - realpos ); if ( m_pPlayButton == true ){ m_pMainSampleWaveDisplay->paintLocatorEvent( m_pPositionsRulerPath[frame] / m_divider + 25 , true); m_pSampleAdjustView->setDetailSamplePosition( m_pPositionsRulerPath[frame], m_pZoomfactor , 0); }else{ m_pMainSampleWaveDisplay->paintLocatorEvent( frame / m_divider + 25 , true); m_pSampleAdjustView->setDetailSamplePosition( frame, m_pZoomfactor , 0); } // ERRORLOG( QString("sampleval: %1").arg(frame) ); }else { m_pMainSampleWaveDisplay->paintLocatorEvent( -1 , false); m_pTimer->stop(); PlayPushButton->setText( QString("&Play") ); PlayOrigPushButton->setText( QString( "P&lay original sample") ); m_pPlayButton = false; } } void SampleEditor::updateTargetsamplePositionRuler() { unsigned long realpos = Hydrogen::get_instance()->getRealtimeFrames(); unsigned targetSampleLength; if( __rubberband.use ){ targetSampleLength = m_pslframes * m_pRatio + 0.1; }else { targetSampleLength = m_pslframes; } if ( realpos < m_prealtimeframeendfortarget ){ unsigned pos = targetSampleLength - ( m_prealtimeframeendfortarget - realpos ); m_pTargetSampleView->paintLocatorEventTargetDisplay( (m_pTargetSampleView->width() * pos /targetSampleLength), true); // ERRORLOG( QString("sampleval: %1").arg(frame) ); }else { m_pTargetSampleView->paintLocatorEventTargetDisplay( -1 , false); m_pTargetDisplayTimer->stop(); PlayPushButton->setText(QString( "&Play") ); PlayOrigPushButton->setText( QString( "P&lay original sample") ); m_pPlayButton = false; } } void SampleEditor::createPositionsRulerPath() { setSamplelengthFrames(); unsigned oneSampleLength = __loops.end_frame - __loops.start_frame; unsigned loopLength = __loops.end_frame - __loops.loop_frame; unsigned repeatsLength = loopLength * __loops.count; unsigned newLength = 0; if (oneSampleLength == loopLength){ newLength = oneSampleLength + oneSampleLength * __loops.count ; }else { newLength =oneSampleLength + repeatsLength; } unsigned normalLength = m_pSampleFromFile->get_frames(); unsigned *normalFrames = new unsigned[ normalLength ]; for ( unsigned i = 0; i < normalLength; i++ ) { normalFrames[i] = i; } unsigned *tempFrames = new unsigned[ newLength ]; unsigned *loopFrames = new unsigned[ loopLength ]; Sample::Loops::LoopMode loopmode = __loops.mode; long int z = __loops.loop_frame; long int y = __loops.start_frame; for ( unsigned i = 0; i < newLength; i++){ //first vector tempFrames[i] = 0; } for ( unsigned i = 0; i < oneSampleLength; i++, y++){ //first vector tempFrames[i] = normalFrames[y]; } for ( unsigned i = 0; i < loopLength; i++, z++){ //loop vector loopFrames[i] = normalFrames[z]; } if ( loopmode == Sample::Loops::REVERSE ){ reverse(loopFrames, loopFrames + loopLength); } if ( loopmode == Sample::Loops::REVERSE && __loops.count > 0 && __loops.start_frame == __loops.loop_frame ){ reverse( tempFrames, tempFrames + oneSampleLength ); } if ( loopmode == Sample::Loops::PINGPONG && __loops.start_frame == __loops.loop_frame){ reverse(loopFrames, loopFrames + loopLength); } for ( int i = 0; i< __loops.count ;i++){ unsigned tempdataend = oneSampleLength + ( loopLength * i ); if ( __loops.start_frame == __loops.loop_frame ){ copy( loopFrames, loopFrames+loopLength ,tempFrames+ tempdataend ); } if ( loopmode == Sample::Loops::PINGPONG && __loops.count > 1){ reverse(loopFrames, loopFrames + loopLength); } if ( __loops.start_frame != __loops.loop_frame ){ copy( loopFrames, loopFrames+loopLength ,tempFrames+ tempdataend ); } } if ( __loops.count == 0 && loopmode == Sample::Loops::REVERSE ){ reverse( tempFrames + __loops.loop_frame, tempFrames + newLength); } m_pPositionsRulerPath = tempFrames; } void SampleEditor::setSamplelengthFrames() { getAllLocalFrameInfos(); unsigned oneSampleLength = __loops.end_frame - __loops.start_frame; unsigned loopLength = __loops.end_frame - __loops.loop_frame ; unsigned repeatsLength = loopLength * __loops.count; unsigned newLength = 0; if (oneSampleLength == loopLength){ newLength = oneSampleLength + oneSampleLength * __loops.count ; }else { newLength =oneSampleLength + repeatsLength; } m_pslframes = newLength; newlengthLabel->setText(QString("new sample length: %1 frames").arg(newLength)); checkRatioSettings(); } void SampleEditor::valueChangedLoopCountSpinBox( int ) { testpTimer(); if ( m_pslframes > Hydrogen::get_instance()->getAudioOutput()->getSampleRate() * 60 ){ AudioEngine::get_instance()->get_sampler()->stop_playing_notes(); m_pMainSampleWaveDisplay->paintLocatorEvent( -1 , false); m_pTimer->stop(); m_pPlayButton = false; } __loops.count = LoopCountSpinBox->value() ; m_pSampleEditorStatus = false; setSamplelengthFrames(); if ( m_pslframes > Hydrogen::get_instance()->getAudioOutput()->getSampleRate() * 60 * 30){ // >30 min LoopCountSpinBox->setMaximum(LoopCountSpinBox->value() -1); } } void SampleEditor::valueChangedrubberbandCsettingscomboBox( const QString ) { __rubberband.c_settings = rubberbandCsettingscomboBox->currentIndex(); m_pSampleEditorStatus = false; } void SampleEditor::valueChangedpitchdoubleSpinBox( double ) { __rubberband.pitch = pitchdoubleSpinBox->value(); m_pSampleEditorStatus = false; } void SampleEditor::valueChangedrubberComboBox( const QString ) { if( rubberComboBox->currentText() != "off" ){ __rubberband.use = true; }else { __rubberband.use = false; __rubberband.divider = 1.0; } switch ( rubberComboBox->currentIndex() ){ case 0 :// __rubberband.divider = 4.0; break; case 1 :// __rubberband.divider = 1.0/64.0; break; case 2 :// __rubberband.divider = 1.0/32.0; break; case 3 :// __rubberband.divider = 1.0/16.0; break; case 4 :// __rubberband.divider = 1.0/8.0; break; case 5 :// __rubberband.divider = 1.0/4.0; break; case 6 :// __rubberband.divider = 1.0/2.0; break; case 7 :// __rubberband.divider = 1.0; break; default: __rubberband.divider = (float)rubberComboBox->currentIndex() - 6.0; } // QMessageBox::information ( this, "Hydrogen", trUtf8 ( "divider %1" ).arg( __rubberband.divider )); // float __rubberband.divider; setSamplelengthFrames(); m_pSampleEditorStatus = false; } void SampleEditor::checkRatioSettings() { //calculate ration double durationtime = 60.0 / Hydrogen::get_instance()->getNewBpmJTM() * __rubberband.divider; double induration = (double) m_pslframes / (double) m_pSamplerate; if (induration != 0.0) m_pRatio = durationtime / induration; //my personal ratio quality settings //ratios < 0.1 || > 3.0 are bad (red) or experimental sounds //ratios > 0.1 - 0.5 || > 2.0 are middle (yellow) //ratios < 0.5 || < 2.0 are good (green) bool is_green = false; //green ratio if( (m_pRatio >= 0.5) && (m_pRatio <= 2.0) ){ rubberComboBox->setStyleSheet("QComboBox { background-color: green; }"); is_green = true; } //yellow ratio if( ( (m_pRatio > 0.1) || ( m_pRatio <= 3.0 ) )&& (!is_green)){ rubberComboBox->setStyleSheet("QComboBox { background-color: yellow; }"); } //red ratio if( ( m_pRatio <= 0.1 ) || ( m_pRatio > 3.0 ) && (!is_green) ){ rubberComboBox->setStyleSheet("QComboBox { background-color: red; }"); } QString text = QString( " RB-Ratio = %1").arg(m_pRatio); ratiolabel->setText( text ); //no rubberband = default if( !__rubberband.use ){ rubberComboBox->setStyleSheet("QComboBox { background-color: 58, 62, 72; }"); ratiolabel->setText( "" ); } } void SampleEditor::valueChangedProcessingTypeComboBox( const QString unused ) { switch ( ProcessingTypeComboBox->currentIndex() ){ case 0 :// __loops.mode = Sample::Loops::FORWARD; break; case 1 :// __loops.mode = Sample::Loops::REVERSE; break; case 2 :// __loops.mode = Sample::Loops::PINGPONG; break; default: __loops.mode = Sample::Loops::FORWARD; } m_pSampleEditorStatus = false; } void SampleEditor::on_verticalzoomSlider_valueChanged( int value ) { m_pZoomfactor = value / 10 +1; m_pSampleAdjustView->setDetailSamplePosition( m_pDetailFrame, m_pZoomfactor, m_pLineColor ); } void SampleEditor::testPositionsSpinBoxes() { if ( __loops.start_frame > __loops.loop_frame ) __loops.loop_frame = __loops.start_frame; if ( __loops.start_frame > __loops.end_frame ) __loops.end_frame = __loops.start_frame; if ( __loops.loop_frame > __loops.end_frame ) __loops.end_frame = __loops.loop_frame; if ( __loops.end_frame < __loops.loop_frame ) __loops.loop_frame = __loops.end_frame; if ( __loops.end_frame < __loops.start_frame ) __loops.start_frame = __loops.end_frame; StartFrameSpinBox->setValue( __loops.start_frame ); LoopFrameSpinBox->setValue( __loops.loop_frame ); EndFrameSpinBox->setValue( __loops.end_frame ); } void SampleEditor::testpTimer() { if ( m_pTimer->isActive() || m_pTargetDisplayTimer->isActive() ){ m_pMainSampleWaveDisplay->paintLocatorEvent( -1 , false); m_pTimer->stop(); m_pTargetDisplayTimer->stop(); PlayPushButton->setText( QString( "&Play" ) ); PlayOrigPushButton->setText( QString( "P&lay original sample") ); AudioEngine::get_instance()->get_sampler()->stop_playing_notes(); m_pPlayButton = false; } } hydrogen-0.9.6-beta3/src/gui/src/SampleEditor/SampleEditor.h000066400000000000000000000072171211146647700236540ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SAMPLEEDITOR_H #define SAMPLEEDITOR_H #include "ui_SampleEditor_UI.h" #include "../InstrumentEditor/InstrumentEditor.h" #include #include #include #include #include #include class Button; class MainSampleWaveDisplay; class TargetWaveDisplay; class DetailWaveDisplay; /// /// This dialog is used to preview audiofiles /// class SampleEditor : public QDialog, public Ui_SampleEditor_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: SampleEditor( QWidget* pParent, int nSelectedLayer, QString nSampleFilename ); ~SampleEditor(); void setSampleName( QString name); bool getCloseQuestion(); bool m_pSampleEditorStatus; bool returnAllMainWaveDisplayValues(); void returnAllTargetDisplayValues(); void setTrue(); //this values come from the real sample to restore a frm song loaded sample bool m_sample_is_modified; ///< true if sample is modified private slots: void valueChangedLoopCountSpinBox( int ); void valueChangedProcessingTypeComboBox( const QString ); void valueChangedrubberComboBox( const QString ); void valueChangedrubberbandCsettingscomboBox( const QString ); void valueChangedpitchdoubleSpinBox( double ); void on_ClosePushButton_clicked(); void on_PrevChangesPushButton_clicked(); void valueChangedStartFrameSpinBox( int ); void valueChangedLoopFrameSpinBox( int ); void valueChangedEndFrameSpinBox( int ); void on_PlayPushButton_clicked(); void on_PlayOrigPushButton_clicked(); void on_verticalzoomSlider_valueChanged ( int value ); void updateMainsamplePositionRuler(); void updateTargetsamplePositionRuler(); private: H2Core::Sample *m_pSampleFromFile; int m_pSelectedLayer; QString m_samplename; double m_divider; void openDisplays(); void getAllFrameInfos(); void getAllLocalFrameInfos(); void setAllSampleProps(); void testPositionsSpinBoxes(); void createNewLayer(); void setSamplelengthFrames(); void createPositionsRulerPath(); void testpTimer(); void closeEvent(QCloseEvent *event); void checkRatioSettings(); virtual void mouseReleaseEvent(QMouseEvent *ev); MainSampleWaveDisplay *m_pMainSampleWaveDisplay; TargetWaveDisplay *m_pTargetSampleView; DetailWaveDisplay *m_pSampleAdjustView; float m_pZoomfactor; unsigned m_pDetailFrame; QString m_pLineColor; bool m_pOnewayStart; bool m_pOnewayLoop; bool m_pOnewayEnd; unsigned long m_pRealtimeFrameEnd; unsigned long m_prealtimeframeendfortarget; unsigned m_pslframes; unsigned m_pSamplerate; QTimer *m_pTimer; QTimer *m_pTargetDisplayTimer; unsigned *m_pPositionsRulerPath; bool m_pPlayButton; float m_pRatio; H2Core::Sample::Loops __loops; H2Core::Sample::Rubberband __rubberband; }; #endif hydrogen-0.9.6-beta3/src/gui/src/SampleEditor/SampleEditor_UI.ui000066400000000000000000000564501211146647700244420ustar00rootroot00000000000000 SampleEditor_UI 0 0 862 545 Dialog 10 440 841 94 CrossCursor QFrame::Box QFrame::Raised rubberbandLabel 770 295 81 26 &Close 14 295 701 30 Start 100 0 Adjust sample start frame 1000000000 Qt::Horizontal 40 20 Loop 100 0 Adjust sample loop begin frame 1000000000 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">mode</span></p></body></html> 82 0 set processing forward reverse pingpong <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Loop</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt;">Count</span></p></body></html> 60 0 loops 0 10000 Qt::Horizontal 40 20 End 100 0 Adjust sample end & loop end frame 1000000000 10 10 836 267 624 265 624 265 SplitHCursor QFrame::StyledPanel QFrame::Raised 180 265 180 265 QFrame::StyledPanel QFrame::Raised 1 Qt::Vertical 10 330 841 71 QFrame::StyledPanel QFrame::Raised 10 10 821 53 "Rubberband Audio Processor" : Change the tempo (sample length) and pitch of audio. Sample length to beat: 75 16777215 off 1/64 1/32 1/16 1/8 1/4 1/2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 true 150 0 Pitch (Semitone,Cent) 75 16777215 Pitch the sample in semitones, cents -36.000000000000000 36.000000000000000 0.010000000000000 0.000000000000000 Qt::Horizontal 40 20 100 16777215 Crispness: 0 0 45 16777215 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">"Crispness" levels:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 0 equivalent to --no-transients --no-lamination --window-long</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1 equivalent to --no-transients --no-lamination</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2 equivalent to --no-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 3 equivalent to --bl-transients</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> 0 1 2 3 4 5 10 410 841 30 &Apply Changes Qt::Horizontal QSizePolicy::Maximum 13 20 &Play Qt::Horizontal QSizePolicy::Minimum 13 20 P&lay original sample 300 0 new sample length: 60 0 fade-out type volume panorama targetSampleView ClosePushButton layoutWidget layoutWidget_2 layoutWidget RubberbandCframe ProcessingTypeComboBox LoopCountSpinBox PrevChangesPushButton PlayOrigPushButton ClosePushButton hydrogen-0.9.6-beta3/src/gui/src/SampleEditor/TargetWaveDisplay.cpp000066400000000000000000000300471211146647700252130ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include "HydrogenApp.h" #include "SampleEditor.h" using namespace H2Core; #define UI_WIDTH 841 #define UI_HEIGHT 91 #include #include #include "TargetWaveDisplay.h" #include "../Skin.h" const char* TargetWaveDisplay::__class_name = "TargetWaveDisplay"; TargetWaveDisplay::TargetWaveDisplay(QWidget* pParent) : QWidget( pParent ) , Object( __class_name ) , m_sSampleName( "" ) { // setAttribute(Qt::WA_NoBackground); //INFOLOG( "INIT" ); int w = UI_WIDTH; int h = UI_HEIGHT; resize( w, h ); bool ok = m_background.load( Skin::getImagePath() + "/waveDisplay/targetsamplewavedisplay.png" ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } m_pPeakDatal = new int[ w ]; m_pPeakDatar = new int[ w ]; m_pvmove = false; m_info = ""; m_x = -10; m_y = -10; m_plocator = -1; m_pupdateposi = false; } TargetWaveDisplay::~TargetWaveDisplay() { //INFOLOG( "DESTROY" ); delete[] m_pPeakDatal; delete[] m_pPeakDatar; } void TargetWaveDisplay::paintEvent(QPaintEvent *ev) { QPainter painter( this ); painter.setRenderHint( QPainter::HighQualityAntialiasing ); painter.drawPixmap( ev->rect(), m_background, ev->rect() ); painter.setPen( QColor( 252, 142, 73 )); int VCenter = height() / 2; int lcenter = VCenter -4; int rcenter = VCenter +4; for ( int x = 0; x < width(); x++ ) { painter.drawLine( x, lcenter, x, -m_pPeakDatal[x +1] +lcenter ); } painter.setPen( QColor( 116, 186, 255 )); for ( int x = 0; x < width(); x++ ) { painter.drawLine( x, rcenter, x, -m_pPeakDatar[x +1] +rcenter ); } QFont font; font.setWeight( 63 ); painter.setFont( font ); //start frame pointer // painter.setPen( QColor( 99, 175, 254, 200 ) ); // painter.drawLine( m_pFadeOutFramePosition, 4, m_pFadeOutFramePosition, height() -4 ); // painter.drawText( m_pFadeOutFramePosition , 1, 10,20, Qt::AlignRight, "F" ); for ( int i = 0; i < static_cast(__velocity.size()) -1; i++){ //volume line painter.setPen( QPen(QColor( 255, 255, 255, 200 ) ,1 , Qt::SolidLine) ); painter.drawLine( __velocity[i].frame, __velocity[i].value, __velocity[i + 1].frame, __velocity[i +1].value ); painter.setBrush(QColor( 99, 160, 233 )); painter.drawEllipse ( __velocity[i].frame - 6/2, __velocity[i].value - 6/2, 6, 6 ); } for ( int i = 0; i < static_cast(__pan.size()) -1; i++){ //pan line painter.setPen( QPen(QColor( 249, 235, 116, 200 ) ,1 , Qt::SolidLine) ); painter.drawLine( __pan[i].frame, __pan[i].value, __pan[i + 1].frame, __pan[i +1].value ); painter.setBrush(QColor( 77, 189, 55 )); painter.drawEllipse ( __pan[i].frame - 6/2, __pan[i].value - 6/2, 6, 6 ); } painter.setCompositionMode(QPainter::CompositionMode_SourceOver); painter.setPen( QPen( QColor( 255, 255, 255 ), 1, Qt::SolidLine ) ); painter.drawLine( m_plocator, 4, m_plocator, height() -4); //volume line //first rect painter.setPen( QPen(QColor( 255, 255, 255, 200 ) ,1 , Qt::SolidLine) ); painter.setBrush(QColor( 99, 160, 233 )); painter.drawRect ( __velocity[0].frame - 12/2, __velocity[0].value - 6/2, 12, 6 ); //last rect painter.drawRect ( __velocity[__velocity.size() -1].frame - 12/2, __velocity[__velocity.size() -1].value - 6/2, 12, 6 ); //pan line //first rect painter.setPen( QPen(QColor( 249, 235, 116, 200 ) ,1 , Qt::SolidLine) ); painter.setBrush(QColor( 77, 189, 55 )); painter.drawRect ( __pan[0].frame - 12/2, __pan[0].value - 6/2, 12, 6 ); //last rect painter.drawRect ( __pan[__pan.size() -1].frame - 12/2, __pan[__pan.size() -1].value - 6/2, 12, 6 ); painter.setPen( QPen( QColor( 255, 255, 255 ), 1, Qt::DotLine ) ); painter.drawLine( 0, lcenter, UI_WIDTH, lcenter ); painter.setPen( QPen( QColor( 255, 255, 255 ), 1, Qt::DotLine ) ); painter.drawLine( 0, rcenter, UI_WIDTH, rcenter ); if (m_y < 50){ if (m_x < 790){ painter.drawText( m_x +5, m_y, 60, 20, Qt::AlignLeft, QString( m_info ) ); }else { painter.drawText( m_x - 65, m_y, 60, 20, Qt::AlignRight, QString( m_info ) ); } }else { if (m_x < 790){ painter.drawText( m_x +5, m_y -20, 60, 20, Qt::AlignLeft, QString( m_info ) ); }else { painter.drawText( m_x - 65, m_y -20, 60, 20, Qt::AlignRight, QString( m_info ) ); } } } void TargetWaveDisplay::updateDisplayPointer() { update(); } void TargetWaveDisplay::paintLocatorEventTargetDisplay( int pos, bool updateposi) { m_pupdateposi = updateposi; if ( !updateposi ){ m_plocator = -1; }else { m_plocator = pos; } update(); } void TargetWaveDisplay::updateDisplay( H2Core::InstrumentLayer *pLayer ) { if ( pLayer && pLayer->get_sample() ) { int nSampleLength = pLayer->get_sample()->get_frames(); float nScaleFactor = nSampleLength / width(); float fGain = (height() - 8) / 2.0 * pLayer->get_gain(); float *pSampleDatal = pLayer->get_sample()->get_data_l(); float *pSampleDatar = pLayer->get_sample()->get_data_r(); int nSamplePos = 0; int nVall; int nValr; for ( int i = 0; i < width(); ++i ){ nVall = 0; nValr = 0; for ( int j = 0; j < nScaleFactor; ++j ) { if ( j < nSampleLength ) { if ( pSampleDatal[ nSamplePos ] < 0 ){ int newVal = static_cast( pSampleDatal[ nSamplePos ] * -fGain ); nVall = newVal; }else { int newVal = static_cast( pSampleDatal[ nSamplePos ] * fGain ); nVall = newVal; } if ( pSampleDatar[ nSamplePos ] > 0 ){ int newVal = static_cast( pSampleDatar[ nSamplePos ] * -fGain ); nValr = newVal; }else { int newVal = static_cast( pSampleDatar[ nSamplePos ] * fGain ); nValr = newVal; } } ++nSamplePos; } m_pPeakDatal[ i ] = nVall; m_pPeakDatar[ i ] = nValr; } } update(); } void TargetWaveDisplay::mouseMoveEvent(QMouseEvent *ev) { int snapradius = 10; int editType = HydrogenApp::get_instance()->getSampleEditor()->EditTypeComboBox->currentIndex(); ///edit volume points if( editType == 0 ){ m_pvmove = true; if ( ev->x() <= 0 || ev->x() >= UI_WIDTH || ev->y() < 0 || ev->y() > UI_HEIGHT ){ update(); m_pvmove = false; return; } float info = (UI_HEIGHT - ev->y()) / (float)UI_HEIGHT; m_info.setNum( info, 'g', 2 ); m_x = ev->x(); m_y = ev->y(); for ( int i = 0; i < static_cast(__velocity.size()); i++){ if ( __velocity[i].frame >= ev->x() - snapradius && __velocity[i].frame <= ev->x() + snapradius ) { __velocity.erase( __velocity.begin() + i); Sample::EnvelopePoint pt; if ( i == 0 ){ pt.frame = 0; pt.value = ev->y(); } else if ( i == static_cast(__velocity.size()) ) { pt.frame = __velocity[i].frame; pt.value = ev->y(); } else { pt.frame = ev->x(); pt.value = ev->y(); } __velocity.push_back( pt ); sort( __velocity.begin(), __velocity.end(), Sample::EnvelopePoint::Comparator() ); update(); return; }else { m_pvmove = false; } } ///edit panorama points }else if( editType == 1 ){ m_pvmove = true; if ( ev->x() <= 0 || ev->x() >= UI_WIDTH || ev->y() < 0 || ev->y() > UI_HEIGHT ){ update(); m_pvmove = false; return; } float info = (UI_HEIGHT/2 - ev->y()) / (UI_HEIGHT/2.0); m_info.setNum( info, 'g', 2 ); m_x = ev->x(); m_y = ev->y(); for ( int i = 0; i < static_cast(__pan.size()); i++){ if ( __pan[i].frame >= ev->x() - snapradius && __pan[i].frame <= ev->x() + snapradius ) { __pan.erase( __pan.begin() + i); Sample::EnvelopePoint pt; if ( i == 0 ){ pt.frame = 0; pt.value = ev->y(); } else if ( i == static_cast(__pan.size()) ) { pt.frame = __pan[i].frame; pt.value = ev->y(); } else { pt.frame = ev->x(); pt.value = ev->y(); } __pan.push_back( pt ); sort( __pan.begin(), __pan.end(), Sample::EnvelopePoint::Comparator() ); update(); return; }else { m_pvmove = false; } } } update(); HydrogenApp::get_instance()->getSampleEditor()->setTrue(); } void TargetWaveDisplay::mousePressEvent(QMouseEvent *ev) { int snapradius = 6; bool newpoint = true; // add new point int editType = HydrogenApp::get_instance()->getSampleEditor()->EditTypeComboBox->currentIndex(); ///edit volume points if( editType == 0 ){ // test if there is already a point for ( int i = 0; i < static_cast(__velocity.size()); ++i){ if ( __velocity[i].frame >= ev->x() - snapradius && __velocity[i].frame <= ev->x() + snapradius ){ newpoint = false; } } int x = ev->x(); int y = ev->y(); if (ev->button() == Qt::LeftButton && !m_pvmove && newpoint){ float info = (UI_HEIGHT - ev->y()) / (float)UI_HEIGHT; m_info.setNum( info, 'g', 2 ); m_x = ev->x(); m_y = ev->y(); if ( ev->y() <= 0 ) y = 0; if ( ev->y() >= UI_HEIGHT ) y = UI_HEIGHT; if ( ev->x() <= snapradius ) x = snapradius; if ( ev->x() >= UI_WIDTH-snapradius ) x = UI_WIDTH-snapradius; __velocity.push_back( new Sample::EnvelopePoint( x, y ) ); sort( __velocity.begin(), __velocity.end(), Sample::EnvelopePoint::Comparator() ); } //remove point snapradius = 10; if (ev->button() == Qt::RightButton ){ if ( ev->x() <= 0 || ev->x() >= UI_WIDTH ){ update(); return; } m_info = ""; for ( int i = 0; i < static_cast(__velocity.size()); i++){ if ( __velocity[i].frame >= ev->x() - snapradius && __velocity[i].frame <= ev->x() + snapradius ){ if ( __velocity[i].frame == 0 || __velocity[i].frame == UI_WIDTH) return; __velocity.erase( __velocity.begin() + i); } } } } ///edit panorama points else if( editType == 1 ){ // test if there is already a point for ( int i = 0; i < static_cast(__pan.size()); ++i){ if ( __pan[i].frame >= ev->x() - snapradius && __pan[i].frame <= ev->x() + snapradius ){ newpoint = false; } } int x = ev->x(); int y = ev->y(); if (ev->button() == Qt::LeftButton && !m_pvmove && newpoint){ float info = (UI_HEIGHT/2 - ev->y()) / (UI_HEIGHT/2.0); m_info.setNum( info, 'g', 2 ); m_x = ev->x(); m_y = ev->y(); if ( ev->y() <= 0 ) y = 0; if ( ev->y() >= UI_HEIGHT ) y = UI_HEIGHT; if ( ev->x() <= snapradius ) x = snapradius; if ( ev->x() >= UI_WIDTH-snapradius ) x = UI_WIDTH-snapradius; __pan.push_back( new Sample::EnvelopePoint( x, y ) ); sort( __pan.begin(), __pan.end(), Sample::EnvelopePoint::Comparator() ); } //remove point snapradius = 10; if (ev->button() == Qt::RightButton ){ if ( ev->x() <= 0 || ev->x() >= UI_WIDTH ){ update(); return; } m_info = ""; for ( int i = 0; i < static_cast(__pan.size()); i++){ if ( __pan[i].frame >= ev->x() - snapradius && __pan[i].frame <= ev->x() + snapradius ){ if ( __pan[i].frame == 0 || __pan[i].frame == UI_WIDTH) return; __pan.erase( __pan.begin() + i); } } } } update(); HydrogenApp::get_instance()->getSampleEditor()->setTrue(); } void TargetWaveDisplay::mouseReleaseEvent(QMouseEvent *ev) { update(); HydrogenApp::get_instance()->getSampleEditor()->returnAllTargetDisplayValues(); } hydrogen-0.9.6-beta3/src/gui/src/SampleEditor/TargetWaveDisplay.h000066400000000000000000000037601211146647700246620ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef TARGET_WAVE_DISPLAY #define TARGET_WAVE_DISPLAY #include #include #include class SampleEditor; namespace H2Core { class InstrumentLayer; } class TargetWaveDisplay : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: TargetWaveDisplay(QWidget* pParent); ~TargetWaveDisplay(); void updateDisplay( H2Core::InstrumentLayer *pLayer ); void updateDisplayPointer(); void paintLocatorEventTargetDisplay( int pos, bool last_event); void paintEvent(QPaintEvent *ev); H2Core::Sample::PanEnvelope* get_pan() { return &__pan; } H2Core::Sample::VelocityEnvelope* get_velocity() { return &__velocity; } private: QPixmap m_background; QString m_sSampleName; int *m_pPeakDatal; int *m_pPeakDatar; unsigned m_pSampleLength; bool m_pvmove; QString m_info; int m_x; int m_y; int m_plocator; bool m_pupdateposi; virtual void mouseMoveEvent(QMouseEvent *ev); virtual void mousePressEvent(QMouseEvent *ev); virtual void mouseReleaseEvent(QMouseEvent *ev); H2Core::Sample::PanEnvelope __pan; H2Core::Sample::VelocityEnvelope __velocity; }; #endif hydrogen-0.9.6-beta3/src/gui/src/Skin.h000066400000000000000000000021251211146647700175710ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef H2_SKIN_H #define H2_SKIN_H #include #include /// /// Skin support /// class Skin { public: static QString getImagePath() { return H2Core::Filesystem::img_dir().append( "/gray" ); } }; #endif hydrogen-0.9.6-beta3/src/gui/src/SongEditor/000077500000000000000000000000001211146647700205715ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/src/SongEditor/SongEditor.cpp000066400000000000000000001731571211146647700233700ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include #include #include #include using namespace H2Core; #include "UndoActions.h" #include "MainForm.h" #include "SongEditor.h" #include "SongEditorPanel.h" #include "SongEditorPanelBpmWidget.h" #include "SongEditorPanelTagWidget.h" #include "SoundLibrary/SoundLibraryPanel.h" #include "SoundLibrary/SoundLibraryDatastructures.h" #include "../PatternEditor/PatternEditorPanel.h" #include "../HydrogenApp.h" #include "../InstrumentRack.h" #include "../widgets/Button.h" #include "../PatternFillDialog.h" #include "../PatternPropertiesDialog.h" #include "../SongPropertiesDialog.h" #include "../Skin.h" #include "../VirtualPatternDialog.h" #include using namespace std; const char* SongEditor::__class_name = "SongEditor"; SongEditorGridRepresentationItem::SongEditorGridRepresentationItem(int x, int y, bool value) { this->x = x; this->y = y; this->value = value; } SongEditor::SongEditor( QWidget *parent ) : QWidget( parent ) , Object( __class_name ) , m_bSequenceChanged( true ) , m_bIsMoving( false ) , m_bShowLasso( false ) { setAttribute(Qt::WA_NoBackground); setFocusPolicy (Qt::StrongFocus); m_nGridWidth = 16; m_nGridHeight = 18; Preferences *pref = Preferences::get_instance(); m_nMaxPatternSequence = pref->getMaxBars(); int m_nInitialWidth = 10 + m_nMaxPatternSequence * m_nGridWidth; int m_nInitialHeight = 10; this->resize( QSize(m_nInitialWidth, m_nInitialHeight) ); createBackground(); // create m_backgroundPixmap pixmap update(); } SongEditor::~SongEditor() { } int SongEditor::getGridWidth () { return m_nGridWidth; } void SongEditor::setGridWidth( uint width ) { if ( ( SONG_EDITOR_MIN_GRID_WIDTH <= width ) && ( SONG_EDITOR_MAX_GRID_WIDTH >= width ) ) { m_nGridWidth = width; this->resize ( 10 + m_nMaxPatternSequence * m_nGridWidth, height() ); } } void SongEditor::keyPressEvent ( QKeyEvent * ev ) { Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); vector* pColumns = pEngine->getSong()->get_pattern_group_vector(); if ( ev->key() == Qt::Key_Delete ) { if ( m_selectedCells.size() != 0 ) { AudioEngine::get_instance()->lock( RIGHT_HERE ); // delete all selected cells for ( uint i = 0; i < m_selectedCells.size(); i++ ) { QPoint cell = m_selectedCells[ i ]; PatternList* pColumn = (*pColumns)[ cell.x() ]; pColumn->del(pPatternList->get( cell.y() ) ); } AudioEngine::get_instance()->unlock(); m_selectedCells.clear(); m_bSequenceChanged = true; update(); } return; } ev->ignore(); } void SongEditor::mousePressEvent( QMouseEvent *ev ) { if ( ev->x() < 10 ) { return; } int nRow = ev->y() / m_nGridHeight; int nColumn = ( (int)ev->x() - 10 ) / (int)m_nGridWidth; if ( ev->modifiers() == Qt::ControlModifier ) { INFOLOG( "[mousePressEvent] CTRL pressed!" ); m_bIsCtrlPressed = true; } else { m_bIsCtrlPressed = false; } HydrogenApp* h2app = HydrogenApp::get_instance(); Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); PatternList *pPatternList = pSong->get_pattern_list(); // don't lock the audio driver before checking that... if ( nRow >= (int)pPatternList->size() || nRow < 0 || nColumn < 0 ) { return; } SongEditorActionMode actionMode = HydrogenApp::get_instance()->getSongEditorPanel()->getActionMode(); if ( actionMode == SELECT_ACTION ) { AudioEngine::get_instance()->lock( RIGHT_HERE ); bool bOverExistingPattern = false; for ( uint i = 0; i < m_selectedCells.size(); i++ ) { QPoint cell = m_selectedCells[ i ]; if ( cell.x() == nColumn && cell.y() == nRow ) { bOverExistingPattern = true; break; } } if ( bOverExistingPattern ) { // MOVE PATTERNS // INFOLOG( "[mousePressEvent] Move patterns" ); m_bIsMoving = true; m_bShowLasso = false; m_movingCells = m_selectedCells; m_clickPoint.setX( nColumn ); m_clickPoint.setY( nRow ); } else { // INFOLOG( "[mousePressEvent] Select patterns" ); // select patterns m_bShowLasso = true; m_lasso.setCoords( ev->x(), ev->y(), ev->x(), ev->y() ); setCursor( QCursor( Qt::CrossCursor ) ); m_selectedCells.clear(); m_selectedCells.push_back( QPoint( nColumn, nRow ) ); } AudioEngine::get_instance()->unlock(); // update m_bSequenceChanged = true; update(); } else if ( actionMode == DRAW_ACTION ) { H2Core::Pattern *pPattern = pPatternList->get( nRow ); vector *pColumns = pSong->get_pattern_group_vector(); // E' la lista di "colonne" di pattern if ( nColumn < (int)pColumns->size() ) { PatternList *pColumn = ( *pColumns )[ nColumn ]; bool bFound = false; unsigned nColumnIndex = 0; for ( nColumnIndex = 0; nColumnIndex < pColumn->size(); nColumnIndex++) { if ( pColumn->get( nColumnIndex ) == pPattern ) { // il pattern e' gia presente bFound = true; break; } } if ( bFound ) {//Delete pattern SE_deletePatternAction *action = new SE_deletePatternAction( nColumn, nRow, nColumnIndex) ; h2app->m_undoStack->push( action ); } else { if ( nColumn < (int)pColumns->size() ) { SE_addPatternAction *action = new SE_addPatternAction( nColumn, nRow, nColumnIndex ) ; h2app->m_undoStack->push( action ); } } } else { SE_addPatternAction *action = new SE_addPatternAction( nColumn, nRow, 0 ) ; h2app->m_undoStack->push( action ); } } } void SongEditor::addPattern( int nColumn , int nRow ) { Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); PatternList *pPatternList = pSong->get_pattern_list(); H2Core::Pattern *pPattern = pPatternList->get( nRow ); vector *pColumns = pSong->get_pattern_group_vector(); AudioEngine::get_instance()->lock( RIGHT_HERE ); if ( nColumn < (int)pColumns->size() ) { PatternList *pColumn = ( *pColumns )[ nColumn ]; // ADD PATTERN m_selectedCells.clear(); pColumn->add( pPattern ); } else { //we need to add some new columns.. PatternList *pColumn = new PatternList(); m_selectedCells.clear(); int nSpaces = nColumn - pColumns->size(); pColumns->push_back( pColumn ); for ( int i = 0; i < nSpaces; i++ ) { pColumn = new PatternList(); pColumns->push_back( pColumn ); } pColumn->add( pPattern ); } pSong->__is_modified = true; AudioEngine::get_instance()->unlock(); m_bSequenceChanged = true; update(); } void SongEditor::deletePattern( int nColumn , int nRow, unsigned nColumnIndex ) { Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); PatternList *pPatternList = pSong->get_pattern_list(); H2Core::Pattern *pPattern = pPatternList->get( nRow ); vector *pColumns = pSong->get_pattern_group_vector(); AudioEngine::get_instance()->lock( RIGHT_HERE ); PatternList *pColumn = ( *pColumns )[ nColumn ]; pColumn->del( nColumnIndex ); // elimino le colonne vuote for ( int i = pColumns->size() - 1; i >= 0; i-- ) { PatternList *pColumn = ( *pColumns )[ i ]; if ( pColumn->size() == 0 ) { pColumns->erase( pColumns->begin() + i ); delete pColumn; } else { break; } } pSong->__is_modified = true; AudioEngine::get_instance()->unlock(); m_bSequenceChanged = true; update(); } void SongEditor::mouseMoveEvent(QMouseEvent *ev) { int nRow = ev->y() / m_nGridHeight; int nColumn = ( (int)ev->x() - 10 ) / (int)m_nGridWidth; PatternList *pPatternList = Hydrogen::get_instance()->getSong()->get_pattern_list(); vector* pColumns = Hydrogen::get_instance()->getSong()->get_pattern_group_vector(); if ( m_bIsMoving ) { // WARNINGLOG( "[mouseMoveEvent] Move patterns not implemented yet" ); int nRowDiff = nRow - m_clickPoint.y(); int nColumnDiff = nColumn - m_clickPoint.x(); // INFOLOG( "[mouseMoveEvent] row diff: "+ to_string( nRowDiff ) ); // INFOLOG( "[mouseMoveEvent] col diff: "+ to_string( nColumnDiff ) ); for ( int i = 0; i < (int)m_movingCells.size(); i++ ) { QPoint cell = m_movingCells[ i ]; m_movingCells[ i ].setX( m_selectedCells[ i ].x() + nColumnDiff ); m_movingCells[ i ].setY( m_selectedCells[ i ].y() + nRowDiff ); } m_bSequenceChanged = true; update(); return; } if ( m_bShowLasso ) { // SELECTION setCursor( QCursor( Qt::CrossCursor ) ); int x = ev->x(); int y = ev->y(); if ( x < 0 ) { x = 0; } if ( y < 0 ) { y = 0; } m_lasso.setBottomRight( QPoint( x, y ) ); // aggiorno la lista di celle selezionate m_selectedCells.clear(); int nStartColumn = (int)( ( m_lasso.left() - 10.0 ) / m_nGridWidth ); int nEndColumn = nColumn; if ( nStartColumn > nEndColumn ) { int nTemp = nEndColumn; nEndColumn = nStartColumn; nStartColumn = nTemp; } int nStartRow = m_lasso.top() / m_nGridHeight; int nEndRow = nRow; if ( nStartRow > nEndRow ) { int nTemp = nEndRow; nEndRow = nStartRow; nStartRow = nTemp; } for ( int nRow = nStartRow; nRow <= nEndRow; nRow++ ) { for ( int nCol = nStartColumn; nCol <= nEndColumn; nCol++ ) { if ( nRow >= (int)pPatternList->size() || nRow < 0 || nCol < 0 ) { return; } H2Core::Pattern *pPattern = pPatternList->get( nRow ); if ( nCol < (int)pColumns->size() ) { PatternList *pColumn = ( *pColumns )[ nCol ]; for ( uint i = 0; i < pColumn->size(); i++) { if ( pColumn->get(i) == pPattern ) { // esiste un pattern in questa posizione m_selectedCells.push_back( QPoint( nCol, nRow ) ); } } } } } m_bSequenceChanged = true; update(); } } void SongEditor::mouseReleaseEvent( QMouseEvent *ev ) { UNUSED(ev); if ( m_bIsMoving ) { // fine dello spostamento dei pattern // create the new patterns /* * For the proper handling of undo events we have to make sure * that the array m_movingCells does not include cells that are * already existing. * * Example: A song consists of a sequence with the cells 0,1 and 3. * Consider that we the two first cells 0 and 1 get moved one * cell to the right (to 2,3). An undo action would now delete * (2,3) for and re-create 0,1. Cell 3 got deleted now, but it existed * before the first move operation. */ SongEditorGridRepresentationItem* item; m_existingCells.clear(); for ( uint i = 0; i < m_movingCells.size(); i++ ) { QPoint cell = m_movingCells[ i ]; //looking for cell identified with (cell.x/cell.y) in the gridRepresentation bool found = false; foreach(item, gridRepresentation) { if(item->x == cell.x() && item->y == cell.y()) { found = true; } } if( found ){ m_existingCells.push_back(cell); } } SE_movePatternCellAction *action = new SE_movePatternCellAction( m_movingCells, m_selectedCells , m_existingCells, m_bIsCtrlPressed); HydrogenApp::get_instance()->m_undoStack->push( action ); } setCursor( QCursor( Qt::ArrowCursor ) ); m_bShowLasso = false; m_bSequenceChanged = true; m_bIsCtrlPressed = false; update(); } /** * @brief moves or copies a cell which represents a pattern * @param movingCells Target cells for move/copy action * @param selectedCells Currently selected cells for move/copy action * @param existingCells Cells which are included in selected/movingCells but where existing before(import for undo). * @param bIsCtrlPressed If ctrl is pressed, do copy instead of move * @param undo Determine if this is an undo-operation */ void SongEditor::movePatternCellAction( std::vector movingCells, std::vector selectedCells, std::vector existingCells, bool bIsCtrlPressed, bool undo ) { Hydrogen *pEngine = Hydrogen::get_instance(); PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); vector* pColumns = pEngine->getSong()->get_pattern_group_vector(); AudioEngine::get_instance()->lock( RIGHT_HERE ); //create the new patterns for ( uint i = 0; i < movingCells.size(); i++ ) { QPoint cell = movingCells[ i ]; if ( cell.x() < 0 || cell.y() < 0 || cell.y() >= (int)pPatternList->size() ) { // skip continue; } // aggiungo un pattern per volta PatternList* pColumn = NULL; if ( cell.x() < (int)pColumns->size() ) { pColumn = (*pColumns)[ cell.x() ]; } else { // creo dei patternlist vuoti int nSpaces = cell.x() - pColumns->size(); for ( int i = 0; i <= nSpaces; i++ ) { pColumn = new PatternList(); pColumns->push_back( pColumn ); } } pColumn->add( pPatternList->get( cell.y() ) ); } if ( bIsCtrlPressed) //Copy { if( undo ) { // remove the old patterns for ( uint i = 0; i < selectedCells.size(); i++ ) { QPoint cell = selectedCells[ i ]; bool existing = false; for ( uint i = 0; i < existingCells.size(); i++ ) { QPoint existing_cell = existingCells[ i ]; if(existing_cell.x() == cell.x() && existing_cell.y() == cell.y()) existing = true; } //this cell existed before. Don't delete it! if(existing){ continue; } PatternList* pColumn = NULL; if ( cell.x() < (int)pColumns->size() ) { pColumn = (*pColumns)[ cell.x() ]; } else { pColumn = new PatternList(); pColumns->push_back( pColumn ); } pColumn->del(pPatternList->get( cell.y() ) ); } } } else { // MOVE // remove the old patterns for ( uint i = 0; i < selectedCells.size(); i++ ) { QPoint cell = selectedCells[ i ]; PatternList* pColumn = NULL; /* * Check first if pattern was present in movingCells. * If it was, don't delete it! */ bool moved = false; for ( uint i = 0; i < movingCells.size(); i++ ) { QPoint cell2 = movingCells[ i ]; if( cell.x() == cell2.x() && cell.y() == cell2.y() ){ moved = true; } } if( moved ) { continue; } if( undo ) { bool existing = false; for ( uint i = 0; i < existingCells.size(); i++ ) { QPoint existing_cell = existingCells[ i ]; if(existing_cell.x() == cell.x() && existing_cell.y() == cell.y()) existing = true; } //this cell existed before. Don't delete it! if(existing){ continue; } } if ( cell.x() < (int)pColumns->size() ) { pColumn = (*pColumns)[ cell.x() ]; } else { pColumn = new PatternList(); pColumns->push_back( pColumn ); } pColumn->del(pPatternList->get( cell.y() ) ); } } // remove the empty patternlist at the end of the song for ( int i = pColumns->size() - 1; i != 0 ; i-- ) { PatternList *pList = (*pColumns)[ i ]; int nSize = pList->size(); if ( nSize == 0 ) { pColumns->erase( pColumns->begin() + i ); delete pList; } else { break; } } pEngine->getSong()->__is_modified = true; AudioEngine::get_instance()->unlock(); m_bIsMoving = false; m_movingCells.clear(); m_selectedCells.clear(); m_bSequenceChanged = true; update(); } void SongEditor::paintEvent( QPaintEvent *ev ) { /* INFOLOG( "[paintEvent] x: " + to_string( ev->rect().x() ) + " y: " + to_string( ev->rect().y() ) + " w: " + to_string( ev->rect().width() ) + " h: " + to_string( ev->rect().height() ) ); */ // ridisegno tutto solo se sono cambiate le note if (m_bSequenceChanged) { m_bSequenceChanged = false; drawSequence(); } QPainter painter(this); painter.drawPixmap( ev->rect(), *m_pSequencePixmap, ev->rect() ); if ( m_bShowLasso ) { QPen pen( Qt::white ); pen.setStyle( Qt::DotLine ); painter.setPen( pen ); painter.drawRect( m_lasso ); } } void SongEditor::createBackground() { UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); QColor backgroundColor( pStyle->m_songEditor_backgroundColor.getRed(), pStyle->m_songEditor_backgroundColor.getGreen(), pStyle->m_songEditor_backgroundColor.getBlue() ); QColor alternateRowColor( pStyle->m_songEditor_alternateRowColor.getRed(), pStyle->m_songEditor_alternateRowColor.getGreen(), pStyle->m_songEditor_alternateRowColor.getBlue() ); QColor linesColor( pStyle->m_songEditor_lineColor.getRed(), pStyle->m_songEditor_lineColor.getGreen(), pStyle->m_songEditor_lineColor.getBlue() ); Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); uint nPatterns = pSong->get_pattern_list()->size(); static int nOldHeight = -1; int nNewHeight = m_nGridHeight * nPatterns; if (nOldHeight != nNewHeight) { // cambiamento di dimensioni... if (nNewHeight == 0) { nNewHeight = 1; // the pixmap should not be empty } m_pBackgroundPixmap = new QPixmap( width(), nNewHeight ); // initialize the pixmap m_pSequencePixmap = new QPixmap( width(), nNewHeight ); // initialize the pixmap this->resize( QSize( width(), nNewHeight ) ); } m_pBackgroundPixmap->fill( alternateRowColor ); QPainter p( m_pBackgroundPixmap ); p.setPen( linesColor ); /* // sfondo per celle scure (alternato) for (uint i = 0; i < nPatterns; i++) { if ( ( i % 2) != 0) { uint y = m_nGridHeight * i; p.fillRect ( 0, y, m_nMaxPatternSequence * m_nGridWidth, 2, backgroundColor ); p.fillRect ( 0, y + 2, m_nMaxPatternSequence * m_nGridWidth, m_nGridHeight - 4, alternateRowColor ); p.fillRect ( 0, y + m_nGridHeight - 2, m_nMaxPatternSequence * m_nGridWidth, 2, backgroundColor ); } } */ // celle... p.setPen( linesColor ); // vertical lines for (uint i = 0; i < m_nMaxPatternSequence + 1; i++) { uint x = 10 + i * m_nGridWidth; int x1 = x; int x2 = x + m_nGridWidth; p.drawLine( x1, 0, x1, m_nGridHeight * nPatterns ); p.drawLine( x2, 0, x2, m_nGridHeight * nPatterns ); } p.setPen( linesColor ); // horizontal lines for (uint i = 0; i < nPatterns; i++) { uint y = m_nGridHeight * i; int y1 = y + 2; int y2 = y + m_nGridHeight - 2; p.drawLine( 0, y1, (m_nMaxPatternSequence * m_nGridWidth), y1 ); p.drawLine( 0, y2, (m_nMaxPatternSequence * m_nGridWidth), y2 ); } p.setPen( backgroundColor ); // horizontal lines (erase..) for (uint i = 0; i < nPatterns + 1; i++) { uint y = m_nGridHeight * i; p.fillRect( 0, y, m_nMaxPatternSequence * m_nGridWidth, 2, backgroundColor ); p.drawLine( 0, y + m_nGridHeight - 1, m_nMaxPatternSequence * m_nGridWidth, y + m_nGridHeight - 1 ); } //~ celle m_bSequenceChanged = true; } void SongEditor::cleanUp(){ delete m_pBackgroundPixmap; delete m_pSequencePixmap; } void SongEditor::drawSequence() { QPainter p; p.begin( m_pSequencePixmap ); p.drawPixmap( rect(), *m_pBackgroundPixmap, rect() ); p.end(); Song* song = Hydrogen::get_instance()->getSong(); PatternList *patList = song->get_pattern_list(); vector* pColumns = song->get_pattern_group_vector(); uint listLength = patList->size(); //Drawing the pattern based on the gridRepresentation array while (!gridRepresentation.isEmpty()) delete gridRepresentation.takeFirst(); for (uint i = 0; i < pColumns->size(); i++) { PatternList* pColumn = (*pColumns)[ i ]; std::set drawnAsVirtual; for (uint nPat = 0; nPat < pColumn->size(); ++nPat) { H2Core::Pattern *pat = pColumn->get( nPat ); if (drawnAsVirtual.find(pat) == drawnAsVirtual.end()) { int position = -1; // find the position in pattern list for (uint j = 0; j < listLength; j++) { H2Core::Pattern *pat2 = patList->get( j ); if (pat == pat2) { position = j; break; } } if (position == -1) { WARNINGLOG( QString("[drawSequence] position == -1, group = %1").arg( i ) ); } //normal pattern gridRepresentation.append(new SongEditorGridRepresentationItem(i,position,false)); }//if for ( Pattern::virtual_patterns_cst_it_t it = pat->get_flattened_virtual_patterns()->begin(); it != pat->get_flattened_virtual_patterns()->end(); ++it) { if (drawnAsVirtual.find(*it) == drawnAsVirtual.end()) { int position = patList->index(*it); if (position == -1) { WARNINGLOG( QString("[drawSequence] position == -1, group = %1").arg( i ) ); } //virtual pattern gridRepresentation.append(new SongEditorGridRepresentationItem(i,position,true)); drawnAsVirtual.insert(*it); } } } } //Draw the patterns according to the gridRepresentation SongEditorGridRepresentationItem* s; foreach(s, gridRepresentation) { drawPattern( s->x, s->y, s->value); } // Moving cells p.begin( m_pSequencePixmap ); // p.setRasterOp( Qt::XorROP ); // comix: this composition mode seems to be not available on Mac p.setCompositionMode( QPainter::CompositionMode_Xor ); QPen pen( Qt::gray ); pen.setStyle( Qt::DotLine ); p.setPen( pen ); for ( uint i = 0; i < m_movingCells.size(); i++ ) { int x = 10 + m_nGridWidth * ( m_movingCells[ i ] ).x(); int y = m_nGridHeight * ( m_movingCells[ i ] ).y(); QColor patternColor; patternColor.setRgb( 255, 255, 255 ); p.fillRect( x + 2, y + 4, m_nGridWidth - 3, m_nGridHeight - 7, patternColor ); } } void SongEditor::drawPattern( int pos, int number, bool invertColour ) { Preferences *pref = Preferences::get_instance(); UIStyle *pStyle = pref->getDefaultUIStyle(); QPainter p( m_pSequencePixmap ); QColor patternColor( pStyle->m_songEditor_pattern1Color.getRed(), pStyle->m_songEditor_pattern1Color.getGreen(), pStyle->m_songEditor_pattern1Color.getBlue() ); if (true == invertColour) { patternColor = patternColor.darker(200); }//if bool bIsSelected = false; for ( uint i = 0; i < m_selectedCells.size(); i++ ) { QPoint point = m_selectedCells[ i ]; if ( point.x() == pos && point.y() == number ) { bIsSelected = true; break; } } if ( bIsSelected ) { patternColor = patternColor.dark( 130 ); } int x = 10 + m_nGridWidth * pos; int y = m_nGridHeight * number; p.fillRect( x + 1, y + 3, m_nGridWidth - 1, m_nGridHeight - 5, patternColor ); } void SongEditor::clearThePatternSequenseVector( QString filename ) { Hydrogen *engine = Hydrogen::get_instance(); AudioEngine::get_instance()->lock( RIGHT_HERE ); Song *song = engine->getSong(); //before delet the sequense, write a temp seqense file to disk LocalFileMng fileMng; int err = fileMng.writeTempPatternList( song , filename); vector *pPatternGroupsVect = song->get_pattern_group_vector(); for (uint i = 0; i < pPatternGroupsVect->size(); i++) { PatternList *pPatternList = (*pPatternGroupsVect)[i]; pPatternList->clear(); delete pPatternList; } pPatternGroupsVect->clear(); song->__is_modified = true; AudioEngine::get_instance()->unlock(); m_bSequenceChanged = true; update(); } void SongEditor::updateEditorandSetTrue() { Hydrogen::get_instance()->getSong()->__is_modified = true; m_bSequenceChanged = true; update(); } // ::::::::::::::::::: const char* SongEditorPatternList::__class_name = "SongEditorPatternList"; SongEditorPatternList::SongEditorPatternList( QWidget *parent ) : QWidget( parent ) , Object( __class_name ) , EventListener() , m_pBackgroundPixmap( NULL ) { m_nWidth = 200; m_nGridHeight = 18; setAttribute(Qt::WA_NoBackground); setAcceptDrops(true); patternBeingEdited = NULL; line = new QLineEdit( "Inline Pattern Name", this ); line->setFrame( false ); line->hide(); line->setAcceptDrops( false ); connect( line, SIGNAL(editingFinished()), this, SLOT(inlineEditingFinished()) ); connect( line, SIGNAL(returnPressed()), this, SLOT(inlineEditingEntered()) ); this->resize( m_nWidth, m_nInitialHeight ); m_labelBackgroundLight.load( Skin::getImagePath() + "/songEditor/songEditorLabelBG.png" ); m_labelBackgroundDark.load( Skin::getImagePath() + "/songEditor/songEditorLabelABG.png" ); m_labelBackgroundSelected.load( Skin::getImagePath() + "/songEditor/songEditorLabelSBG.png" ); m_playingPattern_on_Pixmap.load( Skin::getImagePath() + "/songEditor/playingPattern_on.png" ); m_playingPattern_off_Pixmap.load( Skin::getImagePath() + "/songEditor/playingPattern_off.png" ); m_pPatternPopup = new QMenu( this ); m_pPatternPopup->addAction( trUtf8("Copy"), this, SLOT( patternPopup_copy() ) ); m_pPatternPopup->addAction( trUtf8("Delete"), this, SLOT( patternPopup_delete() ) ); m_pPatternPopup->addAction( trUtf8("Fill/Clear ..."), this, SLOT( patternPopup_fill() ) ); m_pPatternPopup->addAction( trUtf8("Properties"), this, SLOT( patternPopup_properties() ) ); m_pPatternPopup->addAction( trUtf8("Load Pattern"), this, SLOT( patternPopup_load() ) ); m_pPatternPopup->addAction( trUtf8("Save Pattern"), this, SLOT( patternPopup_save() ) ); m_pPatternPopup->addAction( trUtf8("Export Pattern"), this, SLOT( patternPopup_export() ) ); m_pPatternPopup->addAction( trUtf8("Virtual Pattern"), this, SLOT( patternPopup_virtualPattern() ) ); HydrogenApp::get_instance()->addEventListener( this ); createBackground(); update(); } SongEditorPatternList::~SongEditorPatternList() { } void SongEditorPatternList::patternChangedEvent() { createBackground(); update(); ///here we check the timeline && m_pSong->get_mode() == Song::SONG_MODE Hydrogen *engine = Hydrogen::get_instance(); if ( ( Preferences::get_instance()->getUseTimelineBpm() ) && ( engine->getSong()->get_mode() == Song::SONG_MODE ) ){ for ( int i = 0; i < static_cast(engine->m_timelinevector.size()); i++){ if ( ( engine->m_timelinevector[i].m_htimelinebeat == engine->getPatternPos() ) && ( engine->getNewBpmJTM() != engine->m_timelinevector[i].m_htimelinebpm ) ){ engine->setBPM( engine->m_timelinevector[i].m_htimelinebpm ); }//if }//for }//if } /// Single click, select the next pattern void SongEditorPatternList::mousePressEvent( QMouseEvent *ev ) { int row = (ev->y() / m_nGridHeight); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *patternList = song->get_pattern_list(); if ( row >= (int)patternList->size() ) { return; } if ( (ev->button() == Qt::MidButton) || (ev->modifiers() == Qt::ControlModifier && ev->button() == Qt::RightButton) || (ev->modifiers() == Qt::ControlModifier && ev->button() == Qt::LeftButton) ){ togglePattern( row ); } else { engine->setSelectedPatternNumber( row ); if (ev->button() == Qt::RightButton) { m_pPatternPopup->popup( QPoint( ev->globalX(), ev->globalY() ) ); } } createBackground(); update(); } /// /// Start/stop playing a pattern in "pattern mode" /// void SongEditorPatternList::togglePattern( int row ) { Hydrogen *engine = Hydrogen::get_instance(); engine->sequencer_setNextPattern( row, false, true ); createBackground(); update(); } void SongEditorPatternList::mouseDoubleClickEvent( QMouseEvent *ev ) { int row = (ev->y() / m_nGridHeight); inlineEditPatternName( row ); } void SongEditorPatternList::inlineEditPatternName( int row ) { Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *patternList = song->get_pattern_list(); if ( row >= (int)patternList->size() ) { return; } patternBeingEdited = patternList->get( row ); line->setGeometry( 23, row * m_nGridHeight , m_nWidth - 23, m_nGridHeight ); line->setText( patternBeingEdited->get_name() ); line->selectAll(); line->show(); line->setFocus(); } void SongEditorPatternList::inlineEditingEntered() { assert( patternBeingEdited != NULL ); if ( PatternPropertiesDialog::nameCheck( line->text() ) ) { Hydrogen *pEngine = Hydrogen::get_instance(); int nSelectedPattern = pEngine->getSelectedPatternNumber(); SE_modifyPatternPropertiesAction *action = new SE_modifyPatternPropertiesAction( patternBeingEdited->get_name() , patternBeingEdited->get_info(), patternBeingEdited->get_category(), line->text(), patternBeingEdited->get_info(), patternBeingEdited->get_category(), nSelectedPattern ); HydrogenApp::get_instance()->m_undoStack->push( action ); } // patternBeingEdited = NULL; } void SongEditorPatternList::inlineEditingFinished() { patternBeingEdited = NULL; line->hide(); } void SongEditorPatternList::paintEvent( QPaintEvent *ev ) { QPainter painter(this); painter.drawPixmap( ev->rect(), *m_pBackgroundPixmap, ev->rect() ); } void SongEditorPatternList::updateEditor() { if(!isVisible()) { return; } update(); } void SongEditorPatternList::createBackground() { Preferences *pref = Preferences::get_instance(); UIStyle *pStyle = pref->getDefaultUIStyle(); QColor textColor( pStyle->m_songEditor_textColor.getRed(), pStyle->m_songEditor_textColor.getGreen(), pStyle->m_songEditor_textColor.getBlue() ); QString family = pref->getApplicationFontFamily(); int size = pref->getApplicationFontPointSize(); QFont textFont( family, size ); QFont boldTextFont( textFont); boldTextFont.setPointSize(10); boldTextFont.setBold( true ); Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); int nPatterns = pSong->get_pattern_list()->size(); int nSelectedPattern = pEngine->getSelectedPatternNumber(); static int oldHeight = -1; int newHeight = m_nGridHeight * nPatterns; if (oldHeight != newHeight) { if (newHeight == 0) { newHeight = 1; // the pixmap should not be empty } delete m_pBackgroundPixmap; m_pBackgroundPixmap = new QPixmap( m_nWidth, newHeight ); // initialize the pixmap this->resize( m_nWidth, newHeight ); } m_pBackgroundPixmap->fill( Qt::black ); QPainter p( m_pBackgroundPixmap ); p.setFont( boldTextFont ); for ( int i = 0; i < nPatterns; i++ ) { uint y = m_nGridHeight * i; if ( i == nSelectedPattern ) { p.drawPixmap( QPoint( 0, y ), m_labelBackgroundSelected ); } else { if ( ( i % 2) == 0 ) { p.drawPixmap( QPoint( 0, y ), m_labelBackgroundDark ); } else { p.drawPixmap( QPoint( 0, y ), m_labelBackgroundLight ); } } } PatternList *pCurrentPatternList = pEngine->getCurrentPatternList(); /// paint the foreground (pattern name etc.) for ( int i = 0; i < nPatterns; i++ ) { H2Core::Pattern *pPattern = pSong->get_pattern_list()->get(i); //uint y = m_nGridHeight * i; // Text bool bNext = false, bActive = false; /* for (uint j = 0; j < pCurrentPatternList->size(); j++) { if ( pPattern == pCurrentPatternList->get(j) ) { bActive = true; break; } }*/ if ( pCurrentPatternList->index( pPattern ) != -1 ) bActive = true; if ( pEngine->getNextPatterns()->index( pPattern ) != -1 ) bNext = true; if ( i == nSelectedPattern ) { p.setPen( QColor( 0,0,0 ) ); } else { p.setPen( textColor ); } uint text_y = i * m_nGridHeight; if ( bNext ) { p.drawPixmap( QPoint( 5, text_y + 3 ), m_playingPattern_off_Pixmap ); } else if (bActive) { // p.drawText( 5, text_y - 1 - m_nGridHeight, m_nWidth - 25, m_nGridHeight + 2, Qt::AlignVCenter, ">" ); //mark active pattern with triangular if( ! pref->patternModePlaysSelected() ){ p.drawPixmap( QPoint( 5, text_y + 3 ), m_playingPattern_on_Pixmap ); } } p.drawText( 25, text_y - 1, m_nWidth - 25, m_nGridHeight + 2, Qt::AlignVCenter, pPattern->get_name() ); } } void SongEditorPatternList::patternPopup_virtualPattern() { Hydrogen *pEngine = Hydrogen::get_instance(); int nSelectedPattern = pEngine->getSelectedPatternNumber(); VirtualPatternDialog *dialog = new VirtualPatternDialog( this ); SongEditorPanel *pSEPanel = HydrogenApp::get_instance()->getSongEditorPanel(); int tmpselectedpatternpos = pEngine->getSelectedPatternNumber(); dialog->patternList->setSortingEnabled(1); Song *song = pEngine->getSong(); PatternList *pPatternList = song->get_pattern_list(); H2Core::Pattern *selectedPattern = pPatternList->get(tmpselectedpatternpos); std::map patternNameMap; int listsize = pPatternList->size(); for (unsigned int index = 0; index < listsize; ++index) { H2Core::Pattern *curPattern = pPatternList->get( index ); QString patternName = curPattern->get_name(); if (patternName == selectedPattern->get_name()) { continue; }//if patternNameMap[patternName] = curPattern; QListWidgetItem *newItem = new QListWidgetItem(patternName, dialog->patternList); dialog->patternList->insertItem(0, newItem ); if (selectedPattern->get_virtual_patterns()->find(curPattern) != selectedPattern->get_virtual_patterns()->end()) { dialog->patternList->setItemSelected(newItem, true); }//if }//for if ( dialog->exec() == QDialog::Accepted ) { selectedPattern->virtual_patterns_clear(); for (unsigned int index = 0; index < listsize-1; ++index) { QListWidgetItem *listItem = dialog->patternList->item(index); if (dialog->patternList->isItemSelected(listItem) == true) { if (patternNameMap.find(listItem->text()) != patternNameMap.end()) { selectedPattern->virtual_patterns_add(patternNameMap[listItem->text()]); }//if }//if }//for pSEPanel->updateAll(); }//if pPatternList->flattened_virtual_patterns_compute(); delete dialog; }//patternPopup_virtualPattern void SongEditorPatternList::patternPopup_load() { HydrogenApp *hydrogenApp = HydrogenApp::get_instance(); Hydrogen *engine = Hydrogen::get_instance(); int tmpselectedpatternpos = engine->getSelectedPatternNumber(); Song *song = engine->getSong(); Pattern *pat = song->get_pattern_list()->get( tmpselectedpatternpos ); QString oldPatternName = pat->get_name(); QDir dirPattern( Preferences::get_instance()->getDataDirectory() + "/patterns" ); std::auto_ptr fd( new QFileDialog ); fd->setFileMode(QFileDialog::ExistingFile); fd->setFilter( trUtf8("Hydrogen Pattern (*.h2pattern)") ); fd->setDirectory(dirPattern ); fd->setWindowTitle( trUtf8( "Open Pattern" ) ); QString filename; if (fd->exec() == QDialog::Accepted) { filename = fd->selectedFiles().first(); } else { return; } //create a unique sequencefilename time_t thetime; thetime = time(NULL); QString sequenceFilename = Preferences::get_instance()->getTmpDirectory() +QString("%1").arg(thetime)+ QString( "SEQ.xml" ); SE_loadPatternAction *action = new SE_loadPatternAction( filename, oldPatternName, sequenceFilename, tmpselectedpatternpos, false ); hydrogenApp->addTemporaryFile( sequenceFilename ); hydrogenApp->m_undoStack->push( action ); } void SongEditorPatternList::loadPatternAction( QString afilename, int position) { Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *pPatternList = song->get_pattern_list(); LocalFileMng mng; LocalFileMng fileMng; Pattern* err = fileMng.loadPattern( afilename ); if ( err == 0 ) { _ERRORLOG( "Error loading the pattern" ); }else{ H2Core::Pattern *pNewPattern = err; pPatternList->add( pNewPattern ); for (int nPatr = pPatternList->size() +1 ; nPatr >= position; nPatr--) { H2Core::Pattern *pPattern = pPatternList->get(nPatr - 1); pPatternList->replace( nPatr, pPattern ); } pPatternList->replace( position, pNewPattern ); engine->setSelectedPatternNumber( position ); song->__is_modified = true; createBackground(); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); } } void SongEditorPatternList::patternPopup_export() { HydrogenApp::get_instance()->getMainForm()->action_file_export_pattern_as(); return; } void SongEditorPatternList::patternPopup_save() { Hydrogen *engine = Hydrogen::get_instance(); int nSelectedPattern = engine->getSelectedPatternNumber(); Song *song = engine->getSong(); Pattern *pat = song->get_pattern_list()->get( nSelectedPattern ); QString patternname = pat->get_name(); LocalFileMng fileMng; int err = fileMng.savePattern( song, engine->getCurrentDrumkitname(), nSelectedPattern, patternname, patternname, 1 ); if ( err == 1 ) { int res = QMessageBox::information( this, "Hydrogen", tr( "The pattern-file exists. \nOverwrite the existing pattern?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); if ( res == 0 ) { int err2 = fileMng.savePattern( song, engine->getCurrentDrumkitname(), nSelectedPattern, patternname, patternname, 3 ); if( err2 == 1){ _ERRORLOG( "Error saving the pattern" ); return; } //if err2 }else{ // res cancel return; } //if res } //if err #ifdef WIN32 Sleep ( 10 ); #else usleep ( 10000 ); #endif SoundLibraryDatabase::get_instance()->updatePatterns(); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->test_expandedItems(); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->updateDrumkitList(); } void SongEditorPatternList::patternPopup_edit() { HydrogenApp::get_instance()->getPatternEditorPanel()->show(); HydrogenApp::get_instance()->getPatternEditorPanel()->setFocus(); } void SongEditorPatternList::patternPopup_properties() { Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *patternList = song->get_pattern_list(); int nSelectedPattern = engine->getSelectedPatternNumber(); H2Core::Pattern *pattern = patternList->get( nSelectedPattern ); PatternPropertiesDialog *dialog = new PatternPropertiesDialog(this, pattern, nSelectedPattern, false); if ( dialog->exec() == QDialog::Accepted ); delete dialog; dialog = NULL; } void SongEditorPatternList::acceptPatternPropertiesDialogSettings(QString newPatternName, QString newPatternInfo, QString newPatternCategory, int patternNr) { Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *patternList = song->get_pattern_list(); H2Core::Pattern *pattern = patternList->get( patternNr ); pattern->set_name( newPatternName ); pattern->set_info( newPatternInfo ); pattern->set_category( newPatternCategory ); song->__is_modified = true; EventQueue::get_instance()->push_event( EVENT_SELECTED_PATTERN_CHANGED, -1 ); createBackground(); update(); } void SongEditorPatternList::revertPatternPropertiesDialogSettings(QString oldPatternName, QString oldPatternInfo, QString oldPatternCategory, int patternNr) { Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *patternList = song->get_pattern_list(); H2Core::Pattern *pattern = patternList->get( patternNr ); pattern->set_name( oldPatternName ); pattern->set_category( oldPatternCategory ); song->__is_modified = true; EventQueue::get_instance()->push_event( EVENT_SELECTED_PATTERN_CHANGED, -1 ); createBackground(); update(); } void SongEditorPatternList::patternPopup_delete() { Hydrogen *pEngine = Hydrogen::get_instance(); HydrogenApp *hydrogenApp = HydrogenApp::get_instance(); int patternPosition = pEngine->getSelectedPatternNumber(); //create a unique sequencefilename time_t thetime; thetime = time(NULL); QString sequenceFilename = Preferences::get_instance()->getTmpDirectory() +QString("%1").arg(thetime)+ QString( "SEQ.xml" ); //create a unique patternfilename QString patternFilename = Preferences::get_instance()->getTmpDirectory() +QString("%1").arg(thetime)+ QString( "PAT.xml" ); SE_deletePatternFromListAction *action = new SE_deletePatternFromListAction( patternFilename , sequenceFilename, patternPosition ); hydrogenApp->addTemporaryFile( sequenceFilename ); hydrogenApp->addTemporaryFile( patternFilename ); hydrogenApp->m_undoStack->push( action ); } void SongEditorPatternList::deletePatternFromList( QString patternFilename, QString sequenceFileName, int patternPosition ) { Hydrogen *pEngine = Hydrogen::get_instance(); if ( pEngine->getSong()->get_mode() == Song::PATTERN_MODE ) { pEngine->sequencer_setNextPattern( -1, false, false ); // reimposto il prossimo pattern a NULL, altrimenti viene scelto quello che sto distruggendo ora... } Song *song = pEngine->getSong(); PatternList *pSongPatternList = song->get_pattern_list(); //write sequence to disk //this is important because parts of the sequese will remove after deleting a pattern LocalFileMng fileMng; int errseq = fileMng.writeTempPatternList( song , sequenceFileName); //write pattern to disk; Pattern *pat = song->get_pattern_list()->get( patternPosition ); QString patternname = pat->get_name(); int err =1; err = fileMng.savePattern( song, pEngine->getCurrentDrumkitname(), patternPosition, patternFilename, patternname, 4 ); #ifdef WIN32 Sleep ( 10 ); #else usleep ( 10000 ); #endif //~save pattern end H2Core::Pattern *pattern = pSongPatternList->get( patternPosition ); INFOLOG( QString("[patternPopup_delete] Delete pattern: %1 @%2").arg(pattern->get_name()).arg( (long)pattern ) ); pSongPatternList->del(pattern); vector *patternGroupVect = song->get_pattern_group_vector(); uint i = 0; while (i < patternGroupVect->size() ) { PatternList *list = (*patternGroupVect)[i]; uint j = 0; while ( j < list->size() ) { H2Core::Pattern *pOldPattern = list->get( j ); if (pOldPattern == pattern ) { list->del( j ); continue; } j++; } i++; } PatternList *list = pEngine->getCurrentPatternList(); list->del( pattern ); // se esiste, seleziono il primo pattern if ( pSongPatternList->size() > 0 ) { H2Core::Pattern *pFirstPattern = pSongPatternList->get( 0 ); list->add( pFirstPattern ); // Cambio due volte...cosi' il pattern editor viene costretto ad aggiornarsi pEngine->setSelectedPatternNumber( -1 ); pEngine->setSelectedPatternNumber( 0 ); } else { // there's no patterns.. Pattern *emptyPattern = new Pattern(); emptyPattern->set_name( trUtf8("Pattern 1") ); emptyPattern->set_category( trUtf8("not_categorized") ); pSongPatternList->add( emptyPattern ); pEngine->setSelectedPatternNumber( -1 ); pEngine->setSelectedPatternNumber( 0 ); } for (unsigned int index = 0; index < pSongPatternList->size(); ++index) { H2Core::Pattern *curPattern = pSongPatternList->get(index); Pattern::virtual_patterns_cst_it_t it = curPattern->get_virtual_patterns()->find(pattern); if (it != curPattern->get_virtual_patterns()->end()) { curPattern->virtual_patterns_del(*it); }//if }//for pSongPatternList->flattened_virtual_patterns_compute(); delete pattern; song->__is_modified = true; HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); } void SongEditorPatternList::restoreDeletedPatternsFromList( QString patternFilename, QString sequenceFileName, int patternPosition ) { Hydrogen *engine = Hydrogen::get_instance(); int tmpselectedpatternpos = patternPosition; Song *song = engine->getSong(); PatternList *pPatternList = song->get_pattern_list(); LocalFileMng mng; LocalFileMng fileMng; Pattern* err = fileMng.loadPattern( patternFilename ); if ( err == 0 ) { _ERRORLOG( "Error loading the pattern" ); }else{ H2Core::Pattern *pNewPattern = err; pPatternList->add( pNewPattern ); for (int nPatr = pPatternList->size() +1 ; nPatr >= tmpselectedpatternpos; nPatr--) { H2Core::Pattern *pPattern = pPatternList->get(nPatr - 1); pPatternList->replace( nPatr, pPattern ); } pPatternList->replace( tmpselectedpatternpos, pNewPattern ); song->__is_modified = true; createBackground(); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); EventQueue::get_instance()->push_event( EVENT_SELECTED_PATTERN_CHANGED, -1 ); } } void SongEditorPatternList::patternPopup_copy() { Hydrogen *pEngine = Hydrogen::get_instance(); HydrogenApp *hydrogenApp = HydrogenApp::get_instance(); Song *pSong = pEngine->getSong(); PatternList *pPatternList = pSong->get_pattern_list(); int nSelectedPattern = pEngine->getSelectedPatternNumber(); H2Core::Pattern *pPattern = pPatternList->get( nSelectedPattern ); //create a tmp pattern needed for PatternPropertiesDialog. H2Core::Pattern *pNewPattern = new Pattern( pPattern ); pPatternList->add( pNewPattern ); // rename the copied pattern PatternPropertiesDialog *dialog = new PatternPropertiesDialog( this, pNewPattern, nSelectedPattern, true ); if ( dialog->exec() == QDialog::Accepted ) { time_t thetime; thetime = time(NULL); //create a unique patternfilename QString patternFilename = Preferences::get_instance()->getTmpDirectory() +QString("%1").arg(thetime)+ QString( "PAT.xml" ); LocalFileMng fileMng; int err =1; err = fileMng.savePattern( pSong, pEngine->getCurrentDrumkitname(), pPatternList->size() -1 , patternFilename, pNewPattern->get_name(), 4 ); SE_copyPatternAction *action = new SE_copyPatternAction( patternFilename ,nSelectedPattern + 1 ); hydrogenApp->addTemporaryFile( patternFilename ); hydrogenApp->m_undoStack->push( action ); } //delete the tmp pattern pPatternList->del( pNewPattern ); delete pNewPattern; delete dialog; HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); } void SongEditorPatternList::patternPopup_copyAction( QString patternFilename, int patternposition ) { Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *pPatternList = song->get_pattern_list(); LocalFileMng mng; LocalFileMng fileMng; Pattern* err = fileMng.loadPattern( patternFilename ); if ( err == 0 ) { _ERRORLOG( "Error loading the pattern" ); }else{ H2Core::Pattern *pNewPattern = err; pPatternList->add( pNewPattern ); for (int nPatr = pPatternList->size() +1 ; nPatr >= patternposition; nPatr--) { H2Core::Pattern *pPattern = pPatternList->get(nPatr - 1); pPatternList->replace( nPatr, pPattern ); } pPatternList->replace( patternposition, pNewPattern ); engine->setSelectedPatternNumber( patternposition ); song->__is_modified = true; createBackground(); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); EventQueue::get_instance()->push_event( EVENT_SELECTED_PATTERN_CHANGED, -1 ); } } void SongEditorPatternList::patternPopup_fill() { Hydrogen *pEngine = Hydrogen::get_instance(); int nSelectedPattern = pEngine->getSelectedPatternNumber(); FillRange range; PatternFillDialog *dialog = new PatternFillDialog( this, &range ); // use a PatternFillDialog to get the range and mode data if ( dialog->exec() == QDialog::Accepted ) { SE_fillRangePatternAction *action = new SE_fillRangePatternAction( &range, nSelectedPattern ); HydrogenApp::get_instance()->m_undoStack->push( action ); } delete dialog; } void SongEditorPatternList::fillRangeWithPattern( FillRange* pRange, int nPattern ) { Hydrogen *pEngine = Hydrogen::get_instance(); AudioEngine::get_instance()->lock( RIGHT_HERE ); Song *pSong = pEngine->getSong(); PatternList *pPatternList = pSong->get_pattern_list(); H2Core::Pattern *pPattern = pPatternList->get( nPattern ); vector *pColumns = pSong->get_pattern_group_vector(); // E' la lista di "colonne" di pattern PatternList *pColumn; int nColumn, nColumnIndex; bool bHasPattern = false; int fromVal = pRange->fromVal - 1; int toVal = pRange->toVal; // Add patternlists to PatternGroupVector as necessary int nDelta = toVal - pColumns->size() + 1; for ( int i = 0; i < nDelta; i++ ) { pColumn = new PatternList(); pColumns->push_back( pColumn ); } // Fill or Clear each cell in range for ( nColumn = fromVal; nColumn < toVal; nColumn++ ) { // expand Pattern pColumn = ( *pColumns )[ nColumn ]; bHasPattern = false; // check whether the pattern (and column) already exists for ( nColumnIndex = 0; pColumn && nColumnIndex < (int)pColumn->size(); nColumnIndex++) { if ( pColumn->get( nColumnIndex ) == pPattern ) { bHasPattern = true; break; } } if ( pRange->bInsert && !bHasPattern ) { //fill pColumn->add( pPattern); } else if ( !pRange->bInsert && bHasPattern ) { // clear pColumn->del( pPattern); } } // remove all the empty patternlists at the end of the song for ( int i = pColumns->size() - 1; i != 0 ; i-- ) { PatternList *pList = (*pColumns)[ i ]; int nSize = pList->size(); if ( nSize == 0 ) { pColumns->erase( pColumns->begin() + i ); delete pList; } else { break; } } AudioEngine::get_instance()->unlock(); // Update pSong->__is_modified = true; HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); } ///drag & drop void SongEditorPatternList::dragEnterEvent(QDragEnterEvent *event) { if ( event->mimeData()->hasFormat("text/plain") ) { event->acceptProposedAction(); } } void SongEditorPatternList::dropEvent(QDropEvent *event) { QString sText = event->mimeData()->text(); if( sText.startsWith("Songs:") || sText.startsWith("move instrument:") ){ event->acceptProposedAction(); return; } if (sText.startsWith("move pattern:")) { Hydrogen *engine = Hydrogen::get_instance(); int nSourcePattern = engine->getSelectedPatternNumber(); int nTargetPattern = event->pos().y() / m_nGridHeight; if ( nSourcePattern == nTargetPattern ) { event->acceptProposedAction(); return; } SE_movePatternListItemAction *action = new SE_movePatternListItemAction( nSourcePattern , nTargetPattern ) ; HydrogenApp::get_instance()->m_undoStack->push( action ); //movePatternLine( nSourcePattern , nTargetPattern ); event->acceptProposedAction(); }else { QStringList tokens = sText.split( "::" ); QString sPatternName = tokens.at( 1 ); int nTargetPattern = event->pos().y() / m_nGridHeight; //create a unique sequencefilename Song *song = Hydrogen::get_instance()->getSong(); Pattern *pat = song->get_pattern_list()->get( nTargetPattern ); HydrogenApp *hydrogenApp = HydrogenApp::get_instance(); QString oldPatternName = pat->get_name(); time_t theTime; theTime = time(NULL); QString sequenceFilename = Preferences::get_instance()->getTmpDirectory() +QString("%1").arg( theTime )+ QString( "SEQ.xml" ); bool drag = false; if( QString( tokens.at(0) ).contains( "drag pattern" )) drag = true; SE_loadPatternAction *action = new SE_loadPatternAction( sPatternName, oldPatternName, sequenceFilename, nTargetPattern, drag ); hydrogenApp->addTemporaryFile( sequenceFilename ); hydrogenApp->m_undoStack->push( action ); } } void SongEditorPatternList::movePatternLine( int nSourcePattern , int nTargetPattern ) { Hydrogen *engine = Hydrogen::get_instance(); Song *pSong = engine->getSong(); PatternList *pPatternList = pSong->get_pattern_list(); // move instruments... H2Core::Pattern *pSourcePattern = pPatternList->get( nSourcePattern );//Instrument *pSourceInstr = pPatternList->get(nSourcePattern); if ( nSourcePattern < nTargetPattern) { for (int nPatr = nSourcePattern; nPatr < nTargetPattern; nPatr++) { H2Core::Pattern *pPattern = pPatternList->get(nPatr + 1); pPatternList->replace( nPatr, pPattern ); } pPatternList->replace( nTargetPattern, pSourcePattern ); } else { for (int nPatr = nSourcePattern; nPatr >= nTargetPattern; nPatr--) { H2Core::Pattern *pPattern = pPatternList->get(nPatr - 1); pPatternList->replace( nPatr, pPattern ); } pPatternList->replace( nTargetPattern, pSourcePattern ); } engine->setSelectedPatternNumber( nTargetPattern ); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); pSong->__is_modified = true; } void SongEditorPatternList::mouseMoveEvent(QMouseEvent *event) { if (!(event->buttons() & Qt::LeftButton)) { return; } if ( abs(event->pos().y() - __drag_start_position.y()) < (int)m_nGridHeight) { return; } QString sText = QString("move pattern:%1"); QDrag *pDrag = new QDrag(this); QMimeData *pMimeData = new QMimeData; pMimeData->setText( sText ); pDrag->setMimeData( pMimeData); //drag->setPixmap(iconPixmap); pDrag->start( Qt::CopyAction | Qt::MoveAction ); QWidget::mouseMoveEvent(event); } // :::::::::::::::::::::::::: const char* SongEditorPositionRuler::__class_name = "SongEditorPositionRuler"; SongEditorPositionRuler::SongEditorPositionRuler( QWidget *parent ) : QWidget( parent ) , Object( __class_name ) , m_bRightBtnPressed( false ) { setAttribute(Qt::WA_NoBackground); m_nGridWidth = 16; Preferences *pref = Preferences::get_instance(); m_nMaxPatternSequence = pref->getMaxBars(); m_nInitialWidth = m_nMaxPatternSequence * 16; resize( m_nInitialWidth, m_nHeight ); setFixedHeight( m_nHeight ); m_pBackgroundPixmap = new QPixmap( m_nInitialWidth, m_nHeight ); // initialize the pixmap createBackground(); // create m_backgroundPixmap pixmap // create tick position pixmap bool ok = m_tickPositionPixmap.load( Skin::getImagePath() + "/patternEditor/tickPosition.png" ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } update(); m_pTimer = new QTimer(this); connect(m_pTimer, SIGNAL(timeout()), this, SLOT(updatePosition())); m_pTimer->start(200); } SongEditorPositionRuler::~SongEditorPositionRuler() { m_pTimer->stop(); } uint SongEditorPositionRuler::getGridWidth() { return m_nGridWidth; } void SongEditorPositionRuler::setGridWidth( uint width ) { if ( SONG_EDITOR_MIN_GRID_WIDTH <= width && SONG_EDITOR_MAX_GRID_WIDTH >= width ) { m_nGridWidth = width; createBackground (); } } void SongEditorPositionRuler::createBackground() { UIStyle *pStyle = Preferences::get_instance()->getDefaultUIStyle(); QColor backgroundColor( pStyle->m_songEditor_backgroundColor.getRed(), pStyle->m_songEditor_backgroundColor.getGreen(), pStyle->m_songEditor_backgroundColor.getBlue() ); QColor textColor( pStyle->m_songEditor_textColor.getRed(), pStyle->m_songEditor_textColor.getGreen(), pStyle->m_songEditor_textColor.getBlue() ); QColor textColorAlpha( pStyle->m_songEditor_textColor.getRed(), pStyle->m_songEditor_textColor.getGreen(), pStyle->m_songEditor_textColor.getBlue(), 45 ); QColor alternateRowColor( pStyle->m_songEditor_alternateRowColor.getRed(), pStyle->m_songEditor_alternateRowColor.getGreen(), pStyle->m_songEditor_alternateRowColor.getBlue() ); m_pBackgroundPixmap->fill( backgroundColor ); Preferences *pref = Preferences::get_instance(); QString family = pref->getApplicationFontFamily(); int size = pref->getApplicationFontPointSize(); QFont font( family, size ); QPainter p( m_pBackgroundPixmap ); p.setFont( font ); p.fillRect( 0, 0, width(), 24, QColor( 67, 72, 83, 105) ); char tmp[10]; for (uint i = 0; i < m_nMaxPatternSequence + 1; i++) { uint x = 10 + i * m_nGridWidth; for ( int t = 0; t < static_cast(Hydrogen::get_instance()->m_timelinetagvector.size()); t++){ if ( Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetagbeat == i ) { p.setPen( Qt::cyan ); p.drawText( x - m_nGridWidth / 2 , 12, m_nGridWidth * 2, height() , Qt::AlignCenter, "T"); } } if ( (i % 4) == 0 ) { p.setPen( textColor ); sprintf( tmp, "%d", i + 1 ); p.drawText( x - m_nGridWidth, 12, m_nGridWidth * 2, height(), Qt::AlignCenter, tmp ); } else { p.setPen( textColor ); p.drawLine( x, 32, x, 40 ); } } //draw tempo content if(pref->getUseTimelineBpm()){ p.setPen( textColor ); }else { p.setPen( textColorAlpha ); } char tempo[10]; for (uint i = 0; i < m_nMaxPatternSequence + 1; i++) { uint x = 10 + i * m_nGridWidth; p.drawLine( x, 2, x, 5 ); p.drawLine( x, 19, x, 20 ); for ( int t = 0; t < static_cast(Hydrogen::get_instance()->m_timelinevector.size()); t++){ if ( Hydrogen::get_instance()->m_timelinevector[t].m_htimelinebeat == i ) { sprintf( tempo, "%d", ((int)Hydrogen::get_instance()->m_timelinevector[t].m_htimelinebpm) ); p.drawText( x - m_nGridWidth, 3, m_nGridWidth * 2, height() / 2 - 5, Qt::AlignCenter, tempo ); } } } p.setPen( QColor(35, 39, 51) ); p.drawLine( 0, 0, width(), 0 ); p.fillRect ( 0, height() - 27, width(), 1, QColor(35, 39, 51) ); p.fillRect ( 0, height() - 3, width(), 2, alternateRowColor ); } void SongEditorPositionRuler::mouseMoveEvent(QMouseEvent *ev) { if ( !m_bRightBtnPressed ) { // Click+drag triggers same action as clicking at new position mousePressEvent( ev ); } else { // Right-click+drag int column = (ev->x() / m_nGridWidth); Preferences* pPref = Preferences::get_instance(); if ( column > (int)Hydrogen::get_instance()->getSong()->get_pattern_group_vector()->size() ) { pPref->setPunchOutPos(-1); return; } if ( Hydrogen::get_instance()->getSong()->get_mode() == Song::PATTERN_MODE ) { return; } pPref->setPunchOutPos(column-1); update(); } } void SongEditorPositionRuler::mousePressEvent( QMouseEvent *ev ) { if (ev->button() == Qt::LeftButton && ev->y() >= 26) { int column = (ev->x() / m_nGridWidth); m_bRightBtnPressed = false; if ( column > (int)Hydrogen::get_instance()->getSong()->get_pattern_group_vector()->size() ) { return; } // disabling son relocates while in pattern mode as it causes weird behaviour. (jakob lund) if ( Hydrogen::get_instance()->getSong()->get_mode() == Song::PATTERN_MODE ) { return; } int nPatternPos = Hydrogen::get_instance()->getPatternPos(); if ( nPatternPos != column ) { Hydrogen::get_instance()->setPatternPos( column ); update(); } //time line test Hydrogen::get_instance()->setTimelineBpm(); } else if (ev->button() == Qt::MidButton && ev->y() >= 26) { int column = (ev->x() / m_nGridWidth); SongEditorPanelTagWidget dialog( this , column ); if (dialog.exec() == QDialog::Accepted) { //createBackground(); } } else if (ev->button() == Qt::RightButton && ev->y() >= 26) { int column = (ev->x() / m_nGridWidth); Preferences* pPref = Preferences::get_instance(); if ( column >= (int)Hydrogen::get_instance()->getSong()->get_pattern_group_vector()->size() ) { pPref->unsetPunchArea(); return; } if ( Hydrogen::get_instance()->getSong()->get_mode() == Song::PATTERN_MODE ) { return; } m_bRightBtnPressed = true; // Disable until mouse is moved pPref->setPunchInPos(column); pPref->setPunchOutPos(-1); update(); } else if( ( ev->button() == Qt::LeftButton || ev->button() == Qt::RightButton ) && ev->y() <= 25 && Preferences::get_instance()->getUseTimelineBpm() ){ int column = (ev->x() / m_nGridWidth); SongEditorPanelBpmWidget dialog( this , column ); if (dialog.exec() == QDialog::Accepted) { //createBackground(); } } } void SongEditorPositionRuler::mouseReleaseEvent(QMouseEvent *ev) { UNUSED( ev ); m_bRightBtnPressed = false; } void SongEditorPositionRuler::paintEvent( QPaintEvent *ev ) { if (!isVisible()) { return; } Hydrogen *H = Hydrogen::get_instance(); float fPos = H->getPatternPos(); int pIPos = Preferences::get_instance()->getPunchInPos(); int pOPos = Preferences::get_instance()->getPunchOutPos(); if ( H->getCurrentPatternList()->size() != 0 ) { H2Core::Pattern *pPattern = H->getCurrentPatternList()->get( 0 ); if (pPattern != NULL){ fPos += (float)H->getTickPosition() / (float)pPattern->get_length(); } else { fPos += (float)H->getTickPosition() / (float)MAX_NOTES; } } else { // nessun pattern, uso la grandezza di default fPos += (float)H->getTickPosition() / (float)MAX_NOTES; } if ( H->getSong()->get_mode() == Song::PATTERN_MODE ) { fPos = -1; pIPos = 0; pOPos = -1; } QPainter painter(this); painter.drawPixmap( ev->rect(), *m_pBackgroundPixmap, ev->rect() ); if (fPos != -1) { uint x = (int)( 10 + fPos * m_nGridWidth - 11 / 2 ); painter.drawPixmap( QRect( x, height() / 2, 11, 8), m_tickPositionPixmap, QRect(0, 0, 11, 8) ); painter.setPen( QColor(35, 39, 51) ); painter.drawLine( x + 5 , 8, x +5 , 24 ); } if ( pIPos <= pOPos ) { int xIn = (int)( 10 + pIPos * m_nGridWidth ); int xOut = (int)( 9 + (pOPos+1) * m_nGridWidth ); painter.fillRect( xIn, 30, xOut-xIn+1, 12, QColor(200, 100, 100, 100) ); QPen pen(QColor(200, 100, 100)); painter.setPen(pen); painter.drawRect( xIn, 30, xOut-xIn+1, 12 ); } } void SongEditorPositionRuler::updatePosition() { update(); } void SongEditorPositionRuler::editTimeLineAction( int newPosition, float newBpm ) { Hydrogen* engine = Hydrogen::get_instance(); //erase the value to set the new value if( engine->m_timelinevector.size() >= 1 ){ for ( int t = 0; t < engine->m_timelinevector.size(); t++){ if ( engine->m_timelinevector[t].m_htimelinebeat == newPosition -1 ) { engine->m_timelinevector.erase( engine->m_timelinevector.begin() + t); } } } Hydrogen::HTimelineVector tlvector; tlvector.m_htimelinebeat = newPosition -1 ; if( newBpm < 30.0 ) newBpm = 30.0; if( newBpm > 500.0 ) newBpm = 500.0; tlvector.m_htimelinebpm = newBpm; engine->m_timelinevector.push_back( tlvector ); engine->sortTimelineVector(); createBackground(); } void SongEditorPositionRuler::deleteTimeLinePosition( int position ) { Hydrogen* engine = Hydrogen::get_instance(); //erase the value to set the new value if( engine->m_timelinevector.size() >= 1 ){ for ( int t = 0; t < engine->m_timelinevector.size(); t++){ if ( engine->m_timelinevector[t].m_htimelinebeat == position -1 ) { engine->m_timelinevector.erase( engine->m_timelinevector.begin() + t); } } } createBackground(); } void SongEditorPositionRuler::editTagAction( QString text, int position, QString textToReplace) { Hydrogen* engine = Hydrogen::get_instance(); //check vector for old entries and remove them. for( int i = 0; i < engine->m_timelinetagvector.size(); ++i ){ if( ( engine->m_timelinetagvector[i].m_htimelinetag == textToReplace ) && ( engine->m_timelinetagvector[i].m_htimelinetagbeat == position ) ){ engine->m_timelinetagvector.erase( engine->m_timelinetagvector.begin() + i ); break; } } Hydrogen::HTimelineTagVector tlvector; tlvector.m_htimelinetagbeat = position; tlvector.m_htimelinetag = text; engine->m_timelinetagvector.push_back( tlvector ); engine->sortTimelineTagVector(); createBackground(); } void SongEditorPositionRuler::deleteTagAction( QString text, int position ) { Hydrogen* engine = Hydrogen::get_instance(); for( int i = 0; i < engine->m_timelinetagvector.size(); ++i ){ if( ( engine->m_timelinetagvector[i].m_htimelinetag == text ) && ( engine->m_timelinetagvector[i].m_htimelinetagbeat == position ) ){ engine->m_timelinetagvector.erase( engine->m_timelinetagvector.begin() + i ); break; } } engine->sortTimelineTagVector(); createBackground(); } hydrogen-0.9.6-beta3/src/gui/src/SongEditor/SongEditor.h000066400000000000000000000144011211146647700230170ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SONG_EDITOR_H #define SONG_EDITOR_H #include #include #include #include #include #include "../EventListener.h" #include "../PatternFillDialog.h" class Button; class ToggleButton; class SongEditor; class SongEditorPatternList; class SongEditorPositionRuler; static const uint SONG_EDITOR_MIN_GRID_WIDTH = 8; static const uint SONG_EDITOR_MAX_GRID_WIDTH = 16; class SongEditorGridRepresentationItem { public: SongEditorGridRepresentationItem(int x, int y, bool value); int x; int y; bool value; }; /// /// Song editor /// class SongEditor : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: SongEditor( QWidget *parent ); ~SongEditor(); void createBackground(); void cleanUp(); int getGridWidth (); void setGridWidth( uint width); void addPattern( int nColumn, int nRow); void deletePattern( int nColumn, int nRow, unsigned nColumnIndex); void clearThePatternSequenseVector( QString filename ); void updateEditorandSetTrue(); void movePatternCellAction( std::vector movingCells, std::vector selectedCells, std::vector m_existingCells, bool bIsCtrlPressed, bool undo); private: //holds a list for active patterns for each pattern QList gridRepresentation; unsigned m_nGridHeight; unsigned m_nGridWidth; unsigned m_nMaxPatternSequence; bool m_bSequenceChanged; bool m_bIsMoving; bool m_bIsCtrlPressed; QPixmap *m_pBackgroundPixmap; QPixmap *m_pSequencePixmap; std::vector m_selectedCells; std::vector m_movingCells; std::vector m_existingCells; QPoint m_clickPoint; // Usato come riferimento per le operazioni di spostamento bool m_bShowLasso; QRect m_lasso; virtual void mousePressEvent(QMouseEvent *ev); virtual void mouseReleaseEvent(QMouseEvent *ev); virtual void mouseMoveEvent(QMouseEvent *ev); virtual void keyPressEvent (QKeyEvent *ev); virtual void paintEvent(QPaintEvent *ev); void drawSequence(); void drawPattern( int pos, int number, bool invertColour ); }; /// /// Song editor pattern list /// class SongEditorPatternList : public QWidget, public H2Core::Object, public EventListener { H2_OBJECT Q_OBJECT public: SongEditorPatternList( QWidget *parent ); ~SongEditorPatternList(); void updateEditor(); void createBackground(); void movePatternLine( int, int ); void deletePatternFromList( QString patternFilename, QString sequenceFileName, int patternPosition ); void restoreDeletedPatternsFromList( QString patternFilename, QString sequenceFileName, int patternPosition ); void acceptPatternPropertiesDialogSettings( QString newPatternName, QString newPatternInfo, QString newPatternCategory, int patternNr ); void revertPatternPropertiesDialogSettings(QString oldPatternName, QString oldPatternInfo, QString oldPatternCategory, int patternNr); void loadPatternAction( QString filename, int position); void fillRangeWithPattern(FillRange* r, int nPattern); void patternPopup_copyAction( QString patternFilename, int patternposition ); public slots: void patternPopup_edit(); void patternPopup_save(); void patternPopup_export(); void patternPopup_load(); void patternPopup_properties(); void patternPopup_delete(); void patternPopup_copy(); void patternPopup_fill(); void patternPopup_virtualPattern(); void inlineEditingFinished(); void inlineEditingEntered(); virtual void dragEnterEvent(QDragEnterEvent *event); virtual void dropEvent(QDropEvent *event); private: uint m_nGridHeight; uint m_nWidth; static const uint m_nInitialHeight = 10; QPixmap *m_pBackgroundPixmap; QPixmap m_labelBackgroundLight; QPixmap m_labelBackgroundDark; QPixmap m_labelBackgroundSelected; QPixmap m_playingPattern_on_Pixmap; QPixmap m_playingPattern_off_Pixmap; QMenu *m_pPatternPopup; QLineEdit *line; H2Core::Pattern *patternBeingEdited; void inlineEditPatternName( int row ); virtual void mousePressEvent( QMouseEvent *ev ); virtual void mouseDoubleClickEvent( QMouseEvent *ev ); virtual void paintEvent( QPaintEvent *ev ); void togglePattern( int ); virtual void patternChangedEvent(); void mouseMoveEvent(QMouseEvent *event); //void movePatternLine(int,int); QPoint __drag_start_position; }; // class SongEditorPatternListener : public EventListener { // // } // class SongEditorPositionRuler : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: SongEditorPositionRuler( QWidget *parent ); ~SongEditorPositionRuler(); void createBackground(); uint getGridWidth(); void setGridWidth (uint width); void editTimeLineAction( int newPosition, float newBpm ); void deleteTimeLinePosition( int position ); void editTagAction( QString text, int position, QString textToReplace ); void deleteTagAction( QString text, int position ); public slots: void updatePosition(); private: QTimer *m_pTimer; uint m_nGridWidth; uint m_nMaxPatternSequence; uint m_nInitialWidth; static const uint m_nHeight = 50; QPixmap *m_pBackgroundPixmap; QPixmap m_tickPositionPixmap; virtual void mouseMoveEvent(QMouseEvent *ev); virtual void mousePressEvent( QMouseEvent *ev ); virtual void mouseReleaseEvent(QMouseEvent *ev); virtual void paintEvent( QPaintEvent *ev ); bool m_bRightBtnPressed; }; #endif hydrogen-0.9.6-beta3/src/gui/src/SongEditor/SongEditorPanel.cpp000066400000000000000000000435421211146647700243420ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "SongEditorPanel.h" #include "../HydrogenApp.h" #include "../PatternPropertiesDialog.h" #include "../SongPropertiesDialog.h" #include "../widgets/Button.h" #include "../widgets/PixmapWidget.h" #include "../Skin.h" #include "SongEditor.h" #include "UndoActions.h" #include #include #include #include #include using namespace H2Core; using namespace std; const char* SongEditorPanel::__class_name = "SongEditorPanel"; SongEditorPanel::SongEditorPanel(QWidget *pParent) : QWidget( pParent ) , Object( __class_name ) , m_actionMode( DRAW_ACTION ) { m_nInitialWidth = 600; m_nInitialHeight = 250; setWindowTitle( trUtf8( "Song Editor" ) ); // background PixmapWidget *pBackPanel = new PixmapWidget( NULL ); pBackPanel->setFixedSize( 196, 49 ); pBackPanel->setPixmap( "/songEditor/bg_topPanel.png" ); // time line toggle button m_pTimeLineToggleBtn = new ToggleButton( pBackPanel, "/songEditor/btn_bpm_on.png", "/songEditor/btn_bpm_off.png", "/songEditor/btn_bpm_over.png", QSize( 54, 13 ) ); m_pTimeLineToggleBtn->move( 133, 6 ); m_pTimeLineToggleBtn->setToolTip( trUtf8( "Enable time line edit") ); connect( m_pTimeLineToggleBtn, SIGNAL( clicked( Button* ) ), this, SLOT( timeLineBtnPressed(Button* ) ) ); m_pTimeLineToggleBtn->setPressed( Preferences::get_instance()->getUseTimelineBpm() ); // clear sequence button m_pClearPatternSeqBtn = new Button( pBackPanel, "/songEditor/btn_clear_on.png", "/songEditor/btn_clear_off.png", "/songEditor/btn_clear_over.png", QSize(53,13) ); m_pClearPatternSeqBtn->move( 6, 5 + 25 ); m_pClearPatternSeqBtn->setToolTip( trUtf8("Clear pattern sequence") ); connect( m_pClearPatternSeqBtn, SIGNAL( clicked( Button* ) ), this, SLOT( clearSequence(Button*) ) ); // new pattern button Button *newPatBtn = new Button( pBackPanel, "/songEditor/btn_new_on.png", "/songEditor/btn_new_off.png", "/songEditor/btn_new_over.png", QSize(19, 13) ); newPatBtn->move( 64, 5 + 25); newPatBtn->setToolTip( trUtf8("Create new pattern") ); connect( newPatBtn, SIGNAL( clicked( Button* ) ), this, SLOT( newPatBtnClicked( Button* ) ) ); // down button m_pDownBtn = new Button( pBackPanel, "/songEditor/btn_down_on.png", "/songEditor/btn_down_off.png", "/songEditor/btn_down_over.png", QSize(18,13) ); m_pDownBtn->move( 89, 5 + 25); m_pDownBtn->setToolTip( trUtf8("Move the selected pattern down") ); connect( m_pDownBtn, SIGNAL( clicked( Button* ) ), this, SLOT( downBtnClicked( Button* ) ) ); // up button m_pUpBtn = new Button( pBackPanel, "/songEditor/btn_up_on.png", "/songEditor/btn_up_off.png", "/songEditor/btn_up_over.png", QSize(18,13) ); m_pUpBtn->move( 106, 5 + 25 ); m_pUpBtn->setToolTip( trUtf8("Move the selected pattern up") ); connect( m_pUpBtn, SIGNAL( clicked( Button* ) ), this, SLOT( upBtnClicked( Button* ) ) ); // select toggle button m_pPointerActionBtn = new ToggleButton( pBackPanel, "/songEditor/btn_select_on.png", "/songEditor/btn_select_off.png", "/songEditor/btn_select_over.png", QSize( 18, 13 ) ); m_pPointerActionBtn->move( 128, 5 + 25 ); m_pPointerActionBtn->setToolTip( trUtf8( "Select mode" ) ); connect( m_pPointerActionBtn, SIGNAL( clicked( Button* ) ), this, SLOT( pointerActionBtnPressed(Button*) ) ); // draw toggle button m_pDrawActionBtn = new ToggleButton( pBackPanel, "/songEditor/btn_draw_on.png", "/songEditor/btn_draw_off.png", "/songEditor/btn_draw_over.png", QSize( 18, 13 ) ); m_pDrawActionBtn->move( 147, 5 + 25 ); m_pDrawActionBtn->setToolTip( trUtf8( "Draw mode") ); connect( m_pDrawActionBtn, SIGNAL( clicked( Button* ) ), this, SLOT( drawActionBtnPressed(Button* ) ) ); m_pDrawActionBtn->setPressed( true ); m_pModeActionBtn = new ToggleButton( pBackPanel, "/songEditor/btn_mode_on.png", "/songEditor/btn_mode_off.png", "/songEditor/btn_mode_over.png", QSize( 18, 13 ) ); m_pModeActionBtn->move( 169, 5 + 25 ); m_pModeActionBtn->setToolTip( trUtf8( "stacked mode") ); m_pModeActionBtn->setPressed( Preferences::get_instance()->patternModePlaysSelected() ); connect( m_pModeActionBtn, SIGNAL( clicked( Button* ) ), this, SLOT( modeActionBtnPressed() ) ); // ZOOM m_pHScrollBar = new QScrollBar( Qt::Horizontal,NULL ); connect( m_pHScrollBar, SIGNAL(valueChanged(int)), this, SLOT( syncToExternalScrollBar() ) ); // zoom-in btn Button* pZoomInBtn = new Button( NULL, "/songEditor/btn_new_on.png", "/songEditor/btn_new_off.png", "/songEditor/btn_new_over.png", QSize( 19, 13 ) ); connect( pZoomInBtn, SIGNAL( clicked( Button* ) ), this, SLOT( zoomOutBtnPressed(Button* ) ) ); // zoom-out btn Button* pZoomOutBtn = new Button( NULL, "/songEditor/btn_minus_on.png", "/songEditor/btn_minus_off.png", "/songEditor/btn_minus_over.png", QSize( 19, 13 ) ); connect( pZoomOutBtn, SIGNAL( clicked( Button* ) ), this, SLOT( zoomInBtnPressed(Button* ) ) ); QHBoxLayout *pHZoomLayout = new QHBoxLayout(); pHZoomLayout->setSpacing( 0 ); pHZoomLayout->setMargin( 0 ); pHZoomLayout->addWidget( m_pHScrollBar ); pHZoomLayout->addWidget( pZoomInBtn ); pHZoomLayout->addWidget( pZoomOutBtn ); QWidget *pHScrollbarPanel = new QWidget(); pHScrollbarPanel->setLayout( pHZoomLayout ); //~ ZOOM // PATTERN LIST m_pPatternListScrollView = new QScrollArea( NULL ); m_pPatternListScrollView->setFrameShape( QFrame::NoFrame ); m_pPatternListScrollView->setFixedWidth( m_nPatternListWidth ); m_pPatternListScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pPatternListScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); connect( m_pPatternListScrollView->verticalScrollBar(), SIGNAL( valueChanged(int) ), this, SLOT( on_patternListScroll() ) ); m_pPatternList = new SongEditorPatternList( m_pPatternListScrollView->viewport() ); m_pPatternListScrollView->setWidget( m_pPatternList ); // EDITOR m_pEditorScrollView = new QScrollArea( NULL ); m_pEditorScrollView->setFrameShape( QFrame::NoFrame ); m_pEditorScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pEditorScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pSongEditor = new SongEditor( m_pEditorScrollView->viewport() ); m_pEditorScrollView->setWidget( m_pSongEditor ); connect( m_pEditorScrollView->horizontalScrollBar(), SIGNAL( valueChanged(int) ), this, SLOT( on_EditorScroll() ) ); connect( m_pEditorScrollView->verticalScrollBar(), SIGNAL( valueChanged(int) ), this, SLOT( on_EditorScroll() ) ); // POSITION RULER m_pPositionRulerScrollView = new QScrollArea( NULL ); m_pPositionRulerScrollView->setFrameShape( QFrame::NoFrame ); m_pPositionRulerScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pPositionRulerScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pPositionRuler = new SongEditorPositionRuler( m_pPositionRulerScrollView->viewport() ); m_pPositionRulerScrollView->setWidget( m_pPositionRuler ); m_pPositionRulerScrollView->setFixedHeight( 50 ); m_pVScrollBar = new QScrollBar( Qt::Vertical, NULL ); connect( m_pVScrollBar, SIGNAL(valueChanged(int)), this, SLOT( syncToExternalScrollBar() ) ); // ok...let's build the layout QGridLayout *pGridLayout = new QGridLayout(); pGridLayout->setSpacing( 0 ); pGridLayout->setMargin( 0 ); pGridLayout->addWidget( pBackPanel, 0, 0 ); pGridLayout->addWidget( m_pPositionRulerScrollView, 0, 1 ); pGridLayout->addWidget( m_pPatternListScrollView, 1, 0 ); pGridLayout->addWidget( m_pEditorScrollView, 1, 1 ); pGridLayout->addWidget( m_pVScrollBar, 1, 2 ); //pGridLayout->addWidget( m_pHScrollBar, 2, 1 ); pGridLayout->addWidget( pHScrollbarPanel, 2, 1 ); this->setLayout( pGridLayout ); QPalette defaultPalette; defaultPalette.setColor( QPalette::Background, QColor( 58, 62, 72 ) ); this->setPalette( defaultPalette ); show(); updateAll(); HydrogenApp::get_instance()->addEventListener( this ); m_pTimer = new QTimer(this); connect(m_pTimer, SIGNAL(timeout()), this, SLOT( updatePlayHeadPosition() ) ); m_pTimer->start(100); } SongEditorPanel::~SongEditorPanel() { m_pTimer->stop(); } void SongEditorPanel::updatePlayHeadPosition() { Song *pSong = Hydrogen::get_instance()->getSong(); if ( Preferences::get_instance()->m_bFollowPlayhead && pSong->get_mode() == Song::SONG_MODE) { if ( Hydrogen::get_instance()->getState() != STATE_PLAYING ) { return; } QPoint pos = m_pPositionRuler->pos(); int x = -pos.x(); int w = m_pPositionRulerScrollView->viewport()->width(); // int x = m_pPositionRulerScrollView->contentsX(); // int w = m_pPositionRulerScrollView->visibleWidth(); int nPlayHeadPosition = Hydrogen::get_instance()->getPatternPos() * m_pSongEditor->getGridWidth(); if ( nPlayHeadPosition > ( x + w - 50 ) ) { m_pEditorScrollView->horizontalScrollBar()->setValue( m_pEditorScrollView->horizontalScrollBar()->value() + 100 ); on_EditorScroll(); // force a re-sync } else if ( nPlayHeadPosition < x ) { m_pEditorScrollView->horizontalScrollBar()->setValue( m_pEditorScrollView->horizontalScrollBar()->value() - 100 ); on_EditorScroll(); // force a re-sync } } } void SongEditorPanel::on_patternListScroll() { m_pEditorScrollView->verticalScrollBar()->setValue( m_pPatternListScrollView->verticalScrollBar()->value() ); } /// /// Synchronize the patternlist with the patternsequence /// void SongEditorPanel::on_EditorScroll() { resyncExternalScrollBar(); m_pPatternListScrollView->verticalScrollBar()->setValue( m_pEditorScrollView->verticalScrollBar()->value() ); m_pPositionRulerScrollView->horizontalScrollBar()->setValue( m_pEditorScrollView->horizontalScrollBar()->value() ); } void SongEditorPanel::syncToExternalScrollBar() { m_pEditorScrollView->horizontalScrollBar()->setValue( m_pHScrollBar->value() ); m_pEditorScrollView->verticalScrollBar()->setValue( m_pVScrollBar->value() ); } /// /// Update and redraw all... /// void SongEditorPanel::updateAll() { m_pPatternList->createBackground(); m_pPatternList->update(); m_pSongEditor->cleanUp(); m_pSongEditor->createBackground(); m_pSongEditor->update(); resyncExternalScrollBar(); } void SongEditorPanel::updatePositionRuler() { m_pPositionRuler->createBackground(); } /// /// Create a new pattern /// void SongEditorPanel::newPatBtnClicked( Button* btn ) { UNUSED( btn ); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *patternList = song->get_pattern_list(); Pattern *newPattern = new Pattern( trUtf8("Pattern %1").arg(patternList->size()+1), trUtf8("not_categorized") ); PatternPropertiesDialog *dialog = new PatternPropertiesDialog( this, newPattern, 0, true ); if ( dialog->exec() == QDialog::Accepted ) { SE_addEmptyPatternAction*action = new SE_addEmptyPatternAction( newPattern->get_name() , newPattern->get_category(), engine->getSelectedPatternNumber()+1); HydrogenApp::get_instance()->m_undoStack->push( action ); } delete newPattern; delete dialog; } void SongEditorPanel::addEmptyPattern( QString newPatternName , QString newPatternCategory, int idx ) { Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *patternList = song->get_pattern_list(); patternList->insert( idx, new Pattern( newPatternName, newPatternCategory ) ); song->__is_modified = true; updateAll(); } void SongEditorPanel::revertaddEmptyPattern( int idx ) { Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *patternList = song->get_pattern_list(); H2Core::Pattern *pattern = patternList->get( idx ); if( idx == engine->getSelectedPatternNumber() ) engine->setSelectedPatternNumber( idx -1 ); patternList->del( pattern ); delete pattern; song->__is_modified = true; updateAll(); } /// /// Move up a pattern in the patternList /// void SongEditorPanel::upBtnClicked( Button* btn ) { UNUSED( btn ); Hydrogen *pEngine = Hydrogen::get_instance(); if( pEngine->getSelectedPatternNumber() < 0 || !pEngine->getSelectedPatternNumber() ) return; int nSelectedPatternPos = pEngine->getSelectedPatternNumber(); SE_movePatternListItemAction *action = new SE_movePatternListItemAction( nSelectedPatternPos, nSelectedPatternPos -1 ) ; HydrogenApp::get_instance()->m_undoStack->push( action ); } /// /// Move down a pattern in the patternList /// void SongEditorPanel::downBtnClicked( Button* btn ) { UNUSED( btn ); Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); PatternList *pPatternList = pSong->get_pattern_list(); if( pEngine->getSelectedPatternNumber() +1 >= pSong->get_pattern_list()->size() ) return; int nSelectedPatternPos = pEngine->getSelectedPatternNumber(); SE_movePatternListItemAction *action = new SE_movePatternListItemAction( nSelectedPatternPos, nSelectedPatternPos +1 ) ; HydrogenApp::get_instance()->m_undoStack->push( action ); } void SongEditorPanel::clearSequence( Button* btn) { UNUSED( btn ); int res = QMessageBox::information( this, "Hydrogen", tr( "Warning, this will erase your pattern sequence.\nAre you sure?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); if ( res == 1 ) { return; } //create a unique filename time_t thetime; thetime = time(NULL); QString filename = Preferences::get_instance()->getTmpDirectory() +QString("%1").arg(thetime)+ QString( "SEQ.xml" ); SE_deletePatternSequenceAction *action = new SE_deletePatternSequenceAction( filename ); HydrogenApp *hydrogenApp = HydrogenApp::get_instance(); hydrogenApp->m_undoStack->push( action ); hydrogenApp->addTemporaryFile( filename ); } void SongEditorPanel::restoreGroupVector( QString filename ) { //clear the old sequese vector *pPatternGroupsVect = Hydrogen::get_instance()->getSong()->get_pattern_group_vector(); for (uint i = 0; i < pPatternGroupsVect->size(); i++) { PatternList *pPatternList = (*pPatternGroupsVect)[i]; pPatternList->clear(); delete pPatternList; } pPatternGroupsVect->clear(); Hydrogen::get_instance()->getSong()->readTempPatternList( filename ); m_pSongEditor->updateEditorandSetTrue(); updateAll(); } void SongEditorPanel::resyncExternalScrollBar() { m_pHScrollBar->setMinimum( m_pEditorScrollView->horizontalScrollBar()->minimum() ); m_pHScrollBar->setMaximum( m_pEditorScrollView->horizontalScrollBar()->maximum() ); m_pHScrollBar->setSingleStep( m_pEditorScrollView->horizontalScrollBar()->singleStep() ); m_pHScrollBar->setPageStep( m_pEditorScrollView->horizontalScrollBar()->pageStep() ); m_pHScrollBar->setValue( m_pEditorScrollView->horizontalScrollBar()->value() ); m_pVScrollBar->setMinimum( m_pEditorScrollView->verticalScrollBar()->minimum() ); m_pVScrollBar->setMaximum( m_pEditorScrollView->verticalScrollBar()->maximum() ); m_pVScrollBar->setSingleStep( m_pEditorScrollView->verticalScrollBar()->singleStep() ); m_pVScrollBar->setPageStep( m_pEditorScrollView->verticalScrollBar()->pageStep() ); m_pVScrollBar->setValue( m_pEditorScrollView->verticalScrollBar()->value() ); } void SongEditorPanel::resizeEvent( QResizeEvent *ev ) { UNUSED( ev ); resyncExternalScrollBar(); } void SongEditorPanel::pointerActionBtnPressed( Button* pBtn ) { pBtn->setPressed( true ); m_pDrawActionBtn->setPressed( false ); m_actionMode = SELECT_ACTION; } void SongEditorPanel::drawActionBtnPressed( Button* pBtn ) { pBtn->setPressed( true ); m_pPointerActionBtn->setPressed( false ); m_actionMode = DRAW_ACTION; } void SongEditorPanel::timeLineBtnPressed( Button* pBtn ) { if( m_pTimeLineToggleBtn->isPressed() ){ Preferences::get_instance()->setUseTimelineBpm( true ); Hydrogen::get_instance()->setTimelineBpm(); } else { Preferences::get_instance()->setUseTimelineBpm( false ); } m_pPositionRuler->createBackground(); } void SongEditorPanel::modeActionBtnPressed( ) { if( m_pModeActionBtn->isPressed() ){ m_pModeActionBtn->setToolTip( trUtf8( "stacked pattern mode") ); } else { m_pModeActionBtn->setToolTip( trUtf8( "single pattern mode") ); } Hydrogen::get_instance()->togglePlaysSelected(); updateAll(); } void SongEditorPanel::setModeActionBtn( bool mode ) { if( mode ){ m_pModeActionBtn->setPressed( true ); m_pModeActionBtn->setToolTip( trUtf8( "stacked pattern mode") ); } else { m_pModeActionBtn->setPressed( false ); m_pModeActionBtn->setToolTip( trUtf8( "single pattern mode") ); } } void SongEditorPanel::zoomInBtnPressed( Button* pBtn ) { UNUSED( pBtn ); unsigned width = m_pSongEditor->getGridWidth (); --width; m_pSongEditor->setGridWidth (width); m_pPositionRuler->setGridWidth (width); updateAll(); } void SongEditorPanel::zoomOutBtnPressed( Button* pBtn ) { UNUSED( pBtn ); unsigned width = m_pSongEditor->getGridWidth (); ++width; m_pSongEditor->setGridWidth (width); m_pPositionRuler->setGridWidth (width); updateAll(); } void SongEditorPanel::selectedPatternChangedEvent() { resyncExternalScrollBar(); m_pModeActionBtn->setPressed( Preferences::get_instance()->patternModePlaysSelected() ); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); } hydrogen-0.9.6-beta3/src/gui/src/SongEditor/SongEditorPanel.h000066400000000000000000000066121211146647700240040ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SONG_EDITOR_PANEL_H #define SONG_EDITOR_PANEL_H #include "../EventListener.h" #include #include class Button; class SongEditor; class SongEditorPatternList; class SongEditorPositionRuler; class ToggleButton; enum SongEditorActionMode { SELECT_ACTION, DRAW_ACTION }; class SongEditorPanel : public QWidget, public EventListener, public H2Core::Object { H2_OBJECT Q_OBJECT public: SongEditorPanel( QWidget *parent ); ~SongEditorPanel(); SongEditor* getSongEditor(){ return m_pSongEditor; } SongEditorPatternList* getSongEditorPatternList(){ return m_pPatternList; } SongEditorPositionRuler* getSongEditorPositionRuler(){ return m_pPositionRuler; } void updateAll(); void updatePositionRuler(); void setModeActionBtn( bool mode ); SongEditorActionMode getActionMode() { return m_actionMode; } // Implements EventListener interface virtual void selectedPatternChangedEvent(); void restoreGroupVector( QString filename ); //~ Implements EventListener interface ///< an empty new pattern will be added to pattern list at idx void addEmptyPattern( QString newPatternName , QString newPatternCategory, int idx ); ///< pattern at idx within pattern list will be destroyed void revertaddEmptyPattern( int idx ); private slots: void on_patternListScroll(); void on_EditorScroll(); void syncToExternalScrollBar(); void newPatBtnClicked( Button* ); void upBtnClicked( Button* ); void downBtnClicked( Button* ); void clearSequence( Button* ); void updatePlayHeadPosition(); void pointerActionBtnPressed( Button* pBtn ); void drawActionBtnPressed( Button* pBtn ); void timeLineBtnPressed( Button* pBtn ); void modeActionBtnPressed( ); void zoomInBtnPressed( Button* pBtn ); void zoomOutBtnPressed( Button* pBtn ); private: SongEditorActionMode m_actionMode; uint m_nInitialWidth; uint m_nInitialHeight; static const int m_nPatternListWidth = 200; QScrollArea* m_pEditorScrollView; QScrollArea* m_pPatternListScrollView; QScrollArea* m_pPositionRulerScrollView; QScrollBar *m_pVScrollBar; QScrollBar *m_pHScrollBar; SongEditor* m_pSongEditor; SongEditorPatternList *m_pPatternList; SongEditorPositionRuler *m_pPositionRuler; Button *m_pUpBtn; Button *m_pDownBtn; Button *m_pClearPatternSeqBtn; ToggleButton *m_pPointerActionBtn; ToggleButton *m_pModeActionBtn; ToggleButton *m_pDrawActionBtn; ToggleButton *m_pTimeLineToggleBtn; QTimer* m_pTimer; virtual void resizeEvent( QResizeEvent *ev ); void resyncExternalScrollBar(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/SongEditor/SongEditorPanelBpmWidget.cpp000066400000000000000000000071671211146647700261500ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include "UndoActions.h" #include "../HydrogenApp.h" #include "SongEditorPanelBpmWidget.h" #include "SongEditorPanel.h" #include "SongEditor.h" #include namespace H2Core { const char* SongEditorPanelBpmWidget::__class_name = "SongEditorPanelBpmWidget"; SongEditorPanelBpmWidget::SongEditorPanelBpmWidget( QWidget* pParent, int beat ) : QDialog( pParent ) , Object( __class_name ) , m_stimelineposition ( beat ) { setupUi( this ); INFOLOG( "INIT" ); setWindowTitle( trUtf8( "BPM" ) ); setFixedSize( width(), height() ); lineEditBeat->setText(QString("%1").arg( m_stimelineposition + 1) ); deleteBtn->setEnabled ( false ); Hydrogen* engine = Hydrogen::get_instance(); std::vector timelineVector = engine->m_timelinevector; //restore the bpm value if( timelineVector.size() > 0 ){ for ( int t = 0; t < timelineVector.size(); t++ ){ // ERRORLOG(QString("%1 %2").arg(Hydrogen::get_instance()->m_timelinevector[t].m_htimelinebeat).arg(m_stimelineposition)); if ( timelineVector[t].m_htimelinebeat == m_stimelineposition ) { lineEditBpm->setText( QString("%1").arg( timelineVector[t].m_htimelinebpm ) ); deleteBtn->setEnabled ( true ); return; } else { lineEditBpm->setText( QString("%1").arg( engine->getNewBpmJTM()) ); } } }else { lineEditBpm->setText( QString("%1").arg( engine->getNewBpmJTM() ) ); } } SongEditorPanelBpmWidget::~SongEditorPanelBpmWidget() { INFOLOG( "DESTROY" ); } void SongEditorPanelBpmWidget::on_CancelBtn_clicked() { reject(); } void SongEditorPanelBpmWidget::on_okBtn_clicked() { Hydrogen* engine = Hydrogen::get_instance(); float oldBpm = -1.0; //search for an old entry if( engine->m_timelinevector.size() >= 1 ){ for ( int t = 0; t < engine->m_timelinevector.size(); t++){ if ( engine->m_timelinevector[t].m_htimelinebeat == ( QString( lineEditBeat->text() ).toInt() ) -1 ) { oldBpm = engine->m_timelinevector[t].m_htimelinebpm; } } } SE_editTimeLineAction *action = new SE_editTimeLineAction( lineEditBeat->text().toInt(), oldBpm, QString( lineEditBpm->text() ).toFloat() ); HydrogenApp::get_instance()->m_undoStack->push( action ); accept(); } void SongEditorPanelBpmWidget::on_deleteBtn_clicked() { Hydrogen* engine = Hydrogen::get_instance(); float oldBpm = -1.0; //search for an old entry if( engine->m_timelinevector.size() >= 1 ){ for ( int t = 0; t < engine->m_timelinevector.size(); t++){ if ( engine->m_timelinevector[t].m_htimelinebeat == ( QString( lineEditBeat->text() ).toInt() ) -1 ) { oldBpm = engine->m_timelinevector[t].m_htimelinebpm; } } } SE_deleteTimeLineAction *action = new SE_deleteTimeLineAction( lineEditBeat->text().toInt(), oldBpm ); HydrogenApp::get_instance()->m_undoStack->push( action ); accept(); } } hydrogen-0.9.6-beta3/src/gui/src/SongEditor/SongEditorPanelBpmWidget.h000066400000000000000000000027211211146647700256040ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SONG_EDITOR_PANEL_BPM_WIDGET_H #define SONG_EDITOR_PANEL_BPM_WIDGET_H #include #include "ui_SongEditorPanelBpmWidget_UI.h" #include /// /// namespace H2Core { class SongEditorPanelBpmWidget : public QDialog, public Ui_SongEditorPanelBpmWidget_UI, public H2Core::Object { H2_OBJECT //lineEditBEAT //lineEditBPM //deleteBtn Q_OBJECT public: SongEditorPanelBpmWidget( QWidget* pParent, int beat ); ~SongEditorPanelBpmWidget(); private slots: void on_CancelBtn_clicked(); void on_okBtn_clicked(); void on_deleteBtn_clicked(); private: int m_stimelineposition; }; } #endif hydrogen-0.9.6-beta3/src/gui/src/SongEditor/SongEditorPanelBpmWidget_UI.ui000066400000000000000000000054251211146647700263730ustar00rootroot00000000000000 SongEditorPanelBpmWidget_UI 0 0 198 151 Form 10 10 180 135 Edit the bpm value for current beat 500,55 Edit beat in timeline 500 Bar BPM Delete this BPM Marker Delete BPM Marker Cancel Ok true lineEditBpm lineEditBeat deleteBtn CancelBtn okBtn hydrogen-0.9.6-beta3/src/gui/src/SongEditor/SongEditorPanelTagWidget.cpp000066400000000000000000000115621211146647700261370ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include "UndoActions.h" #include "../HydrogenApp.h" #include "SongEditorPanelTagWidget.h" #include "SongEditorPanel.h" #include "SongEditor.h" #include namespace H2Core { const char* SongEditorPanelTagWidget::__class_name = "SongEditorPanelTagWidget"; SongEditorPanelTagWidget::SongEditorPanelTagWidget( QWidget* pParent, int beat ) : QDialog( pParent ) , Object( __class_name ) , m_stimelineposition ( beat ) { setupUi( this ); INFOLOG( "INIT" ); setWindowTitle( trUtf8( "Tag" ) ); createTheTagTableWidget(); connect( tagTableWidget, SIGNAL( itemChanged ( QTableWidgetItem * ) ), this, SLOT( a_itemIsChanged( QTableWidgetItem * ) ) ); } SongEditorPanelTagWidget::~SongEditorPanelTagWidget() { INFOLOG( "DESTROY" ); } void SongEditorPanelTagWidget::a_itemIsChanged(QTableWidgetItem *item) { __theChangedItems << QString( "%1" ).arg( item->row() ); } void SongEditorPanelTagWidget::createTheTagTableWidget() { Hydrogen* engine = Hydrogen::get_instance(); int patterngroupvectorsize; patterngroupvectorsize = engine->getSong()->get_pattern_group_vector()->size(); for( int i = 0; i < patterngroupvectorsize; i++ ) { tagTableWidget->insertRow( i ); } std::vector timelineTagVector = engine->m_timelinetagvector; //read the tag vector and fill all tags into items if( timelineTagVector.size() > 0 ){ for ( unsigned int t = 0; t < timelineTagVector.size(); t++ ){ QTableWidgetItem *newTagItem = new QTableWidgetItem(); newTagItem->setText( QString( "%1" ).arg( timelineTagVector[t].m_htimelinetag ) ); tagTableWidget->setItem( timelineTagVector[t].m_htimelinetagbeat, 0, newTagItem ); tagTableWidget->setCurrentItem( newTagItem ); tagTableWidget->openPersistentEditor( newTagItem ); } } //activate the clicked item and //if you click on an existing tag //fill in the old contend if( timelineTagVector.size() > 0 ){ int vpos = -1; QTableWidgetItem *newTagItem2 = new QTableWidgetItem(); newTagItem2->setText( QString( "" ) ); for ( unsigned int t = 0; t < timelineTagVector.size(); t++ ){ if( timelineTagVector[t].m_htimelinetagbeat == m_stimelineposition){ vpos = t; } } if( vpos >-1 ){ newTagItem2->setText( QString( "%1" ).arg( timelineTagVector[vpos].m_htimelinetag ) ); } tagTableWidget->setItem( m_stimelineposition , 0, newTagItem2 ); tagTableWidget->setCurrentItem( newTagItem2 ); tagTableWidget->openPersistentEditor( newTagItem2 ); } //add first tag if( timelineTagVector.size() == 0 ){ QTableWidgetItem *newTagItem3 = new QTableWidgetItem(); tagTableWidget->setItem( m_stimelineposition , 0, newTagItem3 ); tagTableWidget->setCurrentItem( newTagItem3 ); tagTableWidget->openPersistentEditor( newTagItem3 ); } } void SongEditorPanelTagWidget::on_CancelBtn_clicked() { reject(); } void SongEditorPanelTagWidget::on_okBtn_clicked() { Hydrogen* engine = Hydrogen::get_instance(); int patterngroupvectorsize; patterngroupvectorsize = engine->getSong()->get_pattern_group_vector()->size(); //oldText list contains all old item values. we need them for undo an item QStringList oldText; if(engine->m_timelinetagvector.size() > 0){ for (int i = 0; i < patterngroupvectorsize; i++){ oldText << ""; } for(int i = 0; i < engine->m_timelinetagvector.size(); ++i){ oldText.replace(engine->m_timelinetagvector[i].m_htimelinetagbeat , engine->m_timelinetagvector[i].m_htimelinetag); } } for( int i = 0; i < __theChangedItems.size() ; i++ ) { QTableWidgetItem *newTagItem = new QTableWidgetItem(); int songPosition = __theChangedItems.value( i ).toInt(); newTagItem = tagTableWidget->item( songPosition, 0 ); if ( newTagItem ) { SE_editTagAction *action = new SE_editTagAction( newTagItem->text() ,oldText.value( songPosition ), songPosition ); HydrogenApp::get_instance()->m_undoStack->push( action ); } } accept(); } void SongEditorPanelTagWidget::on_tagTableWidget_currentItemChanged(QTableWidgetItem * current, QTableWidgetItem * previous ) { tagTableWidget->closePersistentEditor(previous); } } hydrogen-0.9.6-beta3/src/gui/src/SongEditor/SongEditorPanelTagWidget.h000066400000000000000000000032201211146647700255740ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SONG_EDITOR_PANEL_TAG_WIDGET_H #define SONG_EDITOR_PANEL_TAG_WIDGET_H #include #include "ui_SongEditorPanelTagWidget_UI.h" #include /// /// namespace H2Core { class SongEditorPanelTagWidget : public QDialog, public Ui_SongEditorPanelTagWidget_UI, public H2Core::Object { H2_OBJECT //lineEditBEAT //lineEditBPM //deleteBtn Q_OBJECT public: SongEditorPanelTagWidget( QWidget* pParent, int beat ); ~SongEditorPanelTagWidget(); private slots: void on_CancelBtn_clicked(); void on_okBtn_clicked(); void on_tagTableWidget_currentItemChanged( QTableWidgetItem * current, QTableWidgetItem * previous ); void a_itemIsChanged(QTableWidgetItem *item); private: int m_stimelineposition; void createTheTagTableWidget(); QStringList __theChangedItems; }; } #endif hydrogen-0.9.6-beta3/src/gui/src/SongEditor/SongEditorPanelTagWidget_UI.ui000066400000000000000000000032011211146647700263560ustar00rootroot00000000000000 SongEditorPanelTagWidget_UI 0 0 293 420 Form QAbstractItemView::InternalMove Tag Cancel Ok true CancelBtn okBtn hydrogen-0.9.6-beta3/src/gui/src/SongPropertiesDialog.cpp000066400000000000000000000036111211146647700233240ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "SongPropertiesDialog.h" #include "Skin.h" #include #include #include using namespace H2Core; SongPropertiesDialog::SongPropertiesDialog(QWidget* parent) : QDialog(parent) { setupUi( this ); setMaximumSize( width(), height() ); setMinimumSize( width(), height() ); setWindowTitle( trUtf8( "Song properties" ) ); setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); Song *song = Hydrogen::get_instance()->getSong(); songNameTxt->setText( song->__name ); authorTxt->setText( song->__author ); notesTxt->append( song->get_notes() ); licenseTxt->setText( song->get_license() ); } SongPropertiesDialog::~SongPropertiesDialog() { } void SongPropertiesDialog::on_cancelBtn_clicked() { reject(); } void SongPropertiesDialog::on_okBtn_clicked() { Song *song = Hydrogen::get_instance()->getSong(); song->__name = songNameTxt->text(); song->__author = authorTxt->text(); song->set_notes( notesTxt->toPlainText() ); song->set_license( licenseTxt->text() ); accept(); } hydrogen-0.9.6-beta3/src/gui/src/SongPropertiesDialog.h000066400000000000000000000024161211146647700227730ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SONG_PROPERTIES_DIALOG_H #define SONG_PROPERTIES_DIALOG_H #include "ui_SongPropertiesDialog_UI.h" #include "HydrogenApp.h" /** * Song Properties Dialog */ class SongPropertiesDialog : public QDialog, private Ui_SongPropertiesDialog_UI { H2_OBJECT Q_OBJECT public: SongPropertiesDialog(QWidget* parent); ~SongPropertiesDialog(); private slots: void on_cancelBtn_clicked(); void on_okBtn_clicked(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/000077500000000000000000000000001211146647700211315ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/FileBrowser.cpp000066400000000000000000000161511211146647700240640ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "FileBrowser.h" #include #include #include "math.h" #include "string.h" #include #include #include using namespace H2Core; const char* FileBrowser::__class_name = "FileBrowser"; FileBrowser::FileBrowser( QWidget* pParent ) : QWidget( pParent ) , Object( __class_name ) { INFOLOG( "[FileBrowser]" ); m_pDirectoryLabel = new QLabel( NULL ); m_pUpBtn = new QPushButton( "..", NULL ); m_pUpBtn->setMaximumWidth( 30 ); connect( m_pUpBtn, SIGNAL( clicked() ), this, SLOT( on_upBtnClicked() ) ); QWidget *pDirectoryPanel = new QWidget( NULL ); QHBoxLayout *hbox = new QHBoxLayout(); hbox->setSpacing( 0 ); hbox->setMargin( 0 ); hbox->addWidget( m_pDirectoryLabel ); hbox->addWidget( m_pUpBtn ); pDirectoryPanel->setLayout( hbox ); QWidget *pInfoPanel = new QWidget( NULL ); m_pFileInfo = new QLabel( NULL ); QPushButton *pPlayBtn = new QPushButton( "Play", NULL ); connect( pPlayBtn, SIGNAL( clicked() ), this, SLOT( on_playBtnClicked() ) ); pPlayBtn->setMaximumWidth( 40 ); QHBoxLayout *pInfoHBox = new QHBoxLayout(); pInfoHBox->addWidget( m_pFileInfo ); pInfoHBox->addWidget( pPlayBtn ); pInfoPanel->setLayout( pInfoHBox ); m_pDirList = new QListWidget( NULL ); m_pFileList = new QListWidget( NULL ); connect( m_pFileList, SIGNAL( currentItemChanged( QListWidgetItem*, QListWidgetItem*) ), this, SLOT( on_fileList_ItemChanged( QListWidgetItem*, QListWidgetItem* ) ) ); connect( m_pFileList, SIGNAL( itemActivated( QListWidgetItem* ) ), this, SLOT( on_fileList_ItemActivated( QListWidgetItem* ) ) ); connect( m_pDirList, SIGNAL( itemActivated( QListWidgetItem* ) ), this, SLOT( on_dirList_ItemActivated( QListWidgetItem* ) ) ); // LAYOUT QVBoxLayout *vbox = new QVBoxLayout(); vbox->setSpacing( 0 ); vbox->setMargin( 0 ); vbox->addWidget( pDirectoryPanel ); vbox->addWidget( m_pDirList ); vbox->addWidget( m_pFileList ); vbox->addWidget( pInfoPanel ); this->setLayout( vbox ); updateFileInfo( "", 0, 0 ); loadDirectoryTree( QDir::homePath() ); } FileBrowser::~FileBrowser() { INFOLOG( "[~FileBrowser]" ); } void FileBrowser::loadDirectoryTree( const QString& sBasedir ) { INFOLOG( "[loadDirectoryTree]" ); m_pDirList->clear(); m_pFileList->clear(); m_directory.setPath( sBasedir ); m_pDirectoryLabel->setText( sBasedir ); QFileInfoList list = m_directory.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); QListWidgetItem *pItem = new QListWidgetItem(); if ( fileInfo.isDir() ) { if ( fileInfo.fileName().startsWith( "." ) ) { continue; } pItem->setText( fileInfo.fileName() ); m_pDirList->insertItem( 0, pItem); } } m_pDirList->sortItems( Qt::AscendingOrder ); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); QListWidgetItem *pItem = new QListWidgetItem(); if ( !fileInfo.isDir() ) { bool bOk = false; if ( fileInfo.fileName().endsWith( ".wav", Qt::CaseInsensitive ) ) { bOk = true; } else if ( fileInfo.fileName().endsWith( ".flac", Qt::CaseInsensitive ) ) { bOk = true; } else if ( fileInfo.fileName().endsWith( ".au", Qt::CaseInsensitive ) ) { bOk = true; } else if ( fileInfo.fileName().endsWith( ".aiff", Qt::CaseInsensitive ) ) { bOk = true; } if ( bOk ) { pItem->setText( fileInfo.fileName() ); m_pFileList->insertItem( 0, pItem); } } } m_pFileList->sortItems( Qt::AscendingOrder ); } void FileBrowser::updateFileInfo( QString sFilename, unsigned nSampleRate, unsigned nBytes ) { char sFileSizeUnit[6]; char sFileSize[32]; if( nBytes >= 1073741824 ){ sprintf( sFileSize, "%#.3f", (float)nBytes / 1073741824.0 ); strcpy( sFileSizeUnit, "GByte" ); } else if( nBytes >= 1048576 ){ sprintf( sFileSize, "%#.2f", (float)nBytes / 1048576.0 ); strcpy( sFileSizeUnit, "MByte" ); } else if(nBytes >= 1024) { sprintf( sFileSize, "%#.1f", (float)nBytes / 1024.0 ); strcpy( sFileSizeUnit, "KByte" ); } else { sprintf( sFileSize, "%#.0f", (double)nBytes ); strcpy( sFileSizeUnit, "Byte" ); } m_pFileInfo->setText( QString( trUtf8( "%1
    %2 KHz
    %3 %4" ) ) .arg( sFilename ) .arg( nSampleRate ) .arg( sFileSize ) .arg( sFileSizeUnit ) ); } void FileBrowser::on_fileList_ItemChanged( QListWidgetItem * current, QListWidgetItem * previous ) { UNUSED( previous ); INFOLOG( "[on_fileList_ItemChanged]" ); if ( current ) { QString sFileName = current->text(); QFileInfoList list = m_directory.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); if ( fileInfo.fileName() == current->text() ) { updateFileInfo( sFileName, 0, fileInfo.size() ); } } } } void FileBrowser::on_fileList_ItemActivated( QListWidgetItem* item ) { if ( !item ) { return; } QString sFileName = m_directory.absolutePath() + "/" + ( item->text() ); QFileInfoList list = m_directory.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); if ( fileInfo.fileName() == item->text() ) { INFOLOG( "[on_fileList_ItemActivated] " + fileInfo.absoluteFilePath() ); if ( !fileInfo.isDir() ) { // FIXME: evitare di caricare il sample, visualizzare solo le info del file Sample *pNewSample = Sample::load( fileInfo.absoluteFilePath() ); if (pNewSample) { updateFileInfo( fileInfo.absoluteFilePath(), pNewSample->get_sample_rate(), pNewSample->get_size() ); AudioEngine::get_instance()->get_sampler()->preview_sample(pNewSample, 192); } } } } } void FileBrowser::on_dirList_ItemActivated( QListWidgetItem* pItem ) { INFOLOG( "[on_dirList_ItemActivated]" ); if ( !pItem ) { return; } QString sFileName = m_directory.absolutePath() + "/" + ( pItem->text() ); QFileInfoList list = m_directory.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); if ( fileInfo.fileName() == pItem->text() ) { if ( fileInfo.isDir() ) { // change directory loadDirectoryTree( fileInfo.absoluteFilePath() ); return; } } } } void FileBrowser::on_upBtnClicked() { INFOLOG( "[on_upBtnClicked]" ); m_directory.cdUp(); loadDirectoryTree( m_directory.absolutePath() ); } void FileBrowser::on_playBtnClicked() { INFOLOG( "[on_playBtnClicked]" ); } hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/FileBrowser.h000066400000000000000000000032151211146647700235260ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef FILE_BROWSER_H #define FILE_BROWSER_H #include #include class FileBrowser : public QWidget, private H2Core::Object { H2_OBJECT Q_OBJECT public: FileBrowser( QWidget* pParent ); ~FileBrowser(); private slots: void on_fileList_ItemChanged( QListWidgetItem * current, QListWidgetItem * previous ); void on_fileList_ItemActivated( QListWidgetItem* ); void on_dirList_ItemActivated( QListWidgetItem* ); void on_upBtnClicked(); void on_playBtnClicked(); private: QLabel *m_pDirectoryLabel; QPushButton* m_pUpBtn; QLabel *m_pFileInfo; QListWidget *m_pDirList; QListWidget *m_pFileList; QDir m_directory; void loadDirectoryTree( const QString& basedir ); void updateFileInfo( QString sFilename, unsigned nSampleRate, unsigned nBytes ); }; #endif hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryDatastructures.cpp000066400000000000000000000137171211146647700272210ustar00rootroot00000000000000#include "SoundLibraryImportDialog.h" #include "SoundLibraryRepositoryDialog.h" #include "SoundLibraryPanel.h" #include "../widgets/DownloadWidget.h" #include "../HydrogenApp.h" #include "../InstrumentRack.h" #include #include #include #include #include #include "SoundLibraryDatastructures.h" #include #include #include #include using namespace H2Core; SoundLibraryDatabase* SoundLibraryDatabase::__instance = NULL; const char* SoundLibraryDatabase::__class_name = "SoundLibraryDatabase"; SoundLibraryDatabase::SoundLibraryDatabase() : Object( __class_name ) { INFOLOG( "INIT" ); patternVector = new soundLibraryInfoVector(); updatePatterns(); } SoundLibraryDatabase::~SoundLibraryDatabase() { //Clean up the patterns data structure soundLibraryInfoVector::iterator mapIterator; for( mapIterator=patternVector->begin(); mapIterator != patternVector->end(); mapIterator++ ) { delete *mapIterator; } delete patternVector; } void SoundLibraryDatabase::create_instance() { if ( __instance == 0 ) { __instance = new SoundLibraryDatabase; } } void SoundLibraryDatabase::printPatterns() { soundLibraryInfoVector::iterator mapIterator; for( mapIterator=patternVector->begin(); mapIterator != patternVector->end(); mapIterator++ ) { INFOLOG( QString( "Name: " + (*mapIterator)->getName() ) ); } for (int i = 0; i < patternCategories.size(); ++i) INFOLOG( patternCategories.at(i) ) } bool SoundLibraryDatabase::isPatternInstalled( const QString& patternName) { soundLibraryInfoVector::iterator mapIterator; for( mapIterator=patternVector->begin(); mapIterator != patternVector->end(); mapIterator++ ) { if( (*mapIterator)->getName() == patternName ) return true; } return false; } void SoundLibraryDatabase::update() { updatePatterns(); //updateSongs(); //updateDrumkits(); } void SoundLibraryDatabase::updatePatterns() { //Clear the current pattern informations, then start to fill it again.. patternVector->clear(); patternCategories = QStringList(); /* First location to store patterns: inside .hydrogen/data/patterns/GMkit etc. * each subdir builds a relationship between the pattern and the drumkit */ std::vector perDrumkitPatternDirectories = LocalFileMng::getDrumkitsFromDirectory( Preferences::get_instance()->getDataDirectory() + "patterns" ); std::vector::iterator drumkitIterator; for( drumkitIterator = perDrumkitPatternDirectories.begin(); drumkitIterator != perDrumkitPatternDirectories.end(); drumkitIterator++ ) { getPatternFromDirectory( *drumkitIterator, patternVector); } //2. This is the general location for patterns which do not belong to a certain drumkit. QString userPatternDirectory = Preferences::get_instance()->getDataDirectory() + "patterns"; getPatternFromDirectory( userPatternDirectory, patternVector); } int SoundLibraryDatabase::getPatternFromDirectory( const QString& sPatternDir, std::vector* patternVector ) { QDir dir( sPatternDir ); if ( !dir.exists() ) { ERRORLOG( QString( "[getPatternList] Directory %1 not found" ).arg( sPatternDir ) ); } else { dir.setFilter( QDir::Files ); QFileInfoList fileList = dir.entryInfoList(); for ( int i = 0; i < fileList.size(); ++i ) { QString sFile = sPatternDir + "/" + fileList.at( i ).fileName(); if( sFile.endsWith(".h2pattern") ){ SoundLibraryInfo* slInfo = new SoundLibraryInfo( sFile ); patternVector->push_back( slInfo ); if(! patternCategories.contains( slInfo->getCategory() ) ) patternCategories << slInfo->getCategory(); } } } return 0; } soundLibraryInfoVector* SoundLibraryDatabase::getAllPatterns() const { return patternVector; } const char* SoundLibraryInfo::__class_name = "SoundLibraryInfo"; SoundLibraryInfo::SoundLibraryInfo() : Object( __class_name ) { //default constructor } SoundLibraryInfo::SoundLibraryInfo(const QString &path) : Object( __class_name ) { /* *Use the provided file instantiate this object with the corresponding meta *data from either a drumkit, a pattern or a song. */ QDomDocument doc = LocalFileMng::openXmlDocument( path ); setPath( path ); QDomNode rootNode = doc.firstChildElement( "drumkit_pattern" ); if ( !rootNode.isNull() ) { setType( "pattern" ); setAuthor( LocalFileMng::readXmlString( rootNode,"author", "undefined author" ) ); setLicense( LocalFileMng::readXmlString( rootNode,"license", "undefined license" ) ); QDomNode patternNode = rootNode.firstChildElement( "pattern" ); setName( LocalFileMng::readXmlString( patternNode,"pattern_name", "" ) ); setInfo( LocalFileMng::readXmlString( patternNode,"info", "No information available." ) ); setCategory( LocalFileMng::readXmlString( patternNode,"category", "" ) ); } //New drumkits rootNode = doc.firstChildElement( "drumkit_info" ); if ( !rootNode.isNull() ) { setType( "drumkit" ); setAuthor( LocalFileMng::readXmlString( rootNode,"author", "undefined author" ) ); setLicense( LocalFileMng::readXmlString( rootNode,"license", "undefined license" ) ); setName( LocalFileMng::readXmlString( rootNode,"name", "" ) ); setInfo( LocalFileMng::readXmlString( rootNode,"info", "No information available." ) ); //setCategory( LocalFileMng::readXmlString( rootNode,"category", "" ) ); } //Songs rootNode = doc.firstChildElement( "song" ); if ( !rootNode.isNull() ) { setType( "song" ); setAuthor( LocalFileMng::readXmlString( rootNode,"author", "undefined author" ) ); setLicense( LocalFileMng::readXmlString( rootNode,"license", "undefined license" ) ); setName( LocalFileMng::readXmlString( rootNode,"name", "" ) ); setInfo( LocalFileMng::readXmlString( rootNode,"info", "No information available." ) ); //setCategory( LocalFileMng::readXmlString( rootNode,"category", "" ) ); } } SoundLibraryInfo::~SoundLibraryInfo() { //default deconstructor } hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryDatastructures.h000066400000000000000000000053441211146647700266630ustar00rootroot00000000000000#ifndef SOUNDLIBRARYDATASTRUCTURES_H #define SOUNDLIBRARYDATASTRUCTURES_H #include #include class SoundLibraryInfo; /** * @class SoundLibraryDatabase * * @brief This class holds informations about all installed soundlibrary items. * * This class organizes the metadata of all locally installed soundlibrary items. * * @author Sebastian Moors * */ typedef std::vector soundLibraryInfoVector; class SoundLibraryDatabase: public H2Core::Object { H2_OBJECT public: SoundLibraryDatabase(); ~SoundLibraryDatabase(); //bool isItemInstalled( const SoundLibraryInfo& item ); soundLibraryInfoVector* getAllPatterns() const; QStringList getAllPatternCategories() const { return patternCategories; } void update(); void updatePatterns(); void printPatterns(); int getPatternFromDirectory(const QString& path, soundLibraryInfoVector* ); bool isPatternInstalled( const QString& patternName); static void create_instance(); static SoundLibraryDatabase* get_instance() { assert(__instance); return __instance; } private: static SoundLibraryDatabase *__instance; soundLibraryInfoVector* patternVector; QStringList patternCategories; }; /** * @class SoundLibraryInfo * * @brief This class holds informations about a soundlibrary.. * * This class is used to represent soundlibrary items. It contains * the metadata for songs, pattern and drumkits. * * @author Sebastian Moors * */ class SoundLibraryInfo : public H2Core::Object { H2_OBJECT public: SoundLibraryInfo(); SoundLibraryInfo( const QString& path); ~SoundLibraryInfo(); QString getName() const { return m_sName; } QString getUrl() const{ return m_sURL; } QString getInfo() const { return m_sInfo; } QString getAuthor() const { return m_sAuthor; } QString getCategory() const { return m_sCategory; } QString getType() const { return m_sType; } QString getLicense() const { return m_sLicense; } void setName( const QString& name ){ m_sName = name; } void setUrl(const QString& url){ m_sURL = url; } void setInfo( const QString& info){ m_sInfo = info; } void setAuthor( const QString& author ){ m_sAuthor = author; } void setType( const QString& type){ m_sType = type; } void setCategory( const QString& category){ m_sCategory = category; } void setLicense( const QString& license ){ m_sLicense = license; } void setPath( const QString& path){ m_sPath = path; } QString getPath(){ return m_sPath; } private: QString m_sName; QString m_sURL; QString m_sInfo; QString m_sAuthor; QString m_sCategory; QString m_sType; QString m_sLicense; QString m_sPath; }; #endif // SOUNDLIBRARYDATASTRUCTURES_H hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryExportDialog.cpp000066400000000000000000000103261211146647700265760ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "SoundLibraryExportDialog.h" #include #include #include #include #include #include #include #include #include #include using namespace H2Core; const char* SoundLibraryExportDialog::__class_name = "SoundLibraryExportDialog"; SoundLibraryExportDialog::SoundLibraryExportDialog( QWidget* pParent, const QString& selectedKit ) : QDialog( pParent ) , Object( __class_name ) { setupUi( this ); INFOLOG( "INIT" ); setWindowTitle( trUtf8( "Export Sound Library" ) ); setFixedSize( width(), height() ); preselectedKit = selectedKit; updateDrumkitList(); drumkitPathTxt->setText( QDir::homePath() ); } SoundLibraryExportDialog::~SoundLibraryExportDialog() { INFOLOG( "DESTROY" ); for (uint i = 0; i < drumkitInfoList.size(); i++ ) { Drumkit* info = drumkitInfoList[i]; delete info; } drumkitInfoList.clear(); } void SoundLibraryExportDialog::on_exportBtn_clicked() { QApplication::setOverrideCursor(Qt::WaitCursor); QString drumkitName = drumkitList->currentText(); QString drumkitDir = Filesystem::drumkit_dir_search( drumkitName ); QString saveDir = drumkitPathTxt->text(); QString cmd = QString( "cd " ) + drumkitDir + "; tar czf \"" + saveDir + "/" + drumkitName + ".h2drumkit\" \"" + drumkitName + "\""; int ret = system( cmd.toLocal8Bit() ); QApplication::restoreOverrideCursor(); QMessageBox::information( this, "Hydrogen", "Drumkit exported." ); } void SoundLibraryExportDialog::on_drumkitPathTxt_textChanged( QString str ) { QString path = drumkitPathTxt->text(); if (path.isEmpty()) { exportBtn->setEnabled( false ); } else { exportBtn->setEnabled( true ); } } void SoundLibraryExportDialog::on_browseBtn_clicked() { static QString lastUsedDir = QDir::homePath(); QString filename = QFileDialog::getExistingDirectory (this, tr("Directory"), lastUsedDir); if ( filename.isEmpty() ) { drumkitPathTxt->setText( QDir::homePath() ); } else { drumkitPathTxt->setText( filename ); lastUsedDir = filename; } } void SoundLibraryExportDialog::updateDrumkitList() { INFOLOG( "[updateDrumkitList]" ); drumkitList->clear(); for (uint i = 0; i < drumkitInfoList.size(); i++ ) { Drumkit* info = drumkitInfoList[i]; delete info; } drumkitInfoList.clear(); QStringList sysDrumkits = Filesystem::sys_drumkits_list(); for (int i = 0; i < sysDrumkits.size(); ++i) { QString absPath = Filesystem::sys_drumkits_dir() + "/" + sysDrumkits.at(i); Drumkit *info = Drumkit::load( absPath ); if (info) { drumkitInfoList.push_back( info ); drumkitList->addItem( info->get_name() ); } } QStringList userDrumkits = Filesystem::usr_drumkits_list(); for (int i = 0; i < userDrumkits.size(); ++i) { QString absPath = Filesystem::usr_drumkits_dir() + "/" + userDrumkits.at(i); Drumkit *info = Drumkit::load( absPath ); if (info) { drumkitInfoList.push_back( info ); drumkitList->addItem( info->get_name() ); } } /* * If the export dialog was called from the soundlibrary panel via right click on * a soundlibrary, the variable preselectedKit holds the name of the selected drumkit */ int index = drumkitList->findText( preselectedKit ); if ( index >= 0) drumkitList->setCurrentIndex( index ); else drumkitList->setCurrentIndex( 0 ); } hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryExportDialog.h000066400000000000000000000030711211146647700262420ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SOUND_LIBRARY_EXPORT_DIALOG_H #define SOUND_LIBRARY_EXPORT_DIALOG_H #include "ui_SoundLibraryExportDialog_UI.h" #include #include #include #include /// /// /// class SoundLibraryExportDialog : public QDialog, public Ui_SoundLibraryExportDialog_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: SoundLibraryExportDialog( QWidget* pParent, const QString&); ~SoundLibraryExportDialog(); private slots: void on_exportBtn_clicked(); void on_browseBtn_clicked(); void on_drumkitPathTxt_textChanged( QString str ); void updateDrumkitList(); private: std::vector drumkitInfoList; QString preselectedKit; }; #endif hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryExportDialog_UI.ui000066400000000000000000000030521211146647700270240ustar00rootroot00000000000000 SoundLibraryExportDialog_UI 0 0 396 87 Dialog 290 10 100 24 Browse false 20 10 251 28 20 50 251 28 false 290 50 100 24 Export false hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryImportDialog.cpp000066400000000000000000000302601211146647700265660ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "SoundLibraryDatastructures.h" #include "SoundLibraryImportDialog.h" #include "SoundLibraryRepositoryDialog.h" #include "SoundLibraryPanel.h" #include "../widgets/DownloadWidget.h" #include "../HydrogenApp.h" #include "../InstrumentRack.h" #include #include #include #include #include #include #include #include #include #include #include const char* SoundLibraryImportDialog::__class_name = "SoundLibraryImportDialog"; SoundLibraryImportDialog::SoundLibraryImportDialog( QWidget* pParent ) : QDialog( pParent ) , Object( __class_name ) { setupUi( this ); INFOLOG( "INIT" ); setWindowTitle( trUtf8( "Sound Library import" ) ); setFixedSize( width(), height() ); QStringList headers; headers << trUtf8( "Sound library" ) << trUtf8( "Status" ); QTreeWidgetItem* header = new QTreeWidgetItem( headers ); m_pDrumkitTree->setHeaderItem( header ); m_pDrumkitTree->header()->resizeSection( 0, 200 ); connect( m_pDrumkitTree, SIGNAL( currentItemChanged ( QTreeWidgetItem*, QTreeWidgetItem* ) ), this, SLOT( soundLibraryItemChanged( QTreeWidgetItem*, QTreeWidgetItem* ) ) ); SoundLibraryNameLbl->setText( "" ); SoundLibraryInfoLbl->setText( "" ); DownloadBtn->setEnabled( false ); InstallBtn->setEnabled (false ); updateRepositoryCombo(); } SoundLibraryImportDialog::~SoundLibraryImportDialog() { INFOLOG( "DESTROY" ); } //update combo box void SoundLibraryImportDialog::updateRepositoryCombo() { H2Core::Preferences* pref = H2Core::Preferences::get_instance(); /* Read serverList from config and put servers into the comboBox */ if( pref->sServerList.size() == 0 ) { pref->sServerList.push_back( "http://www.hydrogen-music.org/feeds/drumkit_list.php" ); } repositoryCombo->clear(); std::list::const_iterator cur_Server; for( cur_Server = pref->sServerList.begin(); cur_Server != pref->sServerList.end(); ++cur_Server ) { repositoryCombo->insertItem( 0, *cur_Server ); } } /// /// Edit the server list /// void SoundLibraryImportDialog::on_EditListBtn_clicked() { SoundLibraryRepositoryDialog repoDialog( this ); repoDialog.exec(); updateRepositoryCombo(); } /// /// Download and update the drumkit list /// void SoundLibraryImportDialog::on_UpdateListBtn_clicked() { QApplication::setOverrideCursor(Qt::WaitCursor); DownloadWidget drumkitList( this, trUtf8( "Updating SoundLibrary list..." ), repositoryCombo->currentText() ); drumkitList.exec(); m_soundLibraryList.clear(); QString sDrumkitXML = drumkitList.get_xml_content(); QDomDocument dom; dom.setContent( sDrumkitXML ); QDomNode drumkitNode = dom.documentElement().firstChild(); while ( !drumkitNode.isNull() ) { if( !drumkitNode.toElement().isNull() ) { if ( drumkitNode.toElement().tagName() == "drumkit" || drumkitNode.toElement().tagName() == "song" || drumkitNode.toElement().tagName() == "pattern" ) { SoundLibraryInfo soundLibInfo; if ( drumkitNode.toElement().tagName() =="song" ) { soundLibInfo.setType( "song" ); } if ( drumkitNode.toElement().tagName() =="drumkit" ) { soundLibInfo.setType( "drumkit" ); } if ( drumkitNode.toElement().tagName() =="pattern" ) { soundLibInfo.setType( "pattern" ); } QDomElement nameNode = drumkitNode.firstChildElement( "name" ); if ( !nameNode.isNull() ) { soundLibInfo.setName( nameNode.text() ); } QDomElement urlNode = drumkitNode.firstChildElement( "url" ); if ( !urlNode.isNull() ) { soundLibInfo.setUrl( urlNode.text() ); } QDomElement infoNode = drumkitNode.firstChildElement( "info" ); if ( !infoNode.isNull() ) { soundLibInfo.setInfo( infoNode.text() ); } QDomElement authorNode = drumkitNode.firstChildElement( "author" ); if ( !authorNode.isNull() ) { soundLibInfo.setAuthor( authorNode.text() ); } QDomElement licenseNode = drumkitNode.firstChildElement( "license" ); if ( !licenseNode.isNull() ) { soundLibInfo.setLicense( licenseNode.text() ); } m_soundLibraryList.push_back( soundLibInfo ); } } drumkitNode = drumkitNode.nextSibling(); } updateSoundLibraryList(); QApplication::restoreOverrideCursor(); } void SoundLibraryImportDialog::updateSoundLibraryList() { // build the sound library tree m_pDrumkitTree->clear(); m_pDrumkitsItem = new QTreeWidgetItem( m_pDrumkitTree ); m_pDrumkitsItem->setText( 0, trUtf8( "Drumkits" ) ); m_pDrumkitTree->setItemExpanded( m_pDrumkitsItem, true ); m_pSongItem = new QTreeWidgetItem( m_pDrumkitTree ); m_pSongItem->setText( 0, trUtf8( "Songs" ) ); m_pDrumkitTree->setItemExpanded( m_pSongItem, true ); m_pPatternItem = new QTreeWidgetItem( m_pDrumkitTree ); m_pPatternItem->setText( 0, trUtf8( "Patterns" ) ); m_pDrumkitTree->setItemExpanded( m_pPatternItem, true ); for ( uint i = 0; i < m_soundLibraryList.size(); ++i ) { QString sLibraryName = m_soundLibraryList[ i ].getName(); QTreeWidgetItem* pDrumkitItem = NULL; if ( m_soundLibraryList[ i ].getType() == "song" ) { pDrumkitItem = new QTreeWidgetItem( m_pSongItem ); } if ( m_soundLibraryList[ i ].getType() == "drumkit" ) { pDrumkitItem = new QTreeWidgetItem( m_pDrumkitsItem ); } if ( m_soundLibraryList[ i ].getType() == "pattern" ) { pDrumkitItem = new QTreeWidgetItem( m_pPatternItem ); } if ( isSoundLibraryItemAlreadyInstalled( m_soundLibraryList[ i ] ) ) { pDrumkitItem->setText( 0, sLibraryName ); pDrumkitItem->setText( 1, trUtf8( "Installed" ) ); } else { pDrumkitItem->setText( 0, sLibraryName ); pDrumkitItem->setText( 1, trUtf8( "New" ) ); } } } /// Is the SoundLibrary already installed? bool SoundLibraryImportDialog::isSoundLibraryItemAlreadyInstalled( SoundLibraryInfo sInfo ) { // check if the filename matchs with an already installed soundlibrary directory. // The filename used in the Soundlibrary URL must be the same of the unpacked directory. // E.g: V-Synth_VariBreaks.h2drumkit must contain the V-Synth_VariBreaks directory once unpacked. // Many drumkit are broken now (wrong filenames) and MUST be fixed! QString sName = QFileInfo( sInfo.getUrl() ).fileName(); sName = sName.left( sName.lastIndexOf( "." ) ); if ( sInfo.getType() == "drumkit" ) { if ( H2Core::Filesystem::drumkit_exists(sName) ) return true; } if ( sInfo.getType() == "pattern" ) { return SoundLibraryDatabase::get_instance()->isPatternInstalled( sInfo.getName() ); } if ( sInfo.getType() == "song" ) { if ( H2Core::Filesystem::song_exists(sName) ) return true; } return false; } void SoundLibraryImportDialog::soundLibraryItemChanged( QTreeWidgetItem* current, QTreeWidgetItem* previous ) { UNUSED( previous ); if ( current ) { QString selected = current->text(0); for ( uint i = 0; i < m_soundLibraryList.size(); ++i ) { if ( m_soundLibraryList[ i ].getName() == selected ) { SoundLibraryInfo info = m_soundLibraryList[ i ]; //bool alreadyInstalled = isSoundLibraryAlreadyInstalled( info.m_sURL ); SoundLibraryNameLbl->setText( info.getName() ); if( info.getType() == "pattern" ){ SoundLibraryInfoLbl->setText(""); } else { SoundLibraryInfoLbl->setText( info.getInfo() ); } AuthorLbl->setText( trUtf8( "Author: %1" ).arg( info.getAuthor() ) ); LicenseLbl->setText( trUtf8( "License: %1" ).arg( info.getLicense()) ); DownloadBtn->setEnabled( true ); return; } } } SoundLibraryNameLbl->setText( "" ); SoundLibraryInfoLbl->setText( "" ); AuthorLbl->setText( "" ); DownloadBtn->setEnabled( false ); } void SoundLibraryImportDialog::on_DownloadBtn_clicked() { QApplication::setOverrideCursor(Qt::WaitCursor); QString selected = m_pDrumkitTree->currentItem()->text(0); for ( uint i = 0; i < m_soundLibraryList.size(); ++i ) { if ( m_soundLibraryList[ i ].getName() == selected ) { // Download the sound library QString sURL = m_soundLibraryList[ i ].getUrl(); QString sType = m_soundLibraryList[ i ].getType(); QString sLocalFile; QString dataDir = H2Core::Preferences::get_instance()->getDataDirectory(); if( sType == "drumkit") { sLocalFile = QDir::tempPath() + "/" + QFileInfo( sURL ).fileName(); } if( sType == "song") { sLocalFile = dataDir + "songs/" + QFileInfo( sURL ).fileName(); } if( sType == "pattern") { sLocalFile = dataDir + "patterns/" + QFileInfo( sURL ).fileName(); } for ( int i = 0; i < 30; ++i ) { DownloadWidget dl( this, trUtf8( "Downloading SoundLibrary..." ), sURL, sLocalFile ); dl.exec(); QString redirect_url = dl.get_redirect_url(); if (redirect_url == "" ) { // ok, we have all data break; } else { sURL = redirect_url; } } // install the new soundlibrary try { if ( sType == "drumkit" ) { H2Core::Drumkit::install( sLocalFile ); QApplication::restoreOverrideCursor(); QMessageBox::information( this, "Hydrogen", QString( trUtf8( "SoundLibrary imported in %1" ) ).arg( dataDir ) ); } if ( sType == "song" || sType == "pattern") { QApplication::restoreOverrideCursor(); } } catch( H2Core::H2Exception ex ) { QApplication::restoreOverrideCursor(); QMessageBox::warning( this, "Hydrogen", trUtf8( "An error occurred importing the SoundLibrary." ) ); } QApplication::setOverrideCursor(Qt::WaitCursor); // remove the downloaded files.. if( sType == "drumkit" ) { QDir dir; dir.remove( sLocalFile ); } // update the drumkit list SoundLibraryDatabase::get_instance()->update(); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->test_expandedItems(); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->updateDrumkitList(); updateSoundLibraryList(); QApplication::restoreOverrideCursor(); return; } } } void SoundLibraryImportDialog::on_BrowseBtn_clicked() { static QString lastUsedDir = QDir::homePath(); std::auto_ptr fd( new QFileDialog ); fd->setFileMode(QFileDialog::ExistingFile); fd->setFilter( "Hydrogen drumkit (*.h2drumkit)" ); fd->setDirectory( lastUsedDir ); fd->setWindowTitle( trUtf8( "Import drumkit" ) ); QString filename = ""; if (fd->exec() == QDialog::Accepted) { filename = fd->selectedFiles().first(); } if (filename != "") { SoundLibraryPathTxt->setText( filename ); lastUsedDir = fd->directory().absolutePath(); InstallBtn->setEnabled ( true ); } } void SoundLibraryImportDialog::on_InstallBtn_clicked() { QApplication::setOverrideCursor(Qt::WaitCursor); QString dataDir = H2Core::Preferences::get_instance()->getDataDirectory(); try { H2Core::Drumkit::install( SoundLibraryPathTxt->text() ); QMessageBox::information( this, "Hydrogen", QString( trUtf8( "SoundLibrary imported in %1" ).arg( dataDir ) ) ); // update the drumkit list SoundLibraryDatabase::get_instance()->update(); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->test_expandedItems(); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->updateDrumkitList(); QApplication::restoreOverrideCursor(); } catch( H2Core::H2Exception ex ) { QApplication::restoreOverrideCursor(); QMessageBox::warning( this, "Hydrogen", trUtf8( "An error occurred importing the SoundLibrary." ) ); } } void SoundLibraryImportDialog::on_close_btn_clicked() { accept(); } hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryImportDialog.h000066400000000000000000000037501211146647700262370ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SOUND_LIBRARY_IMPORT_DIALOG_H #define SOUND_LIBRARY_IMPORT_DIALOG_H #include "ui_SoundLibraryImportDialog_UI.h" #include #include #include "SoundLibraryDatastructures.h" /// /// This dialog is used to import a SoundLibrary file from a local file or via HTTP. /// class SoundLibraryImportDialog : public QDialog, public Ui_SoundLibraryImportDialog_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: SoundLibraryImportDialog( QWidget* pParent ); ~SoundLibraryImportDialog(); private slots: void on_EditListBtn_clicked(); void on_UpdateListBtn_clicked(); void on_DownloadBtn_clicked(); void on_BrowseBtn_clicked(); void on_InstallBtn_clicked(); void on_close_btn_clicked(); void soundLibraryItemChanged( QTreeWidgetItem*, QTreeWidgetItem* ); private: std::vector m_soundLibraryList; H2Core::Preferences *pPref; QTreeWidgetItem* m_pDrumkitsItem; QTreeWidgetItem* m_pSongItem; QTreeWidgetItem* m_pPatternItem; bool isSoundLibraryItemAlreadyInstalled( SoundLibraryInfo sInfo ); void updateSoundLibraryList(); void updateRepositoryCombo(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryImportDialog_UI.ui000066400000000000000000000215441211146647700270230ustar00rootroot00000000000000 SoundLibraryImportDialog_UI 0 0 795 688 Dialog 0 Internet 9 9 375 588 Qt::Horizontal 40 20 Update list Edit server list Qt::Horizontal 40 20 true 15 false false 1 390 9 374 588 16777215 50 75 true Sound Library Name Qt::AlignCenter true Sound library Info Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true -1 Qt::Vertical 20 40 16777215 30 License... 16777215 30 Author... Qt::Horizontal 372 21 Download and install Local file 10 10 721 68 0 0 0 0 6 6 Browse... false Install 0 0 true Qt::Horizontal 40 20 Close Qt::Horizontal 40 20 hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryPanel.cpp000066400000000000000000000567571211146647700252560ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "SoundLibraryPanel.h" #include #include "SoundLibraryDatastructures.h" #include "SoundLibraryTree.h" #include "FileBrowser.h" #include "SoundLibrarySaveDialog.h" #include "SoundLibraryPropertiesDialog.h" #include "SoundLibraryExportDialog.h" #include "../HydrogenApp.h" #include "../widgets/Button.h" #include "../widgets/PixmapWidget.h" #include "../Skin.h" #include "../SongEditor/SongEditorPanel.h" #include "../PatternEditor/PatternEditorPanel.h" #include "../PatternEditor/DrumPatternEditor.h" #include "../PatternEditor/PatternEditorInstrumentList.h" #include "../InstrumentRack.h" #include "../InstrumentEditor/InstrumentEditorPanel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace H2Core; #include const char* SoundLibraryPanel::__class_name = "SoundLibraryPanel"; SoundLibraryPanel::SoundLibraryPanel( QWidget *pParent ) : QWidget( pParent ) , Object( __class_name ) , __sound_library_tree( NULL ) , __drumkit_menu( NULL ) , __instrument_menu( NULL ) , __song_menu( NULL ) , __pattern_menu( NULL ) , __pattern_menu_list( NULL ) , __system_drumkits_item( NULL ) , __user_drumkits_item( NULL ) , __song_item( NULL ) , __pattern_item( NULL ) , __pattern_item_list( NULL ) { //INFOLOG( "INIT" ); __drumkit_menu = new QMenu( this ); __drumkit_menu->addAction( trUtf8( "Load" ), this, SLOT( on_drumkitLoadAction() ) ); __drumkit_menu->addAction( trUtf8( "Export" ), this, SLOT( on_drumkitExportAction() ) ); __drumkit_menu->addAction( trUtf8( "Properties" ), this, SLOT( on_drumkitPropertiesAction() ) ); __drumkit_menu->addSeparator(); __drumkit_menu->addAction( trUtf8( "Delete" ), this, SLOT( on_drumkitDeleteAction() ) ); __instrument_menu = new QMenu( this ); __instrument_menu->addSeparator(); __instrument_menu->addAction( trUtf8( "Delete" ), this, SLOT( on_instrumentDeleteAction() ) ); __song_menu = new QMenu( this ); __song_menu->addSeparator(); __song_menu->addAction( trUtf8( "Load" ), this, SLOT( on_songLoadAction() ) ); __pattern_menu = new QMenu( this ); __pattern_menu->addSeparator(); __pattern_menu->addAction( trUtf8( "Load" ), this, SLOT( on_patternLoadAction() ) ); __pattern_menu->addAction( trUtf8( "Delete" ), this, SLOT( on_patternDeleteAction() ) ); __pattern_menu_list = new QMenu( this ); __pattern_menu_list->addSeparator(); __pattern_menu_list->addAction( trUtf8( "Load" ), this, SLOT( on_patternLoadAction() ) ); // DRUMKIT LIST __sound_library_tree = new SoundLibraryTree( NULL ); connect( __sound_library_tree, SIGNAL( currentItemChanged ( QTreeWidgetItem*, QTreeWidgetItem* ) ), this, SLOT( on_DrumkitList_ItemChanged( QTreeWidgetItem*, QTreeWidgetItem* ) ) ); connect( __sound_library_tree, SIGNAL( itemActivated ( QTreeWidgetItem*, int ) ), this, SLOT( on_DrumkitList_itemActivated( QTreeWidgetItem*, int ) ) ); connect( __sound_library_tree, SIGNAL( leftClicked(QPoint) ), this, SLOT( on_DrumkitList_leftClicked(QPoint)) ); connect( __sound_library_tree, SIGNAL( rightClicked(QPoint) ), this, SLOT( on_DrumkitList_rightClicked(QPoint)) ); connect( __sound_library_tree, SIGNAL( onMouseMove( QMouseEvent* ) ), this, SLOT( on_DrumkitList_mouseMove( QMouseEvent* ) ) ); // LAYOUT QVBoxLayout *pVBox = new QVBoxLayout(); pVBox->setSpacing( 0 ); pVBox->setMargin( 0 ); pVBox->addWidget( __sound_library_tree ); this->setLayout( pVBox ); __expand_pattern_list = Preferences::get_instance()->__expandPatternItem; __expand_songs_list = Preferences::get_instance()->__expandSongItem; updateDrumkitList(); } SoundLibraryPanel::~SoundLibraryPanel() { for (uint i = 0; i < __system_drumkit_info_list.size(); ++i ) { delete __system_drumkit_info_list[i]; } __system_drumkit_info_list.clear(); for (uint i = 0; i < __user_drumkit_info_list.size(); ++i ) { delete __user_drumkit_info_list[i]; } __user_drumkit_info_list.clear(); } void SoundLibraryPanel::updateDrumkitList() { QString currentSL = Hydrogen::get_instance()->getCurrentDrumkitname(); LocalFileMng mng; __sound_library_tree->clear(); __system_drumkits_item = new QTreeWidgetItem( __sound_library_tree ); __system_drumkits_item->setText( 0, trUtf8( "System drumkits" ) ); __sound_library_tree->setItemExpanded( __system_drumkits_item, true ); __user_drumkits_item = new QTreeWidgetItem( __sound_library_tree ); __user_drumkits_item->setText( 0, trUtf8( "User drumkits" ) ); __sound_library_tree->setItemExpanded( __user_drumkits_item, true ); for (uint i = 0; i < __system_drumkit_info_list.size(); ++i ) { delete __system_drumkit_info_list[i]; } __system_drumkit_info_list.clear(); for (uint i = 0; i < __user_drumkit_info_list.size(); ++i ) { delete __user_drumkit_info_list[i]; } __user_drumkit_info_list.clear(); //User drumkit list QStringList usr_dks = Filesystem::usr_drumkits_list(); for (int i = 0; i < usr_dks.size(); ++i) { QString absPath = Filesystem::usr_drumkits_dir() + "/" + usr_dks[i]; Drumkit *pInfo = Drumkit::load( absPath ); if (pInfo) { __user_drumkit_info_list.push_back( pInfo ); QTreeWidgetItem* pDrumkitItem = new QTreeWidgetItem( __user_drumkits_item ); pDrumkitItem->setText( 0, pInfo->get_name() ); if ( QString(pInfo->get_name() ) == currentSL ){ pDrumkitItem->setBackgroundColor( 0, QColor( 50, 50, 50) ); } InstrumentList *pInstrList = pInfo->get_instruments(); for ( uint nInstr = 0; nInstr < pInstrList->size(); ++nInstr ) { Instrument *pInstr = pInstrList->get( nInstr ); QTreeWidgetItem* pInstrumentItem = new QTreeWidgetItem( pDrumkitItem ); pInstrumentItem->setText( 0, QString( "[%1] " ).arg( nInstr + 1 ) + pInstr->get_name() ); pInstrumentItem->setToolTip( 0, pInstr->get_name() ); } } } //System drumkit list QStringList sys_dks = Filesystem::sys_drumkits_list(); for (int i = 0; i < sys_dks.size(); ++i) { QString absPath = Filesystem::sys_drumkits_dir() + "/" + sys_dks[i]; Drumkit *pInfo = Drumkit::load( absPath ); if (pInfo) { __system_drumkit_info_list.push_back( pInfo ); QTreeWidgetItem* pDrumkitItem = new QTreeWidgetItem( __system_drumkits_item ); pDrumkitItem->setText( 0, pInfo->get_name() ); if ( QString( pInfo->get_name() ) == currentSL ){ pDrumkitItem->setBackgroundColor( 0, QColor( 50, 50, 50) ); } InstrumentList *pInstrList = pInfo->get_instruments(); for ( uint nInstr = 0; nInstr < pInstrList->size(); ++nInstr ) { Instrument *pInstr = pInstrList->get( nInstr ); QTreeWidgetItem* pInstrumentItem = new QTreeWidgetItem( pDrumkitItem ); pInstrumentItem->setText( 0, QString( "[%1] " ).arg( nInstr + 1 ) + pInstr->get_name() ); pInstrumentItem->setToolTip( 0, pInstr->get_name() ); } } } //Songlist QStringList songs = Filesystem::songs_list(); if ( songs.size() > 0 ) { __song_item = new QTreeWidgetItem( __sound_library_tree ); __song_item->setText( 0, trUtf8( "Songs" ) ); __song_item->setToolTip( 0, "double click to expand the list" ); __sound_library_tree->setItemExpanded( __song_item, __expand_songs_list ); for (uint i = 0; i < songs.size(); i++) { QTreeWidgetItem* pSongItem = new QTreeWidgetItem( __song_item ); QString song = songs[i]; pSongItem->setText( 0 , song.left( song.indexOf(".")) ); pSongItem->setToolTip( 0, song ); } } //Pattern list std::vector patternDirList = mng.getPatternDirList(); if ( patternDirList.size() > 0 ) { __pattern_item = new QTreeWidgetItem( __sound_library_tree ); __pattern_item->setText( 0, trUtf8( "Patterns" ) ); __pattern_item->setToolTip( 0, "double click to expand the list" ); __sound_library_tree->setItemExpanded( __pattern_item, __expand_pattern_list ); //this is to push the mng.getPatternList in all patterns/drumkit dirs for (uint i = 0; i < patternDirList.size(); ++i) { QString absPath = patternDirList[i]; mng.getPatternList( absPath ); } //this is the second step to push the mng.funktion //SoundLibraryDatabase::create_instance(); SoundLibraryDatabase* db = SoundLibraryDatabase::get_instance(); soundLibraryInfoVector* allPatternDirList = db->getAllPatterns(); QStringList allCategoryNameList = db->getAllPatternCategories(); //now sorting via category for (uint i = 0; i < allCategoryNameList.size(); ++i) { QString categoryName = allCategoryNameList[i]; QTreeWidgetItem* pCategoryItem = new QTreeWidgetItem( __pattern_item ); pCategoryItem->setText( 0, categoryName ); soundLibraryInfoVector::iterator mapIterator; for( mapIterator=allPatternDirList->begin(); mapIterator != allPatternDirList->end(); mapIterator++ ) { QString patternCategory = (*mapIterator)->getCategory(); if ( patternCategory == categoryName || patternCategory.isEmpty() && categoryName == "No category" ){ QTreeWidgetItem* pPatternItem = new QTreeWidgetItem( pCategoryItem ); pPatternItem->setText( 0, (*mapIterator)->getName()); pPatternItem->setText( 1, (*mapIterator)->getPath() ); pPatternItem->setToolTip( 0, mng.getDrumkitNameForPattern( (*mapIterator)->getPath() )); INFOLOG( "Path" + (*mapIterator)->getPath() ); } } } } } void SoundLibraryPanel::on_DrumkitList_ItemChanged( QTreeWidgetItem * current, QTreeWidgetItem * previous ) { UNUSED( current ); UNUSED( previous ); test_expandedItems(); } void SoundLibraryPanel::on_DrumkitList_itemActivated( QTreeWidgetItem * item, int column ) { UNUSED( column ); // INFOLOG( "[on_DrumkitList_itemActivated]" ); if ( item == __system_drumkits_item || item == __user_drumkits_item || item == __system_drumkits_item->parent() || item->parent() == __song_item || item == __song_item || item == __pattern_item || item->parent() == __pattern_item || item->parent()->parent() == __pattern_item || item == __pattern_item_list || item->parent() == __pattern_item_list || item->parent()->parent() == __pattern_item_list ) { return; } if ( item->parent() == __system_drumkits_item || item->parent() == __user_drumkits_item ) { // e' stato selezionato un drumkit } else { // e' stato selezionato uno strumento QString selectedName = item->text(0); if( item->text(0) == "Patterns" ) return; QString sInstrName = selectedName.remove( 0, selectedName.indexOf( "] " ) + 2 ); QString sDrumkitName = item->parent()->text(0); INFOLOG( QString(sDrumkitName) + ", instr:" + sInstrName ); Instrument *pInstrument = Instrument::load_instrument( sDrumkitName, sInstrName ); pInstrument->set_muted( false ); AudioEngine::get_instance()->get_sampler()->preview_instrument( pInstrument ); } } void SoundLibraryPanel::on_DrumkitList_rightClicked( QPoint pos ) { if( __sound_library_tree->currentItem() == NULL ) return; if ( ( __sound_library_tree->currentItem()->parent() == NULL ) || ( __sound_library_tree->currentItem() == __user_drumkits_item ) || ( __sound_library_tree->currentItem() == __system_drumkits_item ) ) { return; } if ( __sound_library_tree->currentItem()->parent() == __song_item ) { __song_menu->popup( pos ); } if ( __sound_library_tree->currentItem()->parent()->parent() == __pattern_item && __pattern_item != NULL ) { __pattern_menu->popup( pos ); } if ( __sound_library_tree->currentItem()->parent() == __user_drumkits_item ) { __drumkit_menu->popup( pos ); } else if ( __sound_library_tree->currentItem()->parent()->parent() == __user_drumkits_item ) { __instrument_menu->popup( pos ); } //else if ( __sound_library_tree->currentItem()->parent()->parent()->parent() == __pattern_item_list ) { // __pattern_menu_list->popup( pos ); //} if ( __sound_library_tree->currentItem()->parent() == __system_drumkits_item ) { __drumkit_menu->popup( pos ); } else if ( __sound_library_tree->currentItem()->parent()->parent() == __system_drumkits_item ) { __instrument_menu->popup( pos ); } } void SoundLibraryPanel::on_DrumkitList_leftClicked( QPoint pos ) { __start_drag_position = pos; } void SoundLibraryPanel::on_DrumkitList_mouseMove( QMouseEvent *event) { if (! ( event->buttons() & Qt::LeftButton ) ) { return; } if ( ( event->pos() - __start_drag_position ).manhattanLength() < QApplication::startDragDistance() ) { return; } if ( !__sound_library_tree->currentItem() ) { return; } if ( ( __sound_library_tree->currentItem()->parent() == __system_drumkits_item ) || ( __sound_library_tree->currentItem()->parent() == __user_drumkits_item ) ) { // drumkit selection //INFOLOG( "ho selezionato un drumkit (system)" ); return; } else { //INFOLOG( "ho selezionato uno strumento" ); // instrument selection if ( __sound_library_tree->currentItem() == NULL ) { return; } if ( __sound_library_tree->currentItem()->parent() == NULL ) { return; } if ( __sound_library_tree->currentItem()->parent() == __song_item ) { return; } if ( __sound_library_tree->currentItem()->parent()->text(0) == NULL ) { return; } if ( __sound_library_tree->currentItem()->parent() == __pattern_item ) { return; } if ( __sound_library_tree->currentItem()->parent()->parent() == __pattern_item ) { QString sPatternPath = __sound_library_tree->currentItem()->text( 1 ); QString dragtype = "drag pattern"; QString sText = dragtype + "::" + sPatternPath; QDrag *pDrag = new QDrag(this); QMimeData *pMimeData = new QMimeData; pMimeData->setText( sText ); pDrag->setMimeData( pMimeData); pDrag->start( Qt::CopyAction | Qt::MoveAction ); return; } QString sDrumkitName = __sound_library_tree->currentItem()->parent()->text(0); QString sInstrumentName = ( __sound_library_tree->currentItem()->text(0) ).remove( 0, __sound_library_tree->currentItem()->text(0).indexOf( "] " ) + 2 ); QString sText = "importInstrument:" + sDrumkitName + "::" + sInstrumentName; QDrag *pDrag = new QDrag(this); QMimeData *pMimeData = new QMimeData; pMimeData->setText( sText ); pDrag->setMimeData( pMimeData); pDrag->start( Qt::CopyAction | Qt::MoveAction ); } } void SoundLibraryPanel::on_drumkitLoadAction() { restore_background_color(); QString sDrumkitName = __sound_library_tree->currentItem()->text(0); Drumkit *drumkitInfo = NULL; // find the drumkit in the list for ( uint i = 0; i < __system_drumkit_info_list.size(); i++ ) { Drumkit *pInfo = __system_drumkit_info_list[i]; if ( pInfo->get_name() == sDrumkitName ) { drumkitInfo = pInfo; break; } } for ( uint i = 0; i < __user_drumkit_info_list.size(); i++ ) { Drumkit *pInfo = __user_drumkit_info_list[i]; if ( pInfo->get_name() == sDrumkitName ) { drumkitInfo = pInfo; break; } } assert( drumkitInfo ); QApplication::setOverrideCursor(Qt::WaitCursor); Hydrogen::get_instance()->loadDrumkit( drumkitInfo ); Hydrogen::get_instance()->getSong()->__is_modified = true; HydrogenApp::get_instance()->onDrumkitLoad( drumkitInfo->get_name() ); HydrogenApp::get_instance()->getPatternEditorPanel()->getDrumPatternEditor()->updateEditor(); HydrogenApp::get_instance()->getPatternEditorPanel()->updatePianorollEditor(); InstrumentEditorPanel::get_instance()->updateInstrumentEditor(); __sound_library_tree->currentItem()->setBackgroundColor ( 0, QColor( 50, 50, 50) ); QApplication::restoreOverrideCursor(); } void SoundLibraryPanel::update_background_color() { restore_background_color(); change_background_color(); } void SoundLibraryPanel::restore_background_color() { for (int i = 0; i < __system_drumkits_item->childCount() ; i++){ ( __system_drumkits_item->child( i ) )->setBackground( 0, QBrush() ); } for (int i = 0; i < __user_drumkits_item->childCount() ; i++){ ( __user_drumkits_item->child( i ) )->setBackground(0, QBrush() ); } } void SoundLibraryPanel::change_background_color() { QString curlib = Hydrogen::get_instance()->getCurrentDrumkitname(); for (int i = 0; i < __system_drumkits_item->childCount() ; i++){ if ( ( __system_drumkits_item->child( i ) )->text( 0 ) == curlib ){ ( __system_drumkits_item->child( i ) )->setBackgroundColor ( 0, QColor( 50, 50, 50) ); break; } } for (int i = 0; i < __user_drumkits_item->childCount() ; i++){ if ( ( __user_drumkits_item->child( i ))->text( 0 ) == curlib ){ ( __user_drumkits_item->child( i ) )->setBackgroundColor ( 0, QColor( 50, 50, 50) ); break; } } } void SoundLibraryPanel::on_drumkitDeleteAction() { QTreeWidgetItem* item = __sound_library_tree->currentItem(); QString itemName = QString("%1").arg(__sound_library_tree->currentItem()->text(0)); //if we delete the current loaded drumkit we can get trouble with some empty pointers // TODO this check is really unsafe if ( item->text(0) == Hydrogen::get_instance()->getCurrentDrumkitname() ){ QMessageBox::warning( this, "Hydrogen", tr( "It is not possible to delete the currently loaded drumkit: \n \"%1\".\nTo delete this drumkit first load another drumkit.").arg(itemName) ); return; } if ( item->parent() == __system_drumkits_item ) { QMessageBox::warning( this, "Hydrogen", tr( "\"%1\"is a system drumkit and can't be deleted.").arg(itemName) ); return; } int res = QMessageBox::warning( this, "Hydrogen", tr( "Warning, the \"%1\" drumkit will be deleted from disk.\nAre you sure?").arg(itemName), "&Ok", "&Cancel", 0, 1 ); if ( res == 1 ) { return; } QApplication::setOverrideCursor(Qt::WaitCursor); bool success = Drumkit::remove( item->text(0) ); test_expandedItems(); updateDrumkitList(); QApplication::restoreOverrideCursor(); if ( !success) QMessageBox::warning( this, "Hydrogen", tr( "Drumkit deletion failed.") ); } void SoundLibraryPanel::on_drumkitExportAction() { QString sDrumkitName = __sound_library_tree->currentItem()->text(0); SoundLibraryExportDialog exportDialog( this, sDrumkitName); exportDialog.exec(); } void SoundLibraryPanel::on_drumkitPropertiesAction() { QString sDrumkitName = __sound_library_tree->currentItem()->text(0); Drumkit *drumkitInfo = NULL; // find the drumkit in the list for ( uint i = 0; i < __system_drumkit_info_list.size(); i++ ) { Drumkit *pInfo = __system_drumkit_info_list[i]; if ( pInfo->get_name() == sDrumkitName ) { drumkitInfo = pInfo; break; } } for ( uint i = 0; i < __user_drumkit_info_list.size(); i++ ) { Drumkit*pInfo = __user_drumkit_info_list[i]; if ( pInfo->get_name() == sDrumkitName ) { drumkitInfo = pInfo; break; } } assert( drumkitInfo ); QString sPreDrumkitName = Hydrogen::get_instance()->getCurrentDrumkitname(); Drumkit *preDrumkitInfo = NULL; // find the drumkit in the list for ( uint i = 0; i < __system_drumkit_info_list.size(); i++ ) { Drumkit *prInfo = __system_drumkit_info_list[i]; if ( prInfo->get_name() == sPreDrumkitName ) { preDrumkitInfo = prInfo; break; } } for ( uint i = 0; i < __user_drumkit_info_list.size(); i++ ) { Drumkit *prInfo = __user_drumkit_info_list[i]; if ( prInfo->get_name() == sPreDrumkitName ) { preDrumkitInfo = prInfo; break; } } if ( preDrumkitInfo == NULL ){ QMessageBox::warning( this, "Hydrogen", QString( "The current loaded song missing his soundlibrary.\nPlease load a existing soundlibrary first") ); return; } assert( preDrumkitInfo ); //open the soundlibrary save dialog SoundLibraryPropertiesDialog dialog( this , drumkitInfo, preDrumkitInfo ); dialog.exec(); } void SoundLibraryPanel::on_instrumentDeleteAction() { QMessageBox::warning( this, "Hydrogen", QString( "Not implemented yet.") ); ERRORLOG( "[on_instrumentDeleteAction] not implemented yet" ); } void SoundLibraryPanel::on_songLoadAction() { QString songName = __sound_library_tree->currentItem()->text( 0 ); QString sDirectory = Preferences::get_instance()->getDataDirectory() + "songs"; QString sFilename = sDirectory + "/" + songName + ".h2song"; Hydrogen *engine = Hydrogen::get_instance(); if ( engine->getState() == STATE_PLAYING ) { engine->sequencer_stop(); } Song *pSong = Song::load( sFilename ); if ( pSong == NULL ) { QMessageBox::information( this, "Hydrogen", trUtf8("Error loading song.") ); return; } // add the new loaded song in the "last used song" vector Preferences *pPref = Preferences::get_instance(); std::vector recentFiles = pPref->getRecentFiles(); recentFiles.insert( recentFiles.begin(), sFilename ); pPref->setRecentFiles( recentFiles ); HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->setSong( pSong ); //updateRecentUsedSongList(); engine->setSelectedPatternNumber( 0 ); } void SoundLibraryPanel::on_patternLoadAction() { LocalFileMng mng; QString patternName = __sound_library_tree->currentItem()->text( 0 ) + ".h2pattern"; QString drumkitname = __sound_library_tree->currentItem()->toolTip ( 0 ); Hydrogen *engine = Hydrogen::get_instance(); Song *song = engine->getSong(); PatternList *pPatternList = song->get_pattern_list(); QString sDirectory; std::vector patternDirList = mng.getPatternDirList(); for (uint i = 0; i < patternDirList.size(); ++i) { QString absPath = patternDirList[i]; mng.getPatternList( absPath ); } std::vector allPatternDirList = mng.getallPatternList(); for (uint i = 0; i < allPatternDirList.size(); ++i) { QString testName = allPatternDirList[i]; if( testName.contains( patternName ) && testName.contains( drumkitname )){ sDirectory = allPatternDirList[i]; } } Pattern* err = mng.loadPattern (sDirectory ); if ( err == 0 ) { ERRORLOG( "Error loading the pattern" ); } else { H2Core::Pattern *pNewPattern = err; pPatternList->add ( pNewPattern ); song->__is_modified = true; } HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); } void SoundLibraryPanel::on_patternDeleteAction() { QString patternPath = __sound_library_tree->currentItem()->text( 1 ); int res = QMessageBox::information( this, "Hydrogen", tr( "Warning, the selected pattern will be deleted from disk.\nAre you sure?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); if ( res == 1 ) { return; } QFile rmfile( patternPath ); bool err = rmfile.remove(); if ( err == false ) { ERRORLOG( "Error removing the pattern" ); } SoundLibraryDatabase::get_instance()->updatePatterns(); test_expandedItems(); updateDrumkitList(); } void SoundLibraryPanel::test_expandedItems() { assert( __sound_library_tree ); __expand_songs_list = __sound_library_tree->isItemExpanded( __song_item ); __expand_pattern_list = __sound_library_tree->isItemExpanded( __pattern_item ); Preferences::get_instance()->__expandSongItem = __expand_songs_list; Preferences::get_instance()->__expandPatternItem = __expand_pattern_list; //ERRORLOG( QString("songs %1 patterns %2").arg(__expand_songs_list).arg(__expand_pattern_list) ); } hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryPanel.h000066400000000000000000000050631211146647700247030ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SOUND_LIBRARY_PANEL_H #define SOUND_LIBRARY_PANEL_H #include #include #include namespace H2Core { class Song; class Drumkit; class SoundLibrary; } class SoundLibraryTree; class ToggleButton; class SoundLibraryPanel : public QWidget, private H2Core::Object { H2_OBJECT Q_OBJECT public: SoundLibraryPanel( QWidget* parent ); ~SoundLibraryPanel(); void updateDrumkitList(); void test_expandedItems(); void update_background_color(); private slots: void on_DrumkitList_ItemChanged( QTreeWidgetItem* current, QTreeWidgetItem* previous ); void on_DrumkitList_itemActivated( QTreeWidgetItem* item, int column ); void on_DrumkitList_leftClicked( QPoint pos ); void on_DrumkitList_rightClicked( QPoint pos ); void on_DrumkitList_mouseMove( QMouseEvent* event ); void on_drumkitLoadAction(); void on_drumkitDeleteAction(); void on_drumkitPropertiesAction(); void on_drumkitExportAction(); void on_instrumentDeleteAction(); void on_songLoadAction(); void on_patternLoadAction(); void on_patternDeleteAction(); private: SoundLibraryTree *__sound_library_tree; //FileBrowser *m_pFileBrowser; QPoint __start_drag_position; QMenu* __drumkit_menu; QMenu* __instrument_menu; QMenu* __song_menu; QMenu* __pattern_menu; QMenu* __pattern_menu_list; QTreeWidgetItem* __system_drumkits_item; QTreeWidgetItem* __user_drumkits_item; QTreeWidgetItem* __song_item; QTreeWidgetItem* __pattern_item; QTreeWidgetItem* __pattern_item_list; std::vector __system_drumkit_info_list; std::vector __user_drumkit_info_list; bool __expand_pattern_list; bool __expand_songs_list; void restore_background_color(); void change_background_color(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.cpp000066400000000000000000000107051211146647700274520ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include "../HydrogenApp.h" #include "SoundLibraryPropertiesDialog.h" #include "../InstrumentRack.h" #include "SoundLibraryPanel.h" #include namespace H2Core { //globals Drumkit *drumkitinfo = NULL ; Drumkit *predrumkit = NULL; QString oldName; const char* SoundLibraryPropertiesDialog::__class_name = "SoundLibraryPropertiesDialog"; SoundLibraryPropertiesDialog::SoundLibraryPropertiesDialog( QWidget* pParent, Drumkit *drumkitInfo, Drumkit *preDrumKit ) : QDialog( pParent ) , Object( __class_name ) { setupUi( this ); INFOLOG( "INIT" ); setWindowTitle( trUtf8( "SoundLibrary Properties" ) ); setFixedSize( width(), height() ); predrumkit = preDrumKit; //display the current drumkit infos into the qlineedit if ( drumkitInfo != NULL ){ drumkitinfo = drumkitInfo; nameTxt->setText( QString( drumkitInfo->get_name() ) ); oldName = drumkitInfo->get_name(); authorTxt->setText( QString( drumkitInfo->get_author() ) ); infoTxt->append( QString( drumkitInfo->get_info() ) ); licenseTxt->setText( QString( drumkitInfo->get_license() ) ); } } SoundLibraryPropertiesDialog::~SoundLibraryPropertiesDialog() { INFOLOG( "DESTROY" ); } void SoundLibraryPropertiesDialog::on_saveBtn_clicked() { bool reload = false; if ( saveChanges_checkBox->isChecked() ){ //test if the drumkit is loaded if ( Hydrogen::get_instance()->getCurrentDrumkitname() != drumkitinfo->get_name() ){ QMessageBox::information( this, "Hydrogen", trUtf8 ( "This is not possible, you can only save changes inside instruments to the current loaded sound library")); saveChanges_checkBox->setChecked( false ); return; } reload = true; } //load the selected drumkit to save it correct.... later the old drumkit will be reloaded if ( drumkitinfo != NULL && ( !saveChanges_checkBox->isChecked() ) ){ if ( Hydrogen::get_instance()->getCurrentDrumkitname() != drumkitinfo->get_name() ){ Hydrogen::get_instance()->loadDrumkit( drumkitinfo ); Hydrogen::get_instance()->getSong()->__is_modified = true; } } //check the drumkit name. if the name is a new one, one qmessagebox with question "are you sure" will displayed. if ( nameTxt->text() != oldName ){ int res = QMessageBox::information( this, "Hydrogen", tr( "Warning! Changing the drumkit name will result in creating a new drumkit with this name.\nAre you sure?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); if ( res == 1 ) { return; } else { reload = true; } } //save the drumkit if( !H2Core::Drumkit::save( nameTxt->text(), authorTxt->text(), infoTxt->toHtml(), licenseTxt->text(), H2Core::Hydrogen::get_instance()->getSong()->get_instrument_list(), true ) ) { QMessageBox::information( this, "Hydrogen", trUtf8 ( "Saving of this drumkit failed.")); } //check the name and set the drumkitinfo to current drumkit if ( drumkitinfo != NULL && !nameTxt->text().isEmpty() ){ drumkitinfo->set_name( nameTxt->text() ); drumkitinfo->set_author( authorTxt->text() ); drumkitinfo->set_info( infoTxt->toHtml() ); drumkitinfo->set_license( licenseTxt->text() ); } //check pre loaded drumkit name and reload the old drumkit if ( predrumkit != NULL ){ if ( predrumkit->get_name() != Hydrogen::get_instance()->getCurrentDrumkitname() ){ Hydrogen::get_instance()->loadDrumkit( predrumkit ); Hydrogen::get_instance()->getSong()->__is_modified = true; } } //reload if necessary if ( reload == true ){ HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->test_expandedItems(); HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->updateDrumkitList(); } accept(); } } hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.h000066400000000000000000000026071211146647700271210ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SOUND_LIBRARY_PROPERTIES_DIALOG_H #define SOUND_LIBRARY_PROPERTIES_DIALOG_H #include "ui_SoundLibraryPropertiesDialog_UI.h" #include /// /// namespace H2Core { class Drumkit; class SoundLibraryPropertiesDialog : public QDialog, public Ui_SoundLibraryPropertiesDialog_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: SoundLibraryPropertiesDialog( QWidget* pParent , Drumkit *drumkitInfo, Drumkit *preDrumKit ); ~SoundLibraryPropertiesDialog(); private slots: void on_saveBtn_clicked(); private: }; } #endif hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog_UI.ui000066400000000000000000000125771211146647700277130ustar00rootroot00000000000000 SoundLibraryPropertiesDialog_UI 0 0 595 360 Dialog 10 10 91 25 0 0 Name 10 40 91 25 0 0 Author 10 100 91 111 Information Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 111 39 471 22 0 0 209 0 111 11 471 22 0 0 209 0 111 95 471 192 false 10 70 91 21 License Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 111 67 471 22 0 0 209 0 420 320 162 28 Save Cancel 111 293 469 21 Save changes made to instruments into sound library nameTxt authorTxt licenseTxt infoTxt saveChanges_checkBox saveBtn m_cancelBtn m_cancelBtn clicked() SoundLibraryPropertiesDialog_UI reject() 121 220 51 196 hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog.cpp000066400000000000000000000053341211146647700274770ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2007 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "SoundLibraryRepositoryDialog.h" #include #include #include #include const char* SoundLibraryRepositoryDialog::__class_name = "SoundLibraryRepositoryDialog"; SoundLibraryRepositoryDialog::SoundLibraryRepositoryDialog( QWidget* pParent ) : QDialog( pParent ) , Object( __class_name ) { setupUi( this ); INFOLOG( "INIT" ); setWindowTitle( trUtf8( "Edit repository settings" ) ); setFixedSize( width(), height() ); updateDialog(); } //update all values void SoundLibraryRepositoryDialog::updateDialog(){ H2Core::Preferences *pPref = H2Core::Preferences::get_instance(); /* Read serverList from config and put servers into the serverList */ std::list::const_iterator cur_Server; ServerListWidget->clear(); for( cur_Server = pPref->sServerList.begin(); cur_Server != pPref->sServerList.end(); ++cur_Server ) { ServerListWidget->addItem( *cur_Server ); } } /// /// Add new server url void SoundLibraryRepositoryDialog::on_AddBtn_clicked() { H2Core::Preferences *pPref = H2Core::Preferences::get_instance(); bool ok; QString text = QInputDialog::getText(this, trUtf8("Edit server list"), trUtf8("URL"), QLineEdit::Normal,QString(""), &ok); if( ok && !text.isEmpty() ){ pPref->sServerList.push_back( text ); } updateDialog(); } /// /// Delete serverList entry /// void SoundLibraryRepositoryDialog::on_DeleteBtn_clicked() { QList selectedItems; selectedItems = ServerListWidget->selectedItems(); //std::list::const_iterator cur_Server; H2Core::Preferences *pPref = H2Core::Preferences::get_instance(); while( ! selectedItems.isEmpty() ){ QString selText; selText = selectedItems.takeFirst()->text(); pPref->sServerList.remove(selText); } updateDialog(); } SoundLibraryRepositoryDialog::~SoundLibraryRepositoryDialog() { INFOLOG( "DESTROY" ); } hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog.h000066400000000000000000000025561211146647700271470ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2007 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SOUND_LIBRARY_REPOSITORY_DIALOG_H #define SOUND_LIBRARY_REPOSITORY_DIALOG_H #include "ui_SoundLibraryRepositoryDialog_UI.h" #include /// /// /// class SoundLibraryRepositoryDialog : public QDialog, public Ui_SoundLibraryRepositoryDialog_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: SoundLibraryRepositoryDialog( QWidget* pParent ); ~SoundLibraryRepositoryDialog(); private slots: void on_AddBtn_clicked(); void on_DeleteBtn_clicked(); private: void updateDialog(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog_UI.ui000066400000000000000000000022151211146647700277220ustar00rootroot00000000000000 SoundLibraryRepositoryDialog_UI 0 0 400 300 Dialog 0 0 401 301 Add Delete hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibrarySaveDialog.cpp000066400000000000000000000036151211146647700262160ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "SoundLibrarySaveDialog.h" #include #include #include const char* SoundLibrarySaveDialog::__class_name = "SoundLibrarySaveDialog"; SoundLibrarySaveDialog::SoundLibrarySaveDialog( QWidget* pParent ) : QDialog( pParent ) , Object( __class_name ) { setupUi( this ); INFOLOG( "INIT" ); setWindowTitle( trUtf8( "Save Sound Library" ) ); setFixedSize( width(), height() ); } SoundLibrarySaveDialog::~SoundLibrarySaveDialog() { INFOLOG( "DESTROY" ); } void SoundLibrarySaveDialog::on_saveBtn_clicked() { INFOLOG( "!!!" ); if( nameTxt->text().isEmpty() ){ QMessageBox::information( this, "Hydrogen", trUtf8 ( "Please supply at least a valid name")); return; } if( !H2Core::Drumkit::save( nameTxt->text(), authorTxt->text(), infoTxt->toHtml(), licenseTxt->text(), H2Core::Hydrogen::get_instance()->getSong()->get_instrument_list(), false ) ) { QMessageBox::information( this, "Hydrogen", trUtf8 ( "Saving of this drumkit failed.")); return; } accept(); } hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibrarySaveDialog.h000066400000000000000000000024221211146647700256560ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SOUND_LIBRARY_SAVE_DIALOG_H #define SOUND_LIBRARY_SAVE_DIALOG_H #include "ui_SoundLibrarySaveDialog_UI.h" #include /// /// /// class SoundLibrarySaveDialog : public QDialog, public Ui_SoundLibrarySaveDialog_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: SoundLibrarySaveDialog( QWidget* pParent ); ~SoundLibrarySaveDialog(); private slots: void on_saveBtn_clicked(); private: }; #endif hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibrarySaveDialog_UI.ui000066400000000000000000000116751211146647700264530ustar00rootroot00000000000000 SoundLibrarySaveDialog_UI 0 0 595 310 Dialog 10 10 91 25 0 0 Name 10 40 91 25 0 0 Author 10 100 91 111 Information Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 110 40 471 25 0 0 209 0 110 10 471 25 0 0 209 0 110 100 471 161 false 10 70 91 21 License Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 110 70 471 25 0 0 209 0 360 270 221 28 Save Cancel nameTxt authorTxt licenseTxt infoTxt saveBtn m_cancelBtn m_cancelBtn clicked() SoundLibrarySaveDialog_UI reject() 121 220 51 196 hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryTree.cpp000066400000000000000000000033141211146647700250730ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "SoundLibraryTree.h" #include const char* SoundLibraryTree::__class_name = "SoundLibraryTree"; SoundLibraryTree::SoundLibraryTree( QWidget *pParent ) : QTreeWidget( pParent ) , Object( __class_name ) { setHeaderLabels( QStringList( trUtf8( "Sound library" ) ) ); setAlternatingRowColors(true); setRootIsDecorated( false ); setItemHidden( headerItem(), true ); // hides the header } void SoundLibraryTree::mousePressEvent(QMouseEvent *event) { // INFOLOG( "[mousePressEvent]" ); QTreeWidget::mousePressEvent( event ); if ( event->button() == Qt::RightButton ) { emit rightClicked( QPoint( event->globalX(), event->globalY() ) ); } else if (event->button() == Qt::LeftButton ) { emit leftClicked( QPoint( event->globalX(), event->globalY() ) ); } } void SoundLibraryTree::mouseMoveEvent(QMouseEvent *event) { emit onMouseMove( event ); } hydrogen-0.9.6-beta3/src/gui/src/SoundLibrary/SoundLibraryTree.h000066400000000000000000000025421211146647700245420ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SOUND_LIBRARY_TREE_H #define SOUND_LIBRARY_TREE_H #include #include class SoundLibraryTree : public QTreeWidget, private H2Core::Object { H2_OBJECT Q_OBJECT public: SoundLibraryTree( QWidget *pParent ); signals: void leftClicked( QPoint pos ); void rightClicked( QPoint pos ); void onMouseMove( QMouseEvent* event ); private slots: protected: virtual void mousePressEvent(QMouseEvent *event); virtual void mouseMoveEvent(QMouseEvent *event); }; #endif hydrogen-0.9.6-beta3/src/gui/src/SplashScreen.cpp000066400000000000000000000042501211146647700216130ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include "SplashScreen.h" #include #include #include #include #include "Skin.h" const char* SplashScreen::__class_name = "SplashScreen"; SplashScreen::SplashScreen() // : QWidget( NULL, Qt::SplashScreen ) : QSplashScreen( NULL ) , Object( __class_name ) { //INFOLOG( "SplashScreen" ); //resize(width, height); setFixedSize(width, height); m_pBackground = new QPixmap( Skin::getImagePath() + "/splash/splash.png" ); QFont font; font.setPointSize( 10 ); font.setBold( true ); QPainter p; p.begin( m_pBackground ); p.setFont( font ); p.setPen( QColor( 20, 20, 20 ) ); QString version = QString( "v%1 (%2)" ).arg( H2Core::get_version().c_str() ).arg( __DATE__ ); p.drawText( 5, 5, width - 10, 40, Qt::AlignRight | Qt::AlignTop, version ); // p.drawText( 5, height - 45, width - 10, 40, Qt::AlignHCenter | Qt::AlignBottom, QString( trUtf8( "Modules: %1" ) ).arg( COMPILED_FEATURES ) ); p.end(); setPixmap( *m_pBackground ); // Center on screeen QRect rect( QApplication::desktop()->screenGeometry() ); move( rect.center() - this->rect().center() ); QTimer::singleShot( 5000, this, SLOT( onCloseTimer() ) ); } SplashScreen::~SplashScreen() { //INFOLOG( "~SplashScreen" ); delete m_pBackground; } void SplashScreen::onCloseTimer() { hide(); } hydrogen-0.9.6-beta3/src/gui/src/SplashScreen.h000066400000000000000000000026511211146647700212630ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef SPLASH_SCREEN_H #define SPLASH_SCREEN_H #include #include #include #include #include "HydrogenApp.h" #include /** * Fader and VuMeter widget */ class SplashScreen : public QSplashScreen, public H2Core::Object { H2_OBJECT Q_OBJECT public: SplashScreen(); ~SplashScreen(); private slots: void onCloseTimer(); // virtual void drawContents ( QPainter * painter ); private: QPixmap *m_pBackground; static const uint width = 400; static const uint height = 300; //QTimer m_closeTimer; }; #endif hydrogen-0.9.6-beta3/src/gui/src/UI/000077500000000000000000000000001211146647700170315ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/src/UI/AudioEngineInfoForm_UI.ui000066400000000000000000000312221211146647700236140ustar00rootroot00000000000000 AudioEngineInfoForm_UI 0 0 590 376 Form1 300 80 281 61 Synth 10 30 261 19 0 0 0 0 6 6 ### Playing notes 300 10 281 61 Sampler 10 30 261 21 0 0 0 0 6 6 ### Playing notes 10 10 281 65 0 0 0 0 6 6 Selected instrument Audio engine state ### ### ### Process time 10 90 281 151 Sequencer 11 31 261 111 0 0 0 0 6 6 ### ### Song state Selected pattern Song position Patterns ### ### ### Ticks 10 250 281 81 MIDI input 10 30 261 42 0 0 0 0 6 6 ### ### Connected to Name 300 150 281 151 Audio output 10 30 261 111 0 0 0 0 6 6 ### Realtime frames Buffer size ### ### ### Sample rate Name ### Frames hydrogen-0.9.6-beta3/src/gui/src/UI/Director_UI.ui000066400000000000000000000006711211146647700215440ustar00rootroot00000000000000 Director_UI 0 0 423 377 Dialog hydrogen-0.9.6-beta3/src/gui/src/UI/DrumkitManager_UI.ui000066400000000000000000000251051211146647700227020ustar00rootroot00000000000000 DrumkitManager_UI 0 0 522 421 Form1 5 5 510 401 Load 230 10 271 351 QFrame::StyledPanel QFrame::Raised 10 40 260 35 ### Drumkit author Qt::AlignVCenter false 150 320 110 24 Delete drumkit 10 10 260 35 ### Drumkit name 10 80 260 231 ### Drumkit info Qt::AlignTop true 10 340 211 21 Load drumkit false 10 10 211 331 true Save 10 45 130 24 Author 10 85 130 24 Info 140 45 250 24 10 10 130 24 Drumkit name 400 10 100 24 Save false 140 10 250 24 140 80 251 281 Import 10 10 380 20 Drumkit filename 10 30 380 24 400 30 100 24 Browse false 400 65 100 24 Import false 10 60 381 301 10 80 360 115 <b> Download more drumkits at <br> http://www.hydrogen-music.org </b> Qt::AlignTop 10 10 360 50 ### The drumkit will be installed zncxbmzbxcmznxbcmz Qt::AlignTop true Export 400 30 100 24 Browse false 10 30 380 24 10 10 375 20 Drumkit directory 10 65 380 24 false 400 65 100 24 Export false loadTab_loadDrumkitBtn loadTab_deleteDrumkitBtn saveTab_nameTxt saveTab_authorTxt saveTab_saveBtn importTab_drumkitPathTxt importTab_browseBtn importTab_importBtn exportTab_drumkitPathTxt exportTab_drumkitList exportTab_browseBtn exportTab_exportBtn tabWidget hydrogen-0.9.6-beta3/src/gui/src/UI/ExportSongDialog_UI.ui000066400000000000000000000316161211146647700232240ustar00rootroot00000000000000 ExportSongDialog_UI 0 0 495 336 Export Whole Song to WAV 20 290 461 28 0 Qt::Horizontal QSizePolicy::Expanding 126 16 0 0 0 26 &Close Alt+C Qt::Horizontal QSizePolicy::Expanding 126 16 10 200 471 81 false 10 40 81 25 0 25 &Export Alt+E 100 40 361 23 24 10 0 191 33 20 20 440 24 Export filename 20 50 351 24 false 379 50 101 24 &Browse... Alt+B 20 128 461 31 Samplerate in Hz: Qt::Horizontal 40 20 80 25 22050 44100 48000 96000 192000 Qt::Horizontal 20 20 Qt::Horizontal 40 20 SampleDepth in Bit: Qt::Horizontal 40 20 60 25 8 16 24 32 20 90 461 33 Templates: WAV in CD quality "44,1kHz, 16 bit PCM" WAV in ADAT quality "48 kHz, 16 bit PCM" WAV in better quality "48 kHz, 24 bit PCM" WAV LOFI "22.05kHz, 8 bit PCM WAV best Mixdown quality "96 kHz, 32 bit PCM" AIFF in CD quality "41 kHz, 16 bit PCM" AIFF in ADAT quality "48 kHz, 16 bit PCM" AIFF in better quality "48 kHz, 24 bit PCM" FLAC lossless compressor in good quality "48 kHz" OGG Vorbis loosely compressed in good quality "VBR" 20 165 461 31 200 16777215 0 0 Interpolation: 100 25 Choose type of interpolation methode Linear Cosine Third Cubic Hermite Qt::Horizontal 40 20 Enable tempo changing TimeLine BPM Qt::Horizontal 40 20 Enable use of rubberband batch processor Rubberbad Batch hydrogen-0.9.6-beta3/src/gui/src/UI/LadspaFXSelector_UI.ui000066400000000000000000000340061211146647700231330ustar00rootroot00000000000000 LadspaFXSelector_UI 0 0 659 408 0 0 Form1 10 370 640 24 6 0 Qt::Horizontal QSizePolicy::Expanding 20 0 0 0 0 22 &Cancel Alt+C 0 0 0 22 &OK Alt+O true false Qt::Horizontal QSizePolicy::Expanding 20 0 10 10 201 351 10 10 181 331 true false 1 220 10 221 351 10 10 201 331 true 450 10 201 351 10 20 180 20 12 50 false false false false <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Name:</span></p></body></html> 10 40 180 41 ### fx name 1 Qt::AlignTop true 10 81 180 19 12 50 false false false false <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Label:</span></p></body></html> 10 101 180 20 ### fx label Qt::AlignTop false 10 126 80 20 12 50 false false false false <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Type:</span></p></body></html> 100 126 90 20 12 50 false false false false <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ID:</span></p></body></html> 10 146 80 20 ### fx type Qt::AlignTop 100 146 90 20 ### fx ID Qt::AlignTop 10 169 180 20 12 50 false false false false <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Maker:</span></p></body></html> 10 189 180 61 ### FX maker 1 2 Qt::AlignTop true 10 250 180 20 12 50 false false false false <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Copyright:</span></p></body></html> 10 270 180 71 ### copyright 1 2 3 Qt::AlignTop true m_pCancelBtn clicked() LadspaFXSelector_UI reject() 272 371 149 388 m_pOkBtn clicked() LadspaFXSelector_UI accept() 417 378 509 381 hydrogen-0.9.6-beta3/src/gui/src/UI/PatternFillDialog_UI.ui000066400000000000000000000122421211146647700233320ustar00rootroot00000000000000 Matt Walker PatternFillDialog_UI 0 0 221 121 5 5 0 0 Form 1 true 10 10 201 71 10 10 71 51 0 6 &Fill Alt+F true &Clear Alt+C 90 10 101 51 0 6 From: 50 32767 To: 50 32767 10 90 201 27 0 6 Qt::Horizontal QSizePolicy::Expanding 36 11 Cancel OK true Qt::Horizontal QSizePolicy::Expanding 36 11 fillRB fromText toText cancelBtn okBtn hydrogen-0.9.6-beta3/src/gui/src/UI/PatternPropertiesDialog_UI.ui000066400000000000000000000060051211146647700246000ustar00rootroot00000000000000 PatternPropertiesDialog_UI 0 0 311 274 Form1 10 10 291 253 New Pattern Name Pattern description Pattern category true Qt::Horizontal 37 28 &Cancel Alt+C &OK Alt+O true Qt::Horizontal 37 28 hydrogen-0.9.6-beta3/src/gui/src/UI/PreferencesDialog_UI.ui000066400000000000000000000705141211146647700233550ustar00rootroot00000000000000 PreferencesDialog_UI 0 0 559 440 Form1 10 400 541 31 Qt::Horizontal QSizePolicy::Expanding 184 16 0 0 0 22 &Cancel Alt+C 0 0 0 22 &OK Alt+O true false Qt::Horizontal QSizePolicy::Expanding 183 16 10 10 541 376 0 0 QTabWidget::Rounded 0 &General 10 10 511 31 0 22 &Reopen last used song Alt+R 10 70 511 31 Use lash 10 170 52 21 first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm -200 200 70 170 451 21 Beat counter drift compensation in 1/10 ms 10 200 52 21 second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup -500 500 70 200 451 21 Beat counter start offset in ms 10 270 511 52 Path to the Rubberband command-line utility Qt::Horizontal 40 20 181 0 70 230 451 21 Maximum number of bars 10 230 52 21 second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup 1 800 10 40 511 31 0 22 &Reopen last used playlist Alt+R Audio &System 345 10 186 331 Audio output details ### Qt::AlignTop true 10 10 333 346 Restart output 0 22 100 5000 100 1024 0 22 Sample rate Device 0 22 Buffer size 0 0 0 44100 48000 88200 96000 0 Post-Fader Pre-Fader 0 22 Track output 6 Connect to &Default Output Pair Alt+D create per-instrument outputs Alt+D Qt::Vertical 331 13 0 22 1 512 false 0 22 1 100 0 22 Metronome volume Polyphony Interpolate resampling Linear Cosine Third Cubic Hermite Qt::Vertical 331 13 &Midi System 10 141 521 201 10 10 516 135 Midi driver 0 22 Input 0 22 Channel 0 22 All 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Ignore note-off &Appearance 10 300 521 40 <i>After a font change the application must be restarted.</i> 10 10 521 64 0 22 QFrame::Box Application font Qt::AlignCenter Style 0 22 Select font 10 90 521 66 0 22 Select font 0 22 Meters falloff speed 0 22 Slow Normal Fast 0 22 QFrame::Box 0 Mixer font Qt::AlignCenter 0 10 170 521 66 0 22 QFrame::Box 0 Default interface layout Qt::AlignCenter 0 0 22 Single pane Tabbed MidiTable QTableWidget
    ../src/widgets/midiTable.h
    hydrogen-0.9.6-beta3/src/gui/src/UI/SongPropertiesDialog_UI.ui000066400000000000000000000070351211146647700240750ustar00rootroot00000000000000 SongPropertiesDialog_UI 0 0 290 378 Form1 10 36 268 24 10 72 268 24 0 20 Author 10 96 268 24 10 190 268 24 0 20 Notes 10 12 268 24 0 20 Song name 150 330 90 24 &OK Alt+O true 50 330 90 24 &Cancel Alt+C 10 220 271 101 10 154 268 24 10 130 268 24 0 20 License hydrogen-0.9.6-beta3/src/gui/src/UI/VirtualPatternDialog_UI.ui000066400000000000000000000045461211146647700241020ustar00rootroot00000000000000 VirtualPatternDialog_UI 0 0 400 300 Dialog 20 250 351 41 Qt::Horizontal 40 20 OK true Cancel Qt::Horizontal 40 20 10 0 381 241 QFrame::StyledPanel QFrame::Raised 0 0 381 241 QAbstractItemView::MultiSelection hydrogen-0.9.6-beta3/src/gui/src/UI/about_dialog.ui000066400000000000000000006240701211146647700220320ustar00rootroot00000000000000 AboutDialog_UI 0 0 549 441 About Hydrogen 10 410 531 32 Qt::Horizontal 211 20 100 0 &OK Alt+O Qt::Horizontal 211 20 10 10 531 100 Qt::AlignVCenter 10 120 531 281 0 A&bout 10 10 511 240 QFrame::Box QFrame::Sunken ### Qt::RichText Qt::AlignTop &Authors 10 10 511 241 true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> &License 10 10 511 241 true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> layoutWidget logoLabel TabWidget3 aboutTxt hydrogen-0.9.6-beta3/src/gui/src/UndoActions.h000066400000000000000000001074651211146647700211300ustar00rootroot00000000000000#ifndef UNDOACTIONS_H #define UNDOACTIONS_H #include #include #include #include #include #include "HydrogenApp.h" #include "SongEditor/SongEditor.h" #include "SongEditor/SongEditorPanel.h" #include "PatternFillDialog.h" #include "PatternEditor/NotePropertiesRuler.h" #include "PatternEditor/DrumPatternEditor.h" #include "PatternEditor/PatternEditorPanel.h" #include "PatternEditor/NotePropertiesRuler.h" //===================================================================================================================================== //song editor commands class SE_addPatternAction : public QUndoCommand { public: SE_addPatternAction( int nColumn, int nRow, unsigned nColumnIndex ){ setText( QString( "Add Pattern ( %1, %2 )" ).arg( nColumn ).arg( nRow ) ); __nColumn = nColumn; __nRow = nRow; __nColumnIndex = nColumnIndex; } virtual void undo() { //qDebug() << "add Pattern Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditor()->deletePattern( __nColumn, __nRow , __nColumnIndex ); } virtual void redo() { //qDebug() << "add Pattern Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditor()->addPattern( __nColumn, __nRow ); } private: int __nColumn; int __nRow; unsigned __nColumnIndex; }; class SE_deletePatternAction : public QUndoCommand { public: SE_deletePatternAction( int nColumn, int nRow, unsigned nColumnIndex ){ setText( QString( "Delete Pattern ( %1, %2 )" ).arg( nColumn ).arg( nRow ) ); __nColumn = nColumn; __nRow = nRow; __nColumnIndex = nColumnIndex; } virtual void undo() { //qDebug() << "Delete pattern Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditor()->addPattern( __nColumn, __nRow ); } virtual void redo() { //qDebug() << "Delete pattern Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditor()->deletePattern( __nColumn, __nRow, __nColumnIndex ); } private: int __nColumn; int __nRow; unsigned __nColumnIndex; }; class SE_movePatternListItemAction : public QUndoCommand { public: SE_movePatternListItemAction( int nSourcePattern , int nTargetPattern ){ setText( QString( "Move pattern list item ( %1, %2 )" ).arg( nSourcePattern ).arg( nTargetPattern ) ); __nSourcePattern = nSourcePattern; __nTargetPattern = nTargetPattern; } virtual void undo() { //qDebug() << "Move Pattern List Item Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditorPatternList()->movePatternLine( __nTargetPattern, __nSourcePattern ); } virtual void redo() { //qDebug() << "Move Pattern List Item redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditorPatternList()->movePatternLine( __nSourcePattern , __nTargetPattern ); } private: int __nSourcePattern; int __nTargetPattern; }; class SE_deletePatternSequenceAction : public QUndoCommand { public: SE_deletePatternSequenceAction( QString pFilename ){ setText( QString( "Delete complete pattern-sequence" ) ); __pFilename = pFilename ; } virtual void undo() { //qDebug() << "Delete complete pattern-sequence undo"; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->restoreGroupVector( __pFilename ); } virtual void redo() { //qDebug() << "Delete complete pattern-sequence redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditor()->clearThePatternSequenseVector( __pFilename ); } private: QString __pFilename; }; class SE_deletePatternFromListAction : public QUndoCommand { public: SE_deletePatternFromListAction( QString patternFilename , QString sequenceFileName, int patternPosition ){ setText( QString( "Delete pattern from list" ) ); __patternFilename = patternFilename; __sequenceFileName = sequenceFileName; __patternPosition = patternPosition; } virtual void undo() { //qDebug() << "Delete pattern from list undo"; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditorPatternList()->restoreDeletedPatternsFromList( __patternFilename, __sequenceFileName, __patternPosition ); h2app->getSongEditorPanel()->restoreGroupVector( __sequenceFileName ); h2app->getSongEditorPanel()->getSongEditor()->updateEditorandSetTrue(); } virtual void redo() { //qDebug() << "Delete pattern from list redo" ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditorPatternList()->deletePatternFromList( __patternFilename, __sequenceFileName, __patternPosition ); } private: QString __patternFilename; QString __sequenceFileName; int __patternPosition; }; class SE_modifyPatternPropertiesAction : public QUndoCommand { public: SE_modifyPatternPropertiesAction( QString oldPatternName ,QString oldPatternInfo, QString oldPatternCategory, QString newPatternName , QString newPatternInfo, QString newPatternCategory, int patternNr ){ setText( QString( "Modify pattern properties" ) ); __oldPatternName = oldPatternName; __oldPatternCategory = oldPatternCategory; __oldPatternInfo = oldPatternInfo; __newPatternName = newPatternName; __newPatternInfo = newPatternInfo; __newPatternCategory = newPatternCategory; __patternNr = patternNr; } virtual void undo() { //qDebug() << "Modify pattern properties undo"; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditorPatternList()->revertPatternPropertiesDialogSettings( __oldPatternName, __oldPatternInfo, __oldPatternCategory, __patternNr ); } virtual void redo() { //qDebug() << "Modify pattern properties redo" ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditorPatternList()->acceptPatternPropertiesDialogSettings( __newPatternName, __newPatternInfo, __newPatternCategory, __patternNr ); } private: QString __oldPatternName; QString __oldPatternInfo; QString __oldPatternCategory; QString __newPatternName; QString __newPatternInfo; QString __newPatternCategory; int __patternNr; }; class SE_copyPatternAction : public QUndoCommand { public: SE_copyPatternAction( QString patternFilename, int patternPosition ){ setText( QString( "Copy pattern" ) ); __patternFilename = patternFilename; __patternPosition = patternPosition; } virtual void undo() { //qDebug() << "copy pattern undo"; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->revertaddEmptyPattern( __patternPosition ); } virtual void redo() { //qDebug() << "copy pattern redo" ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditorPatternList()->patternPopup_copyAction( __patternFilename, __patternPosition ); } private: QString __patternFilename; int __patternPosition; }; class SE_addEmptyPatternAction : public QUndoCommand { public: SE_addEmptyPatternAction( QString newPatternName, QString newPatternCategory, int patternPosition ) { setText( QString( "Add pattern" ) ); __newPatternName = newPatternName; __newPatternCategory = newPatternCategory; __patternPosition = patternPosition; } virtual void undo() { //qDebug() << "Add pattern undo"; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->revertaddEmptyPattern( __patternPosition ); } virtual void redo() { //qDebug() << "Add pattern redo" ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->addEmptyPattern( __newPatternName ,__newPatternCategory, __patternPosition ); } private: QString __newPatternName; QString __newPatternCategory; int __patternPosition; }; class SE_loadPatternAction : public QUndoCommand { public: SE_loadPatternAction( QString patternName, QString oldPatternName, QString sequenceFileName, int patternPosition, bool dragFromList){ setText( QString( "Load/drag pattern" ) ); __patternName = patternName; __oldPatternName = oldPatternName; __sequenceFileName = sequenceFileName; __patternPosition = patternPosition; __dragFromList = dragFromList; } virtual void undo() { //qDebug() << "Load/drag pattern undo" << __dragFromList; HydrogenApp* h2app = HydrogenApp::get_instance(); if( __dragFromList ){ h2app->getSongEditorPanel()->getSongEditorPatternList()->deletePatternFromList( __oldPatternName, __sequenceFileName, __patternPosition ); }else { h2app->getSongEditorPanel()->getSongEditorPatternList()->restoreDeletedPatternsFromList( __oldPatternName, __sequenceFileName, __patternPosition ); h2app->getSongEditorPanel()->revertaddEmptyPattern( __patternPosition +1 ); } h2app->getSongEditorPanel()->restoreGroupVector( __sequenceFileName ); h2app->getSongEditorPanel()->getSongEditor()->updateEditorandSetTrue(); } virtual void redo() { //qDebug() << "Load/drag pattern redo" << __dragFromList << __patternPosition; HydrogenApp* h2app = HydrogenApp::get_instance(); if(!__dragFromList){ h2app->getSongEditorPanel()->getSongEditorPatternList()->deletePatternFromList( __oldPatternName, __sequenceFileName, __patternPosition ); } h2app->getSongEditorPanel()->getSongEditorPatternList()->loadPatternAction( __patternName, __patternPosition ); } private: QString __patternName; QString __oldPatternName; QString __sequenceFileName; int __patternPosition; bool __dragFromList; }; class SE_fillRangePatternAction : public QUndoCommand { public: SE_fillRangePatternAction( FillRange* pRange, int nPattern ){ setText( QString( "Fill/remove range of pattern" ) ); __pRange = pRange; __from = pRange->fromVal; __to = pRange->toVal; __bInsert = pRange->bInsert; __nPattern = nPattern; } virtual void undo() { //qDebug() << "fill/remove range of undo"; HydrogenApp* h2app = HydrogenApp::get_instance(); bool insert; if( __bInsert ){ insert = false; }else { insert = true; } __pRange->bInsert = insert; __pRange->fromVal = __from; __pRange->toVal = __to; h2app->getSongEditorPanel()->getSongEditorPatternList()->fillRangeWithPattern( __pRange, __nPattern); } virtual void redo() { //qDebug() << "fill/remove range of redo"; HydrogenApp* h2app = HydrogenApp::get_instance(); __pRange->bInsert = __bInsert; __pRange->fromVal = __from; __pRange->toVal = __to; h2app->getSongEditorPanel()->getSongEditorPatternList()->fillRangeWithPattern( __pRange, __nPattern); } private: FillRange* __pRange; int __from; int __to; bool __bInsert; int __nPattern; }; class SE_movePatternCellAction : public QUndoCommand { public: SE_movePatternCellAction( std::vector movingCells, std::vector selectedCells, std::vector existingCells, bool bIsCtrlPressed ){ setText( QString( "Move/copy selected cells" ) ); __selectedCells = selectedCells; __movingCells = movingCells; __existingCells = existingCells; __bIsCtrlPressed = bIsCtrlPressed; } virtual void undo() { //qDebug() << "move/copy selected cells undo"; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditor()->movePatternCellAction( __selectedCells, __movingCells, __existingCells, __bIsCtrlPressed, true ); } virtual void redo() { //qDebug() << "move/copy selected cells redo"; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditor()->movePatternCellAction( __movingCells, __selectedCells, __existingCells, __bIsCtrlPressed, false ); } private: std::vector __selectedCells; std::vector __movingCells; std::vector __existingCells; bool __bIsCtrlPressed; }; class SE_editTimeLineAction : public QUndoCommand { public: SE_editTimeLineAction( int newPosition, float oldBpm, float newBpm ){ setText( QString( "Edit timeline tempo" ) ); __newPosition = newPosition; __oldBpm = oldBpm; __newBpm = newBpm; } virtual void undo() { //qDebug() << "edit timeline tempo undo"; HydrogenApp* h2app = HydrogenApp::get_instance(); if(__oldBpm >-1 ){ h2app->getSongEditorPanel()->getSongEditorPositionRuler()->editTimeLineAction( __newPosition, __oldBpm ); }else { h2app->getSongEditorPanel()->getSongEditorPositionRuler()->deleteTimeLinePosition( __newPosition ); } } virtual void redo() { //qDebug() << "edit timeline tempo redo"; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditorPositionRuler()->editTimeLineAction( __newPosition, __newBpm ); } private: int __newPosition; float __oldBpm; float __newBpm; }; //~song editor commands //===================================================================================================================================== //time line commands class SE_deleteTimeLineAction : public QUndoCommand { public: SE_deleteTimeLineAction( int newPosition, float oldBpm ){ setText( QString( "Delete timeline tempo" ) ); __newPosition = newPosition; __oldBpm = oldBpm; } virtual void undo() { //qDebug() << "delete timeline tempo undo"; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditorPositionRuler()->editTimeLineAction( __newPosition, __oldBpm ); } virtual void redo() { //qDebug() << "delete timeline tempo redo"; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getSongEditorPanel()->getSongEditorPositionRuler()->deleteTimeLinePosition( __newPosition ); } private: int __newPosition; float __oldBpm; float __newBpm; }; class SE_editTagAction : public QUndoCommand { public: SE_editTagAction( QString text, QString oldText, int position ){ setText( "Edit timeline tag" ); __text = text; __oldText = oldText; __position = position; } virtual void undo() { //qDebug() << "edit timeline tag undo"; HydrogenApp* h2app = HydrogenApp::get_instance(); if( __oldText != "" ){ h2app->getSongEditorPanel()->getSongEditorPositionRuler()->editTagAction( __oldText, __position , __text ); }else { h2app->getSongEditorPanel()->getSongEditorPositionRuler()->deleteTagAction( __text, __position ); } } virtual void redo() { //qDebug() << "edit timeline tag redo"; HydrogenApp* h2app = HydrogenApp::get_instance(); if( __text == "" ){ h2app->getSongEditorPanel()->getSongEditorPositionRuler()->deleteTagAction( __oldText, __position ); }else { h2app->getSongEditorPanel()->getSongEditorPositionRuler()->editTagAction( __text, __position, __oldText ); } } private: QString __text; QString __oldText; int __position; }; //~time line commands //===================================================================================================================================== //pattern editor commands class SE_addNoteAction : public QUndoCommand { public: SE_addNoteAction( int nColumn, int nRow, int selectedPatternNumber, int oldLength, float oldVelocity, float oldPan_L, float oldPan_R, float oldLeadLag, int oldNoteKeyVal, int oldOctaveKeyVal, bool noteExisted, bool listen, bool isMidi, bool isInstrumentMode){ if( noteExisted ){ setText( QString( "Delete note ( %1, %2)" ).arg( nColumn ).arg( nRow ) ); } else { setText( QString( "Add note ( %1, %2)" ).arg( nColumn ).arg( nRow ) ); } __nColumn = nColumn; __nRow = nRow; __selectedPatternNumber = selectedPatternNumber; __oldLength = oldLength; __oldVelocity = oldVelocity; __oldPan_L = oldPan_L; __oldPan_R = oldPan_R; __oldLeadLag = oldLeadLag; __oldNoteKeyVal = oldNoteKeyVal; __oldOctaveKeyVal = oldOctaveKeyVal; __listen = listen; __isMidi = isMidi; __isInstrumentMode = isInstrumentMode; } virtual void undo() { //qDebug() << "Add note Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); __isMidi = false; // undo is never a midi event. h2app->getPatternEditorPanel()->getDrumPatternEditor()->addOrDeleteNoteAction( __nColumn, __nRow, __selectedPatternNumber, __oldLength, __oldVelocity, __oldPan_L, __oldPan_R, __oldLeadLag, __oldNoteKeyVal, __oldOctaveKeyVal, __listen, __isMidi, __isInstrumentMode, false ); } virtual void redo() { //qDebug() << "Add Note Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->addOrDeleteNoteAction( __nColumn, __nRow, __selectedPatternNumber, __oldLength, __oldVelocity, __oldPan_L, __oldPan_R, __oldLeadLag, __oldNoteKeyVal, __oldOctaveKeyVal, __listen, __isMidi, __isInstrumentMode, false ); } private: int __nColumn; int __nRow; int __selectedPatternNumber; int __oldLength; float __oldVelocity; float __oldPan_L; float __oldPan_R; float __oldLeadLag; int __oldNoteKeyVal; int __oldOctaveKeyVal; bool __listen; bool __isMidi; bool __isInstrumentMode; }; class SE_addNoteRightClickAction : public QUndoCommand { public: SE_addNoteRightClickAction( int nColumn, int nRow, int selectedPatternNumber ){ setText( QString( "Add pattern editor NOTE_OFF note ( %1, %2 )" ).arg( nColumn ).arg( nRow ) ); __nColumn = nColumn; __nRow = nRow; __selectedPatternNumber = selectedPatternNumber; } virtual void undo() { //qDebug() << "Add off note Note Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->addOrDeleteNoteAction( __nColumn, __nRow, __selectedPatternNumber, -1, 0.8f, 0.5f, 0.5f, 0.0, 0, 0, false, false, false, true); } virtual void redo() { //qDebug() << "Add off note Note Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->addOrDeleteNoteAction( __nColumn, __nRow, __selectedPatternNumber, -1, 0.8f, 0.5f, 0.5f, 0.0, 0, 0, false, false, false, true); } private: int __nColumn; int __nRow; int __selectedPatternNumber; }; class SE_editNoteLenghtAction : public QUndoCommand { public: SE_editNoteLenghtAction( int nColumn, int nRealColumn, int row, int length, int oldLength, int selectedPatternNumber ){ setText( QString( "Change note length" ) ); __nColumn = nColumn; __nRealColumn = nRealColumn; __row = row; __length = length; __oldLength = oldLength; __selectedPatternNumber = selectedPatternNumber; } virtual void undo() { //qDebug() << "Change note length Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->editNoteLengthAction( __nColumn, __nRealColumn, __row, __oldLength, __selectedPatternNumber ); } virtual void redo() { //qDebug() << "Change note length Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->editNoteLengthAction( __nColumn, __nRealColumn, __row, __length, __selectedPatternNumber ); } private: int __nColumn; int __nRealColumn; int __row; int __oldLength; int __length; int __selectedPatternNumber; }; class SE_clearNotesPatternEditorAction : public QUndoCommand { public: SE_clearNotesPatternEditorAction( std::list< H2Core::Note* > noteList, int nSelectedInstrument, int selectedPatternNumber ){ setText( QString( "Clear notes" ) ); std::list < H2Core::Note *>::iterator pos; for ( pos = noteList.begin(); pos != noteList.end(); ++pos){ H2Core::Note *pNote; pNote = new H2Core::Note(*pos); assert( pNote ); __noteList.push_back( pNote ); } __nSelectedInstrument = nSelectedInstrument; __selectedPatternNumber = selectedPatternNumber; } ~SE_clearNotesPatternEditorAction(){ //qDebug() << "delete left notes "; while ( __noteList.size() ) { delete __noteList.front(); __noteList.pop_front(); } } virtual void undo() { //qDebug() << "clear note sequense Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionClearNotesUndoAction( __noteList, __nSelectedInstrument, __selectedPatternNumber ); } virtual void redo() { //qDebug() << "clear note sequense Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionClearNotesRedoAction( __nSelectedInstrument, __selectedPatternNumber ); } private: std::list< H2Core::Note* > __noteList; int __nSelectedInstrument; int __selectedPatternNumber; }; class SE_fillNotesRightClickAction : public QUndoCommand { public: SE_fillNotesRightClickAction( QStringList notePositions, int nSelectedInstrument, int selectedPatternNumber ){ setText( QString( "Fill notes" ) ); __notePositions = notePositions; __nSelectedInstrument= nSelectedInstrument; __selectedPatternNumber = selectedPatternNumber; } virtual void undo() { //qDebug() << "fill notes Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionFillNotesUndoAction( __notePositions, __nSelectedInstrument, __selectedPatternNumber ); } virtual void redo() { //qDebug() << "fill notes Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionFillNotesRedoAction( __notePositions, __nSelectedInstrument, __selectedPatternNumber ); } private: QStringList __notePositions; int __nSelectedInstrument; int __selectedPatternNumber; }; class SE_randomVelocityRightClickAction : public QUndoCommand { public: SE_randomVelocityRightClickAction( QStringList noteVeloValue, QStringList oldNoteVeloValue, int nSelectedInstrument, int selectedPatternNumber ){ setText( QString( "Random velocity" ) ); __noteVeloValue = noteVeloValue; __oldNoteVeloValue = oldNoteVeloValue; __nSelectedInstrument= nSelectedInstrument; __selectedPatternNumber = selectedPatternNumber; } virtual void undo() { //qDebug() << "Random velocity Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionRandomVelocityAction( __oldNoteVeloValue, __nSelectedInstrument, __selectedPatternNumber ); } virtual void redo() { //qDebug() << "Random velocity Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionRandomVelocityAction( __noteVeloValue, __nSelectedInstrument, __selectedPatternNumber ); } private: QStringList __noteVeloValue; QStringList __oldNoteVeloValue; int __nSelectedInstrument; int __selectedPatternNumber; }; class SE_moveInstrumentAction : public QUndoCommand { public: SE_moveInstrumentAction( int nSourceInstrument, int nTargetInstrument ){ setText( QString( "Move instrument" ) ); __nSourceInstrument = nSourceInstrument; __nTargetInstrument = nTargetInstrument; } virtual void undo() { //qDebug() << "move Instrument Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionMoveInstrumentAction( __nTargetInstrument, __nSourceInstrument ); } virtual void redo() { //qDebug() << "move Instrument Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionMoveInstrumentAction( __nSourceInstrument, __nTargetInstrument ); } private: int __nSourceInstrument; int __nTargetInstrument; }; class SE_dragInstrumentAction : public QUndoCommand { public: SE_dragInstrumentAction( QString sDrumkitName, QString sInstrumentName, int nTargetInstrument ){ setText( QString( "Drop instrument" ) ); __sDrumkitName = sDrumkitName; __sInstrumentName = sInstrumentName; __nTargetInstrument = nTargetInstrument; } virtual void undo() { //qDebug() << "drop Instrument Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionDropInstrumentUndoAction( __nTargetInstrument ); } virtual void redo() { //qDebug() << "drop Instrument Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionDropInstrumentRedoAction( __sDrumkitName, __sInstrumentName, __nTargetInstrument ); } private: QString __sDrumkitName; QString __sInstrumentName; int __nTargetInstrument; }; class SE_deleteInstrumentAction : public QUndoCommand { public: SE_deleteInstrumentAction( std::list< H2Core::Note* > noteList, QString drumkitName, QString instrumentName, int nSelectedInstrument ){ setText( QString( "Delete instrument " ) ); std::list < H2Core::Note *>::iterator pos; for ( pos = noteList.begin(); pos != noteList.end(); ++pos){ H2Core::Note *pNote; pNote = new H2Core::Note(*pos); assert( pNote ); __noteList.push_back( pNote ); } __drumkitName = drumkitName; __instrumentName = instrumentName; __nSelectedInstrument = nSelectedInstrument; } ~SE_deleteInstrumentAction(){ //qDebug() << "delete left notes "; while ( __noteList.size() ) { delete __noteList.front(); __noteList.pop_front(); } } virtual void undo() { //qDebug() << "delete Instrument Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionDeleteInstrumentUndoAction( __noteList, __nSelectedInstrument, __instrumentName, __drumkitName ); } virtual void redo() { //qDebug() << "delete Instrument Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); //delete an instrument from list h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionDropInstrumentUndoAction( __nSelectedInstrument ); } private: std::list< H2Core::Note* > __noteList; QString __instrumentName; QString __drumkitName; int __nSelectedInstrument; }; class SE_mainMenuAddInstrumentAction : public QUndoCommand { public: SE_mainMenuAddInstrumentAction(){ setText( QString( "Drop instrument" ) ); } virtual void undo() { //qDebug() << "drop Instrument Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionAddEmptyInstrumentUndo(); } virtual void redo() { //qDebug() << "drop Instrument Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionAddEmptyInstrumentRedo(); } private: }; //~pattern editor commands //===================================================================================================================================== //piano roll editor commands class SE_addNotePianoRollAction : public QUndoCommand { public: SE_addNotePianoRollAction( int nColumn, int pressedLine, int selectedPatternNumber, int nSelectedInstrumentnumber, int oldLength, float oldVelocity, float oldPan_L, float oldPan_R, float oldLeadLag, int oldNoteKeyVal, int oldOctaveKeyVal ){ setText( QString( "Add piano roll note ( %1, %2 )" ).arg( nColumn ).arg( pressedLine ) ); __nColumn = nColumn; __pressedLine = pressedLine; __selectedPatternNumber = selectedPatternNumber; __nSelectedInstrumentnumber = nSelectedInstrumentnumber; __oldLength = oldLength; __oldVelocity = oldVelocity; __oldPan_L = oldPan_L; __oldPan_R = oldPan_R; __oldLeadLag = oldLeadLag; __oldNoteKeyVal = oldNoteKeyVal; __oldOctaveKeyVal = oldOctaveKeyVal; } virtual void undo() { //qDebug() << "Add Piano Roll note Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getPianoRollEditor()->addOrDeleteNoteAction( __nColumn, __pressedLine, __selectedPatternNumber, __nSelectedInstrumentnumber, __oldLength, __oldVelocity, __oldPan_L, __oldPan_R, __oldLeadLag, __oldNoteKeyVal, __oldOctaveKeyVal, false ); } virtual void redo() { //qDebug() << "Add Piano Roll Note Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getPianoRollEditor()->addOrDeleteNoteAction( __nColumn, __pressedLine, __selectedPatternNumber, __nSelectedInstrumentnumber, __oldLength, __oldVelocity, __oldPan_L, __oldPan_R, __oldLeadLag, __oldNoteKeyVal, __oldOctaveKeyVal, false ); } private: int __nColumn; int __pressedLine; int __selectedPatternNumber; int __nSelectedInstrumentnumber; int __oldLength; float __oldVelocity; float __oldPan_L; float __oldPan_R; float __oldLeadLag; int __oldNoteKeyVal; int __oldOctaveKeyVal; }; class SE_addPianoRollNoteOffAction : public QUndoCommand { public: SE_addPianoRollNoteOffAction( int nColumn, int pressedLine, int selectedPatternNumber, int nSelectedInstrumentnumber ){ setText( QString( "Add piano roll NOTE_OFF note ( %1, %2 )" ).arg( nColumn ).arg( pressedLine ) ); __nColumn = nColumn; __pressedLine = pressedLine; __selectedPatternNumber = selectedPatternNumber; __nSelectedInstrumentnumber = nSelectedInstrumentnumber; } virtual void undo() { //qDebug() << "Add off note Note Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getPianoRollEditor()->addOrDeleteNoteAction( __nColumn, __pressedLine, __selectedPatternNumber, __nSelectedInstrumentnumber, -1, 0.8f, 0.5f, 0.5f, 0.0, 0, 0 , true); } virtual void redo() { //qDebug() << "Add off note Note Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getPianoRollEditor()->addOrDeleteNoteAction( __nColumn, __pressedLine, __selectedPatternNumber, __nSelectedInstrumentnumber, -1, 0.8f, 0.5f, 0.5f, 0.0, 0, 0, true); } private: int __nColumn; int __pressedLine; int __selectedPatternNumber; int __nSelectedInstrumentnumber; }; class SE_editPianoRollNoteLengthAction : public QUndoCommand { public: SE_editPianoRollNoteLengthAction( int nColumn, int nRealColumn, int length, int oldLength, int selectedPatternNumber, int nSelectedInstrumentnumber, int pressedLine){ setText( QString( "Change piano roll note length " ) ); __nColumn = nColumn; __nRealColumn = nRealColumn; __length = length; __oldLength = oldLength; __selectedPatternNumber = selectedPatternNumber; __nSelectedInstrumentnumber = nSelectedInstrumentnumber; __pressedLine = pressedLine; } virtual void undo() { //qDebug() << "Change note length Piano Roll Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getPianoRollEditor()->editNoteLengthAction( __nColumn, __nRealColumn, __oldLength, __selectedPatternNumber, __nSelectedInstrumentnumber, __pressedLine); } virtual void redo() { //qDebug() << "Change note length Piano RollRedo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getPianoRollEditor()->editNoteLengthAction( __nColumn, __nRealColumn, __length, __selectedPatternNumber, __nSelectedInstrumentnumber, __pressedLine ); } private: int __nColumn; int __nRealColumn; int __oldLength; int __length; int __selectedPatternNumber; int __nSelectedInstrumentnumber; int __pressedLine; }; class SE_editNotePropertiesPianoRollAction : public QUndoCommand { public: SE_editNotePropertiesPianoRollAction( int nColumn, int nRealColumn, int selectedPatternNumber, int selectedInstrumentnumber, float velocity, float oldVelocity, float pan_L, float oldPan_L, float pan_R, float oldPan_R, float leadLag, float oldLeadLag, int pressedLine ){ setText( QString( "Change note properties piano roll" ) ); __nColumn = nColumn; __nRealColumn = nRealColumn; __selectedPatternNumber = selectedPatternNumber; __nSelectedInstrumentnumber = selectedInstrumentnumber; __velocity = velocity; __oldVelocity = oldVelocity; __pan_L = pan_L; __oldPan_L = oldPan_L; __pan_R = pan_R; __oldPan_R = oldPan_R; __leadLag = leadLag; __oldLeadLag = oldLeadLag; __pressedLine = pressedLine; } virtual void undo() { //qDebug() << "Change Note properties Piano Roll Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getPianoRollEditor()->editNotePropertiesAction( __nColumn, __nRealColumn, __selectedPatternNumber, __nSelectedInstrumentnumber, __oldVelocity, __oldPan_L, __oldPan_R, __oldLeadLag, __pressedLine ); } virtual void redo() { //qDebug() << "Change Note properties Piano RollRedo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getPianoRollEditor()->editNotePropertiesAction( __nColumn, __nRealColumn, __selectedPatternNumber, __nSelectedInstrumentnumber, __velocity, __pan_L, __pan_R, __leadLag, __pressedLine ); } private: int __nColumn; int __nRealColumn; int __selectedPatternNumber; int __nSelectedInstrumentnumber; float __velocity; float __oldVelocity; float __pan_L; float __oldPan_L; float __pan_R; float __oldPan_R; float __leadLag; float __oldLeadLag; int __pressedLine; }; //~piano roll editor commands //===================================================================================================================================== //Note Properties Ruler commands class SE_editNotePropertiesVolumeAction : public QUndoCommand { public: SE_editNotePropertiesVolumeAction( int undoColumn, QString mode, int nSelectedPatternNumber, int nSelectedInstrument, float velocity, float oldVelocity, float pan_L, float oldPan_L, float pan_R, float oldPan_R, float leadLag, float oldLeadLag, int noteKeyVal, int oldNoteKeyVal, int octaveKeyVal, int oldOctaveKeyVal) { setText( QString( "Edit note property" ) ); __undoColumn = undoColumn; __mode = mode; __nSelectedPatternNumber = nSelectedPatternNumber; __nSelectedInstrument = nSelectedInstrument; __velocity = velocity; __oldVelocity = oldVelocity; __pan_L = pan_L; __oldPan_L = oldPan_L; __pan_R = pan_R; __oldPan_R = oldPan_R; __leadLag = leadLag; __oldLeadLag = oldLeadLag; __noteKeyVal = noteKeyVal; __oldNoteKeyVal = oldNoteKeyVal; __octaveKeyVal = octaveKeyVal; __oldOctaveKeyVal = oldOctaveKeyVal; } virtual void undo() { //qDebug() << "edit note property Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->undoRedoAction( __undoColumn, __mode, __nSelectedPatternNumber, __nSelectedInstrument, __oldVelocity, __oldPan_L, __oldPan_R, __oldLeadLag, __oldNoteKeyVal, __oldOctaveKeyVal ); } virtual void redo() { //qDebug() << "edit note property Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->undoRedoAction( __undoColumn, __mode, __nSelectedPatternNumber, __nSelectedInstrument, __velocity, __pan_L, __pan_R, __leadLag, __noteKeyVal, __octaveKeyVal ); } private: int __undoColumn; QString __mode; int __nSelectedPatternNumber; int __nSelectedInstrument; float __velocity; float __oldVelocity; float __pan_L; float __oldPan_L; float __pan_R; float __oldPan_R; float __leadLag; float __oldLeadLag; int __noteKeyVal; int __oldNoteKeyVal; int __octaveKeyVal; int __oldOctaveKeyVal; int __selectedPatternNumber; int __nSelectedInstrumentnumber; }; //~Note Properties Ruler commands //===================================================================================================================================== #endif // UNDOACTIONS_H hydrogen-0.9.6-beta3/src/gui/src/VirtualPatternDialog.cpp000066400000000000000000000030141211146647700233220ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * */ #include "VirtualPatternDialog.h" #include #include #include #include #include "Skin.h" const char* VirtualPatternDialog::__class_name = "VirtualPatternDialog"; VirtualPatternDialog::VirtualPatternDialog(QWidget* parent) : QDialog(parent) , Object( __class_name ) { setupUi( this ); setFixedSize( width(), height() ); setWindowTitle( trUtf8( "Select virtual pattern" ) ); } VirtualPatternDialog::~VirtualPatternDialog() { } void VirtualPatternDialog::on_cancelBtn_clicked() { reject(); } void VirtualPatternDialog::on_okBtn_clicked() { accept(); } hydrogen-0.9.6-beta3/src/gui/src/VirtualPatternDialog.h000066400000000000000000000026051211146647700227740ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef VIRTUAL_PATTERN_DIALOG_H #define VIRTUAL_PATTERN_DIALOG_H #include #include "ui_VirtualPatternDialog_UI.h" #include namespace H2Core { class Pattern; class PatternList; } /// /// Virtual Pattern Dialog /// class VirtualPatternDialog : public QDialog, public Ui_VirtualPatternDialog_UI, public H2Core::Object { H2_OBJECT Q_OBJECT public: VirtualPatternDialog( QWidget* parent ); ~VirtualPatternDialog(); private slots: void on_cancelBtn_clicked(); void on_okBtn_clicked(); private: }; #endif hydrogen-0.9.6-beta3/src/gui/src/main.cpp000066400000000000000000000375041211146647700201550ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include "SplashScreen.h" #include "HydrogenApp.h" #include "MainForm.h" #include "PlaylistEditor/PlaylistDialog.h" #ifdef H2CORE_HAVE_LASH #include #endif #ifdef H2CORE_HAVE_JACKSESSION #include #endif #include #include #include #include #include #include #include #include #include #include #include using namespace std; void showInfo(); void showUsage(); #define HAS_ARG 1 static struct option long_opts[] = { {"data", required_argument, NULL, 'P'}, {"driver", required_argument, NULL, 'd'}, {"song", required_argument, NULL, 's'}, #ifdef H2CORE_HAVE_JACKSESSION {"jacksessionid", required_argument, NULL, 'S'}, #endif {"playlist", required_argument, NULL, 'p'}, {"version", 0, NULL, 'v'}, {"nosplash", 0, NULL, 'n'}, {"verbose", optional_argument, NULL, 'V'}, {"help", 0, NULL, 'h'}, {"install", required_argument, NULL, 'i'}, {"drumkit", required_argument, NULL, 'k'}, {0, 0, 0, 0}, }; #define NELEM(a) ( sizeof(a)/sizeof((a)[0]) ) // // Set the palette used in the application // void setPalette( QApplication *pQApp ) { // create the default palette QPalette defaultPalette; // A general background color. defaultPalette.setColor( QPalette::Background, QColor( 58, 62, 72 ) ); // A general foreground color. defaultPalette.setColor( QPalette::Foreground, QColor( 255, 255, 255 ) ); // Used as the background color for text entry widgets; usually white or another light color. defaultPalette.setColor( QPalette::Base, QColor( 88, 94, 112 ) ); // Used as the alternate background color in views with alternating row colors defaultPalette.setColor( QPalette::AlternateBase, QColor( 138, 144, 162 ) ); // The foreground color used with Base. This is usually the same as the Foreground, in which case it must provide good contrast with Background and Base. defaultPalette.setColor( QPalette::Text, QColor( 255, 255, 255 ) ); // The general button background color. This background can be different from Background as some styles require a different background color for buttons. defaultPalette.setColor( QPalette::Button, QColor( 88, 94, 112 ) ); // A foreground color used with the Button color. defaultPalette.setColor( QPalette::ButtonText, QColor( 255, 255, 255 ) ); // Lighter than Button color. defaultPalette.setColor( QPalette::Light, QColor( 138, 144, 162 ) ); // Between Button and Light. defaultPalette.setColor( QPalette::Midlight, QColor( 128, 134, 152 ) ); // Darker than Button. defaultPalette.setColor( QPalette::Dark, QColor( 58, 62, 72 ) ); // Between Button and Dark. defaultPalette.setColor( QPalette::Mid, QColor( 81, 86, 99 ) ); // A very dark color. By default, the shadow color is Qt::black. defaultPalette.setColor( QPalette::Shadow, QColor( 255, 255, 255 ) ); // A color to indicate a selected item or the current item. defaultPalette.setColor( QPalette::Highlight, QColor( 116, 124, 149 ) ); // A text color that contrasts with Highlight. defaultPalette.setColor( QPalette::HighlightedText, QColor( 255, 255, 255 ) ); pQApp->setPalette( defaultPalette ); pQApp->setStyleSheet("QToolTip {padding: 1px; border: 1px solid rgb(199, 202, 204); background-color: rgb(227, 243, 252); color: rgb(64, 64, 66);}"); } static int setup_unix_signal_handlers() { #ifndef WIN32 struct sigaction usr1; usr1.sa_handler = MainForm::usr1SignalHandler; sigemptyset(&usr1.sa_mask); usr1.sa_flags = 0; usr1.sa_flags |= SA_RESTART; if (sigaction(SIGUSR1, &usr1, 0) > 0) return 1; return 0; #endif } int main(int argc, char *argv[]) { try { // Options... char *cp; struct option *op; char opts[NELEM(long_opts) * 3 + 1]; // Build up the short option QString cp = opts; for (op = long_opts; op < &long_opts[NELEM(long_opts)]; op++) { *cp++ = op->val; if (op->has_arg) *cp++ = ':'; if (op->has_arg == optional_argument ) *cp++ = ':'; // gets another one } QApplication* pQApp = new QApplication(argc, argv); // Deal with the options QString songFilename; #ifdef H2CORE_HAVE_JACKSESSION QString sessionId; #endif QString playlistFilename; bool bNoSplash = false; QString sys_data_path; QString sSelectedDriver; bool showVersionOpt = false; unsigned logLevelOpt = H2Core::Logger::Error; QString drumkitName; QString drumkitToLoad; bool showHelpOpt = false; int c; for (;;) { c = getopt_long(argc, argv, opts, long_opts, NULL); if (c == -1) break; switch(c) { case 'P': sys_data_path = QString::fromLocal8Bit(optarg); break; case 'd': sSelectedDriver = QString::fromLocal8Bit(optarg); break; case 's': songFilename = QString::fromLocal8Bit(optarg); break; #ifdef H2CORE_HAVE_JACKSESSION case 'S': sessionId = QString::fromLocal8Bit(optarg); break; #endif case 'p': playlistFilename = QString::fromLocal8Bit(optarg); break; case 'k': //load Drumkit drumkitToLoad = QString::fromLocal8Bit(optarg); break; case 'v': showVersionOpt = true; break; case 'i': //install h2drumkit drumkitName = QString::fromLocal8Bit( optarg ); break; case 'V': if( optarg ) { logLevelOpt = H2Core::Logger::parse_log_level( optarg ); } else { logLevelOpt = H2Core::Logger::Error|H2Core::Logger::Warning; } break; case 'n': bNoSplash = true; break; case 'h': case '?': showHelpOpt = true; break; } } setup_unix_signal_handlers(); if( showVersionOpt ) { std::cout << H2Core::get_version() << std::endl; exit(0); } showInfo(); if( showHelpOpt ) { showUsage(); exit(0); } // Man your battle stations... this is not a drill. H2Core::Logger::create_instance(); H2Core::Logger::set_bit_mask( logLevelOpt ); H2Core::Logger* logger = H2Core::Logger::get_instance(); H2Core::Object::bootstrap( logger, logger->should_log(H2Core::Logger::Debug) ); if(sys_data_path.length()==0 ) { H2Core::Filesystem::bootstrap( logger ); } else { H2Core::Filesystem::bootstrap( logger, sys_data_path ); } MidiMap::create_instance(); H2Core::Preferences::create_instance(); // See below for H2Core::Hydrogen. ___INFOLOG( QString("Using QT version ") + QString( qVersion() ) ); ___INFOLOG( "Using data path: " + H2Core::Filesystem::sys_data_path() ); H2Core::Preferences *pPref = H2Core::Preferences::get_instance(); #ifdef H2CORE_HAVE_LASH LashClient::create_instance("hydrogen", "Hydrogen", &argc, &argv); LashClient* lashClient = LashClient::get_instance(); #endif if( ! drumkitName.isEmpty() ){ H2Core::Drumkit::install( drumkitName ); exit(0); } if (sSelectedDriver == "auto") { pPref->m_sAudioDriver = "Auto"; } else if (sSelectedDriver == "jack") { pPref->m_sAudioDriver = "Jack"; } else if ( sSelectedDriver == "oss" ) { pPref->m_sAudioDriver = "Oss"; } else if ( sSelectedDriver == "alsa" ) { pPref->m_sAudioDriver = "Alsa"; } QString family = pPref->getApplicationFontFamily(); pQApp->setFont( QFont( family, pPref->getApplicationFontPointSize() ) ); QTranslator qttor( 0 ); QTranslator tor( 0 ); QString sTranslationFile = QString("hydrogen.") + QLocale::system().name(); QString sLocale = QLocale::system().name(); if ( sLocale != "C") { if (qttor.load( QString( "qt_" ) + sLocale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) pQApp->installTranslator( &qttor ); else ___INFOLOG( QString("Warning: No Qt translation for locale %1 found.").arg(QLocale::system().name())); QString sTranslationPath = "data/i18n"; QString total = sTranslationPath + "/" + sTranslationFile + ".qm"; bool bTransOk = tor.load( total, "." ); if ( bTransOk ) { ___INFOLOG( QString( "Using locale: %1/%2" ).arg( sTranslationPath ).arg( sTranslationFile ) ); } else { sTranslationPath = H2Core::Filesystem::i18n_dir(); total = sTranslationPath + "/" + sTranslationFile + ".qm"; bTransOk = tor.load( total, "." ); if (bTransOk) { ___INFOLOG( "Using locale: " + sTranslationPath + "/" + sTranslationFile ); } else { ___INFOLOG( "Warning: no locale found: " + sTranslationPath + "/" + sTranslationFile ); } } if (tor.isEmpty()) { ___INFOLOG( "Warning: error loading locale: " + total ); } } pQApp->installTranslator( &tor ); QString sStyle = pPref->getQTStyle(); if ( !sStyle.isEmpty() ) { pQApp->setStyle( sStyle ); } setPalette( pQApp ); SplashScreen *pSplash = new SplashScreen(); if (bNoSplash) { pSplash->hide(); } else { pSplash->show(); } #ifdef H2CORE_HAVE_LASH if ( H2Core::Preferences::get_instance()->useLash() ){ if (lashClient->isConnected()) { lash_event_t* lash_event = lashClient->getNextEvent(); if (lash_event && lash_event_get_type(lash_event) == LASH_Restore_File) { // notify client that this project was not a new one lashClient->setNewProject(false); songFilename = ""; songFilename.append( QString::fromLocal8Bit(lash_event_get_string(lash_event)) ); songFilename.append("/hydrogen.h2song"); // H2Core::Logger::get_instance()->log("[LASH] Restore file: " + songFilename); lash_event_destroy(lash_event); } else if (lash_event) { // H2Core::Logger::get_instance()->log("[LASH] ERROR: Instead of restore file got event: " + lash_event_get_type(lash_event)); lash_event_destroy(lash_event); } } } #endif #ifdef H2CORE_HAVE_JACKSESSION if(!sessionId.isEmpty()){ pPref->setJackSessionUUID( sessionId ); /* * imo, jack sessions use jack as default audio driver. * hydrogen remember last used audiodriver. * here we make it save that hydrogen start in a jacksession case * every time with jack as audio driver */ pPref->m_sAudioDriver = "Jack"; } /* * the use of applicationFilePath() make it * possible to use different executables. * for example if you start hydrogen from a local * build directory. */ QString path = pQApp->applicationFilePath(); pPref->setJackSessionApplicationPath( path ); #endif // Hydrogen here to honor all preferences. H2Core::Hydrogen::create_instance(); MainForm *pMainForm = new MainForm( pQApp, songFilename ); pMainForm->show(); pSplash->finish( pMainForm ); if( ! playlistFilename.isEmpty() ){ bool loadlist = HydrogenApp::get_instance()->getPlayListDialog()->loadListByFileName( playlistFilename ); if( loadlist ){ Playlist::get_instance()->setNextSongByNumber( 0 ); } else { ___ERRORLOG ( "Error loading the playlist" ); } } if( ! drumkitToLoad.isEmpty() ){ H2Core::Drumkit* drumkitInfo = H2Core::Drumkit::load( drumkitToLoad ); H2Core::Hydrogen::get_instance()->loadDrumkit( drumkitInfo ); } pQApp->exec(); delete pSplash; delete pMainForm; delete pQApp; delete pPref; delete H2Core::EventQueue::get_instance(); delete H2Core::AudioEngine::get_instance(); delete MidiMap::get_instance(); delete MidiActionManager::get_instance(); ___INFOLOG( "Quitting..." ); cout << "\nBye..." << endl; delete H2Core::Logger::get_instance(); if (H2Core::Object::count_active()) { H2Core::Object::write_objects_map_to_cerr(); } } catch ( const H2Core::H2Exception& ex ) { std::cerr << "[main] Exception: " << ex.what() << std::endl; } catch (...) { std::cerr << "[main] Unknown exception X-(" << std::endl; } return 0; } /** * Show some information */ void showInfo() { cout << "\nHydrogen " + H2Core::get_version() + " [" + __DATE__ + "] [http://www.hydrogen-music.org]" << endl; cout << "Copyright 2002-2008 Alessandro Cominu" << endl; // ___INFOLOG( "Compiled modules: " + QString(COMPILED_FEATURES) << endl; if ( H2Core::Object::count_active() ) { cout << "\nObject counting = active" << endl; } cout << "\nHydrogen comes with ABSOLUTELY NO WARRANTY" << endl; cout << "This is free software, and you are welcome to redistribute it" << endl; cout << "under certain conditions. See the file COPYING for details\n" << endl; } /** * Show the correct usage */ void showUsage() { std::cout << "Usage: hydrogen [-v] [-h] -s file" << std::endl; std::cout << " -P, --data PATH - Use an alternate system data path" << std::endl; std::cout << " -d, --driver AUDIODRIVER - Use the selected audio driver (jack, alsa, oss)" << std::endl; std::cout << " -s, --song FILE - Load a song (*.h2song) at startup" << std::endl; #ifdef H2CORE_HAVE_JACKSESSION std::cout << " -S, --jacksessionid ID - Start a JackSessionHandler session" << std::endl; #endif std::cout << " -p, --playlist FILE - Load a playlist (*.h2playlist) at startup" << std::endl; std::cout << " -k, --kit drumkit_name - Load a drumkit at startup" << std::endl; std::cout << " -i, --install FILE - install a drumkit (*.h2drumkit)" << std::endl; #ifdef H2CORE_HAVE_LASH std::cout << " --lash-no-start-server - If LASH server not running, don't start" << endl << " it (LASH 0.5.3 and later)." << std::endl; std::cout << " --lash-no-autoresume - Tell LASH server not to assume I'm returning" << std::endl << " from a crash." << std::endl; #endif std::cout << " -n, --nosplash - Hide splash screen" << std::endl; std::cout << " -V[Level], --verbose[=Level] - Print a lot of debugging info" << std::endl; std::cout << " Level, if present, may be None, Error, Warning, Info, Debug or 0xHHHH" << std::endl; std::cout << " -v, --version - Show version info" << std::endl; std::cout << " -h, --help - Show this help message" << std::endl; } hydrogen-0.9.6-beta3/src/gui/src/precompiled.h000066400000000000000000000010741211146647700211720ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include // STL #include #include #include #include // QT #include #include #include #include #include #include #include #include #include #include // STL #include #include #include #include // QT #include #include hydrogen-0.9.6-beta3/src/gui/src/widgets/000077500000000000000000000000001211146647700201625ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/gui/src/widgets/Button.cpp000066400000000000000000000156311211146647700221470ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "Button.h" #include "PixmapWidget.h" #include "../Skin.h" #include "MidiSenseWidget.h" #include // for QT_VERSION #if QT_VERSION == 0x040100 // SVG renderer was introduced in QT4.1 #include #endif #include const char* Button::__class_name = "Button"; Button::Button( QWidget * pParent, const QString& sOnImage, const QString& sOffImage, const QString& sOverImage, QSize size, bool use_skin_style ) : QWidget( pParent ) , Object( __class_name ) , m_bPressed( false ) , m_onPixmap( size ) , m_offPixmap( size ) , m_overPixmap( size ) , m_bMouseOver( false ) , __use_skin_style(use_skin_style) { // draw the background: slower but useful with transparent images! //setAttribute(Qt::WA_NoBackground); setMinimumSize( size ); setMaximumSize( size ); resize( size ); if ( loadImage( sOnImage, m_onPixmap ) == false ) { m_onPixmap.fill( QColor( 0, 255, 0 ) ); } if ( loadImage( sOffImage, m_offPixmap ) == false ) { m_offPixmap.fill( QColor( 0, 100, 0 ) ); } if ( loadImage( sOverImage, m_overPixmap ) == false ) { m_overPixmap.fill( QColor( 0, 180, 0 ) ); } this->setStyleSheet("font-size: 9px; font-weight: bold;"); } Button::~Button() { } bool Button::loadImage( const QString& sFilename, QPixmap& pixmap ) { #if QT_VERSION == 0x040100 // SVG renderer was introduced in QT4.1 /* if ( sFilename.endsWith( ".svg" ) ) { ERRORLOG( "************* LOAD SVG!!" ); if ( !QFile::exists( sFilename ) ) { return false; } QSvgRenderer doc( sFilename ); if ( doc.isValid() == false ) { ERRORLOG( "error loading SVG image: '" + sFilename.toLocal8Bit().constData() + "'" ); return false; } QPainter p; p.begin( &pixmap ); p.setViewport( 0, 0, width(), height() ); p.eraseRect( 0, 0, width(), height() ); doc.render( &p ); p.end(); return true; } */ #endif // load an image if ( pixmap.load( Skin::getImagePath() + sFilename ) == false ) { if ( !sFilename.isEmpty() ) { ERRORLOG( QString( "Error loading image: '%1'" ).arg( sFilename ) ); } return false; } return true; } void Button::mousePressEvent(QMouseEvent*ev) { /* * Shift + Left-Click activate the midi learn widget */ if ( ev->button() == Qt::LeftButton && (ev->modifiers() & Qt::ShiftModifier) ){ MidiSenseWidget midiSense( this, true, this->getAction() ); midiSense.exec(); return; } m_bPressed = true; update(); emit mousePress(this); } void Button::mouseReleaseEvent(QMouseEvent* ev) { setPressed( false ); if (ev->button() == Qt::LeftButton) { emit clicked(this); } else if (ev->button() == Qt::RightButton) { emit rightClicked(this); } } void Button::setFontSize(int size) { m_textFont.setPointSize(size); } void Button::setPressed(bool pressed) { if (pressed != m_bPressed) { m_bPressed = pressed; update(); } } void Button::enterEvent(QEvent *ev) { UNUSED( ev ); m_bMouseOver = true; update(); } void Button::leaveEvent(QEvent *ev) { UNUSED( ev ); m_bMouseOver = false; update(); } void Button::paintEvent( QPaintEvent* ev) { QPainter painter(this); // background if (m_bPressed) { if (__use_skin_style) { static int w = 5; static int h = m_onPixmap.height(); // central section, scaled painter.drawPixmap( QRect(w, 0, width() - w * 2, h), m_onPixmap, QRect(10, 0, w, h) ); // left side painter.drawPixmap( QRect(0, 0, w, h), m_onPixmap, QRect(0, 0, w, h) ); // right side painter.drawPixmap( QRect(width() - w, 0, w, h), m_onPixmap, QRect(m_onPixmap.width() - w, 0, w, h) ); } else { painter.drawPixmap( ev->rect(), m_onPixmap, ev->rect() ); } } else { if (m_bMouseOver) { if (__use_skin_style) { static int w = 5; static int h = m_overPixmap.height(); // central section, scaled painter.drawPixmap( QRect(w, 0, width() - w * 2, h), m_overPixmap, QRect(10, 0, w, h) ); // left side painter.drawPixmap( QRect(0, 0, w, h), m_overPixmap, QRect(0, 0, w, h) ); // right side painter.drawPixmap( QRect(width() - w, 0, w, h), m_overPixmap, QRect(m_overPixmap.width() - w, 0, w, h) ); } else { painter.drawPixmap( ev->rect(), m_overPixmap, ev->rect() ); } } else { if (__use_skin_style) { static int w = 5; static int h = m_offPixmap.height(); // central section, scaled painter.drawPixmap( QRect(w, 0, width() - w * 2, h), m_offPixmap, QRect(10, 0, w, h) ); // left side painter.drawPixmap( QRect(0, 0, w, h), m_offPixmap, QRect(0, 0, w, h) ); // right side painter.drawPixmap( QRect(width() - w, 0, w, h), m_offPixmap, QRect(m_offPixmap.width() - w, 0, w, h) ); } else { painter.drawPixmap( ev->rect(), m_offPixmap, ev->rect() ); } } } if ( !m_sText.isEmpty() ) { painter.setFont( m_textFont ); QColor shadow(150, 150, 150, 100); QColor text(10, 10, 10); if (m_bMouseOver) { shadow = QColor(220, 220, 220, 100); } // shadow painter.setPen( shadow ); painter.drawText( 1, 1, width(), height(), Qt::AlignHCenter | Qt::AlignVCenter, m_sText ); // text painter.setPen( text ); painter.drawText( 0, 0, width(), height(), Qt::AlignHCenter | Qt::AlignVCenter, m_sText ); } } void Button::setText( const QString& sText ) { m_sText = sText; update(); } // ::::::::::::::::::::::::: ToggleButton::ToggleButton( QWidget *pParent, const QString& sOnImg, const QString& sOffImg, const QString& sOverImg, QSize size, bool use_skin_style ) : Button( pParent, sOnImg, sOffImg, sOverImg, size, use_skin_style ) { } ToggleButton::~ToggleButton() { } void ToggleButton::mousePressEvent(QMouseEvent *ev) { if ( ev->button() == Qt::LeftButton && ev->modifiers() == Qt::ShiftModifier ){ MidiSenseWidget midiSense( this, true, this->getAction() ); midiSense.exec(); return; } if (ev->button() == Qt::RightButton) { emit rightClicked(this); } else { if (m_bPressed) { m_bPressed = false; } else { m_bPressed = true; } update(); emit clicked(this); } } void ToggleButton::mouseReleaseEvent(QMouseEvent*) { // do nothing, this method MUST override Button's one } hydrogen-0.9.6-beta3/src/gui/src/widgets/Button.h000066400000000000000000000046271211146647700216170ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef BUTTON_H #define BUTTON_H #include #include #include "MidiLearnable.h" #include class PixmapWidget; /** * Generic Button with pixmaps and text. */ class Button : public QWidget, public H2Core::Object, public MidiLearnable { H2_OBJECT Q_OBJECT public: Button( QWidget *pParent, const QString& sOnImg, const QString& sOffImg, const QString& sOverImg, QSize size, bool use_skin_style = false ); virtual ~Button(); bool isPressed() { return m_bPressed; } void setPressed(bool pressed); void setText( const QString& sText ); void setFontSize( int size ); signals: void clicked(Button *pBtn); void rightClicked(Button *pBtn); void mousePress(Button *pBtn); protected: bool m_bPressed; QFont m_textFont; QString m_sText; QPixmap m_onPixmap; QPixmap m_offPixmap; QPixmap m_overPixmap; private: bool m_bMouseOver; bool __use_skin_style; void mousePressEvent(QMouseEvent *ev); void mouseReleaseEvent(QMouseEvent *ev); void enterEvent(QEvent *ev); void leaveEvent(QEvent *ev); void paintEvent( QPaintEvent* ev); bool loadImage( const QString& sFilename, QPixmap& pixmap ); }; /** * A ToggleButton (On/Off). */ class ToggleButton : public Button { Q_OBJECT public: ToggleButton( QWidget *pParent, const QString& sOnImg, const QString& sOffImg, const QString& sOverImg, QSize size, bool use_skin_style = false ); ~ToggleButton(); private: void mousePressEvent( QMouseEvent *ev ); void mouseReleaseEvent( QMouseEvent *ev ); }; #endif hydrogen-0.9.6-beta3/src/gui/src/widgets/ClickableLabel.cpp000066400000000000000000000025261211146647700235040ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "ClickableLabel.h" #include #include ClickableLabel::ClickableLabel( QWidget *pParent ) : QLabel( pParent ) { QPalette defaultPalette; defaultPalette.setColor( QPalette::Background, QColor( 58, 62, 72 ) ); defaultPalette.setColor( QPalette::Foreground, QColor( 230, 230, 230 ) ); this->setPalette( defaultPalette ); this->setAlignment( Qt::AlignCenter ); } void ClickableLabel::mousePressEvent( QMouseEvent * e ) { UNUSED( e ); emit labelClicked( this ); } hydrogen-0.9.6-beta3/src/gui/src/widgets/ClickableLabel.h000066400000000000000000000021601211146647700231430ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef CLICKABLE_LABEL_H #define CLICKABLE_LABEL_H #include class ClickableLabel : public QLabel { Q_OBJECT public: ClickableLabel( QWidget *pParent ); void mousePressEvent( QMouseEvent * e ); signals: void labelClicked( ClickableLabel* pLabel ); }; #endif hydrogen-0.9.6-beta3/src/gui/src/widgets/CpuLoadWidget.cpp000066400000000000000000000071301211146647700233620ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "CpuLoadWidget.h" #include #include "../Skin.h" #include "../HydrogenApp.h" #include #include #include #include const char* CpuLoadWidget::__class_name = "CpuLoadWidget"; CpuLoadWidget::CpuLoadWidget( QWidget *pParent ) : QWidget( pParent ) , Object( __class_name ) , m_fValue( 0 ) { setAttribute(Qt::WA_NoBackground); static const uint WIDTH = 92; static const uint HEIGHT = 8; resize( WIDTH, HEIGHT ); setMinimumSize( width(), height() ); setMaximumSize( width(), height() ); m_nXRunValue = 0; // Background image QString background_path = Skin::getImagePath().append( "/playerControlPanel/cpuLoad_back.png" ); bool ok = m_back.load( background_path ); if( !ok ) { ERRORLOG( "Error loading pixmap " + background_path ); } // Leds image QString leds_path = Skin::getImagePath().append( "/playerControlPanel/cpuLoad_leds.png" ); ok = m_leds.load( leds_path ); if( !ok ) { ERRORLOG( "Error loading pixmap " + leds_path ); } QTimer *timer = new QTimer(this); connect( timer, SIGNAL( timeout() ), this, SLOT( updateCpuLoadWidget() ) ); timer->start(200); // update player control at 5 fps HydrogenApp::get_instance()->addEventListener( this ); } CpuLoadWidget::~CpuLoadWidget() { } void CpuLoadWidget::mousePressEvent(QMouseEvent *ev) { UNUSED( ev ); } void CpuLoadWidget::setValue(float newValue) { if ( newValue > 1.0 ) { newValue = 1.0; } else if (newValue < 0.0) { newValue = 0.0; } if (m_fValue != newValue) { m_fValue = newValue; } } float CpuLoadWidget::getValue() { return m_fValue; } void CpuLoadWidget::paintEvent( QPaintEvent*) { if (!isVisible()) { return; } QPainter painter(this); // background // bitBlt( &m_temp, 0, 0, &m_back, 0, 0, width(), height(), CopyROP ); painter.drawPixmap( rect(), m_back, QRect( 0, 0, width(), height() ) ); // leds int pos = (int)( 3 + m_fValue * ( width() - 3 * 2 ) ); // bitBlt( &m_temp, 0, 0, &m_leds, 0, 0, pos, height(), CopyROP ); painter.drawPixmap( QRect( 0, 0, pos, height() ), m_leds, QRect( 0, 0, pos, height() ) ); if (m_nXRunValue > 0) { // xrun led // bitBlt( &m_temp, 90, 0, &m_leds, 90, 0, width(), height(), CopyROP ); painter.drawPixmap( QRect( 90, 0, width(), height() ), m_leds, QRect( 90, 0, width(), height() ) ); } } void CpuLoadWidget::updateCpuLoadWidget() { // Process time H2Core::Hydrogen *engine = H2Core::Hydrogen::get_instance(); int perc = 0; if ( engine->getMaxProcessTime() != 0.0 ) { perc = (int)( engine->getProcessTime() / ( engine->getMaxProcessTime() / 100.0 ) ); } setValue( perc / 100.0 ); if (m_nXRunValue > 0) { m_nXRunValue -= 5; } update(); } void CpuLoadWidget::XRunEvent() { INFOLOG( "[xRunEvent]" ); m_nXRunValue = 100; update(); } hydrogen-0.9.6-beta3/src/gui/src/widgets/CpuLoadWidget.h000066400000000000000000000027431211146647700230340ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef CPU_LOAD_WIDGET_H #define CPU_LOAD_WIDGET_H #include #include "../EventListener.h" #include #include /// /// Shows CPU load /// class CpuLoadWidget : public QWidget, public EventListener, public H2Core::Object { H2_OBJECT Q_OBJECT public: CpuLoadWidget(QWidget *pParent ); ~CpuLoadWidget(); void setValue( float newValue ); float getValue(); void mousePressEvent(QMouseEvent *ev); void paintEvent(QPaintEvent *ev); void XRunEvent(); public slots: void updateCpuLoadWidget(); private: float m_fValue; uint m_nXRunValue; QPixmap m_back; QPixmap m_leds; }; #endif hydrogen-0.9.6-beta3/src/gui/src/widgets/DownloadWidget.cpp000066400000000000000000000143331211146647700236050ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "DownloadWidget.h" #include #include const char* Download::__class_name = "Download"; Download::Download( QWidget* pParent, const QString& download_url, const QString& local_file ) : QDialog( pParent ) , Object( __class_name ) , __download_percent( 0 ) , __eta( 0 ) , __bytes_current( 0 ) , __bytes_total( 0 ) , __remote_url( download_url ) , __local_file( local_file ) { if ( !__local_file.isEmpty() ) { INFOLOG( QString( "Downloading '%1' in '%2'" ).arg( __remote_url ).arg( __local_file ) ); } else { INFOLOG( QString( "Downloading '%1'" ).arg( __remote_url ) ); } QUrl url( __remote_url ); QString sEnvHttpProxy = QString( getenv( "http_proxy" ) ); int nEnvHttpPort = 0; QString sEnvHttpUser = QString( getenv( "http_user" ) ); QString sEnvHttpPassword = QString( getenv( "http_password" ) ); nEnvHttpPort = sEnvHttpProxy.right( sEnvHttpProxy.length() - sEnvHttpProxy.indexOf(':') - 1 ).toInt(); sEnvHttpProxy = sEnvHttpProxy.left( sEnvHttpProxy.indexOf(':') ); connect( &__http_client, SIGNAL( done( bool ) ), this, SLOT( __fetch_done( bool ) ) ); connect( &__http_client, SIGNAL( dataReadProgress( int, int ) ), this, SLOT( __fetch_progress( int, int ) ) ); connect( &__http_client, SIGNAL( requestFinished( int, bool ) ), this, SLOT( __http_request_finished( int, bool ) ) ); connect( &__http_client, SIGNAL( responseHeaderReceived( const QHttpResponseHeader& ) ), SLOT( __header_received( const QHttpResponseHeader& ) ) ); QString sPath = url.path(); sPath = sPath.replace( " ", "%20" ); QHttpRequestHeader header( "GET", sPath ); header.setValue( "Host", url.host() ); __time.start(); if ( ( !sEnvHttpProxy.isNull() ) && ( nEnvHttpPort != 0 ) ) { __http_client.setProxy( sEnvHttpProxy, nEnvHttpPort, sEnvHttpUser, sEnvHttpPassword ); } __http_client.setHost( url.host() ); __http_client.request( header ); } Download::~Download() { } /// TODO: devo salvare il file sul disco su una dir temporanea e poi spostarlo se e' tutto ok. void Download::__fetch_done( bool bError ) { if ( bError ) { ERRORLOG( "Error retrieving the resource." ); reject(); return; } if ( !__redirect_url.isEmpty() ) { reject(); return; } INFOLOG( "Download completed. " ); if ( __local_file.isEmpty() ) { // store the text received only when not using the file. __feed_xml_string = __http_client.readAll(); } else { QFile file( __local_file ); if ( !file.open( QIODevice::WriteOnly ) ) { ERRORLOG( QString( "Unable to save %1" ).arg( __local_file ) ); } else { file.write( __http_client.readAll() ); file.flush(); file.close(); } } accept(); } void Download::__fetch_progress ( int done, int total ) { __bytes_current = done; __bytes_total = total; __download_percent = ( float )done / ( float )total * 100.0; } void Download::__http_request_finished( int requestId, bool error ) { if ( error ) { ERRORLOG( "Error: " + __http_client.errorString() ); return; } } void Download::__header_received( const QHttpResponseHeader& res ) { //INFOLOG( "Header received: " + to_string( res.statusCode() ) ); if ( ( res.statusCode() == 301 ) || ( res.statusCode() == 302 ) || ( res.statusCode() == 307 ) ) { __redirect_url = res.value( "location" ); INFOLOG( "Received redirect to: " + __redirect_url ); //__http_client.abort(); } } // :::::::::::::::::::.. DownloadWidget::DownloadWidget( QWidget* parent, const QString& title, const QString& __remote_url, const QString& local_file ) : Download( parent, __remote_url, local_file ) { setWindowTitle( title ); setModal( true ); setFixedSize( 500, 100 ); QFont boldFont; boldFont.setBold( true ); __url_label = new QLabel( NULL ); __url_label->setFont( boldFont ); __url_label->setAlignment( Qt::AlignCenter ); __url_label->setText( QFileInfo( __remote_url ).fileName() ); __progress_bar = new QProgressBar( NULL ); __progress_bar->setMinimum( 0 ); __progress_bar->setMaximum( 100 ); __eta_label = new QLabel( NULL ); // __eta_label->setFont( boldFont ); __eta_label->setAlignment( Qt::AlignHCenter ); QVBoxLayout* pVBox = new QVBoxLayout(); pVBox->addWidget( __url_label ); pVBox->addWidget( __progress_bar ); pVBox->addWidget( __eta_label ); setLayout( pVBox ); __update_timer = new QTimer( this ); connect( __update_timer, SIGNAL( timeout() ), this, SLOT( updateStats() ) ); __close_timer = new QTimer( this ); connect( __close_timer, SIGNAL( timeout() ), this, SLOT( close() ) ); __update_timer->start( 100 ); } DownloadWidget::~DownloadWidget() { __update_timer->stop(); __close_timer->stop(); } void DownloadWidget::updateStats() { if ( __download_percent > 0 ) { __eta = ( int )( round( ( __time.elapsed() / __download_percent * ( 100 - __download_percent ) ) / 1000 ) ); } __progress_bar->setValue( get_percent_done() ); QString hours = QString( "%1" ).arg( __eta / 60 / 60 ); QString minutes = QString( "%1" ).arg( ( __eta / 60 ) % 60 ); QString seconds = QString( "%1" ).arg( __eta % 60 ); hours = hours.rightJustified( 2, '0' ); minutes = minutes.rightJustified( 2, '0' ); seconds = seconds.rightJustified( 2, '0' ); QString sETA = hours + ":" + minutes + ":" + seconds; __eta_label->setText( trUtf8( "(%1/%2 KiB) - ETA %3" ).arg( __bytes_current / 1024 ).arg( __bytes_total / 1024 ).arg( sETA ) ); if ( __download_percent == 100 ) { __update_timer->stop(); __close_timer->start( 1000 ); // close the window after 1 second } } hydrogen-0.9.6-beta3/src/gui/src/widgets/DownloadWidget.h000066400000000000000000000042231211146647700232470ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef DOWNLOAD_WIDGET_H #define DOWNLOAD_WIDGET_H #include #include #include class Download : public QDialog, public H2Core::Object { H2_OBJECT Q_OBJECT public: Download( QWidget* parent, const QString& download_url, const QString& local_file ); ~Download(); int get_percent_done() { return (int)__download_percent; } const QString& get_xml_content() { return __feed_xml_string; } private slots: void __fetch_done( bool bError ); void __fetch_progress( int done, int total ); void __http_request_finished( int requestId, bool error ); void __header_received( const QHttpResponseHeader& res ); protected: QHttp __http_client; QTime __time; float __download_percent; int __eta; int __bytes_current; int __bytes_total; QString __remote_url; QString __local_file; QString __feed_xml_string; QString __redirect_url; }; class DownloadWidget : public Download { H2_OBJECT Q_OBJECT public: DownloadWidget( QWidget* parent, const QString& title, const QString& download_url, const QString& local_file = "" ); ~DownloadWidget(); QString get_redirect_url() { return __redirect_url; } private slots: void updateStats(); private: QTimer* __update_timer; QTimer* __close_timer; QLabel* __url_label; QLabel* __eta_label; QProgressBar* __progress_bar; }; #endif hydrogen-0.9.6-beta3/src/gui/src/widgets/Fader.cpp000066400000000000000000000267721211146647700217250ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "../Skin.h" #include "Fader.h" #include "LCD.h" #include "MidiSenseWidget.h" #include #include const char* Fader::__class_name = "Fader"; Fader::Fader( QWidget *pParent, bool bUseIntSteps, bool bWithoutKnob ) : QWidget( pParent ) , Object( __class_name ) , m_bWithoutKnob( bWithoutKnob ) , m_bUseIntSteps( bUseIntSteps ) , m_fPeakValue_L( 0.0 ) , m_fPeakValue_R( 0.0 ) , m_fMinPeak( 0.01f ) , m_fMaxPeak( 1.0 ) , m_fValue( 0.0 ) , m_fMinValue( 0.0 ) , m_fMaxValue( 1.0 ) { setAttribute( Qt::WA_NoBackground ); setMinimumSize( 23, 116 ); setMaximumSize( 23, 116); resize( 23, 116 ); // Background image QString background_path = Skin::getImagePath() + "/mixerPanel/fader_background.png"; bool ok = m_back.load( background_path ); if( ok == false ) { ERRORLOG("Fader: Error loading pixmap"); } // Leds image QString leds_path = Skin::getImagePath() + "/mixerPanel/fader_leds.png"; ok = m_leds.load( leds_path ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } // Knob image QString knob_path = Skin::getImagePath() + "/mixerPanel/fader_knob.png"; ok = m_knob.load( knob_path ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } } Fader::~Fader() { //infoLog( "[Destroy]" ); } void Fader::mouseMoveEvent( QMouseEvent *ev ) { float fVal = (float)( height() - ev->y() ) / (float)height(); fVal = fVal * ( m_fMaxValue - m_fMinValue ); fVal = fVal + m_fMinValue; setValue( fVal ); emit valueChanged(this); } void Fader::mousePressEvent(QMouseEvent *ev) { if ( ev->button() == Qt::LeftButton && ev->modifiers() == Qt::ShiftModifier ){ MidiSenseWidget midiSense( this, true, this->getAction() ); midiSense.exec(); } } void Fader::wheelEvent ( QWheelEvent *ev ) { ev->accept(); if ( m_bUseIntSteps ) { if ( ev->delta() > 0 ) { setValue( m_fValue + 1 ); } else { setValue( m_fValue - 1 ); } } else { float step = ( m_fMaxValue - m_fMinValue ) / 50.0; if ( ev->delta() > 0 ) { setValue( m_fValue + step ); } else { setValue( m_fValue - step ); } } emit valueChanged(this); } void Fader::setValue( float fVal ) { if ( fVal > m_fMaxValue ) { //WARNINGLOG( toString( fVal ) + " > " + toString( m_fMax ) ); fVal = m_fMaxValue; } else if ( fVal < m_fMinValue ) { //WARNINGLOG( toString( fVal ) + " < " + toString( m_fMin ) ); fVal = m_fMinValue; } if ( m_bUseIntSteps ) { fVal = (int)fVal; } if ( m_fValue != fVal ) { //INFOLOG( "new value: " + toString( fVal ) ); m_fValue = fVal; update(); } } float Fader::getValue() { return m_fValue; } /// /// Set peak value (0.0 .. 1.0) /// void Fader::setPeak_L( float fPeak ) { if ( fPeak < m_fMinPeak ) { fPeak = m_fMinPeak; } else if ( fPeak > m_fMaxPeak ) { fPeak = m_fMaxPeak; } if ( m_fPeakValue_L != fPeak) { m_fPeakValue_L = fPeak; update(); } } /// /// Set peak value (0.0 .. 1.0) /// void Fader::setPeak_R( float fPeak ) { if ( fPeak < m_fMinPeak ) { fPeak = m_fMinPeak; } else if ( fPeak > m_fMaxPeak ) { fPeak = m_fMaxPeak; } if ( m_fPeakValue_R != fPeak ) { m_fPeakValue_R = fPeak; update(); } } void Fader::paintEvent( QPaintEvent *ev) { UNUSED( ev ); QPainter painter(this); // background // painter.drawPixmap( rect(), m_back, QRect( 0, 0, 23, 116 ) ); painter.drawPixmap( ev->rect(), m_back, ev->rect() ); // peak leds //float fRange = abs( m_fMaxPeak ) + abs( m_fMinPeak ); float realPeak_L = m_fPeakValue_L - m_fMinPeak; //int peak_L = 116 - ( realPeak_L / fRange ) * 116.0; int peak_L = 116 - ( realPeak_L / ( m_fMaxPeak - m_fMinPeak ) ) * 116.0; if ( peak_L > 116 ) { peak_L = 116; } painter.drawPixmap( QRect( 0, peak_L, 11, 116 - peak_L ), m_leds, QRect( 0, peak_L, 11, 116 - peak_L ) ); float realPeak_R = m_fPeakValue_R - m_fMinPeak; int peak_R = 116 - ( realPeak_R / ( m_fMaxPeak - m_fMinPeak ) ) * 116.0; if ( peak_R > 116 ) { peak_R = 116; } painter.drawPixmap( QRect( 11, peak_R, 11, 116 - peak_R ), m_leds, QRect( 11, peak_R, 11, 116 - peak_R ) ); if ( m_bWithoutKnob == false ) { // knob static const uint knob_height = 29; static const uint knob_width = 15; float fRange = m_fMaxValue - m_fMinValue; float realVal = m_fValue - m_fMinValue; // uint knob_y = (uint)( 116.0 - ( 86.0 * ( m_fValue / fRange ) ) ); uint knob_y = (uint)( 116.0 - ( 86.0 * ( realVal / fRange ) ) ); painter.drawPixmap( QRect( 4, knob_y - knob_height, knob_width, knob_height), m_knob, QRect( 0, 0, knob_width, knob_height ) ); } } void Fader::setMinValue( float fMin ) { m_fMinValue = fMin; } void Fader::setMaxValue( float fMax ) { m_fMaxValue = fMax; } void Fader::setMaxPeak( float fMax ) { m_fMaxPeak = fMax; } void Fader::setMinPeak( float fMin ) { m_fMinPeak = fMin; } ////////////////////////////////// const char* MasterFader::__class_name = "MasterFader"; MasterFader::MasterFader(QWidget *pParent, bool bWithoutKnob) : QWidget( pParent ) , Object( __class_name ) , m_bWithoutKnob( bWithoutKnob ) , m_fPeakValue_L( 0.0 ) , m_fPeakValue_R( 0.0 ) , m_fValue( 0.0 ) , m_fMin( 0.0 ) , m_fMax( 1.0 ) { setAttribute(Qt::WA_NoBackground); setMinimumSize( 34, 190 ); setMaximumSize( 34, 190); resize( 34, 190 ); // Background image QString background_path = Skin::getImagePath() + "/mixerPanel/masterMixer_background.png"; bool ok = m_back.load( background_path ); if( ok == false ) { ERRORLOG("Fader: Error loading pixmap"); } // Leds image QString leds_path = Skin::getImagePath() + "/mixerPanel/masterMixer_leds.png"; ok = m_leds.load( leds_path ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } // Knob image QString knob_path = Skin::getImagePath() + "/mixerPanel/fader_knob.png"; ok = m_knob.load( knob_path ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } } MasterFader::~MasterFader() { // infoLog( "[~MasterFader]" ); } void MasterFader::wheelEvent ( QWheelEvent *ev ) { ev->accept(); float step = ( m_fMax - m_fMin ) / 50.0; if ( ev->delta() > 0 ) { setValue( m_fValue + step ); } else { setValue( m_fValue - step ); } emit valueChanged(this); } void MasterFader::mouseMoveEvent( QMouseEvent *ev ) { float fVal = (float)( height() - ev->y() ) / (float)height(); fVal = fVal * ( m_fMax - m_fMin ); setValue( fVal ); emit valueChanged(this); } void MasterFader::mousePressEvent(QMouseEvent *ev) { if ( ev->button() == Qt::LeftButton && ev->modifiers() == Qt::ShiftModifier ){ MidiSenseWidget midiSense( this, true, this->getAction() ); midiSense.exec(); } } void MasterFader::setValue( float newValue ) { if ( newValue > m_fMax ) { newValue = m_fMax; } else if ( newValue < m_fMin ) { newValue = m_fMin; } if ( m_fValue != newValue) { m_fValue = newValue; update(); } } float MasterFader::getValue() { return m_fValue; } /// /// Set peak value (0.0 .. 1.0) /// void MasterFader::setPeak_L( float peak ) { if ( peak < 0.01f ) { peak = 0.01f; } else if (peak > 1.0f ) { peak = 1.0f; } if ( m_fPeakValue_L != peak ) { m_fPeakValue_L = peak; update(); } } /// /// Set peak value (0.0 .. 1.0) /// void MasterFader::setPeak_R( float peak ) { if ( peak < 0.01f ) { peak = 0.01f; } else if ( peak > 1.0f ) { peak = 1.0f; } if ( m_fPeakValue_R != peak ) { m_fPeakValue_R = peak; update(); } } void MasterFader::paintEvent( QPaintEvent* ev ) { QPainter painter(this); // background painter.drawPixmap( ev->rect(), m_back, ev->rect() ); // leds float peak_L = m_fPeakValue_L * 190.0; uint offset_L = (uint)( 190.0 - peak_L ); painter.drawPixmap( QRect( 0, offset_L, 9, 190 - offset_L), m_leds, QRect( 0, offset_L, 9, 190 - offset_L) ); float peak_R = m_fPeakValue_R * 190.0; uint offset_R = (uint)( 190.0 - peak_R ); painter.drawPixmap( QRect( 9, offset_R, 9, 190 - offset_R), m_leds, QRect( 9, offset_R, 9, 190 - offset_R) ); if (m_bWithoutKnob == false) { // knob static const uint knob_height = 29; static const uint knob_width = 15; uint knob_y = (uint)( 190.0 - ( 159.0 * ( m_fValue / ( m_fMax - m_fMin ) ) ) ); painter.drawPixmap( QRect( 19, knob_y - knob_height, knob_width, knob_height), m_knob, QRect( 0, 0, knob_width, knob_height ) ); } /* if ( m_bWithoutKnob == false ) { // knob static const uint knob_height = 29; static const uint knob_width = 15; uint knob_y = (uint)( 116.0 - ( 86.0 * ( m_fValue / ( m_fMax - m_fMin ) ) ) ); painter.drawPixmap( QRect( 4, knob_y - knob_height, knob_width, knob_height), knob, QRect( 0, 0, knob_width, knob_height ) ); } */ } void MasterFader::setMin( float fMin ) { m_fMin = fMin; } void MasterFader::setMax( float fMax ) { m_fMax = fMax; } /////////////////// QPixmap* Knob::m_background = NULL; const char* Knob::__class_name = "Knob"; /// /// Constructor /// Knob::Knob( QWidget* pParent ) : QWidget( pParent ) , Object( __class_name ) { setAttribute(Qt::WA_NoBackground); m_nWidgetWidth = 18; m_nWidgetHeight = 18; m_fValue = 0.0; if ( m_background == NULL ) { QString sBackground_path = Skin::getImagePath() + "/mixerPanel/knob_images.png"; m_background = new QPixmap(); if ( m_background->load( sBackground_path ) == false ){ ERRORLOG( "Error loading pixmap" ); } } resize( m_nWidgetWidth, m_nWidgetHeight ); } /// /// Destructor /// Knob::~ Knob() { } void Knob::paintEvent( QPaintEvent* ev ) { UNUSED( ev ); QPainter painter(this); int nFrame = (int)(31.0 * m_fValue); int xPos = m_nWidgetWidth * nFrame; // bitBlt(&m_temp, 0, 0, m_background, xPos, 0, m_nWidgetWidth, m_nWidgetHeight, CopyROP); painter.drawPixmap( rect(), *m_background, QRect( xPos, 0, m_nWidgetWidth, m_nWidgetHeight ) ); } void Knob::setValue( float fValue ) { if ( fValue == m_fValue ) { return; } if ( fValue < 0.0 ) { fValue = 0.0; // warningLog( "[setValue] fValue < 0" ); } else if ( fValue > 1.0 ) { fValue = 1.0; // warningLog( "[setValue] fValue > 1" ); } if ( fValue != m_fValue ) { m_fValue = fValue; update(); } } void Knob::mousePressEvent(QMouseEvent *ev) { if ( ev->button() == Qt::LeftButton && ev->modifiers() == Qt::ShiftModifier ){ MidiSenseWidget midiSense( this, true, this->getAction() ); midiSense.exec(); } setCursor( QCursor( Qt::SizeVerCursor ) ); m_fMousePressValue = m_fValue; m_fMousePressY = ev->y(); } void Knob::mouseReleaseEvent( QMouseEvent *ev ) { UNUSED( ev ); setCursor( QCursor( Qt::ArrowCursor ) ); } void Knob::mouseMoveEvent( QMouseEvent *ev ) { float y = ev->y() - m_fMousePressY; float fNewValue = m_fMousePressValue - ( y / 100.0 ); setValue( fNewValue ); emit valueChanged(this); } void Knob::wheelEvent ( QWheelEvent *ev ) { ev->accept(); if ( ev->delta() > 0 ) { setValue( m_fValue + 0.025 ); } else { setValue( m_fValue - 0.025 ); } emit valueChanged(this); } hydrogen-0.9.6-beta3/src/gui/src/widgets/Fader.h000066400000000000000000000073251211146647700213630ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef FADER_H #define FADER_H #include #include #include "MidiLearnable.h" /// /// Fader and VuMeter widget /// class Fader : public QWidget, public H2Core::Object, public MidiLearnable { H2_OBJECT Q_OBJECT public: Fader(QWidget *pParent, bool bUseIntSteps, bool bWithoutKnob ); ~Fader(); void setMinValue( float fMin ); void setMaxValue( float fMax ); float getMinValue() { return m_fMinValue; } float getMaxValue() { return m_fMaxValue; } void setValue( float fVal ); float getValue(); void setMaxPeak( float fMax ); void setMinPeak( float fMin ); void setPeak_L( float peak ); float getPeak_L() { return m_fPeakValue_L; } void setPeak_R( float peak ); float getPeak_R() { return m_fPeakValue_R; } virtual void mousePressEvent(QMouseEvent *ev); virtual void mouseMoveEvent(QMouseEvent *ev); virtual void wheelEvent( QWheelEvent *ev ); virtual void paintEvent(QPaintEvent *ev); signals: void valueChanged(Fader *ref); private: bool m_bWithoutKnob; bool m_bUseIntSteps; float m_fPeakValue_L; float m_fPeakValue_R; float m_fMinPeak; float m_fMaxPeak; float m_fValue; float m_fMinValue; float m_fMaxValue; QPixmap m_back; QPixmap m_leds; QPixmap m_knob; }; class MasterFader : public QWidget, public H2Core::Object, public MidiLearnable { H2_OBJECT Q_OBJECT public: MasterFader(QWidget *pParent, bool bWithoutKnob = false); ~MasterFader(); void setMin( float fMin ); void setMax( float fMax ); float getMin() { return m_fMin; } float getMax() { return m_fMax; } void setValue( float newValue ); float getValue(); void setPeak_L( float peak ); float getPeak_L() { return m_fPeakValue_L; } void setPeak_R( float peak ); float getPeak_R() { return m_fPeakValue_R; } virtual void mousePressEvent( QMouseEvent *ev ); virtual void mouseMoveEvent( QMouseEvent *ev ); virtual void paintEvent( QPaintEvent *ev ); virtual void wheelEvent( QWheelEvent *ev ); signals: void valueChanged( MasterFader *ref ); private: bool m_bWithoutKnob; float m_fPeakValue_L; float m_fPeakValue_R; float m_fValue; float m_fMin; float m_fMax; QPixmap m_back; QPixmap m_leds; QPixmap m_knob; }; class Knob : public QWidget, public H2Core::Object, public MidiLearnable { H2_OBJECT Q_OBJECT public: Knob( QWidget* parent ); ~Knob(); void setValue( float fValue ); float getValue() { return m_fValue; } signals: void valueChanged( Knob *ref ); private: static QPixmap *m_background; int m_nWidgetWidth; int m_nWidgetHeight; float m_fValue; float m_fMousePressValue; float m_fMousePressY; virtual void paintEvent( QPaintEvent *ev ); virtual void mousePressEvent( QMouseEvent *ev ); virtual void mouseReleaseEvent( QMouseEvent *ev ); virtual void mouseMoveEvent( QMouseEvent *ev ); virtual void wheelEvent( QWheelEvent *ev ); }; #endif hydrogen-0.9.6-beta3/src/gui/src/widgets/LCD.cpp000066400000000000000000000224401211146647700212720ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "LCD.h" #include "../Skin.h" #include #include QPixmap* LCDDigit::m_pSmallBlueFontSet = NULL; QPixmap* LCDDigit::m_pSmallRedFontSet = NULL; QPixmap* LCDDigit::m_pLargeGrayFontSet = NULL; QPixmap* LCDDigit::m_pSmallGrayFontSet = NULL; const char* LCDDigit::__class_name = "LCDDigit"; LCDDigit::LCDDigit( QWidget * pParent, LCDType type ) : QWidget( pParent ) , Object( __class_name ) , m_type( type ) { setAttribute(Qt::WA_NoBackground); switch ( m_type ) { case SMALL_BLUE: case SMALL_RED: resize( 8, 11 ); break; case LARGE_GRAY: resize( 14, 16 ); break; case SMALL_GRAY: resize( 12, 11 ); break; } setMinimumSize( width(), height() ); setMaximumSize( width(), height() ); // Small blue FontSet image if (m_pSmallBlueFontSet == NULL ) { QString sSmallBlueFontSet = Skin::getImagePath() + "/lcd/LCDSmallBlueFontSet.png"; m_pSmallBlueFontSet = new QPixmap(); bool ok = m_pSmallBlueFontSet->load( sSmallBlueFontSet ); if( ok == false ) { ERRORLOG( "Error loading pixmap"); } } // Small red FontSet image if (m_pSmallRedFontSet == NULL ) { QString sSmallRedFontSet = Skin::getImagePath() + "/lcd/LCDSmallRedFontSet.png"; m_pSmallRedFontSet = new QPixmap(); bool ok = m_pSmallRedFontSet->load( sSmallRedFontSet ); if( ok == false ) { ERRORLOG( "Error loading pixmap" ); } } // Large gray FontSet image if (m_pLargeGrayFontSet == NULL ) { QString sLargeGrayFontSet = Skin::getImagePath() + "/lcd/LCDLargeGrayFontSet.png"; m_pLargeGrayFontSet = new QPixmap(); bool ok = m_pLargeGrayFontSet->load( sLargeGrayFontSet ); if( ok == false ) { ERRORLOG( "Error loading pixmap" ); } } // Small gray FontSet image if (m_pSmallGrayFontSet == NULL ) { QString sSmallGrayFontSet = Skin::getImagePath() + "/lcd/LCDSmallGrayFontSet.png"; m_pSmallGrayFontSet = new QPixmap(); bool ok = m_pSmallGrayFontSet->load( sSmallGrayFontSet ); if( ok == false ) { ERRORLOG( "Error loading pixmap" ); } } set( ' ' ); } LCDDigit::~LCDDigit() { // delete m_pSmallBlueFontSet; // m_pSmallBlueFontSet = NULL; // delete m_pSmallRedFontSet; // m_pSmallRedFontSet = NULL; } //void LCDDigit::mousePressEvent(QMouseEvent *ev) void LCDDigit::mouseReleaseEvent(QMouseEvent* ev) { UNUSED( ev ); emit digitClicked(); } void LCDDigit::paintEvent(QPaintEvent *ev) { UNUSED( ev ); int x = m_nCol * width(); int y = m_nRow * height(); QPainter painter(this); switch ( m_type ) { case SMALL_BLUE: painter.drawPixmap( rect(), *m_pSmallBlueFontSet, QRect( x, y, width(), height() ) ); break; case SMALL_RED: painter.drawPixmap( rect(), *m_pSmallRedFontSet, QRect( x, y, width(), height() ) ); break; case LARGE_GRAY: painter.drawPixmap( rect(), *m_pLargeGrayFontSet, QRect( x, y, width(), height() ) ); break; case SMALL_GRAY: painter.drawPixmap( rect(), *m_pSmallGrayFontSet, QRect( x, y, width(), height() ) ); break; default: ERRORLOG( "[paint] Unhandled type" ); painter.setPen(Qt::blue); painter.drawText(rect(), Qt::AlignCenter, "!"); } } void LCDDigit::set( char ch ) { int MAXCOL = 66; const char keymap[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', ' ', '-', ':', '/', '\\', ',', ';', '.', ' ', ' ', ' ', '#' }; for ( int n = 0; n < 77; n++ ) { //73 if ( keymap[ n ] == ch ) { m_nCol = n % MAXCOL; m_nRow = n / MAXCOL; break; } } update(); } void LCDDigit::setSmallRed() { if ( m_type != SMALL_RED ) { m_type = SMALL_RED; update(); } } void LCDDigit::setSmallBlue() { if ( m_type != SMALL_BLUE ) { m_type = SMALL_BLUE; update(); } } // :::::::::::::::::: const char* LCDDisplay::__class_name = "LCDDisplay"; LCDDisplay::LCDDisplay( QWidget * pParent, LCDDigit::LCDType type, int nDigits, bool leftAlign ) : QWidget( pParent ) , Object( __class_name ) , m_sMsg( "" ) , m_bLeftAlign( leftAlign ) { for ( int n = 0; n < nDigits; n++ ) { LCDDigit *pDigit = new LCDDigit( this, type ); if ( ( type == LCDDigit::LARGE_GRAY ) || ( type == LCDDigit::SMALL_GRAY ) ) { pDigit->move( pDigit->width() * n, 0 ); } else { pDigit->move( pDigit->width() * n + 2, 2 ); } connect( pDigit, SIGNAL( digitClicked() ), this, SLOT( digitClicked() ) ); m_pDisplay.push_back( pDigit ); } if ( ( type == LCDDigit::LARGE_GRAY ) || ( type == LCDDigit::SMALL_GRAY ) ) { int w = m_pDisplay[ 0 ]->width() * nDigits; int h = m_pDisplay[ 0 ]->height(); resize( w, h ); } else { int w = m_pDisplay[ 0 ]->width() * nDigits + 4; int h = m_pDisplay[ 0 ]->height() + 4; resize( w, h ); } setMinimumSize( width(), height() ); setMaximumSize( width(), height() ); setText( " "); QPalette defaultPalette; defaultPalette.setColor( QPalette::Background, QColor( 58, 62, 72 ) ); this->setPalette( defaultPalette ); } LCDDisplay::~LCDDisplay() { // for ( uint i = 0; i < m_pDisplay.size(); i++ ) { // delete m_pDisplay[ i ]; // } } void LCDDisplay::setText( const QString& sMsg ) { if ( sMsg == m_sMsg ) { return; } m_sMsg = sMsg; int nLen = sMsg.length(); if ( m_bLeftAlign ) { for ( int i = 0; i < (int)m_pDisplay.size(); ++i ) { if ( i < nLen ) { m_pDisplay[ i ]->set( sMsg.toLocal8Bit().at(i) ); } else { m_pDisplay[ i ]->set( ' ' ); } } } else { // right aligned int nPadding = 0; if ( nLen < (int)m_pDisplay.size() ) { nPadding = m_pDisplay.size() - nLen; } else { nLen = m_pDisplay.size(); } for ( int i = 0; i < nPadding; i++) { m_pDisplay[ i ]->set( ' ' ); } for ( int i = 0; i < nLen; i++ ) { m_pDisplay[ i + nPadding ]->set( sMsg.toLocal8Bit().at(i) ); } } } void LCDDisplay::setSmallRed() { for ( uint i = 0; i < m_pDisplay.size(); i++) { m_pDisplay[ i ]->setSmallRed(); } } void LCDDisplay::setSmallBlue() { for ( uint i = 0; i < m_pDisplay.size(); i++) { m_pDisplay[ i ]->setSmallBlue(); } } void LCDDisplay::digitClicked() { emit displayClicked( this ); } // ::::::::::::::::::: const char* LCDSpinBox::__class_name = "LCDSpinBox"; // used in PlayerControl LCDSpinBox::LCDSpinBox( QWidget *pParent, int nDigits, LCDSpinBoxType type, int nMin, int nMax ) : QWidget( pParent ) , Object( __class_name ) , m_type( type ) , m_fValue( 0 ) , m_nMinValue( nMin ) , m_nMaxValue( nMax ) { m_pDisplay = new LCDDisplay( this, LCDDigit::LARGE_GRAY, nDigits ); connect( m_pDisplay, SIGNAL( displayClicked(LCDDisplay*) ), this, SLOT( displayClicked(LCDDisplay*) ) ); resize( m_pDisplay->width(), m_pDisplay->height() ); setMinimumSize( width(), height() ); setMaximumSize( width(), height() ); setValue( 0 ); } LCDSpinBox::~LCDSpinBox() { delete m_pDisplay; // delete m_pUpBtn; // delete m_pDownBtn; } void LCDSpinBox::upBtnClicked() { switch( m_type ) { case INTEGER: if ( m_nMaxValue != -1 && m_fValue < m_nMaxValue ) { setValue( m_fValue + 1); } break; case FLOAT: if ( m_nMaxValue != -1 && m_fValue < (float)m_nMaxValue ) { setValue( m_fValue + 1.0); } break; } emit changed(this); } void LCDSpinBox::downBtnClicked() { switch( m_type ) { case INTEGER: if ( m_nMinValue != -1 && m_fValue > m_nMinValue ) { setValue( m_fValue -1); } break; case FLOAT: if ( m_nMinValue != -1 && m_fValue > m_nMinValue ) { setValue( m_fValue - 1.0); } break; } emit changed(this); } void LCDSpinBox::setValue( float nValue ) { switch ( m_type ) { case INTEGER: if ( nValue != m_fValue ) { m_fValue = (int)nValue; m_pDisplay->setText( QString( "%1" ).arg( m_fValue ) ); } break; case FLOAT: if ( nValue != m_fValue ) { m_fValue = nValue; QString floatString; floatString.setNum( m_fValue , 'f' , 6 ); m_pDisplay->setText( floatString ); } break; } } void LCDSpinBox::displayClicked( LCDDisplay *pRef ) { UNUSED( pRef ); emit spinboxClicked(); } void LCDSpinBox::wheelEvent ( QWheelEvent *ev ) { ev->accept(); if ( ev->delta() > 0 ) { switch( m_type ) { case INTEGER: setValue( m_fValue + 1); break; case FLOAT: setValue( m_fValue + 1.0); break; } emit changed(this); } else { switch( m_type ) { case INTEGER: setValue( m_fValue -1); break; case FLOAT: setValue( m_fValue - 1.0); break; } emit changed(this); } } hydrogen-0.9.6-beta3/src/gui/src/widgets/LCD.h000066400000000000000000000054251211146647700207430ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef LCD_H #define LCD_H #include #include #include class LCDDigit : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: enum LCDType { SMALL_BLUE, SMALL_RED, LARGE_GRAY, SMALL_GRAY }; LCDDigit( QWidget *pParent, LCDType type ); ~LCDDigit(); void set( char ch ); void setSmallRed(); void setSmallBlue(); signals: void digitClicked(); private: static QPixmap *m_pSmallBlueFontSet; static QPixmap *m_pSmallRedFontSet; static QPixmap *m_pLargeGrayFontSet; static QPixmap *m_pSmallGrayFontSet; int m_nCol; int m_nRow; LCDType m_type; virtual void paintEvent(QPaintEvent *ev); virtual void mouseReleaseEvent(QMouseEvent* ev); }; class LCDDisplay : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: LCDDisplay( QWidget * pParent, LCDDigit::LCDType type, int nDigits, bool leftAlign = false ); ~LCDDisplay(); void setText( const QString& sMsg ); QString getText() { return m_sMsg; } void setSmallRed(); void setSmallBlue(); public slots: void digitClicked(); signals: void displayClicked( LCDDisplay* pRef ); private: std::vector m_pDisplay; QString m_sMsg; bool m_bLeftAlign; }; class LCDSpinBox : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: enum LCDSpinBoxType { INTEGER, FLOAT }; LCDSpinBox( QWidget *pParent, int nDigits, LCDSpinBoxType type, int nMin = -1, int nMax = -1 ); ~LCDSpinBox(); void setValue( float nValue ); float getValue() { return m_fValue; } virtual void wheelEvent( QWheelEvent *ev ); // richiamati da PlayerControl void upBtnClicked(); void downBtnClicked(); signals: void changed(LCDSpinBox *pRef); void spinboxClicked(); public slots: void displayClicked( LCDDisplay *pRef ); private: LCDSpinBoxType m_type; LCDDisplay* m_pDisplay; float m_fValue; int m_nMinValue; int m_nMaxValue; }; #endif hydrogen-0.9.6-beta3/src/gui/src/widgets/LCDCombo.cpp000066400000000000000000000076111211146647700222550ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "LCDCombo.h" #include "../Skin.h" #include "LCD.h" #include "Button.h" #include const QString LCDCombo::SEPARATOR("--sep--"); const char* LCDCombo::__class_name = "LCDCombo"; LCDCombo::LCDCombo(QWidget *pParent, int digits) : QWidget(pParent) , Object( __class_name ) //, SEPARATOR("--sep--") { INFOLOG( "INIT" ); QStringList items; display = new LCDDisplay( this, LCDDigit::SMALL_BLUE, digits, false); button = new Button( this, "/patternEditor/btn_dropdown_on.png", "/patternEditor/btn_dropdown_off.png", "/patternEditor/btn_dropdown_over.png", QSize(13, 13) ); pop = new QMenu( this ); size = digits; active = 0; button->move( ( digits * 8 ) + 5 , 1 ); setFixedSize( ( digits * 8 ) + 17, display->height() ); connect( button, SIGNAL( clicked( Button* ) ), this, SLOT( onClick( Button* ) ) ); update(); connect( pop, SIGNAL( triggered(QAction*) ), this, SLOT( changeText(QAction*) ) ); //_WARNINGLOG("items:"+items[0]); } LCDCombo::~LCDCombo() { } QString LCDCombo::getText() { return display->getText(); }; void LCDCombo::changeText(QAction* pAction) { //_WARNINGLOG("triggered"); // display->setText(pAction->text()); // emit valueChanged( pAction->text() ); set_text( pAction->text() ); } void LCDCombo::onClick(Button*) { pop->popup( display->mapToGlobal( QPoint( 1, display->height() + 2 ) ) ); } int LCDCombo::length() { return size; } void LCDCombo::update() { //INFOLOG ( "update: "+toString(items.size()) ); pop->clear(); for( int i = 0; i < items.size(); i++ ) { if ( items.at(i) != SEPARATOR ){ pop->addAction( items.at(i) ); }else{ pop->addSeparator(); } } } int LCDCombo::count() { return items.size(); } bool LCDCombo::addItem( const QString &text ) { //INFOLOG( "add item" ); if ( text.size() <= size ){ items.append( text ); return true; }else{ return false; } } void LCDCombo::addSeparator() { items.append( SEPARATOR ); } inline void LCDCombo::insertItem( int index, const QString &text ) { if(text.size()<=length()){ items.insert(index,text); update(); } } void LCDCombo::mousePressEvent(QMouseEvent *ev) { UNUSED( ev ); pop->popup( display->mapToGlobal( QPoint( 1, display->height() + 2 ) ) ); } void LCDCombo::wheelEvent( QWheelEvent * ev ) { ev->ignore(); const int n = items.size(); const int d = ( ev->delta() > 0 ) ? -1: 1; active = ( n + active + d ) % n; if ( items.at( active ) == SEPARATOR ) active = ( n + active + d ) % n; set_text( items.at( active ) ); } void LCDCombo::set_text( const QString &text) { if (display->getText() == text) { return; } //INFOLOG( text ); display->setText( text ); for ( int i = 0; i < items.size(); i++ ) { if ( items.at(i) == text ) active = i; } emit valueChanged( text ); } void LCDCombo::set_text( const QString &text, bool emit_on_change) { if (display->getText() == text) { return; } //INFOLOG( text ); display->setText( text ); for ( int i = 0; i < items.size(); i++ ) { if ( items.at(i) == text ) active = i; } if(emit_on_change) emit valueChanged( text ); } hydrogen-0.9.6-beta3/src/gui/src/widgets/LCDCombo.h000066400000000000000000000033601211146647700217170ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef LCDCOMBO_H #define LCDCOMBO_H #include #include class Button; class LCDDisplay; class LCDCombo : public QWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: LCDCombo(QWidget *pParent, int digits = 5); ~LCDCombo(); int count(); int length(); void update(); QString getText(); bool addItem(const QString &text ); void addSeparator(); inline void insertItem(int index, const QString &text ); void set_text( const QString &text ); void set_text( const QString &text, bool ); private slots: void changeText(QAction*); void onClick(Button*); signals: void valueChanged( QString str ); private: QStringList items; LCDDisplay *display; Button *button; QMenu *pop; int size; int active; static const QString SEPARATOR; virtual void mousePressEvent(QMouseEvent *ev); virtual void wheelEvent( QWheelEvent * ev ); }; #endif hydrogen-0.9.6-beta3/src/gui/src/widgets/MidiActivityWidget.cpp000066400000000000000000000053001211146647700244270ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "../Skin.h" #include "../HydrogenApp.h" #include "MidiActivityWidget.h" #include #include #include #include #include const char* MidiActivityWidget::__class_name = "MidiActivityWidget"; MidiActivityWidget::MidiActivityWidget( QWidget * parent ) : QWidget( parent ) , Object( __class_name ) , m_bValue( false ) { setAttribute(Qt::WA_NoBackground); static const uint WIDTH = 58; static const uint HEIGHT = 9; resize( WIDTH, HEIGHT ); setMinimumSize( width(), height() ); setMaximumSize( width(), height() ); // Background image bool ok = m_back.load( Skin::getImagePath() + "/playerControlPanel/midiActivity_back.png" ); if( ok == false ) { ERRORLOG("Error loading pixmap"); } // Leds image ok = m_leds.load( Skin::getImagePath() + "/playerControlPanel/midiActivity_on.png" ); if( ok == false ) { ERRORLOG( "Error loading pixmap" ); } HydrogenApp::get_instance()->addEventListener(this); m_qTimer = new QTimer(this); connect( m_qTimer, SIGNAL( timeout() ), this, SLOT( restoreMidiActivityWidget() ) ); } /** * Destructor */ MidiActivityWidget::~MidiActivityWidget() { } void MidiActivityWidget::mousePressEvent(QMouseEvent *ev) { UNUSED( ev ); } void MidiActivityWidget::paintEvent( QPaintEvent*) { if ( !isVisible() ) { return; } QPainter painter(this); if (m_bValue ) { // bitBlt( this, 0, 0, &m_leds, 0, 0, width(), height(), CopyROP, true); painter.drawPixmap( rect(), m_leds, rect() ); } else { // bitBlt( this, 0, 0, &m_back, 0, 0, width(), height(), CopyROP, true); painter.drawPixmap( rect(), m_back, rect() ); } } void MidiActivityWidget::restoreMidiActivityWidget() { m_bValue = false; update(); m_qTimer->stop(); } void MidiActivityWidget::midiActivityEvent() { m_qTimer->stop(); m_bValue = true; update(); m_qTimer->start( 100 ); } hydrogen-0.9.6-beta3/src/gui/src/widgets/MidiActivityWidget.h000066400000000000000000000026441211146647700241040ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef MIDI_ACTIVITY_WIDGET_H #define MIDI_ACTIVITY_WIDGET_H #include #include "../EventListener.h" #include class MidiActivityWidget : public QWidget, public EventListener, public H2Core::Object { H2_OBJECT Q_OBJECT public: MidiActivityWidget(QWidget * parent); ~MidiActivityWidget(); void mousePressEvent(QMouseEvent *ev); void paintEvent(QPaintEvent *ev); public slots: void restoreMidiActivityWidget(); private: bool m_bValue; QTimer *m_qTimer; QPixmap m_back; QPixmap m_leds; virtual void midiActivityEvent(); }; #endif hydrogen-0.9.6-beta3/src/gui/src/widgets/MidiLearnable.h000066400000000000000000000025101211146647700230210ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef MIDILEARNABLE_H #define MIDILEARNABLE_H #include /* Every widget which supports MidiLearn should derive from this Class. */ class MidiLearnable { public: MidiLearnable(){ m_action = NULL; } ~MidiLearnable(){ if( m_action != NULL) delete m_action; } void setAction( MidiAction *action ){ m_action = action; } MidiAction* getAction(){ return m_action; } private: MidiAction *m_action; }; #endif // MIDILEARNABLE_H hydrogen-0.9.6-beta3/src/gui/src/widgets/MidiSenseWidget.cpp000066400000000000000000000063301211146647700237140ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "hydrogen/midi_map.h" #include "MidiSenseWidget.h" #include const char* MidiSenseWidget::__class_name = "MidiSenseWidget"; MidiSenseWidget::MidiSenseWidget(QWidget* pParent, bool directWr , MidiAction* midiAction ): QDialog( pParent ) , Object(__class_name) { directWrite = directWr; action = midiAction; setWindowTitle( "Waiting.." ); setFixedSize( 280, 100 ); m_pURLLabel = new QLabel( this ); m_pURLLabel->setAlignment( Qt::AlignCenter ); if(action != NULL){ m_pURLLabel->setText( "Waiting for midi input..." ); } else{ /* * Check if this widget got called from the midiTable in the preferences * window(directWrite=false) or by clicking on a midiLearn-capable gui item(directWrite=true) */ if(directWrite){ m_pURLLabel->setText( "This element is not midi operable." ); } else { m_pURLLabel->setText( "Waiting for midi input..." ); } } QVBoxLayout* pVBox = new QVBoxLayout( this ); pVBox->addWidget( m_pURLLabel ); setLayout( pVBox ); H2Core::Hydrogen *pEngine = H2Core::Hydrogen::get_instance(); pEngine->lastMidiEvent = ""; pEngine->lastMidiEventParameter = 0; m_pUpdateTimer = new QTimer( this ); connect( m_pUpdateTimer, SIGNAL( timeout() ), this, SLOT( updateMidi() ) ); m_pUpdateTimer->start( 100 ); }; MidiSenseWidget::~MidiSenseWidget(){ INFOLOG("DESTROY"); m_pUpdateTimer->stop(); } void MidiSenseWidget::updateMidi(){ H2Core::Hydrogen *pEngine = H2Core::Hydrogen::get_instance(); if( !pEngine->lastMidiEvent.isEmpty() ){ lastMidiEvent = pEngine->lastMidiEvent; lastMidiEventParameter = pEngine->lastMidiEventParameter; if( directWrite ){ //write the action / parameter combination to the midiMap MidiMap *mM = MidiMap::get_instance(); assert(action); MidiAction* pAction = new MidiAction( action->getType() ); //if( action->getParameter1() != 0){ pAction->setParameter1( action->getParameter1() ); //} if( lastMidiEvent.left(2) == "CC" ){ mM->registerCCEvent( lastMidiEventParameter , pAction ); } if( lastMidiEvent.left(3) == "MMC" ){ mM->registerMMCEvent( lastMidiEvent , pAction ); } if( lastMidiEvent.left(4) == "NOTE" ){ mM->registerNoteEvent( lastMidiEvent.toInt() , pAction ); } } close(); } } hydrogen-0.9.6-beta3/src/gui/src/widgets/MidiSenseWidget.h000066400000000000000000000026311211146647700233610ustar00rootroot00000000000000 /* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef MIDISENSE_WIDGET_H #define MIDISENSE_WIDGET_H #include #include #include class MidiSenseWidget : public QDialog ,public H2Core::Object { H2_OBJECT Q_OBJECT public: MidiSenseWidget(QWidget*,bool directWrite = false , MidiAction* action = NULL); ~MidiSenseWidget(); QString lastMidiEvent; int lastMidiEventParameter; private slots: void updateMidi(); private: QTimer* m_pUpdateTimer; QLabel* m_pURLLabel; MidiAction* action; bool directWrite; }; #endif hydrogen-0.9.6-beta3/src/gui/src/widgets/PixmapWidget.cpp000066400000000000000000000050331211146647700232710ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "PixmapWidget.h" #include "../Skin.h" #include #include const char* PixmapWidget::__class_name = "PixmapWidget"; PixmapWidget::PixmapWidget( QWidget *pParent, const char* sClassName ) : Object( __class_name ) , QWidget( pParent ) , m_sPixmapPath( "" ) , __expand_horiz(false) { // draw the background: slower but useful with transparent images! //setAttribute(Qt::WA_NoBackground); __color = QColor(200, 0, 0); } PixmapWidget::~PixmapWidget() { } void PixmapWidget::setColor(const QColor& color) { if (__color == color) { return; } __color = color; update(); } void PixmapWidget::setPixmap( QString sPixmapPath, bool expand_horiz ) { if ( m_sPixmapPath == sPixmapPath ) { return; } m_sPixmapPath = sPixmapPath; __expand_horiz = expand_horiz; bool ok = m_pixmap.load( Skin::getImagePath() + sPixmapPath ); if ( !ok ) { _INFOLOG( QString( "Error loading: %1%2").arg( Skin::getImagePath() ).arg( sPixmapPath ) ); } resize( m_pixmap.width(), m_pixmap.height() ); update(); } void PixmapWidget::paintEvent( QPaintEvent* ev) { QWidget::paintEvent(ev); QPainter painter(this); if ( m_pixmap.isNull() ) { painter.fillRect( ev->rect(), __color ); } else { if (__expand_horiz) { static int w = 10; static int h = m_pixmap.height(); // central section, scaled painter.drawPixmap( QRect(w, 0, width() - w * 2, h), m_pixmap, QRect(10, 0, w, h) ); // left side painter.drawPixmap( QRect(0, 0, w, h), m_pixmap, QRect(0, 0, w, h) ); // right side painter.drawPixmap( QRect(width() - w, 0, w, h), m_pixmap, QRect(m_pixmap.width() - w, 0, w, h) ); } else { painter.drawPixmap( ev->rect(), m_pixmap, ev->rect() ); } } } hydrogen-0.9.6-beta3/src/gui/src/widgets/PixmapWidget.h000066400000000000000000000025501211146647700227370ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef PIXMAP_WIDGET_H #define PIXMAP_WIDGET_H #include #include class PixmapWidget : public H2Core::Object, public QWidget { H2_OBJECT public: PixmapWidget( QWidget *pParent, const char* = "PixmapWidget" ); ~PixmapWidget(); void setPixmap( QString sPixmapPath, bool expand_horiz = false ); void setColor( const QColor& color ); protected: QString m_sPixmapPath; QColor __color; QPixmap m_pixmap; bool __expand_horiz; virtual void paintEvent( QPaintEvent* ev); }; #endif hydrogen-0.9.6-beta3/src/gui/src/widgets/Rotary.cpp000066400000000000000000000131721211146647700221520ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "Rotary.h" #include "LCD.h" #include "../Skin.h" #include RotaryTooltip::RotaryTooltip( QPoint pos ) // : QWidget( 0, "RotaryTooltip", Qt::WStyle_Customize| Qt::WStyle_NoBorder | Qt::WStyle_StaysOnTop| Qt::WX11BypassWM ) : QWidget( 0, Qt::ToolTip ) { UNUSED( pos ); m_pDisplay = new LCDDisplay( this, LCDDigit::SMALL_BLUE, 4); m_pDisplay->move( 0, 0 ); resize( m_pDisplay->size() ); QPalette defaultPalette; defaultPalette.setColor( QPalette::Background, QColor( 49, 53, 61 ) ); this->setPalette( defaultPalette ); } void RotaryTooltip::showTip( QPoint pos, QString sText ) { move( pos ); m_pDisplay->setText( sText ); show(); } RotaryTooltip::~RotaryTooltip() { // delete m_pDisplay; } /////////////////// QPixmap* Rotary::m_background_normal = NULL; QPixmap* Rotary::m_background_center = NULL; const char* Rotary::__class_name = "Rotary"; Rotary::Rotary( QWidget* parent, RotaryType type, QString sToolTip, bool bUseIntSteps, bool bUseValueTip ) : QWidget( parent ) , Object( __class_name ) , m_bUseIntSteps( bUseIntSteps ) , m_type( type ) , m_fMin( 0.0 ) , m_fMax( 1.0 ) , m_bShowValueToolTip( bUseValueTip ) { setAttribute(Qt::WA_NoBackground); setToolTip( sToolTip ); m_pValueToolTip = new RotaryTooltip( mapToGlobal( QPoint( 0, 0 ) ) ); m_nWidgetWidth = 28; m_nWidgetHeight = 26; m_fValue = 0.0; if ( m_background_normal == NULL ) { m_background_normal = new QPixmap(); if ( m_background_normal->load( Skin::getImagePath() + "/mixerPanel/rotary_images.png" ) == false ){ ERRORLOG( "Error loading pixmap" ); } } if ( m_background_center == NULL ) { m_background_center = new QPixmap(); if ( m_background_center->load( Skin::getImagePath() + "/mixerPanel/rotary_center_images.png" ) == false ){ ERRORLOG( "Error loading pixmap" ); } } resize( m_nWidgetWidth, m_nWidgetHeight ); // m_temp.resize( m_nWidgetWidth, m_nWidgetHeight ); } Rotary::~ Rotary() { delete m_pValueToolTip; } void Rotary::paintEvent( QPaintEvent* ev ) { UNUSED( ev ); QPainter painter(this); float fRange = fabs( m_fMax ) + fabs( m_fMin ); float fValue = fabs( m_fMin ) + m_fValue; int nFrame; if ( m_bUseIntSteps ) { nFrame = (int)( 63.0 * ( (int)fValue / fRange ) ); } else { nFrame = (int)( 63.0 * ( fValue / fRange ) ); } // INFOLOG( "\nrange: " + toString( fRange ) ); // INFOLOG( "norm value: " + toString( fValue ) ); // INFOLOG( "frame: " + toString( nFrame ) ); if ( m_type == TYPE_NORMAL ) { int xPos = m_nWidgetWidth * nFrame; painter.drawPixmap( rect(), *m_background_normal, QRect( xPos, 0, m_nWidgetWidth, m_nWidgetHeight ) ); } else { // the image is broken... if ( nFrame > 62 ) { nFrame = 62; } int xPos = m_nWidgetWidth * nFrame; painter.drawPixmap( rect(), *m_background_center, QRect( xPos, 0, m_nWidgetWidth, m_nWidgetHeight ) ); } } void Rotary::setValue( float fValue ) { if ( fValue == m_fValue ) { return; } if ( fValue < m_fMin ) { fValue = m_fMin; } else if ( fValue > m_fMax ) { fValue = m_fMax; } if ( fValue != m_fValue ) { m_fValue = fValue; update(); } } void Rotary::mousePressEvent(QMouseEvent *ev) { setCursor( QCursor( Qt::SizeVerCursor ) ); m_fMousePressValue = m_fValue; m_fMousePressY = ev->y(); if ( m_bShowValueToolTip ) { char tmp[20]; sprintf( tmp, "%#.2f", m_fValue ); m_pValueToolTip->showTip( mapToGlobal( QPoint( -38, 1 ) ), QString( tmp ) ); } if ( ev->button() == Qt::LeftButton && ev->modifiers() == Qt::ShiftModifier ){ MidiSenseWidget midiSense( this, true, this->getAction() ); midiSense.exec(); } } void Rotary::mouseReleaseEvent( QMouseEvent *ev ) { UNUSED( ev ); setCursor( QCursor( Qt::ArrowCursor ) ); m_pValueToolTip->hide(); } void Rotary::wheelEvent ( QWheelEvent *ev ) { ev->accept(); float stepfactor = 5.0; // course adjustment float delta = 1.0; // Control Modifier = fine adjustment if (ev->modifiers() == Qt::ControlModifier) { stepfactor = 1.0; } if ( !m_bUseIntSteps ) { float fRange = fabs( m_fMax ) + fabs( m_fMin ); delta = fRange / 100.0; } if ( ev->delta() < 0 ) { delta = delta * -1.0; } setValue( getValue() + (delta * stepfactor) ); emit valueChanged(this); } void Rotary::mouseMoveEvent( QMouseEvent *ev ) { float fRange = fabs( m_fMax ) + fabs( m_fMin ); float deltaY = ev->y() - m_fMousePressY; float fNewValue = ( m_fMousePressValue - ( deltaY / 100.0 * fRange ) ); setValue( fNewValue ); emit valueChanged(this); if ( m_bShowValueToolTip ) { char tmp[20]; sprintf( tmp, "%#.2f", m_fValue ); m_pValueToolTip->showTip( mapToGlobal( QPoint( -38, 1 ) ), QString( tmp ) ); } } void Rotary::setMin( float fMin ) { m_fMin = fMin; update(); } float Rotary::getMin() { return m_fMin; } void Rotary::setMax( float fMax ) { m_fMax = fMax; update(); } float Rotary::getMax() { return m_fMax; } hydrogen-0.9.6-beta3/src/gui/src/widgets/Rotary.h000066400000000000000000000045221211146647700216160ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef ROTARY_H #define ROTARY_H #include "MidiLearnable.h" #include "MidiSenseWidget.h" #include class LCDDisplay; #include class RotaryTooltip : public QWidget { public: RotaryTooltip( QPoint pos ); ~RotaryTooltip(); void showTip( QPoint pos, QString sText ); private: LCDDisplay *m_pDisplay; }; class Rotary : public QWidget, public H2Core::Object, public MidiLearnable { H2_OBJECT Q_OBJECT public: enum RotaryType { TYPE_NORMAL, TYPE_CENTER }; Rotary( QWidget* parent, RotaryType type, QString sToolTip, bool bUseIntSteps, bool bUseValueTip ); ~Rotary(); void setMin( float fMin ); float getMin(); void setMax( float fMax ); float getMax(); void setValue( float fValue ); float getValue() { if ( m_bUseIntSteps ) { int val = (int)m_fValue; return val; } else return m_fValue; } signals: void valueChanged(Rotary *ref); private: bool m_bUseIntSteps; RotaryType m_type; static QPixmap* m_background_normal; static QPixmap* m_background_center; int m_nWidgetWidth; int m_nWidgetHeight; float m_fMin; float m_fMax; float m_fValue; float m_fMousePressValue; float m_fMousePressY; RotaryTooltip *m_pValueToolTip; bool m_bShowValueToolTip; virtual void paintEvent(QPaintEvent *ev); virtual void mousePressEvent(QMouseEvent *ev); virtual void mouseReleaseEvent( QMouseEvent *ev ); virtual void mouseMoveEvent(QMouseEvent *ev); virtual void wheelEvent( QWheelEvent *ev ); }; #endif hydrogen-0.9.6-beta3/src/gui/src/widgets/midiTable.cpp000066400000000000000000000162211211146647700225620ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "../Skin.h" #include "MidiSenseWidget.h" #include "midiTable.h" #include #include #include #include #include const char* MidiTable::__class_name = "MidiTable"; MidiTable::MidiTable( QWidget *pParent ) : QTableWidget( pParent ) , Object( __class_name ) { __row_count = 0; setupMidiTable(); m_pUpdateTimer = new QTimer( this ); currentMidiAutosenseRow = 0; } MidiTable::~MidiTable() { for( int myRow = 0; myRow <= __row_count ; myRow++ ) { delete cellWidget( myRow, 0 ); delete cellWidget( myRow, 1 ); delete cellWidget( myRow, 2 ); delete cellWidget( myRow, 3 ); } } void MidiTable::midiSensePressed( int row ){ currentMidiAutosenseRow = row; MidiSenseWidget mW( this ); mW.exec(); QComboBox * eventCombo = dynamic_cast ( cellWidget( row, 1 ) ); QSpinBox * eventSpinner = dynamic_cast ( cellWidget( row, 2 ) ); eventCombo->setCurrentIndex( eventCombo->findText( mW.lastMidiEvent ) ); eventSpinner->setValue( mW.lastMidiEventParameter ); m_pUpdateTimer->start( 100 ); } void MidiTable::updateTable() { if( __row_count > 0 ) { QComboBox * eventCombo = dynamic_cast ( cellWidget( __row_count - 1, 1 ) ); QComboBox * actionCombo = dynamic_cast ( cellWidget( __row_count - 1, 3 ) ); if( eventCombo == NULL || actionCombo == NULL) return; if( actionCombo->currentText() != "" && eventCombo->currentText() != "" ) { insertNewRow("", "", 0, 0); } } } void MidiTable::insertNewRow(QString actionString , QString eventString, int eventParameter , int actionParameter) { MidiActionManager *aH = MidiActionManager::get_instance(); insertRow( __row_count ); int oldRowCount = __row_count; ++__row_count; QPushButton *midiSenseButton = new QPushButton(this); midiSenseButton->setIcon(QIcon(Skin::getImagePath() + "/preferencesDialog/rec.png")); midiSenseButton->setToolTip( trUtf8("press button to record midi event") ); QSignalMapper *signalMapper = new QSignalMapper(this); connect(midiSenseButton, SIGNAL( clicked()), signalMapper, SLOT( map() )); signalMapper->setMapping( midiSenseButton, oldRowCount ); connect( signalMapper, SIGNAL(mapped( int ) ), this, SLOT( midiSensePressed(int) ) ); setCellWidget( oldRowCount, 0, midiSenseButton ); QComboBox *eventBox = new QComboBox(); connect( eventBox , SIGNAL( currentIndexChanged( int ) ) , this , SLOT( updateTable() ) ); eventBox->insertItems( oldRowCount , aH->getEventList() ); eventBox->setCurrentIndex( eventBox->findText(eventString) ); setCellWidget( oldRowCount, 1, eventBox ); QSpinBox *eventParameterSpinner = new QSpinBox(); setCellWidget( oldRowCount , 2, eventParameterSpinner ); eventParameterSpinner->setMaximum( 999 ); eventParameterSpinner->setValue( eventParameter ); QComboBox *actionBox = new QComboBox(); connect( actionBox , SIGNAL( currentIndexChanged( int ) ) , this , SLOT( updateTable() ) ); actionBox->insertItems( oldRowCount, aH->getActionList()); actionBox->setCurrentIndex ( actionBox->findText( actionString ) ); setCellWidget( oldRowCount , 3, actionBox ); QSpinBox *actionParameterSpinner = new QSpinBox(); setCellWidget( oldRowCount , 4, actionParameterSpinner ); actionParameterSpinner->setValue( actionParameter); actionParameterSpinner->setMaximum( 999 ); } void MidiTable::setupMidiTable() { MidiMap *mM = MidiMap::get_instance(); QStringList items; items << "" << trUtf8("Event") << trUtf8("Param.") << trUtf8("Action") << trUtf8("Param.") ; setRowCount( 0 ); setColumnCount( 5 ); verticalHeader()->hide(); setHorizontalHeaderLabels( items ); setFixedWidth( 500 ); setColumnWidth( 0 , 25 ); setColumnWidth( 1 , 155 ); setColumnWidth( 2, 73 ); setColumnWidth( 3, 175 ); setColumnWidth( 4 , 73 ); bool ok; std::map< QString , MidiAction* > mmcMap = mM->getMMCMap(); std::map< QString , MidiAction* >::iterator dIter( mmcMap.begin() ); for( dIter = mmcMap.begin(); dIter != mmcMap.end(); dIter++ ) { MidiAction * pAction = dIter->second; QString actionParameter; int actionParameterInteger = 0; actionParameter = pAction->getParameter1(); actionParameterInteger = actionParameter.toInt(&ok,10); insertNewRow(pAction->getType() , dIter->first , 0 , actionParameterInteger ); } for( int note = 0; note < 128; note++ ) { MidiAction * pAction = mM->getNoteAction( note ); QString actionParameter; int actionParameterInteger = 0; actionParameter = pAction->getParameter1(); actionParameterInteger = actionParameter.toInt(&ok,10); if ( pAction->getType() == "NOTHING" ) continue; insertNewRow(pAction->getType() , "NOTE" , note , actionParameterInteger ); } for( int parameter = 0; parameter < 128; parameter++ ){ MidiAction * pAction = mM->getCCAction( parameter ); QString actionParameter; int actionParameterInteger = 0; actionParameter = pAction->getParameter1(); actionParameterInteger = actionParameter.toInt(&ok,10); if ( pAction->getType() == "NOTHING" ) continue; insertNewRow(pAction->getType() , "CC" , parameter , actionParameterInteger ); } insertNewRow( "", "", 0, 0 ); } void MidiTable::saveMidiTable() { MidiMap *mM = MidiMap::get_instance(); for ( int row = 0; row < __row_count; row++ ) { QComboBox * eventCombo = dynamic_cast ( cellWidget( row, 1 ) ); QSpinBox * eventSpinner = dynamic_cast ( cellWidget( row, 2 ) ); QComboBox * actionCombo = dynamic_cast ( cellWidget( row, 3 ) ); QSpinBox * actionSpinner = dynamic_cast ( cellWidget( row, 4 ) ); QString eventString; QString actionString; if( !eventCombo->currentText().isEmpty() && !actionCombo->currentText().isEmpty() ){ eventString = eventCombo->currentText(); actionString = actionCombo->currentText(); MidiAction* pAction = new MidiAction( actionString ); if( actionSpinner->cleanText() != ""){ pAction->setParameter1( actionSpinner->cleanText() ); } if( eventString.left(2) == "CC" ){ mM->registerCCEvent( eventSpinner->cleanText().toInt() , pAction ); } if( eventString.left(3) == "MMC" ){ mM->registerMMCEvent( eventString , pAction ); } if( eventString.left(4) == "NOTE" ){ mM->registerNoteEvent( eventSpinner->cleanText().toInt() , pAction ); } } } } hydrogen-0.9.6-beta3/src/gui/src/widgets/midiTable.h000066400000000000000000000025561211146647700222350ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef MIDI_TABLE_H #define MIDI_TABLE_H #include #include class MidiTable : public QTableWidget, public H2Core::Object { H2_OBJECT Q_OBJECT public: MidiTable( QWidget* pParent ); ~MidiTable(); void setupMidiTable(); void saveMidiTable(); void insertNewRow(QString, QString, int, int); private slots: void updateTable(); void midiSensePressed( int ); private: int __row_count; int currentMidiAutosenseRow; QSignalMapper *signalMapper; QTimer* m_pUpdateTimer; }; #endif hydrogen-0.9.6-beta3/src/player/000077500000000000000000000000001211146647700164355ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/player/CMakeLists.txt000066400000000000000000000007551211146647700212040ustar00rootroot00000000000000 FILE(GLOB_RECURSE h2player_SRCS *.cpp) INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/src/core/include # core headers ${CMAKE_BINARY_DIR}/src/core/include # generated config.h ${QT_INCLUDES} ) ADD_EXECUTABLE(h2player WIN32 MACOSX_BUNDLE ${h2player_SRCS} ) TARGET_LINK_LIBRARIES(h2player hydrogen-core-${VERSION} ${QT_QTGUI_LIBRARY} ) ADD_DEPENDENCIES(h2player hydrogen-core-${VERSION}) INSTALL(TARGETS h2player RUNTIME DESTINATION bin BUNDLE DESTINATION bin ) hydrogen-0.9.6-beta3/src/player/main.cpp000066400000000000000000000065171211146647700200760ustar00rootroot00000000000000/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include #include #include using std::cout; using std::endl; #include void usage() { cout << "Usage: hydrogenPlayer song.h2song" << endl; exit(0); } int main(int argc, char** argv) { int log_level = H2Core::Logger::Debug | H2Core::Logger::Info | H2Core::Logger::Warning | H2Core::Logger::Error; H2Core::Logger* logger = H2Core::Logger::bootstrap( log_level ); H2Core::Object::bootstrap( logger, logger->should_log(H2Core::Logger::Debug) ); ___INFOLOG( "test" ); if (argc != 2) { usage(); } cout << "Hydrogen player starting..." << endl << endl; QApplication a(argc, argv); QString filename = argv[1]; H2Core::Preferences *preferences = H2Core::Preferences::get_instance(); H2Core::AudioEngine::get_instance(); H2Core::Song *pSong = H2Core::Song::load( filename ); if (pSong == NULL) { cout << "Error loading song!" << endl; } H2Core::Hydrogen *hydrogen = H2Core::Hydrogen::get_instance(); hydrogen->setSong(pSong); cout << "Press b for rewind from beginning" << endl; cout << "Press p for play" << endl; cout << "Press s for stop" << endl; cout << "Press q for quit" << endl; cout << "f = show frames" << endl; char pippo; while (true) { pippo = getchar(); switch( pippo ) { case 'q': cout << endl << "HydrogenPlayer shutdown..." << endl; hydrogen->sequencer_stop(); delete hydrogen; delete pSong; delete H2Core::EventQueue::get_instance(); delete H2Core::AudioEngine::get_instance(); delete preferences; delete H2Core::Logger::get_instance(); std::cout << std::endl << std::endl << H2Core::Object::objects_count() << " alive objects" << std::endl << std::endl; H2Core::Object::write_objects_map_to_cerr(); exit(0); break; case 'p': hydrogen->sequencer_play(); break; case 's': hydrogen->sequencer_stop(); break; case 'b': hydrogen->setPatternPos( 0 ); break; case 'f': cout << "Frames = " << hydrogen->getTotalFrames() << endl; break; case 'd': cout << "DEBUG" << endl; H2Core::Object::write_objects_map_to_cerr(); int nObj = H2Core::Object::objects_count(); std::cout << std::endl << std::endl << nObj << " alive objects" << std::endl << std::endl; break; } } } hydrogen-0.9.6-beta3/src/plugins/000077500000000000000000000000001211146647700166225ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/plugins/plugins.pro000066400000000000000000000000421211146647700210210ustar00rootroot00000000000000TEMPLATE = subdirs SUBDIRS = wasp hydrogen-0.9.6-beta3/src/plugins/wasp/000077500000000000000000000000001211146647700175745ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/plugins/wasp/AUTHORS000066400000000000000000000005471211146647700206520ustar00rootroot00000000000000Artemiy Pavlov - project author, maintainer, coder Thanks to: - Richard Furse for his great plugin examples - Lars Luthman, Fons Adriansen and Steve Harris for their invaluable help at the linux-audio-dev list - Alessandro Cominu for helping with debugging my very first (and buggy) plugin - Tim Goetze for kindly providing a range of vacant plugin IDs hydrogen-0.9.6-beta3/src/plugins/wasp/ChangeLog000066400000000000000000000012651211146647700213520ustar00rootroot000000000000002005-xx-xx Artemiy Pavlov * Release 0.2.0 * X-Shaper: removed round and parabolic curves, added new sine-based curves * X-Shaper: put wave shaper curve functions in "waveshaper.h" * X-Shaper: fixed clipping in rectified sine curves 2005-08-07 Artemiy Pavlov * Release 0.1.3 * X-Shaper: added two LFOs and per-sample interpolation for most parameters 2005-07-09 Artemiy Pavlov * Release 0.1.2 * Performance improvements and new "Amount" parameter in X-Shaper 2005-07-08 Artemiy Pavlov * Release 0.1.1 * Added "Gain" parameter and two new curve types to X-Shaper 2005-07-06 Artemiy Pavlov * Release 0.1.0 * 4 plugins: X-Shaper, Clipping Booster, Noisifier, Variable Noise hydrogen-0.9.6-beta3/src/plugins/wasp/LICENSE000066400000000000000000000431331211146647700206050ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. hydrogen-0.9.6-beta3/src/plugins/wasp/include/000077500000000000000000000000001211146647700212175ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/plugins/wasp/include/Gd.h000066400000000000000000000006721211146647700217270ustar00rootroot00000000000000#include "stdlib.h" #include "math.h" /* DSPE: digital signal processing essentials Gd.h Random number generator with Gaussian distribution (c)2005 Artemiy Pavlov http://artemiolabs.com This program is free software, it may be distributed under the terms and conditions of the GNU General Public License version 2 or later. */ float Gdrand(float deviation){ return powf (10, - deviation * powf( (float)(rand()/RAND_MAX) - 1, 2)); } hydrogen-0.9.6-beta3/src/plugins/wasp/include/LFO.h000066400000000000000000000026521211146647700220150ustar00rootroot00000000000000#include "math.h" /* DSPE: digital signal processing essentials LFO.h A library of functions to produce various LFO forms (c)2005 Artemiy Pavlov http://artemiolabs.com This program is free software, it may be distributed under the terms and conditions of the GNU General Public License version 2 or later. */ /* Simple triangle LFO */ float LFOtri(float step, float period){ if(step < period/2.0f) { return 1.0f - 2.0f * (step/period); } else { return 2.0f * (step/period) - 1.0f; } } /* Simple sine LFO */ float LFOsin(float step, float period){ return sinf (2.0f * M_PI * (step/period)); } /* Saw LFO with variable knee */ float LFOsaw(float step, float period, float knee){ if(step <= knee*period) { return 1.0f/knee * (1.0f - knee) * step/period; } else { return 1.0f - step/period + knee; } } /* Trapezoid LFO with variable knee [knee value] [form] 0.0 square 0.25 trapezoid 0.5 triangle */ float LFOtrp(float step, float period, float knee){ if(step < (knee*period)/2.0f) { return (step/period) * 2.0f/knee; } else if(step >= (knee*period)/2.0f && step < period*(1.0f-knee)/2.0f) { return 1.0f; } else if(step >= period*(1.0f-knee)/2.0f && step < period*(1.0f+knee)/2.0f) { return (1.0f - step/(period/2.0f)) * 1.0f/knee; } else if(step >= period*(1.0f+knee)/2.0f && step < period-(knee*period)/2.0f) { return -1.0f; } else { return (step/period - 1.0f) * 2.0f/knee; } } hydrogen-0.9.6-beta3/src/plugins/wasp/include/ladspa.h000066400000000000000000000657111211146647700226460ustar00rootroot00000000000000/* ladspa.h Linux Audio Developer's Simple Plugin API Version 1.1[LGPL]. Copyright (C) 2000-2002 Richard W.E. Furse, Paul Barton-Davis, Stefan Westerfeld. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #ifndef LADSPA_INCLUDED #define LADSPA_INCLUDED #define LADSPA_VERSION "1.1" #define LADSPA_VERSION_MAJOR 1 #define LADSPA_VERSION_MINOR 1 #ifdef __cplusplus extern "C" { #endif /*****************************************************************************/ /* Overview: There is a large number of synthesis packages in use or development on the Linux platform at this time. This API (`The Linux Audio Developer's Simple Plugin API') attempts to give programmers the ability to write simple `plugin' audio processors in C/C++ and link them dynamically (`plug') into a range of these packages (`hosts'). It should be possible for any host and any plugin to communicate completely through this interface. This API is deliberately short and simple. To achieve compatibility with a range of promising Linux sound synthesis packages it attempts to find the `greatest common divisor' in their logical behaviour. Having said this, certain limiting decisions are implicit, notably the use of a fixed type (LADSPA_Data) for all data transfer and absence of a parameterised `initialisation' phase. See below for the LADSPA_Data typedef. Plugins are expected to distinguish between control and audio data. Plugins have `ports' that are inputs or outputs for audio or control data and each plugin is `run' for a `block' corresponding to a short time interval measured in samples. Audio data is communicated using arrays of LADSPA_Data, allowing a block of audio to be processed by the plugin in a single pass. Control data is communicated using single LADSPA_Data values. Control data has a single value at the start of a call to the `run()' or `run_adding()' function, and may be considered to remain this value for its duration. The plugin may assume that all its input and output ports have been connected to the relevant data location (see the `connect_port()' function below) before it is asked to run. Plugins will reside in shared object files suitable for dynamic linking by dlopen() and family. The file will provide a number of `plugin types' that can be used to instantiate actual plugins (sometimes known as `plugin instances') that can be connected together to perform tasks. This API contains very limited error-handling. */ /*****************************************************************************/ /* Fundamental data type passed in and out of plugin. This data type is used to communicate audio samples and control values. It is assumed that the plugin will work sensibly given any numeric input value although it may have a preferred range (see hints below). For audio it is generally assumed that 1.0f is the `0dB' reference amplitude and is a `normal' signal level. */ typedef float LADSPA_Data; /*****************************************************************************/ /* Special Plugin Properties: Optional features of the plugin type are encapsulated in the LADSPA_Properties type. This is assembled by ORing individual properties together. */ typedef int LADSPA_Properties; /* Property LADSPA_PROPERTY_REALTIME indicates that the plugin has a real-time dependency (e.g. listens to a MIDI device) and so its output must not be cached or subject to significant latency. */ #define LADSPA_PROPERTY_REALTIME 0x1 /* Property LADSPA_PROPERTY_INPLACE_BROKEN indicates that the plugin may cease to work correctly if the host elects to use the same data location for both input and output (see connect_port()). This should be avoided as enabling this flag makes it impossible for hosts to use the plugin to process audio `in-place.' */ #define LADSPA_PROPERTY_INPLACE_BROKEN 0x2 /* Property LADSPA_PROPERTY_HARD_RT_CAPABLE indicates that the plugin is capable of running not only in a conventional host but also in a `hard real-time' environment. To qualify for this the plugin must satisfy all of the following: (1) The plugin must not use malloc(), free() or other heap memory management within its run() or run_adding() functions. All new memory used in run() must be managed via the stack. These restrictions only apply to the run() function. (2) The plugin will not attempt to make use of any library functions with the exceptions of functions in the ANSI standard C and C maths libraries, which the host is expected to provide. (3) The plugin will not access files, devices, pipes, sockets, IPC or any other mechanism that might result in process or thread blocking. (4) The plugin will take an amount of time to execute a run() or run_adding() call approximately of form (A+B*SampleCount) where A and B depend on the machine and host in use. This amount of time may not depend on input signals or plugin state. The host is left the responsibility to perform timings to estimate upper bounds for A and B. */ #define LADSPA_PROPERTY_HARD_RT_CAPABLE 0x4 #define LADSPA_IS_REALTIME(x) ((x) & LADSPA_PROPERTY_REALTIME) #define LADSPA_IS_INPLACE_BROKEN(x) ((x) & LADSPA_PROPERTY_INPLACE_BROKEN) #define LADSPA_IS_HARD_RT_CAPABLE(x) ((x) & LADSPA_PROPERTY_HARD_RT_CAPABLE) /*****************************************************************************/ /* Plugin Ports: Plugins have `ports' that are inputs or outputs for audio or data. Ports can communicate arrays of LADSPA_Data (for audio inputs/outputs) or single LADSPA_Data values (for control input/outputs). This information is encapsulated in the LADSPA_PortDescriptor type which is assembled by ORing individual properties together. Note that a port must be an input or an output port but not both and that a port must be a control or audio port but not both. */ typedef int LADSPA_PortDescriptor; /* Property LADSPA_PORT_INPUT indicates that the port is an input. */ #define LADSPA_PORT_INPUT 0x1 /* Property LADSPA_PORT_OUTPUT indicates that the port is an output. */ #define LADSPA_PORT_OUTPUT 0x2 /* Property LADSPA_PORT_CONTROL indicates that the port is a control port. */ #define LADSPA_PORT_CONTROL 0x4 /* Property LADSPA_PORT_AUDIO indicates that the port is a audio port. */ #define LADSPA_PORT_AUDIO 0x8 #define LADSPA_IS_PORT_INPUT(x) ((x) & LADSPA_PORT_INPUT) #define LADSPA_IS_PORT_OUTPUT(x) ((x) & LADSPA_PORT_OUTPUT) #define LADSPA_IS_PORT_CONTROL(x) ((x) & LADSPA_PORT_CONTROL) #define LADSPA_IS_PORT_AUDIO(x) ((x) & LADSPA_PORT_AUDIO) /*****************************************************************************/ /* Plugin Port Range Hints: The host may wish to provide a representation of data entering or leaving a plugin (e.g. to generate a GUI automatically). To make this more meaningful, the plugin should provide `hints' to the host describing the usual values taken by the data. Note that these are only hints. The host may ignore them and the plugin must not assume that data supplied to it is meaningful. If the plugin receives invalid input data it is expected to continue to run without failure and, where possible, produce a sensible output (e.g. a high-pass filter given a negative cutoff frequency might switch to an all-pass mode). Hints are meaningful for all input and output ports but hints for input control ports are expected to be particularly useful. More hint information is encapsulated in the LADSPA_PortRangeHintDescriptor type which is assembled by ORing individual hint types together. Hints may require further LowerBound and UpperBound information. All the hint information for a particular port is aggregated in the LADSPA_PortRangeHint structure. */ typedef int LADSPA_PortRangeHintDescriptor; /* Hint LADSPA_HINT_BOUNDED_BELOW indicates that the LowerBound field of the LADSPA_PortRangeHint should be considered meaningful. The value in this field should be considered the (inclusive) lower bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also specified then the value of LowerBound should be multiplied by the sample rate. */ #define LADSPA_HINT_BOUNDED_BELOW 0x1 /* Hint LADSPA_HINT_BOUNDED_ABOVE indicates that the UpperBound field of the LADSPA_PortRangeHint should be considered meaningful. The value in this field should be considered the (inclusive) upper bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also specified then the value of UpperBound should be multiplied by the sample rate. */ #define LADSPA_HINT_BOUNDED_ABOVE 0x2 /* Hint LADSPA_HINT_TOGGLED indicates that the data item should be considered a Boolean toggle. Data less than or equal to zero should be considered `off' or `false,' and data above zero should be considered `on' or `true.' LADSPA_HINT_TOGGLED may not be used in conjunction with any other hint except LADSPA_HINT_DEFAULT_0 or LADSPA_HINT_DEFAULT_1. */ #define LADSPA_HINT_TOGGLED 0x4 /* Hint LADSPA_HINT_SAMPLE_RATE indicates that any bounds specified should be interpreted as multiples of the sample rate. For instance, a frequency range from 0Hz to the Nyquist frequency (half the sample rate) could be requested by this hint in conjunction with LowerBound = 0 and UpperBound = 0.5. Hosts that support bounds at all must support this hint to retain meaning. */ #define LADSPA_HINT_SAMPLE_RATE 0x8 /* Hint LADSPA_HINT_LOGARITHMIC indicates that it is likely that the user will find it more intuitive to view values using a logarithmic scale. This is particularly useful for frequencies and gains. */ #define LADSPA_HINT_LOGARITHMIC 0x10 /* Hint LADSPA_HINT_INTEGER indicates that a user interface would probably wish to provide a stepped control taking only integer values. Any bounds set should be slightly wider than the actual integer range required to avoid floating point rounding errors. For instance, the integer set {0,1,2,3} might be described as [-0.1, 3.1]. */ #define LADSPA_HINT_INTEGER 0x20 /* The various LADSPA_HINT_HAS_DEFAULT_* hints indicate a `normal' value for the port that is sensible as a default. For instance, this value is suitable for use as an initial value in a user interface or as a value the host might assign to a control port when the user has not provided one. Defaults are encoded using a mask so only one default may be specified for a port. Some of the hints make use of lower and upper bounds, in which case the relevant bound or bounds must be available and LADSPA_HINT_SAMPLE_RATE must be applied as usual. The resulting default must be rounded if LADSPA_HINT_INTEGER is present. Default values were introduced in LADSPA v1.1. */ #define LADSPA_HINT_DEFAULT_MASK 0x3C0 /* This default values indicates that no default is provided. */ #define LADSPA_HINT_DEFAULT_NONE 0x0 /* This default hint indicates that the suggested lower bound for the port should be used. */ #define LADSPA_HINT_DEFAULT_MINIMUM 0x40 /* This default hint indicates that a low value between the suggested lower and upper bounds should be chosen. For ports with LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.75 + log(upper) * 0.25). Otherwise, this should be (lower * 0.75 + upper * 0.25). */ #define LADSPA_HINT_DEFAULT_LOW 0x80 /* This default hint indicates that a middle value between the suggested lower and upper bounds should be chosen. For ports with LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.5 + log(upper) * 0.5). Otherwise, this should be (lower * 0.5 + upper * 0.5). */ #define LADSPA_HINT_DEFAULT_MIDDLE 0xC0 /* This default hint indicates that a high value between the suggested lower and upper bounds should be chosen. For ports with LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.25 + log(upper) * 0.75). Otherwise, this should be (lower * 0.25 + upper * 0.75). */ #define LADSPA_HINT_DEFAULT_HIGH 0x100 /* This default hint indicates that the suggested upper bound for the port should be used. */ #define LADSPA_HINT_DEFAULT_MAXIMUM 0x140 /* This default hint indicates that the number 0 should be used. Note that this default may be used in conjunction with LADSPA_HINT_TOGGLED. */ #define LADSPA_HINT_DEFAULT_0 0x200 /* This default hint indicates that the number 1 should be used. Note that this default may be used in conjunction with LADSPA_HINT_TOGGLED. */ #define LADSPA_HINT_DEFAULT_1 0x240 /* This default hint indicates that the number 100 should be used. */ #define LADSPA_HINT_DEFAULT_100 0x280 /* This default hint indicates that the Hz frequency of `concert A' should be used. This will be 440 unless the host uses an unusual tuning convention, in which case it may be within a few Hz. */ #define LADSPA_HINT_DEFAULT_440 0x2C0 #define LADSPA_IS_HINT_BOUNDED_BELOW(x) ((x) & LADSPA_HINT_BOUNDED_BELOW) #define LADSPA_IS_HINT_BOUNDED_ABOVE(x) ((x) & LADSPA_HINT_BOUNDED_ABOVE) #define LADSPA_IS_HINT_TOGGLED(x) ((x) & LADSPA_HINT_TOGGLED) #define LADSPA_IS_HINT_SAMPLE_RATE(x) ((x) & LADSPA_HINT_SAMPLE_RATE) #define LADSPA_IS_HINT_LOGARITHMIC(x) ((x) & LADSPA_HINT_LOGARITHMIC) #define LADSPA_IS_HINT_INTEGER(x) ((x) & LADSPA_HINT_INTEGER) #define LADSPA_IS_HINT_HAS_DEFAULT(x) ((x) & LADSPA_HINT_DEFAULT_MASK) #define LADSPA_IS_HINT_DEFAULT_MINIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_MINIMUM) #define LADSPA_IS_HINT_DEFAULT_LOW(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_LOW) #define LADSPA_IS_HINT_DEFAULT_MIDDLE(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_MIDDLE) #define LADSPA_IS_HINT_DEFAULT_HIGH(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_HIGH) #define LADSPA_IS_HINT_DEFAULT_MAXIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_MAXIMUM) #define LADSPA_IS_HINT_DEFAULT_0(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_0) #define LADSPA_IS_HINT_DEFAULT_1(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_1) #define LADSPA_IS_HINT_DEFAULT_100(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_100) #define LADSPA_IS_HINT_DEFAULT_440(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_440) typedef struct _LADSPA_PortRangeHint { /* Hints about the port. */ LADSPA_PortRangeHintDescriptor HintDescriptor; /* Meaningful when hint LADSPA_HINT_BOUNDED_BELOW is active. When LADSPA_HINT_SAMPLE_RATE is also active then this value should be multiplied by the relevant sample rate. */ LADSPA_Data LowerBound; /* Meaningful when hint LADSPA_HINT_BOUNDED_ABOVE is active. When LADSPA_HINT_SAMPLE_RATE is also active then this value should be multiplied by the relevant sample rate. */ LADSPA_Data UpperBound; } LADSPA_PortRangeHint; /*****************************************************************************/ /* Plugin Handles: This plugin handle indicates a particular instance of the plugin concerned. It is valid to compare this to NULL (0 for C++) but otherwise the host should not attempt to interpret it. The plugin may use it to reference internal instance data. */ typedef void * LADSPA_Handle; /*****************************************************************************/ /* Descriptor for a Type of Plugin: This structure is used to describe a plugin type. It provides a number of functions to examine the type, instantiate it, link it to buffers and workspaces and to run it. */ typedef struct _LADSPA_Descriptor { /* This numeric identifier indicates the plugin type uniquely. Plugin programmers may reserve ranges of IDs from a central body to avoid clashes. Hosts may assume that IDs are below 0x1000000. */ unsigned long UniqueID; /* This identifier can be used as a unique, case-sensitive identifier for the plugin type within the plugin file. Plugin types should be identified by file and label rather than by index or plugin name, which may be changed in new plugin versions. Labels must not contain white-space characters. */ const char * Label; /* This indicates a number of properties of the plugin. */ LADSPA_Properties Properties; /* This member points to the null-terminated name of the plugin (e.g. "Sine Oscillator"). */ const char * Name; /* This member points to the null-terminated string indicating the maker of the plugin. This can be an empty string but not NULL. */ const char * Maker; /* This member points to the null-terminated string indicating any copyright applying to the plugin. If no Copyright applies the string "None" should be used. */ const char * Copyright; /* This indicates the number of ports (input AND output) present on the plugin. */ unsigned long PortCount; /* This member indicates an array of port descriptors. Valid indices vary from 0 to PortCount-1. */ const LADSPA_PortDescriptor * PortDescriptors; /* This member indicates an array of null-terminated strings describing ports (e.g. "Frequency (Hz)"). Valid indices vary from 0 to PortCount-1. */ const char * const * PortNames; /* This member indicates an array of range hints for each port (see above). Valid indices vary from 0 to PortCount-1. */ const LADSPA_PortRangeHint * PortRangeHints; /* This may be used by the plugin developer to pass any custom implementation data into an instantiate call. It must not be used or interpreted by the host. It is expected that most plugin writers will not use this facility as LADSPA_Handle should be used to hold instance data. */ void * ImplementationData; /* This member is a function pointer that instantiates a plugin. A handle is returned indicating the new plugin instance. The instantiation function accepts a sample rate as a parameter. The plugin descriptor from which this instantiate function was found must also be passed. This function must return NULL if instantiation fails. Note that instance initialisation should generally occur in activate() rather than here. */ LADSPA_Handle (*instantiate)(const struct _LADSPA_Descriptor * Descriptor, unsigned long SampleRate); /* This member is a function pointer that connects a port on an instantiated plugin to a memory location at which a block of data for the port will be read/written. The data location is expected to be an array of LADSPA_Data for audio ports or a single LADSPA_Data value for control ports. Memory issues will be managed by the host. The plugin must read/write the data at these locations every time run() or run_adding() is called and the data present at the time of this connection call should not be considered meaningful. connect_port() may be called more than once for a plugin instance to allow the host to change the buffers that the plugin is reading or writing. These calls may be made before or after activate() or deactivate() calls. connect_port() must be called at least once for each port before run() or run_adding() is called. When working with blocks of LADSPA_Data the plugin should pay careful attention to the block size passed to the run function as the block allocated may only just be large enough to contain the block of samples. Plugin writers should be aware that the host may elect to use the same buffer for more than one port and even use the same buffer for both input and output (see LADSPA_PROPERTY_INPLACE_BROKEN). However, overlapped buffers or use of a single buffer for both audio and control data may result in unexpected behaviour. */ void (*connect_port)(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation); /* This member is a function pointer that initialises a plugin instance and activates it for use. This is separated from instantiate() to aid real-time support and so that hosts can reinitialise a plugin instance by calling deactivate() and then activate(). In this case the plugin instance must reset all state information dependent on the history of the plugin instance except for any data locations provided by connect_port() and any gain set by set_run_adding_gain(). If there is nothing for activate() to do then the plugin writer may provide a NULL rather than an empty function. When present, hosts must call this function once before run() (or run_adding()) is called for the first time. This call should be made as close to the run() call as possible and indicates to real-time plugins that they are now live. Plugins should not rely on a prompt call to run() after activate(). activate() may not be called again unless deactivate() is called first. Note that connect_port() may be called before or after a call to activate(). */ void (*activate)(LADSPA_Handle Instance); /* This method is a function pointer that runs an instance of a plugin for a block. Two parameters are required: the first is a handle to the particular instance to be run and the second indicates the block size (in samples) for which the plugin instance may run. Note that if an activate() function exists then it must be called before run() or run_adding(). If deactivate() is called for a plugin instance then the plugin instance may not be reused until activate() has been called again. If the plugin has the property LADSPA_PROPERTY_HARD_RT_CAPABLE then there are various things that the plugin should not do within the run() or run_adding() functions (see above). */ void (*run)(LADSPA_Handle Instance, unsigned long SampleCount); /* This method is a function pointer that runs an instance of a plugin for a block. This has identical behaviour to run() except in the way data is output from the plugin. When run() is used, values are written directly to the memory areas associated with the output ports. However when run_adding() is called, values must be added to the values already present in the memory areas. Furthermore, output values written must be scaled by the current gain set by set_run_adding_gain() (see below) before addition. run_adding() is optional. When it is not provided by a plugin, this function pointer must be set to NULL. When it is provided, the function set_run_adding_gain() must be provided also. */ void (*run_adding)(LADSPA_Handle Instance, unsigned long SampleCount); /* This method is a function pointer that sets the output gain for use when run_adding() is called (see above). If this function is never called the gain is assumed to default to 1. Gain information should be retained when activate() or deactivate() are called. This function should be provided by the plugin if and only if the run_adding() function is provided. When it is absent this function pointer must be set to NULL. */ void (*set_run_adding_gain)(LADSPA_Handle Instance, LADSPA_Data Gain); /* This is the counterpart to activate() (see above). If there is nothing for deactivate() to do then the plugin writer may provide a NULL rather than an empty function. Hosts must deactivate all activated units after they have been run() (or run_adding()) for the last time. This call should be made as close to the last run() call as possible and indicates to real-time plugins that they are no longer live. Plugins should not rely on prompt deactivation. Note that connect_port() may be called before or after a call to deactivate(). Deactivation is not similar to pausing as the plugin instance will be reinitialised when activate() is called to reuse it. */ void (*deactivate)(LADSPA_Handle Instance); /* Once an instance of a plugin has been finished with it can be deleted using the following function. The instance handle passed ceases to be valid after this call. If activate() was called for a plugin instance then a corresponding call to deactivate() must be made before cleanup() is called. */ void (*cleanup)(LADSPA_Handle Instance); } LADSPA_Descriptor; /**********************************************************************/ /* Accessing a Plugin: */ /* The exact mechanism by which plugins are loaded is host-dependent, however all most hosts will need to know is the name of shared object file containing the plugin types. To allow multiple hosts to share plugin types, hosts may wish to check for environment variable LADSPA_PATH. If present, this should contain a colon-separated path indicating directories that should be searched (in order) when loading plugin types. A plugin programmer must include a function called "ladspa_descriptor" with the following function prototype within the shared object file. This function will have C-style linkage (if you are using C++ this is taken care of by the `extern "C"' clause at the top of the file). A host will find the plugin shared object file by one means or another, find the ladspa_descriptor() function, call it, and proceed from there. Plugin types are accessed by index (not ID) using values from 0 upwards. Out of range indexes must result in this function returning NULL, so the plugin count can be determined by checking for the least index that results in NULL being returned. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index); /* Datatype corresponding to the ladspa_descriptor() function. */ typedef const LADSPA_Descriptor * (*LADSPA_Descriptor_Function)(unsigned long Index); /**********************************************************************/ #ifdef __cplusplus } #endif #endif /* LADSPA_INCLUDED */ /* EOF */ hydrogen-0.9.6-beta3/src/plugins/wasp/include/waveshaper.h000066400000000000000000000042151211146647700235370ustar00rootroot00000000000000#include "math.h" /* Wave shaper curve functions (c)2005 Artemiy Pavlov Sineshine sonic innovations - http://sineshine.com This program is free software, it may be distributed under the terms and conditions of the GNU General Public License version 2 or later. */ float waveshaper_sine( float signal , float curve ){ signal = (0.5f * sin ( 2 * M_PI * curve * signal) + 0.5f) * signal; return signal; } float waveshaper_double_sine( float signal , float curve ){ signal = (0.5f * sin ( 2 * M_PI * curve * signal) * sin ( 4 * M_PI * curve * signal) + 0.5f) * signal; return signal; } float waveshaper_triple_sine( float signal , float curve ){ signal = (0.5f * sin ( 2 * M_PI * curve * signal) * sin ( 4 * M_PI * curve * signal) * sin ( 8 * M_PI * curve * signal) + 0.5f) * signal; return signal; } float waveshaper_quadruple_sine( float signal , float curve ){ signal = (0.5f * sin ( 2 * M_PI * curve * signal) * sin ( 4 * M_PI * curve * signal) * sin ( 6 * M_PI * curve * signal) * sin ( 8 * M_PI * curve * signal) + 0.5f) * signal; return signal; } float waveshaper_morph_double_sine( float signal , float curve ){ signal = (0.5f * sin ( 2 * M_PI * curve * signal) * sin ( 4 * M_PI * signal) + 0.5f) * signal; return signal; } float waveshaper_morph_triple_sine( float signal , float curve ){ signal = (0.5f * sin ( 2 * M_PI * curve * signal) * sin ( 4 * M_PI * curve * signal) * sin ( 6 * M_PI * signal) + 0.5f) * signal; return signal; } float waveshaper_morph_quadruple_sine( float signal , float curve ){ signal = (0.5f * sin ( 2 * M_PI * curve * signal) * sin ( 4 * M_PI * signal) * sin ( 6 * M_PI * curve * signal) * sin ( 8 * M_PI * signal) + 0.5f) * signal; return signal; } float waveshaper_rect_sine( float signal , float curve ){ float value = sin ( 2 * M_PI * curve * signal); if( value < 0.0f ) value = -value; signal = (0.5f * value + 0.5f) * signal; return signal; } float waveshaper_nonlin_rect_sine( float signal , float curve ){ float value = sin ( 2 * M_PI * curve * pow (signal, 1/(curve+1))); if( value < 0.0f ) value = -value; signal = (0.5f * value + 0.5f) * signal; return signal; } hydrogen-0.9.6-beta3/src/plugins/wasp/wasp.pro000066400000000000000000000001061211146647700212650ustar00rootroot00000000000000TEMPLATE = subdirs SUBDIRS = wasp_booster wasp_noisifier wasp_xshaper hydrogen-0.9.6-beta3/src/plugins/wasp/wasp_booster/000077500000000000000000000000001211146647700223035ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/plugins/wasp/wasp_booster/booster.c000066400000000000000000000317641211146647700241370ustar00rootroot00000000000000/* booster.c Clipping booster (mono/stereo) (c)2005 Artemiy Pavlov */ /* Includes: */ #include #include #include #include "ladspa.h" /* The port numbers for the plugin: */ #define BOOSTER_CURVE 0 #define BOOSTER_GAIN 1 #define BOOSTER_CLIP 2 #define BOOSTER_INPUT1 3 #define BOOSTER_OUTPUT1 4 #define BOOSTER_INPUT2 5 #define BOOSTER_OUTPUT2 6 #define MAX_GAIN 36 /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * m_pfCurve; LADSPA_Data * m_pfGain; LADSPA_Data * m_pfClip; LADSPA_Data * m_pfInputBuffer1; LADSPA_Data * m_pfOutputBuffer1; LADSPA_Data * m_pfInputBuffer2; LADSPA_Data * m_pfOutputBuffer2; } Booster; /* Construct a new plugin instance. */ LADSPA_Handle instantiateBooster(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { return malloc(sizeof(Booster)); } /* Connect a port to a data location. */ void connectPortToBooster(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Booster * psBooster; psBooster = (Booster *)Instance; switch (Port) { case BOOSTER_GAIN: psBooster->m_pfGain = DataLocation; break; case BOOSTER_CLIP: psBooster->m_pfClip = DataLocation; break; case BOOSTER_CURVE: psBooster->m_pfCurve = DataLocation; break; case BOOSTER_INPUT1: psBooster->m_pfInputBuffer1 = DataLocation; break; case BOOSTER_OUTPUT1: psBooster->m_pfOutputBuffer1 = DataLocation; break; case BOOSTER_INPUT2: psBooster->m_pfInputBuffer2 = DataLocation; break; case BOOSTER_OUTPUT2: psBooster->m_pfOutputBuffer2 = DataLocation; break; } } /* Booster mono */ void runMonoBooster(LADSPA_Handle Instance, unsigned long SampleCount) { LADSPA_Data * pfInput; LADSPA_Data * pfOutput; LADSPA_Data fGain; LADSPA_Data fClip; LADSPA_Data fCurve; LADSPA_Data inputData; LADSPA_Data outputData; LADSPA_Data boosterGain; LADSPA_Data asymmetryPositive; LADSPA_Data asymmetryNegative; Booster * psBooster; unsigned long lSampleIndex; psBooster = (Booster *)Instance; fGain = *(psBooster->m_pfGain); fClip = *(psBooster->m_pfClip); fCurve = *(psBooster->m_pfCurve); boosterGain = powf( 10, fGain/20 ); fCurve = fCurve * 1.5f + 1; if( boosterGain < 0) boosterGain = 0; asymmetryPositive = 1.0f; asymmetryNegative = -1.0f; asymmetryPositive = asymmetryPositive * fClip; asymmetryNegative = asymmetryNegative * fClip; pfInput = psBooster->m_pfInputBuffer1; pfOutput = psBooster->m_pfOutputBuffer1; for(lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++){ inputData = *(pfInput++); if( inputData < 0 ){ outputData = -inputData; } else { outputData = inputData; } outputData = powf ( 1 - powf(1 - outputData , fCurve), 1/fCurve ) * boosterGain; if (outputData > asymmetryPositive) { outputData = asymmetryPositive; } if( inputData >= 0 ){ *(pfOutput++) = outputData ; } else { *(pfOutput++) = -outputData ; } } } /* Booster stereo */ void runStereoBooster(LADSPA_Handle Instance, unsigned long SampleCount) { LADSPA_Data * pfInput; LADSPA_Data * pfOutput; LADSPA_Data fGain; LADSPA_Data fClip; LADSPA_Data fCurve; LADSPA_Data inputData; LADSPA_Data outputData; LADSPA_Data boosterGain; LADSPA_Data asymmetryPositive; LADSPA_Data asymmetryNegative; Booster * psBooster; unsigned long lSampleIndex; psBooster = (Booster *)Instance; fGain = *(psBooster->m_pfGain); fClip = *(psBooster->m_pfClip); fCurve = *(psBooster->m_pfCurve); boosterGain = powf( 10, fGain/20 ); fCurve = fCurve * 1.5f + 1; if( boosterGain < 0) boosterGain = 0; asymmetryPositive = 1.0f; asymmetryNegative = -1.0f; asymmetryPositive = asymmetryPositive * fClip; asymmetryNegative = asymmetryNegative * fClip; pfInput = psBooster->m_pfInputBuffer1; pfOutput = psBooster->m_pfOutputBuffer1; for (lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++){ inputData = *(pfInput++); if( inputData < 0 ){ outputData = -inputData; } else { outputData = inputData; } outputData = powf ( 1 - powf(1 - outputData , fCurve), 1/fCurve ) * boosterGain; if (outputData > asymmetryPositive) { outputData = asymmetryPositive; } if( inputData >= 0 ){ *(pfOutput++) = outputData ; } else { *(pfOutput++) = -outputData ; } } pfInput = psBooster->m_pfInputBuffer2; pfOutput = psBooster->m_pfOutputBuffer2; for (lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++){ inputData = *(pfInput++); if( inputData < 0 ){ outputData = -inputData; } else { outputData = inputData; } outputData = powf ( 1 - powf(1 - outputData , fCurve), 1/fCurve ) * boosterGain; if (outputData > asymmetryPositive) { outputData = asymmetryPositive; } if( inputData >= 0 ){ *(pfOutput++) = outputData ; } else { *(pfOutput++) = -outputData ; } } } /* Booster cleanup */ void cleanupBooster(LADSPA_Handle Instance) { Booster * psBooster; psBooster = (Booster *)Instance; free(psBooster); } LADSPA_Descriptor * g_psMonoDescriptor = NULL; LADSPA_Descriptor * g_psStereoDescriptor = NULL; /* Booster _init() function */ void _init() { char ** pcPortNames; LADSPA_PortDescriptor * piPortDescriptors; LADSPA_PortRangeHint * psPortRangeHints; g_psMonoDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); g_psStereoDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (g_psMonoDescriptor) { g_psMonoDescriptor->UniqueID = 2545; g_psMonoDescriptor->Label = strdup("BoosterM"); g_psMonoDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; g_psMonoDescriptor->Name = strdup("Clipping Booster (mono)"); g_psMonoDescriptor->Maker = strdup("Artemiy Pavlov"); g_psMonoDescriptor->Copyright = strdup("(c)2005 GPL"); g_psMonoDescriptor->PortCount = 5; piPortDescriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); g_psMonoDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)piPortDescriptors; piPortDescriptors[BOOSTER_CURVE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[BOOSTER_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[BOOSTER_CLIP] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[BOOSTER_INPUT1] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; piPortDescriptors[BOOSTER_OUTPUT1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; pcPortNames = (char **)calloc(5, sizeof(char *)); g_psMonoDescriptor->PortNames = (const char **)pcPortNames; pcPortNames[BOOSTER_CURVE] = strdup("Curve"); pcPortNames[BOOSTER_GAIN] = strdup("Gain (dB)"); pcPortNames[BOOSTER_CLIP] = strdup("Clip"); pcPortNames[BOOSTER_INPUT1] = strdup("Input"); pcPortNames[BOOSTER_OUTPUT1] = strdup("Output"); psPortRangeHints = ((LADSPA_PortRangeHint *) calloc(5, sizeof(LADSPA_PortRangeHint))); g_psMonoDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)psPortRangeHints; psPortRangeHints[BOOSTER_CURVE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); psPortRangeHints[BOOSTER_CURVE].LowerBound = 0; psPortRangeHints[BOOSTER_CURVE].UpperBound = 1; psPortRangeHints[BOOSTER_GAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0); psPortRangeHints[BOOSTER_GAIN].LowerBound = 0; psPortRangeHints[BOOSTER_GAIN].UpperBound = MAX_GAIN; psPortRangeHints[BOOSTER_CLIP].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[BOOSTER_CLIP].LowerBound = 0; psPortRangeHints[BOOSTER_CLIP].UpperBound = 1; psPortRangeHints[BOOSTER_INPUT1].HintDescriptor = 0; psPortRangeHints[BOOSTER_OUTPUT1].HintDescriptor = 0; g_psMonoDescriptor->instantiate = instantiateBooster; g_psMonoDescriptor->connect_port = connectPortToBooster; g_psMonoDescriptor->activate = NULL; g_psMonoDescriptor->run = runMonoBooster; g_psMonoDescriptor->run_adding = NULL; g_psMonoDescriptor->set_run_adding_gain = NULL; g_psMonoDescriptor->deactivate = NULL; g_psMonoDescriptor->cleanup = cleanupBooster; } if (g_psStereoDescriptor) { g_psStereoDescriptor->UniqueID = 2546; g_psStereoDescriptor->Label = strdup("BoosterS"); g_psStereoDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; g_psStereoDescriptor->Name = strdup("Clipping Booster (stereo)"); g_psStereoDescriptor->Maker = strdup("Artemiy Pavlov"); g_psStereoDescriptor->Copyright = strdup("(c)2005 GPL"); g_psStereoDescriptor->PortCount = 7; piPortDescriptors = (LADSPA_PortDescriptor *)calloc(7, sizeof(LADSPA_PortDescriptor)); g_psStereoDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)piPortDescriptors; piPortDescriptors[BOOSTER_CURVE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[BOOSTER_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[BOOSTER_CLIP] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[BOOSTER_INPUT1] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; piPortDescriptors[BOOSTER_OUTPUT1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; piPortDescriptors[BOOSTER_INPUT2] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; piPortDescriptors[BOOSTER_OUTPUT2] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; pcPortNames = (char **)calloc(7, sizeof(char *)); g_psStereoDescriptor->PortNames = (const char **)pcPortNames; pcPortNames[BOOSTER_CURVE] = strdup("Curve"); pcPortNames[BOOSTER_GAIN] = strdup("Gain (dB)"); pcPortNames[BOOSTER_CLIP] = strdup("Clip"); pcPortNames[BOOSTER_INPUT1] = strdup("Input L"); pcPortNames[BOOSTER_OUTPUT1] = strdup("Output L"); pcPortNames[BOOSTER_INPUT2] = strdup("Input R"); pcPortNames[BOOSTER_OUTPUT2] = strdup("Output R"); psPortRangeHints = ((LADSPA_PortRangeHint *) calloc(7, sizeof(LADSPA_PortRangeHint))); g_psStereoDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)psPortRangeHints; psPortRangeHints[BOOSTER_CURVE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); psPortRangeHints[BOOSTER_CURVE].LowerBound = 0; psPortRangeHints[BOOSTER_CURVE].UpperBound = 1; psPortRangeHints[BOOSTER_GAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0); psPortRangeHints[BOOSTER_GAIN].LowerBound = 0; psPortRangeHints[BOOSTER_GAIN].UpperBound = MAX_GAIN; psPortRangeHints[BOOSTER_CLIP].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[BOOSTER_CLIP].LowerBound = 0; psPortRangeHints[BOOSTER_CLIP].UpperBound = 1; psPortRangeHints[BOOSTER_INPUT1].HintDescriptor = 0; psPortRangeHints[BOOSTER_OUTPUT1].HintDescriptor = 0; psPortRangeHints[BOOSTER_INPUT2].HintDescriptor = 0; psPortRangeHints[BOOSTER_OUTPUT2].HintDescriptor = 0; g_psStereoDescriptor->instantiate = instantiateBooster; g_psStereoDescriptor->connect_port = connectPortToBooster; g_psStereoDescriptor->activate = NULL; g_psStereoDescriptor->run = runStereoBooster; g_psStereoDescriptor->run_adding = NULL; g_psStereoDescriptor->set_run_adding_gain = NULL; g_psStereoDescriptor->deactivate = NULL; g_psStereoDescriptor->cleanup = cleanupBooster; } } void deleteDescriptor(LADSPA_Descriptor * psDescriptor) { unsigned long lIndex; if (psDescriptor) { free((char *)psDescriptor->Label); free((char *)psDescriptor->Name); free((char *)psDescriptor->Maker); free((char *)psDescriptor->Copyright); free((LADSPA_PortDescriptor *)psDescriptor->PortDescriptors); for (lIndex = 0; lIndex < psDescriptor->PortCount; lIndex++) free((char *)(psDescriptor->PortNames[lIndex])); free((char **)psDescriptor->PortNames); free((LADSPA_PortRangeHint *)psDescriptor->PortRangeHints); free(psDescriptor); } } void _fini() { deleteDescriptor(g_psMonoDescriptor); deleteDescriptor(g_psStereoDescriptor); } #ifdef WIN32 #define _DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void _init(); // forward declaration #else #define _DLL_EXPORT_ #endif _DLL_EXPORT_ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { #ifdef WIN32 if (bIsFirstTime) { _init(); bIsFirstTime = 0; } #endif switch (Index) { case 0: return g_psMonoDescriptor; case 1: return g_psStereoDescriptor; default: return NULL; } } hydrogen-0.9.6-beta3/src/plugins/wasp/wasp_booster/wasp_booster.pro000066400000000000000000000005651211146647700255420ustar00rootroot00000000000000TEMPLATE = lib QT -= qt QT -= gui QT -= core DESTDIR = ../../ INCLUDEPATH += ../include SOURCES += booster.c QMAKE_LFLAGS_PLUGIN += -nostartfiles linux-g++* { CONFIG = plugin # there's something weird in linux qmake...this is a simple and ugly workaround #QMAKE_LINK_SHLIB_CMD = gcc -nostartfiles -lm -shared booster.o -o libwasp_booster.so } win32 { CONFIG = dll } hydrogen-0.9.6-beta3/src/plugins/wasp/wasp_noisifier/000077500000000000000000000000001211146647700226155ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/plugins/wasp/wasp_noisifier/noisifier.c000066400000000000000000000330201211146647700247460ustar00rootroot00000000000000/* noisifier.c Noisifier (mono/stereo) (c)2005 Artemiy Pavlov */ /* Includes: */ #include #include #include #include #include "ladspa.h" /* The port numbers for the plugin: */ #define NOISIFIER_TYPE 0 #define NOISIFIER_DENSITY 1 #define NOISIFIER_BALANCE 2 #define NOISIFIER_INPUT1 3 #define NOISIFIER_OUTPUT1 4 #define NOISIFIER_INPUT2 5 #define NOISIFIER_OUTPUT2 6 /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * m_pfType; LADSPA_Data * m_pfDensity; LADSPA_Data * m_pfBalance; LADSPA_Data * m_pfInputBuffer1; LADSPA_Data * m_pfOutputBuffer1; LADSPA_Data * m_pfInputBuffer2; LADSPA_Data * m_pfOutputBuffer2; int m_fStep; LADSPA_Data m_fNoise1; LADSPA_Data m_fNoise2; } Noisifier; /* Construct a new plugin instance. */ LADSPA_Handle instantiateNoisifier(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { return malloc(sizeof(Noisifier)); } /* Connect a port to a data location. */ void connectPortToNoisifier(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Noisifier * psNoisifier; psNoisifier = (Noisifier *)Instance; switch (Port) { case NOISIFIER_TYPE: psNoisifier->m_pfType = DataLocation; break; case NOISIFIER_DENSITY: psNoisifier->m_pfDensity = DataLocation; break; case NOISIFIER_BALANCE: psNoisifier->m_pfBalance = DataLocation; break; case NOISIFIER_INPUT1: psNoisifier->m_pfInputBuffer1 = DataLocation; break; case NOISIFIER_OUTPUT1: psNoisifier->m_pfOutputBuffer1 = DataLocation; break; case NOISIFIER_INPUT2: psNoisifier->m_pfInputBuffer2 = DataLocation; break; case NOISIFIER_OUTPUT2: psNoisifier->m_pfOutputBuffer2 = DataLocation; break; } } /* Noisifier mono */ void runMonoNoisifier(LADSPA_Handle Instance, unsigned long SampleCount) { LADSPA_Data * pfInput; LADSPA_Data * pfOutput; LADSPA_Data fType; LADSPA_Data fDensity; LADSPA_Data fBalance; LADSPA_Data fNoise = 0; int fStep = 0; LADSPA_Data inputData; LADSPA_Data outputData; Noisifier * psNoisifier; unsigned long lSampleIndex; psNoisifier = (Noisifier *)Instance; fType = *(psNoisifier->m_pfType); fDensity = *(psNoisifier->m_pfDensity); fBalance = *(psNoisifier->m_pfBalance); if(fType >= 1.0f && fType < 2.0f){ fType = 1; fDensity= 100.0f * (1 - fDensity); } if(fType >= 2.0f && fType < 3.0f){ fType = 2; fDensity = 1.0f * pow ((1 - fDensity), 0.1f); } if(fType == 0){ fStep = psNoisifier->m_fStep; fNoise = psNoisifier->m_fNoise1; if(fNoise == 0){ fNoise = 2.0f * rand()/RAND_MAX - 1.0f; } } pfInput = psNoisifier->m_pfInputBuffer1; pfOutput = psNoisifier->m_pfOutputBuffer1; for(lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++){ inputData = *(pfInput++); if(fType == 1){ fStep = fStep + 1; if(fStep >= fDensity){ fNoise = 2.0f * rand()/RAND_MAX - 1.0f; fStep = 0; } } if(fType == 2){ fNoise = 1.0f * rand()/RAND_MAX; if(fNoise >= fDensity){ fNoise = 2.0f * rand()/RAND_MAX - 1.0f; } else { fNoise = 0.0f; } } outputData = inputData * fNoise * fBalance + inputData * ( 1 - fBalance ); *(pfOutput++) = outputData; } if(fType == 1){ psNoisifier->m_fStep = fStep; psNoisifier->m_fNoise1 = fNoise; } } /* Noisifier stereo */ void runStereoNoisifier(LADSPA_Handle Instance, unsigned long SampleCount) { LADSPA_Data * pfInput; LADSPA_Data * pfOutput; LADSPA_Data fType; LADSPA_Data fDensity; LADSPA_Data fBalance; LADSPA_Data fNoise = 0; int fStep = 0; LADSPA_Data inputData; LADSPA_Data outputData; Noisifier * psNoisifier; unsigned long lSampleIndex; psNoisifier = (Noisifier *)Instance; fType = *(psNoisifier->m_pfType); fDensity = *(psNoisifier->m_pfDensity); fBalance = *(psNoisifier->m_pfBalance); if(fType >= 1.0f && fType < 2.0f){ fType = 1; fDensity= 100.0f * (1 - fDensity); } if(fType >= 2.0f && fType < 3.0f){ fType = 2; fDensity = 1.0f * pow ((1 - fDensity), 0.1f); } if(fType == 0){ fStep = psNoisifier->m_fStep; fNoise = psNoisifier->m_fNoise1; if(fNoise == 0){ fNoise = 2.0f * rand()/RAND_MAX - 1.0f; } } pfInput = psNoisifier->m_pfInputBuffer1; pfOutput = psNoisifier->m_pfOutputBuffer1; for (lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++){ inputData = *(pfInput++); if(fType == 1){ fStep = fStep + 1; if(fStep >= fDensity){ fNoise = 2.0f * rand()/RAND_MAX - 1.0f; fStep = 0; } } if(fType == 2){ fNoise = 1.0f * rand()/RAND_MAX; if(fNoise >= fDensity){ fNoise = 2.0f * rand()/RAND_MAX - 1.0f; } else { fNoise = 0.0f; } } outputData = inputData * fNoise * fBalance + inputData * ( 1 - fBalance ); *(pfOutput++) = outputData; } if(fType == 1){ psNoisifier->m_fNoise2 = fNoise; } if(fNoise==0){ fNoise = 1.0f * rand()/RAND_MAX; } pfInput = psNoisifier->m_pfInputBuffer2; pfOutput = psNoisifier->m_pfOutputBuffer2; for (lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++){ inputData = *(pfInput++); if(fType == 1){ fStep = fStep + 1; if(fStep >= fDensity){ fNoise = 2.0f * rand()/RAND_MAX - 1.0f; fStep = 0; } } if(fType == 2){ fNoise = 1.0f * rand()/RAND_MAX; if(fNoise >= fDensity){ fNoise = 2.0f * rand()/RAND_MAX - 1.0f; } else { fNoise = 0.0f; } } outputData = inputData * fNoise * fBalance + inputData * ( 1 - fBalance ); *(pfOutput++) = outputData; } if(fType == 1){ psNoisifier->m_fStep = fStep; psNoisifier->m_fNoise2 = fNoise; } } /* Noisifier cleanup */ void cleanupNoisifier(LADSPA_Handle Instance) { Noisifier * psNoisifier; psNoisifier = (Noisifier *)Instance; free(psNoisifier); } LADSPA_Descriptor * g_psMonoDescriptor = NULL; LADSPA_Descriptor * g_psStereoDescriptor = NULL; /* Noisifier _init() function */ void _init() { char ** pcPortNames; LADSPA_PortDescriptor * piPortDescriptors; LADSPA_PortRangeHint * psPortRangeHints; g_psMonoDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); g_psStereoDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (g_psMonoDescriptor) { g_psMonoDescriptor->UniqueID = 2543; g_psMonoDescriptor->Label = strdup("NoisifierM"); g_psMonoDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; g_psMonoDescriptor->Name = strdup("Noisifier (mono)"); g_psMonoDescriptor->Maker = strdup("Artemiy Pavlov"); g_psMonoDescriptor->Copyright = strdup("(c)2005 GPL"); g_psMonoDescriptor->PortCount = 5; piPortDescriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); g_psMonoDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)piPortDescriptors; piPortDescriptors[NOISIFIER_TYPE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[NOISIFIER_DENSITY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[NOISIFIER_BALANCE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[NOISIFIER_INPUT1] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; piPortDescriptors[NOISIFIER_OUTPUT1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; pcPortNames = (char **)calloc(5, sizeof(char *)); g_psMonoDescriptor->PortNames = (const char **)pcPortNames; pcPortNames[NOISIFIER_TYPE] = strdup("Noise Type"); pcPortNames[NOISIFIER_DENSITY] = strdup("Noise Density"); pcPortNames[NOISIFIER_BALANCE] = strdup("Balance"); pcPortNames[NOISIFIER_INPUT1] = strdup("Input"); pcPortNames[NOISIFIER_OUTPUT1] = strdup("Output"); psPortRangeHints = ((LADSPA_PortRangeHint *) calloc(5, sizeof(LADSPA_PortRangeHint))); g_psMonoDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)psPortRangeHints; psPortRangeHints[NOISIFIER_TYPE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1); psPortRangeHints[NOISIFIER_TYPE].LowerBound = 1; psPortRangeHints[NOISIFIER_TYPE].UpperBound = 2; psPortRangeHints[NOISIFIER_DENSITY].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[NOISIFIER_DENSITY].LowerBound = 0; psPortRangeHints[NOISIFIER_DENSITY].UpperBound = 1; psPortRangeHints[NOISIFIER_BALANCE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); psPortRangeHints[NOISIFIER_BALANCE].LowerBound = 0; psPortRangeHints[NOISIFIER_BALANCE].UpperBound = 1; psPortRangeHints[NOISIFIER_INPUT1].HintDescriptor = 0; psPortRangeHints[NOISIFIER_OUTPUT1].HintDescriptor = 0; g_psMonoDescriptor->instantiate = instantiateNoisifier; g_psMonoDescriptor->connect_port = connectPortToNoisifier; g_psMonoDescriptor->activate = NULL; g_psMonoDescriptor->run = runMonoNoisifier; g_psMonoDescriptor->run_adding = NULL; g_psMonoDescriptor->set_run_adding_gain = NULL; g_psMonoDescriptor->deactivate = NULL; g_psMonoDescriptor->cleanup = cleanupNoisifier; } if (g_psStereoDescriptor) { g_psStereoDescriptor->UniqueID = 2544; g_psStereoDescriptor->Label = strdup("NoisifierS"); g_psStereoDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; g_psStereoDescriptor->Name = strdup("Noisifier (stereo)"); g_psStereoDescriptor->Maker = strdup("Artemiy Pavlov"); g_psStereoDescriptor->Copyright = strdup("(c)2005 SineShine"); g_psStereoDescriptor->PortCount = 7; piPortDescriptors = (LADSPA_PortDescriptor *)calloc(7, sizeof(LADSPA_PortDescriptor)); g_psStereoDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)piPortDescriptors; piPortDescriptors[NOISIFIER_TYPE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[NOISIFIER_DENSITY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[NOISIFIER_BALANCE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[NOISIFIER_INPUT1] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; piPortDescriptors[NOISIFIER_OUTPUT1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; piPortDescriptors[NOISIFIER_INPUT2] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; piPortDescriptors[NOISIFIER_OUTPUT2] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; pcPortNames = (char **)calloc(7, sizeof(char *)); g_psStereoDescriptor->PortNames = (const char **)pcPortNames; pcPortNames[NOISIFIER_TYPE] = strdup("Noise Type"); pcPortNames[NOISIFIER_DENSITY] = strdup("Noise Density"); pcPortNames[NOISIFIER_BALANCE] = strdup("Balance"); pcPortNames[NOISIFIER_INPUT1] = strdup("Input L"); pcPortNames[NOISIFIER_OUTPUT1] = strdup("Output L"); pcPortNames[NOISIFIER_INPUT2] = strdup("Input R"); pcPortNames[NOISIFIER_OUTPUT2] = strdup("Output R"); psPortRangeHints = ((LADSPA_PortRangeHint *) calloc(7, sizeof(LADSPA_PortRangeHint))); g_psStereoDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)psPortRangeHints; psPortRangeHints[NOISIFIER_TYPE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1); psPortRangeHints[NOISIFIER_TYPE].LowerBound = 1; psPortRangeHints[NOISIFIER_TYPE].UpperBound = 2; psPortRangeHints[NOISIFIER_DENSITY].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[NOISIFIER_DENSITY].LowerBound = 0; psPortRangeHints[NOISIFIER_DENSITY].UpperBound = 1; psPortRangeHints[NOISIFIER_BALANCE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); psPortRangeHints[NOISIFIER_BALANCE].LowerBound = 0; psPortRangeHints[NOISIFIER_BALANCE].UpperBound = 1; psPortRangeHints[NOISIFIER_INPUT1].HintDescriptor = 0; psPortRangeHints[NOISIFIER_OUTPUT1].HintDescriptor = 0; psPortRangeHints[NOISIFIER_INPUT2].HintDescriptor = 0; psPortRangeHints[NOISIFIER_OUTPUT2].HintDescriptor = 0; g_psStereoDescriptor->instantiate = instantiateNoisifier; g_psStereoDescriptor->connect_port = connectPortToNoisifier; g_psStereoDescriptor->activate = NULL; g_psStereoDescriptor->run = runStereoNoisifier; g_psStereoDescriptor->run_adding = NULL; g_psStereoDescriptor->set_run_adding_gain = NULL; g_psStereoDescriptor->deactivate = NULL; g_psStereoDescriptor->cleanup = cleanupNoisifier; } } void deleteDescriptor(LADSPA_Descriptor * psDescriptor) { unsigned long lIndex; if (psDescriptor) { free((char *)psDescriptor->Label); free((char *)psDescriptor->Name); free((char *)psDescriptor->Maker); free((char *)psDescriptor->Copyright); free((LADSPA_PortDescriptor *)psDescriptor->PortDescriptors); for (lIndex = 0; lIndex < psDescriptor->PortCount; lIndex++) free((char *)(psDescriptor->PortNames[lIndex])); free((char **)psDescriptor->PortNames); free((LADSPA_PortRangeHint *)psDescriptor->PortRangeHints); free(psDescriptor); } } void _fini() { deleteDescriptor(g_psMonoDescriptor); deleteDescriptor(g_psStereoDescriptor); } #ifdef WIN32 #define _DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void _init(); // forward declaration #else #define _DLL_EXPORT_ #endif _DLL_EXPORT_ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { #ifdef WIN32 if (bIsFirstTime) { _init(); bIsFirstTime = 0; } #endif switch (Index) { case 0: return g_psMonoDescriptor; case 1: return g_psStereoDescriptor; default: return NULL; } } hydrogen-0.9.6-beta3/src/plugins/wasp/wasp_noisifier/wasp_noisifier.pro000066400000000000000000000005531211146647700263630ustar00rootroot00000000000000TEMPLATE = lib QT -= qt QT -= gui QT -= core DESTDIR = ../../ INCLUDEPATH += ../include SOURCES += noisifier.c QMAKE_LFLAGS_PLUGIN += -nostartfiles linux-g++* { CONFIG = plugin # there's something weird in linux qmake...this is a simple and ugly workaround #QMAKE_LINK_SHLIB_CMD = gcc -lm -shared -o wasp_noisifier.so noisifier.o } win32 { CONFIG = dll } hydrogen-0.9.6-beta3/src/plugins/wasp/wasp_xshaper/000077500000000000000000000000001211146647700223005ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/plugins/wasp/wasp_xshaper/wasp_xshaper.pro000066400000000000000000000005431211146647700255300ustar00rootroot00000000000000TEMPLATE = lib QT -= qt QT -= gui QT -= core DESTDIR = ../../ INCLUDEPATH += ../include SOURCES += xshaper.c QMAKE_LFLAGS_PLUGIN += -nostartfiles linux-g++* { CONFIG = plugin # there's something weird in linux qmake...this is a simple and ugly workaround #QMAKE_LINK_SHLIB_CMD = gcc -lm -shared -o wasp_xshaper.so xshaper.o } win32 { CONFIG = dll } hydrogen-0.9.6-beta3/src/plugins/wasp/wasp_xshaper/xshaper.c000066400000000000000000001051601211146647700241210ustar00rootroot00000000000000/* x-shaper.c Multi-mode wave shaper (mono/stereo) (c)2005 Artemiy Pavlov */ /* Includes: */ #include #include #include #include #include "ladspa.h" #include "waveshaper.h" #include "LFO.h" /* The port numbers for the plugin: */ #define XSHAPER_GAIN 0 #define XSHAPER_TYPE 1 #define XSHAPER_CURVE 2 #define XSHAPER_AMOUNT 3 #define XSHAPER_LFO1FORM 4 #define XSHAPER_LFO1RATE 5 #define XSHAPER_LFO1DEPTH 6 #define XSHAPER_LFO2FORM 7 #define XSHAPER_LFO2RATE 8 #define XSHAPER_LFO2DEPTH 9 #define XSHAPER_INPUT1 10 #define XSHAPER_OUTPUT1 11 #define XSHAPER_INPUT2 12 #define XSHAPER_OUTPUT2 13 #define XSHAPER_TYPES 9 #define XSHAPER_LFOTYPES 5 /* The structure used to hold port connection information and state */ typedef struct { unsigned long SampleRate; LADSPA_Data * m_pfGain; LADSPA_Data * m_pfCurve; LADSPA_Data * m_pfType; LADSPA_Data * m_pfAmount; LADSPA_Data * m_pfLFO1Form; LADSPA_Data * m_pfLFO1Rate; LADSPA_Data * m_pfLFO1Depth; LADSPA_Data * m_pfLFO2Form; LADSPA_Data * m_pfLFO2Rate; LADSPA_Data * m_pfLFO2Depth; LADSPA_Data * m_pfInputBuffer1; LADSPA_Data * m_pfOutputBuffer1; LADSPA_Data * m_pfInputBuffer2; LADSPA_Data * m_pfOutputBuffer2; LADSPA_Data m_fGainLast; LADSPA_Data m_fCurveLast; LADSPA_Data m_fAmountLast; LADSPA_Data m_fLFO1RateLast; LADSPA_Data m_fLFO2RateLast; LADSPA_Data m_fLFO1DepthLast; LADSPA_Data m_fLFO2DepthLast; float m_fLFO1Step; float m_fLFO2Step; } XShaper; /* Construct a new plugin instance. */ LADSPA_Handle instantiateXShaper(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { XShaper *mp = calloc(sizeof(XShaper),1); mp->SampleRate = SampleRate; return mp; } /* Connect a port to a data location. */ void connectPortToXShaper(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { XShaper * psXShaper; psXShaper = (XShaper *)Instance; switch (Port) { case XSHAPER_GAIN: psXShaper->m_pfGain = DataLocation; break; case XSHAPER_TYPE: psXShaper->m_pfType = DataLocation; break; case XSHAPER_CURVE: psXShaper->m_pfCurve = DataLocation; break; case XSHAPER_AMOUNT: psXShaper->m_pfAmount = DataLocation; break; case XSHAPER_LFO1FORM: psXShaper->m_pfLFO1Form = DataLocation; break; case XSHAPER_LFO1RATE: psXShaper->m_pfLFO1Rate = DataLocation; break; case XSHAPER_LFO1DEPTH: psXShaper->m_pfLFO1Depth = DataLocation; break; case XSHAPER_LFO2FORM: psXShaper->m_pfLFO2Form = DataLocation; break; case XSHAPER_LFO2RATE: psXShaper->m_pfLFO2Rate = DataLocation; break; case XSHAPER_LFO2DEPTH: psXShaper->m_pfLFO2Depth = DataLocation; break; case XSHAPER_INPUT1: psXShaper->m_pfInputBuffer1 = DataLocation; break; case XSHAPER_OUTPUT1: psXShaper->m_pfOutputBuffer1 = DataLocation; break; case XSHAPER_INPUT2: psXShaper->m_pfInputBuffer2 = DataLocation; break; case XSHAPER_OUTPUT2: psXShaper->m_pfOutputBuffer2 = DataLocation; break; } } /* XShaper mono */ void runMonoXShaper(LADSPA_Handle Instance, unsigned long SampleCount) { /* audio i/o */ unsigned long fSampleRate; LADSPA_Data * pfInput; LADSPA_Data * pfOutput; LADSPA_Data inputData; LADSPA_Data outputData; /* input params */ LADSPA_Data fGain; LADSPA_Data fType; LADSPA_Data fCurve; LADSPA_Data fAmount; LADSPA_Data fLFO1Form; LADSPA_Data fLFO1Rate; LADSPA_Data fLFO1Depth; float fLFO1Step; LADSPA_Data fLFO1Period; LADSPA_Data fLFO1Value = 0.0f; LADSPA_Data fLFO2Form; LADSPA_Data fLFO2Rate; LADSPA_Data fLFO2Depth; float fLFO2Step; LADSPA_Data fLFO2Period; LADSPA_Data fLFO2Value = 0.0f; /* interpolation */ LADSPA_Data rCurve; LADSPA_Data fGainLast; LADSPA_Data fCurveLast; LADSPA_Data fAmountLast; LADSPA_Data fLFO1RateLast; LADSPA_Data fLFO2RateLast; LADSPA_Data fLFO1DepthLast; LADSPA_Data fLFO2DepthLast; LADSPA_Data dGain; LADSPA_Data dCurve; LADSPA_Data dAmount; LADSPA_Data dLFO1Rate; LADSPA_Data dLFO2Rate; LADSPA_Data dLFO1Depth; LADSPA_Data dLFO2Depth; XShaper * psXShaper; unsigned long lSampleIndex; psXShaper = (XShaper *)Instance; fSampleRate = psXShaper->SampleRate; fGain = *(psXShaper->m_pfGain); fType = *(psXShaper->m_pfType); fCurve = *(psXShaper->m_pfCurve); fAmount = *(psXShaper->m_pfAmount); fLFO1Form = *(psXShaper->m_pfLFO1Form); fLFO1Rate = *(psXShaper->m_pfLFO1Rate); fLFO1Depth = *(psXShaper->m_pfLFO1Depth); fLFO2Form = *(psXShaper->m_pfLFO2Form); fLFO2Rate = *(psXShaper->m_pfLFO2Rate); fLFO2Depth = *(psXShaper->m_pfLFO2Depth); if(fLFO1Rate < 0.001f) fLFO1Rate = 0.001f; if(fLFO2Rate < 0.001f) fLFO2Rate = 0.001f; if(fType >= 0.0f && fType <= 1.0f){ fType = 1; } else if(fType > 1.0f && fType <= 2.0f){ fType = 2; } else if(fType > 2.0f && fType <= 3.0f){ fType = 3; } else if(fType > 3.0f && fType <= 4.0f){ fType = 4; } else if(fType > 4.0f && fType <= 5.0f){ fType = 5; } else if(fType > 5.0f && fType <= 6.0f){ fType = 6; } else if(fType > 6.0f && fType <= 7.0f){ fType = 7; } else if(fType > 7.0f && fType <= 8.0f){ fType = 8; } else if(fType > 8.0f && fType <= 9.0f){ fType = 9; } if(fLFO1Form >= 0.0f && fLFO1Form <= 1.0f){ fLFO1Form = 1; } else if(fLFO1Form > 1.0f && fLFO1Form <= 2.0f){ fLFO1Form = 2; } else if(fLFO1Form > 2.0f && fLFO1Form <= 3.0f){ fLFO1Form = 3; } else if(fLFO1Form > 3.0f && fLFO1Form <= 4.0f){ fLFO1Form = 4; } else if(fLFO1Form > 4.0f && fLFO1Form <= 5.0f){ fLFO1Form = 5; } else { fLFO1Form = 1; } if(fLFO2Form >= 0.0f && fLFO2Form <= 1.0f){ fLFO2Form = 1; } else if(fLFO2Form > 1.0f && fLFO2Form <= 2.0f){ fLFO2Form = 2; } else if(fLFO2Form > 2.0f && fLFO2Form <= 3.0f){ fLFO2Form = 3; } else if(fLFO2Form > 3.0f && fLFO2Form <= 4.0f){ fLFO2Form = 4; } else if(fLFO2Form > 4.0f && fLFO2Form <= 5.0f){ fLFO2Form = 5; } else { fLFO2Form = 1; } fLFO1Step = psXShaper->m_fLFO1Step; fLFO2Step = psXShaper->m_fLFO2Step; if(!fLFO1Step) fLFO1Step = 0; if(!fLFO2Step) fLFO2Step = 0; fGainLast = psXShaper->m_fGainLast; fCurveLast = psXShaper->m_fCurveLast; fAmountLast = psXShaper->m_fAmountLast; fLFO1RateLast = psXShaper->m_fLFO1RateLast; fLFO2RateLast = psXShaper->m_fLFO2RateLast; fLFO1DepthLast = psXShaper->m_fLFO1DepthLast; fLFO2DepthLast = psXShaper->m_fLFO2DepthLast; if(!fGainLast) fGainLast = fGain; if(!fCurveLast) fCurveLast = fCurve; if(!fAmountLast) fAmountLast = fAmount; if(!fLFO1RateLast) fLFO1RateLast = fLFO1Rate; if(!fLFO2RateLast) fLFO2RateLast = fLFO2Rate; if(!fLFO1DepthLast) fLFO1DepthLast = fLFO1Depth; if(!fLFO2DepthLast) fLFO2DepthLast = fLFO2Depth; dGain = (fGain - fGainLast) / SampleCount; dCurve = (fCurve - fCurveLast) / SampleCount; dAmount = (fAmount - fAmountLast) / SampleCount; dLFO1Rate = (fLFO1Rate - fLFO1RateLast) / SampleCount; dLFO2Rate = (fLFO2Rate - fLFO2RateLast) / SampleCount; dLFO1Depth = (fLFO1Depth - fLFO1DepthLast) / SampleCount; dLFO2Depth = (fLFO2Depth - fLFO2DepthLast) / SampleCount; fGain = fGainLast; fCurve = fCurveLast; fAmount = fAmountLast; fLFO1Rate = fLFO1RateLast; fLFO2Rate = fLFO2RateLast; fLFO1Depth = fLFO1DepthLast; fLFO2Depth = fLFO2DepthLast; pfInput = psXShaper->m_pfInputBuffer1; pfOutput = psXShaper->m_pfOutputBuffer1; for(lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++){ fGain = fGain + dGain; fCurve = fCurve + dCurve; fAmount = fAmount + dAmount; fLFO1Rate = fLFO1Rate + dLFO1Rate; fLFO2Rate = fLFO2Rate + dLFO2Rate; fLFO1Depth = fLFO1Depth + dLFO1Depth; fLFO2Depth = fLFO2Depth + dLFO2Depth; fLFO1Period = fSampleRate/fLFO1Rate; fLFO2Period = fSampleRate/fLFO2Rate; fLFO1Step++; fLFO2Step++; if(fLFO1Step >= fLFO1Period){ fLFO1Step = 0; } if(fLFO2Step >= fLFO2Period){ fLFO2Step = 0; } switch ((int)fLFO1Form){ case 1: fLFO1Value = LFOtri(fLFO1Step,fLFO1Period); break; case 2: fLFO1Value = LFOsin(fLFO1Step,fLFO1Period); break; case 3: fLFO1Value = LFOsaw(fLFO1Step,fLFO1Period,0.05f); break; case 4: fLFO1Value = LFOtrp(fLFO1Step,fLFO1Period,0.02f); break; case 5: fLFO1Value = LFOtrp(fLFO1Step,fLFO1Period,0.25f); break; } switch ((int)fLFO2Form){ case 1: fLFO2Value = LFOtri(fLFO2Step,fLFO2Period); break; case 2: fLFO2Value = LFOsin(fLFO2Step,fLFO2Period); break; case 3: fLFO2Value = LFOsaw(fLFO2Step,fLFO2Period,0.02f); break; case 4: fLFO2Value = LFOtrp(fLFO2Step,fLFO2Period,0.02f); break; case 5: fLFO2Value = LFOtrp(fLFO2Step,fLFO2Period,0.25f); break; } rCurve = 3.0f * (fCurve + 0.5f * (fLFO2Value * fLFO2Depth)); fLFO1Value = (fLFO1Value + 1.0f)/2.0f; inputData = *(pfInput++) * (fGain * (1-fLFO1Depth) + fLFO1Value * fLFO1Depth); if( inputData < 0.0f ){ outputData = -inputData; } else { outputData = inputData; } if(fType == 1){ outputData = waveshaper_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 2){ outputData = waveshaper_double_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 3){ outputData = waveshaper_quadruple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 4){ outputData = waveshaper_triple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 5){ outputData = waveshaper_morph_double_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 6){ outputData = waveshaper_morph_triple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 7){ outputData = waveshaper_morph_quadruple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 8){ outputData = waveshaper_rect_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 9){ outputData = waveshaper_nonlin_rect_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } if(outputData < 0.0f){ outputData = -outputData; } if(inputData >= 0.0f){ *(pfOutput++) = outputData ; } else { *(pfOutput++) = -outputData ; } } psXShaper->m_fGainLast = fGain; psXShaper->m_fCurveLast = fCurve; psXShaper->m_fAmountLast = fAmount; psXShaper->m_fLFO1RateLast = fLFO1Rate; psXShaper->m_fLFO2RateLast = fLFO2Rate; psXShaper->m_fLFO1DepthLast = fLFO1Depth; psXShaper->m_fLFO2DepthLast = fLFO2Depth; psXShaper->m_fLFO1Step = fLFO1Step; psXShaper->m_fLFO2Step = fLFO2Step; rCurve = fCurve + 0.5f * (fLFO2Value * fLFO2Depth); if(fType == 1){ rCurve = - rCurve + 1.01f; } else { rCurve = rCurve + 1.01f; } rCurve = rCurve * 1.5f; } /* XShaper stereo */ void runStereoXShaper(LADSPA_Handle Instance, unsigned long SampleCount) { /* audio i/o */ unsigned long fSampleRate; LADSPA_Data * pfInput; LADSPA_Data * pfOutput; LADSPA_Data inputData; LADSPA_Data outputData; /* input params */ LADSPA_Data fGain; LADSPA_Data fType; LADSPA_Data fCurve; LADSPA_Data fAmount; LADSPA_Data fLFO1Form; LADSPA_Data fLFO1Rate; LADSPA_Data fLFO1Depth; float fLFO1Step; LADSPA_Data fLFO1Period; LADSPA_Data fLFO1Value = 0.0f; LADSPA_Data fLFO2Form; LADSPA_Data fLFO2Rate; LADSPA_Data fLFO2Depth; float fLFO2Step; LADSPA_Data fLFO2Period; LADSPA_Data fLFO2Value = 0.0f; /* interpolation */ LADSPA_Data rCurve; LADSPA_Data fGainLast; LADSPA_Data fCurveLast; LADSPA_Data fAmountLast; LADSPA_Data fLFO1RateLast; LADSPA_Data fLFO2RateLast; LADSPA_Data fLFO1DepthLast; LADSPA_Data fLFO2DepthLast; LADSPA_Data dGain; LADSPA_Data dCurve; LADSPA_Data dAmount; LADSPA_Data dLFO1Rate; LADSPA_Data dLFO2Rate; LADSPA_Data dLFO1Depth; LADSPA_Data dLFO2Depth; XShaper * psXShaper; unsigned long lSampleIndex; psXShaper = (XShaper *)Instance; fSampleRate = psXShaper->SampleRate; fGain = *(psXShaper->m_pfGain); fType = *(psXShaper->m_pfType); fCurve = *(psXShaper->m_pfCurve); fAmount = *(psXShaper->m_pfAmount); fLFO1Form = *(psXShaper->m_pfLFO1Form); fLFO1Rate = *(psXShaper->m_pfLFO1Rate); fLFO1Depth = *(psXShaper->m_pfLFO1Depth); fLFO2Form = *(psXShaper->m_pfLFO2Form); fLFO2Rate = *(psXShaper->m_pfLFO2Rate); fLFO2Depth = *(psXShaper->m_pfLFO2Depth); if(fLFO1Rate < 0.001f) fLFO1Rate = 0.001f; if(fLFO2Rate < 0.001f) fLFO2Rate = 0.001f; if(fType >= 0.0f && fType <= 1.0f){ fType = 1; } else if(fType > 1.0f && fType <= 2.0f){ fType = 2; } else if(fType > 2.0f && fType <= 3.0f){ fType = 3; } else if(fType > 3.0f && fType <= 4.0f){ fType = 4; } else if(fType > 4.0f && fType <= 5.0f){ fType = 5; } else if(fType > 5.0f && fType <= 6.0f){ fType = 6; } else if(fType > 6.0f && fType <= 7.0f){ fType = 7; } else if(fType > 7.0f && fType <= 8.0f){ fType = 8; } else if(fType > 8.0f && fType <= 9.0f){ fType = 9; } if(fLFO1Form >= 0.0f && fLFO1Form <= 1.0f){ fLFO1Form = 1; } else if(fLFO1Form > 1.0f && fLFO1Form <= 2.0f){ fLFO1Form = 2; } else if(fLFO1Form > 2.0f && fLFO1Form <= 3.0f){ fLFO1Form = 3; } else if(fLFO1Form > 3.0f && fLFO1Form <= 4.0f){ fLFO1Form = 4; } else if(fLFO1Form > 4.0f && fLFO1Form <= 5.0f){ fLFO1Form = 5; } else { fLFO1Form = 1; } if(fLFO2Form >= 0.0f && fLFO2Form <= 1.0f){ fLFO2Form = 1; } else if(fLFO2Form > 1.0f && fLFO2Form <= 2.0f){ fLFO2Form = 2; } else if(fLFO2Form > 2.0f && fLFO2Form <= 3.0f){ fLFO2Form = 3; } else if(fLFO2Form > 3.0f && fLFO2Form <= 4.0f){ fLFO2Form = 4; } else if(fLFO2Form > 4.0f && fLFO2Form <= 5.0f){ fLFO2Form = 5; } else { fLFO2Form = 1; } fLFO1Step = psXShaper->m_fLFO1Step; fLFO2Step = psXShaper->m_fLFO2Step; if(!fLFO1Step) fLFO1Step = 0; if(!fLFO2Step) fLFO2Step = 0; fGainLast = psXShaper->m_fGainLast; fCurveLast = psXShaper->m_fCurveLast; fAmountLast = psXShaper->m_fAmountLast; fLFO1RateLast = psXShaper->m_fLFO1RateLast; fLFO2RateLast = psXShaper->m_fLFO2RateLast; fLFO1DepthLast = psXShaper->m_fLFO1DepthLast; fLFO2DepthLast = psXShaper->m_fLFO2DepthLast; if(!fGainLast) fGainLast = fGain; if(!fCurveLast) fCurveLast = fCurve; if(!fAmountLast) fAmountLast = fAmount; if(!fLFO1RateLast) fLFO1RateLast = fLFO1Rate; if(!fLFO2RateLast) fLFO2RateLast = fLFO2Rate; if(!fLFO1DepthLast) fLFO1DepthLast = fLFO1Depth; if(!fLFO2DepthLast) fLFO2DepthLast = fLFO2Depth; dGain = (fGain - fGainLast) / SampleCount; dCurve = (fCurve - fCurveLast) / SampleCount; dAmount = (fAmount - fAmountLast) / SampleCount; dLFO1Rate = (fLFO1Rate - fLFO1RateLast) / SampleCount; dLFO2Rate = (fLFO2Rate - fLFO2RateLast) / SampleCount; dLFO1Depth = (fLFO1Depth - fLFO1DepthLast) / SampleCount; dLFO2Depth = (fLFO2Depth - fLFO2DepthLast) / SampleCount; fGain = fGainLast; fCurve = fCurveLast; fAmount = fAmountLast; fLFO1Rate = fLFO1RateLast; fLFO2Rate = fLFO2RateLast; fLFO1Depth = fLFO1DepthLast; fLFO2Depth = fLFO2DepthLast; pfInput = psXShaper->m_pfInputBuffer1; pfOutput = psXShaper->m_pfOutputBuffer1; for (lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++){ fGain = fGain + dGain; fCurve = fCurve + dCurve; fAmount = fAmount + dAmount; fLFO1Rate = fLFO1Rate + dLFO1Rate; fLFO2Rate = fLFO2Rate + dLFO2Rate; fLFO1Depth = fLFO1Depth + dLFO1Depth; fLFO2Depth = fLFO2Depth + dLFO2Depth; fLFO1Period = fSampleRate/fLFO1Rate; fLFO2Period = fSampleRate/fLFO2Rate; fLFO1Step++; fLFO2Step++; if(fLFO1Step >= fLFO1Period){ fLFO1Step = 0; } if(fLFO2Step >= fLFO2Period){ fLFO2Step = 0; } switch ((int)fLFO1Form){ case 1: fLFO1Value = LFOtri(fLFO1Step,fLFO1Period); break; case 2: fLFO1Value = LFOsin(fLFO1Step,fLFO1Period); break; case 3: fLFO1Value = LFOsaw(fLFO1Step,fLFO1Period,0.05f); break; case 4: fLFO1Value = LFOtrp(fLFO1Step,fLFO1Period,0.02f); break; case 5: fLFO1Value = LFOtrp(fLFO1Step,fLFO1Period,0.25f); break; } switch ((int)fLFO2Form){ case 1: fLFO2Value = LFOtri(fLFO2Step,fLFO2Period); break; case 2: fLFO2Value = LFOsin(fLFO2Step,fLFO2Period); break; case 3: fLFO2Value = LFOsaw(fLFO2Step,fLFO2Period,0.02f); break; case 4: fLFO2Value = LFOtrp(fLFO2Step,fLFO2Period,0.02f); break; case 5: fLFO2Value = LFOtrp(fLFO2Step,fLFO2Period,0.25f); break; } rCurve = 3.0f * (fCurve + 0.5f * (fLFO2Value * fLFO2Depth)); fLFO1Value = (fLFO1Value + 1.0f)/2.0f; inputData = *(pfInput++) * (fGain * (1-fLFO1Depth) + fLFO1Value * fLFO1Depth); if( inputData < 0.0f ){ outputData = -inputData; } else { outputData = inputData; } if(fType == 1){ outputData = waveshaper_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 2){ outputData = waveshaper_double_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 3){ outputData = waveshaper_quadruple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 4){ outputData = waveshaper_triple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 5){ outputData = waveshaper_morph_double_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 6){ outputData = waveshaper_morph_triple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 7){ outputData = waveshaper_morph_quadruple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 8){ outputData = waveshaper_rect_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 9){ outputData = waveshaper_nonlin_rect_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } if(fType >= 3 && fType <= 8){ if(outputData < 0.0f) outputData = -outputData; } if( inputData >= 0.0f ){ *(pfOutput++) = outputData ; } else { *(pfOutput++) = -outputData ; } } fLFO1Step = psXShaper->m_fLFO1Step; fLFO2Step = psXShaper->m_fLFO2Step; if(!fLFO1Step) fLFO1Step = 0; if(!fLFO2Step) fLFO2Step = 0; fGain = fGainLast; fCurve = fCurveLast; fAmount = fAmountLast; fLFO1Rate = fLFO1RateLast; fLFO2Rate = fLFO2RateLast; fLFO1Depth = fLFO1DepthLast; fLFO2Depth = fLFO2DepthLast; pfInput = psXShaper->m_pfInputBuffer2; pfOutput = psXShaper->m_pfOutputBuffer2; for (lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++){ fGain = fGain + dGain; fCurve = fCurve + dCurve; fAmount = fAmount + dAmount; fLFO1Rate = fLFO1Rate + dLFO1Rate; fLFO2Rate = fLFO2Rate + dLFO2Rate; fLFO1Depth = fLFO1Depth + dLFO1Depth; fLFO2Depth = fLFO2Depth + dLFO2Depth; fLFO1Period = fSampleRate/fLFO1Rate; fLFO2Period = fSampleRate/fLFO2Rate; fLFO1Step++; fLFO2Step++; if(fLFO1Step >= fLFO1Period){ fLFO1Step = 0; } if(fLFO2Step >= fLFO2Period){ fLFO2Step = 0; } switch ((int)fLFO1Form){ case 1: fLFO1Value = LFOtri(fLFO1Step,fLFO1Period); break; case 2: fLFO1Value = LFOsin(fLFO1Step,fLFO1Period); break; case 3: fLFO1Value = LFOsaw(fLFO1Step,fLFO1Period,0.05f); break; case 4: fLFO1Value = LFOtrp(fLFO1Step,fLFO1Period,0.02f); break; case 5: fLFO1Value = LFOtrp(fLFO1Step,fLFO1Period,0.25f); break; } switch ((int)fLFO2Form){ case 1: fLFO2Value = LFOtri(fLFO2Step,fLFO2Period); break; case 2: fLFO2Value = LFOsin(fLFO2Step,fLFO2Period); break; case 3: fLFO2Value = LFOsaw(fLFO2Step,fLFO2Period,0.02f); break; case 4: fLFO2Value = LFOtrp(fLFO2Step,fLFO2Period,0.02f); break; case 5: fLFO2Value = LFOtrp(fLFO2Step,fLFO2Period,0.25f); break; } rCurve = 3.0f * (fCurve + 0.5f * (fLFO2Value * fLFO2Depth)); fLFO1Value = (fLFO1Value + 1.0f)/2.0f; inputData = *(pfInput++) * (fGain * (1-fLFO1Depth) + fLFO1Value * fLFO1Depth); if( inputData < 0.0f ){ outputData = -inputData; } else { outputData = inputData; } if(fType == 1){ outputData = waveshaper_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 2){ outputData = waveshaper_double_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 3){ outputData = waveshaper_quadruple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 4){ outputData = waveshaper_triple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 5){ outputData = waveshaper_morph_double_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 6){ outputData = waveshaper_morph_triple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 7){ outputData = waveshaper_morph_quadruple_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 8){ outputData = waveshaper_rect_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } else if(fType == 9){ outputData = waveshaper_nonlin_rect_sine(outputData,rCurve) * fAmount + outputData * (1 - fAmount); } if(fType >= 3 && fType <= 8){ if(outputData < 0.0f) outputData = -outputData; } if( inputData >= 0.0f ){ *(pfOutput++) = outputData ; } else { *(pfOutput++) = -outputData ; } } psXShaper->m_fGainLast = fGain; psXShaper->m_fCurveLast = fCurve; psXShaper->m_fAmountLast = fAmount; psXShaper->m_fLFO1RateLast = fLFO1Rate; psXShaper->m_fLFO2RateLast = fLFO2Rate; psXShaper->m_fLFO1DepthLast = fLFO1Depth; psXShaper->m_fLFO2DepthLast = fLFO2Depth; psXShaper->m_fLFO1Step = fLFO1Step; psXShaper->m_fLFO2Step = fLFO2Step; } /* XShaper cleanup */ void cleanupXShaper(LADSPA_Handle Instance) { XShaper * psXShaper; psXShaper = (XShaper *)Instance; free(psXShaper); } LADSPA_Descriptor * g_psMonoDescriptor = NULL; LADSPA_Descriptor * g_psStereoDescriptor = NULL; /* XShaper _init() function */ void _init() { char ** pcPortNames; LADSPA_PortDescriptor * piPortDescriptors; LADSPA_PortRangeHint * psPortRangeHints; g_psMonoDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); g_psStereoDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (g_psMonoDescriptor) { g_psMonoDescriptor->UniqueID = 2547; g_psMonoDescriptor->Label = strdup("XShaperM"); g_psMonoDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; g_psMonoDescriptor->Name = strdup("X-Shaper (mono)"); g_psMonoDescriptor->Maker = strdup("Artemiy Pavlov"); g_psMonoDescriptor->Copyright = strdup("(c)2005 GPL"); g_psMonoDescriptor->PortCount = 12; piPortDescriptors = (LADSPA_PortDescriptor *)calloc(12, sizeof(LADSPA_PortDescriptor)); g_psMonoDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)piPortDescriptors; piPortDescriptors[XSHAPER_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_TYPE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_CURVE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_AMOUNT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO1FORM] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO1RATE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO1DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO2FORM] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO2RATE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO2DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_INPUT1] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; piPortDescriptors[XSHAPER_OUTPUT1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; pcPortNames = (char **)calloc(12, sizeof(char *)); g_psMonoDescriptor->PortNames = (const char **)pcPortNames; pcPortNames[XSHAPER_GAIN] = strdup("Gain"); pcPortNames[XSHAPER_TYPE] = strdup("Type"); pcPortNames[XSHAPER_CURVE] = strdup("Curve"); pcPortNames[XSHAPER_AMOUNT] = strdup("Amount"); pcPortNames[XSHAPER_LFO1FORM] = strdup("LFO1 Form"); pcPortNames[XSHAPER_LFO1RATE] = strdup("LFO1 Rate"); pcPortNames[XSHAPER_LFO1DEPTH] = strdup("LFO1 Gain Depth"); pcPortNames[XSHAPER_LFO2FORM] = strdup("LFO2 Form"); pcPortNames[XSHAPER_LFO2RATE] = strdup("LFO2 Rate"); pcPortNames[XSHAPER_LFO2DEPTH] = strdup("LFO2 Curve Depth"); pcPortNames[XSHAPER_INPUT1] = strdup("Input"); pcPortNames[XSHAPER_OUTPUT1] = strdup("Output"); psPortRangeHints = ((LADSPA_PortRangeHint *) calloc(12, sizeof(LADSPA_PortRangeHint))); g_psMonoDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)psPortRangeHints; psPortRangeHints[XSHAPER_GAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_GAIN].LowerBound = 0; psPortRangeHints[XSHAPER_GAIN].UpperBound = 1; psPortRangeHints[XSHAPER_TYPE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_TYPE].LowerBound = 1; psPortRangeHints[XSHAPER_TYPE].UpperBound = XSHAPER_TYPES; psPortRangeHints[XSHAPER_CURVE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); psPortRangeHints[XSHAPER_CURVE].LowerBound = 0; psPortRangeHints[XSHAPER_CURVE].UpperBound = 1; psPortRangeHints[XSHAPER_AMOUNT].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_AMOUNT].LowerBound = 0; psPortRangeHints[XSHAPER_AMOUNT].UpperBound = 1; psPortRangeHints[XSHAPER_LFO1FORM].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_LFO1FORM].LowerBound = 1; psPortRangeHints[XSHAPER_LFO1FORM].UpperBound = XSHAPER_LFOTYPES; psPortRangeHints[XSHAPER_LFO1RATE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_LFO1RATE].LowerBound = 0; psPortRangeHints[XSHAPER_LFO1RATE].UpperBound = 10; psPortRangeHints[XSHAPER_LFO1DEPTH].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); psPortRangeHints[XSHAPER_LFO1DEPTH].LowerBound = -1; psPortRangeHints[XSHAPER_LFO1DEPTH].UpperBound = 1; psPortRangeHints[XSHAPER_LFO2FORM].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_LFO2FORM].LowerBound = 1; psPortRangeHints[XSHAPER_LFO2FORM].UpperBound = XSHAPER_LFOTYPES; psPortRangeHints[XSHAPER_LFO2RATE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_LFO2RATE].LowerBound = 0; psPortRangeHints[XSHAPER_LFO2RATE].UpperBound = 10; psPortRangeHints[XSHAPER_LFO2DEPTH].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); psPortRangeHints[XSHAPER_LFO2DEPTH].LowerBound = -1; psPortRangeHints[XSHAPER_LFO2DEPTH].UpperBound = 1; psPortRangeHints[XSHAPER_INPUT1].HintDescriptor = 0; psPortRangeHints[XSHAPER_OUTPUT1].HintDescriptor = 0; g_psMonoDescriptor->instantiate = instantiateXShaper; g_psMonoDescriptor->connect_port = connectPortToXShaper; g_psMonoDescriptor->activate = NULL; g_psMonoDescriptor->run = runMonoXShaper; g_psMonoDescriptor->run_adding = NULL; g_psMonoDescriptor->set_run_adding_gain = NULL; g_psMonoDescriptor->deactivate = NULL; g_psMonoDescriptor->cleanup = cleanupXShaper; } if (g_psStereoDescriptor) { g_psStereoDescriptor->UniqueID = 2548; g_psStereoDescriptor->Label = strdup("XShaperS"); g_psStereoDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; g_psStereoDescriptor->Name = strdup("X-Shaper (stereo)"); g_psStereoDescriptor->Maker = strdup("Artemiy Pavlov"); g_psStereoDescriptor->Copyright = strdup("(c)2005 GPL"); g_psStereoDescriptor->PortCount = 14; piPortDescriptors = (LADSPA_PortDescriptor *)calloc(14, sizeof(LADSPA_PortDescriptor)); g_psStereoDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)piPortDescriptors; piPortDescriptors[XSHAPER_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_TYPE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_CURVE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_AMOUNT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO1FORM] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO1RATE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO1DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO2FORM] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO2RATE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_LFO2DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[XSHAPER_INPUT1] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; piPortDescriptors[XSHAPER_OUTPUT1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; piPortDescriptors[XSHAPER_INPUT2] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; piPortDescriptors[XSHAPER_OUTPUT2] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; pcPortNames = (char **)calloc(14, sizeof(char *)); g_psStereoDescriptor->PortNames = (const char **)pcPortNames; pcPortNames[XSHAPER_GAIN] = strdup("Gain"); pcPortNames[XSHAPER_TYPE] = strdup("Type"); pcPortNames[XSHAPER_CURVE] = strdup("Curve"); pcPortNames[XSHAPER_AMOUNT] = strdup("Amount"); pcPortNames[XSHAPER_LFO1FORM] = strdup("LFO1 Form"); pcPortNames[XSHAPER_LFO1RATE] = strdup("LFO1 Rate"); pcPortNames[XSHAPER_LFO1DEPTH] = strdup("LFO1 Gain Depth"); pcPortNames[XSHAPER_LFO2FORM] = strdup("LFO2 Form"); pcPortNames[XSHAPER_LFO2RATE] = strdup("LFO2 Rate"); pcPortNames[XSHAPER_LFO2DEPTH] = strdup("LFO2 Curve Depth"); pcPortNames[XSHAPER_INPUT1] = strdup("Input L"); pcPortNames[XSHAPER_OUTPUT1] = strdup("Output L"); pcPortNames[XSHAPER_INPUT2] = strdup("Input R"); pcPortNames[XSHAPER_OUTPUT2] = strdup("Output R"); psPortRangeHints = ((LADSPA_PortRangeHint *) calloc(14, sizeof(LADSPA_PortRangeHint))); g_psStereoDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)psPortRangeHints; psPortRangeHints[XSHAPER_GAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_GAIN].LowerBound = 0; psPortRangeHints[XSHAPER_GAIN].UpperBound = 1; psPortRangeHints[XSHAPER_TYPE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_TYPE].LowerBound = 1; psPortRangeHints[XSHAPER_TYPE].UpperBound = XSHAPER_TYPES; psPortRangeHints[XSHAPER_CURVE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); psPortRangeHints[XSHAPER_CURVE].LowerBound = 0; psPortRangeHints[XSHAPER_CURVE].UpperBound = 1; psPortRangeHints[XSHAPER_AMOUNT].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_AMOUNT].LowerBound = 0; psPortRangeHints[XSHAPER_AMOUNT].UpperBound = 1; psPortRangeHints[XSHAPER_LFO1FORM].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_LFO1FORM].LowerBound = 1; psPortRangeHints[XSHAPER_LFO1FORM].UpperBound = XSHAPER_LFOTYPES; psPortRangeHints[XSHAPER_LFO1RATE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_LFO1RATE].LowerBound = 0; psPortRangeHints[XSHAPER_LFO1RATE].UpperBound = 10; psPortRangeHints[XSHAPER_LFO1DEPTH].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); psPortRangeHints[XSHAPER_LFO1DEPTH].LowerBound = -1; psPortRangeHints[XSHAPER_LFO1DEPTH].UpperBound = 1; psPortRangeHints[XSHAPER_LFO2FORM].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_LFO2FORM].LowerBound = 1; psPortRangeHints[XSHAPER_LFO2FORM].UpperBound = XSHAPER_LFOTYPES; psPortRangeHints[XSHAPER_LFO2RATE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1); psPortRangeHints[XSHAPER_LFO2RATE].LowerBound = 0; psPortRangeHints[XSHAPER_LFO2RATE].UpperBound = 10; psPortRangeHints[XSHAPER_LFO2DEPTH].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); psPortRangeHints[XSHAPER_LFO2DEPTH].LowerBound = -1; psPortRangeHints[XSHAPER_LFO2DEPTH].UpperBound = 1; psPortRangeHints[XSHAPER_INPUT1].HintDescriptor = 0; psPortRangeHints[XSHAPER_OUTPUT1].HintDescriptor = 0; psPortRangeHints[XSHAPER_INPUT2].HintDescriptor = 0; psPortRangeHints[XSHAPER_OUTPUT2].HintDescriptor = 0; g_psStereoDescriptor->instantiate = instantiateXShaper; g_psStereoDescriptor->connect_port = connectPortToXShaper; g_psStereoDescriptor->activate = NULL; g_psStereoDescriptor->run = runStereoXShaper; g_psStereoDescriptor->run_adding = NULL; g_psStereoDescriptor->set_run_adding_gain = NULL; g_psStereoDescriptor->deactivate = NULL; g_psStereoDescriptor->cleanup = cleanupXShaper; } } void deleteDescriptor(LADSPA_Descriptor * psDescriptor) { unsigned long lIndex; if (psDescriptor) { free((char *)psDescriptor->Label); free((char *)psDescriptor->Name); free((char *)psDescriptor->Maker); free((char *)psDescriptor->Copyright); free((LADSPA_PortDescriptor *)psDescriptor->PortDescriptors); for (lIndex = 0; lIndex < psDescriptor->PortCount; lIndex++) free((char *)(psDescriptor->PortNames[lIndex])); free((char **)psDescriptor->PortNames); free((LADSPA_PortRangeHint *)psDescriptor->PortRangeHints); free(psDescriptor); } } void _fini() { deleteDescriptor(g_psMonoDescriptor); deleteDescriptor(g_psStereoDescriptor); } #ifdef WIN32 #define _DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void _init(); // forward declaration #else #define _DLL_EXPORT_ #endif _DLL_EXPORT_ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { #ifdef WIN32 if (bIsFirstTime) { _init(); bIsFirstTime = 0; } #endif switch (Index) { case 0: return g_psMonoDescriptor; case 1: return g_psStereoDescriptor; default: return NULL; } } hydrogen-0.9.6-beta3/src/synth/000077500000000000000000000000001211146647700163065ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/synth/CMakeLists.txt000066400000000000000000000007471211146647700210560ustar00rootroot00000000000000 FILE(GLOB_RECURSE h2synth_SRCS *.cpp) INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/src/core/include # core headers ${CMAKE_BINARY_DIR}/src/core/include # generated config.h ${QT_INCLUDES} ) ADD_EXECUTABLE(h2synth WIN32 MACOSX_BUNDLE ${h2synth_SRCS} ) TARGET_LINK_LIBRARIES(h2synth hydrogen-core-${VERSION} ${QT_QTGUI_LIBRARY} ) ADD_DEPENDENCIES(h2synth hydrogen-core-${VERSION}) INSTALL(TARGETS h2synth RUNTIME DESTINATION bin BUNDLE DESTINATION bin ) hydrogen-0.9.6-beta3/src/synth/main.cpp000066400000000000000000000034001211146647700177330ustar00rootroot00000000000000#include using namespace std; #include #include #include #include #include #include #include int main( int argc, char* argv[] ) { cout << "--=( Hydrogen Synth test )=--" << endl; QApplication a(argc, argv); int log_level = H2Core::Logger::Debug | H2Core::Logger::Info | H2Core::Logger::Warning | H2Core::Logger::Error; H2Core::Logger* logger = H2Core::Logger::bootstrap( log_level ); H2Core::Object::bootstrap( logger, logger->should_log(H2Core::Logger::Debug) ); H2Core::Hydrogen *pHydrogen = H2Core::Hydrogen::get_instance(); H2Core::AudioEngine *pEngine = H2Core::AudioEngine::get_instance(); H2Core::Synth *pSynth = pEngine->get_synth(); char pippo; while (true) { pippo = getchar(); switch( pippo ) { case 'a': { cout << "note on" << endl; H2Core::Note *pNote = new H2Core::Note( 0, 0, 0.8, 1.0, 1.0, -1, 0.0 ); pSynth->noteOn( pNote ); } break; case 's': { cout << "note off" << endl; H2Core::Note *pNote = new H2Core::Note( 0, 0, 0.8, 1.0, 1.0, -1, 0.0 ); pSynth->noteOff( pNote ); } break; case 'q': cout << endl << "shutdown..." << endl; pHydrogen->sequencer_stop(); delete H2Core::AudioEngine::get_instance(); delete H2Core::EventQueue::get_instance(); delete H2Core::Preferences::get_instance(); delete H2Core::Logger::get_instance(); std::cout << std::endl << std::endl << H2Core::Object::objects_count() << " alive objects" << std::endl << std::endl; H2Core::Object::write_objects_map_to_cerr(); return 0; break; } } cout << "bye..." << endl; return 0; } hydrogen-0.9.6-beta3/src/tests/000077500000000000000000000000001211146647700163035ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/tests/CMakeLists.txt000066400000000000000000000007641211146647700210520ustar00rootroot00000000000000 CMAKE_MINIMUM_REQUIRED(VERSION 2.6) add_definitions() include_directories( ${CMAKE_SOURCE_DIR}/src/core/include # core headers ${CMAKE_BINARY_DIR}/src/core/include # generated config.h ${QT_INCLUDES} # TODO be able to remove this ) FILE(GLOB_RECURSE TESTS_SRCS *.cpp) link_directories() add_executable(tests ${TESTS_SRCS}) target_link_libraries(tests hydrogen-core-${VERSION} ) add_dependencies(tests hydrogen-core-${VERSION}) hydrogen-0.9.6-beta3/src/tests/data/000077500000000000000000000000001211146647700172145ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/tests/data/drumkit/000077500000000000000000000000001211146647700206735ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/tests/data/drumkit/crash.wav000066400000000000000000020300541211146647700225160ustar00rootroot00000000000000RIFF$0WAVEfmt Ddata0p-y2|nJ!orpU4B7e dTY^wKpJ[pi+nyah:XMb!l ;{ |G!z[k{* koPiG#)7w5mD !R UmcV0HH3 yqv;\+]~*7f`V<!UWL0U-h SVC"->A2*C|%>l.Cyx9xUQ>J=Snm(swf.Lt _5Ch<8(#m7A]Z"K5gV a7U&k]cuC2T3au,{c&8Hb{T'; v= 8II8A!#qPS 4ukGZ [ /* {b @ Z|A@z6}<"n~4jp<#}{I&+CBRrf/HKy59   xg XiE;} *H;caxiUuX7Y(4W?zn.=+f[]PB~_jT kx /5.[  cI *Q ]: S X 3'N  ' y'x>[N -^]OyJW*/t)E!RQxb9U7 dB1- [J 2nH0|%4.,[LB^9 0S)v'-(Bk{na@  b_60(6YKr3>Z2<FHfb&._o V234bp&+#7Z):EuS [;W(s=KNY "u?Xc#/PG  dS5[$aLy'g"0?v!ze?'o?'MHU rwIdF34 4v@v#,isqoLU)+Ow'='lJ>v9ow:@y-zPP9N7!J k`,;#}jZ|>U+"T 7zM?34k*kYsJS.}*g( fgP\GOXL<A9K%K%B^`#iVY0S UM_5+Hk[/0QU0R(FSa0kd UE?DFE8t*mUNYACUYy?  ;BX? /T{mtx@ / dOfF8)&4UC?w`>Z8#@hS$=1_"/ g"dL3  [ >L}7/AFqu  D  ?&f6]P \k],\l22. o #`/N5SDInp  5/xp;GK  ^7k [EoSj!Bx hYiyy Ye  e83Z` Bx+_6 :t/j+&6=]F2y"&3 ef5[Q@x="Foh\ _#)CFB<]gFmt O `g7WR4q W& =]v\N]:86et(C: %Om1 h2Li|G(}r%^ >B'B B7|,Gp/WFP F f&  t # i2 U' ]N.W(6 ! sD  +:Ph0<<J 5i"h]%faH_?\ > VUxD UCXk0\B hu"0u^<>K| Q"RUa,We?^-P, PJ8FE:&PAsfhRV*  U:en=7eW:Ea _#+f}W8"9jR'~UUz $ h2A*x!  Tv*E/~v%aJfDj dN> [7%9qw $BH<`Wrn%G-\Vdtumq o&3_nc<{]1  )Ii; EN_dw )k^t c +rS Lb;wHec;=` }  #/ g\` %7PUHd/f)HJsTe +n+ T@HSF6G ? 19M*]Uh 1V2J*~ ns?fC&<Q0UEs(|.r 7 ?v CCU^ > ~u f> ' Hdg xp x '"X uG *f34> )E  *|\aE)a^1 b{VcbJ{D0Y>^C-G=q9n8Tx@E0]m,Qu{<sK Nv% jRj*H 6 1Tw=zlshXFu 3 W2~OLXk%TX?]~t3 uO+U]5sb=w }G=   |V5997zTlo/wad&\WXIOFo 'ZK^}i/>r(2yYR.OsA}36*  _l] NBb8 '9xX? ,P'D ^cZMZ: cV^}8 "~^ENNa   Cv*hyxahm% ppE d?n"Z6DNqjg GBDTbd>t3x%pu[>^XG)+h?MZ{b6 N !wF]-8 DT  ?|AII+!&W(X tn?]AL/Q#'giHvOWi-4{ Bs .z7|U| Ou iR`LI]4>6X`5zOiJsh"JYS_7'MH >Xia=>"|mU#c?"&wq axv)*J^ OLUP$w*Z*> L iO]$ F'.RAhwa*?^pf?hYIz e3 --u!A|Oax 4tcHx AKM(dA0 CkBC3f!$Xp8IE~+w#4 HG;x Wsr)3aQq9.TrISiyN8)5X5xS}VGz8Dz  3 7Hy.0*Xz[CSW\(B V:Z4_d"2?6B`z3c Z$* U,19M*)2U S' A8z,#Ocuj]QO|]1qg9&L0s,Y TvfIT9UQU>"]:g]"_u b 4C_/v w' (&Dg_ 2  _ErB&&tCp|N=!vD NeS&& :b6Lz5q-Z0*:`+Kk: `  GT; dTlp}5o D?2*>bVWP*Rc(++Hj|kTu$k\OB5 JFNut-O#a\S y#5$e[qg'Rj.$ 6~k2AVSd,] e~x D)%BQ6 X;1-p8T0&;pyGv O mCj[Ik _WS"3B\%*UrjfvI{F)rtjIk:_jTNx)N= p]MK~,3b QV;HCuxoh@'t72<-[. +zLeFF?'8vg{,wF``e?|\ q vp1I$R\\~}{D z vi/BroOTM!QtW+X[ul ' & 7dHFr[z"OI5SFrSvpaL& ;Jcf0>mMYGafQ-X1w;I=zd!QPXriy.rB xXJZEI(>:"r+)@l#~$U$g%S.p{   pQ] usiRzF#V_j\b;k:VieIzK|ezG topLWO$-r8 RJqV+IDLh4!hsT M, soii 26HL(C~ vvp7Gh2!QkwP= G [A&{x(8f@s||"wCD_?6M"O4}4\D]/K[> ^fVFd^.c)bX xjE'7 !hK)/>OvT'MN@ $f}Rq&r}F o[d5cTuCJq'hv Re{'1LB8| w 6Hpt]LSXUZO=EIQ4 RD nMRIU9N_1lX * $ gm!I]ZnS%_TR>que89H1LRunb g2U>mi\vo7eWI{${AN_mxS^K: rz~}5QlxjWhK$MO)cT+tJT  -${E!&"l Xx=i\(SSm| f.Wh"{Wn(p Em1(1z i1'oF 2"Bna0DHIBb_XMVl^b>;}G ?JH~UnVG+ JP(!L sZa<`hD|^ W*8C#u5=(j!\RHE#jVJ ?g3E>^V{Lj?B ELwuu4bGQ]])1 o+yw ]M M}p )_*# qNw = @Ko4 q~FcwETTVC2vnqIPn W%HKp#~@u3K.s wqmwxh=+5>pL  Oj (: _4aelFrKIf~R\kPMDcVMg< q_&T2Cn 8GP~\1gu.lnR^H* e,A*_ I`to<Rh Z7 *-u %48J? !$O-0Fk E(2DcmNyj$]rqH}- }T! 84'7)bK^^(dt|];s >RkOJG { C~r;Mu:dakd>EsCye.:&4=d",t)'YBB;& W=\bIZ"3M,g29\Gj,z-lRRL 8MHs`~M'n]:4NB 'bAjy:T';(n)e@:N\O;}DvGBwglN}yTmZ3 f^4 0[zRr[;b MJ c ckscLU=EDuV6 H jZ'[e+dl-e'k[7aSL Kb7 =zBl~_PI+," h>BG^{~] Y#EfWt } t$;X}b xm{>yJTn wjbPdzX K, ;K 2:ZUhK| p+vmqF5$]}5j*O VI~7_Mztj(Tz Sx4)ewX5eL:F'D`l 5T! Akn () @08bc'v[7F^ wCK_  !s4CPLw<F<8/QTHQNHDz&c@&9,\x"K3TS" ` oL^@);Q%MU/us/2 6JOx M]vm0y1yr[4qu(mzm#K6\~ k}.*gy`I17KRBj.6=Le  qN UAx(KO?gGIV.OHrlRw2f-4 (W1[c~KX-%9xDZc /"?- ;_nEwHqy#d06H !F5H@)EJ<)C {t56;(wUQs /qsyv%UBx<)bz  \_GUn5xh;A.3Z{2gw;RJd +Pf<dNz< ^/_)^?cOv`_7wkG={FRWM-|{, g89nEL'Rxaw? W{ik#"K9srHU 6eJF`(_wy!q 1d0UU 5/aIb6C_r ;`Cy9d%   f"oBvl;u@q";ul5)F 4"/)-sSA!?;1] |~1; Mq"z)vhP/|dGGL+o1$YQBl@O#{vqn.2TJn&Xz/Stpdg}n{ z(dFz# :Blpfn:OxgY~ .-:!m1<)Lw_ G;  1+_A/C5 -G"1dT!gm)BZ DNPA#XBgdh$ $1 ) (t K,2FO1)Y)iY =$KDXW$RBU~sw8(uw9kKt)Bw U]h>yVx:s+<# j w6)^CWzFrY@&!w% 8P  I0Oh>@t<  ~bV xvI>  <|92b/t@ l0;QiT^LV^#'LEdt*D|:,aY74h($"PY<mlw|!%c9y!cN b?wka>N|okaG E%ic&vRiD+:?{0<~M- bE"U<.b?t 5vB*' |MM}E gd3g)I" qzy~,By O OOs e \"U)Uq-7~i1 u |VOd;lLjwKSNe@>\R{7w]%fN1']H>y^-b^NEB"}cv|CLlv y:y lKBo{B"UFZNQ-z&@ krF?k?OH5-Q[VE 1jQ .D|  =~JTtu7 3!pi6{(FZbFJ )3XIfo1{ O>MDrK1 [H]H D BN]@z48Pd+4t7-z;.9 Uf>k }>]$D24$u0R]7e(S_oa<3Y4LcnC,))4?\0ERHRj0j5u"?"WmB<)s=Ym`~IkC,E|T]OUA \ u:{ MPQ3,A<B?&2*/-"c>O4U :(vfH:0($Y={^zpLC./x C'Z<3j7}r r riEo1[.` l AW+j4BoS7 c ?_nbH. Epws 6sfWhwR`sa#S^Fd0EmS hWI }tD5V ;;v7fF,NT1@6m3aq !G.S9dP;UzLL%dYT9V2]O/sj[-7,rC;(5YT~unHIeCq23BYhDI[ormmQ&yVSF=>UORa 3z"rx 7*-i>|+-4l^tKlc;!Fj0R 8!'EtKf_3.QG g #/9@AyeP|5>F"N$`MiQ-<+<1oOL>^CA|'2nNK3HEvh1. Z=}'Vb ei8My R@W~VfXz)UZ Ki5Xy`d l\b)J}_qi$&[hjJs 3A>T@8  :WE>l q/PM"Hk#(gPplR/|4_{ p8Tr63NA$RpOllwQ@.M "!Le`3z c "D+5d{,-iZS1*tsfh'Sf)zr1 1AzQ]8Zkf`20Cv zn7PK`% lsY>^T8${S@|rMqWf\mwK&h2sP;FgmzJR[Pik? ]V3Q/U(,.8[`^@s>Bb6(\yRT.JAd?% EY%*Lk >K6q}[C:l EI;R$]W9t5]4N>qUO'v c;B[Fx0sa>>p]qLW,Y)J6|a5&]:p ih  X^!].Cw,d(#eh*j+1D-s,&: Y.x'2xod\Y "y'2T f$*Cmf$}j}s!}4C 2i; jUwszcM]qPn&l9O)g+",lTf[|UvD7q8(k:( }|O*}xx}3,0U] 4~WRvB[9vEe{!P%8iNmjz6' fU^:7(o):kOu0UNs \N)ld=\Aqa=-5ugwtp+33C9Y Er1mO% AN"Jr)8vP-,)64VHN%*4u.`) H=vln0OiFZI%X}m]{`t/%%?aWF N&!eXtUENt*Br~)/kmri`U(5;c9o3$Jg)<Wed297+b<oQ?:iz{ ~(G~l#8 =Z?dnZ IimfLkVyDAAQanxmZr{2ed{3br])^'W:2KK8s6N|K*W7 S{,(_X0gcczcS~" zy;P,7;^RYLV+`dd_`axp|7"q; R A z[9y9Li kC:w, "ca=?XYbC8 |+5iVN+ :{Wi *_s?g\{ U%PU }K|h&UmYieaI9 pa> w4Z463pF :n=p0o0D:+'`S\d,R).Ht$ ~q:AHR(J*LUfE3|qyZ ^-1)3z]Y}KA3Y2O<tB_E{s3sLSL V;A G5nKi~6|>)C Z ${R&$jz2h)\&D9Q^ %;B~;jP;U`kCm;3[!_::Ck/EnPnh0+$\\pgr Y@  f:`FP|P$riM2Q5uSTbe-sE7QAi_*?03~*4q@W WC7>WME T<5_zv?cr)_Yt B9 #Ft:ql03e73_a>'H<(6YyD Y5AiW.P,aS]"G%!]vCaV%y^~6KMLJC; +lcH! 9ZDOQ9;IA,RHwu |,]l|r771VaYM];&#;s'-r"id*~x 6<Wi 9EZ W3  &5k!,[^T St}zhizQ}^W ecr{t ggAO{2w8*BYf qaD{jjD | >CL;45tPJ/sxYmG9 $~AOq}4GsM6'aHKR D#;b6{"] \&fD3 (^ ^5Na VA|"P)4 g>Km~@pD$Fg1m6yNy#CA(B{s UC3x dr6CT7 a`8'w \ogXX?f<k]OjT`z>!:1z}%?96Y%F1  `?;\.7o7  ;l_egQ4UtZ )t )]wzW!"X6I,D9jism32 NX4K/$No%.2Cr-v8h:={/sh7`2f4~c!Ktfu,-kHYkvW%l1vGu}Ya\%IK=P)Kh<?L? 2Ld-nWMpo?iH#~)"Gtd~FW|N/G[_U  )?d UUg*tR.9L{aVUUjN&/$]cLVwyrfH.;f Sxy;SpX~>7cY4 d0^k`E !RA=Ml 4_  $iqT{0moH'^w` T- 5&C[ ^|UKC=(,P r0pmCL0pAD. "<!> 5$z *u6hv.{KW{Y2Zufjm lCl"}# &&j-cK; X4|;r~ 8T)IDQody+_} L %S3]6&Yr|ycSdr[zuQZ~~hmbRBA1)Wc A m%T [WPOYl0lI F{)mlh#r&#xI`JG3>v iM ,[!6U|Iq^\4Udh9~ zY6ldl~87Aj$Q[Eo3$q_&F}+<P(PZ/g:hT&;;\b.g>"f3mRkS<2"_EE7zn]zg@~q$N9D<#!c|RJ[DX?$^cqq3RBOH6,wuc~IRZSy4}3E,3! Z%?|^vEfns%(dec VSh^;UjA~?e*x&J;H5NT.tLY1[^}<7D5Y9D u(cLjnB}BaCqn_/7s,zpqE U'-@ #!GZp~yfbe3*lw"&YyWZ I/B-e 4 Lxx]3fxc,ql=^Vgy7yhRp-QVp<{L$)cvi+ t;+]|S8=WEG[F:A+aY snd$E_ccU )}6nw Z)  ,0"`[x8jFX& avr~5wz ;?@B lYI m&V|7 6Z>% ~YQ5nC# WTw??4y*Fn$,tRrL-h(Zm\/`6A; a9sxS e8jg>(5CLYgQu)Md@&)8:S2L+=}Mz#$S-lwS#y+@ moAg#h;bQp4*zc3'rjvi Hv 0-CoP?GZb,kmvg(sN&CH8yK*zs8kIREw/j^'8<iO%|ho QnPj^> a+/c"lf \ZjI~JlZBUI4j|iP5OEUU $C2JHrA/1%]W6(%-r$B jgYlB &&N^!G <?G&CmG\=ACY)s<`}nq_it\:U0}e| ^;6% L YOcI~wsqB>QGt_r^g >#-3;2t^;%W"Te8"b{]xv_K=wlP`a\)O["Ow+57b+9$L,T* (#qSzzHx9t:ums$[b= MI_[}N8_6Su%#kvp]7{?CiX;XL_+/s8o4z'+j5Qz$`:LBsRS +!u0Vm+[P$pA]}'3[+.[X(t{-%*sg[}O ;XGa?B `x[EQ Kns <i(Fk  t@I;ci $<}, "hl#/qjz% t?pia vVb|Vlv- cMR->J I$<Bz=Bm%'; 7FsynxPEJ,"(uo-|`&SI|ne~EoTIJdxgs3Uc%I[AQmDJZ5}FC3)PUh,mIV|x5X?0f0U2}{}I3@:cB*lWj% 0th]m [38XP Pw""mPc,Ql pq@_?Lv.#L6C g4Fka6^," ,@_|\nrXj06$Pk%LVhE6>uxp}jxCe* 0gN$9Nf$w_Nx*[x+7s\%lTuQ}5/sq.y/9lP BvUCluL>hS7].W_1SX[c#<a`L6dRJc Jg5ruT.Aab=CAt9J]?U_+^83+p[ ]r~xTqFh}^Gs' Y.UpU8g[,B{zZbqNbDrVTa$"fd' /9()Y^ ;y/?JMiDmgv<cKV+}'IaZO\\2) R4*NT||,l/Ecs)6HX">}2P l[3Ty|~:?"=GC<,1>"fU#^HoO_@BpS?^D-U f1X^8]:n$lv"V80%enr <=+rrF.WqNb{I\V) ikDd`5l~- Jjj :u5q8$Pk,?!C'D > !}$W6\D TEMmrn71Z mebatUcX:o_ujRa~0eP|.W.gt0Jfp p!YBw~X+)L:0$2hzZwFWY}u H&>21G}6d#AYgVJ1 >TUr3 LJg'>>LtZ0L@CZ8jpA*7V`>Lk-f\~6|X9 cJN~u+~fFK`DYHk@K(JI+?V'3laV( uc'tA7A _oC_P |q\x#:(<-YBT~q'uq.fhQ0=gEf #uk`RB1s#MZExEz'Jok>)Iz Bx;1)K\sa0l-I;QTIG[L[/o|\+`y;` ;sA{-*cka(^PffAd YuMk/-%IaA}da{e 2bimT'Be(#\T+E!8y>X@M{oZ5(X"-'HKs s+2;2U^+j-:=dV 40K5zE_ts|aqtEOE/ + Yqc:t(!>7,m@hhxsouik/|ou{rU\U!9N$?^u-/"M`5d6BgOIo]MQ?aJf@MSp$m-Wdq*UshX,44wp)&; gmuL8)JH@9|]TSm`)q{X/)H,\s@+| r!{O:m,XLc&Y0&,T(#K@&G S!g |/QzE>&uKW)tT:lWxrN-Tb]mKx.-%c6$K#Hw7>j% K}*oaPI,d6HR3V$u3-;4WN^V!F|^w J$"+T YEh cvss$}Gs]qbK4@n3;TBmpcf-dl 4y "asmc'(H*Pj9Hcc{M@i1 )k})o7uf>'N w7 hyq^#LI/s\HG*X1AbHAz(N2L  ~PD;9 2L6}5CvrI@< q*89Tt+<}&j0_%: Pj]r8qiz`n23&;'RDyhP#j,=HoQEX=gG``SyS'U<]ux`"To1d_hep`QPTi \?G?,lSa[ {7~- 3FH{cA?t/v , "$y8i.CQX4te_.mXgurBU*-hqO T0vL2?F+imw(^ |M 1VPq:e+ @<}jUR$>iw'f e<{=DV`<7_IhP(Zq_YnO(Zd36>N=F(?fOF!FQb!<^~ Supw*!e cI8';H*W[]Wg(x1 J]CB4HRJ`(&8vb\'h{A? zmnqq {ii@Fz@A j$d&u7&UaEnW tp";(QV{/Q  5|W(D ^uO SWq wYA_T1_li&7T`Q;bN`?lJB9';QTq}rqH[+sq*D i^3w$"2gfGio%97[|?IwA#6}0M-Y}{P3{ &YDxDKXo*$7` ]8:8}MwzoY/hz8|uQ1."kR g0A'NTo{_"P*eGtb3bb q%Y9afvTelHQ:NP%}UK,p:}mTnBS+k,|48(jfcaP~CsJ x.9SH.M`F 6 iS`h#OGn ^\[H "oG":?KTd7T<:4{.=tuwH@&R( \uFpeFupz?gda9 Xe#3Y#wB0;,*|o%X\x@b.2 *Gya [%5m"->IpaPlkUXd)]7^4O(`(M684 Me  ;N2j8=E <#C6_7lw p.Q[_hn5b O2mc^'hHc516G%Pp f%LpgTL^{ \Y/:cp } "q 18{gIJ{!Q.0o~ie?5sT(v 20jt9X'C+V'CKXg'nNp& Lw:f96@ =eb>s6b1X_o'  "( ~@{i1Ax( (1&bD2(S60vp44#>B+r+hS,JQ2t- Aa^SHPIVx"5wmvKqwxfA;V"1:/}$xx97l'?Rk|![\9etKLS`TK* JA?>M,="]|c7 =k0Ir<c?[s7O%0~LJ38*o;4d ?S4.. ^b|4+$d_'Z`&ISvgED/+Wgz3Y-:pX l"s*(){\S0T]T9mP?nN5676JY@ec1/\nhh{s`;M  ))#o,L|R?'L xjbaW|Rl sF!rm|? N<?bJ I| 5D=aH6v-Z)`u^iZPpw= H`0\r/; y]:L#_{}'(NO(Um6h\G K Gl^g`j #JB|\u|ss5xnV42\~|2;L.Fc!qcQH$6<CQu-2zP%x7wYo3Wa'? JmDQ=@$>S8@}.h_t,G.u)7 ^'[LkByq;/@wy,@}>#4&:jq~F}KZh_aN^ Es(4;\-q;a7%TjDQsb S;A?ie$pHlIsvE;*ATJeeAVdDOYZ}5!lGA*Eu4*l)}+'$ut* V_ ++7C./iB{Hv\ 8Wf2 ,.J`rsz" zf!,m\4TC?a2 $t{!^=HJjI#U 4")lS.8V{ U5mge^$[L='J~ag$4CFIE'aFfhexW&~+c6'7D+!,SY,t7 Hr[[l$$0_G&#=(ZYQwI"nmG$cCP97+y[sEX9_fAXTxZj: <i8]{:qU*Cn;*WgM jp34i;q$r4.\WY*N9 "8?fpI1& oh 6=>6U7Kv-Qb6UTs3.)jMbp7rL?#,,D OPII0!r#G0f8"UBEZwv~>Jth 7e8Tb $;iSX+CIXd/Qju-U +`dY)W,E*r|IF|,6k?LS8Bt8m{$NV"V%W[5,5w7Zg+><eC]"*',D\k)_Y*F)"{hu`P=[9Z+L|S^CT5]f5<j#/h6vV-ht=!Yc!Y4nt4RvN}cqbTq ZnB:r`u^+n2bZahr_l8xVN$k=D~M`L<`6&OesBpl>"lP:?6]t3QLZL4l#[WM?ArZ-S|HO /!M_L5aK<cT4'6HX{\M\&mHot7BdJlt9yO5yK1%J$bz>GnW}//Z d4z~SrgBNMk/Bb D=4`faBpuUY34yxFPd?"bMC#c }0ro[b(+] F2u'[w$*Q4\CC=`"\ KU_TN^|Xz7AI5Q>7\~_W0K>D]  zI| Rc\w(Tb`to 9 #7z as_]L^{@N!i4@/ |SR6TF?]0^,=ZY)*zF!Nuk^j_$?@Z#TX 0^k[.YndVCJbQ+u/aUaD M8S )e|s =u?slr:]^?p]2,j J>?bq|FZ_y].y [_RfMAj3hhCuNN:7r<Q*[&MM!Bn& ^Yf~SXgz2l6[e{ 1p>AHEd d$:%\g,O d3HclZ#)M2xf5=w^$>*l^7Q]o V }G!rP1/e]}RU D2~S/a^VRbG IMmAsdQ]K_+?x7?8/6H#o$j#pY@Bl3hKZo]:5k"Qep)I;m JSu8erpVILDjIM uAmzV`38!Py1030b*HE6ULj\rk;7 rQlna7hm3hD]{'6lCj|{f!S;[x {HiQ,3g8y?khs8u|,xXlY5R8.4dlwNd_lCHs*(%( r, x(1HJb\,i) p7)>tW#6 kztdj4il{Ccvp<1$V+M+^(?r%R [\2~C}:wqi0NG'&VORJ%4 y$-{{7VU 'S8:0Q+:CZq], `=7N 8=dwZQ6;^2N]f }P{glf|_cRuR? % 2`IVQ!I/nuJq$%f\"{pYT hTW7Vzu}H"e!YNX0ml# kvWUXp-hRyLw^qJH5&78)AxDT)Hvv;zA) y;C* PG0)9uiJJ~qNWSp[ee$Lz MPc"2OyN*b?ge7XWicWIeOk0I^%eOIc@jg-?AIi4:C J>;[TkkROk]z!B)_T]P5e5Y= YL"Ip [1bD P5Z@ =7CT^p  a#L)>Ym2nOs.\]@_*Q<+i.aeDa6qQS8qm\!**6oV} r/cusl;}/me.=W`pwq fzE}=/.:i1P-B^$v}H "g+e)wl!h !M 9)0]#JZzJ7\Z?u ;(3V#>AqOu(*m>tPdSfqpBdnXA7^iZEWvJu/zOmoM]J_M/)9v's .u)6R"E^AfLX,\k8REc.p%uk,Ndve!x6XR87# ]0bo~Yp5&x,= W[S@1Ne@5_5 rW*=EHbgZRYb\JY oGC;&*8v-3_-c F`[<0sT*}>|B_RVo 9VIyg4 Z@kL#jW2x! S-?L`;fshSN]Yf.5c>&{ v[a?hm0N/ HL+d6a>Wo;2d0~QkI,/eb8M <z(S_&ILbl?.5EZq%`B"W4+::D-3w&l!x}ygx1` &%jGG P}6%+MI_YD3(xL~C&XFZFhK!Ma!2t lXm[ukxlJMLC/ \OG GVL[6| fM?z{'/k<G_J`rT'oMAgFVJ#7>aM&7PD I9PRX@J;gT=:u:`bTIY `;h%qBxW43P,J-Je~BD=Z#m#ju ^q%aMn ByTLU&1Z=b(y0F<5O^$@|wUD Y^a?zV $5||WiS\AX%^VMktCj5 '>_-H0D(_A',Y}T#gKq`#Z]767<%, :[J<| ; KTC5\'&29nDZSB4%qMI*<!tcm2+ ,?W[f"L0(d b a3,;lAPSj? 7=z\Nt(AA[6e@(w#MG7uQX09WoOeA}Gb^+eKW j-T. a\g%)Q:=s@+!P[+f#6OxY,^+Wx'~02L*;hikQm+XdG+&6Ebf-@{mC5) d"y ?S_\1gV}+Oxa7`cN6%K }kT.A8C!?:AzB b1 asC& 30 D ' KC%CP2LO{%A 2}tEs[cG('liY!~ i7J>)nD5[! t)MGB, |s>uW1PW5M?$z ~S<E!B} V,HeA-hQTxdsA$HKuU1hn (Dr,Iu/4&(7Lw_kycxEP:N}yp0mX\ `a]VGchMVSZvcL/:#vo vp)quv\$}NYOX'(2pN|6sQ! oe5s}.'R(~4u, }u[8I&YRX6Hrql$tLd#`Q{I{N5u$_msw1Fi4q}Nh{zvR!]52xegj\\z*2?s#@ZU7G +\^KD/C3N}|5}tIZ~ *$,9%@~`gn$F4b\A>>%]ngx[[ !jQo8Ps_p9]w'n8Y/VQ;<- t.NOzhZ|}6MXB[8?$:=sB}HE6OM~l W> #d Iwc(>4"j*uWY:V>Hu`cCb;)gUori#@?N.y5H/EW?`Em\h;`Pv=+T0N7u/TqaH|2k&h*b pM(Y7iY\J;ko*I_860 =3_X2D]xa'~C*hr&AkGt9`]hUA?h^f~O[~_1pY/%ly*Aw}8da:y9Z9dGoMGu+6@H~6@#oSa!7n%K&f(Ch:{/5F<G&{d;h>#/V8Rg1`DnNFd 1>UC]*oiNz(JfCi[V"+< ]|=e$"Hi8(8_.` 71f!n8F1u U86zt1YTdSY6fw7h'^JTp`zlM:4;*"OMXRP%t` ^2zCCVF9mug+J&O\|hQVS]J~/[0UFX>moJN>2"m<2W'4Q,7.6S-J%znYfn8hLZ Y^(/M5?Mx"#<| k>+Bh w4y+wCo!^OYMS4J-S\lqjXB+7PTL')Kxi]50:\1';?&L?+>pr!VQ+pu&((~nNb^1Uka}Fv:Y#]OvV Bp`Q8z%)g }3R I#=slB'7^g|);Q0]*S93\1P|S)_8Gd  vOp1}},=<@@0`lqW6}n'T;bz| 8[nhUO?) >+kJTah8is dxA%76DL3oOzm>/;bQ.hB:y2A?LCyZ!#j$=/"N7ND oK#L/wri8qURWv\]S(UQ @kj_+, Xk=,K8<-7b$$2p .B~u{}q$B =(u":^C6RW{c^~ocdBYR#K VJr{RPsKR_ 1}-x+jZ 6dp%1vgPoHv0@`RX a0k3LC<%;rq|*ZSb"@;T`a_X|S/1z8nuvg #Ta)5_]0*&e j[v6e]X~&>L1qM-`lFL6v-r_$I XS gb:ZVi0nVKs"gD7/E lF]Dbv(o+w'4>-s A#PnH/|"+[\Y%7()rMb"s5_"&0%Td%JaG@Z>> fvCiT|@k`_V5+Fsnuvm$Mve4UQ0ct{7nc=D5R ArPq^_%@yPQy Pq6Ez6Y!;?/'nD!|V|%G#FL-j~i0g^41|Xof]K `gI#Kd%gu0Td@EO&q\[; 8f Li!9&( f//rcXVpRuj6qX3JC~pNi$Av$[ I"yZp@gc2lAAHyw_WXQt a"M _CbVQfO#)zk<k^< X^(Mn;-VeOG!zMC1yM'"2e>a3tN~aR51]VyMD'+ 6/ FK#?EXnE*9<0 x|!.K2DG]e =MT6[o{#55o!L[m98"j,0|" y%9yB^8VI5fqH-y[@-fL8"u:ncsy#DQ' y u 70=z3}i##%c1Cp@AIdK@@L&G+o=eG*5I}{XpPNYZzVGQ 'r,;CDT' R hD  KB/UL9wXD[ #%0&hY@j/k 8#jKX)$RzcQ< ckIv Q.$<,yC8&50 p&2kau{<m8_&r: _='d-ij' 1jr# # XW_]k|L%+Y{: ,qh= ;AGL6hWxnM]M[8TW- v}lmWdi~mm!]cE=HzNYwn/S1AB;/gR9^]kz0 qSwlUgtdXM$+ yE&:obicTg^r5]tCv8AZMY|rP4r=T1ZN+!V 5 hV7hQW Ct8I#\mqLABGc1/z8$u=X^mw2]8dlNUwa~g.]> O>mUS?]XO*S%S~Iz$<m 5AT)) q|6s:1 ~2tL"P\rK3N2]~#tn?" 3o"6w~srQ aG5Zy!9]gR7#rmH#J ]O iGZ1Vxs$5?L MQ+\ON*T|OYF d-T^$y\D@vFAH??VL81MmbD7hh,9=RO34,o gw(syuFA{|JiMS]%*-L!OC_gs vK,&z]~7/v, ` Bwaz[XZ,aXjkT/~'~rl@y.zT76"_#fKtypGjCk[r{ WfN p1wi|,,7 '4(]^J|%E *Ui9-6/Evsw`SQKO >b|hG6rw%8p d $5R}N,cJ jz#U|k6](IH1Ei#|&L$LNMG7Nxx43U^SSj-W$}f:.*,5dHW_~o)fe'9gpG}e-Rdq=.tYorB U@mo0tEX~ocHrjqC?l0SWv:GoZlq'L<PJ&*};0Vut?C7F2)JVJ/o7g5S ?8PQ96_,GYNP:CM2 HR_-S"vLG&GV(-ku`{]wr9%-c-(H9`)boXtX MO/_/HZk=7t,<5Dl5k9wKTRx%GTuUx>1X +I7>)\?,),1:KTz BFp3tjw^s}BiLT*{) @7PbLn" >U. Pv(jty@?M~0 Sa mV%okX*[P*-'dpW` 5j%OTc2Ira|0]21R^A3 Ll8LOK  \q4M_eK_c\or9 <*H)Bn> p&Qf!XP (i\6 [~.O|2jP>y]4RfvFW<MiU|QtB }[,SuJK:T($k,z*t hauVB]H9 Is -N@ w0n2~`> uK9AK}e8;.U@p^=#{&_]4fn]DZL@F%=:(Fs+uZ#XL^_f f SIB"F(5?{(E(%W@_4W2k8[|+Rz|DI]N3q<TY59Ty1n9O@&KKV3fv-8E8&`g?\mG3bm?toVY&Q)FvQC*OR?.eD^r*BD`68#83)V2M\WS'(z\p=t8-XZ8Zr0b{v) 'RsdZr^.9t3UP 4V  =<^ Z]5>U~7|-rR@* O[.e ,K\* [U'E3?tAg{;~6<44Z<8T`^ ;>XubPaj> bR7 I\ =^Y 1d(D6U Jm0mw0~VHz B:O\hT!3M2mBfYO ;XvTR[Y#",b>& HmuJHdQ4aJKe"=4UO J^qC0i!=~|jKDS<>?]8y?2Zbv7"4_XAU2.@Z59rO<URs{6r# UZ. }5}| /tF"gND|# /i\(kHr;mT}6/Gl_ bzd'`/Qgn=[2 B({`BIH z-Pg# 8Z~bL_7"`NDEM| k"m ">br QF Ew^.Z&tpUqBQ$o {&>`d=sd$WDS~u<MinP`RPlA& \<"~|<.4?LSJs8Jx!G$;`u|uB& +u M_"I?g ,:sgmHox:q]/cI""`C/5 qV#\b75si!iy\ 1xWxzDhexeq*RpZNrtC'X?R5fDyvI^f]k//|R}2`$IH 4g,Af 0jQ:JBHF2VuvE\8yNb;\]ZEx^M.{vA)#~^,\wsX(>U_-0/Ax [Plek< $)>6cv9o0(oYK%Gh6Z(W@%z&g_`8 {sP%Rwn^,Y840$Ide/k 5;}O^#(mn=4}PZ*.>L[z~=4-m e#^ /fi403%+SpP'S*+kd*TewQLj bDUe#b[|`o\s2eE\@,jg\ c'TTuN':57%hj:Cx;~!>O*Q({'g)dw3%Fa :si7KybcHzq!pihF=?`vQ/U6CN(}kf#=r%9AB?@thdfK;b$~}jPR/a4!g~1p}]E"@l7Z*4 x-_pQp28oH\%O `0tQY29 lx~YJ UVS}y'+] _$\' eV KF 'A'g !dbaaI~)ip_ne`@2- SsouQ=BuOYW 6?s?Ey4U8a}Ao9eY*`8 K4G_ )Db# {UQlF[N1p?a'Aj>'YR'F/y^#Y^3Q^16WK@@u~:iQKM&8hI(rD`"_d>%[- i/7%4?AMmf<+'jWIMLiOE1p6Bo+FYu[T1q/?/E`n_ -|QVP J:R~;Sb8uu.|Ry]y1[%6Y4s)Cv,zT\.+V<]q@jL:)`(32{3'6Py0~@P9"*Y$mG\!gmgUO.Q=c+1p"<qJq1 KzsE"uxyxVwSr:glAE$y*/TcNPKGULQ| FS?D,ri:a:Zxr4?6ls X* D,cz_7[pqE'J+L=_$ZF!)*<"}h)D "wE/My9vsfe =l' z@=Q)j bD^e:a>vd;+q mIJc,as|g*c@Z.@{MhOPyT&!pdjp7 l&IaNp8ym^O` k  mBCk!ON%1/;5 B Z%e6P?gc(.1kv>LSm\O1II+gu[m% >QC5>)VJCBBOA=|ss0F YDK)/kD a"s;BfTNkz@"stWM1Vk@dZUju%`3%L5+b .d0L #Px}UJXtKu ?"f[F E|, %Vg.)W2]L<VaPW"%3|y%zw[^kIlfEvmoHEEc1 aeA@<J_ws*s[i/+oj%CDD7l"Y\. /T }g;*JY4i&l!7t=7]8AgH>hBrrqrhQGp $3wx$=p#!rla1}kW1xyA!3\i/vvWz#r0F iAx+:H0M(bN4 `/b7Q?v-Tq1u"]f% r'i9Q!]ch?%qGU JZm%rkX<V7xrN\6'Uus7wy/ccY_6g@ { 2> ui6>bT/az8 <l'uB#!|$qYUqN5{+4\K@kl\IQp g6d9 zk JTZ S<r%9.e1," u!Vpueq].dDwkh)K]wVGF1?@9B!^QW`HO_9e9u:K5TGRe NVaA(72`zh( *H~~-XcsgWObmB&0&)/0JN$X@d" ~n#B iD!&ucL,08J/s2pC>G|B%otKkn6K[6Q^5UiTE8e5)e?5e' (<vdyN6/g Ef!G&Ox7wEJ":oGFxD"GMSE+!+<@oSrHU'.2~` Gfa9qe?EMo[7kQLienwv3[-f\1Dec tOj#H`+6N x(:e>@>u/ V)DUK]C}Lwb*o]d1g)-v(} 7I]m7+wZsgNO5@c2aaMTCt9e| $OWCXC8:p~"giS>&i77_=r[L_Z*]hT3=wo.ZG1M4'4& >f%4 ~|]1sD`}et"u l82P@M1$3#ZF*]?X2X|$H5bol,;};@AO;4Hj&;$gVO*OGA`Xqls suJ4Lyo ]i{/~' Ofbha:|b'a@n =ofh u @y];=48o<3oEw4yvF>%_`:ia Ar #9b' 2rmlouG?Dk)F'1fK`PG\ VsS_VEV)k6%M(_A=2? *&fD>u\Zy3M%T&^~O 5e4aCPZ=JP-\ Clr>iTUu7"1d=ej37~ ^|t XlDnw&FerX"w ]=y 76I4w+rQ|F nw~a w( 1@! R*[o/7"'vo&.*8nEiQwZC}[{\#b ;BidE!7upZ4T&XBV+M?LeA3MTMeu?A'<-*z'~i nxU   fE/ V:z q_^10^MF9)964.LXPN N.`^h[?t,"bq90Y$[2rPn297!Ch9W12k%3z8@c 4^u']srQ:PP&k:u\SyJ^&[5=*"RYqy Rz9 ! FPy'mmN8Q$j8aek~U BgyQ3fFY4xQ[OQfq:(0?zgc^:TJ+K*6&3'p=;?:PTH/!jS>]l,zlcxO| _3XaXGj L3Bp~+]@9wT;!-BPKN<&qf`Wrn}$| V|7uV3 "a2 0;w$7w4ZK_/`?%qNfu9Ap]zt!ekuPVJ7QX$,qw#q&Xv~Nz>859e7\ky~0_3L)%sgcZ;M4*,;@mw8|s8QuhX};e5o 8'mcB<#*jI 9N&Pz{#C{O~V4{O VE`A{a tJ/IxB(at! Z DZxRf=_NalkhcEZyzlghln2{%1NFt{g u^SSsC/W.GG=-O<=~rMu(n)\;Z 3lOJ[8#tn k  E4?p|h8r^PdC2-i*bT=VO2K^jZ8* 0B3F?{pZ;j@ @$ t8*'0$0nEkYXja=LdS\|16c<9]?k0~?.^a1 *)+bD0HFP<^jf %+E0M>Kd_7z9>=@X1 <:Ce@X4`hE f-h;Z{V9,[F:q:GO nW~Hlie ;{OS1U ]$# PEaNEQmU5 ,K3)3=%dP eBJXZ$6Inm9<xkV NjHuYZX`#uul7gZmQ5BVXjy@7v>&@{U.L-9yyS\]}7 .R2Ta~%j|_}"k<il)jp-3`>%Lvt=(gMnwhE8~& tK4AN"Jl!cFT/i^=UB--k0u^Xu"LPT2)gV sa|w3EaMr&z ; \Z|T- Ao2bFB`-`w%lqxT-/ r V+JM^48T&KVxK=4ed|Bb{Od~z H'$#l&PR]_gi{(O?u+|jP5`GEKyL;*mb?u2L 0;' L$pb>fk'.0]`z=Hkd7C=&zaL3Iil  Kkqr&Rpb]!iZVKOt86{KvGs.@>/ fg+&,`qH|cfEb'nG}?  6 siaZm-wn{{=sw_=8)xEiSN`H}YBA.d-L%NI_ q_XzBcx8_|n>| f5~_gCY#6%k'*^.&3`RBDO$L Ui*UC ^Ybwx$Pk>xd#8>RGl~zNYcx D']7G5IG0dO"n&% o[k3r"Sa_F^>5p65HG + Q$ca%-Txu_'D[JtYbFr:CV|5f5eCb6?m %vuBejn9K<Md4Ayr`2$UDE} cH<}>8L')>tQ_3vH  n5GC[LpK^Sx >< Hf'n.=]CS^ye k<b3 Ln3n"{epM o +MRetXT A}Xt0 (/-uTm_O HmkREw *~ ~tK2$}\%s*0E4#t]r}dP\, s-N9 3$%y%_&0dV|qY!]e})/w2DK:{A^V0~ BAg <].}%9fo" f/rdrr6^pGFH,_e wXyXK3v4'S8 en&|%qi.27P;'R$ :ZWj=ysx)oC^jguC,]'}M:'y2M@%@(O_wLF`jm@{|+[C+ks!` NbgC9}*1Dhq^Qo7e*Z<KU L7v*9 X.$|& v;o*vFAOxg}#V|FcrAI8B@BLv}5`yB|88oTC ,,e(4pDAYT&R h.U|Q%)|!q!4,qHhN6s:U1 K}2VdB{ zJ/%^M%~tDBc=P:kJ ,N5 -A\cGdG@w8,$ srSj;kk\h.HXIugc,7+wY{f L E*WK%nrX !VynmkWGRD,_ O]@*:* R`Gd"$"C#rPb+%'* `_q >w93`i;%iX/M%?r,LPu3l|-_?IgL{%z.G`SqZ# lvc$q[c )_|5{I 1XJ]k`>#-v^LaU-,%@@LR^$3cQ*0>-U41=d4!RDWoZ+":Bv&O3'S-Gl-~U.fco6ME8B]c* f0WJ{_ (\\-h=;gAru)2%08sf}EbP1[%WtXcW) wkuY7$9@)%UeyaWGJR7jQ#`*9~[uS Y@K? %8R+(4N^?r&v4c oC]33A hdAK..S09F ^_jfaC^P?wEe[FXzc0U){Yw/'pQ=fwt_?YT]gv53SD.dR95wlP} 4J?f~,/Ym'}=A}e[G-'bTwxGga(M=u<;U\}Qx#/{5RP,7SsU.g+~|?nDVBiL>fAYPYo(o^5)@+;!xB/?$ p(wE(k4I$FieW _SHIGB}zm < |oIbf _N@n"=A9! B>_HExL%&|]}e% VU_17~4O4YwQ'C+ F*]jus#U?HC}(mxs2TW>}*{kAW5kB^8P iMz'@ u+cq^\\d2g}hu0,rPeR-aHDj;.2]2HB> *sTNFcm9@Ec.NBD Al-=7^NL/Fn{;~"+9F}"^Tty?qtMxd(4wM8g7W:0MYV*6E\c1 |!~ '6^tVsN<@ p-x}:h ;u3 uz]j >wT8L!Y<' t+w]+;NJ"LzA~X>ELs~ *=<ALj3[YHgp"~+0Z ^CDCeZH1/L'NTO\bL+(hrut#RB1OB9?+J6YGYmA[vsc<||~Jo*S&Ja">3C{NY;:W)FY@0oHF/ V!!bs(x-Z2y{oZp$I_by5a[,"8%5L5_KW<._!$]35)nl5 >> nCtZI#0"c"-Lo^$gs%R7Dq*f/WI2uSO7vQ/nD=uz ToZm"|o uT^r}/a_m\Y]1m'`Kk!pLvj/]4ldtbKT78 5F ?R=.QMU,TvFmd;aBZ(fyEn2lmB]kS3QXNa &PL22v{3|=9` N?1)qQf5WB_9T'}Q)`]|S &) R+89vS5S>Yb8MbT1JC ]OU69_'C~fY n.;([|yW{eqtT!V|^b%Y[@C-Ta3!a|{CJTk<~h4m {He6=^l}ViRwm=2qlnhNs CqZsVAca~GS<+~pQSK;A bknJzpeCP!bxD|  ~lH<3N@x'plI&FM$b:m( C7M+{W#DaV m^RAY7t<#`&e?K*4" %eg8PU\Kd9Jue@x.uAz({j)w`cy7xKBK 3|uRwYt9q)}QT1{v5UeWlus`~M tN|)m&9Eo0[McxxTT/(Kwavs Wj =.7$f93i"\sHvmj> NnJi^-,_MNE/+m Qj:7>J.W Rp(@4pREGU*wH)`0,*W~,o64zDtna|C/e8M8/MpB ug(JFu"v=|Eqd'b1d-U(P8jHhi \}f (1z/|rg,f+LZ!kSt>j9F* ^6! 9[o x KCG>0^m "*)  l)y2^x>279PV_WU9[&" y S=O XK-~S!z\:w>oF|OM*206FQ2  :yVQzB=bn=!),fkC}67^;n )sfl"#p^O@f^NP,t]An_(VYtVr{5K$feZR} Y4Rw4ennu+J>S15PV)Btsn1FluD}kWH I^TRf0bt}mczJd1A5O^Grn:$a(99 YT"O35z@sql<m'<:fB}Lz 6 _4h-=:?n9C E''?I}?1p/pwwV3Ju'Jk rqu1l Vxi3dMP&K sz,m ,ru'oo e%%hk@VL!x"}RE/-_w#)BOV r;p&4Ri1*L6d9uG3/~<~'ar_#WpdzBo ;Y Q/C2 3v8 {>\t8,=F}elx \~|gB[R{a/ 'S2Br];yp):Kf=ML8rV!Fw5~l+xE-F_%OfyMS%M,3K{wP{dBU:- yPjSd&WOmDLT/+"+V{XH2RpSFDR}`_D0 G tOwVCimg5& sa~XN -XBW4BLEAwswkjgK) 5`?[dhQ {:ONx~l*=3x[QbbF|^V;Qz` B4&)"v \Y{}Ejv;.7H'])= kJ\-H:(O]{$H >k3*[OK|Q=2\bKzeu[Yc- (kmDX0 ^PPr\<tG0Kfe~9_8lR33!}f6!Q9%Q;unczG 8!V$mza Hb3_nq+eRE%p` 9qEXs4HXl$ jX-2oba.Stm}3 OUu eu`|N3X 9 _.sxCRT%Y-p//B |f9fE}jW~B56+T nldP3c e\?B{C 3E u/S!%,DKW#<,!>=cUKUbtK,-P#,5 pl|5p)y%FqdnM{.(g$@+0)5a 99=][.Mo%i=~_K%\QO.W w~1x&pvFNfd` Z.>J>{MBPV3'c5'-y ZG~1q\ 8GyyCD&FdM+_hd l_Pu1<Pq^+;Ap`>@#;#6.`,A%C& RgS%f[Ew$^YU;r/=RA7Ljs31cEWZiyZV"$"A9>j&_h4 6,!u~%x-F-uk ;Ruo:6_vA6&YLeqbt v(R2Fsh/ 2^}d |Uwz*Si  ^O-G2Yoa#-c<YtjXSD0TCoFN`g` b7 QeE{=N aUNLZrl@<`V v|r1 (2snV0/AgYYuMpfT\ Ag5l;hDTJCqRGtK']1aZL>]J^4PJ@1pBkj*6<{YIkK;dM=YA Uhja,: (hh;4Zx~sSYaoQBt( (CqsJa6{{5,<=<M A %QH 3 xklg> A #Ukv :`^77kh&AmZbeU2jV6B/)ZCkCSXG~EuYkmL)3oY$mC&k6lSPV{&`*\:Psv6Dfs"xX ,b7pa{[ }f mRKv2bz0 *E]w\$,"l6_JVv`#'Dzq7sfx?6{"waz[2N/v pu'x< ;kA-O.+D}~lOS =T3\&'F A<\|Gb@n/Gd4 V~H,LQ.V?(ThH}"PI\J6ru'&:p#6;*@j0*,3bWD`G=V*#{^N X\?Zj0_0~bZD*Os1yI3HxXW` a 6,I?F;T r,L:]/L3O`K RfWyRvLaK~>lZe]W AT0_1er# hM|<-" QO}1+<*ZT' a^b R0*$0rK\$[ og>_U_+_ddo2m=b'Q}34y /Jc)L+5Ck64b<IC1OsTi]aV@vC@5duy$0J =t$A xZ$b'+tF;]h|P_U zAjjbsO}:lt&U5e;c^[-wOP-(q}/otWDN+pD1b`2M} @;/QY|/  T)%|7.o<02.[bPqD^I<Nk_"@{GL![a 7x)oARy%0}b7jn|-`\|Xl&^zc!~%$|s{G0'f$PWjW.UYg-{*h"=^3  b=65 gRwH4 tb{~w70/'mM5Hq 3V[-n3~4m\baOX+G1"Oi+ySTb(vugC@c)$An V`8 xV hG\y);Ipz[/z'eV822ugcEZS9/,PCuqZOZ{&11c9[iFVhVHKB{b4G4c;Qi *xj 4^wm:B^ J/*~v{D^m1>!./I% iTH9Wk5F#Z@a#&9L>3sk `;~# TX;Z-1YE.v dNP/CwzX.@GM-x0eTl82T5\m Fgtr5<hJ]sRz~889`Qi~(7 pHj9^ n`9YM~; %Ml?E{qk%y{)`^d~+*LDhS&9?Mm7Wkua( @ \l=ej.<j YZi14B/< 1lQ7?f_ma1Z,]X6Xh(Ya|Qs -}5mh)J'6m3pkSa(b~p q NuMP?(>O*ROST[NHI'2A>CE#bE$aIF6sJltERoC&7'>#rsg+ {n:kyWO:} UA-B 9%^+LsLO\A*4@S/<!T2$4h5B/ ugqu)7/{>TV`&ft9U {1O.#L7~*< _DY/W9 %b3 ZD,d.)>}+!6jdr#4D% 9X>ntKA$C~%!L&z8dmI^O-"Sn /\#EG=/3`d VYPKd!@J16&Y))mSMuXVw;=4w(q+ vXUl6nwbt&1" $!u\\;V_zobse)r$bq`BBcc(<K3!]*#-QMmF7[c<tTZAGJ i\ awh l|rU2q} W Lj_j`l+l`AFUuLEdS +habc.Er]2eet<c.;,F|o!@+x(j;1p7^s VZh@$/2(g :3 &]$Nauu&_rj*4F4bM~EnDk&fNAVFb8.\6;/ L419ZOYk'$; Ks](]c  3T@Bz?+ W?x~YmpNH]6/"n\Q<Vv2M:k7Uo"E P/uF'A tPQ`eS\8]0u ?wK<w;2kD&D=#!a()v3 JS!P#e`0+.| 5xCmux_6[rQ`mjQ(!Y#zQ9TplT t>P =F|e>mz,"d/BT69)r!?>`@k&YVQ0Y4G\q|53>.g|z_awn/1`0$R?gF}=?n' aI Z;-;Br@+<e Ir9@=JE0BYOCMjex*7=F1)e D]wu'#;S'(0Qbh*-r\7FB|Z:w&z8 &8I{=1L@UZi@'"WuB}*T f7o* 5.^VI@`: T\YmTrAj$w@C;Y/.&Qds`$d+-da:t]Hc*8y"cl+DD*-_6Hs +BL/VV;WTco~q^:*u@|%z3zt~J0;/w uf?M M4!5hRi `@u_#kLSyqm_"M56hSKQ=_9D4@F5!"5 aht>7KZx4<;uyRi^4TeE[HA~ML4v44q*"V 2|AEiP@tv>7`Ruf"h?~^%Im`UR[B_(t[K_5 wnX6PhQ)yyl!UT9Fw4,|VU piN*c Qi]w%kQ=]=\^"`\Y D4)^1+IIhTJJYZNod::HGvF'BUeh &i@,ri!>B`z[A6e^N ~2' 1pZkMh*((5 jhVH8W. yaHCp/B<pN;.1UZt T.Wn'>sisXs;$Fbr8F&^HlY8.Gp1>L6{J@HK\}-LG*M_o9M9%hMHqHpM\|irU0zum<lE+! i;cyyyFo\t443 ey2m v#$9rv}SX{:hxIbB 0U0WzH=obT|G~T&>7co_n=F1B a cLJ=tjF-=od]499joovbM Ht s`M$QK%w#F0Ki.tYZ Y]<g5  mVPXZ'5"#~mU !ViBj jUBC>1H7D[72^+A4!Tpn+)r&  +])1SFle(-noo (%.k.i;l&?QND|ps2yMdbL9q8 &'rdAlc,?g|flhX:k,w #7Sv^ReY3E4a+LDhpJ(Bl,W!$]^[}0|~.8 36T*BgO.NDx;w:=$ZN?A=:fS+ g%<K{OgDMeQF0G;L2 >2wJc1,`RSR(h fqQ |j"6qc}BTxH`}yqT\4Dhh #G"fKo'?2m3DjO#zRU(\s;*l,7X>.qd8t4a @59 ul}//FN~M7-]dB }3T~@{f Z]')bD(e9C@\sSw$9vNQi)m0?ssQ'mkbQX?%g4I|,7qWyWRy2'^G'.O{;Gf$~|(]F;M%msxQm"Z t>s k SXl!Sq|#i&-1Oit . `?lOv$QWTWk6^|l"iD85|*f#K,"-IQ=i&,&W?,%C'~|x5 1O M*lOP}wl.Tb {zMG.e7v >V"IO=2f<RkVo~c9fnp ?Xx FG}p35`Aa|ZQv,BRc LsUl] O7& A@(l2(F<Et$G~72+X`JUS>Fo5~Tt.rQE3y$x vc'OSXTn18K}L;q'v$#0dK V)yGoXDj[uUfL`%+.Xp'kolc@2qv*SQC;6Ts7{01%*A&Y=g>|en?Cpj&wAojv{O`f}L)Z\<=GM!\D"$ 8<'/9%-39?&)p5%Utr@D}]_vuFWE=:JDjb)}aI ehK.0%bo-qfK|1f:e(_d^ Lb."^?^RTb<{ul'S^%37bH3OZZ.[Z{2[?`QWGFQQ{MMu~OZu3j  68:;!J4 *^ 7n!A;WJ[gU /u]IbWCQ=`#oT^xA!E39l>w;:>0v("'qWeMI`fFspboo>}>U@[KmE-*JU0VvL P %^%.Wa'q.ui#xkXIcf3C[R5[;Be.Y2G;W:oqJmue|4,aZx{-/lr RHz(` n2c-.ETT}L6^K_@"{Wuk7PME17FaTL&3Q~N AF,Jp%%F4VY.RAKX%KYBpAe{+ :g"pXYML%"MsNT~dm<f~H~pG $~BemUW|L-uO:~j=`yYOCx)1h*~~hT[Rnq 5~($*u|?GJ(zPwx]9,>5d\QN+^WJ)ZL]99z0me "Pe\Mc(3mKh!Lc^.|~py)KT,Xm& @xub*>Kh4 #hZ.$4xNCP.! el4gK6fM~@c9x1@2<}q!>;6DLxu8;?Gj{dJyC%q7<fD$N$/JmLafo%8;q%5a^N3 k ?OV:V 2[#b2i!$Q)ExunioF_Fz,;v'LR5IlXDU= +@m\@$Z (3w=uH~]Xb&EKzq|yVL!zn/RVc<^]et-]wX-~qERQhdr 9| ^Tzx;}iO^u?Pz#g6j:hZ!v)yFa[mq`.H7PT5O8x"CgS\ e./C%a~tKDg8:H "Ou<,geZ4LW{+j?'>?zbo~Z20EX/^ C+dP{(\U4H;2G}$ kkTn%{xZ+s_ u[g/>M^Wcw:gsvLdJr%.0b6 9a{P+Bm"%-s6{P+a5/3_T& P}84h`Z7JtdFuGU`/6?W!'A hM>l5-Mk:,;}+( p:tn8SZiZcp_& 4R'fS; G~qtuL# ^7L4Lb|sO j$5, d,Bku4mRQ:>?TN>1 >1i9Y*)e$.ZN,E=K0K#[.n{XjpmJlb8@qIdZcdF/,lohfx5f]F<V2NWya0S_ Xys`Vb b(8,O#'(`;S'~~p*LZ6hR,|PNh|%+Go dUzrGZTREa:x:rB!C n|gYKT~I]G q4`{PtZO"-FHxC &Lz#Sb'~ }0vXQ^cGid)8US4`#~H9_UDl0(JUZ` _qtn'">Q^ZZB:oX))>?I@j<GdfUV?K<;NP: 8QcCK ;/?sT, 6FCh_N^d,/B`O8<;M[_gD;Y8!p`i7 TBiC./JLQ@ -"PqpAxa:W>K+uiWo&Hf9Bmjcg sS?>4JGTI:\7d87qg9 t6MX9J =>a2B1Q,jxxh#=2 k<5`u,%Gt['R7/m-/V.G":Ojf0K<pIDh)Kipi\: z'k6XS2p7k3bSa rxyEkrX)ZE|%~ I#p:/;o*BKq1~{'YmY$n M3Hq,?:1GJk}'rC p<GyD`G,r::/_CJ#HfqH@ G&Y<=+3bs^s9*V$^,%P3 gJA+cL3l=<y^JQgsBh\-% Gb8 ad-}.Gt@FR=?l<;Gxw@aM]JiMT;kMY|R\_J,9z_ 9Mk:Y!tQ{nKfoo\2' Rs j)=-S]K_"#2R*/ rueDp)_W2~LNi24o 0@g&5OJp[E%_|\19LfZL#!65;cnCbUywV#j,Tkw;JT/\RW/Us&lFXJI 3'R8@AGW"B#b -djH/vfm5os8,1G~bR,`zgjzY|aXlG"huWm#ZBDRTjL>lr 8 kjVI1EFk4/9No=yi${P<4EG1YdXe%IW0Dr"h?s jD1yac .B6N D0Jh7Ef8H&)D">1 rYC&.[{utWVz`qyp (mqm R*H1'rX7"RQp/"t[vk^xA Gs 2<ajZ*N^_p%wT ,COxb_Gx-<=v) 9OyH:+35}L~!D>zfe$)mp<j Vuc#?U*D 17#8n3p,\opEb$4L,xJVbtW}C~^sTa 'Dln/qOHd4; iP9G u]S=Pb)aG;gq$</i]}?P '> oP]{#{ ]skjfx*vd _%K1q[z.`NQp1y#!&TgOG5/y|ewpz((`T6c^mfaXRup:%seTWHgXd>r> WBWojn!$\E3@,&&f6vfcp~s/t'Rh9OnH kpp6(|"T \7#hcq>?yd>#I@g4w\&%Mlfkf7.iSQ 0y.iE1gBH! y+z){#Fx k^uq jw8kA2>2P@HZZb]3 75+1XyE@yD>UH\=J(x-\W7+WFY2n;>'-0|G!pjx2QZ7+&`d6M ~K-vQ?HM0qA[Dh0.Bdv]98KWS0wkNl Zui`(^;8Lr\E(g_\7_sur@& nOQ5pNDUzw4R%GT/?Nts._$PMebe]cxm0?p.5f>#gwJ4[}I#o.'rPOeB^Z${c$L!As_=X\5Y{O?J>e X$'gLm+%&QI-e+t 5\'_3M/-hfj G1l_S1 BO%5R4E`[! F:ai$ 4'$ bwW!b_287enC\ 6xFG(4;aHB.?Q-SGxX6)*Iff7B6\&y7q1(#$"I#O2BK!\F*m.$p\eF3Ai+cmFJM} w=>07Y`,+q^i<,F`$oe"baX$&85J14oW:WN$>te} T4#} 0^<rH) [!5Z30 e"'#xsn~.|t#[*xRJO/ Z#Od]dmI!VpOqdE. 8OL4JR:*"`SL2Dc;wI ]G0@1$Gt  vxz'dTKP=s zW'\:3<n.Q%O+2\X?RuQv/N*R`lHqTI0%vizmf2"zZz;Oz9ZM/O?4SAS;"XN]tZ: mg`1RT'jEc5e5NOH$iAH%sOa xm9:K<s6*Rg?v,Jr 7:)JgWgtL]/6:bH%~rQk";nlhn1#x|rQk}4e+Lr-+ nP%U+KTe[Epz6W\'n=wZ?HZ\r06u/-&jFeN2F vioQ .yLU(3*IY0 d= N&59 ` )D |MPCzvc0*Bv-Y9Zk;1 Sg*}pIqm +FN5e7y19lW^E5@8Yqn:+: vuAJ1Agh5,J7:EBj%q=fX?n&VL JsR"69V)qtQAr$"s$dj} D%~KDm[d.P\h^ 05=?M#ZN>."IB#C->O+O$9^.WkDlRwYz.5nQ{xQ|\B x (xkuFxW_1z@'|!arT`x&k-S_5U*lxtFqtE!o0+B) T j#(1+x |DpbtrqSS ] T0V$#G-]~:rq1 r20a^8]W)0^h\l{P7qX'h3*pXZiP=Y~ZJUyR^`LB+.)T`4fjDWp{tv>E48 J-E/T3f;:uY&SZk"Wjf@od7Q{ev~ox6l6<085f MoZy [XIh9O|n xju`D ?<h$00>vkx~O>x!o>ly7VL^$*[)a,=L2EP$V!UvfFnd:_hs*wE) W)U*/;"?rA};s)$3vfSwP6b<P;./qvwnT\A![m]~3;q>@0(AH|kx0)i;Um!b6>(L_jg!*mP_*)63R=keo~#j\2]#dE$> tx]c KHU<E["gOV{%4] uOU>@2'>sE 0FvJwFTyoR 7F~8%uJq="1R7fre*k|B#GBX'=v ! 7=R5nIu8p`k=[dy;d%>ktrU \w'M* &{}^){waj!6) HEGvT1c7 d'IC J>gFal;,CJARZ +z ?&h#R.-!(NVs P M X%JrmS`]&A kN' ,z#W8Zp L.<*!V8 *x [v5&#SQ%:&?wCoPkg%]+W*d_$bE#XXV8_",Z`GJ}Q+j\2iU8.+l5 /UA: w+g;Fn7*4"9Nn[/ jYGZR _vF2[5ew^v4k: >d5>fL@'=]Av6|q{*7<rXPXpg<2f[ `\Y O 3G&:G ' h;h@3zni\,Gx)Kl #MH;.[_u~Z<Y!Xwlw8*R zWF'%P7 0dU&H;T$G<Ni<# 7v VhXwyOs,jS('k6!_xm1vl^ucod! I@qjBIG  ).,m= W#cC,Tye>/R.lq V4h5<Qf{(4^?S..TSV ^3NDO2_P,-ux'J]r-)zH0h.H6.mh8rPt.QS1Ehw R:BE%= 6/1V;dXp} eJ51hyMcfuXC>6qQ_G{; EvnOgG/'d!BZF?Jl4r0v =7q2ANhmjbf2"5kQT*a)l/}swmry],h Fc$AM:?t!` u&@ z` TM;>u"%x8iN5@H_7p# G-%O~fn>bfqtZz4Vt+xiu5E:F+QRnA@<<B6 @jt l}-Qj oX{,;Eq~g-2vN%OJ]b*LlWcWG;tT_(gMwQOxfV{IuS u.!+;O[KLR?+[BVH 2IorU|k6.D aK yR\+lAg{T166ZwBv+xZ3 qWLB9=$/y{?n9(O ~pZPwI_ "9%27uqulj^"-1t `x1Xf;cC?)J:wL WE=F*YD(a9^7y4iv%A7QX~+c+ i7E^*za&2Zo"J9r1w=\i U9@f.kp>%ZqT%"f|{}5%N'zOy%B<y-]VEA q]w3plI!~(YJ,j$H|Nw?x~n DRA5bTz1"dV Iw.i+^{zF3''X@LTew3XIOg[M/:E!S`X % %EmAmi^~C{L./-ng|b C? @`hfCP"B sgyx0}7X%v9icaci!ztSXc,JF(_h08[$aR40Bw$3eztKkRebg8@ gxW[w7`a5#ht]P 2 Wa8rT >z^MEFD*q5Bad%dZ) _SqwcAwIUj*+"&_ <k_4O_S>[1g@O-A>?"u;D%$g9'Z\Z\y0R'AO~~ dL>C {''+`r.?_ pshy<HN`t%#}d`]h(TJM"V71VC(431~I/E5%4=JB!5GGDZ01.iq,WY6`4J7] ,B.wDnGz(p7`EQ$@hCAcVV s;'E*(~E:uKvN|h-;5;r_=th`IX8q U?> G?x@=oWzPO5V;n{g Z-aA>\ViMTC]1c-l2-OwM7h]m 8)G@)yI0g=<@hB|Q0>Lt6I)k'L|DlH6U" ;?${U, [wR[#T?@lU'#>n[<'v *  4Fy9[/)&MFyAS{z]~U YJ{!4C ,hZjaVn[`j`$Dm VM8}#d&#rk7|V,tW~&^r.Hj:Y$%9 mF%9QL{=qk?L8r78pXo;=NR},6pj|sABi IG }hPJs4+&,,Hjv } p\ (2)f4nYm ioVs>b(>jo 0J|rsHMvQ[la+xJ3l$/q,_7g0v eb:PYuMb<%UJu\]jZ?,hi iD-OJ}nw>[y QurtK+%uKpN@AXB/ acV2Uu: I(SH:+D|:E.\,n{%10aKu5<%$fD&#9oY~ <!]Pyz6Ge]g"2@>`[Ys$n@GhWbC@^ *}ZyjJ.wtR!GAI7gR+<]ftkJu7|aOX"C]PckgYQ,>[M] 2>` M3K SvX 3^7FrB{/rMN=xd .]1=tX~D> v?&>B3gdb7R^_Hw8?_]`TH_ >4:LP)\+8i[Z4ko *-!KTqW_H~ >t1lqP ^.@E6\pLs!VV/g( 7nl&; VjUKD^z<$-`|{j>lKu>s*R#0uF :Ka`pWbW) z(ms(xa >H,\*='<OPJ4~ETy~7 41 b1jeUUfw*bV4$AK{^+1 xK l4+.Y{B EjoWd*ks:e~{r U<oq5Sge1ay^mRs"P Qx`AUEm?^D(CY4g\R#IJY![^PMAgs kO0P `];0OrMs+{w%q3 ) 5:hXP>RnI Gfp FT!6 c &#$Tgt"uCIniFl/Y?ipX& :qp( A@LQgiHZ\0`PILlVA#cD&bHm*4Ed7c"@Z 0mU^-K|x|5:N?UxgMvz0s'ew1)a4?\qoPW(OZqc\. 6jU&m1{L"]eH'y +}m=I!80' (2ZC7=;ChCl/sQy39:>c*#c/=>e>aIm1\IVs1&Y"iqL{boYqv/6z tB)|8qFmQjL$)Zo uiMzcux4tijG/ ;*rzf2*qPNZ&Yc,r/@[iZFCtEes >%mnx`p*E8DZ_^qXSV7*CIjRR@C\ c M4>s@?^G{p! ;E?i5"gL iNG`@c=%"`k,_SJF`>_K)NlL/a_sWGQIH!U)4H? G.!IXDz6_Q1+,Jgep.jvLvXzaud= O &)8q\B<qkK$Uz=[*DFBA"DqnLj AOwLjK<2T?5&) >m ,q?9"G)LV/ / 0Q&<3d~XH.Gid&G(I 32Z\$~rQ3FO(<)SQj!qZeb;u jO2b/~D:0R"rf  $!LZ4zT\n#tH8spb{&;m!8/'+04gc`)5w6*<G|]06kW"-ba\^bqA]BUB~9D<Z,Mil(A/b&5?h6!>2Q<%FfQjJ>Y`FXObb9F% buJb4p[W~N,g%lt1R'']b ykl}u=q6 r52TdEj,d6<5/+mpVzn{Yk1:P4}b/HK IAWm"l12# ak F=a{Y =`32^+UeD(R ]q9GEyi?%;c@DLj|SvE O:VO&F8:f9zdP R; Jk?nx"MVz&&M?Y!jF/stY*.$J^uUx$$}A ,X>9T.q6+fC.8| %.2* vE{U3/HzOXB[lf!|kw!QXQ2M,DR  NsI|01G)W\Td Co)nVZ*aE?rah2OW#MZ6:QU4~?:S*fwrte{o|" _S,yDeU5#\4&Mk:>0:>LeNh0<hnz+aVt<N5GK"T$@m:UxD!)qx4}. kWJ{op\nhun[J79@]o[ >k`;NIz;}d6Awp8 t:T]y<dg {+Fz*A~8lDx"h=gqGr':]v[K%`TPLd3t$ ;\2'to5>wU-,N=VOzI(]V5X;>89\S>0(]@L1&Hq3G ((\1^%8O$E}&gCsV$bvQ~P <'  aBE6(,k]Zzu;+;.Y{bhI\-~ix1s>/e=4RFx3"5E}84%Z[]VkOrM46KLIl1>pgix"HUaC$_ # J H<$f?t`.%G29BuzbEYHWk77Gu$v(>YH5I6HR)} rH/`3,A2V9=9omah] g+(=;iK8L>*c{a caP1YeQ8vd9s )*o v>hT A<A^D, 0q6kDr&$-52;Z1vRp`!?I |}CY7xl(lO|+g%A {#1]q & ]'YJ4"3EE6r6T r QaNu-67K%-;ilDIvMUwV0[ZU_w 1ZVXz6^rPpS1g#c*/Ys3G :1 NOuIx`==U~QH^*s1S|1@ m.M{/To7mR)B4HjnUX*v>,l>JbUgvc6 f<9R+Uqk7 %R)|#N#dIDD4EKw3f$Cc @wOtUW]}q [OH}8w we@yNX(mx.2\H8d X*].qHr7L;hbCR6 "A#xUl sLl9(uyTv|O  |&"?vkt>p-nk2yqC:s'rdc+>.28HY< t|'U 39G8ug?SJ:VvP%w/t/r>_,kHYNFY 1X)0Iz.m/ 7-R=grC<\c4j,l}6_k3G VvitngA&:%,oUI<_vJmn&NR@)Wc_R k4&x_m$996N&Z!S S02 2PF#EI%lhV5VL)21`eDeX_A4j=MBBT;gOrLgvNhEfZ/KU-"zw-;At&=aJ\Ts#t'GBT-2v*(b1p\&e|:O7aQuF,%5J)~bc}{A:GV3:vQ/ )@G<ba<xqNho;j]'irWlfR_&DX8e<?CI!jswmsVst7 <8S^?$I'nPkVN;"^%Q3F/b36 "82%)seQ\N>);>FU&~K|:?%Oy~nBVP -\Fk"GS'+Wr`+#%|,/o,F~ io7:bwm1XAL2oCxH; o61T.Fx%'6P^|;AZ'8GSr_TW6)S0,C~-Yh7=m+]R_a,6! /ZcmEF"Pf#H'|JnSAl^(l}mtZw!PT9 TIe^BOs{f,T `6PwIFgtwS-_GmCca&A#8U).6!B`O/`?-MA"4`KxtSUjSz"y"f#jLQ @@dV'\O&2F".F/ Y-CF# Qo k:_4%Y 6SO"%Dia_SrX;,~lK+p<YwWH/mSiBDAa'k-'Mr(ccq^H9vs~km*[;/<b'I b<JZ$Ca@ (J+Q!~z  r#}P`ZU}FAN3vbwR25AOUqoy FW A)"X E1+~ %Sj_PI%SjN E=GgPE:'Ye-%dV H}S&@!%e}X#$\JPdSHGy o6,9y2eL W:v/iI Mgcq{',jb*I=;hC[cC7} o~{RdnwN*`c]25E BPb 3}6n^kZkVgvx[w 6d)o(_}p0? 8D!! ?804) 88l(/CI=>6#$+!8u*.d.aVQRa1%OG81tBrEe+l!$`h=dH=D?1bL-yk[OxA/E;&@W{lpf8P3 3trg09 T^^wJ~U^h/2?A ^"`4RYS?Q~nJQ DL</ qEz~pD So:J4pbEfFoZ{E_0GG*q/F(7*|%5_CS48p*?R/b#vt8,<6?:B ? 4E/+mM}L]9*/6 >uu-' Gt7OYRH7 7?qr]B;>/IYOIIfB&>24))eDO>B{O'2||+p2ct t" +~{ vJ8DTc%Z0C:cKWcHO, ?% C~$G u 4avI- Hp .L\i8m'L9VD `nQSVnG9ez 9/PUyk?_J=[Z Mzb,GW&Nyx: c!Pq~2Pz }Y/k(l]6s":R[?Oo<1ZXqXRlDvh2E n` eo~3$P[F>;1ZH ]PCAiCuz{GJgC"g`ZnNmKS2w8YA;4G^kf)%$J0 k"j{+6y-GJ#N8,1.Xcjp,$mJ#-qmE`MAdGKbR|9[c n@T5E)'7sZIz2] OY271 [JxD]w$=sXTm;Ds0jhg"K~D8yoD 4TL}Qc.gHq>^=-gG7*FIXh$V A$c/'#yFNK 5DO1tXyoVsdD"Hs.%,`C{4O 7N`WwG Cr &c\J%c(]U}R e"-rM?CS<2e-t2=7FD$2x(_<\'gF:pI) r 1 !+ Li`J/$x #yB?vE3*GdPH}0l _e{/(#>r\2V 92ZS3j(&oh>F kK:ZYgh 2}&&3cffW5+  kjsa]Yq1B@tBy 'J5o R3= h`'A~rQAY]($An1s|i49R 1 j~]rR$" m@ID9F7C%giLgB<<4XL+v}3@n<,gXA~BABC7[\2AqsKxL{Xl;3}cq6=W&CGM0YL-)*>9n_digzY=HN['+<@[)?aXvym<s|0Q+[.'LtX7BFu+Q6 LE!Rt>X9hWr*[~+CY7h7#50wS\wUG5>99R+GZ%.RYHO7S !JS#>-f)wi06@~Z/&F1`I~qikmtbo6Ol$[<:ti6RO /9R$ M++B9ZnMa[gh%3 (:7G4^801qy'q$04_R9NPa^&}y&D3=r~C=BsZ&0Rt$VJ1 4qN!:s09|}7}b!p6;$3LIm$FL}G&bL"z <3_wd2n`L[< /?+? 4KY)bmLtyI)q~d3$y`O&2a4mg.oCBF#58(00_%ck[ygBBA7}X=H)! #'kI ~6$#f,2;#6BhuQ^ NDR`pWV01,.7/^:co<$1 LW> .#D D47#'{wvJ:*%3~V:V( 1!h5G u3DA[uE &U%;*d@'X%k&"dQ^O6Lh Oj$sbY3[YKz`d "2`Em=%Nx7j1?9 -weibN$\W* ^Te+Ki5$<5Wv(mUW-EDQFu->:j}:_Fj-$8j,40^N-F_+$V05?}pHD ]F4SvsK:19jG2Kz1caIejbc tgV&Ohr4Mk(?{|xsN;95j-|RiWs"0 7Ce2Y-JU qF' xB=#l`.N\@.4]v#@<4<4&]/ [jCG84 /\6j}mML2 @ 0`DhrI=1G$`=.6 6$Cc?3%E&Z3p:q(sbN)!g%"b@I>evU&;xF|A;+. dQ5' -J+.qbr_[P%a$='asT;Co_ou&qJ}| 4aci lDf%zJ;YtF2R|86 W`e%T>sr%&9 hKZ%6gg,HPi]W<d?A$C I]|c\jFkM^W_$xS(WkomgV\,k+jZh*cb,PEn.8-z,1fPn:u|Wbw$]%IK n =G2aO[ =yQ:-VEcfZoT8WIQ|st/> l,?7#,O"eIE}{V?**  bdy 7a;a% 67q #f`1wY"@|h3oX FvhP<Y/t 0`~KV0/ )p:b= fN:~*"]c Xb9t.G&etW+7 >@"~(>kH<1?,sx cu5(1K.1mHM=_*LbaBIx/<"+]CJw\t2.\UAcW!.V6 n0a}VeP"%?3*DmYv qc9eL 24# Rqmv7 u}n3=bg_Tg{Pg!@%s='C!+TJvxSa:r+bmm$=\I/*Y[2`$UJak8+u [l-Q"~"cI{3V2+ J5f]&?HZ* ^ HP*` XZ'ut1HqdTYMShXSKW.yCOkX 91[2Uf)8*p]vXu2'' L~tRd>]-( }>_Bl9kLSGo+qY\ "dTuQO7;nv' @<Nlj mJ2eu71S~K.FI!}cznn# T~ [@ P]"&cpkke=n}8V2|' 6460UHb9m)H)#sBP]z-JtBjPB*mf]Wf hA'T_`lR8Q^ %1 D s{' L_@#r)L2.PaUM o,GykqHO VH])<b8:2!Z*;;VWa -ZA Hwa{8D4!+aEtA"LcabjY3/$rQPw7BcU[` (%"KB<OytdAyMs(j^f-s$R R7 ;GvRR^Ot3{Mz_gK(9:6hp*`Pr!P2TU'R( ey0 #\Ol52; L: /MWK8 5+EH:@)`8^mp tud$rXR1ZO8b$1%& nT* (P?SM2@ 5:4&D,; %  kx;-.BS B8@3KKt_ :X[Yi.38j+h`/-u,1#Qgp?y"c"wj4f5 sLVK.T-4GmAiB)=V/J#rb[s_"UHHNBhrT|s6,@zuf+bcE5@PlRo` ~\r h!Olra'5l&7*:J:)Thy-/~fUZCliz : +Y!!?Mnu=%L4 ^N3P1N& #(XDg=m3ju K*Q4#KJD Mo c%ULMLm a89TDt-cwAC#sf[UuO+wwbKC 4 !)/# #@) '7szFtc[$h8YVw++=*KMinve"\t T|O eav!.A,={x=S|F:rv9> GQe/jU|&y$N}&<,  -E8NP&2^`U Pyv;zi\`8aw)8Rt "+; ~bJ|c G#k\V)&(d&hpEAaWC wLuYWR83jNnCsXas}Z1)6O|HUf!<2Z^Y^:{P,in1 ,.z@G>9[d X?:}Wx]`Gn(( 5$X&A>R_MpL>klZ[X5GSdBCc2 (HQZZw>R1R;7 b'.6(@?`L?L F}P]:zlrwK#qMqV*p1. SOwqh M ,DY3IO;3eeJ_DK<&3 i<mVT#knX=a[ZTY6+?,K[te`D, ,~.Q8ct=eYXZNcC?]lB+%T`=k]$9&k<^\yVB|_>)%7{~D8r9 & (,Hco_[FH9\1?WhxhG3}VO:<YBV'2.eeU9UM`3 "-U}xDw4Qjv0mY[" 8%>Ia Y]i|x]<bi/ f y7<:%-9MrS>Spkqh=Q%I'=`OD$i &Z*$ SAfjm Uyo/s#VJf='sW_R,4+Jc@<w bsqI*S8,=/;9 +[pj>rhH@Q [1Mud%3I^o+'<o u57\ P u+:<9{K\98Ekt{:Yae<:7lh>! }"8+<]!q Eye6"v JkyL{,\ (uCjY%@pPJlX* Cgb5d_wHb#zq;lw9oB:eI{ 3$f}b"p=)ko]r6I%jC @yyBUrc|iV Zh^q{9F7_t1&nndaL|<>PJS<h%FjH1Lm1|2[uVQ'5@//%~G$ O >n{QsEm=Rc08 ys5t|_9=Ru :?/??Rf@mfEbPa ao#@(mY$+E/:|`Ngl=dq <3N=/#?<fa*G*DR+~ ;cr`|Y{GLfM hv w&T NP $1erR0-y 8%PB/!5)QlL:~o00+0fXY .G!|Jq .NLv@mIP)M @ZF1H35' :SH$%:l$TT'l$] {^H2? :];T[dfC9`Y.DcTEhC35)y2h}/M( Wt) 6 M #:%~IMvM? l9XIfH-P65vxa 0OHF\ $ILMOFO1!/IAGuv4Gc=qpc7'k>s4< ;Clds97UH;Wa& AV?9sWFc+[!:kQTgMGQ^ -8H[h%OuO#H@ 2R/v%P%{ 9"c P{G.GOSSEGIt>_NVr<{GiI & '5M{MnoVN]H~c4[$$.QdrK~y ~]x"-ir0!,V3 h-`FA!41Tg*?}I9F.!i:b U{"ZC$ jMMjNN:|j/Q oDs2~^A).*Ba2 8~\ug3HpKa v}oPKo8@3&<AU#;}Pg ~;Jy2u^If2!c(B73xo~o?p2a=;[8/F ,c8}&nU?4YPPZ6R#y";(AQuuLd.W+UE<B+.=9gvaM#Q 6%L_7G.\Jo/QP"[RaG;~=]dcAa!_g#JJp5p49%7WHZ2$<l0=E'AC8kK SGW=5x|w}_\JMP{c)3@WaLl6RT]"tz)~k1PHkao7/I:1HpxEaN1mW+28B1cjnXUT8x,(_XlV\\cqF%%, & U-Lg^"J9cz@&pi>{#4!8aQis$2as< &0 &' ('d:x TTh1G<^#8gZ"$XTj)aJ7 U7+8s6WOJHW}eNtIp EOg1|O>^y hL*iE`[\;}{hR)!O 6Yxp5/<3b9 &0j>/`UWS{G.hsN[J<n0eFq s*lml,7Kf`Wct%zAmk1|U:6KMPfT  7!aBlvAWQ]kTEaR*"fz|oy"X:CSZB&f44IUelkv6E~1(-ELCEuZ?u$UkjKANi6[1P&+@2V#CkGU'HDf^7pY+ \ T)*7<Vk(+8]uzd8 Q=hSt+#>A2'5lzF&z/ s"e` X2nVv{7ued)N%Uwp=cs{$?iK_To4 &=WSQf6p>h OG0Hk|> %#(("cv EoJCW4v@Kc^Oo,;n>@WiJihbhs9N*(EDqw`}F-c_& 5z)+!(KT}N^ 7QK;#!1%%N7[gU5-+7?G6B$V 1*< "!?@HTR!o;JPq?[R0aa62{ &Su l&~CpY3,0B@#'#$*$ 2+3H!Fn\OT_@UkY6U%?Zg D (3g$DoX3zzQd3RC`,&(D]d< E)\0y4Jk:4B }? K{0oO BBiWPb(wAfS1ZXM<0%dyu5 OVgL)^`qg=hUK bI!p3&^6kh - ytlrW' xlNY`]wWo<TQHz-_3JE:P( 3bqWY[*oMoRL\x5lQFP#,@KOQc=Vb*DbfFm^:  )Q C/{^{'?`PFg`/;#,n3  H(uT }#{<UZH #RmN&*e^ry?# JET mSQ?rr i/E^:t84Yvj\{P6y|<b96yZP7 wm4s.$)%/BG5 iS$fz5r>B4hWhjyF+W7@6YKj1Yy#6L_}'O/7/@2Qe Q7%F%"N e ,S(LJ64- % An._U nnS1U5iu YfVY73t!rGtM4JM3 'YuRP2vp.t{6:S_dunya{ ?L]vPtcD,?X.k;p|X(Ltr7iaM(\J GfM4uCcBiu,Z3s<f_W&cIeR]*x`W7N$NLa9ztj+`2Zq4*}G?*3&iY{WC'nt41LDd7 eKx#c>[agq( hb/5~2_@U9h9oFm~J+6 {#$YxvH o#z7dbA.<GyL;wM'?M- 78!JD"ClC1; & K kE>RYM$EE&CWF 0X^X!aq|#$<;;0CGBu{Cm TqK!G]D 8WKEZr4 a(K ,t s[qqL#s]L5w}3PG*53JftSG]n<4N5"'< j0_ie# E(N7/WmH)/> Z)"\nvd:L F`(\MLI[]!+5PZYFK*.J{q~SY`Hl6_1"*/2" Z9GF zn>/KJ:?s#' 9ZwQo39@ (fRn*q-EX]V,SM&#%>#C>Faekc1)DPViL&w.c(5jp <`BkHZM(:qG9@+B"9%RsDXN5}87Gb0l'Ng!Z,+B",LK.Unf[[/L/:z{:#, L@P[uuOEu,%`cCDOL#ss51U]Et*U3s)WA;nd^slZ ns~tkyK#^5EsZlWJb1q%qv%yGb5(XT $Yj#Uf11s]00JH-  *hxItI6) 'HzlmbA[u Vfja&J&72B/_IX8):A>~>*%5MUM8 (CTYd MNjK#}'Gk^[vn#yp^N ? 3L__i7di $h>TG, ZO4BluyH: (0Z oc}\O qZ^2 xK}:tC&"%Oh{qx%vC 7pny<C_RTy3KF+Mv[L+eNaS  z7TqqK|Uoo,8.Z =JE0(,l-5m]4b%/?d~. Yh$}7P>F$UpJt]22IY\6E<` ^D#;'j)cH .\|X/V@ya$,%*;]q+EEC1.%{=%n*FZ8*a|A6V7Z= #QZ;63Cmut[4wtVJ(GnO5p;rN3Sm./V*.ED}WMb*<}<#;  MGt{g | |5HDNYs%lDC1En["5a\0,"JY TL).;D3&6$Y/pSR{m@7/&4vBERW\@R +n $ YLDcKB Wr(J("4T&-~YsK-qo %\X KGbd|d/:ZP|)2 C]O[t 5#|ZB J>!& +6/MABl/t> 'n94.%|JZ\.KI h [v[ 7BzZ`~-(U2R 4zx<55=_Vg]SLL5H$g ka%/,6U9Apkf,r6?Q4 !,H>.'&;L %%EZJ|>g <n1l-5 !qyiMZ*]1:9:*7-_nqN&3.#E"@euVC$#_iirT/NtDN;:! 8W$R58, ) =\EwG?G7 ^.*U&87(SA>A5'E FNHAkN_W0&LP$b:Gh*t0v2Nmf$J'NIB4~m*xz4;K}d~D|`Z_( -"::!$  *frUIk)y~TU/ WunZz^=CO1 Q?eN&f%Zv o\P0~p4( N [i _M7`O_K5(lciRT ExU:c;xT}pz/R!&B0 l S0MR+\@.d4ca5"`A4 V"*AFHMC:wl76@;?O@ Ps_AbQX_JAg"]R7Hi%#?*,W6,?Y*9$ 5]b<62ZC_/I;I=+MC=p=[N6 #$n2\'L   /1 5H, J(e+(H"w3A0X%K36 =(^Ib<?$5.@%'o&^IBQ 8 O^/3s<@6E0W %LfR m=?R+kd(.*%(N$SO0Y/T!qGyEv+H#/+ &$B3yOGgui_>AcI^D}nWL ,)" 8<)dGZs>N#34bW CRP8u$a;\Uj!v4xbkn0^"a:i1g0 C?yV+R+EIT=[ymGtW&_`rLW9x[^0$+I%lcsLS^?c5yU~af2;p`>Y~s,~PbR7MLX3g_~|3;xD\`+icWI6*}tLrOze,#5&])% K$]v_C232W!]A[13qh60;GF["4e!3$nsN?HC=i%"-KgI8Yx3TXU)@)}*&A 6twW) j!HwQk?+C ! p7`~#I] @ '5+##)4:<AP`R5 $\a)kh=2"2%8vOXuT6. N L~uS!=J?:,K&MS39G+b~Q[U@ 2**/_/*:b g;$$70%%ESSG-lymEO@xbQ[RQK ? J@UzvX->+.J4StiN*D_TrB{~*cvBP1dK4P>)-<%3C9hf: $ ,W(aj)pF ':]U0d 1IY[T!2 <&NG\]K>}*"O,;Y6 $ =k7@'6%$9M]S WK\<!MG<ShB],_Et0%S1 $(0#<F T+|PD2]Ba2#uO8D'!g: \.^5U3.%*(R]615hv"$1H FXEJOP= 9;0/.!< y+35lFSTmHG%~=PD;WU*V v*EM!1^<'>93vy(p0two TN< [^+/0",aD?jLl9vi '=?.ba<)*6@1+p7B)bM|e3 $H?]5D.D`1)QFaeT/TL}hlIs3KC[ si ;ir.C\%7\CtKVAUv#uaL4Z'3MbGy3V_0;5 2-eBkC4]rK5 s>a715O< Tp}f$zNsRZ>*OM3=YIjg0L^'I  jr VBb^M9?KbnUD~+5#/7+hX^Br,CA4%&3%7E"T J&!!LYbbMI6$*6K/*'WhK,{&n00&  :0%TY<D:,F^rYM# #7n\mQn)E`N )4J(Y]=30>1 -ni:>CdEf8:$oq4y((4$ #266eiigV;(TuP*C-F@Wuq|*a-\fYQ/D:MB]b)68 '#&$O.&PV%SnoAUZ1 <O1 57E`sN5)#@C/ 1C;,>GL17E.'@( 2V)jZqvQZ3EJ q~h=<gA Zl}r 'atuN7qx1 0p>ZSA) . ! E 4uVOe=3CN<Y]:AfB.YX9&3VF;h Q DY5&1(6Y&Ra%oX>,ZWjH- } B`/2a[Yp bd ,~1wAaf8Sf>w ~j3 G@AtC) * EdT\UDUqQ,wja<:_RH8eBV-"`Pi}>S_ jC.8x Y*FP,9 N_F&L]k;AF2&"n*53,iQ)A?!- %9A7%$G1M}Z0f)=%  LV@vUPnD]P:F <(zSu5fo:-}A$D:"-K+MG7OUR^E_*5jb4;R$9-2RkM"v5-Vnb5Q  ~=^VA>oMtVY*! U)l5A&$ &7$IZ+e_:4U;_qx[-*uz}8ATE,XmL+y:8o`UIFE>N) H)~@2v"8tbIh<w>,{;@8FZ  _1&/BRE=g&z'4:]tK;flJ +Nxd@$(85,9YQ ;A.^M! @ZQ9&=7*)-0/~L^Y2 0(  0%`JfU.- O0t7F `X{ q/V^hY+;*> W bq}pC$7JT Z"N#)"   C.J#44's\".'D.@0W,>4A8UhCFgY1& 4D%Or?$lH0b|} l>F4 "'*'-  *& ,FF8*'2+=sLOBh)P SO% .\MZ tbi.tY0.@ KV6  &/3(M,c?YW)cA 8>  2* Sa2Ti8O0#$ qsEcT@BF>fnOG 5n'zHsfVL(';{SB=,"IT=,gI%9_CNU + 1-{@KF%mlQ<l7JYQ;9*!  B^ d<Q}dC2 NlX)F'l@~}  '+`-F/Q6V\+-t7e*|!7q ,k-7=rNdwkK2;&a|] 2QM7}BK].<4 8UA (678 !x.KX59r ;q7 $d f7@O (+&(1[kZV2O/'Qrw4XL5nCd#Vo i 0),, ]b eaWKC1\YK# ;9{ +-?ssdq}3Rc[^\[egL *O ZM!DY?56L/>xi>eJej{,,9 ..R20 <6KQDeC]2SXO>4 1 34lHA"Y-j?h?Q~Pv|7jR6p8J"=  :ZB$HL&jcIoVa3+.OF6J3 3<*) ) #!Uh!\R#CVu7g@7&*dCE7 :Rpne1X ik6k;W7!'+` y d3%?[jO *fe =HvU*8Kb 8d)a,)$ aYzi o>V$bv[8t"gn?3w 9M M.9 3.2AH:!d"J83E;)'K@q`/^ "pe/71)g x M$)'B=vTLL.kC!D6++ko$y71h^Gl+bVXFT!/97XQ' 2$9 ~8 *$(/OQLp[]q?S#=,U Pag<= l p;Vj9VR/ (XB:}  T&a*E'$CdJ6.<~]At U'+RU'Jz|T;lWEC(B!S1>*5L: }f~1hV<86Py[hjQJF /ATJC+&y"n/g$(])vxU: < 1+z{7 v^J'Z j}4ad7\C7[X`?0 +0`V\VBO_34O4vw9:3E6, V@g`>^M :'##%.1<"Ee9yIMsK8QaT +/!'.y1mHdPrb[m"U'i W<Dfy!,68  ,f9g[08 /E=754.zY\@e,1#vJX7a* .nMZmS(7>/r2 % m j\xX- z/0jY5sz_t5N0kktyH;b7{y\E-a`Og;FgHBDXh2VWjeIl qn]IPMQ*|0$( +Rsf!Nk! Lh_L+CTFe>^rP' $+A CN*{\oqt 5. ;ti,RvwQS`el3,%?5/[T!8:B9aX7 P%J+<!9-V#<l>4VYRn.}y ]$-%hzeL=ae7~F8 14lgD-G\daA="S'lY !k#je` WInk;Suj"'W)hBr[+cDVo d1p_r3os`A>.yIx2m= `\w<E '7U=!4G; p#X"cAWPHxrNUG,fxnS{}#u=Vqw'2!1-   +)9 Y&h!f('$' @ZS>#?a@9$6Fl<{9*4c:?* F,N00  7A* 1>5='a A,h gFBoDc**:C/59EI8 -*7tlB>4$l!N*\3*0s}K&i<;)-;0dAX: 8s k%C!%.RG310)<"5 h XkU( 8~8a^qKgwU@lLe1qx"z([*k 6!-,_#sk7Jee>V &G0B[9r* nx@  Y jB8B:T ?*2+,2AS U;&-+9S]L>[<-lo ^P67QG+< bnD /9Fkj!X6K>*S? >06{7ygfpGhPBr&+_`SD$yVF?y#4KH;V ` #1`K- Gh?>EEH/ Ys|i;  ,42 .PG0|FF5 $!(H5Isl/NneK0\x0oVIA '2.!n;VM-%h&S_o>B >D$)'-&'  20H>G^%]& /NK,SNxzT(wS C>EB& >>xe m~(o11"B-5 4 {=jpZJ!M  9eyp`):PaP7"MrnfhJZr*]27T2}QDqQM:L!o*'($:B  !H-`;yF.c6C/ DR. #$?1*% Iun@ <2&)"$7>ALtO%ZjZU"}Q{TL@9B;"F=ZKdDX\g'RM 1 12 3Z\1,akwcR- U*:5' y q+Jo|[oo -"nyVOaILWL</-)C~uF #)( &E*,7FcW3 +7R8Q.G//U$3JG .1 ;sN!,'E> Ph?~6QCz 7=-'(v5x37&.=C+S}u~Ga\u ^GGo,o& #-& +52P 9 j]&ETH),!-SeP"B7mUyPJ" ' 9KL"jl%9Om}h(6f&CZA5,a,s+ "4,-+&u #82'|@ Q4\V\.]7pByzTW4aK )BD)*BH!>4 w<^wyd{6F;F2 @:DujN% %=A+;7 LAy7*M-0!NT2/"0VO* 1 " G|e;4/O+:?\+HaV+  ZxveS7R8XG4:0JEG^W*VLMB$ 74 *N^a V @ ~{ \DnNT(1]>&TWK@;2W3X;*+#85(7B KUiwxT>4#?U9  fMc6 G*NbdFK -UgYZ@5%6r |-y7TN&5 "&," O-xt 3I-W6 0+' S2l`PV "HDsz4uP;v~G$C6 >=jWRA,@ZH<1- 96>A -24*+0cB| (^bil.23oK\?<Z ##$5[#jGE30a@ % =Vc=8'gja_R#TN`/[6I5.,>IZ^9&'&%*&jqBp#e7SKQBDT.zdxZxUXa&T=I+/ia )<y&~$.<7e.oS,%) 8FVXU;>WY)6L;E\?E`Z8%#@_LqDN!  $,'ylkVrd:8Pb].$ -@ B5P=x]7N# 0Vn1g&.acXSDlQ/eyYR`N}zt?x'` 5PY?__Q59+ //TJ,9GMLMYX( cyIw{6$"-{~/7TC/#P%f3mlr!<XD :I-!;27*:2 ,IDNzS;R-Y0/5A@|kUx#!&{~T#|bQq? 1e2h[(qwlS3 /N?!! 86.E44/[Q_KI'( ($))K]I$%-LYJ'*>#pe L  #2Pc_ I ! !FfW )/ )&!Bx9~sy,+H:VNfZ`L,! %[t x0Z]F>!QDe"5'hy,??0 >0;3@dyRkk Iw9{=T- `-q#> ]rG,/&*% % `H=Ut{'F*7XQ ~"7( ;E/"3>(|t>5r,<GlE B7"C1Z,A#0Qdc$J8)= ?M`a9$qx=K{\B1%7/# )2,! 9C0#0271&  0>7=/!''56,Go'R!+_3i$G}-N-',# 0d{mG09='0G 5Lxy#W,$~?i:/-'c ~G~S\AD* /(42 of &<<'iz+$/  (03.VO8dUhPE'%0UG$  D_Q60'PnqR'J`?3+ )5?7#3 3AQF#8E>dOq 6-;%>) + sX!+ (/, $N%v&x V*c` %3$=CA$8*xm{  . $49<60%"#AoSfS?#0b%09A%Y/64)#1o(k 0(@OfkU$=$$#*!i(p^\o+H'+ 3UF.#LQH?. $!2& 9XZF/t9ijE)HrV"D M}x)X 2k{n91cki4wxsh-[T$A-NnC!\%" "0") Q1XY;`?D%~bm <,K;&E'P! 2$dbw'l >B#;FP)') ,1M rv[A52.4Pl)_$)# 5>1 4H6~-!M8WE8),?*!)%-:lHv<!I:/@RG*l| +~PY:qrn uCy"H0@5IO*8#4XY?'hoQD=BO(9  !#)J aARnNSbF+ b"p*(^_Fw--+-(7*  %1SDD<  "$ )D3:S~x#O}0C".IJ'! cQ7-|FJ2B Rd6Edd;$4N])_]S{2O{Rl%!59ITc3X .) G_ L)! E;M` p -MJ.^X)J-Q'w(o"A+- " 6CE-  153BP%% DinYL.ghSu*r3?3=<NmW\TAi#) @UXkBA$)2. 0:`_<AQG!dKH8t{!^-nu-6<?B-9 5\~w/`1a@eCgE` CnZVg*Sq7)Aj48VynU- !' D]+AD5  '# )$LupS}Ni)& !  BV$2QK(% epI-!'"'BffB  ;9j@$oC ?/,AML? "  '6?N=-.=\G~i8z*9pu`!c k HJC ; &/. lj)eni4mZgn2a9 r(39*j"\+$+ B\ZK2'5='t`, %I>.9 IY"^X.4L0PMUP`RT;'A78+"'-VTJ@ ,45   3'RH1/"-BUF ,}v3"EJ;6\P8&( >aR Mpj:. @< x6_l2gY6yr/<]-##> Z-R-@:$$;\mR !'uj 9"]|q6C? 9PP. -15&QF $ /C/dy#/DF4+31I_6[BJB=N9]5c"^Q>%Tq^aCtM@} 2 6EJI2-v$7-Y.>elHL{y^>-8TeF%4 ;]f>TS,G& /( JgO1&$9I@W D0.-.&A<V<D8'\BlwU9wP ?XMoWw-Jt[*4I;! #4%#9NZ$bDnNeG;3 gx}Tj# y48 T (j/~& "2# -+ ?=ZN?Q 63v=Y&C{ )7>'IXG3+#6V^yliE8!.O`XC.l.?)= 9Q4E5#7M*:&</ *4H]tjJ<Y-    LD]5G6)[QKnE:A%!15)6 # (@l%oLSg%T<2SJ7YD (IG'@TL<6506 O5W6:& !1%,+" 6A'<6:.?!(Th_*thA3/>t.% 5QgoStTU,/3 3-FRJN!_5\6(Yd[N8j/ #LR1#7DE7dcO8:o|a78goGaq7(NP8-* '#*++152%Tg C<G9v a0 @X>-,' 2vb4} +"@FXSh4`6:JS%I=@9~x;MLh3E+ P[j7h61zez}:OEA0EBiHrVhHI$ &=n3c)  UCEsI5[`6GQ  & $#17%2 #dj3 1UeQ'?fxa7(*b=qIQ/ 5P- {bq6Meoe5l'"#%JZ%D1,)*3 =8 +!*, *#__ JeS5 &-NHRKA%( $, ! FM( '%  .@>AO:Iij0%-8ISZA 8*O]Uw/W&   03XEk5L3Yx-yXMyuD/8'[L}{7X'Ok1j 2 ,.,)#)H,a[< -AIJ8a e_=/X|daL{ ,JP: .s3xoEr_Q6)D= F I ,]g6d"l;(oN '  1.)8* %+ BkD__(I 3YbG 7py:,03/3Zqc<  DI4  {q$7!0F#YN6 (-FS8( 1.99<'7 )!"D\g7XF%;,#-ajN!/ <L1# 4> $ [y m8+XaJSub%FEWY,+ %3D)\F&'5) ) C6& '7>?7~0. *%6/GP;43M4 Qqrp]*2d}b4&B2(  ,I?HMDB;)a YzY9@.Z}2#9/.`']2 7;8WZ4HjV}w\j  NRFna5%W,}'vP 8;@@`o^j9 7F3#*%   9SccD = =/JC#( #$"#+" +?==z6'l$UbO1 GluOd? lWK s%P^F3fyjM<\+{(9;+=>1&8U&|^1 AvV 3 ;32` sX<HMD:c G#4C:&$(.=D7(N/ML#\^R6& > E >?A*r]j;/-M`R(3>+-j4p@20F[D$%  :@>;,>Q>)+G:^@S2 !?"dV 7  G^+GB]U%yAH)*"')/!5' G3J2;) %;E:!(40ar O '%.5lx$+2-2C1!%\1|5J({.Q]A ! ,")J0eEdLMB',&+;HG (y&BD5, *cd#ARD2 3OP7    bs.;`\qNW)-  *= 1" )=8 N_ D%EpZ;0=n=g$-o l06%C]R--KL2HgUyQu,)wY ('! 3]N+;6 '/=8%   .8,E2J5"6 A .72 6B'=E/E`!S+ 9F9>N!7 +AH4YO!61"*0+[iS)?B"H=*B:0%+2<38& " 9: 0SV5JM316=2Psa/ 'V^4) <2)5 6DA;A N%[FTU*0 '#"6#2 !+..$#KV/ )L#YH &#9A6$JR6 280`\9Uo G "QbR%<VkX"66)~0)3F8H-O7AIW? z'/PXcdYWDA4,($% +5*/*.?? #9 S dbK( ,?&p"3!4;%0G2 ?o vM4DF/\oQ,&E/>508 2?2  ,861V-J&="E6NIDKF2 B{T,.#"($.34/!id%=O@!0.& *b43H &0( ?[M(    " !2L9p(~[ I`C" $(!*5D'1 *." /g<MzDD(  =H8 ( 99  MdC (\jD= n~V 2-}0`* t_'4@N*IY&_2,=:A<Mn7j0B l7Cx3> `wMTH(&# Unhb [Y1VB>B6 (O'G>+=!>H 8C.7OQ8(GCF.^=^HCJC,  &7DQA,'. 8+& #2?4 50  HK ||@[O8"3MG 0XI )- (  ""+++:G E 'B4hUvV[I'%' /[vi40M(g:}8fpF)uHRYKX :'>G= 16) 84+A35I':#,B F!09I @534v0z.$E   ?-R D  ;bbE AcfEbV}Bb*[G'MI2 @KHm,a@0TgnY*4.''R[M;"&/#'&-@+_CpGUBMYTC( 0A=$ ""  !/7I[F $-=7ZtXp,2,$ "4%5%, } -I;10Qd_fG7   69TBA/ ".4AXS]J.- !)=S<Gkd7 *b+;BT14J0L:0/+DI<1)$=KUF)U?o5c8 9^bF(!6 9,,)    :; GXM^zowoH@+N(qc0 3ZkD{m 4u!6s}8hJKG|MxD`$.CME"06 015%6?,;@?>>>>-++$3!)A:  +!:/;. "*$b{j2=>1 66Y>P$,1' 6a~{]A gx(&TD!,?;G<?8!+  C+sY}x\p#7 ]\im CyX'4" )&.'$W spK%PR.ETBBj-l$[I4 '((&6/G@AC 7/;@"%JH$!3&*8.2c {X -DLSmEK  )&8#--=5 +FL9&CQJ:,"'' '*EIB'!1.$`e6  3>%#**$% *-1 #T _4 " !5&Q4=,5 <)7,&%M pye:  XfN9?E<&& /%,6- 9SXM3+U^I ~.c`)oe?$    <SA" 0Td`=(B[WP ?CJ 329& E*u,xU# -3' <_pb8 % JdL ^X'"+07E8G!KK5-JVS> *@rD_4 8 e eQ 7-E9?L99>: $ 1!0ZlV!>j u:_C>0 >_%U$1(KAGg-UF: +GSB3)<JC4=0K;- 7<,!2IO7")&()Cl{f&df\g7  &-37+  _t_7    '#! G dE~ !.D<q7#q C8Z&Y/=$ +, 0Q<hWYe9gT 2S~wZ8-) $$&  *+-$&7@.06P7A  .D=%n^w4iP %! ! 9+:B=%3`[Ux*U$  Rd[P>,5GL!  !+7/!)61Hgwc#(u "A@ 3'/") +*@B5QJ/?K>#)G QD0#4J1G;/ -)5LI$ #(99E@=:1BH  &1MX\K% -D)[=rM_I'! 2dwj=Wv`5N^M@- .9F0AG!P4 '0"*(*>C ":G<'"" '3/  )2.,A>*4'L&N4?A+/ #P*]7=2 -" 2 4$-#*&6#23_cJ+ 30.$/G:  L(sAp6L*'94)0 4F8 77:;-BTB! 6SH$-!  ,EUM6 8L4_ 6\ZjVl)TtkM-*) #* &/0E8A<.>3 (/ )=E@4' .T\O8AX/H)'0! 8$I,:# - -26$ ! +AJ5  OgfG4ALP8 .5%]1k/F  5?=0(F; !.0(5u;yHUD0* *)Y@u:kA 9\jb4 !Abm[02GD5)%.'    '- /H;fARENN4 d\}*~l.% &  4.%'364!- "(& % P]K*,7=&;* :)C7!-2(TQZT<8 -@: >T"W:*@4L\ M3 %:8 !'  2-/684#/ 95&*+HC" # 9NPE,  4,/g |F%GYN4  :GB0  $" &BD 4 ZT5$2;1     <dpP-7# ]uA8V? %G[O3'"  #" %&=d$n.`$A*-"862`oT' 6k("n"JPV(xd$ ?T? % ")]lM!  [vp]/ 2XK #'%)14'O`K!  $)"79) ,,>?. 2<E\bG$,' / -BH#++7%;( *# &3)*  "-( " &) # $4VaB! !/=*3> ;*'FD ) 7:<MG*,)B:*/&-*WZ =4 6  ?`a = $+6 7+!.4A''!1'/-$/78  ** # <5% `!j* +HT,NADA<%( +.'1!;[W5 +HL7  4 2 &9 ; 58/?"!* ( )-%  ".%(.& #4>C 5#6'=SH/'5( / E=%2@8# =KA+ &,P-XTUVG(?K5 !   "#EL?# <H3+(+1,34 " )8N>#& ,EE0?dyrM "2@F1<SD  %%(^iM4.+1M@  $",. "( -.AB3>7;@1 #-2,K;!87#5&9-~;<+ Nmn T$.G@#,  6; * *1,LB*+L\#ID$@7,62#/38iu=_Y5N"'MD (98* 4 4X\?%3.   %& <G 55D, !# !   &.("! &, &H*J>8B'0 !!!),( &=DA8' &#61 5;* #) 0/  $&%/" < bb8 =R:.3$%@,"(&1?= #$9$?UZS2C71P'H" :(U:D0'CdI 9_]")" !0%(*)+$1dubA&44 0*)?D5 . ;' 0(l*tW?36+\-^> %3RNj_[V8, 0YX3>H=* " *B"2AJ9#HK* (32)$E: - J@! /0 "*3<LGNO#P7IdGFH- $7* % "6E.FQ0K%<I);J^`K /c nE@=(#/(  %26<1/ ] l.2S*j3l;[F=D5   " #*)'$ '/<'43$ " %+('- 5A=.&'0"9%+V]9)C[]9  ;K;#(*'! +! +<B1 3NA 6<5 Wr`*)EF2"5_Y"(61*?9" 2 A!S*N"% 867G(&<+6=>:%  ,$#"&=A'    .' # '$&464/2@8) #7ITH#$*&  @sf/ !,.%  0HXH 3Q Q3 !  &&! ,)""&24!0DF 2#)54?7;,*'2@B)'$)=C,B>  " )33#'GVXS@!0YoX%46 !0%<6py_R</hOtOXK#OM2/@;,KfS% )CF+< F14: &gs&J$  #%#%"*" %.5>B+=)1%&%!*,   ,,  $.35:7H n6!.J-h+[/.)     .;-42<UM$"Zi<*BI?#!  +% &% ) ?;1$!  .+ CN?( /J,G'/!$, " 84$*1,%;-  %ED* "52 "'#!+( '& " 7L ID ;-!.@]]F#%%# FK) &242' (22")3@5N-IF<  +,&   *(&5' 5A/Aac>,&EIHF4   -%)Y ulF5@. $(5!2VR00;;/Djye7%AE2$K[J+). $&51!+. !)7G9"!=+P&P: " @ ?)!1GL8(  )NM1 "!7B2  #04(#  6E2 "-895*  5c3hBM88=;  6E>/   +05DO@,Ugq!d#6  -HW&@-# 1.  %(..*+,24035S!g`A;XX A"*,+,+&    . 2"( @I>%!(%  8=) +?@4%>G4 -&       $ H!c$_ =! !1(  0=!2Hfq`: 30)> 7*-EPB!,5A=.  $5    2BJI1 2HH$  25#+#  !  #.+16#"=M A '8,%,31.*'>TXK6   % (= <'  !*-,XeB DWP2 &5 MB   +>7$ " 7PK8" '* 3M,Y-A# $7*!WS' %00(8?4:MF) (/EL:":PS-3"!.," " /0! 280++"4(%&  1=5%  %7;-" *8,6-+4FQM1"*(+$   1@8 &-0-! ('DH' *3!7 I 9A%W.M# #!24#,?0*;!7  &548H6'&$%"/% ),!16>'JB&7,'+% ," 46$7 E,0'48".56,2&26;>3%:>15M@*/&34 $#  !2.(1=C:$286&  # %/&J M9'&113 5AKG+ %'&,  #!& 0 7 "&,$ 181:-@%3'  @T @$- %!#" "-) CVF$ 0E<   ,I C&!CS!?2 8 &-HE(  " '$&4-!$*-(3B TZG $4DE&      .+!%<A4&$ !')!(-,     %:IOF#38&!@)A+!  ,?=#!/?,;  # ' /IE)&)! !*#*0+7 +*/54$ "%# $5 022#%F>"#  $24(JF$*@C96<$47898) $,  $#+58#&FYXmGf C 38$>C,#(   - 52+ )- , )  3:- (651&"$03/AQJ/ $'!& & % 22(!04* 6H8(10&"! 341,  FRD/! +EA3;#:7+(9JI5  # &63 #- 4?"8$(.8BHE5  6ZiT(%)!  /;&8"$ "  %  .!,# ' 7, !4"C )#' JO ;  #   05%65-0   (;.9OI. , @@+   1/$#.('6,  .1 &-??93"(02 %*>OXG1>0 ,-#'5/,SQ70&597)/3%   "% #&%2:3   &*&(##.4++#3;/ ), +E bn"^ H?">&6&*"30'+'   !% $#00'   3/ 8>%'   ! -0)NL, '61  )=5X4Y'F%!< 6"!-QSC- &-' !.! !0;7' !" &8/**7&?!4  L |T#*?G 7%%-6+!/>05-   (* Hd`?+1$ $%:181! -[hR' *2:%:4)0$  (4 %>"_cF !#=O9   6FGA#70*2# #P ^N/ $/-   &*.!5 ")IRB3%1%-#')" 25)8EE7 &  '# $6A>@G2. "$  #,! "1/ 38%+,       #0B ?1#  # ;B6-/,7(- (2) 0#;525#"5!B66C;  "$ . 74! "*"* !*3*  %-+ '66($% 7L6EB%8!)1TR;' ' 42'+?9#  +@4. <8  )23((2,    " *(  7SL4!"AS = 8H;" $/  ,1#   ,2() .44!B7  '=&@00-#3 9 6 '  '*/.!   "+   &$1:85 +&)$" 0!6%.   &$+#  " $'O+YJ5' <L;  $-&.=0=.*.- .#9B9N(N =2,  +- ' EG$8% +''9=) "#.! #,$ # 3QQ.*  0/%0*':7 AH;+ ;MJ, ( % ,S$]%B "7E<;YU.$     )4,D^X6   & 0%*-$+!  !$ ""(UsnI** 38$3$   "2+&/#++"IG- "-0" 2 ) "=?N?L&.%?@'*  !!/(."  , ,$   !""'&""/6#   1C)HLBf-hP, & ,IE(!<C=,&& ")!$   5!<#5& #"/) 7MF*!39+#?H5 E[L(,* ".* DP9//  0MG" (;A=&+7(092 ,,$)7"C0C8*/%3;<;3) 1 6#0. %5NWK-$$$$7?HX@Y$;?J@% 41#  '45/.3<: + <I<$3D8 -86- $ 0A6 5ME'*&=07%!    #  +9/*;/+ %-/**5. %/*(0) ,76 ' -1>6.(4#/ !    &3-:/-. '  +<;* !.'  :A1  2) .93 %      "-) #  -<=4  '0%$ ,." &-'A= (,'      9?3((..*'  ! ,+   .<4&   'AK 5 $1#. *" AOD/    7JH4 *.'.-!+!    #2/ -6 6  "/*   "+ #  "  +1&  ,&4-#   +/@O"E$$ ( -  *4><*      *BI< % %#&!#4BIA(    $ +"  '0'!1#(5A4030&,:%+! &'3A7R1V&L96S"G%$ +D>"  ,:<*#:FI>$0=GLI,0+ +* "'+/7EY[<  ''! #9>*$% &*  ' >"hx`4 >MAI$]E 1;- 561+  #/75% '+*+)$ #.( !&%+& "% :UVB !1/   $-$,  5A=' !5EF)'(# .2(     " 3/$48$  *2,     #5/$+)# !(" -9/JH0 , 88$ 07,   ''&! /+ 1@<",& $ &&  7?%3"  !.6*)2)  !$%  " '00)     (68.#+192 7C62KXQ4 #$"67.!   *7?? 2-8(3#'4$ $*4D%4GI'8S[)N664#    .>D5%*)'% "#( &" 0, #%'*  (!  #()1&3#    ('  /HJA4&    .=E>#(!   # -#Rke C    '& %+*A"OA!  /;#8' ! "   -6) :!II@.3B, 7]qhO6 !(! (&,10**,"*2(,?8)  " # ".+//*#  1 )&3+   ()')+* "!BUTC"0DJ9 "" +( +82%   0:1 #6AA;+ .0$ ,/) '35$  ##%%% 0FP J3(/' !* '#    !<OTK:9M B,     !#" /* -:. -=4 %  ) ; C B 3 $?J >+   ")    "(!..$'  #0 4% '2 1!&/+ !'   !+! -8.MP = ,FJ!<%&' BE1  &(" %3 . 3@B 1  % % <MM>* '-."   !$ (      )+*#  "#  BRE  49#$% '   & 7B> . ($ *144'    ,)  $ @L C1 $- .  ) 033-''-+1% /C@! ""4IK;' 94# !+&$*JH'  "-$   ,0&  66ENHR?=.).($ *& ! '&   "%,2 % ! %,$  04' #/9 ;":53D&D5  -:;2$  6>6 '.32+ $#!  )0/067.% !,# )($ 11%"2<=5# &  .*   ( )" %$"//    .&* 2C?*2&'20 #  %63'$:@8!*32!   #??'  ""! %+!'-,('& $(2357(* )%;3B)5 :>!'0 <+ /!3 4< 2 !" &  #  #)*& %$ ,) !&AR+P7=6!+ )< A3 " 2:, "),( "/'(,(%&  7A7$  %(+* #  -',2)&"'(%&#'""!!.FD0 3) (& "!    ( +"  " *$ 20    $/) 01(%'.> B3#" '*   *  # $7 ?</ //)    ! +5 +   3 JB &# (67- 15+ 7>3 #$   $47,$)   (:<.    "   ,A?%.CK@/): 9(   # &GM:$$% 7,AD:N&D / +@B1 && 6>3 *#  %!!4+4EC :3')%     (2( ' ')#**  "!     %7'1. /3('-$  %  $68$  DZM# #*%& 7 >4 !  -* -2&#" (  $ *,$  !()$%$  )361%" +' % 2/( ! &% &*'&# -0))(#%    & )%   '1%:$7' ($+( -5 / ( !     !/0I8L9>,"       &  & .6' "+!(%!&) ) 1-J.F*   ##)4,  ,:1         ,)     #       +<6!         ') $&   0)"        2 : 6$'('2'1'-"       ,9@:%          "ASUI*7MJ 8)", ) #   '1 +%)( #-&"$  +#B2J-D,-/$  $ # "(    )20#  '     !'!(7=/    "")&        ##     )99) $ ( &  " ( #1=2# 27$   "" &  $    #(  *38. ("  +4. (59.      !('! 0)!!         "!+ ?B,     '+(        '$       &)!&" $+&#%)65%  " ,& %""  "# "   #"   ",/& " $    &+!   $          !#       & +75'          !!+"  ) '*& !   "    (%  *( & $          #  %)'"  $#" "06.   !"   # ""   )"  .0"   (0%  %  +) !054%  " "  "0*           "!  & +,.)   "&   &%      (%   ).%   #/17550%$  $#  !/-  )-        05*   $9 <.2:9+  (''*# '/$&,% " */#   +2-!     06% &+.,$ #0*     !'"   %,. +            *1%   "3">?1  -/& )$',#!%%   "  %         -)    "0'                   % ?L@# %   )-$    ''  !              $               .'  '%  #)(')        !'    !   )!9A >.   )-"!      8CB3  !$10%   ,5%8$-!  '&   $(/'  ! !    $!7A5 %'#* #     % &(.%  ! 05' "&      #    #      +2*%    &+#    "" %.'  !)        !,'           #   #% #  &(  %               '(  #! +/ ,'&&   ' $   #33+        ,6/      $48, "           "8?3        !  #  ""(&      #$"   "" % )'"!         $        " *       "&%  , 2.     #%                $ '  !    /2#         ,,   !**   #!       ""      6< .        ,,!  !             $"       +.$              (% # #                      !!                     '(                    !            &!  ""         #                   ,!:%:.         %                     !# !          (-*!       %!  %                 '"                   #            & &               (-%       '%        $      " !  !!     $%   "#                            !   ,66 (!   # ' &!        & "               "            %!     $!      "             $                                                                      #-2&                %"              & #          #  "                !&             (.+!             $                 $#   ('                            !          "%                               (-&                                       "!           $!           !     &"                                                                        !#                              !                                         "#                 $                                                                                                                                                                                                                                                                               !!                                                                                                                                                                                       "                                                                                                                                     #                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          hydrogen-0.9.6-beta3/src/tests/data/drumkit/drumkit.xml000066400000000000000000000063461211146647700231050ustar00rootroot00000000000000 H2 test DK Zurcher Jérémy <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Helvetica'; font-size:10pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> MIT 0 Crash 1 false 0.5 1 0 1 false 1 0 0 0 1 5800 -1 crash.wav 0.5 1 1 0 crash.wav 0 0.5 1 0 1 Hi-Hat 1 false 1 0.5 0 1 false 1 0 0 0 1 5800 -1 hh.wav 0 1 1 0 2 Snare 1 false 1 1 0 1 false 1 0 0 0 1 5800 -1 snare.wav 0 1 1 0 3 Kick 1 false 1 1 0 1 false 1 0 0 0 1 5800 -1 kick.wav 0 1 1 0 hydrogen-0.9.6-beta3/src/tests/data/drumkit/hh.wav000066400000000000000000002260541211146647700220220ustar00rootroot00000000000000RIFF$,WAVEfmt Ddata,cbddciijifefgdjialjhnedhjkkddfegcccbb_YYVUYTLPWWQ8Dw8 "e"4 lG>%yl62G@YEBIIBr:2 Gm>\c:s'BNn:jezY6H^3 IUm# xrr<>`Oq<zCJUAc@&L@ 2$al]:je\[sD-DqxP" tV:cm^t OtW |*)T%|e<5 N$69nPv%ll 4rA_=}*.|{mhyJJ&y3p(%9qUl & Lo-}1k=-)zPJ;$gose${$E0 H>d CQvrA$S{>jOTjpG mfcpVH*AH=MT<15..W jslT2iBH Vvk-L5wc dRp(o,b._TzP!,Ho0DQg$Th 33HlRLevEh}f.{{/i6Qxt6uFu8h*iT5[kGho|! <ySdi}Er@L?# ttA4~L1,jQ4)Xw9jnui%\ >o0b^Oqi@7_*#Lgih8VQH@[zKNMe-E=Z\nPG KI.+S4(.SVG=2\w{TwcK!Y !m_.Z'`SdHH)MbY45)[8(!g$8rrnGW|Fw)vY%x"A[MwMY~bT,*?|K5c=} 1^v!/H RKxl.S_K|F ~ri% {kB mjM 4lV%':Jq|;/ppLop~RRr+QY-9WJkT"V^Og@#1{_.26<x!E+Ua5)i[d-o" I{N, fL)@h@D"AvY,>a7ei)op9nvRhgc~|k#;p>c0Z?hqo9j`P\!6O|)# FkQZH 3\%&|.5h!aMd1m.@&w|dlFyeB/"``au><ZP+lD/( QAtv7[K^PJa7,K#o&rHy.? gxS)Vl2A" P6V@~ilI9)'(OUCA"vK0)R=*9UMNcD2=CtnbWRqf*P0LNo2JW'Z<El2)9Vk66x_3;l'6LWCj{S4fR}zLcavk VTPp3%b7tS?ylX-xj6zCe4U`+l#b q XV0:+8Td{e+tC{vsoLypRPRCK94vrX<%SAa*k~ `~ ="S~'4 NF " >,6?lISEQX c >bDQu \a|g_T; e@<5`:6vT.1 |,6Opw h1!va?\^qO!g<]izZ*qP_."k] ^ :O?c9XcP1||wO3XuM z6a-o"Be]gX?O&S7/x1d}d:D@.CD0.|S7x9S[@5k7g6.wC@bKRd>?V>#[ f0I?`?#-)Q\J })B>8[P'p,fb3(vi)go[MwAd-|=]0.F<+oa*f*W/#A}+h,u`PTiD3fs5X)sN6meq!b*'R'E!<-S/,TnqcE%O z*$'H{IQ{D4:^;OKCUDOU+ dT\76oyJ}PV ;6?s}ai3%EmwvEWy\m&xM _Jo'AALL[)rnk. 13d`EhH*v+B.[mRk]\w [!nh4lJ #WP-(^H a{mQ?lGv_<M2(P /+-|1~$oz@&j<90_$hN>=6W'pn\3e;as(sFEAK |m\InPUl/ GBTw<I/V2k/#P dA{SeH:W:6!iIJV^GIQ9_EtGC?4%)P;we1$2koH'\#p"'{ VmZ9MAA4QnIE<41A"K@!iw99dLrf3{BSI|l~H,mg^TA"8_'W{QN90n /|'>d<1-0w82J|fLe^fCWh;/a[  GR+Nw&OZ+U2FVtt`z 3}% .Z; >e"eFlV3\"T@bap~6o('tu.J/&:OoK)AM 75kx /_h[YaJuI.6AC0cG0\*  {5EK!7&PA6 L_?^FM*-}NEI}79YiCVx[#|^b"bk8 ux6O>COs]v6-$F_<4  97m,95k~:;7FkAg7S @32u+ <}G.y,;r eN[Q4-ZQAGbfqIvZ:oh ):n j".@SYK\DlZQi"MZX~P\ :lDu"8-IaC_KwU39Wr?k\D(+R*os(k vU } V!)6t 5(3y+4LY/r" &YwMxL+PU{, BQ 9G/@3PNz &LF42R7tvi'WqXt$?q(:'jPCtW5Y)]]kM\>x9vY#;'bgr5%+ndBNnC f/F'jF#Bd7 Y~5v&!Cz$u@^'s.&oU~Y\_HcC}c#*:YEQ(IgV /dJ;@ 95ie@._,I+I's8?!-iueA8hlv8>TR;&k}z9+udX=mp4L(tK@a`sV}~iv6,2:sjDC;L$$yZl? 3Y]\!u>c!I#(.r}&lh_] J vN%3S<BXwdi$a(DIVR QhQ ,?ZC_XJMC`r5T~?k E` B~X5HKY'!(knu&P%eo]6Ws :5VEW+rn7A2'>-]pbKu p2J\n ]f'CV+3%_|JwxyH,zeu/ <KM}N} =dV1*n@[5.'1qI/U5`lHn)<6[v:L|EnUMLzI*&yT8v U&>e'P)3"bp>:g ZK0O:(7LY)Q4W>G,33 2Uy9M}FW" bBv8F$^Cut' [%jZf&"N3I0d=4r!NTI{!p$ \oJdbGA 8D%N\ oBO *!}U,8pN nkbT&5\rA%t,zYK W`4dKNf ?Wi=^MTO4QlOq5-9ox]9jg( }Eo8Mhc'# ak[LMSM HCC4Bz%e o8^z1y)"?  *6l?SNO J`~uPlxU fGv%d]w0('2Bptk th1c^C3m A.yL_CrB/)LanaD)hok4|CWlgI*w @(G#-3i@ YdFj02= op*6S:i>J@D0K ` ,$#e_|d Zgq$)iNqwttB,7tJ<(N-"[60fiCz6[e.vAXQLs\qU%8%Mi&4 BOULpv|c}dqO]1CO6 7qF}AKc?~~<kjMp$PK=#j'`/G@/3I9\@,4v`fY]5583~>l_ bU+ V|NYi1&k:R,.Z/dojkce--np}<(-pV sRjHKHu1DqqXTqpZcK.=8MUqU7Va/aju0bJ\^E]#n@TBT;HM/t_FWez>@d&Vr[yy-Q`~35$$?A!UlMMW5=f7F)l1<}f1^_$K0!gs!ROSov_}PG;!0JL;W#%R8.GtXl[+"] S6dd/QbY>@j{p@W6E4?rC0 J{Nd&*R5h{qd3-)kr=\QsDWi{cc&';J2{ 7!0vkHQ{6PA y\yv$C-'"$ ? SgfOIs!0x#2Pc R@7 34?85vgy~N 1UgF]PhQ iIn)RO92e0Hb2Ot&k CpY4mV{P2j_^;/F?(y S& W  pKnX"K.wdgO+_7JL[H]B$q'e0? a.fUgkGcOY:{V)&3c$pU2!\A^^bp v8 O)XMa TQ_@S9*UB'xm;EADu-eQ-_> r|+!j4M6}hoNShk[k-BL1/0ns[sKKM~@[Ica MNl/yhMX] +Xf&4vMVaj%vKsN3WQn`]'y(0#l&hQsMM!y1KV * 5 EsPbht>Tv-05Su+Q mck)SFe6~8 aS8R6(Z"3-f*Gd^;@H;R&fmHC0  usLDjd^Yl6V1j;vTVC1T6&tqU+1.CJOC7YZyBxOO=x-+|`/\-^*.u:P tNtdYyxm<K1/wT>1ZADK{ Rapn41jCN9" V/^Y6N`*m[O=&-!!C"BC* lEVDpJoILa.=bmgFqIiWE&S'I3HxSRGOAw@vbZL JjB*M* k;3o jS?|(; "~CGbem8qR%DU0@n^%Xptv 5^Z&Te1q7EkACK*8Qi[1[7&}7Y";|w[|(@?(x8&O=ZV@GU/_-V\C\Bz4OT>T`C-]N<BDk")~GxSV?Ctpm]rSuH }"^GndKEL(KHS3Hfe{";)P _luG8K"+SD?3c,q,/ fX4R~4Z fw[xz&Bl[D`_"Pi# 47[_xuIq:P'wG C?Y2| w0jI/m#/x2;OTE80r!}5r1%9m1^=%nEzQKovekjvO4rq cZ4 ?/THv6^6s=!L%4GZ}TPL]]] ZQuCLBq.9s_jNNB,BPH0Kt0jG3t*! dP1fk6L &t$LIaYF5 U.2I!$ nU buQ$lO%u]Di#*]"eDvV2c48$h)63YbJ7^HS`A9#^ef G1G<l }UXXO-dDplrDwc V;X-4~u0;Hk7NXJ^$v#Y;'2i*"< 1<UH @M5Zg9Za:$_p\ 'SnHSy+?a23,h.@<%oj!r #:O_LL&7jaY"~? M4!5ag@_F;6 [=n($NM pTK $hjD|{YkkpF,18fQAy:jI loBqW=zYM/P hs~yNsZ$!"3/G_T "98u;'J!i:%W5e@pgX7-9c()G4 Q VL9xQq;Yik y[ E&%2ZC&ptfw ACRgZjm4VLNnT[?Yc{0X dLbWOJ*h$!-0a$(on6 IA3&0c,FYs`n*gn9{t+n+s7Vb*Ll4j\ ^e Y$(X)#'2'iY[)l@##4 #!0#-*E$9)3X xQ tn0l#b1O({xj#q#[7c<<R!5q@3_^mP>T7nzW%r"92zK:=dWQ\Ppg!j  <Ot2R.*-' *w`:nH{o/'=PDL< ? 'SC(-ftt7? 4jzB/uC-$G-;G@ U$BK?C'~`"z) ZYRI/;#d+7Ja*D;?#55ipx*wK0jD=8!#[[&wMA;0=@;kTkR 0F8 ;AjPGw"LnmSdj7" <.9%:v{ +z {^NICG<'al&igILUx&v(I 5` 9)9=@C bt=;h eHa9/8r8I5?+[Dn23&'{)>4s3A+`D6z& rr&4SNV22 K(aP~?nq^.sJfo v71 *=.UJ[*^_hY;<"o6?I!"il(8 .`OPcE",58Bl-" U61GfC*:Q7' >)R" % +6G2H (SN^nA [[jD/$#m [[9#8U'`"yR, k,=c *.HO7?M]O3&?#J #+@'OTCa^Y ]#d-_PwC#%3=E Z)EQJ-H=u_;>u#tf!f+R8#C[G:&lQe08 |@nhi'sbpQH*xuNhZh l Us9+]s^3*IdGnCj7$coe!,e`:@gE *NwU$zw 7\23")w#xu::U1DO[ " m'X-rCZq2M1Y*!Lgr79S*2P]4*R1*ZD70YR0B[4 F,Q3k(?93M &@j_ ; v= \)JsZ .{R "]QuaY5* L-V%n=6|:nJt WDUW) #1 v*=*?;L(y*A3M 1 V{,H,e y,#$@!]7X &S 6d%DL 2B; Y -0P"*wE2 /Kn&O'{f) _d&lD@a2>U IqXTJb*.=Bde_Pa+?B61e, r!HD73%bFLS#/,TAD5Ro I} >`~ujeYa_nEDrbKqwk{vk)}{b }} le}iHK _\0r?*Jf>oXc'OZsH_ V\ H j337TQ#Tl$O~h+ ] x)&DwdGv+{!"s+#S@&B I&e +9+ 8 Jq1:({QL' F !N' Yc[# UA, 'P(( !'R-L<` *G6EY! 1!VAe$#:):$ , pX-&XAZ# -6 ='6 R;NzW7, WFoTl H#a"moKbr,Y, 3"C GjM0'X.Y9D+L&;$8XZ`$6>%@8SPRw#+}Gp0{9<hUY$#Pd ?=83W;t#%>B$*9.%.$K[O? :#7 (3*1&870+ >86!=1* Y$1  )/  ^}{ttv~b6eRMNk _6fkZ`O^TA}c=Aku"SCIbPG?`?$@ZP/MT4(/!6c&[U QBC# &E 0Q% DC*"_,O>(@-9&920> <B"61. !39 .3# @=7H? ,8 'C3(&0/7 x87v~ka(6sj~ m7@) M%^kMdX>D?KhmmM@O ;XiI+4$6g#ItD ,JD5g~@ 9P4mDNO "W8<>A2;G *44+-D/'G[!$K'=3#'3 %6W$.:P(1H"=&A4[O ?'HKIC;/,BA16)2)Yi%J$Aw\B2=@#/!dY%\/w-!lP5d72h9k/>.t%l0 f&a 'M1q;"!,)"/)# 6.0* ! )1: )/ 4$-<%"#$!'+ 47"5$C"94 58- ! )$& * " "!0! ,! )>J//@9 4:HI54YjL:Z^ CE@:wY>opAPYwgyrff \n   + %#      !   )) -     #  %  &  #  o zlfm^~Z gyg\ivksb3>dAAcbN:22>OL+N?+(-;& zxmW}twtp|}rgfrpok]n~]rrqn]_zn^tv[q~^_rk aZnwEg{Y e}qfgjaUhiLLTd#Y<L l\&<3GUV$a<R(+@_R'36 X:[EK"L P L%91*!QfR>G#LR(K$@ GY ^QZ&N"+CM.oO,>-A E V>9(-\W 892QP':E><^)^I&]0[76AL7ZR.O@~:)Y%jBsLD+D./k(N%S3s<x.U&Z.q+`%W,f)pZ#;/\((n%S$W.P4S+e%]3c$ v+Q:cx?17&v x"X(Va l/j(V L [m]-T(r q VQ'k2kP_)tQEg^ Qjk Q O Zim^cwoWJ R`U>Pn jSGe k9Br}oQYwM IovYxjQt~_rcw {     "$"  +$(:H=J bD8U fI3\umd`swOQm{z"z{    ! # *%     x oVnzp_eokh d[\dPHRAHZ KHWL5>LD.% DE ),EI90 9E,  - ;% %!    {lf{lqvrutkpx{sovupkaWUggajeY^cSL_eMIUQC0">UJ6+3JM1(I\<1;-295..7.&058:+$:<%7L8&?1,C@%,B,$' 2=+(*1A1-80)))/,3><;>/,248@IGA=5>E8;E ; 0GR DMO>?> CUWGJ X JS^TTaV"LYg!lagw%mYb+n4T"Op".u)ip%)}'g+q411=E~M@);{YF*-FKA7?EDC?;9E?59ENF<A:4IPEEPE02;DA=EHA?GHC9.3:@B;>LLH<-0?A3/=E=8;71/3892,2*7@"+02*&//" * +  .4 ' *'# !03'$##&#*83; =$C> /-9C@C>>FPG3FXNHPS^hXOcbQVjjddfu{wz}            yronxwhahc\ ]Z^\PUQ;8?JN@07<0%$(**%z|zoywx}|xr~||wjl}x|yrz|xysttvsqysjuzmnqq{rtvmjqxvsxsmlqxqhmpnkvlfc\`ech | tbhmbWakheovldk`Ul zhZduvhmwhgzsimnnqu ppn!rqmilu oektm puiaol ej mlnr v na cnj fjd$h{~ yw{qc kxxt {~xru~y }w ynv ~x { ~qw }v  z }  }             ! " "  ,1/2-29$,,+?G8%?HELVQCPVR!UZ \^ejifn{rj{wr }   ~~uy{yoqspknsja_fh`]bcbdf`Y`hgZXY[ZQOPQLHMTNCB==?:589:9 0- . +(& +*&                  |~ {| un s w uqq m him h edaSZifVT^\ KFGCJBGD9;GC97?6&+2.+66(#.$$#%-*'" %&#&-%$.'+30%.<4)-A=39EJD? =IPPSR TOPWc ` `i e` g jjklv| v uz {y} z}   " "%#'###!" !##)%"'-,! +&($"##!("'  !"$      $#'#*/*(0/-4867:ABC=<DFDLPJKPSWU^d]UV^eb\dmqvpppwzyz{                 }|urstqsrgjqk^`imbVXZUNPWRIDII>69><513*+'(**-  z}|x|qsw{vjmtnmnqniknmcel j cbge\ Z ` _[] Z^ ab[ W Ya_`_XZWUY_YTTXYVSNSPNTTQTPPQQ!T]XNKLQVNLRO MMOKKGEHGEHOKJFD!CAI!LDBEGIJ OMLNPOQX\RSWUOQ^W[de_^_ddfa [beh j o m o q o r ztu ~ wx { x}                       %* & # #', ) + 2 -.8 83 27 ;=<?BEI@@J KOT TN V Y\ ^]^cf djm komgqxsuy{~||                {}{xx|wsxylinhilhcakicfdiihda_]^]Y\_\YXXW[]ZXZVURRRQPPOMMIHJHDFKLOONJDEFCE@AIE8<=:94 8698/220+,,' $()(#              ~}}}}srtsstvvunqvvusrquupnturpnimoiimqotzrpqnkhhlpolknqrpmmklnrlptojlostprrrrvuwzwtnqvwxyyxy}uxvt{{}|z{y~}xy} ~    ! &!!"%$%&&$&%%&!),,--*)'++&,0/+---.*('-2*++-((*,*''--+.-(&,,.+(,-'()&%%'$!%%()$"   !!     %("&),+-1-03.11.39477:B>87<BGGDBEHEKLGQSQQSPOXX[[\Z[baadhfcdhimjpwurruwvuxzsy~}}|~xywtvtronrohmoommllheea``__[[][XUXWSOQMCGFEGEDA><:7860041,1-($"!!!                       "  !%%'(*+.1//26787;@?=;;=<?BC@?>?EBHJGIJNMMMPSPSQPRROPTQOQU Y Z\ X VYZ ` ^ [^^ ] ^ [[^ ^ ` _ bffcc fgilljjkrokmppnljkkmmllmmnpnlonllgiklqkijknqnptrrqpqutuwvvyy{yutsuuswxvutsssssrutwyvtvvutptqpnmopssrppnnnrrrqkqvsqqrnlmmosmimmmkiijjidehcb`\^`^]^[_bab\Y[^]\ZYZ[ZWYWY\[[Z\VUYYSRROOQRRQMNMMNMJFDFC=?EF?<;:942000//-)(*('&*-(%%"                      {{{z{zy{z{wuqvzvvywspqrrvsqpqopqrtqnppqqsqnnotwspruy~|yxz}~yy}      !             "" ##!!!#&''# '("$++)&#&,+*-,*,+/3200333332698999::<=;==@?@A@BEJJEGJGFLNNKLOOQUVWUTZ[]ab^ba__digifkliloolonknrptuvy{{y||{}}{yz}z|   ~ ~ ~~ ~ |x y x wy wtx v t r s o n jlik om pmm ol g fg gi f dd d c`^^^[[YXYXWQ N OKILLHFGHGDFH@>=<;:9633750,+,,++)'&%#%$                                     " '# $&*( & '(-/-0. ,, 1674 3 5 5 6 5 6 9 6 9< : 9; = >:99= A @ @ D G HH F G CACH L L J M NNM M M M O N P QQTTRSSTUUVWUSUTUVSTSTUVTSSRSTUXZWTRPQQRVUSOPSUTOMMQSOPRPOKJMNOLLMLLJHHGHJKKIGDGFEEDCCFFFD@EDDGCA@?BB?>==@DA<=?>;:====9879<878::555554314742556423442--//..0210331.2310+'*-,*)))%%'''(&!$#!#" ! $&# !"!!                                             ! !!##"$()(*-)(-0+),14335221.0467863569789;;79?@BD?>>=BCDDDDFECEHMJFIKHGHGHKKMLIJLKJKJGKJIIJMLLKKLKLLNLKKMRTTTQRRROORSQNOQPRSRUVUWWRQSQPSTTTTUPQPSRNNNOM IKPOJ HILIE GHFEGD? > ? >?>> ><=>: ;;7 5 3 4 3 32 1 0 1330-,-0.+ ))*(& $ %'(%"!"#!                           #$ " # " ! !$ '++* + ++ -./-. - , - / . 0 / - 363 0 25546566 2 0 4 6 5 686 4 6 6986 799:9;=;::97 6 9:<<: 6 4 6 ::;=9 8;=<;;:7 6 ::;;><: 7:<:88:<=9;==<98::::::;;::;==;9988::98;>;;<876:;>><99;<:7579<:874245455565432223440+-0.-,,.1/,,-.-+,-,*))'&%'('*($$%%""#$##&&!   $! !                                                    !""!! !! !""%&$#&)&$$#$&&''$ "&&%%$$##$&%%$'(&#$$$##$$$"##!"##"   !""$#!$###!  !   !  "#!!!""!                                                                                                                                                                 hydrogen-0.9.6-beta3/src/tests/data/drumkit/kick.wav000066400000000000000000001043741211146647700223440ustar00rootroot00000000000000RIFFWAVEfmt DXLIST>INFOINAM untitledISFT FL Studio 6 (libsndfile-1.0.20)dataLMA4( %#% "&$)(-,0.42759394787:6<696445.5/33010--.++,'-'+(*&($#&!("$""!%#    L11 O ; E \kD0~e/A "# &^'q%"$%T'i()k***)P**d++,c,.[2e31/=./-&.:03660**,-]010/.-.5.-.h//.,<,,k+w)U)*Z,&+8'&&0&()Y"$& 6$rN"*#_ #z 1%$#$5R[SLV1dܲ|&EzLv~r+ OøѶۖǧNt{QNsp򎙢Y搵{ :²-n}dԥ̞ ڱ3ŎxtcH:NѫzަY]V].NE#;hJS@Kco^%,z]TkՓVɗ8׺*۝ٹؐʵ$ox٨2|AJٵҫoE b5ߪ:)%V H# j  Z"%# ##%()$ "\&.>90@?5<:]4y./o49:;;=@iBq@9S59EQ5Y+[SqD88@KW_Z^TJ+DAF R^h\k&dZ;VPPIKXdga]\|\oZWWXYfZ{Z|[]^\/YVS&QRXbpmv[v}jXIh@?*FOZHellc+WNJHpJPzW[]|[VSrSRONjO>NHE5G+MHUK\=[RIB>yAFHOTVPD>AFJ N\RPʣy(C󻆶̶ĿʛȼCq׳-&rlüٲ<ܾݯ²H|CѿhճʪQ-^ͺ}}Լajƴc ݳb-L㹠aFe1ض}5_ ׼j\';,L-JLdOjQ]9ǠϏȗɲi> ˁ˶ηLt άПVΔΙЧҽ)*)e)h*@+N+*)M)~*,,,;,++l+T++,,+O,./ /--s..|.../00@/.,/,U+9+}-I133 20/T/@/c/(/.K,***,$.30G11/-++,--,,*k)-(' (()*,<,<+V*)A(Z%#$&''''S&#!4 !"w###"! !E"N"! v%}6N[FC#Fhf * 1& |  3 0  _ M T d U ?/.   @xLcr><L:,wXHaY ",gb!g)/J.}hF$Xe ]eX@ W8N %  * b r o   f k h * B ; U & E  , O0y ;D ;W@&qk'!,ZRl1afPX> r:Y{f3KKWf@\D5EdO#vXg Se)*BKvjE^E7QG-Z7#Q`6 ov;P4/G%#f @/ Pf\]GG7 P%jmK{tM2 h_O7=?y# K|wxQ`H0#A3Cs}U,{DuTAN^3H1csE%)|y0b#r*A*!T$p~%Fv{oQHG4L c11w5W."D>ActN2.5SpQD,> nMq;^'`R,Qf!@!7]TzY:6|g *(S f~]x!o Koh~*. zT6%H$@?>o{_x-7E)CGb|8 / W q q S : b r N 5 \ / ] 8  5 > * % . K m R 5 ) Z d " C z x Q 1   G @   + - 9 8   % &   g W  b @ P G + o q I  w >   B E  b ! " J 7 R@pm2155fx;`D[qRlxwW6mC.s[996/(&A"x|}[jY@J|SB 9qo3?ws:+LzL$3yuwdFqMj. j DH.t]F- pO. /u}O p"mL"}kYuGT^)/uw&$LM\y UWi?;`r9;,"c\LCcv+M== :1SgYK`* !DgQ1., OcE 9^o07;561^qdo|fg ,I,0ftlZ 6Witjw*4*"S6LNu3\U.HdA0M[K(( jjxQ|teddDNl;4< -3!KjV46($ [\1 -=? -'  sbQb4$K\un=cF{gD: !~R]fb{W [|jj{%WJ.$1?OB0{c~F&ND@=[d^='  LKt "/HJ/06PknVEOaZWmorwFjlK' 1yzL>,HeHG=3-M %(4#  GU@%tK9,7X`aqq2&  {wtijcqYbc~r~"8BE,.MVK"eGCI:V:Cbzd. A!.7L\bH ,//  "=`rpny/Mrej}Xzln~ 0FZk3Jio]ZKNJVe03:XbP&BhiSA>+:Ulr{dTD9(#&,*5@6   iS>6EJTF%zXKX\KEHA& rYYUI.dWE?;$eWPRMYOF% zvyssggYDXkpkZ@AXf]E<>/,+7S_YS'#Z}a6).GljXOI=9:A\kecqa76MkncF?RqwpvjU\kuveXENXi|}yywk~ # .E\VM3+-@erc_Tc,4.&'<[dd_f]M]y{u6969-1Gty  !'?MY^mpgm )JNJ?9?V' ;TeWB07FYly~wpb^WM21+)vQ2?KlfS5pmvkS;" _C>MTH=1ojeaR@74OnqkZ6,@KC1'2A=$ 7E7)"1JVR  50 "  ytxtbH@?GEGJ:8 }la]^VZdlZQ7//9FBB181;. 6C<87(%,0((9KR]S]Y\M\fdk^`` 0=;#2?Vgip 7UguvYU`}$2<,*DVMOQREVk}p`jr|zywqrnukuxsghmmWZ[XTJSPDQZK9-2ISVG?'&AUSF+)0;:A92&"".AVQUG-+>^]cL?7318GWfsvpjmekl}sudj{  '++#$1?82-#!1DGKD?9;9/%",EWYVNF843=9H:0>JI6===5+,*2)2&* |wsuuf_\`hkeZF<,'!0<HC6*& "(-& ~~p__`dkd_WIINWO>10*#$ |uxj`^emd_T\WRQL:DIW\XWK=2;F^^fURFIHGLLHEFLST\e[LGP`^nntluns-OZ[W]fp4A@>NZ`lq{ ,48@OKMYdqz #,&)"#2>H@>?@HM][`fbmbfacfht}uwhnr{zy{ujhunaV]]nudWGKA@HF>87=(% {qhmqnaO@/''! zvdWN>.{{mqkg`_ZNKOI@8&%.(" vxsspu{}~zvnnuzy||tv||squ|   ")".4E:>:CGP[``_]_fr!*64,)#)'8BMIHJIJOMKCMKZSd^iems}~{jnju~}z}w{xxtu{}{~}ynhd]]af`]QQCKILJB?67,%   ~}oldmjkaZW[SSH@:959?CA64**(2+7/4/+%&,/-*!,/-/'% &(%##  "*+!+,-)(+''(1378B:A=MSUVZ[]]lishsrz| !#)04HGQX\b_nr$(03667AJLMOPU\[aT][ljkhsqxx{wv~~w~{~swtxqnkkehffaZ\X[ZSMLMTEC;888=./(*%#  soa__bdfX^NKC@HF@;73,*! yusovu|tfZ\Z^]fc`X]UUNJG=IDQKQKN@@6B?KDOCJ8;GFHLFC>EFKFKIMKKIOMRLPWZa[RMRW_demjnemmrttw{      y}|||swt||~rxttz~xz|~~}|z~u~{  !+#.'619.1,28>AEDGEFHCGFGLGQPTPNTNMNMPNKJKHOINEG<B<CA>;;657<<33/23:44'/,121.1(./526,99CCB;96ABMLECDENPXWMPHTMUVT^V\[]UZXb]\Y]YZU_XbXaX[SRRU`b^ZQNOOSVROHCGINPHEAECH@F9=553859230.,$# |wwmmbZVSMK@A:7*!  '%85=DJUY^^enu~$!/*/6=MRbbnfmo{ ,->>F?FJU`bqjwu}|wrnigebbVZPPHD?3++-/02% ~zywyon`]UTQJIA=910,%&zyvxwyxrmdffgbe_cVZNWX[]RNEGEJGJFFA@=A>=;8:6?<;21.3463.(,*4374010314/.,149583224:>:=>BBBBHEKIMEEBJNQUSTPTWWZ\aZ][bcmiojlkgooxz|z  !""')*/)2/0449:@AFDGHHJHJFHILXU\ZUXOTPXZ]Z^XYUWXVZZ\[TVRVTXSYPTRTWPOHHGILQKI@@;DCFG?A8<:8440/3222.--)-%' ##!$" w{surwnqklmnksnohegggfidihfkbfbehaigjgagbgedijjnmnmfkjopnqqww~~}{|z  !"         !"%$%'((&)(.+0-1+/+4/624679?8A<@>A@A@HBJCCFGKKMMURSRSSTWYa_`\\_\a_acaeelckgidjdjnrqmfjghoitlrfkfmlnknmikghfgaheghffb]`]baffca_[[WXY]Z[XY]S\NUMQPTSZXXPJMDHCHEKEHA?AA@?:997@?>850417784715,1/0,00,0-/-),%'&((,-*-%''(*(-+2$)'#+)&(#-%*')'',*/*+(+)),(*((,%)%)&)'-*+('%&#% (&+"#!!#! {vpnhfcb]YYVRNKDEA<;633-.,+&"    '+/2133:AJJQOSV[bikrsvw{$'.-69@AFJNRTZ[`bhmrtzw{|~{~vwokifdd_aWVPLLHHF<901.-*)!x}stkic`]VQMHHDA@96/.(&#     " $$'/+4.468@CDEIDMJPTY]`fdnhrtt{{ !#"&((,'0--33777;;?@CDFDJDMINQQSSUZX^[c^f`fejlmqmplrwz|||~~{xzuurnjk`e`[`SZQSMIGCB=771.,))"  }{uvqvqqpjpilkjkjhgfdegehdhfihggegdjgmjmhnhpmpqpqutxwvxwzy}{}  !! !#")$.'/+//10345495>9?>=A;D@FBFCHEKIPLPLPORSRSSUUYU\W_W`X`^^`^`abdceadbeddcf`hbebececbdcac^c]__]`]\[[Y]ZY[VXWRVQTQSOPPJOJMMJLDKACC@EAB@>?;976674432.1-/)*&'!&#  ~~{~|}}y~x{ywzwxwwxxwywwwvxwytxuzzx}wzzy|~zz| #%"'&+,.216597?;DDHJKLNOTU\Y`_cghlmpquwzzy|supjmdb`Y[SSKIE?=963.)'"! ~|xvqqmlldeb^^YYTSQNMJHGDDA@><;8755421/1,.*-+,),('&($,%((&%(&()&*&)*+*0,00/23092<6<;>A@GBIIIPKSQVWZ]_bgekkoqsuzz   "%)).0378<>AEFLMNRRXX\^^cdghljonssywy|{}~yu}r{qynslojlfjdda`_]]YYWTSQPKQDNBFE?C9?895612.-*'("'     "#"&(+*/-130776>7@>AADDIJJNMPRRTXW[X^[``ceffiikjmlrprtswuwxy|z}}~}~}||y|wzuwstqspnoiogifedc_a\]ZYZTVQQOLNGMDGC@D;@9:937/5./-+*%&$""      $%"%'%)'*+*-,/0/4063564888;9;>9A;A@>E?FAEDFGFKDODNIINIPKQMOSMSQQTQSTTVSWUWXUZWWZV[XYZ[Z\[\^\]^\_\b\`^_^a__``a_c]e^c_b`caaaabc_da`e[e]b]c^c^a]cZdYc[_]]]_\_]Z^Z[\YZXZW[XYYYWXYSZPZPXQUQUOVNSNPOLNLKMJJIIFHFDFDBD?A?<=:;9868535.4,0*,*%)!' "!    !#"*$,(../2082:8:><@@ADDFHGMHNLOQQTSUTXVYX\Y]Za]`aaab`gchdidhfihhigkikimhkkhoeogklglhkhjghhfhcj`gbbe_c^a_\^Z[[WYUVVQTONQKNLIIGCG?C@>?;:;674311/.++')&"%"        "!#$#$%%'%)$+%,','-(.(/'2(2(1+..+0/-/-///-0-0-/-..-/-.--+.*-*,,(-','+())%*#'$$%$"$! !             !#$" !   !##!"$#&%(&,'-)-,-.-1.111333456476796;7::9;9<:=;<<<<=:>;===<=<<?9>:;>7>8<:9;9:898897674834516/5/3/2,3,..,+/&/&,&*'&)"("%$!%!""                                        !!!!# % &!&"&#&%%%'$(%(%(&'(')'*&*&,$,&(*'))(*()(()()%,"-$*&)&)%(%'%''#) )"&$"& &!#"!# #!                                           "$ !!"! $%% %!$!%!%"$$"$##&'&!$""#!$&'$ ""                                                                                                       hydrogen-0.9.6-beta3/src/tests/data/drumkit/snare.wav000066400000000000000000003241621211146647700225320ustar00rootroot00000000000000RIFFjWAVEfmt DLIST>INFOINAM untitledISFT FL Studio 6 (libsndfile-1.0.20)data G? _ D#"10z.<-9 U%I  f ]x?lV( 2 5<5 RP;SQSRDB@㮖 Ȩv 8;7ؘ8 i &ؔ\+9KL\iwbs߱uBԍ{OLeMz~n-&&{GE0.!li (k΃Mڨ쨽l w mL INIQTM;7 ~m  } fD N #&*. }#ecx#K%("#~Jz!?4>18'^2 (K i" /8('?ɢV1%$77-: . E8މd735QNUUS;QO%I&OVտtĬjʏ"ݭH"$4AI%# &  4*EY#F3м?Sӡ-vʤӻwͪʢ. |Z-p!c  QWcsja+uԞ|޸XT_6ۨw tS^ $7 lBcff(ҏɼ7# iڭ{Jf>YUU8.MJ|t}$#BCR ]y!!j !y:~)jn%? _* ]r  \Z&^+!j ˺ȼԏFC%Kx  duG!("*')|$YQ.gǵT|iMG TL _ P +$$#b# Z!+M@^> !%&(('&A$!p['{ _y"$+" A$C  *d {2V _Ma !X @ pr&~n:B "Aut_"x6տs[ V3&c?'XbWH\[} S /!y^1Dq k+qS\'J%i@Zr=L7 |[}sXzD Y j2IV2iS/Rcx Dimh b@`>(eSl3$LHGuw6TMp -}3mO6/L$"F&mFX1.#f 3 6h o 6@ 0kO Z N  5Ki]& F  f ; I; 6 1 H6m<:ZUuEm p  b {7qx  0  m  L1D L]zi""9!hh_h$_Q[Q/nB ?P4xh+ ZGJ@w   6 s]Y#@ { O|5r/)J ]*|5QaBv~y^c3.| ~M#=X]J54_{kmXE{># nX ;Xf3$$l|k&^dZo  lEPk YK`q2_XvN*lC0>2Xpc+^d+E MMp, x&& t 1l}O/Z0zEp?W q `@!+N  IsY63t  rM rBf ^y2@5Z0h :  o>r dEPK>M  6D~ 1_5PG)36Fgm781 = Qr sa  s PiLtNi # \EN<j  > a f-~7h  7]j  $d*IjWi  ~ b : CP NmscN - n+ HnP 5wG G 5 onX  s  t Pr+Q<$iDatLHs|n^KR/$kQK"O1yL > &  G * qng.aA0f0ak+0QuD.-Cn9e=H-8T`Fh0>v'],9tc Ck-1H9G,Lur, G _ g=N m&c    lZXWgQ#d*z R 3 te5m= LLf8[>F7rK(HH 3- u3 z >:D/ ~1z  >SaQ 0z V1)70N t \  6z f~ ~x]rEBa~7<,&r $g)n?,,k%c<C=h N OS$w{"B*s+@WTx` p S=7:{N\ ,A lX  Id p F PT~},4`(nmLC%1= v PAh m)6 L* Ep51 = 3D!9H Y'D-&pz3 @ r` S  }b$Jvo1"5ix$feqMH-tfwmgqtCS|,i A B GIY B[Y|6O ?  ]}y|RP!wcr9-lUCc/W9r9CNQ58ja<JaJ,Fv{U{l:nFzf5J)$j o S"1Z >9  y & 6; Ae (i NT    >K .j8c*ivUT)u= A~LI ni @P  eGaJ/+K74^xK pgk<`US+">& Voj)zp8?  Wx{ nh: n9 S D 8_ s^ i8bG`!V4<&#AN+]`=|K-DE(R]7rk[WTz+ `FRl GnO#WM v>6VQ p_!N@@/<]i~t#3x<=nFY ^ .- l  26-x hy %  \F ;U19|  # fi]  >^fi4[YzD HWTK/ 8t%1uAPBdNvdaVnqkq8GJ#}fGZY Q,9[JjQu]hZESlA ; zmv1' :  \&GZT ) $ i&pA. E.c&(T4q S WCDqba&EOmA'iZ[X$ W3HGcq)-Pj8\|=VK,|OD@LWTg9m70lc=vZUPx b   J8Z )tuDh ul  * $  zj/ qC9 @;'l+{g JP)b_ Pp{H> 4*wCbI9uK: Gt>Fkq ,u[ e;Y8 GG96}f3-bow  Q   + 5,__Oa#jw @ 0 F& * T / A G_so(E72 e. b K = km "dg~ Ea]`N/h]631Mq_dbUI dmd?,Z)YO=^uQ3^4 U'B?9i' ^Dqbcu&3@$5 %  yY^%;Cp$F;OlCINwKpJ]V p E uo4`&  KH&6ytA S5)E:MHCeg0%& r)h*%Z+@[JY*>_-Lm%Nib  m"-+@|u#4  fLF&] $@G9#cf <4 +vq1W7  n3jcfY   L q wju.+2*G#6zNf1)Zi{_l/L`<V-OzC~cm^3 m[nT0<:Oh Y?pk m W , ^ $tl07  p8  Gboc.62 X XBzq+3:m> FBm WxT%}T=m^gB4"`T!"HG-{}>I}Jlv/ 8slBFY c:XG`;$qHBfe  [A |c {+  f , d  U M32/ 9$2ZT7>k Pm I eV%1Z^&n{MmZAO+TlPe wrdL !4j"\^9Y+NB+`33]gtE( |%:F! )  1@,~ ^Ujm+,T>Z{oN 5'o  t 1`3 XS ~xo ! G!P 2; aem O&c~ (@kh\N0r7VT?Py=w(n`;8DMhI[*Tl0Y0+06o #>"'3(^[4GkW 1`,-iYEjv4}u`](l.fJ!m] : ;hUuu i 8ddd7UV= X[ m  Z  [Cju*noC9FrW/g  @ ,u?y)V@gV9JNHL >19QH1nl)/8!.v + {&waJu)p* u r&q2 {/,,<g  'Ub7 =Ux5BP  _$^=W7"}@XGrU{'u f1 w 0 [ (p[O(gq;:xmyi{3 1 ?2 W4 LY>o%Q2}D/g= jDWwK@[Ho\+"6@]R 1V<v{DE@4B$Qp` c;OG6xYJ/lk/ lJs3`MxrE2IfC5]jub>,8Xf$jk|152F Zeezh  .9 "   -Hy%#w&z8nS`.~g=gLT:x"q j F4r EqD| iOsYO #u |d,ANm?:7 8iQH[?Mdqwe9,crDw#k4YRrcULYg<woT~ -t*]QLJP3lZbQ}*-I2-0-jcj_s&JR%<Jr{ y DW@Z0`R!0m7e7Q|K?My.9%/\d/k^- qH fm U>r["u6*>bK GIh,mpZ\9YU@?*/  y^n@]xy3PPjm a" u5DSTf dCKaM-{3_Aj1:l$Us/I brHf| Xt\Eh$)k7x  BN 2T O=&*0Wz8m?/F\vCioys.m7?DL 0 j  Rt ?rKBk &,'% ^-@]$MbT$ \B~/?pQft GoaZ`iry8/Ki xn  *%EJ6|B  ; sI&>G >b 92pue-K!qgs$ZC wpz4U)q,>0 ~f.\riiE=ib{w (yv tU[DSQYps(&dbjzRkmTLj(7ba59s # $n T   7]HdM.Wwc]dq 'yH6|'L(4 0 & P 3;t}{pX~R~IbKVG))H+,/!jiXQ 3J2g0 'GWqa'c iXpe4bj.Q~p;tXR1RmyL]$&.N:w>Q5DFs J|oStW fz]=npN3t8lNirkHP1}#:xDVgM#l&>?r-  [ I-! o={(1whg]ujI>8whBO.}`k3.Xm%%T`W *u} El?f>3NSr{ F&nv'l8kEfqtab`ubx9siIC 8 a p\PF_ oT3AF6U+<`*Y ieU.s_[LA"k1W1Nw:%V~dO2(s s\f]{M@TX8[w DO5lf"H?`?.7Y@,6B2vp=y[WrkJ t _6jH z-l^?egc'* <e4yQ}piNA%t]`n <;B\(/NC[@W) Lp+66NzN8 ~7hB%&wNeDoaYo{hNko|<;><.9TqNi=%(\1~np[E?k R?OtiZ+J )9cZ{  'cs6^^ VnIa5 HqN)MCUz1T}7{@GVt}%7YurW3 cTZ"pk*Al?y/%g . zAUeWs*/.f. F4 j,  =br(>3%7b~+BJ~v4#ZMEs F_t}K09R5v  qU&J\HINFD;j+=+ jJMZW03~7M:|4gd'dKyc@_uTiM] ;f? &n:D}\,ukevil_;m6tefM' CU M  0jE{uJc_1PA%9`\O\ CZkOGM@H-o! $8vK$@1?mMSxF6 q X<N7Nwt w|L ? OEm>!_pd."fbZTL{MetH,V({r(ag1rR$a(<W9|c',:`pn.E@)'GVps:1XS~:[.ww>{1?`:*p@Ub$6hrFB[5MM4\Njtg?>Yc:J RP:S-3 0 )\+` CI pYMhkb!l+'g$.&HB0GUhAoK;=9jV`c=t&=#P]To +'}/fH{%9 6m2rH7Dy'M"daYbs}GFTg"Xk yqM7dZa/VOb4K(2`,(lbyc:MK5dW8X+v|)&k? f;3S^iD!!8w4?J3hAU`Oi_k $*+r1?T dW5? J{#(pQ7bU\E6 QANFU,] 79ZU::O-e'?A kA9H #  oL@]\Bq@K\$0;I)V^a>;&,ogh0p"` AV Kn#.j:k&}1nZ4w|7;WcDGa8sN3h] z8(|h$$mW,=_S :0m9Ufa!H(fVm$*g* DC%IO>z(jJNHDHH/'LG6haEiI(dJjren W}#syOHEvJ04a$<DC3&-;`Ha&9 L.Ga J BZPTK%tb+ ;hot)7c,p=sKQuNE$ `q5G1S##Y&p7}<S!DyexO:W5}nI,dP!~+ _zfy-\%cj0>.%4^ !/1LW1gfJ;+;q .{if5v~k?ZXzV@zHV(8M.3l)/UnbwZQ[/wqa+m-,qugG .,=BCDhN^.?!mKu sk$m!-[gI~ hdEdQ1e7qlP8?aVMpi_Oy0Wx^_Szlw (927jx#Z8%~?$&a`V6[^e&5p|&!*J~kwPp1,$8/*O8>OhhoViGW9 I0$vpbjofhQ(2j&b2wm r~Zh"/`^qsABgUML?!8 +VMJkSn vHW7Y'_jQFfXt"f& F<6ELkUe-[em\hF->K-kX,7oYOy{{lS>\&nf?h>Uyivq|}bvn*<o0u Cwa @UHFHLt"13[4w`L>].z}[=YlHIWN#a;5jLD}937:RwB2#!;4W_rH+3,3yH9* O&R|g5`_7!^bO| K6Raw*\Uur- B7QJ$k1Hw,8YS"rZ_gW&icw?6 ]gp$VVZV| S@ge'%_S,"Pj1?E#YT%T{5#[* WSQoj^[D0r,;<?,p%G-9! (vI4rV8sa$V 7Xp4&sShkMWM74-rNB{AM :/xwU@/9hyNNIX  _-X m '2dw:|,_%svt.FJ@Je,bY>lec>k^crkLdtftPz#u4@0jDq;{blewcy,"Df4>nmnS6}^QkJ4m[!I{0rHH(*:7m6h1D"j\} >I3+!9$;E|/sulo|e?CO5t>A4uIZx}# *jzu3Mt19 n`Ty`+!1|8v ^hILhiS H}<u{gR B@sa1gOf8}?Y&MM lRJ\E~14B[$\J'gLDc<}dg.jI\|WNX5"<%lI NVnX=b.* y%pZu"I[["OpLNf3[Jjc@W1{TrUN]m>3!] @WOg+c0XiEqW^TL_ F'L;Vh, bxWN9 %:9'zKe1| ?Q !&%f-z'Q;P$BDYv[vE{,? kD(<_f_kYJRwJ<lu d;QoPd*?h~V @.n)MD5}fJ E8W,.Qh.Ve @0 2%R-fE.i8P2)-Z=+htDI A{;-G>XeB~J65!?"D/6YodhH3 {EXA?\FT7wQ;D1a3M>mEhb:+{Lj]XNY* zf8Gg\ "!#^b5'%{|>g Z,>9C6{BIz_i"JUm,;B YW}] yS*:\ tTF1&U Ch`r|}2{G d8Q~3\X;#r8~7d==7hB)WX^">9ZNN#TBc#8s{x '(h<2rA |'/E={FFyBA A[tIX3avp>1|Gq!vRqh?N)?|"~3])l@|HH $] b%;Ty{)]K0DB2GWG40B?7A7f"jop]1Z!8C\|,yOukXrN^L42/oypBm^1'39jS98a kU2 /H'=`G423hp;=)Recm t5S$lFH qjA1 c5-[3u{8Z<dAS8P:_Bc=<^5F!rj+S/B*Bh@ M<x2dt}gP[%0?!6 ) U"n5 \6b{!/mfH0xfElC+ N (? pHC8v<U7G=zG2MLj@<^i43,Zy & 1F'y<$MhI,Z' Iv}s<n=g{GUBdr%rwM|#DeV ~/cSS))<@4-VD<,ex]BGW{KVfdgt[(&m[iHLA}:S-~ j9 SScDE9  "H%U 8mOEZ|$iv*,c#1y,AQsEP 'Sx1q*y("P10i)9<?p ~{|G< nG>FrygEZ]9b`#hE:=\;w0rp|Q%Tto#<#oXN,l{;.%&4Ni+z3}`".oWhmQ8&Sq%-.fS~axZ~ SPwlCW{-;lQc!R]"_'gPLq#sc`eC!6kv46r8 ;>@*\]eq!ywdU&.R :WtR"-]uILa bV|j?L0OEMmp#}qP"07VY`<LAWHL+c)g Vrkys k[LeK'KD:@'NG>/J01[/6f}XJ1>l0qBu2_"  :T# ")`5a vM6X Zh\&k%](k`rIy+rpoG$*Q3 .{bS1\ DBS;HSxj017Oh&+b~c;6LDk[Gy08C,U{K& )UGU|vj>[IZ\3u'$q@}L@u3ddi}rV:#,wwW\X(8ttTa`kW9I@>\;6v8IQ$RZ]&8-;of pFe5L|5S  v97M +~M?LTlLK_- v&/cU^POO|53Ex  c`pj 'KNEvY^BPHvsr<6XrK~z< *flW("0yv=`zsX>8G /W1#(_="~TOgxRsgE8\T)z)]KH~}aEA1Bo&V0_k(HEP){'N""PTP&|8=TKC[HM=bz\t gT'CxnJRgj6]|A@*GdqLt>l ~HB"x#.bosg"\)=7\%n }[f__Czm\P4ooWtfRB QM5_H lF7JM&;>r:#QH{"d,%p>vxcc[d[ :cl!b .!{;$G$\TeiI~&[6A@B;K(]P|9:l#xdPcC/F0Wm{DZB%:*-#Z-R`5-;:C`,%"Vwy}aVw{n7GL`MLXC4k9 M]&ztG6E1=l4c&Se#KhO8"!B .n Jaj&h}0Pp0Q ,TdfM@r=x=4^[)#fLHL3?>jMh^~_rZdj|p*o(zHX~8M<s`L+"Go!IJXD,-:zsx1L,tAIF?'py$@a.;{LDOvU]!74!h/8=<] z\(oD"y|Litc1 VUYndpi-InR|4LiYGx<:t?XwBD^<_;+roR }j+ W_gX*%W.O0s^T5_[~)<q^nN 0C6YkfgRF<?GSCC%w9U&5kx qU&n|=eLk{J#'P%MD1$bu-/ /i;N[]gAVD(flMRG#E'&-Zm^v.2UeZ~9% n-2g,@YJN  [1|;>WV2Rm_T*263<OK{Jw2/KY*1SwhP'q}]Vgx8Je(T[L_*`h}jl!@XzjyUCYHMjRZ'XJz$cEAiQT}dF,m) S{iFc\RQ[^B/s0)t<+eX$SvAdl8]E*F#0gW\>Z-Y-LibJU6 0s8+B.}Tolr1oCd Dqj."(D i:>,gF4Ja~{)>sMYFj 6TewDt#DcI=gt%|=ub,$Uhd5pbN3V"@0]Wz7.&Y@*k-O2c"9oKyF(i*>t&BlAl%)_30 B*eXRTX%Ity,%S(a#8M:M#n-I!Xv/ L WFV -I`oEC 8ZOCS=]ft,NU:E_s1%mH.IK_R`#q LdKpFSrE!G>uw;_ d`}<K;/bi6N=Ro)Z(y1}AT1'G`eJ${:laSBD88j")N^?XJM]%!}}CQ/Hx?mLI[zNtKL1-?kFXCD"JR+=FyU- x^\[ O8OG0t HmM 'y[ $+OE@Jo:eh V6j'{$=kAmz[QG%d[ >XU*c/cyN'It?9lGLk^aKpJnKm[&6zOTy^]OB;j5EVwt/BpQzCIDj't\sIzVpK ON6)a:)9PzX gX|0kKxX ;1p+;Dk;WX]1Q7[9+(3b$>7Rpd&o{ mrHr d~s^gd!-9O|`S *B. O8$DK!sa X%n2o<F 2g1]aaxOEK&C]u Olp~3[ifTUc Sg1P:-%t8/G?K2 *zLf_ZYuR3j:r(\sV ;_%?kpXYqN b0iR>|7WYgh+}SN=87H1U[';`_$H3FItN3$z<kHe4:T+E@&f;a0x mP~$pAy` hzH_W/GD|a}ZVJ3l@1[D}B-fIs<b`{AUlpZ7SjWvF/zO$ TZ$#(I"%|j}"fC0+.M*{4}$fP,WXalaNhs{IQ! NG/\Elh:s\|TzpzLP*?"T" T1Q f-LW>#i.~"<TQLg sy,2$rmLngXsfZhZ/8?JZ#r_h9av B`BU3KKlZg!]5Akm\=,W0N$Nul}"A]@#{lNwu7&;g_jTaO 4dx_#pqNLrEs]0J ):4:OT[aX ^D$X =}yl8X&M <p :BwK,8L;F^0Wx[yzte8k2Vg8qS1.=stc3eObFG ^Hq   YQ.*`'?s3y~<?BoU dBC+b96,#3%REP{!*;Xbz9"Xo 8b>TJxz^Ka4Sh+I^OH2|*Xw {f8UPS;K 6)y}!:~6jsq aR<?^;rJ$l=L$A 41<{?i o[`$!37c25(Z)ft }nww}vaS ?sJlQIBy-:arQ|3R(n.7yd%Pll+  rYrrt+ Yq :Buv.=kw"TI1tH >}R:k[y1 *hmrN&rRwD%CHye jWK3V*pl S(iPY'jVziKd2hQMw:@Ub5|B,ZTEKlS{OQONnH&6KiBI>gGDba KR4O T`?a!H8#2<E1TMeM||:p ]3os<X{srhG+U6tcO d) Tj }Z'"Mdh.Q!%1eP:P]jXIke)4 =.W~NHAR. ;LUg13,E %Ey >RJ&ED"z7}x /O|R `"53w[@&9T44hl*'o?<.jp{& Kz$:@/7W1iq? Nx9=foh<p?g%QBR1r|mbQ0Q0At|x=jHyMeX87suNG S Qv:q'b(]]KhV \m`!-wYU4o|X,6? -b* Ckx~YagFm}YMQ2W^AGB#n+0N~e\'%AE:`+/=D na)L8Y,R[F'^ e)z/QBdA!M$L~$I@/ lTiU]YQ`!mM?Ya)%@7_B@^X$F"~pIrB'CoM}%APn %wa?{4^ $H14I\0N0z1QX2P r<"VMO iMG9fhF4a2{#7KMt<"qBHpM&  hs?= [BV\c8O G6$ V?ML"FtVl7 %$$xsw.+Qd(&=HJiwMov, +<q@1Z\7]2) sx 8-^:v/xXOga<O%7X=L_[=Um_7n0G$Ww9tTepL\{I,qO-vuobLe% dt}j4})PwS =>zVw@{4t_Mx irIHs0-IHM)=h_^G8~UY\Ni_ }I85kA:RzFOehr@uf`~cC [S 9SsQ0N v+JxTohb2QlHgI;d8q Wa w 9vce| $Gi o[gyD7lXc@l/IZB 4`/obk("4qUy +^cB6r{*N:Im  L}Jt :*+ qRxScX|PC (sKATPed'`L~Q+S G +F_(Jkt85kEKnEJQbXQOwD M^(ABTY_&n:OCv G?q?,dat,rv2-\n2cmiBi~y"}+ fY2su' mmtDln<:c^e|) E"4vz]<TY-i4Fd_yDBF P:#)Dl0q]@:W` "#yHj+9Zwq0/@p" ~M~aNYZ9:hfn3";4{}^1A{jYww-";VMCN's"~]zA#V'(fG#:(@L aBGj2p2182( 6%/aMy7T [f_ qt1M,ys  '10q%W3|E =GTssU/u*|*!Xi7CI_MALM_*j:2J@}G=T`|B1:M /qtb+lca#nO&"F:ikQx7HBN4mnVUfkf9lE~KERb"w9<Z RGA5Ne 'L0vUvS9;rm}=jfjEtHT+pI9[91ZbmW&]&M'n5j4l c=9M,  A|[c=}3}]x >w|N`e`EP6 1RAHe1vh22* MFT36y#C{;AZlP;e?O}+p5 aZA^6{yB-j@-K 4|K/&5x#.*Y1B@VZW(M brB`en3olu{gh0K(D7?P5IH&%PG3rt848 Wg{GJ|Aek*,"[k0kx5XXP[/iB^j#|!}Hwvx1"X$3)>8~kj|K #"kDj+Nij== "xW]U + Ycizi^%S5DqSh$ A&9[-It@U"qrZ_b{^q["T,QA-C8S~T >c"ua|qOAxyI/Zdvi`*#LjS-A)yU3[^<J`H}2^:4C$,VfJ#>C/}YT.R*W* ?),[[2/T(C.):OF_234rKwzTw !Y:J.fZl*M~lQv5:e j*Hb;A%tWOR^'h T!]y~tuawAx 'k|N_. (% FhYW:Lk\mSJAuCn|42KE'0_]#Djo =+xw^ugo><S) fjo@A~s- Y""IP)RV_ 1( "oB`.amD#A>-.Zs#liqPy'!\:c/,*=MeOG KIh8u5FD$bzMIw5Pf}t4?;AiegO`h?Y%o*rZq!2VyQ4e#-a\KX] oGb4yI9JH2 %s  LJLjyS$ HUYn ".1M>^*0u>0Ly)/kFNO&E`q_8SFR tR(ofct}BE8uvzwhG/6?wOF,=7#5+h0iR">Ep~7  uhnLMJ2p\Bv%rjBx9PB$=0twX0BA}9Jt ]hY *?9!8`2^_K*)A eXYcz-oxV@Va%2T)zQw0yZn >>)Q6SR<Y->O*+l}}xU?p;W\_P%ke>? ?4*[Knc}^2,VyG7MRIX N5sKAN,_|FenQeSQAMQAE)%K?*9gD P&PB({{9  $ gV+)`P#5mNPvGvLRbXuR X AnS0eNj^ul< '=0:JOX7@JC J!^sw?PRdkpD8W8SG]EA3C,XyqMV!q/NrKp}{I|USFU|Y!e-MJ1[qa$pJ8|.~fxM\LMnOT R/ Q[-y{3a5wZ, %Nd xLl E9U/`.#Cs1F7s {nQhPc< Z$33R2x~3%1tg5u ]HGlF/dHa;KYv}>FM(6!(.!D^^ .s S5U(4c6jwEfq4|vG8vJt-Vggka{Wc {S10x.0 u=i(%9xh"a,(8@q&3 b,[Zs?p~)/DPKzrn;<&%<34$/OizcA" {6`@} \NTfj / ;R&d !BlehN(bcVF[#YYkmN$qCX<vpmPvb0%ygHdE_qGO ya=uJ]_csTxV( .0v5M8\vASK9AmY/t Ke pS9h?j=DoOan$p#COC'7\cZ4<!_j;}i(KeJ.`Y+$hxQTSG_ /@SLq1K.`#|IDD1=T+&"DI b{u]qQ\'OPwgz2 ?Z.BB  '&zfc$w4*<M$[&wcDMHQM"O%~y, {}8% ,%j^$+.mJq'j'8A2F#CXp)}+AaJ:`dKNO`XtE#Y<@sTue^aV/U+`H|,=<qpv<^\YXywC)VnvjUN;yioytf>X =HP<[`. l>bzjsXs}GUJBdp[j ) d~x}lZ  S;62#PEf4h8]R5DJ*&G_o/k .3XG\jC3 #<)D=A1*N0l$o(l)YSC\Ckd^w.flk6&z~y*rby [Gq-v |nrJWktF$`[aGV8 Tfqwm>|<_R{K"$3+S{Xi@JSHQ]u7Eqnw3 3'9|pTP F/ -0&T2=K~W]?P"T:\(dd[GLN KD.U>4[ylp|muhbudgJTS 0KZ89rJ 3H fc yc DJ9Q,e%Aq)!40P^V%!t B%1YBKNiy|uI];*J! !@:.p|`nn/ -^56 I~i&[bop3T_!EUB&)<T@77ycE ,#:b5["@ :bkKfV*K2VL+0Mu7#32=/&{puD1I+[Q" i  gHD4+J/0+;t JL),Xn+B=F#F91v,(  ^P=o`;/nSLhM&l%oV{rYW*3+_Z $Ny|jiOA D/dGi[@,y<~f=/M^VeYY^Ag|'uV;vgxkQ9/;" UY<&9%?pSed_ fCo<R= [Y$YNVrntwt\ExIt]$nYg"2# VSF+2H@8!B"8?1K(=N4wS;d?dE7+8EW_byHu*l:>JWX]ROFcnttvQBt$CUU&) k1k9!mD (2LLGV|6k\/au:H#%)R,>LzP!?}psnr9G4>b{IW=81#+M+=|h, ymgk # r]!+ \RMThjOKF1>U!9>'+- 2-M&m MdU>F>3'",yAZF ;b("oU_$ajym)!,"$bZ &1=FKMk}ko\cE?]?r]}dZU++9,"~ujy7'6G [A (M,!)|o }>kbR~;\R&[@Dq ;?L6]eda%cWQ"lY&$(f5i@>h0(8;#-)<=VA iPV ,-7H K.CCJn>}a,{};LG'5kq{ZGH Xe"nS? N$Olpmb y >_O+<0C'"$L0]Cu;73LH$1;?r<m,T$dv'[AQRQO@# 0 pw9AZ0 [JA#|0-LNCXov>lq*AW\**i=9 QS=?N@(%j?LK-zphyD3 Y2~zdwym i)5{lh4 x/HkDq^a{noME=Z YK'9`wl:@Vnbwplky` ;mkKI.EL7LUak^I'?U-^XMbKJ#QNx'(J%*' 2zARYDx~nN 6DOjsk/ `@^W:!&:f%D- E<G@W`d|m[RWvdFfp]~nsrn /-').[mut9zt|mX"h@n.>0(~ yF:X|GQ-5a:4M7!s&|x ;i=,H$%i-$.=Q8?U58\&ki]5\STazt7aju|,M*wRJyz 3D"1*YLEj+| l/vq Q7\NO j`>#rV>+BHiamES==j!n*_Y{7~K+X3bfs|~<J&,83 =!f ziJ9-+M4,<?A0 FrY*~gQ^MYreTG6;>:4as[7+ v==?*mcO7RHR;,;*KZ7A  L/o\X"1"_[ [[5H>!m.Z)eX41-NV5;-hS '83L(dQMd*"a pgm>,\WK>ZR9:#=S*T72CWpz!'CQ:7 5"(5;b0U"Y<RmvoaB %"/I T$80XJZREG1K^,w[fNoG5V;D ti, ? }i9+ OzC68$-2/$HJ$3PS&e`5 'c[m#J2:w2 !+$:_on+X"K [U^P:I-0=P/Z@2"?'(2# {V7]A[e2@3NyR>!{&|"{i+t/Ut}ujUc!o#[GQIBoS- Hd.n_Xuqo3t~c|T=4A{)7,[\C2^TLkDLrFZ0L7[ObrWNudN7y5-O=2mpg*!#o Olzsn&~BTu4BueK3\eTw* #z\tzK`;5F Z+k>)T|bQ3 ;PUulz\/!@&)L ^)]]$kAU/<\zZ$=#    9Mt 2tXlPM0TO E&+&9rta`aSuAx.($"8\L9(YUunGW n|~=FEP@2Wx^VO %2W68! 6 (C4>/[xoU\Hc-pP %(DWZOQU;3EO1_"_jdK?U^^A r{&3)Xd%* 6?/2;Qaf+ "4l&1wEFB G%Q# n`l0{$"!,M0E#9.W42$%+<y9e=:DWGh:gHafh@}yUD 7*IVE?$&ABc^NhdD+- " GFgXCo*X1"%!My#N\dM0&=,;++$ [uuGmgTDSR704>L0;L*d/x@kHIF4NEVq5v\M,;>&K)}#BS pNuzLfr/ ''K0'! +}! K]dX09EB\O64,NRnq+}LkZ- %E='0 C$^!R1- K H@BSj&{>}9a&w+Z#KILA2', }s$$QE=4JG@_(IK@+6":&91aq 5E& ?z{G - j<oJ )*9;/vZIW 2a Y0N6"*#A C'/Z<rRt0 >&#\zdL7!!@0J3*7T}v+~*T`? ![SbC=:MG:9C,D-]K~i: {'i.`(~"^#WBXZef}liWJSP3 f N=: +>A!sixuyG53 + !i+L-3OSgBF; *-?* M%VIFZ3i ;-|TO\vwf,%FSb'v'k%oRly1oZ6 ;%-)168$#*c/b/} S (ko.bGvTn-c'>-; l`DXZBX@?>8Q5:AGT=  - ;240B`5 :E/ refgrq]`K%3j<qh;'raNQl~5G*+4,!! $pGiJ3?-UH_PtBs9D%AmY5WCk}+@#v%{tscaC}/;AKQ iu[s?]Vw urj3`hsbm.L' ,;A KA5* 2*lLG=P"E;T~l6; L(RH#F Q fP2!2cSigg\Np !% );8G03;Z\vw5kjw~GB$-(2jJKY.da^T " 0(<P-6?<4 ,@;7FI  *& p]O>%7,3/.M?063Soof0X#B6\3l2^`qqL #-*#)'M+b0](Z; [G|7&Q^1 ,=Zkfkvl!`l'@s3T8$6N_iS(Cjp#vmHyS14)$!BVS\ig`e_2'*  |lpBD.:* $ $ ' '+3 ) 6 Q J2( 0& {7! *$+NB""1IT8@^^1',RN8%,4>90,$2VL5-BL[lZfC^-V#X'a<ZVFu'r?>[-]*8  1L_W M f)P:B>.6Tl1gBP=30 1 ;GTm{|wpjv}kVs6/u!6W)I>Tq\jfR8& ~p{w\'M!MM0-[%rDg mlp.yNpAk>c=F=O>[ C?QR g&,  $>*+8 %\'p?r5/SGz maSr~o4z]teKD91Q*c`rog ]?8@AYl*\kDtC^RVQ`Z`}/lfqpZ]Y55I,#*?L.* *,H^U65GBvfaiw}oj`i ?"[C $  -<[WovmemeE[H.% 5(3AARwxM4Gij<F`C 8OloVB`S <@0?M4) &H H! &-H\X(PCo !}3.DL0BKAITdgN,6PY[L6*2HQKG8 $,9Q\W< " 2e |TJZheT[ v p>%  &)!/57.6! $+3%0! -=7/=SB3<6';K8&(4GYWVS4}vz|4G6&,-&~7|RqG4# =4 9^_h~ -/0e4K1#  %$036;1U!T 83') 1437<BJ@Qxrsh2$.0J\zOlVNl;p3vC[xW7DQ@ -  5,#,) FyY' -!$30- ' $!)6BUcrrA*X/ljZWsq]UJ?9%& 0&_{e>GZVP`jYSUXXN?CQke&!#9# 84|n_SP*[<w=B=% 46,/- #*2'-BGIFCBB:4EWWD6PL~WOYjutlr`pR|/5L\p{bh/ghcP@<5"  8A:/("1T_P>,  3A>;5+  !%4/# +>RV [!W5<,6DF ?IWcU<8%5ZB{`_d`8\TODJ[baW>*,B2(1/! /7$  %@agTC,vx & % 1G^kwmX#X0e.dWY qw*\8]*y|d@, % C`2XG/Ylv !(|"g]U+PGEO7:%.77 0,,:D>BK]eYN:,0;XtpfehwhN<&)~0>$ !9@DVif^`P2#".D>3-&()/)Q5l?b:= $!0Z"i[SXU%V1Q0G!A:=E OTWcj%e1f"k liVJ)@;/E*A<8U+Y)9.(5-Eczvf_WA/" uy   %)+.>=.;\`P Wi)m6a>YOX_BR;3W!j_OIV[NINC,!%*545W#d%Z(ati IC[g*d5c#hq"f(Y$NM\ZatlH( >NE<0!+3>HH5pj #!   +/0<1  *'CD:85,!#;D/!490$*+   0,"-#2==\GgTba\W^:d%K 30<6M7T2S#Q$Q)GKO41<,!' $2,'   79 "289;O\]jwnUSV5   #$ (5/03K>Y9q5v@U6:-> W"W4A4:0<-8%: *$6HL0v| "!0::.$-26. &" &4AADXep{}nhd[>[BmAVYH72{>sCd.[ZV#D$6"62:?9;7+?$A*  & !&-/      #7=? @0%/+4 1-34,-6+4 ) &) .G.]S :,8K VW]fV9  '"+!  '2&)'  % '*>NE88+!  +  $'G\>& $-71," # +%@3X6]1V8bE|NSLr>Y7?/;$A$I!S"_*d*j&a';&($   $"&(.7, %2/&%' &(93</1*.'($&42N;P6;5448*<(9286F-S+V2_ApLyMOF;?FPqN`E\E_JSKKI:?"<CLPK!=>LQK7'%&-'"08/*-00,#  y}(<GA>HTSB741% ")68 .!)$(##-53(-.,13" % .,)1>HMB'"0>A@HVULGXeheK @NTC3&      %+)/3*&ARX ` ip)r*o$yybL!F.I1>2*B#J*;)6*@,E.C%;2-0:FE BCC&L#TQ G(9/1/&,36 *       *393/797<DA5.*( !% "*/,%  )!:;2(71=&CHR^WH6"&)!$"  $ 10' #  () '9DIHC?K] a\]!cZ A0-.'   *+).+&-!"/'#&"  ' &    $ ,.*/207B?::5,*&$2L_nz{zpinz{dO>35330"  $ * 1 654."# &!").75+     !#     "%$259: 7:3* )).6/:-:-811>*L(Z'^!T!H%KX] ] a`` XE6 ," % !          "'0/   -=B> 78%;#B?64@QOB BC 5 -/)  $"- (#)+  &5 2'!.6 ;90%    (       # )0+$% -(   *-$  )'" *  #'"(3;5&$! ""(20#"!   "!      !'),+  &- 0* #% '    "$#     ") & & ,1'10') $'     %    !"(/-& #.47766322387/(("  #:GGDA:3870&     "$ !*'         *-                  $    '"#/87-&#('' "(2(       #     #%!  #($  '#$($"#    '1310 3/, + &""(.!0&3+2.0--)*$!  $#% "          !     '&*+&$"$    !      %&!#%%  !''          &1 =DC?>942 1 / %   ') & & #"          "    $$          "   ).- 495 -,494,+0*                     !" #                )&#              #%" "                %#                 !"""                                                                                                                                                                                                         hydrogen-0.9.6-beta3/src/tests/data/pattern/000077500000000000000000000000001211146647700206715ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/tests/data/pattern/pat.h2pattern000066400000000000000000000142401211146647700233070ustar00rootroot00000000000000 GMkit 1 unknown 192 0 0 0.8 1 1 0 C0 -1 0 false 0 0 0.8 1 1 0 C0 -1 1 false 24 0 0.8 1 1 0 C0 -1 3 false 24 0 0.98 1 1 0 C0 -1 2 false 36 0 0.8 1 1 0 C0 -1 3 false 36 0 0.42 1 1 0 C0 -1 0 false 48 0 0.54 1 1 0 C0 -1 0 false 72 0 0.8 1 1 0 C0 -1 1 false 72 0 0.8 1 1 0 C0 -1 1 false 72 0 0.68 1 1 0 C0 -1 2 true 84 0 0.8 1 1 0 C0 -1 0 true 96 0 0.8 1 1 0 C0 -1 0 false 96 0 0.8 1 1 0 C0 -1 2 false 108 0 0.5 1 1 0 C0 -1 3 false 120 0 0.8 1 1 0 C0 -1 3 false 132 0 0.8 1 1 0 C0 -1 2 false 132 0 0.54 1 1 0 C0 -1 1 false 144 0 0.8 1 1 0 C0 -1 1 false 156 0 0.8 1 1 0 C0 -1 0 false 168 0 0.8 1 1 0 C0 -1 3 false 168 0 0.58 1 1 0 C0 -1 69 false 180 0 0.8 1 1 0 C0 -1 666 false hydrogen-0.9.6-beta3/src/tests/rubberband.cpp000066400000000000000000000121041211146647700211130ustar00rootroot00000000000000 #include "hydrogen/basics/sample.h" #include #ifdef H2CORE_HAVE_RUBBERBAND #include #define RUBBER_SAMPLE_PATH "/usr/local/share/hydrogen/data/drumkits/GMkit/cym_Jazz.flac" void rubberband_test( const QString& sample_path ) { int block_size = 1024; // set rubber band options int debug = 1; float pitch = 1.5946; float time_ratio = 1.83199; RubberBand::RubberBandStretcher::Options options = 131088; //RubberBand::RubberBandStretcher::DefaultOptions; // load a sample H2Core::Sample* sample = H2Core::Sample::load( sample_path ); if( sample==0 ) { ___ERRORLOG( QString( "unable to load %1" ).arg( sample_path ) ); return; } ___DEBUGLOG( QString( "input sample\n\tfilename\t: %1\n\tframes\t\t: %2\n\tsample rate\t: %3" ) .arg( sample->get_filename().toLocal8Bit().data() ) .arg( sample->get_frames() ) .arg( sample->get_sample_rate() ) ); sample->write( "/tmp/before.wav" ); // setup rubberband RubberBand::RubberBandStretcher* rubber = new RubberBand::RubberBandStretcher( sample->get_sample_rate(), 2, options, time_ratio, pitch ); rubber->setDebugLevel( debug ); rubber->setExpectedInputDuration( sample->get_frames() ); ___DEBUGLOG( QString( "rubberband options\n\tdebug\t\t: %1\n\toptions\t\t: %2\n\ttime ratio\t: %3\n\tpitch\t\t: %4" ).arg( debug ).arg( options ).arg( time_ratio ).arg( pitch ) ); ___DEBUGLOG( QString( "minimum sample required: %1" ).arg( rubber->getSamplesRequired() ) ); // study float* ibuf[2]; int studied = 0; ___DEBUGLOG( "Study ..." ); /* while( studied < sample->get_frames() ) { ibuf[0] = &sample->get_data_l()[studied]; ibuf[1] = &sample->get_data_r()[studied]; bool final = (studied + block_size >= sample->get_frames()); int ibs = (final ? (sample->get_frames()-studied) : block_size ); //___DEBUGLOG( QString(" ibs : %1").arg( ibs ) ); rubber->study( ibuf, ibs, final ); studied += ibs; if( final ) break; } */ studied = sample->get_frames(); ibuf[0] = sample->get_data_l(); ibuf[1] = sample->get_data_r(); rubber->study( ibuf, studied, true ); ___DEBUGLOG( QString("done.\n %1 frames studied.").arg( studied ) ); // buffers float* obuf[2]; int out_buffer_size = (int)(sample->get_frames()*time_ratio)+1000; float* out_data_l= new float[ out_buffer_size ]; float* out_data_r = new float[ out_buffer_size ]; int processed = 0; int retrieved = 0; int available = 0; int buffer_free = out_buffer_size; ___DEBUGLOG( "Process ..." ); /* while( processed < sample->get_frames() ) { ibuf[0] = &sample->get_data_l()[processed]; ibuf[1] = &sample->get_data_r()[processed]; bool final = (processed + block_size >= sample->get_frames()); int ibs = (final ? (sample->get_frames()-processed) : block_size ); //___DEBUGLOG( QString(" ibs : %1").arg( ibs ) ); rubber->process( ibuf, ibs, final ); processed += ibs; if( final ) break; // retrieve data while( (available=rubber->available())>0 && buffer_free>0 ) { obuf[0] = &out_data_l[retrieved]; obuf[1] = &out_data_r[retrieved]; //___DEBUGLOG( QString( " available frames %1" ).arg( available ) ); int n = rubber->retrieve( obuf, available); retrieved += n; buffer_free -= n; //___DEBUGLOG( QString( " recieved frames %1" ).arg( n ) ); } } */ processed = sample->get_frames(); ibuf[0] = sample->get_data_l(); ibuf[1] = sample->get_data_r(); rubber->process( ibuf, processed, true ); // retrive last frames while( (available=rubber->available())>0 && buffer_free>0 ) { obuf[0] = &out_data_l[retrieved]; obuf[1] = &out_data_r[retrieved]; //___DEBUGLOG( QString( " available frames %1" ).arg( available ) ); int n = rubber->retrieve( obuf, available); retrieved += n; buffer_free -= n; //___DEBUGLOG( QString( " recieved frames %1" ).arg( n ) ); } ___DEBUGLOG( QString( "done.\n %1 frames processed\n %2 frames retrieved [ %3 expected ]" ).arg( processed ).arg( retrieved ).arg( sample->get_frames()*time_ratio ) ); // final data buffers float* data_l = new float[ retrieved ]; float* data_r = new float[ retrieved ]; for( int i=0; iget_sample_rate(), data_l, data_r ); sample2->write( "/tmp/after.wav" ); // clean delete rubber; delete sample; delete sample2; delete out_data_l; delete out_data_r; } #else void rubberband_test( const QString& sample_path ) { ___ERRORLOG("RUBBERBAND LIBRARY NOT AVAILABLE"); } #endif hydrogen-0.9.6-beta3/src/tests/tests.cpp000066400000000000000000000016541211146647700201570ustar00rootroot00000000000000 #include "hydrogen/logger.h" #include "hydrogen/object.h" #include "hydrogen/helpers/filesystem.h" void rubberband_test( const QString& sample_path ); int xml_drumkit( int log_level ); int xml_pattern( int log_level ); int main( int argc, char* argv[] ) { int log_level = H2Core::Logger::Debug | H2Core::Logger::Info | H2Core::Logger::Warning | H2Core::Logger::Error; /* Logger */ H2Core::Logger* logger = H2Core::Logger::bootstrap( log_level ); /* Object */ H2Core::Object::bootstrap( logger, logger->should_log( H2Core::Logger::Debug ) ); /* Filesystem */ H2Core::Filesystem::bootstrap( logger, "./data" ); H2Core::Filesystem::info(); H2Core::Filesystem::rm( H2Core::Filesystem::tmp_dir(), true ); rubberband_test( H2Core::Filesystem::drumkit_path_search( "GMkit" )+"/cym_Jazz.flac" ); xml_drumkit( log_level ); xml_pattern( log_level ); delete logger; return EXIT_SUCCESS; } hydrogen-0.9.6-beta3/src/tests/xml.cpp000066400000000000000000000107601211146647700176130ustar00rootroot00000000000000 #include #include #include #include #include #include #include #include #define BASE_DIR "./src/tests/data" static void spec( bool cond, const char* msg ) { if( !cond ) { ___ERRORLOG( QString( " ** SPEC : %1" ).arg( msg ) ); sleep( 1 ); exit( EXIT_FAILURE ); } } static bool check_samples_data( H2Core::Drumkit* dk, bool loaded ) { int count = 0; H2Core::InstrumentList* instruments = dk->get_instruments(); for( int i=0; isize(); i++ ) { count++; H2Core::Instrument* instrument = ( *instruments )[i]; for ( int n = 0; n < MAX_LAYERS; n++ ) { H2Core::InstrumentLayer* layer = instrument->get_layer( n ); if( layer ) { H2Core::Sample* sample = layer->get_sample(); if( loaded ) { if( sample->get_data_l()==0 || sample->get_data_l()==0 ) return false; } else { if( sample->get_data_l()!=0 || sample->get_data_l()!=0 ) return false; } } } } return ( count==4 ); } int xml_drumkit( int log_level ) { QString dk_path = H2Core::Filesystem::tmp_dir()+"/dk0"; ___INFOLOG( "test xml drumkit validation, read and write" ); H2Core::Drumkit* dk0 = 0; H2Core::Drumkit* dk1 = 0; H2Core::Drumkit* dk2 = 0; // load without samples dk0 = H2Core::Drumkit::load( BASE_DIR"/drumkit" ); spec( dk0!=0, "dk0 should not be null" ); spec( dk0->samples_loaded()==false, "samples should NOT be loaded" ); spec( check_samples_data( dk0, false ), "sample data should be NULL" ); spec( dk0->get_instruments()->size()==4, "instruments size should be 4" ); //dk0->dump(); // manually load samples dk0->load_samples(); spec( dk0->samples_loaded()==true, "samples should be loaded" ); spec( check_samples_data( dk0, true ), "sample data should NOT be NULL" ); //dk0->dump(); // load with samples dk0 = H2Core::Drumkit::load( BASE_DIR"/drumkit", true ); spec( dk0!=0, "dk0 should not be null" ); spec( dk0->samples_loaded()==true, "samples should be loaded" ); spec( check_samples_data( dk0, true ), "sample data should NOT be NULL" ); //dk0->dump(); // unload samples dk0->unload_samples(); spec( dk0->samples_loaded()==false, "samples should NOT be loaded" ); spec( check_samples_data( dk0, false ), "sample data should be NULL" ); //dk0->dump(); // save drumkit elsewhere dk0->set_name( "dk0" ); spec( dk0->save( dk_path, false ), "should be able to save drumkit" ); spec( H2Core::Filesystem::file_readable( dk_path+"/drumkit.xml" ), "dk0/drumkit.xml should exists and be readable" ); spec( H2Core::Filesystem::file_readable( dk_path+"/crash.wav" ), "dk0/crash.wav should exists and be readable" ); spec( H2Core::Filesystem::file_readable( dk_path+"/hh.wav" ), "dk0/hh.wav should exists and be readable" ); spec( H2Core::Filesystem::file_readable( dk_path+"/kick.wav" ), "dk0/kick.wav should exists and be readable" ); spec( H2Core::Filesystem::file_readable( dk_path+"/snare.wav" ), "dk0/snare.wav should exists and be readable" ); // load file dk1 = H2Core::Drumkit::load_file( dk_path+"/drumkit.xml" ); spec( dk1!=0, "should be able to reload drumkit" ); //dk1->dump(); // copy constructor dk2 = new H2Core::Drumkit( dk1 ); dk2->set_name( "COPY" ); spec( dk2!=0, "should be able to copy a drumkit" ); // save file spec( dk2->save_file( dk_path+"/drumkit.xml", true ), "should be able to save drumkit xml file" );; delete dk0; delete dk1; delete dk2; return EXIT_SUCCESS; } int xml_pattern( int log_level ) { QString pat_path = H2Core::Filesystem::tmp_dir()+"/pat"; ___INFOLOG( "test xml drumkit validation, read and write" ); H2Core::Pattern* pat0 = 0; H2Core::Drumkit* dk0 = 0; H2Core::InstrumentList* instruments = 0; dk0 = H2Core::Drumkit::load( BASE_DIR"/drumkit" ); spec( dk0!=0, "dk0 should not be null" ); instruments = dk0->get_instruments(); spec( instruments->size()==4, "instruments size should be 4" ); pat0 = H2Core::Pattern::load_file( BASE_DIR"/pattern/pat.h2pattern", instruments ); pat0->save_file( pat_path ); delete pat0; delete dk0; return EXIT_SUCCESS; } hydrogen-0.9.6-beta3/src/www/000077500000000000000000000000001211146647700157655ustar00rootroot00000000000000hydrogen-0.9.6-beta3/src/www/hydrogen.php000066400000000000000000000103511211146647700203150ustar00rootroot00000000000000\n"; print "\n"; /* Start of song listing */ $dir = "./"; if ($dh = opendir( $dir )) { while (( $file = readdir($dh) ) !== false) { $extension = array_pop( explode(".", $file) ); if( $extension == "h2song" ) { print "\t\n"; $content = file( $dir.$file ); $xml = join( " ",$content ); print "\t\t" . getTag( $xml , "" ) . "\n"; print "\t\t" . $url.$file ."\n"; print "\t\t" . getTag( $xml , "" ) . "\n"; print "\t\t" . getTag( $xml , "" ) . "\n"; print "\t\n"; } } closedir( $dh ); } /* End of song listing */ /* Start of pattern listing */ $dir = "./"; if ($dh = opendir( $dir )) { while ( ( $file = readdir( $dh ) ) !== false ) { $extension = array_pop(explode( ".", $file )); if( $extension == "h2pattern" ) { $content = file( $dir.$file ); $xml = join( " " , $content ); print "\t\n"; print "\t\t" . getTag( $xml , "" ) . "\n"; print "\t\t" . $url.$file ."\n"; print "\t\n"; } } closedir( $dh ); } /* End of pattern listing */ /* Start of drumkit listing */ $dir = "./"; if ($dh = opendir( $dir ) ) { while ( ( $file = readdir( $dh ) ) !== false) { $extension = array_pop( explode( ".", $file ) ); if( $extension == "h2drumkit" ) { $content = file( $dir.$file ); $xml = join( " " , $content ); print "\t\n"; //name: filename without extension $name = basename( $file,".h2drumkit" ); If( ISSET( $drumkit_list[ $name ]) ){ $author = $drumkit_list[ $name ][ "author" ]; $info = $drumkit_list[ $name ][ "info" ]; } print "\t\t $name \n"; print "\t\t" . $url.$file ."\n"; print "\t\t$author\n"; print "\t\t$info\n"; print "\t\n"; } } closedir( $dh ); } /* End of pattern listing */ print "\n"; ?> hydrogen-0.9.6-beta3/src/www/metaInfo.inc000066400000000000000000000002601211146647700202200ustar00rootroot00000000000000hydrogen-0.9.6-beta3/todo_jeremyz000066400000000000000000000017431211146647700170140ustar00rootroot00000000000000 core classes : - Logger done - Object done basics classes : - ADSR done - Note done - Sample done - InstrumentLayer done - Instrument done - InstrumentList done - Drumkit done - Pattern - PatternList - Song remove old classes : - LocalFileMng - SoundLibrary rework : - Preferences rework GUI : - use new InstrumentList capabilities - SampleEditor - use only SampleLayer index as constructor parameter - __sample = Sample::load( path ) - __current = Sample::load( path, loops, rubber, velocity, pan ); - add reset butto(s) - must update sample view when finished - compute rubberband parameters, see Rubberband declaration in sample.h - compute velocity and pan envelope, see apply_velocity and apply_pan in sample.cpp fix : src/gui/src/SampleEditor/SampleEditor_UI.ui: Warning: Z-order assignment: 'horizontalSpacer[_2]' is not a valid widget hydrogen-0.9.6-beta3/todo_undo_implementation000066400000000000000000000046331211146647700214020ustar00rootroot00000000000000commands which needs undo/redo support SongEditor: + Add/remove pattern to sequence | done + Move pattern list item by drag and drop | done + Move patternlist item by clicking up/down buttons | done + Clear full pattern sequence | done + Delete pattern from list | done + Copy pattern | done + Edit pattern properties | done + Load Pattern from context menu | done + Drag and drop pattern from library to pattern list | done + Fill/delete pattern sequence | done + Edit virtual Pattern | ---- + Move selection (pattern sequence) | done + Copy and move selection (pattern sequence) | done Time Line: + Edit timeline tempo | done + Edit timeline tags | done Pattern- & Piano Roll-Editor: + Add/Remove note Pattern Editor | Done + Add/Remove noteoff note Pattern Editor | Done + Edit note length Pattern Editor (right cklicking) | Done + Add/Remove note Piano Roll Editor | Done + Add/Remove noteoff note Piano Roll Editor | Done + Add/Remove note via Midi | Done + Destructive recording (Delete Notes) | Done + Edit note length Piano Roll Editor (right cklicking) | Done + Edit velocity Piano Roll Editor | Done + Edit pan Piano Roll Editor | Done + Edit lead lag Piano Roll Editor | Done + Context delete notes | Done + Context menu fill notes | Done + Context menu random velocity | Done + Drag and drop instruments order | Done + Context menu Delete instrument | Done + Drag and drop intrument from library | Done + Main menu Add instrument | Done Note properties ruler: + Edit velocity | Done + Edit pan | Done + Edit lead lag | Done + Edit note key | Done Mixer: hydrogen-0.9.6-beta3/tools/000077500000000000000000000000001211146647700155125ustar00rootroot00000000000000hydrogen-0.9.6-beta3/tools/clean000077500000000000000000000001121211146647700165140ustar00rootroot00000000000000#! /bin/bash find . -name "*~" -o -name "*.orig" | xargs rm 2>/dev/null hydrogen-0.9.6-beta3/tools/reformat000077500000000000000000000005631211146647700172630ustar00rootroot00000000000000#! /bin/bash ASTYLEOPTS="-v \ --indent=spaces=4 \ --brackets=linux \ --pad-paren-in \ --indent-classes \ --indent-preprocessor \ --align-pointer=type \ --suffix=none \ --formatted " if [ $# -eq 0 ]; then echo "need at least one argument" && exit 1 fi CMD=$(which astyle) if [ "X${CMD}" != "X" ]; then $CMD $ASTYLEOPTS $@ fi

    'TpUiq Kdy$rh_~>߷FCbT42Ugq,a4Rl6՞;gaI{E+1VzHEISbTFY{!nRc=Reqy'?Ʈ7xQwxf)P1_:,PNKpS BEXT°p6֩qJJ,kZ5F H?NR_]k> WXX>}H>ٗY{cOf̼g#4a"0)WHqFz͓E܆WF!-Gǟ{,HOOyj^[GQ1gZU߼gxOJ< *Up&l6ݺO]Ʒƛa?lί=6-|Zo7&o+-}7mw3&6N<ti3N71=SR' 1ugNVkXeЁ87?˞rԿ8We7ڕF_nSn~ȣ[|"C~;odr޸rx 7h`fk?ٰ̳z˰7g%X}юe upoQ@Kf Ϻ9<1M\>3Lx㖓S8T[9"0ہ)Gn'r0B KTh0-Gwfk'gFfԂ{i?}R\(oߵ z +GE?}mnp0C1{oy_z] x1s a{-՘)NϼZE4a;-saY*vYaƤEӓ'M(s">_`ICZ>tq_w±~1WՉ*8WͿqxZwl9u$)%- 9-ez}͝=MNqBcJ`ϾJ( OR(TTcNJ9oybXxM5rD 7w(wgq 8Lΐۋw]`szH#ŬbYà78L^+uܜI R6:rPVfBn4Ks ZIt9}srV]fHZ Lj;ӵހg4c)Qc#"SnS0 5PwueСBw~6_GQ|]: "d-r߬=30?o\7 z]9?}7aW*L SG"J/r3M4ӫ9 rW2E"QT PdeٲBլT,Э4rcGj+^D"l\QU ޼6i{A K '5\eΡWL]^3x jmڢк*+KcXP*?>)FWs7,1l.u5К qj*5!9}Ӳ>ۼpR{^}9T齔L]A\Ƌ4Ew AX|ISM R6{aY'Ќh9k%Z-N5C p,Pq0$SI3gԘTَ&F]Xe ?ah2.ou9YYR5Uk  ԟkOqr2:2BXfg(N'v \j_WZαb>|*1m3ViXgeHHK yn!mkeώiaqCuYMMaJtЫĔӤqRb$VuUI&y&,˲޿KBXIF46aI2{]M3L)ұ6yBLV` eUVK`c-+[EIb S9$9LH%S(YUI_A g ,$1Uf, WAJӆFr:nl-^;jI$oWkxV4z[.ґ~C^~F=pB{,+-:P6{T9m4ni^lE7 /'#@|Blj8)7m1zCGw{BsmN;/-ibK#Ϝ>- >N,hjJ.hG H&Hr`߶'sׯfHPY^VUY*)u\n֜e|omQZ[Q]]mh6 oX7Y²^m[\j_F 7||?E>^]:7s@`]u{ӍU$AXz(o|ʷ\H.-2ï*?3_2 ~nVΦw3͛%\b04c]g`džZ 4M5W IDAT.M$?wz,K;G$% C.]m΁qxiIWqZm4<8) t:Ng0 Zԩ*뽏=YO%5̮J°%qir(ǘW<7$oE#W-[N(oa[ WM[Z*<3)uo/:P mp L>oBxyb ϡV~_yqL4P܋!7ho;PBx|D &pnh("3Ӝ>! P%JΙ$@Jk]ugw!_{.POspZxE"}z!5qTNY6;]Z/' lٓ p(􉄸Y7}({Lhw ] |ν~k25zYi݌od`3:oD`L1W+1to=rMw@Yig_SW": M;@.K~f$aJfHld#!1ue~^ @ŠDb*8xry|> 6MJw|MqJRDs`~uuTZ{L?41Z@XvMT˯M|,!į=[ؽImt]am1a8z'ǧ.ֻfhCM'͜s0GaX;"dPhy#EfÀaLoG?m:x!dڽ!43p켈!Bgy$(BXòYD8 X&68K7!ǿ ,2 ' D0hUnh9Ega]_Z͟3M *EдMmDq(+w@}Q12j8p)ź̬u,g}BY2>/V QA]ƖBRgaB}\,Z@.2Kl NnB%u=嚴z&)XSe{L~EC5z?aj|tQ,fHF4~; 7uOK)XC ^FSuWըfs%Ѯ~=ޠf;oڷKK-K>rw5;WOƀ2wMtBbWWyʴyBp6ђ^ƎfqzF<ܩ%>=kbRGVL=WWcOꛕ aW=[8ԝ|nm׍Jy}_ֻ׌L:"'\7#"EMՠqSAk,2q"NjiĆ}s7] THU#Q7YaU׳25S nؤGn'W 'ԟGOmnb @7>ϗ{ۧ%3No9;}"IȺu [iW[)d3ux"Xite}Pjvش)_)P$jJ܆,e}/؋zaSg Rb]tD+=f՚bS)y5\8HC">4z24پi/L_ pdJ%ZMRluU9(ψa}^E,%)(_m-m*mF ?=&!o9!M,Ui՟V3 ;US+h]:JZQks6Bjc@w@Q/˹ZƜu_Ъ3y<hpؼ^Ƿ Ғ t6SߢwxISOQS{vY~\$Z)#RdNRXkq~lʽd\m5HNR0Fzמ:#Ғk Οٿ9;-ǰlt4]ׇoE>33%%On,ݶeYi2ETB&ʧci納vLW7d`"IٳD"(:AS*BB뇴в|ְ~yW,t5gvftr\HO(*5w]~H"U+W.ԮrN:cFV׭e@q"H ެ<~}+6}ЙZM=͘dFBDx"_y=VmJfazA7҆^GN &7*FaJaUJ\FBӇ35v-,ex?5 Qۛe KD&TKt5\<:1i@Z^ٲ,oa֙*G`~v! OL5Z!K":SAhHhWo~*V_fcH~n& 0=f7c!# %3S~Π+c30Ovg-㓕:՜{|E Z5M+pd)leYVC~ޥAwņ >RPa"Q-ϽWT%#W}S"_'-8{?Swꚢ4CBByDE]Eo#}VP#+7TqԴ Ւiq{r;?k2a܈کL1s*޶y![}eKmv߼֛}cU8݇flFBpy 0f 9u@bI6#CVv@q(}{ 4~skf7MtNwAx!1a|_S.7@c\p^XL"( Xݨk- PTj*P"UxB!h 1vMM=Jh)hmZ礄ʈXhSEA(4D" 9@iXze ˟?jXғ'Nع7uvAq$H,p]'zg%' SE| u/' V)m:U P`-+3#ksMhJ%%2q̾Y@V\yxāfĬgu`F*zrc MME㵛˴-:F1^V$mXEB=unj_ֱsm%sE"WVT-f4wlcurp**t Y{]YEOV]VhU} ZWe l*RWii({MQt 4ՅF4F%mZތ] i=jXެkYqu3[T[fj輵е>b.*_ڬ07ԧiWOY}ݰMMQåhPS}Z]Pk0M]_̌&^c 1fd-0V\!ƌ η:eI~t㌞^V(n]߫ثN|m;&/[IGJ*+>'ҊaO C/I{ h÷TZDx{s'sux_uoKz 9/}Wq A]1] LY].s*Ek`(yQqIqڮR忸>dc H߉ ]WOeUͤIcln hq:m3*j۪MmEmНƾ Ea9PZf b5_2F=e  W]Bqa>M`%+jϜѽ$:VcX#jՁu\y}Ȉp/m1[c#+[ 2-܅1CAZCȱ- 4 9s.̹`[;B i)I}Rf8~/}1 kE\x15%qUr.(c0jY E@AN4èz;*u]CBƻ{z@aK ԸYA۞:! ȕIm H$ \n^qkM@+{n,t`AAZmM@+g>!  40  W%}AA@1n". }kJ  (8m%A:xQ ^}x2k}]}-WǴx?g޽SK7t;%@>Cy#V'$w K4z M(4<6oR/Y1+ GLz$Sq. lS]}[Xp'NPė^(K(ϨXVs{L8ǁ)ꮧsBQB1KeoIr>ܽ}!Gpz\׫@OIG>f K'H ၥ6wߦϿ?Tf# LݧP}qs4V roĴyc⥎#>`KstWnQH^N Bچ#I`Bt`z<Lʏ]ِ<|vbIR&zəaѣn/i]3^~o90~ʵ}ٵ9o$~Y 9k<2}Oj_oe1}tN԰t ASWT +HuOjXfHWsy^1I/` G&S9gvY7De埮}s>ch½+رC2 yyi'|aXpa%й3 4(a6N tfQTw̭]b?JY;? ܷM$*i%eD,x Xq`< x=v d 9 H *Qt{8؝] øk!YǧNVۿ(79#Mtq|ә}}|) ?A!+7Gu_8xH(:}'D(p\ 15Oyq_n`@ Cp.k(g!śi[R/mikAWtK }QlZޛ%[6nccHhv(I$R.$M3؀m\-ɒ{ZmcUZyx-w晙5~ːIHV[:^7߯ǩ::^w'{c3QfWB6[q3z&֥mE=MEOm~ LdlvfW}FᰜV_z N韺!TNM^|HN2\ Uo~9w7V>>$"Y]ȼ%0%AsƮK-߳|Lf蘣Ҏ5\zmwkN0!qiwm8=s V-7p7d0\[U\ayZ>7kqژX-ŗ_>PԬXa2(,+W@["7Tv#%(p˄VPSi;BOMUޘUh> 3[,N2s憍wElrY\,3u$w9+(cdq7ToؑJ|?$/8^L U 8k:Ox뉡zmR::dVgvV贀 [ĔtI 1<@h|:7D?oxz17Fڜ37B0嬍gyt7UXo<6T 讦_=U9y1 ؇2mTTRnW sDa<)%uWWB=/+ymx+]o1(”nT}7OokV$fƁT;RprNn4iF|'T.xAcFpQk6oSu-}I|_k7V],S'o\ߣtt_ ']wéMk%uT~OwMqg/jLf{BWpwr\[}g^$QMz;97d*NqpN[iZT&=ޒGyk_avH(EaYDQfu_UpsQsy {xk_s .zç%Ţ IDAT{Ay\#?[ڎ}|.E^;9Cv.̊yUU"Cng Okjlok.ik.¿?7G`oޞ}^y)^/u1%hw/t_/# U|gƏo{Gw;Q$`:2="rL](lpm tdR6qDp Jo4j oϑbdjxFT6#4Y(B!4-0"|$C ܐ%g-12-E>;?B23E &I(c]7a*NZk?a]S+5*@a,j.23oŵF^%0 hU sWdV׵]/^8<8xf!#B!.sh&v]V xVb^AԸrKRr|h],۪DAUUۦqz9ևz"er[13<>0M n{tZL)cw<{]x@y zy0rZRq‚*`݌-_:Ca9Ȕ2ns.$Qhd Eaұ+װ2B~'G !B|Y/$huZDߖfc!H\YkP?`-?}]F^\R)gv=xݿx|qA%ZwXR:l`S4bB!\r@u7#fv#/\N0C3Tmzy߾.@PC!2_KMv=v=,mڶkEQˊ^% z:yT(dp]tBȂv:"*;0Zb כ?6kͷ$WI>{͛78dOҫ{_y@B!,4[gr57&Y7=wfMJ͛dY4 Eag!|5;nr#z$9M]|a.#c%qr)QB! ͗HO/_aN۝n!@ mBH`I B!%y4=ջ6B(arZ.w&Ejd.u3e Ϻ=~?BL;QF%i $GcUMc9iEA-ɕ:c 3$%9^%0ֽ`B!Aׅ/~r6aYY`Ow!9p LinO0.6ڋ+[mRÊ42m|jtbKImybٕ  !椇ر6me0e:BQ|w_^2Yaa6{#^d*;lH.`(C倷NiwqZ&{;d лJ$ !1f=2!dM;ta!*)!W.6gk-1uغ=¼ض>{(yyFoa놬ןnfBDF!z%!ִO[$JFDpټɡ[l SjX?fQgH Wħ%{+jxaޭ7ݴ*eb!Fvݼrw !BYfЅL-UHW*I-n`rs\Iu%7<bBȕKHC0IP9 6ʔ]&4COx3H '?[U2۷eeB!dOoן:h2oŋ{U4;q/~l{[( ,",+ tB!Ѥ?9Eo?Z'7@R22onBa^GL8g:۾_fő_ GbymjשW婫{=ޒŠ?Dh4S}JHHXE+ .t Vvʷ~)_7QD\"Ar|}rvdW?V/?m Gi(?sYz !~@@HԵ(|ϾJxcd櫿oQm!jYfC9̸?ZWsOC^셌KRlׄB Z(]g{+^E{֨4yUD*]@`mƧ{}%//6iE`f$WE!Ƶa|ahCvj@t6v}<Ob_ŁB!u:(ʋ?ɞ3In$"קz!2XewS-S4bO?5.*}_m?쫦d6U2Vڭԙc z/璝@PyCUYśUY%t=Y P Աp:/!B|{^uqmo V5GkķuwO]#Bz돿9& œRX=Lm2h@f\uDo^c{n2 L<;/5¬b^XU}E(\8{Ie2x`Μr /!o?t Dk៿sߟ?Oޕ<^ݩWFm/&kϾ 8L  2:gvUY`{ͩ׫gJBKyK̨Ӷn~Q0kYtB3E(!;^0쉒dVfin1B!J`qo L[ۼ .$nXmYHX{=4dP5Ehu#; ̅ =C C!B˔'ܒ<=&.:̤TcS6Ɔ2GmF${Ftʳ7CI!BH($/?Z_024uM+8erDs״~MbbBzYe$hic#B| )q=rLq!"#B!Mp$j[zm^" N+02n$ebWb:w Wv%fY!löLV0kunVJ\iZ `UVzrT%$ %B!d*a#Ju5VD{1Dmvkzj7oBr'/(꾏:0kIX kwkc>xgʎid*&d2H@~Sa4F@2B!lUm}BtYڋ>:z}L)XCn(Yu(5z ;{G> FGkz$0!)׮M /¥a:yA+ .t!dM9RAk)aWﶞV|z{}+2 c=%bo7jnB!$x}假͡cx =JB!d^tw"\>Ҡ25JB!,,r: ݮDzW%B!dq5`"²Ȩ@GA!!K}/''Oc ^GL8g:۾_fűSL0D3x-M|~/Y m#Ȃ#اq42=IeͯvӶ]\NN'dNef-?v t,BȂz'/:ðSG-2.J(!B2!E!_+!QC!2g~د!Ko J`ee5Tf&ePZYY;cXjbL^fG!,uUŁlQ.ߘ29L/ :[O{ضfV?Y.F*ix4D-^ I1Fi7R!sEx]¡ z}&B!dzJ`XMkƲ:S\z&0Lƈ"%"s&Bf3t\ǿ4 p8B!C|*Q3cX@8GMm/{Bq25%`/8% Ϩ֯Y`+YZ[uOd7oTVT['2rBMJ^g{C݅K}SI"&73'JU$be],$ak*N)]*Q:[YX"IY.7%rBȢǿY|dL  2:gvUYϘ1\mZ0kV/o9rÍJO_[Wk"´1y;-`-CfND$Q%o\U4{:]r125zTi#ӛ eENOJt_}. Q* A<}v @ZJ-@FdiLsB!󨽃C<*t/Oݚ沋%NqjҷUXhF(:J3 JqugBKێ(npI,˲ƴ,=t"];R I醎B뤹9y\Pp2}Rֆ:ҬZN<$nӺ(%WD=@nٰ:Bꛚ` =Cv]:L!B S6:*N_VưGPtjV3U,ð]iU:JW+:d^x@0/ACt ]B׋,q`UE )&i[/dd.߰:9|zQlnx߳)@6 ~]U+Wff-S5+-Un<B Q[OjZɲU^V޹j1q,s @ߍ6$ۜ*KjokEE,2*.QB!duv8z65/Y}ΌL$bwWWeU=uj Guӝfs۟k}@#Pt6nߩԛL^Aj;k*y+yy\.Vq㦖}{>u@MUi\|uYXt@~/+owXlrVٸ=ͧ+W~;o 10dqr.3kYCOS /}<2 #Bqqqqqq__0zd2I,'6^}^,ES3F\!}t}w19=_}^;7_~9o2!E!_kavS̢铇}w>7oeY#GtpN0L___kkkSSSGGGxxxOOOJJꖭ=zScm;Z7oŴc KI-z]wM{K=srDSB!d_۴mkpu;X:rȊ+222|sax]PPP(xWTV?n\HP&vN 2zVo|. 眇 @G}>w S'0nm*wj%\O|:MoWϴaG`hI-D6tg+ix4$􁆤HPY۴ ax]¡ z}&B n7m5f 7 Iӧryvvs'%%+Fs$^[8N bk\5K].fMٲ}I{"қ3D*ެ*`w:|r,Cy Xp8BgJʗ<2YNN(N0;;%4QG`\.B5''XbKfd[WxT? -ye/Jj^?c{]UL% @rT,htէdWzZWƋxUܘbŭe"&}MzY1(-j,ji) L93Q{cS:<1L)\m5ZyfVer_^ZM!̥Xj rVlPZ|@ֲȸ_sKRϢFQ^vvNsJV}#EQ7hil&KL_ZvcTt츱9 FyO|Kye/*ze N`V&$aXDFn4<}nQ fqq\f^g:PkW崝( /\l_nVbW]ٚ>am.002}V;xSMĔ LGvm6>.fS^ԹP=Q>a23-F!L˚ y=k;Ú m}$0j/ ֽ1yp<jZZDA$I}{eYwPpalZ/ $IΞ|gs=_^q$\80!NpJ wښJoNȾ_=iۮ@=r L޻jr^޻<jJ7ސ&Ę.XX+*bn%/Ć*Jd!V;q+n*B1eĞ~~3!U{J VKXPGuf'w;H\, L0*X =C9B!Yfv t]Ms# @5ݦm~Gi=qnLpZ#&&~jq]z:wvuOQB `=n͌ͷ$I9y\S饢[nܨXSxv@6bK?[R\b-wey۴mFNT#rl[X(4JvO;mD*)d Q f%F/8ÙRWaw%^ 4j-Rj% qlf(C%tB"0-0o|' 1;„DKscLLzAEAApݍ:N&1c00uuŖ{$I2wy酿;{fY m[|jyiZ\㓜\kumi'01 38 @}Ebg<&TV+J$SD߈"I&n 6B`Q::y'.$amQXrb`FD4x y?Y) ?7z؈BzJGO>X ! ,c`fSmp8~e}yAxzUUU6-..7n긢b(ӧvԩ_fCTt?xQ&_ln=C9pkcKJPU_ZN$%Iez0J^ @8quEmּ`^[41&9Nj^u)F ԇeFGbZ`)hklw^TQarp9\Kbun'mz]KѪ5Veܴz+6ڔ)/31&R,B!d[)'732nMB\. .+777.>=1)o@R{^xnwEEEYYYHHVy^TUUQ[y-$i(@([mmٳgw1Cvx{J0ldO=%"ŶbE^HhKbev!\'LjYUr씉F X, L-mNeDvEG幪iQrElrXMafwC$ ĘPu08 @h)h2$ li2Fh>]WB!@aHUS]+t+v^_~B?h qqq6`0 箴"S^.D1Ξ mŊv\8 (7ŖZ]vhe~/w y_lcJJI89 /+XMdRZ<4`k{,m%R[7?`m<[U׌x{]]Y'ϲn)Zb(//\__zFcXXa|ntBQdf獷x>q,’3xHVu6}gN\Xmsm-B!\a90 42SHئm03Ko VjcfeYJ.BQQCcl<6-ؚ_ml3aӶ];^SCFs]B %0fF`U pG1))|hgYa yoC""c:[o{fzAxh "2ؼ/G͕ff- s4`/9zuuXvZsB!d" |aXd3nUX=9jz߳ zuooDZc-Zh4T*ujsgU]84{=N,C#$Y*KjokŹit#K"!0AI;ɍ\0$Y-]=d^7Y :avb n-b[$rٷv\!(^q*u[fűC'bxGb`rg_^iɣxKJ +KߦM@\NE+!!aI]B+ ^s1fqu@BƶH>\NN!pr.3kYCO5m]spf5~:Knd:ml%0L!-^{MF[2/.+iUBieea1y !$fXȐ"dyT뎛w7]w7M؊w_9vVٷ<}96ϡo;8k:giu&?unQ.ߘ29L/ :[O{ضf~@8Z˺lbBZLj)M߹8b"FCemӮoB&'C5&E 7J!YY ̝w|70qY8~1w;nü6LvϷIS 3ƾ|w7}w_zfD8c2/qp8 ˿tuƆ4ጳ@*a5Yۯ*u9L`ٷ| uDb&Ai?0"T^`hn Nh{kJI !2 10C㸅c2`|寿,|| /|wLnJ_c3j׾qw9jc<:K,D3n1 ([>):Ndj9.FS+0Bq25%`/8% Ϫ֯Y`+YZ[uOd 7oTVT['4 2rBMJ^g{C݅K}L3cݥY-;^XklwLkގn0 XeTJlZѠ`UxBQE&l2!tW`{̋oc1_|ye1QQ;tbU|QzB ?5;nW\[. c⒆W߼톪b[z-@?zW|omjEAFe4uevjA2\mZ0kV/o9rÍJO_[Wk"´1y;-`-CfND$Q%o\U4{:]r125zTcҶI"N7/2aU0鑩!qMQ"+/L@z"1T,m_& ]Y]|1#BuCȒ1U<_ڟ3d5 =eKZ#n-o(?ь6>LQ`ugj Pi㣍;PXei+9YzLE`Iv"  2cu' D[DžR2X@*x#3'\.Rk&_WqV-f:*٨[]]  #`Fzd`BY(!dM9|-icLJ96eSllGM)5YHAR0_rKNvB` MN D*I  `1>V%jqIznLT0zR)өQdJ '*ÌJ\w FQ@gDioB=pui;!X6c`Yb1֗/gVq29t;/Ⱦ&7\ EenHQxOKM{@Z}d:9kK^?=C*2< Ɖ=rlDo!=%ӣQ 7.DdB;( n0~S%0\- ږ^00[44 Q tPcjuܭuڽF&2/zk+bWf阰hSkN M\ v;]ШIն9x Z%ssrC4|$ܬhp+$hjғ"N0 %B'̕FnNNOIO<]W3a.8aT"6lnB2G4nR$o*. fVwfe=AtUY3VYUDFxَ򮈕alxʝV8:*xA( 3yLt)^GUQjm|*tr 9Ђd4 )Re0$fB!,fS,+Y貴}txwz|W١vR%S=Vr՜fTHΊ#+|p ÀaΦrz ꚶQOq #:N}j B̉ Iߏ?Dqn&aYv6E˜-˲%O!Bee'x_ݾDHx/)2 tBHл`u;x/ ْBȢvʦ^B!U;$9,+ tB#:B񧞙\Ff-W>?uDSq ~̬&bxG&ZѦ&~zS'Z-))(/}OC4Fs9%y\t ]B׋LGߴmW $0\NN!pr.3kYCO uUbby녌6_g6]{fQk[yB!a۝t\=MVKOwWtjYz[[띖zd첗˩@f|qYYMètJ++kGw KML]!2 E3r|K3^v IDATxyVwfddM&A?{wuޏ;3$HJ$j,ɲH,;NQI\%S'M&u~'ni{$Ms&;d[eYQH)⾀ ccHwA<|33#?9glnhbyU%!iokVĞ8{wLI u?3'?b|iݽL9'j8$XM[ǻ\)%.umOݻ@-7=h44t^8!#}=7-ɠmBHEg+/>555b8zͦVv]gN.,Yl^hMtuu}NC47ff>T53s?3'?$}m{zznT9Lx?܀U>`YԤe4(r)!B@tf0Q>˲nwoo$aeu:Ww_}@G{aM-0M==cf͚:+W=0/oOWF_ewar|,ByS(L[ZP6K GϾhߺ1/M#9NmͲd//Xoa ~Vj:v⚕1Q𷝿\1-'#sP(T~@n}$BYXQޟ3Wͪf-?w"~`FjxA0^$tҞo**$$$6X&/XreHymn#d݋=$m۶e(xN_zobKlt)0Ա o-5ﯰb|+Fq݆drXSfޭ1O\jԆƮ4+(LXvHpx%DQ9է˙hl1B!$ZDM}Nyxt/(H?GxiEcrf"tˎ˲~UUU:.))I1 cٺ;::,K~~[rѭHYջ M:N-4yɞ[SYmJg?g(M6^Pp-jmzIr!?C$빞mF&&-X<&o],cS !mJM5<'o;E9'FsJ͓ Ü9s… VV* ZUUեYWWW*Ck78H0iΰ|__{5<^K Lx(3&-X;\"l`R4[cǵ~5oh ,beZe//>k71T`4$ C"3F\}NqߐWa*,~xIIIQQRE10D20YYYy `#49t|<»H(HG:$` &&)!CaQ$3R%u? txy0?s)Kz1B!d(# ;{Ksʧ&bO{w-$IϟW*+VבoZ[[m6[bb͋Uyܗ澞e+xlS NV>!1sRXKHA&-řF"!#K@u ݳ`Xc9II}65t)mҘ @Y<"$J 8ڍ,X{FjiNSF"$hjk&;.9K䵄Bo~ da7`Z ۀNVEԔ^ rB>0剉G%%v '0NG Ӷ?Y?yl &b}`Ƌ2[w>J拝t L\ѽQ4őΚ \&Vu'Cbj* @}.됐Cf4qqIȏR2FhN]ƽB!$neγ(| ?='Xeyt!w2ϿtV~Az'<~ĆW}=m'HN]aDWcPJ\+}ip|b5 t:s"?w OsܽzKLx7:yѡ# ¼kqkqLY4g,S$QEȇW(y%I2M FcFQ(`I$Iȯ\1bbFgjÝi->0]3lm`ѱ g/ }[N}H4P֟j .p4ucwxjn ].comjB!D~wo)aY ^yxt<fr -,Btw݁*cbܼ͏9\Rbœќ?446...P-a+r(B!9 Lpo{yyq~C:r'oo)ܸ^ax˫,--X(ʳ<ޮ8W٬2fVO?=/Pmn;OL`>BIi B! otEoqڂd턛LV>ބ g.@$ereggWUU;wnƍJ`A>ngff~Jt:n o:l)N|\O&x"˭[nݺ5dm IQSSYD,t$$ؑ,M_B!![`>C @.@p \9zs˭ x<+W^xaRB!'0쥮.!!Aպ\.FSQquh|y}FKp N6d!ʅS̩=x#'jdXKI\(!\'0 K#/,n_(tիWWVVvvvh4aNg[[[ooofffJJn7 ͷܶk#a%0eP(KΜ:g\X!SᢶfIE%cK@o}1t5g40 #wyt:FSYy}2 3GcY$iLw TޞB1̍9`Fr ~82Zj^x8㒒bbbN;iQvعo]IQ(B!dQ2 6Zlܼ]O'$$`d .eZ[!6nvQ)}cz>/j[dQ!BYTyܑQjڠ%IbY֠W:եjFJb^RpZ{7npخ|1~s!&To}5>jt]XqwVZ}dRB V\`XANzYqA#BHI`Ɔڅ6n>M2F$2q NRS3dg?m MwDO3 NXQ4/)Qנjy@ֵ:>MXfKf!6Z~tc*z̵Aq`5=u2H\>ṏrSFCCKǮFۀ#}=7-ɠ/XЄBR= ֦ԌBphEܲb]vlħ65 to S2TtFE7PS\n7%0BBh,g=aTz$1 ;!D; _]^<Νp:>eY#NtD`M隂X~w{K-<iيKӒ5ano-&hU^b\,Z˥+=V?UbJM ?C&4D(!h$1ey?:yy|~Y^,Nqw_~x{_`{ϯH͗KMOx֗\(IB™&rKUwh̀ ÈKЭuݖ8= :)o݉~Tg~Sl J}15M[*o[o(MƔe%wꙃgzܬhqceYa#aXe,]1*=3bBHw_zw_/񅓙Y`=R60|CKoDx(_'kΜaXm(.KW+9C; )yEƾj6(d,?I/uSr23w mgNE0y`mʢB!dE[maJ]0B?ճOW!5'=Œ=_nݳ~y764 p*ͼ0J,0LlI ֆk$TgS49w=#.RbbqZPRTzѫ!y{bb>xjXى(>׍2|!E[G΋2_TYogu =8a\ͷwA=40!!w^Z`ǠpɹFe0G %Ei&]Qać#z{#_Z DCprix,Ig^0< 0#XSIg:rFrPyaӓB!7>o /5m,/5Wط baekvgg0?>o;cf}hͽG4o=0&!p$I`Zk,+6Yyй"O)vU6GYXnipLi%)*WOJM5.E6Z\0jOW˥?1KvaTChs-טV.Ls4:$AVX0/5va8+H䵄B!F;~ @. YRG2(Sן<A&!d4<=B&ګ^ʺXU7{9 yWm\p:R1uW6c|&>p;ssZL[Vc0鵜A`\mTd߼NM4ioLqqƸ8$ 'r2 `4SqB$scAJNscܥL?LT$ߘo S3jf<0ƃXWY^=dnk&](SC\3xǔ`L32:xϞMOL0@؇ں> EU6}v<{7 Б]w߱Q=Fm n(/%\ssO{oo|c1pBh1@p}Q^R0 D2P؉c< '5yPûeѽk? .!BR7]<+_ϱy)#T Y4ԢA!2*-#Oo]Z7<\oM}D#,tBpgӴ௿ !M/HQSSYDd{9Ȳ4!%Ga2g~&dP_=shoO(  ",˥f.tBHͶa ( 4!a;}!,e/dB*c B"mV}`^!2)E!d >0E] yϪ>%0B!|)<ܶk"'dz*Yl _sǚXk/}Bm/TV[y]4\kRYUچ rˊ "!"<>)Fo~_RRjRrJ_-.$0w={r5O^?U㰚;1 0ꬲ/cv6zi:umOݻ<؜-7=h44t^8AI|iI=!B"Ply~AjIEg'uڬ,@ߐ:3ך^dAiYoّWq.8<:akMX\sզpEc 2=;]5xs e`*pmՆl^(Z}FwsWשu;ZmnV߹Az_ɯ/ښ’UGj6m}ϝhn͜Mx o%ty Vظ 78u{%f ^Z /JCC^Q0;Kޞ^OjzB֎Im>hJa'TYM, wqzNĨ?# q; B, f>&z IDATUC? z*Fwn} ,;88v%IbeYN{OCK1틊 7m6OjUWW^>?Q|ǟ`Y{t:Ww_}@G{c~‹:Ԧ$@E@Y::kNa(IHoSXBQH 3?:rz1B!A[`gu+ree,ms' Wc?'0 TWWWWWl6# FId*].9֫~[8_PT~lotv/s /P vlucʛwix)?oiؙ-Cu#kҩCW|lb|tԢq+1DSZb W\G,t󂾯ŅŅe-0y8aA#V Kc/.P8~yš:]Qtw)]0;srY5Ǐ/)))**R*(~e&++p1i9u3WE60h;xL~)jS 3T`"uk}={ `8|"pD@XV`ZzF>~B!f" ;i6<ߕ<yhkHu(=I2w-$IϟW*+Vo%feelDákQW@`)X:Ӓ .nxyj#rN‹Z]K~.B! n,t:x<s2y3|.ɜ8^.wE^D;N ج<@ 8K*])\bܲ! ٖal ĘRH+Rk$ 卙ґBY4BZ`֭C`zJyyYzY橧uk2gMѝ̾( >7`3t ^~æԴ DV!r H-h8[>>f-gHfƇ7ExQ+y`jj*Yyϱ#YvɏF!d<026`.]¥KRspJx7f#I(ڑ˯Py^78X~ڸi$Ir˲r (E@?S{bQ(.ۭ|@/q>7?pI aXzy繱lyg]]ik, vv^xE(x1.|S0M&0שVwZcwL4$O2c^ɖg_4v7y}55Wk?/LMB\Q+;;:[~'Korē?h~_v{ff49=2!J1}=B!Bx3?sw<=dA  #YreKKKyyzcλ2٪DV5>@w/IλՇ3b /30'wU*u <56^y`RDݢ!,Af&sN#/,n_(tիWWVVvvvh4aNg[[[ooofVvJJn7 >O|1SG0 77 _ W._X5MoU9sv23<_yu}jJyB!B͚j (|ҟSJqڵkۯ\h4,p8T*Ull C@x6+ЄpYe {믤2'چzCv;WEhN`[9_K'>rΰ~׆Bl5?wO Gt-8/lE!˵ -䤗D(>B!$Q w>z]9Ь'@o}1t5g40 #yt:FSYy92 xNawÇ]exUsË6=x;}޶N#V]m*=`m:t\B[3m0e['y`M+6qϟlh۞w<%.m)Fc g5}iI~&BF[`5fZ9a;֖nO4ռ7o9%%jZVÁ eYJ$BUUc Z 85oi}xbDBI)XyoK^4U>`7INh4P$N+\.B!oGȦ6/ y=Z>#aReJLOB!!"Ew'gZVtV/O`oЫNj5FQR1 xt )8Q7ow8lWߎ /+_^N/})Kx{\1IȾ{Jq |~ŦccDC;mZJf8 73<X6 FTMc!I->0AsWcCB7o&JeQ#Iuli8^f.vѓs}kmo\|MY U f+zq%؜R جܚ\t=ZRR)8Cۗ4)jewޝ?UC;rfzv7+e1Z`!K)95c KHZ`k 1%@S{Fk 6N{:L6"x cT1 Sρv;e0N'󜝈Qss{BȨ%&!7gudjm6aD]Q~' 0$e&ʤ[Kb 456 |x2׬5c܉B%*ۜƍ iy~?F9#yx υdDdBbG!xd}Y^xx{߁w_UM+LV0g{=Od "/Rxˀ:0:`1YIe.k4) }i4`bZ_Z|a1֭\t;%it(2IFvya^j[$HZB!,>0hw^z}oG02 0=hHea%0<~b:3=0~ϓEk T-@'~abG홱Ewܑ;b㒌:n;݃Ws7+ݢrŦ&FxKڰC[0H8c\AJA0 Fa8uJ!,qnG-1-`~t|ɴM0'pÍ0cM\y ".덝DWGpsq)əz1R :]H65Y5X]?p!0\PeccW\G,t󂾯ŅŅeV-0םȿGQD &- Y;27W{kD%or_}LӉ)bՂ ;/ik&<^O /Z`Dǥw޾%KA=c_!zʏ0LmJW{y_hG?MH<Z,W99xOohz=B!Zʣ!{@h;Ƅ͌Ť5qg:dZ o=:=9S."»ޮoB!KG!#{`w-y͙m!* w8u}qR+ƐP|8x2PI`8;^FDKuu͡]*V\`XANzYqA#B܎BsNOHv9Gw/SN맚jVSrǖ5`.KZe{_飔ef۞w<'9y9,0;hq¤8SV$ddC.0 shiNSF"$hjk&;.9$ I^K!9{p?Ug|vYTTlqlnhbyU%!iokVĞ8{wLI >Nx3w["cGx8Z |(qqƸ8$aR2FhN]ƽB!$Ekj-uښ’UG~z=VMشiKWW;4D@scmfV߹AZ@Ap6DWcPJ\+}pvFnTB0/>:tdC}-.}-.}-F(M77GbJbf/nBzzzںt:WwGcu47~Qq~]`a]3lm`ѱ g/ }[N}H4P֟j .( ^+~KO]k'J!2c!>o~@٬ms'K} aAlGa^'IRI={zU TU/(*IHH^!^aB!ЂZ^}^}!M0sr a+ x193me?|eYA?~Q˕bŊUV(ʎnlRy l} gC B4-P &#1`L9'>0o9ɿ aΜ9s…›o4333--mٲe6mZrr:flͺ>O;d - 럭xYxsAi!,Q( )Ӌɫ9C-039f/m3''eY|񒒒"R)b d&++pD!_}W};0 f*0sЁ=te3Vΐs-`xC]=w4tE 1z,E@n$G!c.iMe ~t2.q-Kq? txy0?s('#!xO=ؓo<(nVK ^$e z`ߩS]Zh4T*Ρ!'Zw3ǿ>0vն|Un=wnPV9_0e>$~D'aSzlQ[ A_\s ߕ/mUCEVfCċ-.86e|BF4??*[)?ʐ:KDW[QK۴ܝ'sAD/.8R\p_C#[rXu觜7m|]ݭJDꂃ 5EqOX᱅ r"і7nYqM&rcnes"R8"i~Ŭi]Y_ @15eisa8/78!im.@.kyƀ9V#$bvCD45eTؔdmUZ 5tby4cبָ:uតsq{nڋZʢjvdRyٯ Or/=cs͛-ޔi&`,7M떛[-7es f{Lؼv~>4"2{9m30 %{T*ȨRBvn`ݚysBZ;}xZpqY3#֮BD6|Z 2- f;5qD<4 Vpmk/ʂ>j ';JCW =MDC3m\b֕ov+ۿWf756:u\_/7 ڵkhhpluҥV xb ޷nfPN3۵7m(uǟhŐݣz~^nDdq<+"M/k"#BΞ<>epcw Ϝ+@ڵsum;Suu"_!^QBآxiV3B=Vpg( 7iJ/J= "Ȩ}($/N"w7g߸QCD~yi7ln֋ڿ\{#K==s9ީoyr`?1AA[r\Ӄ,.C(qh'{v|%ϧDTv<6+ F?65<$$x Ç}sc>zv萧?X 'C%d /X2ċ-[/$U=&Ew*))CiMDOo|rI"qoh$ݷ|v Y}}ácGFEuzZSNєWTFFtlΛ+vT owpwWa ċ-_/_2_7jBCC8y_Bq\j o4l?QƏ?|Wq%|'-#wZiKD%WhVDGmɵ6qMnUW!p[uD~c{b/9{cO ʟڽ{ c-Ym޺-cOBCGݻw%jk4atKE??Mч}f.l0<֭ٻ&y"wfvݗ}ё9;$0#ώ8-~sܽ fFXIW |ud-IDVOҙ|WBѥDa)gmlA؂xF55>_ۻ=@D55Sfѻk64ܙ0y6-_ND7NHD.M,K2mW]?o ~~AmK8=nfMqXB&+FV5BmOkR ċ-[/XR"IԤ/Ɲ2:cħ.~(+ge""bp#K3i Vju^)VI_aX!qiG [1[fZh22Yfh4͚eW}cZ>mS_|EqLb  lYבR@b}8U `|n`$Mت/܏hCr?3a Nf9_2 fO8K֤%[/ ^ C` 7D=񆟁!1t VN4ci|g`p{f'/kG'["qw.LY3Y?7fč30YيRL` [/ ^mܢ9R@Q88!]B 81jC7(Ӛdb ī2{Rmϝ4+AZfK̒˜V}~scrBA߽d"p#m]2ط;ko.]dfpp;|w%lA؂xb߾5%D %$&$0v۝%\-њEH`dO`A O?^  K&؂xb զ|l`z=Ry{{755PStD׆ֺqZ6 {8"2n dzzK%`mujN3@dhnj9o:X%dִr {SdQ꜄dpXYq8KxxCgXE2. *bI[.D-Dxb F U,d 7ƌOe 7nc ċ-W[)p\cfH`@,&"~Z#^lA؂xeÇ?Zlg,@bUw؂xb FXBbI5ZQ_|][/ ^n.@i Ă%lA؂xp#$0 \u-[/ ^nĂ%lA؂xp#$0 ,` ċ-!f `[/ ^lANQQa b ^lA؂x-Qik6yqkU֞{~snYe p/'_Nyx?6;3BF:h|Jo~>VFp?t ;?VywxIƒ#q;OUPׄsJ͍? {(k)~QԘߞ#F`5[1Psm}{>;PpF\C߲͚{w碑ЭQf ;lA؂x{?Vz\=T|@T~6扮Y -3ͷ+J}#|x^>|ot6*(m 8,[qDDͷj[0h*4"6Cqt7##IDATC=9=g0o _|U$,!`[/ ^lA@+'<з[_g ̒㜙r#"eli}{O%͞0hp 5ɩ ARYۋqJǟ|vDS:1j~7*7}4@H`i@wM9w/= 2.gPۺ&Wsh R""CٌF(n$"U.ګ׵͍:k7˱ &R>@ x N-m[hS5oHnU5 wo:ݭԭ~AxX`[/ ^lA@KȸcŠϵgO+PT5:aQ|ƚZCp@vj-wϳv:O*73cԧ%2cdCm(=Sq7>۷S Cuu$Z:5'<śOMmu~;7vnD#aa6h@3v@0b ^lA؂xgqMWjL 55 (p^_8}}H[{d %>րçO'}MɵX/dTMAO'pDMgwlݖ_LPo^D\y͇Tm]a疛X-s+zC5EmZ[?(iA~DM.UKHLz _oC}Ck9رCƌ_}{}*C×)8Ӛ!I+dȬIqGӿɫ3 c"#BΞ<>eƌ ɘT *+~iz: +Xå]+V^%(DfYԣU@,[/ ^lA Wa ċ-!f `[/ ^lA K&؂xb FH`2QqR@18"rN_W[SW[H"r2(@`PH`PH|(& {f#wn@DV铂Vv^BD5px&;snX#u}Rw0ʛ?'vlS~CD5LHLv xG^L8 .Elr+ʔz7.o)~R8R^c'{=iTQQ@CƆ g!{6+0(ĸm6ũO2 %PAjZ¦&S wxe p'ph4{)ړ'CL[mhS@*H` ^90vI!ØM,7r{=68feV~p} ڸ~k\6@['30-xm f`2vnuuv߿)^ l8.|R8rQt̃1ρձdsgOv{mAa9Ia7z*Q|Js` deQ7t Цa am90s‘jVF":diBVqY{n}msWKGy.]r~ppp+w/h%$090!,|ՅVDrC3$0 $0(d &9vX"'EdrC3AX]m .EIwުIa,d RU>lIENDB`hydrogen-0.9.6-beta3/data/doc/img/InstrumentMapping.png000066400000000000000000002312541211146647700230050ustar00rootroot00000000000000PNG  IHDRWHIBsBITOtEXtSoftwaregnome-screenshot> IDATxeX[ KPymQvnEEQ Dn,,Dv (ݵl(ʲy~gf3gg@  u5$VFQ H@ ?@4G(B:/C|[{?Y..:wW#D„l@w`g٣%/婠S9N=5!`ߝ$0213 Җ{WD3Djbwc*e FzHd> C6VVw}fD]e?B7>Pk/@50@d +J" $c$Z;MZ*TV h&~?JdN1 I@(+Ss8&,ۮc+E/T&-lܗɗ7Bɡ˟MЀ(W}ʊDseDSiΝ=uMcF^A!b<JD?m7)bN%A^/ш@4#PHG+O(q @4SPG A@ #M9i_ښ@ Ă/Mf~s#..}j ݄A7a ]]pc0&A/߂3jͪ6|goEqntlَtAΥZ'e+braU4~ z WX[h0xtƨdN] rQC%f0&\m\A@eɥI7o~m[Tu ];( A=ZS[ٱm ݄0!p^0c n°"V_v~.W & +Msn/$}"v0ɨ3[MlvdDaR̪/?!r9nb9rVص/lA|W+EM[×;|%td}=BE^R]En;pzdzbf0N{R8@/4a8nn'DbN7rqam>Nvtzl}tt// j9[F2tӼODg߆k/?V<ԟA;z`MͥC ED mx ntb5#9OYi5˒_+F'w|(o^ZKšWm{TEa õ ]-3qD/U l13ʖe8L:!yQ ]GʹSzurٜȷ+R[rioo(b~ :+#fe>$ה 37M5ս~>OTA;_9@  &pY53]e<,08uA gm|RF, 5xҷB<)H1ӝuaO&t×웑!˃W.^f78c~Ґ=+^@ߨٺ*}ꃿq^T4i`fGLz]*aݧozN?wַ=ѡ 5ɰ&a@?}Rì֟T9ٶ՗,f@C?)g OKnÇ%akg?cJO[5nދQq>L¯b,>dfaYcN/J -{_; JX0S]?im2|N=)r7kffj}M w#Wvx53ŗE}aT:>{v_¬Ͷ -ђ/|(Mlbf~nj<<f٬hw{*:ޏK~aZ?8+!5-6_frcr@wRhLc*ǜ%3#` #yL%m wq栐)II\,]WQ"E84.v]wOż`'?G4.W=$SWF )i+b@PK1lCe5"VZ琔:GOOFڰ-i~!Wab1aqdҢ9G c@gCAvV4@lB@niAIAy.@,l뮺p6?7̿uu>NVQn32hE6Xe)ViMٟvNHjYCj[7VŔ0PUH xAQQ(Q#ɶ9My+'粘wٟHD@ .nj#Zr>uݠ@ լGUu9H$ VfP<+P:%2'XV[HbUj[աI w7k]+Ys3CgQJm 4W6-Y88k.Zg7J\ϑc,(6PmΗ\C@VVUja"VU*_fu(fxd8iIh3"HU{!+P!pA-R(4jK~ڐRTZ󍕆*W>.|*ym7•vme^uonsYi\"7ҒYIZQچT2Gq5j([J.@Vi+Fm[&쩜onȗ.>}ѩM}Nq*6 @KmחB c^$ɺU8EL^C1GƓ,[RWL߹`ICK@lXWeUx;'qz //C }U\ಘEo]=,nuza=Gx|hUh(q^p~ՐTӱţcXc2@R;qp)!5iRՓOZ[l,945ʯV/vyժQ#w?ߊMTզb2GK:oKH5>t|on ;Jtu UMx+chE ̻d*nʽKqW|2&OEd1uK/T|a q#uxe[~;m4͵[ǘq:vKNrD\VivxPhjo|΋b2h XaF?. C) N" V$La) ~40oJA!7{ SOI}:>:SN4\Y !mVpR\Gkdd&O#(.HݨkN-d+t 8{ q4+H$O(E/Ξߕc@d#JpHOB7=i۳F7,^qeD@`J+ddέ vc(^h)=A7ʩo,NYߝ2r\5U2!`ߣ7N(F-v ,{<`*ezY-zul̵ %;CN7$ nlD#c-W=e Ds_|Y~u;Fsم!4^ױx[nVHA""h$~|ƒ]ؘ>$M^ٺb[%{5W{/T))hkRJ#\|=A7)eYeF)#*~_XE7/ ڴ+rNeEaY}4_-6F'xo},*)QIDDkxh6fAZw^M~JM>_!NR2?`A?$*pk aî40%|9V'&шE/36=*Ɋz]̇ P9 -܌^+Oz]V$^/5|q~6jz$U>G ?}1PUira6⯑10խ S5Mvlg}h[{Z*F30/#yODbsAna9_D`E1-wߖ P')Pčs%F.ܑqrZtdۘnڄ@ \_oF&kCxaj1~n3:JND"rޣ%7:hUCtuCگH\4D)#Ϗ@C]" Z#0J- @ "y@ 4/ʔVFQ@~h@ oSAT~ [qM>WEqЗNqkVriE/z hB}M0c0uؕ{~{Ԏٞ4{R?FO!'˨$)YL\7JSQo"8/Zlm̶^* a;Ev҂ɪˉxCVf״4g~3 4ȠgԘ֍(+zv%xҬVu}q& 0WZ^ͩ`3զ(7T)ΎUQJȨ*HJyȴNTvvp?@EA][[GWZk)ȳUe1 *m\'m. w4AHݰt{.MesmtGrj:rN!eɎ6w>=m?]xXoe߳a﷍q{~)s_6a&V |:v؍V_IƟpWiLΤ{*8y:ufw5n× = >3WN,ly/]rѣ](ӡ^yQ߿Iؒ\mȘvxLN Foo4@6` F2*| >[.?zQz*xY^^ 3 )r.VvF(WPTeYaЮ-41vQwh'G(]h#dI$QGWKYuoݦMvM a$jMbX@V~ )r Yi'*- vn=yGؓ+>0izО/8bEzmtv~#w/ 8E45* Hd/YAM 1&G%0jiWM6 2A m'(7 xᭅVtOXl"G.ki  oa99ٙiń/\@\d6Zw3N]\on_8d )ss8MvcU'٭fZv EBVmlRFM㍤r^C\Xtz{k *0 = rv0vZĘ\$ECi+g!c/nٍ7d>m׸rcDǝlW*:ٹk +xSf9lz=Ѿ] v/m kod&q?_UDM}b2Cq JMhkZ- 7q`gϽɊ4)Ή/e/y5wfdި͛W/.&| 6.eW_GS=7Rm? 墮xlaE1],{s$x՜5) l˶[5]N*r.̗mN9J웉('1o4] 4V@w,Y *83d;>ئ~2(S 42h a۾UN>9 ʤ# lLtu!@*8j5)gfUi~Gc* 8/QI͜W+םDl5[B]>$2ҸGk,:9Lm>TufT!N|.ku{_46L᫜IJO/H_HcG;hݟ=eWλ. kO\_][m?!xnwә{s"j*g״9l*&_M_mؙ>U:-Xn"`Yvf7x.|M? ,,Y[-Z-rգ +ڬ.8-K-tֿ}S:"rKݧcTnNY/7HNu6jf-*pkRNLx[PIձhbRAWeR9[^nrs-lwk83aߋfA7gfo5ni9Wb4Ѡb%xe[WHY999y99yU'9蔼}Ϫ){0M3\G:9->v/6m[;_9N <܄A?}- t47af7Aht!Cb*5s' ^uk;Ÿk"Ȱ?jهnp;[ YZn  7;n / r;It+ۥw yu󻀘kKYuo?oStS[uX=W߯$F˥eX~!逬m|"bVW˓=G:;L]vI)ߋI@c;|BS ㆕hEYw.|6 āLA@ #mdg8gdlohډZff64~aZ^Le~w \Qw ASD% >=\=uˇqa'pQʾz\QW|ۈ^ke!)x}F(!&Ozt/l^rLWQJwؒdga9c8ygНw& A{4aq.5*fjvVVIOo֟i\^Y҅>7rT)ΎUQ{QWF,0 #c9y+*hm}YHևOtj|1 [x,+)g.%edg=I/, - *m\'m. w4A+-b~y;y(ӾSt5*/^TKoOdJ^sʙ<-|ujǵ"6[wzLN.7?';y!Uƨ& qƬ[jU{[(4}1 sr3>< _⁖FݼIVk{wN:3eXrK|HիC7N v2uA6UeХKmqȧ8t@]P[_0QC4UEӺ'ƼaƯ֎K,[3ՙivԫ")k ywϪ 4Wo?M ܲoT/|fqHu[xYvR}Ln tKŧQ@a8@ )(#@ 4/ʔVFQ@LA@ #Asn"BߟpQf z|>.E~6˞T|[Rr ۜ\N2]6ܞa 3M 8N2ΧG?wk}Е")1E^t_sݣ q3N/;ux>7% Ӥ@Q>s'o-{|MHN?3qE^tl̉H^{fx])|*b/rnϱ{)KUx:{ROnNӌLr<tĩ"4ғ׷yO5`0NQNx~TN}$ʫLN_mn9oټ 0x.!(kf d]O6A5MQEH;85r 402J2U;DRrZI>R\,ae=-qYO?WΧaoz8?!nXݸ-xOsYWϋ.+=cuj4,#Vi[;3LgGA9I$XGߟvf^Ҕa-YE]Bm5n׍%/vϛ(ڿ;]{w[0_?œʉ AQRagr!\^k,Uĝ^+4ToyoVzScۻBfֳ '5ӥai㞹o[V ^L^Aw|Ͽ#E:qD?; n;RTQWF|?rJ~K[Z92]sjy&W]Zwz+]y3FHĕϱvwm-Dړ.rBѵt'm,oz i͇<颭TSA[SHp~ցk:Bm鏫 Foީв)JqiuۥU V>L.mUDz| Ϗ@C]"'>=s.'Pg @4SPG @ h_ 1)(> ā?@4G~q;楼͖K+z~Xa^9?/v2Q>z͊S(:}a!qCg,'\K]KүڴңO}Ilp=VMN툐eT,&.]iz]v׬쬬쬜b6.:B /bki7 ʟn1bNC<.wb VZS{IYy鯮lbMw\oJwؒdga9c n#Uw[-WQQ^QQ^VECL킟7 ]n6Z0Ao1 sғ;{Zȇ-閃.̲]ȉ .}Vʃ@mw:BÌ3-)0`&©2{~piS̊ޥD?Mձq41v e%%QlХ3ci|Ӆ'^\nRF!< aHY999y9'9m>'AM;9X=ǔ<#0%PbsSk72xٰ~ Ƹ=J蔹/{0)6,ruya[֝ÃS\g>@nN_dq̈́.<DĬܗ'{t0wk T=5 9oU/&Zsh:'g^iALU9_~<xqsj1o1zͻn>aݨ.M3Hj5rԳ/ObhhѴ{o[hZ5Ɉ ㆕m>(?BQRarrZ N)wѢuao$K”:U|-05^|{y*7x*W$)މ^~ݨN9>i]*IVtM9IJ9\S;O>RY%{&3{5/)) )V)'UMqFQV/8yѽOvԑ z74uZ4lE;_WdeEvꐲ?b-u˽/R@UΤQ$B[Ty)侕$p UT|;;v83 ;շ5(׬)[6s`H.gT誑~zu,byVwop]~dveQOeE#Dvvy~"h@iP%A f @ D D:2ŧQ@a8и?@4SPG 戸dNͭí& kG}O%ПĘsGn ^i~cZ??I/0(}&?c"ɾ>w9nuɡMtbT&|`rdb=%[냮q[Rqi/EX/!Bֱkړ/XtW٫7Xt ԗ/$%F3,iȄuQ~@FUIҟmksq3Ƶ^t]K֫DB IDATC>״9l&i~X}w.UB~Tж5.mR߿Jֻ Mug?D=Oӣ)m՟nb1drHLRym :i{ancFع)+Z!y7z&  J sJl8&B}u,??` :RF~}/ezЁS*+SnZn_1iAEȠ1{mV;9xxs\ ߢhxP2xVwk16-b?JwE *r$~~wРnWS<&z[˭qFLkiWM6 2Сi<\D0n) ?~d kѨgizb[ګ~[XkՏK.}IndeEvR1kc"Ѿcɞ[7)݌;2Kv]ĭ1ϸ9qˆI>y|j3"v;uP9 zϋ+~u|] c?/UmX;wā͘n/w;nyANNvv_bIӏLkcV^E':h//I#>Qy!}T 7{(m¼{IYzoFXpfVۮ >j07K\Xte[}|T9qH޵s,Q7QLz/tKŧQ@a8@ )(#@ 4/ʔVFQ@LA@ <3 i[._.j '63ʄA7:o&<ʛqw 1lj'<vҖQv> {@osЊ6˞ԙIA9J~d!AvvS|ɳ5UmلxowCfg[8+i9;У*Vީ,nvq`cp{P{UN泘fG6r4,bIxѝЍu44[us_lvƫ:}9>x`džNjn zxm&CKcθaVFdJOs-lw;=MtarxDErLf& 3eTf_FI)wp,V]/vsv o-Vj,aΥbݱjiR-48ĸni1gȪ$ *=cu5֟4,#,I  l|wт٫5N{g] ìoP_sK|ܷ:eZ뵣J+;Eoꯐ|wze=-/ߒ$ |gOxqr^/͕;zn|fm?Տ6ש.d(GJY9%p7k|Eܢn5͋/eMMd[V\ ՂЁF5n ܄;Upy+ =#:(zNpہ/|6LAQ{&wqWi%+q׊_%!H@B0a]-u>/PLGo<'KUEGY$Θ%$\ ]>u^;蹽sWlk⯅ܯQ-j'uOQ$& +|VPHſ~K2 @ųqʃ6mldj3$Qt ۵bU-6C"6ٟ(yVX*=8Fvʧ&v,Gd5Z`ɓTukDdtYr~op^ȘyV+ 󺺭sZH}~xx[+uu%ZD\{Q2$'Ɗ le\xBn-?tBFbu!H5 625! `F ~1} r wibj7lTH]l: I}Zk9LdLN mY> 3yTu%*[ԎkEl HYiM4 $.H)WB:?nxal$0%n-q1m)Mf0zNňmMTM.]y5?Hk*p\$ECi+g5ekf )e ]5,)$8?xX@5fV.tzq*=1}\m %wjԌ?D,"n UV/wy][4QK||ڿh 1z&w(=sY}Ț]]΀ QcS $%F3,iȄuQ~@FUQ@4i>> f^qi/B<>,0 #c;󸘺7Դ׌J(g M)DeZ IQ,gK^dK͖,}_f;?e~Ss̹g>2XW Dݹ.ΔV% 6 IXtpYe*&hp%³@TS#x%*֠㕤Emq*S^{ .l|cY-e|_ؘ:eKњ?Jo4ǕVhكc ?iAܽyׅ2݆HghѸ32\iʓ'e,tة*=գ>:v{f/{h8m@?H ]|E19b0 .Ć( mmb W|z̔n6m0ՖKώv/FR+JfhEOw>9ZO! =z.@ЋCHq^_%Ɨ*Q4Zo_x'tW»t̵P'9/u"㜥6Ҕb}C?Z}JNnՆcҨ-'HŽK_ZZgF_=V]) h2͔_QASWGWWK ϊbQ2 ^V^#\uCt?\J+N>ހ_TwD$qzvƼ'r3aNǂ:m I Y<1T4mp0[zqW̏έ"@da.!^F^'?^̩g;ϒ1GQ!/ V=fLk߷:vrjMa}GW߿v.vM>:۾_;IA?^u^'Ug&b.ә7V=X|֗=WSWW^\\TT\Tt9^]y#_<̱wΑq\z"&#wzߎ⢢rn7QqQ ?ò Vh{ .aaUۇ0޻}bH? (N + ]m𤠽dm>>6mA}^ KBL4b: tнh|tzgzz?9k7m9v4 6%E.0v:@(0C @ ],XF/:v!? @LF{ ;[͆"q9Jb#v`<^񭅕e6[;5<}ә5m:[sv-a ĂHX/wYG<'O{<-0koVe~jcy߿FH@W[9PU{Ym'ădw)̊R{O s+YK] nnn_ KJT*Fk2qjŋ7|Ъ6fVݶ%}d /v46}}3#;~G s3S(-IX<~2FĆC"&09G.z;VAªշy8߭_K_gsT'O$Js&BK1Z{m]Ze~NK],?_x1co⤞(5Y,)oPsV, Cl`+ o,~lԈhZm,n}W峣 [Jnv=o?1L$!UL̨;;r%t3.wk{M1 B&۰Ნu{cXW]GAm\bL]9BD  ۔9Zr$s^2W )O8j(uJR:4Z-.9A `\[9[K.Ċ$d@ҟ4oeH"ohV,%- oXub#VSutt-V4eA)Cj2x`W}}mICJ?ZK5/τ@՝Bdo! x4~IR ȏٱ;*K*ɷHDxV&c0r꫋hbjbe&Z;~;!PhݵFU?hWu<e$p/g,rKo;$3=tb(ՏHT <A^jͼN$[_+;eQL*/'KqɔTسBw|]NzU,{}:/1EW6͙z9U1De9"W.kK:PE$tA3o' *Xb_\-yi]t-NmA6X+n./܏,ge˖- FԢCCKZZ~3y; GMo!t$5oǵеz]t =?͂ u 6zq 0@ . @ H7 62ыƧ]atu@ ]gaؔrԽ9n5sZD߫G&7Ҕ[} 7ۜZ띎m2w~U<yܨŒTcAe"3SHJA[˭LNr7wHnѝ]KGL^%Z}mHgLa #}ߪ}œ&Nӫy 'v:#AVy\3Pn@1ky!b#14m'G|-4dV8amJ\G>8OVZX+!V<'e[Cё#˿>Ikuu;M>˷8BQߚzlϓn {:6wl(O ky̠_"vʟ{|p {%gPt;-04mR7SFhTE)J2rܜw 9{fNvvלJMX4m/mW7$x݁Xx}=h0F(DVUk{ Deg8c'jOqr_'Z1OzZBv}\R8D^Hd0^OUb|j;^ v3z?%+KO>q hX^mp0[zq+]ʮτFANM3ໍ^7 g`xySFU,QV QQU͜z],s&1$(hk6m=F ~moKᕶPV? `}>KNfGX^D{vkNr1=x5 =l+v!jX!*2)r˞J h$+ {ǵ'bHP!o 0R [6B+|C^[n=*6eæ14q_"$8)849[YRC]7)W]ະsl71HF{JA]^ǂ'ؘ,&Y]ۼܿ_a1Ydـ(zc>TkG벯{Xm#34?/[s䴤HgFgu-)\k'/>ž|/xC/xP OB5Y_==46 rˍj!SWws~eDttrUi{v>=eRU:}}GLE|hh}<_l IDATg}5Q*xx5xqKyk#x=4ɧ*Dwª^x oDlxy)4AxJ\#G2Krq>AKZ}x8l>b!ߧDkM7nΞ`;+: i>?vkFs+DqTJ+3^}8䉃+w<^ 9pܛx7|̭_1'991YM] Ǵ_R,n}W$<55!60 )${8~Kt_uW߲ lm.$"*@c0*Z GPx4}I ޗٖQ_4 /"@Ehe?jّ ς/I1;wxYz? @8噐hYhf*I`#_:Ylw瀅4:.uyil} { { =pVZIT<V}|FSg/$\;qvC KxD<  !6cN1C'/)~O5G3~eTU/NGE?B&?:{"9+]˹RzPܢ)ҽ}MeEg"0>z˫xDC ^K̮EQfMs^E@:PEUgp|ǫxqnJ' *XYs?C3~@_;"tń o(b ZzZe Q5v^=r؂1~KکCv-ʯCIW;ڀ\AŁY#}F}wzp.[nX0:ԝIh:Q Z~3y; GMokk3BiFvz~l5_mI;0z~ ?@ 5"iK6zq 0@ ]!+"ʟ[tgRt3Ssǟcw^MefJ731Ǒ2i)}OJQVt],#v荋t3yǟ~3.#$lMǘh>+GGPuSnfJQnZTDO{uى׆$|άo_\:溝&q[zl(Ϩvomą!GO tJ yZ ]IVΧs>swXj_PEnaUb`>11lسqrOCfF4H)ʵP5xEyzlϓn {ְpёAJ&OJ/Pi%*Fw%-<7O;P3W_ɡe?ǰ+h]+TTyGQ+4737'$}F ZtޅBAݕ~int;5ǟW*=&pxmI1YuZ<7"6zpoќn>rڸH)R4FU#Rӓ(4,9{fNvvלJMX4m/M궈xEnAMhKh`&G4s:Z5o4kd]x\В{ t0Yn ]+4VD_vffjdې%b,*Ϗreñ"N1 F*1[쬋&iV?(CNB`'CY ljR*"tn9zndޣF2SrYܻoGOarIí'mJDP0}?˼{^zN4g-Vs#mLm8xw/ΙkNs^2Z-^ qtE!Fj$z8D^KՏ-e< I"Dx%f)Ǫ79'GM9t?\J+N>ޠ0 *d8߯0 KUS^x 2gg{ 7q:a1p/d},l#^N&D-yNiiY_HB U)Z?xU5xeEBem6fbeU8<8D#i+ hW&(Gl +MhSkr#cS}<+ߛ+{ژH\_l3&ɠ!WymBd}A U j2}N&Yߗ_}UdPPfyn!~uQY]R!V1DE&2Qn]IdpC{O'c?)Cc{l>2>:q%-bSF:IAkAjRGF]ڗPum߽HܟtSf[ؤt$nQ7(3?NyX7'!=f!Ly;jP@R3q۳HfׅcAR5MWBP{̡!x`( \/asL CwEken`YӶ uD .w=?͂ u 6zq 0@ . @ H7 62ыƧ]atu@ ]gmVf6nO?NNt3S3֟yUz `}sx;)=Hؠ29QY1*hq/@LC#/6m3B# V_-L\FA}YAyz/|+"R?`oFBIDJJ:%i J5X}2 2>VBDJ*up>2~MgC>2_uTIOОĞ9 hmYiNxXN^ߠS:D6vn5GO8-w$ȒjWpRnOwwK ^zh0kzmny[Fi˿I(a"Q@d !/N@s%igOp7/K_/6DVM_SPU "QR2룖i ة Ebkn4uM?yy&gnlڭ+ٺ(v,$?_JH4&o.M6xREFH]ªBϷa w^}GΣbdžy.fdԍ'yj{ñQ+]7n4ۤP$R1O.Jm;DIk=^2υ;Dh9xGTP75}IV7$@UJ6i<3ZcZ蚢 [&\MjkL-Uz~I,$3;9%5> #$Ef>*D)K.iz~ ₨b <<(Zs=F]?+=_8oE.Hnъ'G7 ḑ;~ski p,;ыƧ]atu@ ]g_[c/{lب+c{#DGοq=ݔnF0/_Vl?}.#4(w|) :=bh]`߯6HŴ[]Xy7)ʝ;GQ>b ZsRʎ,ߒOtg+zվgx ʏv!Ai.=b{f{v@n/J1b!l]CEH@f0i͉J&OJ/J+2`@W3}jw#;u/ GN3nf;]ftQ[p>%?”nffA/|kS{N~ C;`3zC$qиq^9gNޱ}5R#Mhkc1-[\^ `d7a4 c&]\ %'U?8<+y[/QZszw  *zJ-}m|1O?Uw<1٘^ /%?dZ}y͸^Ҡ-N^#ܴ7_fWj5xN틄EI1UL̨9-Ъ1ϸ\!5/rxn}5q dY\Ƀ+ ןPFnNLJix%?Qɂ8E@PXf6BkN"w+uAqKchBOJ"%@tHsC p)@dՊk=x!*d8LhdZUV rhO:{ы۽U/Vl˟Q J;R/!/3y{7\к/PX%yR7SALFKmp0[zqӓ I>t)Z}Jbrbv f;{qM񮊋귱W?|gJ>Q**-AR=?>p(6Vщ+9l~*5ұ^sWV~cfnMkqr=l PFH\ܐtg_,Ǘ.8'\@ H7 62ыƧ]at@?tQ`@ سknt3ӆV0ĻȮ ޜY7Únfj? Sn%'l{)i ty '\ܩʊAe榍b53jf7{'[l- `<.E21]rg[ w~jNJۈXA ILRqCV&q]c[xiz76/YANV(W'<-iZz@%FFX[%p!z<+I;bHs3SqsB1~٣Cgo=VAch?DD[<Y8/߾}ǍJZ#RT*FQFhTE)DTƟs gU>xxԿ{_`dGTjk>2U kX:%͇P>k&/0:nU1DS,R02Tz;)E7.9%>\R1ĻgnE3Y- N\}QzvԵ{7\Z-?7Y#eE&`_ro$m ڛ^Vg.U~W4Mw}%߽<4jnC`"WTmqOۈW~YxՓ;?L,/` 1}؀D! /op$!օvGZg;9Cz4MJ,CN{3x$yZ%}QOW3<9[-Idi/w둉<g-)ַL̏:ZO2g{ܳvT]֗E]{ ~ݢIc&@ k" B:轱ۯh֕ IDATy/tjAB@'os##J\Z]'no1^OUb'.$Y_08Yu wKӮU)kp] 8 Q~Cu#  A^y;>|o66$~_˘ZjHb ;7lb~4\k4D(//Q-n4Ǥ!zˬUS^x OTRD_W OnW+U_˞ӧ &4Zw/JIMoד 5Sih˪khh6bܕ6 NPА >9QGp⹓A)m2^FiSW(wA?zGH XkW X, Q~&?ht,%Q3DéW>0Qv~隓\ 0!5,}YgI>p 3wATP\Q/[9}9{!jM^7xWuI?=x{wi_B<±ק#kQ{eӜi뮷Tі9Vc{|Leܲx'w2֜AO=t%㦰Ịs]h!d G߂ǃ!ݖI#GN7V&:3F,P`O ad(G`>eiY!! @ _xyg`|6ErܨgEb3?6zALŽ "#qBЊ'G7 ḑ5: "]{ ?3`c֌^tp߾#B HE~vR tEĞ\s x9Zҭ'8 ;JHc.oF73p{v荋t3yǟr讇7Ib{Glqvif\6kG벯{Uh:l}Z'Ӓ"I =h]Hp!…8?c2EO7Y޽&c 9kU'Ɵ95(?}cwSlNq]w}~3T[ }N? ĸ~g3\61_ʰߴм}+S% :CG=sXDu8SZA2,.RNJ+2`q4T%v_bf9D0qɺ6DxJ\>.`d_ھ[sNz 6!ב1] ,cwi`S'j)CZƤd)[F~inW˥u,Zz<8eat|w۱.^m$fJHcAHY6VS6kWֻ}o$hBT,#[88܅ck#^ ޘrA qLFOL6&vjR*͍"iq7Zw>Ӷ3X-+Vb dY\Ƀ+ ןPFnNLJixլ:rFV굹/4پ0ֻ7h}V &ɳ-WM"0Bd 4TMh@Z4Fy5t >NxQ#Tg?+Q_^Hd0^OUb8iEV$ -^s&l Yw|Hx2fmi/YvںoYðPӥ (Lw3=!>#KTp ʙߍ%HUSF8噐hYh7 Y^*pԁ[+yeG#F|{Ud1UZ8Ur ~ 5}yۻ $i5 hsTr͌ Q#OTה_?qx%DhEj4g+%(o !-9~'9)>:|AY@2 ?&\2y!lwz}v1 0_zq"%I돳}v?X;o2˅EuduŲˢE2܊s~⾸J1dp邶 >}r상?0c~[BϤf>M񮊋 1De9"W._x)lDF@˪ȶ~F"dr'ޥ+gJ}^YJQ6j_WQQvIg'tX[6OTG'ZlH>x")K(W]1!.X6)&'BИZۭ,)*]Bʂe&u<)h"#l$Ig΃ȽQ۞eF2Cr(!n8j|7es֯Z1"莜ɽhNX֤mFTzDlKY *ZZ%G4_iY"xڨɮ7DmRo"tlӭ,52kUjD,RJk qnZ5ف=Fn,E{5l钝^H:MǽюuYaF/:hz0F,s9N4Z"i'@~e|}Ybj#`@}E ,WD2XT@~ S͂slSr\tiR?`xQ @ "?ZpM1^Ihy!M4qe=:elv_8Xt'2dY8+(`ߘei?jz8wĥ[{'xEAb0w e4Row׎bn 9?]֮PNܾ6$3u&D6ƛ~_[?6yhFDZˏ \:溝&q[zlzQaIzH0c^@|:3wW%Q<^u v܇lO<-@!Y~DZ* FƮ]IjbfvIs5=ltd 3`ԾQ yX|VRi(t-K Q@XhVrx׳A8|Bt'ee,. 't%Y+ľ2^-{) _z $J~WˏrA֘,(˿ "Q~!QJ;b(6V??j+ ȵ7Ug5H(Dh^BKNcz6pJ (; "skQb,6>^ ۖ90r uR˾pR*X)iWZJiy/zn= XpK;q7=$!Oȿܰe#Jj}e}WRhW!C (He)놭//xYvӑF[L|ޖ(**@`^t0> c=?tz0C oE@  ufR&6zq 0/S +?tEoc?kOϋ8B/kV8R0 %?KLxUƓ <޲Q=Y\?X# $?ޤD;#oE?Aˮ, jzfL_;DH*lݜY96 γ&ǢW[l;HAB@Xt)6q&dʮ|; oW4sbxq[I )mbz_y;m^d p!e0hg77$5Lu`,.R'aKm AL&ː2crUgfZ! >7"6zpoќn>rڸѪ6fVݶ%}d7&GURi4bX 0EԞya UDCueUtwgMRiI~m WvLݷ!Ѓϲ2cvgI-e~N=wHP3Θ Q7Aq;eY.wp7qRONz ,5"5^y~⨭k=${Wg"K5> J5X}2f6~{5|;?L,/`23ݚ^~wW^z:+;k<('k\t oy? ^ӝB~KF*iPh@0p֢aq.0]+ڰseW?o=-_-sh{K_:>Fn^Ͽ^l2k% t7ӓ߱C0˘ZjHb ;7lb~X>"y4s5ԂUi#D(8#*hJ@Zԉ;ξYW-0$*C#x<"`zD՘)c ! 9(AC̾/!4F٫DŰ![EPАg,^ua b)#@ 4ڒ Q/qO}ʫL?6l&&"zV~b}UG9D[5y߰20ho muI?=x{wi_Bb)@V(}vqWd}\/鶽V?KXXU! nߡ(O"I!ae c w?O2uGC$oǛ&&B!6=z=P>R#Ft1?H~eT}}  ?_O=?͂ u 6zq 0@ . @ H7 62ыƧ]atu@ ]gaؔr=ܿقn6lԌя%q{d2̴պ'C+{ޮu0-uiUv??p#|r-Jm#Enn&i|=,z?iV)ZbQW żI݇@~ DJJ:%iFITXK).,lj>Z(ɆGEJڰDrs%Dzglک33gyӾc>Y#Wdou{f *ߊܡ.&4WXUh_c;bs8J,Ԍ/wai?AتpNޟ\!Z\+דCg'ͫS^yC>l $=*.!8k*Z_Y .Ǯh@l8P!iSL9#CSuVa->ֺڰY,Ir/zM4T$5G @ʼ-v?l2eh/Ze~&.)"L1Bcu4*1b7Ry/Vҡ ê%#g 29yTm/}}.O%uIh4/oHe8r >FQI]@(m#+1QYִ %kpUVR*MT\/?1#D"-!*6$BTؾ*]le!ftvLI[,oέK/J^Xnjz:Qg wb7<䠐Nݶҥ KʚS_q(ٔu 4^TB&  nj6*V/:VE',AURw*1NGA&,Iw!!^O]Ɋ3:fy<"uP^[@VP&#_?FNՓr`=#1ilWdd43U~ڂWW2 'ݮeln۲X=fyHn@  bގunnZ lx}~loJ{^vHOB)o$Ksf>kYv}].~!α; s1u~ЩG/=Bw!E A^y~jm~:lFTLÚ[lGm\|AܣU˰"p pdcT^Iv qtP-8/lܒj'|jL[yuzm  @q O#%uJ79g Q!ųOϺpޙ)gx;M yi!͍(^K6$, IDAT]Ra/C) Xu/c)O6mɆlu :҃R`uZ|51LV] r%"MᔺsvbHT@CVG )H!cZ^USNz$@wpc>[kF0',HkSp7@TFL֮8rUa=bi3dAͳ=s̪ݏڻ ߜ|έկiw;%"vr4vW-锱- Vkc>҅<_\z(g4PtWLMNEj՛_\t2(TJ(x,t')0|h@QaEC.wq8C-wQ+ Iw"M~)מSoMMd"̙gg,a`[_ժ#*X3ºgYJ E+.$'&Ag"]˛;_:N)^\el` h@ĂJM{rc~ǯ~}GfI sA]e*uT)D%Mv$Du/CgW?N9CV8٫d8Mlכމ)$`LhMv~8oyn{6p9G¶L'kp۴e '1$Xj5BDZq0%ZT3>f6qIڸ*g.O >B?~c9Ў){RcNm[}KE{9NЌ=8ZɴM!UFM^nG,PcD0Y/)R*EV͹plK:3A٪@ U\X&{Vqf~[xQhfF7L}cG<`|$ c!?Dd/ys8~D`y7;6W\WxH3S !!5mHZ߄i>d&;V]YІܔmkbh9t+ܼ:6 X =g[p1p`::>5Wr R-da3?@X5H?Ҝa:flkI73cZʔ_ }=bNnaC3X*ʜ׬^?_6wd7cԾqcf !ī άZsI~w272{#;7=2rB~s5GŚGj+$A]Z=Sf !īyE &*Ț#L e^oNyy+ZgDwnfSZJ_|s񹦻4*1b7(K7 ?l{@Ё:8[ BVoH_^@sR;>,ǿwM㷛鞐(=eفJSVT[-3u%l^] [)5КJ`h?~lI!fd GȵWTk%:c|Mf}I ˧adc0}z->_|YӨ"CWѦr M/Inj".3f&x8Wd4ho04-2hŅwf޽3c,d߭L֏g5|As(Bdj l&{$&-*L㏝fP89E~ C&+!7g_ՇZ81ͥ)Oړn7#|K1G"0v;@z(0C @ =/|lecDav}@ =YCio9nn.hխ dgGZNn@_/ﰧͿ%.ʄBi+ҿ27S;jFhZ^ql>k1ByݤE ;BiKekK>g9%"8 oI'eB =kUAy[C "ɳC^.aGΖ7DZ_Jc颏B+&.S"5fFvSE+* BR~?%;~k=M̳3P&3k?VoOJC\,+3G>KRg('@@22Ӧ9#T\Zdy.(oGiFBѩP_J/GXn<BMU„8hːϷ녟* Ul!h9ȯ+! e8r >FRG Rt535`6@TP%w"=j)N_iʿDۀ"8!*DEB ]Q O1`aL(k~J14yaݳԗ&nAD!F?BnZrʹc PBB]R ~2ո{Qm=9)=Iw7d{}|{֦Z.ȄV74K0ONC@d^~[/ 5dU e2¯~~q./ڽl[E*Ԏ$8٫d8Ml׻݉M=c"ƀO'2L­@Ey cz|F}1d}8ƑUuL`xNJ r6 #l18m_lqf!YzϘmR ]Tz~Ău >fyHLs~^HYPVqaM[i%@}귅VkZi+C GłL|̢0@  1ÕЅS Ei9ig-b[N?gGT2H AZd?9rNܿ}9W-diΠL'5(b52DqS`ݘ#aW)>mܜBT'?Z}vk/'?/#Nea :ħ#0 *-_{5|4auf-*ϻQ9;bD=u~*-y&he 3>[G"KƼC~WU",N#ȩP>)Ԇ8^hmӖf-{?ՈAkǞ9}ЇtfGL#%,^Y`M3Ѝ{)s8߭N8דCg'ͫS^2?] 4Ys&-Nc+6H5y4U2ו A~42Q%7Ͻ1kf>ImجE̤W,\0֧̈_-!8l=h(م.o/v#~q1V@QfESd@@m,o3RrWK|;$#*Pz[&ſuH\̷-=D*Nv:!ht^ZB|۶u$0)кW2vo0~];q:M%-wGhuj$%)c(O@r H Pܮ{R% 8ڻIWt1m[&v0=,"}xj^֧/&mD,.o5-_+KSNڋ Fj;?=KXTk1.˜~!}F; ,:}w (&t>V2t..ܟlgb$6? ` h4Z.:5uAQۇ;~B;a?:|n9_864e4nvbC5rzpC$0$}{mhQ!`Ѹ Bn[O]r 묍s_yN̂e<+5ƚG"D8^@^wC`{-~T3>f6q߬%@ϏX.,:mxy,xcIP~͟?$u@?"/:,྿X𱕉Yt0>C@z"2o<^'IL宖 Wjm wZn~¾,l__HPgE<םzDY 6)r0gSz`)HZ߄i>d&;V],tC+w_IklZ:`䄄䄄CEWOI}Nq5kCz_r)jQ+":v|L;.\ .جOM<c>_ ƷRb OV6Ӕ]A2 (ToB^ª<s3S#QzYx{|wZLHkɿ8^]ߵЫF?~u`X{;({ٱA?ZͭxLiњȘg&F4M>f78=s{  YNN;_4<5`VOG{f9}sjaVPg9}ݩu(BVnօΖts"1p)1?Yq<78< ,'# D2_ fD,(SſKU͆h~X-.y+qOkxAI,Ԍ/w')c$Aژm3ta /: +Xxti[򤓐)?7M*KB:Π߿ ۇU JFerm@"[|!qY-6m]t,e0%kD ZSDF_uR9V ̵:ʨ)dU"ʲϯ+!h)N_iʿDۀ@TRW"B$( F h'?ZU>1g(}L腋妦spufɁ|_ruiX,2'mRo|~_+IQzFMQt@5K^l!^1@)L61w]"ePh-kl˭O[fDkJhuf̍⢦9)&޻1OKo/XPrpөV:cI&%v2w!!BBٽ'Z ~Rq2TEY!ut'q muDo?x6MN.@Y:,8[-^37\+ky6':va3s+'ܜgErUʦMUJ'N=Hfzx*d.M 'UαB KmYnQ`3/U[#?7j !p: Ƹ[4t9DڄnoCߢ*:D3#dk?flcZd@VkĐzT^ok6>cAjLԩ v3Q@bo" s{Hq^d ?WSŦ["AϏX.,:0i~s.:B !kPVqaM[i1@Z}귅VkZi7C GłL|̢0@  5?'ow3l<^0ۆA7r~3`=Xkk*E4׍V7{heO kxڒ9?"k9O \V@$wE^j9t㽱!gv[7}:lFTLÚ[lGbt DM#ӵD C P(`Gf,IcHq"c:{rE/9"58*̽c=c Iٴ IDAT wˡy%7w.2At]1jTe>ΜAwٕ^K7BRѡhk+)_~Jts+'ķ,!e$ݷ*] .-d`HïyesMv?KITƆaO.yY‘P!Z-VOxnݖ}]qe+͎g^]Q;b_5~2|KݜAc>i}8j%GɌL!G]~4˱^9̮XOւO -eX|1(D½ * BQ$X\NF;~`+jK-28=)l #̙gg,a`[_զQ}–ӧϝ:wD6yE &*Ț#L e^f&.)"L1Bc5k^!Q S)?sZ+$ hNZcg,@%K3n'deJ+e+42UIH{y5df>Q:)yJMe"hڻA90H1s }M%LNoe3YC_ }Uو@TP  D] <]Ep)Ѻn1WhUn>%xHdM7fzW K~zK < 5:Y _P;$AꃦZ\xp o8S<ą@$wG)梬/{gUo*++--+-r)2&[4Pg=#1ilWdd43vMtEwǐKiX'`Wʩ1(wҟEa[&ԓGm2Ž tSkȽG ՠ4۷T]^1$ c+F a/-,C:].|̢2F^U0$8DxV>iۨXmK=?J.o JehC޵ h/Y].g |̢F-A^J/Ůt|7p/]|E#`p@z(0C HOD| ~jh̓{@򝠕)>"s$fG!r k}6i^XytyXf *Xy潴WɵO5B #njhCnʶ?qp@%D /^<>[-=4ҧ:"daI1ByoDa pm4C׫QЪ%JP̌U=N|hr c~&KL?1 '70UDR`X**7rXssQ!#)7WsTzVr S:\1uB@PHL xs[:S&jؘw32Zu r /l;A6:[Hv\tޕ7mtKp<5DTCG?deFO4 y /7#K8@0nfɐ m_ܨ)? cO 5hu73cLݽz%G{#o7K?1?S/[b i_ZVZZV녩GC Μj"J?!j7{ȞK/!JlG.~}a,.c2B@ZzC0wPcDa @ @>3E#`F!br<`|$ cC HfҽAq*dV\b4kͭWŋ]k|j-Xnmp[n_swkXlxjga~uÞ63hw}oX9Ewmuv`3茩N=kXAuvNohG:E.r B R丏~Y /mGoBԱ c2K6SXҵ8 uh4M[,12Mwσq^3+""21)?L2)8op_GͰYz͍]f Z%zδ$(kӡWSǙ3>ZњȘg&F4M>f78=/ǪBVnօΖts" | c~ώmn޹$9+e4~o遐$dUNr0aT'N n3#&!R-IZx<厀~ Ze駱V+.L5?rDNƎ')cTژm3 *ɠ]ܜ|ó@jĉm&!o h/}pl9WIw 3!ҬI_A䊑.Cݹ\o H1w z3%AaOk ,R ̙gg,a`[_jίiib;cU@qzPUA^]] a鮭rDЁv:M "G*~gҌi3R;HO͘@ҽ Sk.3Q|\=~ma5\#QFմJ%Ru 7T%!_Pg7=OIC(hUi*ثוԐU0[ e8r >F;?ZU>1g(}=K}ny[2scQTnN!SU'0t궕.agXR&ߑe%u ߟ$.H1yPш8dCʗD~ڂWW2 'ݮJ Սy`zelZwswձ=[\Q8yw M7 lKUU5k<~74WswcW_{ >j+ݱϿ4dlce)^nێS_}y]Aw] 'ԣz\Co({RcNm[}KTb8  I|]ƳRᅧBϏX.,:0JQߕ]CBj.ł >fyH\Qj.!br<`|$ cC HfȔ-b[N?xـ6~p A7("#Gڃ@`tsrת\ )mZȔ߿ckw&ZZwm.`yO !1Ν?Wf%KT)kY~n߮3 tPmί^4t =M/5O =P6Hdv G%y@ADIAMu D~-,z`5RLҘwJ$i95 < ۷sa{@Wg Vm뉞{0d8\׭0S'ng5:-ЗOcTO]J}DA]%XRy%7G\|VIB/N|;?1r@ץ|nkX26+/9i8Rty1Ϭ_#;vW@~ԁdbtmKyhr1)0xw˖ߟBjFW;}c쏏G֞A&%i|?n6z-<5?, yvКñgN!Y/֛ugP/o?Rm/t!(8d͙; ze_:o}fq/%z#"Thr!u%u_\@ԤY&eommJaA?@{t眚dD%XoˤW QJ~jgyٔB BQєk~mQPYG޴/JPҒo|W^ mmGb^eK" `X~"N_Xh!p(I? 0hHs7[luO/\+kcC@,.o%nZ^4-2hŅwf޽3c%02%z~UNi:3d벿8TnY!)|VkגSo% _"KdjvXt_P~M} .˜~A#5ޝޟ%h,L~5@D0>xUTY]>+>,`e%ud`?:|n9_86ʹ!X6v(e}{mhQ!`8!+~;k(_3!=ޔXNDvhqXy|D*xRs&.7T` $0C]Yt0>;v1G"0v;?P`@ /wdLX쪱;߿v$_zFtKqNmUnn0ů_u?=&:iW}lch`B+w_L!M7we~<s3S#QzYx{|wZ>rE/9"58*̽Yevt=F7X1ނnn=nJ[ba>?@X5ć/iYN7ij1_Iy1mB;; p}Lv ;DR`sǛS^og֙2QݭƼٔ-9NadѼ>Z<^HP2rp.o_Q6YU?|O% >}`h?~R6iI #uv#[~!ft6FJc~}YqG ]zQzg9Ƨ}i]fL#qFuw^hިXi;Lye9CC=HsJ`9̏Iw!!^O]Ɋ"Ҧ[5O_q0*8sc?Tc+*L0n-v#c~n۲X=+X!@H)Vh?p/|,g1G"0~ Zw DA^4dj #X,:C@z"WBN3E} mts+*`͛o=LDa=Xkkm,l/wfqF=}/Xl|[|OlŻz$^W NEjk³-w$FZ}עA}8 }}u)$aY 2^ݹ\o H1w z..*B P>̦w~^yB.OVc+qH EDI@+@H50id/btLB/P *Z@EAT!|;&kppk GZeT/2?ZvI .JRS1P T/jOBz'ꛫzLj UT1t2n) n}w'ʮb6(+mPUrpөV:cIٗ2hu]VXCQ%8o"NO}4GG?՚l1h%1L3C\8?DxS޳QN}{{Ow3H"S8BtdxgcⷜDѩ(O5sõ.;]j;?$!+~;k(_3~߱(lkzM[&QO%#ӷVlnGh-6WDz`h ITH{x&jd0UӟxR] 'ԣz\C鲤 =?b<`|$LQ@ q>4dH'bL,: [a[A)|NR9%@?P_,(E#`p@z(0C HOD"К=<,?A"2gSd=/Bj_!1Ν?Wf% mMٶxY'E~+ܼ:6IAe ~EtBrBBrB]&S^|/O?Х# GiΫ}s&zSצrE/9"58*̽u_zH/w`x WH[7j*m!3cD> > rj::4MG]HSסth459M^5^៧ho?c]3ڻoN-ljHPg9}ݩu(BVnօΖtsVRQ6;6g[Ki~+S~1 '70UƉ L? K…@އ3\{=nLaME\Qf葿}EȔ߿%"V1~,?\C (rDCEYs܀ ̋9)/o7r3^LV^cclX IDATkKx3)[c^bߺ#h!nIҴp$k諡*PH٤'>+\o =/Bq܍ia!ШܜB ڊTSӺ7ILc_#SQݡW?.3 Ofoqp~O1@$PUVVZt|6ʫ||22?v"B`Tp~VV/T ` e!k~܂' ᯾ȿ bwm xmaQ0 s4gq:Bs #^f#|K1G"0v;"utfҳafh྿X𱕉Yt0>C@z"ގunnS<ۨъ^_YŭW܅g]H㳰It:7߾ ڌ U0y{B޿?-?(!hcO;᎕Ge$cvD2ۧ*z-C@zDIъ;v^rR MusO,)Z"[~^mbo[EY} OSNNvI: L?"$V.KL x/4ܹxXuyD,k@Pu8sgW:c_tϷg\9shPضP#<}!k)e`Ih3nY;$?g>x'e>[veof\6:J~Dw;%"vr4vW_˻PwNݩ@7o[] GJk{CMuOb䪥cUp7-tHAPnG-BӓXQ.{&s(k9XW}~y!qO?S?5+Ĩ.M{ݎzך~a++vt`^J|aE* "GsJT]?52UIH{y5df>Q:)yJJMG D[랜K+`NJ@ps̈́X bV()GV6@Epin >qE~2hQLët {RyD#hv@$ IEOWV5W@t2TWSSKSSKSd*#b5HQ]G>LZɔߟvבmo4\ƭ44<~3Cוn >~ h-yyyWNܢ/Bf 0$`THiG,PcD0ʟ=&'IFu|%޵dg%7%P!ZֆJ@[#daff,Qd;tݶe)bwYt0>AvÈV?:%6PԷ"kƿyaGQCt=A~OQ%1R#2@ )bYt0>!?Dd- mnэ? rlj"qN9NxYc% ߿AXs{TUSM x[ !HȚF(Y0B< H )(R)oss[_F@ҖXO(A23VM8u8@ߟ@jFW;}c?_?TUro`CFSoX3*#obZ?sfik(ʹi (;dMrmIW( ׾R)eμ̠erd:ƙs5Ϝ9=@?ٟ̄/7^s&5=#a#vE&9wB29ZcMHo43 ߑk~ܜdjz q  ëezwKYp\.z3{CEtcʩ}q AT]^^V&U)7,:seoyE#K+3j*q e}9PR[(^BD{DD]x|-tp~GM+\ qy̢W!`3]NaBUu?F{q.r1A$Dx8^tx|S CuY_$l`c/:<>bcCuQp ꊤZs/dN6sXfN7sej!Hj9LhTڤyA|?ƸI`|;CnJz_Z5&޽ȩW\(^CK֫_JI<oDqnKK9Y* :-vεRIm\Ci`ݿJLΡL;>PWGnM m#86}OKUA4|n*a)X &1 $A {ղYfPe=#SVsH!lXjCv tЕ_ ?Ș] sl $ ĥíg~NZG:DrmL޸A;ߌܔt73+ u-8_fvwj=G7z2tSRV>j7wx[ م aMbJ:оP*9{y.bb> j&Aj}Uƪ&Y5Fe ]mC"М{J6#kr䤛KnNI (zRK҃, er&8MNѿC@ $a/ @%ol eUC{g3rY70BgT3x@N}i-4>gJ>ݙͨ6Jz_D =e֓Z6#Gަ(58p7uJ-io^~]bnB8T|sjt䔴X_ :ep7 fL_AkoxebЖKNKKMݶ`NPs`T7ͭ/kQ摀Q;xѶwo\H-NB%M}qc/\Lp1ٽtH+N$+M+}rPe%ާ]N [0 H\p*>^G[RY^4iWt w߱ Dqj^UbsPtr>؟o/3v.}kUHx e{RKnU3I#]Y89]RĶ y ;ԠV+znBDFRokk<*w<>b!Շm|}ӢL]cѡ!gUta7qc67/~h<)h`TL6LIkf5/.ua#m[9Y<}, o?^ãg+z( H9$O`%I=Gpj$86P fDʪ pYI)v"1$}o&mצ'NA@]l3Yr W"#/Mlϥx,:DȾBhzn؝:@cJDqx%UYD8 ~*Ziffc}4zIߤ}#6%؋XAPG  uq){q x;x ?A]TRʊ~L]ٚjBv]yiIT_#N CЧ3^ۯ\h-W4r AƠ(}s|ϰ{  xM/+(s\M ;,ٰVJ[ N9xppԱfTKG-輖x-9:%oxp>$vyG"2jo$r&ͫ׳[cܟO_ YCЯ7Y8v? yTC4=@IV}NcA5^^{#Dsǿh_#dQe{Ye?jRv b#iyyw?PMužU׾%c7$VLWDi xU2a=H!Ƅe޶F;,Yfyp}Yӆ+c (`d?o؋2Sl?|/2^A]C9 $r7e GTSEkh}6$߼=H@ ΓyyYìIB5դFMv]綨9u_j8_αdl@ZCciퟙ~XdoxKI!uڻFLJP6yPEVªTk#"~"S`ݽL rc{w>d 1l"BDV"~Y.ǟ 1AA̤o5l7enݫs2}3TCp#fZ۟]QqчG#ZMw4&ܓ1E6( 9s[LC mnݴ,L'.hH"A/CTikO$fD=miƈM?ikFs o-McezXemX~B5@W;aV ~Otn ƛw̸ ;?"a#]8<@uQp  ^ 2Ӂ!(8Cu8*IUNMԮYfAO[9V3V%{[8~w^{W) ͷ&FPڹpmXW۝ VNQk℠zknuc:6`ydI3PЪ?V +xm@?,u>c]x#D!Sc(3'a#3}6{Os`=aѮ\4m)j<*jϭ.X瓪iǒV&+d.o|1K&BP"[c_%na ϭ ~-lt).R瓪?|khc7j)?Coa 7.2|Fca Εޖ$ʺFٟOW[`:/txͅa^tpNA+ߌStCyڢ:""O B(I Zsg킓5 ~_]C\*I;cICP'W(r4@-:IPUbg~2U2-^{c(eZ "LYW2ʿԒ('U}#9~]_^܈ejMeeeUlx$T]^^V&UyǟI،JK9_jPOU ["¶.Ih~]c~8w) r+XrʁAbíbopmaM=mC$́ijOB*uecNj#NuLL)?#r?giAbϱ?Bm& <###w.|#6%؋XtȮx # "&jҪWFa➢;?u!ҫAtmʿwUIYNg~ {qNs\( IDAT'C(by=+=UaF]whRi8oD1B'z_+(v?3-.mkzKUH“7Is\F/]M^f +ÿ?u -N<ܕزvŎ:b> ܃C;?5?*yrn81KίZs71ǮY8Bz|r ~&BwfZT|`Vf9xMK ڷskW/lfOB9Ã"yG&/t~O|>f`ˋ\,m{R5ֶ:@#h4Xҝ,'|Hukm6)X? Ii=H֙x"D63oy9 LrAЯ@#y^rfe/~ᗛV9Bg`WR`W"+r+rCV8{,, կ=$HjGkv[:/G@o}_?= = : /'eܱ? ?+SY_} l/;S.0xDV^w<p8*.ޮ,X >ڱOC?6gQ$׶/z~bc$ON[H!~/5oAPK؋X?APGHܪӨc\Z]?2ςCЪdo =9ZHb_aX*5Y; ;\Z˜dv/[Bi ;FS<+6e;.&=F-{7 ЪM6u%z"=UHz.ktWmdۀef ?ZCv}*3/>,2a}po/sTA!_pو1GOjꐞVoijKvDſ"蘺PK?Ko? $E^6Vӂk^lpl $(HT/zv%_ ?Ș]IәUk.9z#M݋#V?yإW^NEGkdWWkZdٟODZs;9%-%WNM'<م_e,=6?_g'O~ϯg ʺJ2:ϵ6dٟOFrPe%ާ]N K f$^pb…{鐌W87H)ARi.//+fkGfhlF /n7G/|'7,.s{ f9o'(j(V&":UbA[}uŔ~;q!}'!czHױkFV'5?`ٟv~DF{q{/_UwdA0DM]ZJ(ɞ AP-KGѦq[jw"uәćyr%:ez[l yz>W?QD0U0wOŒCT%"NIIv``\JcyMLӷIyq1ODVL)-=Z6+c?/ΛB6[v!H=1/WEyP )lH.~U= ϣ&n^lnF58wnkh݋Y6T+'LpO' gJ:G^=PX/x/#-V}v:CG6:\~ X~G[ϘL[\F@4,ƄM;MIw3R׏7u/=E6( 9sՏw.}kUHx 0lIʏ0 #7i$j w@B^vkh]zaI ݇cOm$6^y ~?b Dfmi0Q;HA=21r[QYQna.=U9wN3{mH ;?"a#]8<^A@řE-C8Cu/~  x_$l\^tx|N!(8CuEњ{!hw[.}1uiW=iTVd6.IlM5Y<ESXox"t2rN=;4kt)@+RMZhy :/\bchp]bb*V%{|[9.Oc{Z?'~wG}Kr|/}fb2"n3!!)!!)!W~ 7YAgƸOw]@P׀'{g#ꃭ=Z'Fs-֗g}(5Wwt)>ĶwC. @0=5DNoL%ߜ}~B3m[HtG" H,vnKӶ8ҨnˣfXܪnC~&4;ܖOiN.̩G5I1Q7M<ЪY6TNŃ+5X:znI@.dobg3ؙ!%#( El!M蚹Uɟ<{V9'RR$4v srѵ{~>8gDw\E} ,5M!7~Jm3fvuүοV5d9E%K̸5."v7 lU 󡖦rS1ږ#5OgV,;荌6Qw/_л&TV\.siTuK>m[%.K^{7+{ݼZ}̏_䬢ͮbHHU(P?pwn(H"gۼz=a=<.DnO:bփ8Oe'qKHnʂ֖_XVNQD˾oCK8J={mV}a7Y[>8<AAAYW]^Fhk'8Od -P07pCC9W(ʿ4^O5N:ݕU K2lx]ŸLQu_ĭ<~Z! d۳'wilxھm4l7enݫs2}1~ #vvx46Ro/ck,8\L(ccQjb1 ]Ta},ʵoChӇ+ʄ]qJ ]Bk[ >ҩ_7 (ѨSxH'6v.H[;WNA m\6BD!,8ubѶIMqcbp,v૝0+g$ہ8`ֶݞt@{}45"d!es37Io?)WOnd}hef%鈈shDevOteGG)*n0IV/'L{0?71oAAE?ZWt{̑U:;n )|-y~I`4ưa}k ZuXI뗟B;E/.{-$?P8ް, _0Ψw`_c>e4^{Sw9va@lZA]W2>wBRCzqhp:Lu~/t 6#0v:AE  x_$l\^tx|N^ APׂ64boH~o5Jظ.JoN3vjb>~oIEET؀ o/2yך_\W? 8#v"g{ J4/ԓۜkCof;I_߱Nb;蕾%(Rw΄+#\uy.&W{oS22E;AԿYA iگgMh?£_(>`κd`zF{x-jp4d?%]}bϹ/]0J8f6QU&I1%SeY 8Gr$Io(u"x ́6`G ' aOu?7i>.ky{4_ڞZl={b^R44ٶ\ʳ],~=7qgs3 |wdjtBRTQoc5-t"fR8KWrBlL'. VN9 kPZT2yȇu"#Sb͕+NНS_ v7Rjn=cs2mG4,ƄM*WXw2h监ffRNwIcߟ}fȬҕ6)A!לIMH]ݲA)VNzP-T9e/^0gĿl'hLí-cNc5SFSChd?Aj}Uƪ&Y5FeF8IU}uhA?Dա3L|`F YCg$Huf`^~W.e/:+ AEvԙU }\*NݗΗs,~[DUD<-f\ԗ?Y9m o9tY%ҳOwf3-!}.%1s LJPP__-Cp|IGxLCkR]zbm_9#lťWӹ (sPFZe#6Ce_,q&Bko.L*-A_`IDAT"ZCm+=K"|ʒrɽ४?XHѹ_\svNۦ>tcʩ}q; A>ƹo lZ\ǫf_K/b0*]<|?@I8ziaIM3bܧFe$zNp(S1o:/ܒI6khk]yGM .QE]Լ?pt+?B$%*l"$푮!ыbg0l'tw oW58A Q5y =áoS VK҃wL U2rt1 Bm&yGF6F\0~K#*;-<̥{1d0u!ŘSj@Ik׾eiEW|p3`܌Csߕ-%rv~DF{q x;'s[g H{>Aԥ"aR&6#0v:AE +ߪÅ?n4q3W>Q7OxOШ0ťCukTDкm;q71q?{}߳cX!='gD_A4|n*i8oc`ieQ2.-lC6-!WK}[;:J5/e} 1eߟe O$p*ޗKn4?nQ1A#֣ .ڗ9w!o™U4pDO/?v8O^ָVb8/e}lhk K/aк➱,.3cV1(2jUq\^nd&-Vo]&"epšV'`NKU,h$ù[~Zy,Q0w6*d%H2UuV}+)jyaM埅,pGMcÉi}>}#0lq8VAg'oJML&u@;~$q%4ooV軚pJ*C6"NVIRW'p_ND|uD۾?$N]*+>:\4tY_… S{]⪚Ǘ"W]UXf@Ɠ#3+؜q3d'0V􉰛<Jmbg}%C6z[{n,ANqZgسhqJR7cƊ8=6:p|nO lEǁG,0̞J5?A`4G ` x_$i`c/:<>bcA]!2S:.86EjOlXŷ|]hT37ӈxMoiMXxP$6uՄ66n-˭Lh.{޳D׻<U D^m6pШ&4[u-iLIow;^7CiG=2x6YuTjmݜԭݛ__Đ zo_>%:ez[l yzߒ!H!@4ih?[e4~e8%Z&-{tPyRl<7& h _ 7+p˅lf:eY 8Gr$ȹ42@ o3bf A)4ǵ ZXh<liֻ)֫&^s}&S;8zI;/n28gDw\E} 4/I$4,<@(Sfrmq树Qn};s7̪]O8" KKUЛILX?vWg[}>ȄxQ%fF`./]}dxA0rb, K;~$q%4ooV軚pJ* :Ym&EH7_?%O6ՌZչCľG@TCЯG}.vvqUMYK*xs3 ɑlNӸ2֓'%u几#xsc3|夘Tve#S_Bw[xUc{kNqZgسhqJR7cƊ8=6:p|n{ddc4\ĸID=3;\ 7cМwl}a1=|]Yp5nm&mT lEǁG,${Gf{%̈0;?AN: dlmN~K< $.!Z{IENDB`hydrogen-0.9.6-beta3/data/doc/img/Instrument_General.png000066400000000000000000000635621211146647700231330ustar00rootroot00000000000000PNG  IHDR"J1sBITOtEXtSoftwaregnome-screenshot> IDATxw|?כTNEa Pbb<C$$ `-`Ift:tXt:dtN_z;;33;7C] """ 9DD.'zC1c4jTҝcYs9[]pbƌQ1 e1ں۫ďnuys獥N"fҊ*1|~]RviA=j^uF9gJZ2qB|DU eL|H}.!5{v-^jf+qnl`){NΖMs2rcdG4OVOc$jA1)[`IMlԼt}MugO5y K炳y<3-]81CioOX.>grNABS⒦]=yZvbh!$gg)%!(oaةS&WwI/hTUc%̈́O<MtNpWVkU{g7gޜ*=uR--.6^+6 :ԞHTB"WZ]>*ޞܠOT: ˿\ݵ]d>\t&{( úq4q)1LsCk7'伩_BaNmqw+خ}U_b$)R2AHor}k4l:sN2Jޑ2.1E0Oqɪ*ؤ2hpx]֊b{ڵqt 2t1p\pv2s|ǩL\u$[[\\.b&Tni+&BOv^!I&'b}} ><ɇ{ ;ܢt7/ݹk30V fW 2J M^wbq3ԅ7ߐE0u *_s͂`!!&gLBmlPGN-6Pgi0 g3I.JGaIdAu61Qjmd@f?t|N5 BkxP'ķ9m.,&=o@'ً^U4ERUҹV;mh#DO%@LP_VsH1IyIj_}y Vb7lP'df\6 1əf$<6oZc59<^Hqc'Lj]eMƅ6I&^>mϿ__\ExdI]Yj7Ob/71µ.=8OSSg.Rϛ&w[nydds LBQ8_nk7PHmjGeh{̈3"]soK"?!'dVfY|jBf yBjN8uKjLJKSNfye|>FxB`]6% Τq 9ɳ>+3ĨP-M&3;yLzF `i!7b$` R^g(YzVF d\;3p|h*&ƠU2 g}^xNtq:\Bg.b@H8Bdqj^s]SbiyBq *>1.V%sX]dle1%D( yJ[-6YLVNrFqöHbb2g<WiwW79aruY:{Dn-}\ّEHA$\fM`fwpx\p f Iu5PXx\OGՏ@}Qd>{ G͜"s78OE"X ˛73=+Mֆf|B +IB\ >>Ve3s=Ƅ8sXN%w<)ɉ^ 3=Ԕd?27dt1#ׄQL+oToɌcA8z*P.gaPE"fOlDH:},DwcXS jV$Јqy n""-OФ5`DҹDf h댖B͋>c/m6$7BIՂt:4w߾L!hm[$14 EQ/3vȒj?H~ }hqn"Xmc( /=8Ƿ'uvʘl?/+hسplC#R؆^~3/_Zj0AecPf6RdY,Sk~|&`ɴ]=9EFx*x,׹3CU]+X6ἴb_κpb(s/ 7b )ؘa̪_޼dffl\xRWWͅIi㒽=NWöw-OM(HZqwdA ZQpKOWd%ښOoSO.Á+!43,KHP^Rk%bl_ĮY1&ꒃm:%N<"'LXw"6mTu|[m~B6]5*)l`VHr yD,2\t P'l O6Z"KwG6sk2{>$B6Oh{MY~&={ޏ"Ws,nCikqRANu\ݴh;rxE vT)f-0,=O;^}o~MyK&m+?RX0/ h&^"拯J=@?~ %[Gjf-6v⧞qOo YL;5wN=ӷ-ۇeEuΌ}EXPJ'>+}qƽ^S{bz~,Uoϱ8ej=*Pou>t ʏ?s iʬۦg| 9ehv’]6" fLLhc$sլiE'%y=-N3űwdq:SsSLL9&<7lؽ(8=5%ftJܾB6So`UfJ֦Dj_e9!MKr0; u͝wgiov` H 7 t@g|Ǡ( [-td\0[+?=L\ 0yfAiLӢ N9kFxy2Ve:m48mOeL#='751FI g!)`f/LRn \yeGfLzOq۩7=MCUr,M:i{Ws2 OԇgNhC MR>SM_-2LXwVV)1ZuQ*w}13ҠE|yw.)W(t Uʏx yڌ R#Q\7Sܐ{U aoy2?C@Je*ZӺ|%c|ۅ cV:Fv!-~=곷O}wlb+X̽l85e ]A9}"`!:/8W^>]LNk(dRFl|-Ң btz2{ts^/lh+R,*k( wg=V@2)銾$eAf^\L84d.XX) $0\d^.A;s FEifC!19}dž& \&!YBho}[r%mz;<lD5jD36m$6+<< [O6!Oyʻm4O\%i5扩:}1"ҋhfQF}%=Y|+^ 3$nWVOUMtLrh 坖DSuw66̈feӓX7C>$ZzT-o'5)ir/1ο{f$w_ng=/E8$̺azB˝ڬjrs5Z珛>#e+X Ya>ztxG{l\€aQDEkx@?oỎw^,oܛ*)`P^'=ҽSc*~::8_&g,wq<2x>c>? ߛQ+ʕhfg/}olO{l-﷜d19e]'ѿY%I/$be\_@n /RyLDdLDdLDdLDdLDdLDdLDd ~mXת< IDAT'ˆSZ[`3km1^8QDdLDd`l<Ae 2J4ݗ5,LJ%88/[d< m cG`,r$-o~8.ĺaA sD^O^)  LDdDD)g_pl/i=HDDLDdۻ[eldߛ ⳙȠbW|u\N;f󏋓"""4q("2 W=o1KWMK#"6"Mma/74^T-;Ci?{a i$€yM&sI"Fc11E ^*<ë܂,hw<|4 * Ae6v[H?5+@S)s-Ʈ/4[Z ɯ 񗟶~`6PX6H_d2)Lv17c 6k~Xq8k|spWyiTS}THMںf[g6/8  L~R]^/70\zd#fqC_Zmm!!9@fW[_52RjV89H-``r,#̚ It]mU-7XkX.}{xIw)Xvʸ8㕩U;P TSG KcyqCwW9 @JM3WjEaf]gO:0}g&N0 0>j4ԴٳL۶=PY~6=#KݡR(mE/3p8azgLLhi44-GM[g[fVZrda9!Gz I<OSSjx<<AVkQ7)*~،DpNLBzѫWIp&jSV;ʺa<1Km#WXE`f.?liiiiinz, B _a݇fm))*}_}8ybkmqkU>T0֖Or xI,{>RxdP-Z$ٷo_IIV5Z PWWg6FckkknnػC^W[UݑKnH_ۏ -5賶ܼW/Lڻ<|~|(~}:,dvhcLg Ç;vl„ 2eYKJJL&N0isNH"R%x S 鏶SΝhVMhoVܑ0:rnᒬl$-˾}&N/TFpEraJ唩3wTFF6 ]$6,mSgD\"a*7/QԐ~/+r^˲4MdcDz,E(a0vD"q:9 >y9ڌ( 4jSeT6 Y/7Ƅ<\fF 2 2LK#$9xR3oۑ-7ƔJ`tCLw4TjT*cX@Q'T_h2q,{yIOP%rl4;0R2l7mx?q-|=7sx@L%PnKAU3fλ*Mye"; Z`[|᩟/}>((JјT_2RRӧL*JwkfKK/ #W @(?<4w=S &@2Vzx8]Z wyFG.XVk* [ozzlX,q'''833655'Nq˲,RU[[j%pֶ w-Uc %C{b肵#ՕԦh6rmt*/^rT&zHзmy6i{Iivgff?!5?{I0 CwP^^p8 0r,ݺ>ڴUn@  ]=zʔi~˩i hگr-f-#.p"@[vn䩳,]v+Ap5h4&?~|zUY٣ѳJJ GQTYYٹsbcc5 0jq7,y~ ^O#H(4@_>v w掚-/9u@%Eܲ&Nr m*jQ1h y87oLe9BٙǏM8rt3gÇdeej \.WMMMSSSzzzRRሉ(+M[RޘI@jٙnj&NX\\\__B[F_MQ'O `ܼ1ukp Wێ:3뎿OJe}}D"2eJmm3ghz~ҤI$I:NRP(cok gf(fJ k~Om{5Hik @[x6\m;Ԥ"A _4׽G\\\[[bSL6mԩSq:jZӕv o7>ҏfm 9|@0ڼE9 ?8Ĝ-r= s,;|CR"J}Ue+No۱}YIII6f9N?q$I*JȲlIIɁ_g FCmMG[=>hae؄#| [p3uR9zAZ̜eYۗV$I0uu5iRuI& B.X;k+7W3LB LִGMFQzRI|jkkJ8JtϜ|b9gaDF(#7p 3厇R<ϲ'HwHQۈ`l4FjQ[x hh#DDF:<("r%٧)۰um.!Ca+Id/bB<#wnK} KjXJ#cIah4Mcm7nA7n]""c >]u:vӋk~녻5DBg00»5J)d$})24h43D $"^{-7n۰i{xY+n]i{O\?; KzZqp2i'u^B :!zK24ϋD3?fJﻥӛ=F L&DY CZ7D"H8f&7jLnJB87v&O TrJƜyr% Iesו{3 qm֖o*/;-{1rY[7?z¬y #n-aZ; 1y++7TX3ED8Sݻ45Z[,} u\ITòn؄gc 8D՛!Jm13@|ӭoi*}LE ,˵X,˾=q;V52bn^X 1FoFAINNJN<=჻Ξ. t7aL4Yay^F6{\ɴ}ۖ£Q*Ϧgڿsɲ;T*uu{>%.:.q跴0XS igQLixGx i,C6hj3Panߎ7^=y@w?~/|l{ G`E^C$0+))jFQafhlmm͛{WA*5 oH]wad_p^ҽ'X|׾U=7GB?Ac8sI5Oz}C/}r9 qcǎM0!33S&,q\bbbVVVuuuIIdt&MzisCɁ_L>/6r[M>w'7{ޏ>ߏNlfap&^WN˽ww%YY$IZ,}7.??_&q;sFFѣN'EQ6 3i67!fT,g#y0ef }d-q ]]z ,4]XX(Ǝ˲l0 322 nH$N3;;GX̍,;Rta8b̬_i$6eY*`P\ $ sGQTqqqrlnH$RTBJ$Ri""33 ^Wu5ax ǽ8 O_r9&djXTq'''@8-EQZV"PO~+ahfw/pn6Ȧ;H {'ޢv '1ǎK܀* f,Zv333KJJ=:sL˲ 4]^^p8Q*.b1 |?л죇 ϟ?Aaoߏ"N06g|w5˲^w'N @* f深sk4ۭV:?;?|ҿb ʹZmAQ8h~oS" H-;Swq$˥&NX\\\__V p\555MMMIII#&&'7_/S &i !4F=%EG, \#P y<]Je}}D"2eJmm3g|>СI&$t:JB8)(ZX.X+WLcߛbU,`Jsݏ>wEz}BB )|>VU'K ID^,#xJ?o/7 |>*6t:t:%h%%%~~D G43hBhlfYȲ}SSRrr1F$A \OϜ}ͱ#{$&Y`]SΦˆDV\.tl݆VWL#Ow=eÿ^e+9}<-bFA%տ\ qG7=+oɆmښ.߳NS)I [C&ד*E]be\_^V*o^-_}q8y̞ ͖'&&˖K4~HȋfE'ز=֙cw߾QtߛojWjH֗f#kiI_]`@xɢST?Hںf[gqDlL@ʋrFWVom{V s'Cl/;Ǚ/9mw`EKG Z, eߞ8^RܹZmMlEaaq>x%``'LY̘Iiay^FKK͞k1nRD U~9\J=Ξ. t7aL4 hRfϞk2oRx8 @eAm TB^ IDATr#^^RZrd  (!z$dZ=~$eZmUrGY7G9zi?Utlk";6+-9^|2`o'Bzha_lO(yZrsGmܰj#/~^}“gF0]Yq0,a?>` ܏<15 eKKKKKKv6!B  }`6kKIE!C6hv306?ԅFN8^e P@0ouOI2 o߾Vk4Z-Avl6քܼW/Lڻ<|^[Uݑk$ h y~~z gyy^x`!x]DE'C2…prx S !Ç;vl„ 2eYKJJL&N3yjѹ o{2}^ll3r9ˑ?{ț4ys B$"'/JoΨ[:;T f>sc>!F,<`.&Ib۷oܸq28JXAddd=tRexuZ @!"P_xz%Y`. FJ^tF<x^Gskr n?iҧa5pP@3x ,<_XX(Ǝ+0##n'$$8NUvNJ?cK1oy.KÕP)OȋZhaf$l> go~-xgϙ3[g@G4MC4XZsZ`/<^tmfdfO6+-#WإZhǼ\R0 3%[ySTư M_h2q,{yz9_\.GyQ8A`o?7] |қu^$%V$("$,EQl6|Rr<ڑ=~?n,7hdr=T.|Hycat,*nL)fqJR<*8HR?f8rt'geej \.WMMMSSSzzzRRሉ(_^Qyyc*+|̉&tț1s\<|%<1RQ ٠qYPYq 9@O׮99RY__/HLR[[{̞^4iINST*ۚ7c>Op)yQɕݛ}tBN/dS~|𑸸/4!1PZZ..>YRT=N "5*ɯ*[ލ2yƐ 4D ͯ{ ?Ue T޶cl6fs:h$I*JȲlIIɁ_g{J.RTzwqQ?@,"`p&DL}3K238Lf˛~d_^T0#'F 7dYfi?ޠ/B~޺N[ԹUnG`iP.HY`0FEF&$&=Bz݆zt) _< RYT{ı<6ۍۈ"xyck4Zz,==]I3AbQww{Q< _"BB@ TJ5D?(eޛלfP__+˛#c4{'{=#_}N?xxNޑ>K@fBˈ4ɾ Y3-5[1;I7z\QF<{ 9y{2?n'晍f„i@}lJC13-5۲jCv阾)v#)*vkY 1jt 2]ad2Ut;ߪBŘY^ d%i< MY0_bvΩ@N|`ܯeȐQr00s0#%ZUkV ^ ܐ;ٗ%7b|<t8g5p 7`CG2< N-C!N>k 9M&[eRxOkfZJZ撥1ݝK`3%`Qũjsv렝-wؒEHbKet(:KK(w8D7++-=ICnD;6+/QCf>V"]4qe~"8CJ?|a677A,2nus@҃f؃A|v@q+Yf֦tכ 'C`ӱAXnfhDæC;HġvޱeQ+BDOf-4o?vimr.?BׅGK#b7چ"4&N8yMFc}gOz{4ܭBED,\7a˵*۵5C= }QF|щ<4@TTܑ_L<+BCñv'v4niFyS'Zz]ĺ]Yl79yD|ru hw[a rqNS椥O4Yl0;ꚪ%W*P꧲BCa>|.u8mƼW^ymd^ZZ^`\.?uK[c&+<"`UYu9+奌݉ovzAzk?.kCBC_4}xZY%͝hl4:B_oϕK̐/n}pׯjzBX,(jZԆ܃mriaaR ª!|/F3,Xʫ9`(((8}@xxԩSg̘󛚚JeCCCBB⒥vhjSEAAXvF6|\ო |7|!.\(..1cFll,7 FQ*WTTrX TVho=sl!!p?)X9c+p8 `ڴi&MFfLLɓ5MOO̞r}-. 埕׳`4[[!髞0 :|>ԩl4r ~"IFފFw1 =] 7)ih,//:u*]ј%ƪT*P <U`9`fVh4\AGEEۇMQg}Ƞ^MF7y(9Ye޻a<E_Y`.B:888a„ؘ?o͍QQ_=8h4 h\.](MDi\˶ḎcP|˗t:@ll,!?{Ƕ^ݧ/88X BJP0LOXV'fC8s;zRZ>}G'nP(Kj4ʐ^_SSeo" ҟȰLq.>fz/8!qJ]mn\)1sJS /\OQT mmmǏd}}}AAA}<6^B7sP_P(lnnrgnllyQ"̚5 B??{mfjMo>\ NH'L2wv4o}}JRPH$ٳgϝ;wΜ9z_,WTU]IYd&z2eF|Bsv"}P)S_{}4QLOF# CEE3ǀ21Nl4֣N" + CAAaTddBbBXX>8!DmhhJ`Y Eə Oz޸J1?@LۋD(n@R*fP__+˛#c4{ CFn[\@#_}n:<atp|+zb& ⢞Fj4C?'@N ?26dg7de01$晍tI<S2)6= Ytߟw 'a${uI%Dg(̍! qj¾uCs '@n~^j '@2ֽ,ku/ʙf)?{Rϐ{M|<Ϟ{ dfm:=r:~!I:p}֚YkE9t$`hLi)EbSTv5X>Yzqꪚ:hg;)d\FH*r!sIqbckN4d̬Mk+mlM5d8hțJKm,"e] It>c9Ȥ!0A_Mmf AK|ֹus@҃f;wlq1+fzT!kBkǼ63?Z9-m$ >ȩS}u`3JqDZAXrfn:q:l:Alʹ;,J]h,2v2|OᰟӘ8qJBQ4A<۵5C= }ɉo,7slIH\W{X(0$kϪ6ԥ ugJw녳Vv+0[Fٷ%WQvif%̖QU[Ux g(nߐ &'lqђ;hyCNغtRVV@3׀2Zn*Di_6Wok CCBzfHII L>L;dp_0N-⪵@}g}/{O6훹U,[\حlC?- pXdSCzHI/yeO{p&fHHHzpj3W-"OhN:Џ!^-Ż+; %DT] 6ԬQTk Me; <]tԩceĚf$lee5=[ȉo%[`-Ydɒ%fW\ln+'630ہW\ fhF7EQUMG9v]]7nV|_]]Jx?659wXhIX.j|=?|jQ[R <:xOǖ|_v-yfRXhP5k3<{-`5Dվ@Қ #AdY}~zbepd+os]rWޞ9c~㥟P5˖.j~ΐ6giY@ФR F@_ʽp``༹`ɲE]JjrqiӦ!TbB+7~<-أR _)]*4""Etֶv42@ +oVV;@Oj Ozw6&L ! vw~ӒKyo5B&M[^!端WSe-Vm;j 6pgF^>nh$計FkmBFw^}k3GM67鲊y6d0!{o`@ooSgKeP藗'/wϬ,NzzzO~WHw5u}_-vL)fΘl<-WYcy'+ksv렝-wؒEH2[GEgiITe.y rcUJ @8Q@x: tzvFk!|AOj1S0s`0P\`bp>Gwf@_< ށ#, A!@^7~9'24(de{*.bh2R LvӦ$yq #%F(h<Ѥf7$?2JICK_U]7/M kl[*}RW>^eW- (c+R%mIENDB`hydrogen-0.9.6-beta3/data/doc/img/Instrument_Layers.png000066400000000000000000000610571211146647700230120ustar00rootroot00000000000000PNG  IHDR$BTsBITOtEXtSoftwaregnome-screenshot> IDATxwŕ_uOwO޼ڠ+P KHd99sa8ls?8`2F,$H(K+mޝ<~tOQjLuիWU|jP(fP/,߫ C!:cUMg۶o%h{PVBfoQJ;ۂdyM% o}{C]̂ 6n|buP0VT5 n9PFM,1cj9lC(ViH!VǑ .v%LڥK M"lFH_&D7Ծ/ԧ@hӂzup/tKsaT_9#[%R?w$Z5?#I~@ g|G\Qȃݻv*0>4\3cYn4k]IrUm+ݱ_=qrOڟggS긄V#W.|m:jXlJ `nX\XAVrCCAḅl*#O)42S5˖6E9Vca:10L]Hg+sILNb|b!!cwsO!8]C ir:ok_<믮j^=|eȡGr/-8k}rSj -kS!ҹgTZc۟])ApΊINFw7o吿qQK) /R;yg|j{1_ixy--spg$b{ 8TMϦRPS9ӗ 0pigE9jߎW70}t5~Q}#ܞʄjf.= Rm[N9J_ !(^{yYg3-d8Էol=WH%3[Y 2:Ҿ֕Kc;8e 6kkkO{c׀j-]!Jnљsj̵_F?i}g>IJbl {þ`]8lW_ؔ޺eˮ,0U>)5=8*!*54M fBx>_]zlFr+LCդ޷h;eNHQ3o>n m*}]{_y#ǬX6u|6EDz䃸Ͱ_K}r$"@?)@PZR1پw퍩B8N-.Y:׳66W)o/:6uC~Hұݛx:Sym1`l-1eB0ѿrU+&VYP|ՙ3 #:6y>RMv*_P`D_<~|m_9 Ef2l.֑"|ⅭXOom뿌5goO~y6)0͇CQw4WtWe=gzPOD-:圕uH9Bs#o^@-g\x ;hB^vN[2L!1E5Y}.P/9?ԩfDG_c\O>1vyύl(֐(CjI(fsrbCtz׋/@BuΔj?=b*;+W]>n&KiGyOeccD:D;{~Ӕ)`OyּܾO.24Jh+]rMO>=)u/\VHWY/8uZQ$Lrʔ-iQJz~t'`N*?V?ЕՋžA L_drjen_hQo9gEp;F@ETQPzӚ?obHiJ© AJV~ )- 0{ԀםȨTE!:&ףx BDN2dQ}9Gj1ٟaZ5,# 7/1%dC3/kLtIb6Sl 9ښޮt$CFmB1.ZN +ndPr*eڶ%׆}C8b\q| MkR9 @2 ^jbG5)H[6 Hl|)>jwd8N] XVVnFfVhnECn2cLNR /̣Ncd7Ɵyz=k Ev烼NeL@zc*6r͗gLFV 'p:%?"r_僼JdB=T`71 w4 e閭%1@pv[5JHﳕF~7gO inM B0VUR#؆93f/IRI64jLBTYBP!KZ$Gbz-XQ ! 0(-YXTsC]݈RYW WB G[)=Ѹs.~]{ڦjEӀC9 1@q Ja%՝և0, !O]UܻQb2 uV\He,L8~Mw썷514ׇX3EVL(ٔ EK핵E70XbfΪ©Cb%|X6H%'7?Q;6 #`\H]$E0g'LwT]L TjzOwqŔ[E*³f4ї}5>"fC"]pvS*-.Nw*oifOm<Sz6> J6 A!v`Hl{j]##`L=y+ OmLK=3*J.{֭Ħmk]0/$Y$e룹>`"EXP6#$zEȦ?a5#`c@B]}P26&E^zʼ(NtEMb\2 -B|s7%s]~{C_)r1ؤ^gv 6 )Ӧ5{JP:9!UڀKWUǞ^ Oo cCxNF6M_xQLKT}| v3`ђu8ޑȌM{HLU3y^5_~ }(0w {p`ebuEf^ɱUȂU2[/j+mӽ-2@mPGWcR?kxoWc;6LAN!?Hyֽ(ֿv򡌖;l+yg;{dJvZtF.7;oQBHʘQD_29f.ӕf9L:3Ldh :jw6h/4D'؝>ڈ)J3ن޾#oPHIg;K$3.)HC$U3gD"# 3L&ֿj_fN8@I$U vgL:5ST(dιb)QXhߗcArRv=0g^ Ll^mU[{֔$; ,{5,KG,x݉W;BJ'c-.56TYbH|aєyXyIDy /V:_[?qu~'Ƣ,,>ǧ_};iW\r)iC_4ez͎tş~Z󛻃+k돟xk@J&2+.xE@;Ɗw9TJn쇓PWj@ϯ]ۃ0yʅ@=?߷!.*w޸G}罫q;SO =\kicP/Ѻ 'c?p/i~/VnSN# deΦtp |'9gy X4,ln *DV{ͭliS+߽_[MgT+!{D;ɋs{FsTk>k޴ꬩaVݿsdz?R+y=>cPbPTYJ{[ܙmUlO|K. n?}̌>+o™⡍I@SZ6vmȍwH|OD(ς? s>u1;K{ kN F#cXFzHch2]CԣėKo7][p^{fYJߓ}\ijaf%7뿻7p=˥O<[>zt5*o}ɴ,ϯ ~ٍKWTg5 ږ|wrO%24޷;\7ƍ.hnz :f!g7&ZOgϊȽ}]o}㻗6Gw9W}玣j}ο$˾p01-9IiLa 2 L$Hmml8@Kw}]qF29*d؆ R*(#Udə#© %={ϓ/0/2)IA@ Y*+ʘ瑪1𪪢(J?C'db5E}/;;}<Vay Jy5po4^2-_ΩU اn+=޲tjh6Ҍ&H-[ r 3k!7ϱcVU}{5FY}5 Qey+ )Q`7R@$b=?;95xqmiO9Wو*R)UUqt ‹ XUK[o>ͫr+"VȊﻥCoS2mZ7j J~C_$LC|G?whwk;_[~X}0G6/XԪO즋OTL|_eg=p5pp gޟqW6s͏w`bxAs =-57i#Ag|̺T 67gytM DiW7XsYԺ83+O[_* TZ0}%EmrbvoIJK|UUUA ($KjhiR@1O"]gmcwz63.m>oҕgG^q]{621ͯf#l p5Zn*A/77=?wk:/a)(FBeF6iT3x_xl?xC/km(V?u, EQ̹1o^>شdg0C և*Vq3zHr¢>QTu̿gl\w 'o /ޛS(|uT@Q#_# zVŊ_P0> #Pp6 .r,fZfDN 3e.GWO/f" 2@07*w|vÔ S\9dNՌVZd01 u mMzqH:9,1~1w#t^YcC,.W}O2sZhs,_kgB;*y燐}1R+U' xG14ҫno-4xu8"ppμ{U(ig^h qp /}(IK:KgKH eL#2ɏlՃBK_2?5ۮ[O eClGPgP۾ñg|s_uo-&4W6ZTW_y1 ~nP(qߴ>Z.Z1{FkM?4XwQ5K/S͟D8s㓛c7|+/{>wSto_幑 'Fw8 <{W5 L)/ xGvU_魷(_}MgEއ0wգ:ЌS-w{>pqq7_M`ŘTJʡc\kՙg-ڮ{@]9G܎ n60{\W7Zۏ}+3tv$  j=S^59\۵?W]c}(ΠpWz/:{$^柿5gϱ?=m ?{ʁoۮ >q?k6n΍?/'q 4lGHs__{7@2={w|wGvwDZwoxSo ?kiIK_Bouc/KȷMtztM;3#O+q b<dj835tw3>f{ߨnLDgcSj!C\Ք)z M9}=\ X˓ j'NPS IDATM &lߦ4'Tvl߾ogaO_3UķfXX//zMm8> 7Ϳ^wdΖ}}ck_xk1H?7c("u3Z"gP<:(FxD }x0y[PϱlÙ/2!wLy1ȶ d|+ߔ隍BlGPgP<:(Fxu6 #Q(Q·ӿVȃ)@OP(u6 #Q(ABlGPgP<:((uS =73r!r'H(dRQzBQ(ABlGPgP<:(FxMor/q|dxkPyn۞_jR'H=gMLd*~V>N#)Fxu6 #Q(ABlGPgP<:nj?yP:ۃwK<ӃB$X%:P<:(Fxu6 #Q(ABlG:Arʓ<ӃBr6zB)%(:P<:(Fxu6 #Q(ABlG$G$J%'H(:(Fxu6 #Q(ABlG$G$J%'H(:(Fxu6 #Q(ABlG$G$J%'H(:(Fxu6 #Q(ABlG$G$J%'H(:(Fxu6 #Q(ABlG$G$J%'H(:(Fxu6 #Q(ABlG$G$J%'H(:(Fxu6 #Q(ABlG$G$J%'H(:(Fxu6 #Q(ABlG$G$J%'H(:(Fxu6 #Q(ABlG$G$J%'H(:(Fxu6 #Q(ABlG$G$J%'H(:(Fxu6 #Q(ABlG^a/P&%ٲQBa{L6}`DLZml]pEm]'P(޲1B#t7BlG䧑?W eғw_o2Wy76~P(fP<"?iB9|K_2yeS`^ڱuP&3[|jfP<:g#zbd{m(As@g{Ǐn$R?Mʦ:bZKr &Ȥ2zW21`\pK*m>y 3h>ãˋp !µͱ=(WM+XsR" C#rII.eð8>X(*2st6D(5{1ѧ| ef:իlggrWc 4o|(t>۞PKGf|'?ƺa" hYK.]R_u{}lB T`uc0Z0 7.cY0Xe` ]< ҋ>p 8; =[g#,Է{}e1v۾d #Jw1P:S{cpG] *6_)gy @,E9ePlQ9ִU9caʩ]-g"s]pӄKVO8 5g\y`RNeCy\xNmo-fx[\ ]z150*e\4a;kzR#&*ɹwdv^[?{n}Tr݇>5SSښJV*j@nF.0sUfP0nnvZk)nk6޹'QXO~8J=,T\es>E @o0|肆 7ٜl>yt~>:o];7A!`')QE 'HP1 E!jY_~fM_/d a!`]mz"/.bK sda+~s#kZqgN/]LP)W@k;39&,[иG+WKlenZF6(r6$]`'c^@S|bXTULeo"bQ r&SU_E0Hvwȳ99uܧ%- 81&"ZOqmCb &-#AQTB0XŢE7V !K9~J5žx2hd=rYK.+!-.Q\ \Frv-6i)_‘  b|0>0p\0,}aX|@b䃊1j:06F H!4mZ5}z!p_g#_þq,b`WѶs?u 7k`H4}\ ti`$ )9MV V5ƺ"@Ohtgо:)ȶ E (g2eA,: hzgGi-Qs*C݂k:ÔCcߕʦ)PSYL0RNey9"ض=8o_P~7gL nҝmR̓>(e2*Kض?*d-Ey%d {;凃0Em5ӗJj:W ǬgDm;mgg " Dk*aY8Z23ЇM/X"pIJb]ӈ26OBIM1bGfﵯq;lB~ 76 7 _"=I_o 9P$-U.$..H01C%Wʅ+ر"w Y\ZGG|>|6Y7H5[tJ[ Yuw D<*[eliņ 3oXBC` cipԵ*1n|TT h`z! A& ;X^;*"_X-n-8!R7P++~AS5no!Ĵ׷^Ƥ^kyn HPaI:b2]pZuk|Ɉh"a61*M򡣱Xf5hy| >^`|Lj@.9 .)t f@H݌v>&E9 w(*3{6:-cqXr[Y&X^RK4TF{^k >dkHt `6*+bֺtW55Df~ ՜5`POGE2P.#[8-8jvz٢ftiBZEl*t= s#\UGZb@.9h,js>^#JtwX5&Hs4ɐAʦűr-zq$*E{ w%:M/,#lbm3e͖ɨ-BdIXX*hʲliFY91whmI|\JqHT0gDžʔ<.&>f98Pe72xlTC B R-q Dj'"M t?ǖB*mIUk̙ H! EA[SM*!`fs\r3aP4_PU$ H(@I"dB!<p IZ$q-kA,-HTqs8\rrYe2!K6^)dc`6_&\rS1?B9b?Rj,H3۽}; sj[U)֬3B>  am'B2lϥiJ]T9i5`I;(r2m″UMlha8߾fcCƩ@$=kd@T!&Cms*6n)PDNJ I| 1``dCaES1r52'kML?k2ILbjȡU7Heq5W|0kc29ChȔ8/kLSTBm%c-OZ4**ٚN6!H,E6e嵑.ǪjZbF[P$ cTpUVt pB|4Utᘥg~& ?E/߈jc:TYY T`@ ֿZ$X=%. ?d. b=(C D\θݟY8Vy.@ F_@/m\6֮1TaaL69`(0@^.He1 a߁b6 D/W򇫅PT_ʥ|d?UR6".KM1*#&M艈K16a BvYzƢ|Gf 7Ws~A0D Bp ZAU,tYk5Ϫn.Jvq0REL3T6J>^pbOe=k^y]\I QU)6ª@f "xZ)>/h,wJR.=p Ed0VpKdf L MC2%IL˨rVx3xRAg,K q|B,bZeT%+B+ŴL ֊fuUQa^jX%^T}di5e)JiW&#ٲ?\ aI$P"_۫:J:J@ mBA}H۸+)緭sDk?M IT6PD1@~Ƞx' 2b"bu!})댘N=ŏ3\ _Fy*\:W)XUUd: :|Wq9w~iC[@.۞|/4e@o97r7/r61UVP$IIKKfS)J٤6qag}g&x6O7pTEXfXVEE`g`Vx^qU1-yil~Ye>z|fxNB^ =Ĥ?bZ; OB dj%zo1g}M>8ݒTEL{6: ,fA";WG̏֙'_zd7PTH E 2%5IBS͚g/#f72=CWmB GnBQ&#ۍ&な>I&zy% T,@l"^@RԖiP@dcLj^Zk״$#MFv$3!q~cbb6Ĕkrjٜbr1=TL)Á! IDATojQQ`Y7q#oI8a؈5z:.EӪ,rBPs^ILԃI˶k0'=./cZb|sMkd~ 8ߦg%o4qDMe(f&m0k(mRUT&#{-J@SsB0CuhfIT#$cV\*)e3hm.O v(1lPt/k-"Xl\,T7-ÝOiq1K !PMj]gKr-{a 8eVZ gJt[Yk*Ev_^e7GkMGFt 9w $gS«"XU-͊$eSIm@FLzd̯/7&i#!(znko7B`=Lt5/ޤf'nB@BykɨcԔ/lh !M]eU``n"R<1BB/3P @ 1X1^謙 &P|IE/+?CWC< n6!Mlg[&nl\8$)Uβfw ()U&>.?Ԙ-e#s-oSw҇t)ءaD-=h=BͿF堉kF֚F!%(I{ H]gXlv=Өo~K[ݦڄX+nF+.E( Rd)NK~ǫpffl e$,dy9J+@laDYpurEs#%tضtaOId X.e2*} lL9]('\.rp8lQ~F#}d8 uPmf b Nf7͜,$غ4kJ]ϑfv(]-@%` q>L0C֙c: Y<&#򴲓Xg98./x>qױLjyۼp|x\A%pIg{NEҊn]rT=_8S3bڱ4?Rnm 2Qs͹_,?`P ٯdREqJWY$Me=M,]s˸oMBڵ[vLIq,t68iv% vٕc(p7[5{k9lˣ%l8r2"Qe)RVa-f78GpS;e\(VIvK^7pӤD_Q[[vpJڄtٌ5 $l,)wLH {,cD/.ia#Vʹ\ܑIBN4Q=mڴ0i~k]Os1'^5C٠`zf&5F⻏Z|S 0OL'tA"E=Sv&N.fDMxp>p28n$qnK> QEw^TbG-~)*b&0Y:=wҏVbP +ˆ԰g:҂8fj]CEhmBg%:6|>!  ?< aNGptʉY(+WTтXy-]_Jw$fhHU>ݯɥbr.i, p1b*qUXcsg:l4˩Q{qiQ-;p2T5km|U  ^WlLgE,iڴ-Ni]-݉cbp"P\LnY@q.cfɎʔ ,j[qNTΎ9fǎKԑ}<)*v%#.l徾7/E_1>HR( e<1ygEPޑP&S XλںWA ,jQiHLzr6x e=FP* u6 #wAL&N:@V~}(IK"14gѻvl52?gK! }՗~M^2) ,f4P)1+tuoi[̳;ߟ><5,&f MŎy޲0sdCbڤJmYI9DQE,uS'?fq@=b]:-\2G+|6u )(Q KUV҈Y/n)""ѪN鿾\_X71)hBRΖruY$\t{>fc 8jȲU7'|6G+|.\Jd1-a(߮P8=E[J#m*Z,?P7oޏ~cnNuѹkqBJl ˲%9@b"+(>W^|W֗-|?Z|-D ,D+abQ {qcQd6=^/?pY]ryMSM9=cL &e?k:Q^zI`k:.5Yl] {81ˌZiM,$y⟳[ٕфj9پs{o_?=.(̚=_]]w,KZ9m!Ə5gKO0u؆AtZ-[!|59DžG/"('{f6k:K?=a Z\mBʋO~?YђVn6IsŌfj3M.SPء6)R[oݻ3UYPq;ƭRL5,&fFs6r횇6vYP }RBgk>{=(I۵~t-\yyTP(^e_߿v(k6 #Q(F~ƫ/cg*; ezG g R)6mzMBEf_QOP tBX~UP&S4O5؝W\sgZdgyoM n:ޘ'Q(c~k/(B=,ۍO4P*w=lO,gcv]ÄZ M,g荾@>ي&i̞>kւrg{wmo-p7B!iѡ.V&fQcC(B9phE lv8/h2jd1 *FQI^Nh"0f%|=イnmoog2ws`n@(6y+Μ1s˲>aBl&^yi|iط ZZf<П_t3jk&gBt9`횇=՗cyh ~ohHy=ZZgP,tYGVzeS,ӱXG-;s͛_U]x~͛T^|^U[0dLV4ᜭttGf3 `C;ӟ?fEQE~5/ t{x㆗g׶fSg<b6m>iwoZ殏ܽ01d/P_sG ?w>`;1"Un~=Ư,،|>vӧ? l'eYBBap8>8k֜q,&`T*׎?ԉLLKNz pRABvA 6/'arbLJa k5Ldض\_ Kvb[&Rw1&de!"46R-q,2 c2B 3{'EAc^X`Y",':|o˶] H3%_%i9e@2Y(Ť%-UZk5&dдUn@@GXe)bYh4\r)F̌Z9PHNYժ{+BrSJ۩V~X3>;( UWWvF4B,;22b2T*둓^g)Qņݘ mGu]i&:;8 Eutt q8~y^0}ʟ\8V$ks%W p8MQfSR%p `0h0zz| &/ *Oa'6<;ѥ_:^[Gvnmbl6oݺnUUU q:SSS֭+++,گugrKvbKFX[oڲX񗞖yc`VFΜ.Q׏T摑~yrb4554zNx癊IVn?Ҿ~[bKr:sh,ku@@Z[,**8bHw$M,DL&`ۯtƧ)>F.< $_zzps9s5eEټ[~ -_OLLp8<E PTZ߀R2A}tFהO٬DO,E/zge~P{kkjk@,B4EQ<;Ρ!55$/B*@ĦEk&gݍTr2zgl[fi_H9ovuҸhX,zpAx裷Ϟ^ɨyv?d@HM>{*>gCܣF8aEP.HCٶ |x>h/&vbTS1V`w1 %$EݢVR"h ]m[be󑵴(+CkH"NlT7oY$m"055O<m}բ7YVk^jV)qQ>qa)΋fCfL\ؒI7\LLH՘^W}] W罟~~|iBl(E(M&=vv[g%cMՖ{K\Ҳ)"cs>~ѧGN@ Ss(B|p8fsAA(myOicw{Ǵަp&()xٰA[ t\(]{zc4M#ڂ`ii_XUUhFGG=鬮}>DW=qQRᢤ`'{)Vg]7S^._յaÆ۷l6)B]]ݎ;80n{۶J UuAH5D\<7"ŖF1Rl B! 8O̵EUVV2 pXӕZȟ2?')IҬqdEn6q\D>5j5ZXe&  %$ ^JR*?"'Ų!x1 [2Yg,")P葆FeYe@Oxx*4MKh4Z93EI Y(UOiHU4OY aV,k4#/ITϬǫV~N8h* A\"6,妔 jy| ܞ.,, BvfI;$a !˲###&IRIywuW~|l E\0]-$JHh+ N;;8 Eutt q8~y^0{zJN @\\$]˶RNG0 >{Bp(ͦVY*Lc``h4As3'(ͧ-5q삝SV捹8]ڵek0fy֭v}ll`0P0霚Zn]YYgYU9ؽKA\]݆ؔíG7mNEL`|ň^(@@:3oql z~llLR577G"X,MMM4M^.^8!'%"$FhHÛ=8檤^eU)6XD32 +oNjmm-**8bHJe#d2 v~Ύ\R.IKӯ%V2j[DWgNn Xgg޲ZZz^a$4KBkĹ&5s"NkUJXE.؉Mao[Iot˖˔,R@ kixv:CC r-;v]ikYkj<&dee[68~dİZ\*)'{Q*IDATr]VEضl3Ҧ|sҥq`Xz=E x*!/(e@yw9ޥZ;^or7䌋 bS0AiLp/Fh(z=j[RMy11MSJҘ Q| }C(3`'6:{۳w_vm}6qQH;V'qQRpsꃸ()xBif:59m[pl=qbmh}e&#*b%Onb;~d5WpGl`2["3O=a;a-8sbcB!ȣ߯o̞IB.`_% q % 'iC AF dnO_>];gNl??u6v9vg&wӡ^ IENDB`hydrogen-0.9.6-beta3/data/doc/img/JackTrans_Master.png000066400000000000000000000027611211146647700225130ustar00rootroot00000000000000PNG  IHDR_ 4sBITOtEXtSoftwaregnome-screenshot>IDATXX}PTUݕI[IEB& P ,2ѡT $PfHpJE xk{{ooe?*{~{޹ι]_@XAhIy S_{n&< h]YoЛ)f>eL0٠%KB^_#KCfkW/[>T$J rSG(+$0] fjE,[HHQ*4$48`,čB uE1Q3fݳKQ#MA&cҐ#MHqe 2m" `ޚ-i:qf ޽ ڑ$%Y2 4QcΟ;3|[~cTdoNnߵkw|K fdTVU`w`̺}%9q~nvu{EZP9@)pw~!a/0߷[,@S[εZ/- OU9")չ*mъ׵KavyY) \*x%-<9T-H$ zsG~8V@`;MS>]`F3uܹZȌ1̴2%1Yi痔o%)A)kjlX, 'j_ZJRBP}Z+yabwA&UbPP~I^n_=fN؟\ KyOr1l9'jg־BSd 3ln[W }r0,˔К2W}mګ.BgVůsO IDATxw\ǟ^bł7@آDSyokr11&īc(HHuݙev9ߏo9;wΈI@?E=;' :u|u8ikA  䶶 @A;@X sG  ua@ ,Թ#omVz^9IX $!dju [[J&@&Q@ЀorjJlm!&19k@$Td SsG hfCè$LMr؅r F2sR9s֖RTJ]&M_NL斱xݨ+G]E_틈r7˛u6Z[\dOm\ [?՝Gw Z]0+DMOx.=/]03o7kYe;q&FEj?c~ ?Vh_kd읷\ɋl뻏I_.dשo* 4 hQ%.Mzާywh&a_eː5]o}o-u%\+/ƲJG9ùh ܃.:=Ś&O6clWxE˧bݰ-_u> '9o]O0nwl)K0EV5VexP /8\s0=k9h: 唇bb2m|yFY~uKNj|)z|) ܂9)YRk=da~zu`֝^ct:+MWc7 48zu`@OnE?#ڽst;xf /{1\j4)@QQzR-X4 ;t3QaN}y tEMޭlzÏbQS_P,7&κ뵾_elgx};3 ?ibbҒOX2wp1Nۏ}Ġn֠jȎ wn2&mtc;_{٧rB R_~KH5D PyO?)akrO%Ԑ0A|JoȂMVZԡͩx]_\Prܤ&nk@t=T+|nZ+ίzqZ H~n}c0oP;<&~%C;;צ%=- ߎ__*L"-yMa'N p**>܍ qZj=;]Ý'G+\C'%F0B_N^|\;sCc;p8Tk`vZFecu¶So_{n_Meӳo߸v71ʅ52ʀm֍{_EH$E/[𝣩i]^w)QE Z@U$)ZU]/25~rxȃ|?y0TI5(ХoZMa7RE*'<sϭ}2)~S(W?nČ quo=ޒĩs& ܯK!S>2ǫߠN$eO/',Sq]:Jkx鴁' r:%cO/l!ܥ0=FwOih8<+?q`u)gcD!O<bd"u')KȈ[Q1 _ַLt e PZ&'ҫVQx쓷>qJo]ʔ%NCfa?:mSMEĹwNp׾ԯl<_ڵFp]zw|ٜ "V%HOHOpmfrQ-*j.cZe^ De9Ip]-XٽW7;_޴нD׊0@:"x>Rr801|f4Ȅo @Oi_QY06o*\~Lo8ɝ}A& \F=șBoDxB&W5Ur 5s0 N_OgՁJY]>#2 apʳc^:4?Rbjq'\IK:x̥}9:cT7Iea6q,#*KW9h:. YUjغO޺#9kS1-fY.j:e0zo:ztQyޕNf]:l{AVq^y{?4yzSU4qR$s7ʇs%ATxmWDfܥ6-˞l]ݭ5yɷ^ʖp̴I<͆e ɼpb֋E. Ku":Tus{:9;[T|g,a aۯ|pkK(ˮ|U˧ w`ȫS"/?V8qtcJQb ]sAv!3<_ԛ_˂H%x#)f ܤGK[)iE툓M0vƌ PϷ?߮F~v6Ov2[Y{L]QzcZ[IDQ&lm\0N^~:)'/?w'DMZL`_ĥgT̀6 m|B'?|#PH0>'*IB$PE h#wbaF_P I2IԹ#4ުx~-PMLMIɄ &iM":w@P@ A;@X sG  ua@ ,Թ#Baͧd H6YeG:{iiŤji?N+τ=[87'ۂ *ϔ2#/r_S(C2 ֠3vkL;NI|U ^IehtUidQ\<SRQ̇SS;ɰ`h[Ի2edˠ2z&\Տ dX$u- nZJWaU4ggH;H^G)eĀ#ྌa(izv`HOPϮ9'1{v3mˠF1SXa !md Hdh2 ;88ܼy2L0SXazxd .RLk2mQV2,F2A2a"ֲelȖA2 2#e\le)ȖA2 Ɉp9 aMee%{ii%\2Kd)Ȗy e+**L#mQ [@2X$cB pq=z.brttϝP=AeZŠ2D2 ˓e(2t`ImD [@01] .{Rxyc5p[fl$` -өS'2e23ƖL|-yniڂ~tw,i32H"K+kd2ٝ^Yjkl83,i32!8llsVMd}wƩsN~ݟZSl$` G^2555555 L8z[SʤR Z*T*Q6V5I8W:4l$` -I%led魯ݞ/o%m d  LIGGgЇ(x'򵒝R9γ;p-d ,eĶ6WϷ'&&NF2H"[_t7[ȗ4FjzhU_Ȩr&f@ 0 vAyE9aLe $E2&|e0f HmbXNggI)ȖA2 ɰd[FZx3~hߧERr=f92(Dxaիm;> IDAT~rxY=۵wtr-2?3+e V)+-dЂ&ީMS!Ϡ (qsFh~ܻb7'qX-C;Աd?ݲê߇l:^ٍDmG'7-%<}FFɓ0Q-Ԇ, 9A]=(ũ V247 ϯg\T|zoxTz#N6)f e~0":-C^nmxmɩ¡'wn}NmccCPaa!U=$a6e``՜1iU=V*2̖_iwM~qxji=:uoPs%wbw)dTsBJYYYYYa#b d:N[Va+xOѥ[xk2"3mbkiړw̤B3esX2ʳhZdq\ܝ-3#lepG^^߹s-~֧SWtOҹeLc(<{Oꔬz)1U]VZuO+Xr)fhqdg2Σ?0Ύon,bDb*utk888p #Z[Xc\J]k29[KV1f(JQԹg]DY]kUZY㹳N1SЖ@A0г{}̴ڙݼ1!k{ͨZ*!3PךPɥret6Vl>\s=:T=Lܽ0s 9Ƞ%x*y(ߚ3vdkޅqO*9V^kvUP Yx5ﯾp=YiRk`=x9e2ߘ6ss#s_͵Kg<{KMY0`HC\,Yr)-CAÈ X yuNnϛ2ѐVwey &&L|-yniڂ~tw&I?7%3}q>ma9l-qG珜/@ 98iPT%؝x$e zcYr)lPs(s`?r|\R~}F|+!nZ|H4 5&3"y<uuwIuEM+,b𨽱ع6x&SH*Z;0V2PsXAԢe(oihՌyUգ{ߪ[H)0CcaΪɝl:ٺY8M8utVB"J?4 T* T*g7̖!-/SFi`w[ULj˨-XКS4V>o$/ޒ`2Tg4ĕeՍzk 7oި|ײ2TµVJ&J.$yDd6(4̖! Y^q`1H LurEPnW1-C):[3+¾vR@wzߥ,DU1L` +|'|>P^ o9I*jj$:&LmːO2;” àATsy3,Lߩ㈐-e`ா.Z2e^ nI yQ"  DuM&# q[kT=$F+qfi#!KLj˸yO2;Β^>2@%uõru~0 cFY!À#t:eQ;q6d6n#Vn]C_o'ȓyvw$@׏pttrR]@]FjLFl@_vTLr2F![L-C>1+'[E9C~FpAw8i]e\g\|ЩUgw~uzfZMYo/fdj$|H,--%%zhU_h\Sud2&kk4t6Ie '#gYw]cKb H[ƒQ2xg͌s6aԂ%'&ϵϥ&88T?,?*Qڕ7 `c8d݊ pys.<50& oY mxPv6%nʒ{3***C 8M pN_9g/߄?,!!!,b"&ScH$ fgQC,ݔ.a6J9@ۖ!Nȳ#}{39w̰}n عk|UD, |UJ242[xL !40I Sޡ29۠iCTq׶[>ߞXT8)n233% 8Pm`|*#B}M&m)2qsF9ٹw*no~ѯIZtȞC32* ݧ[A;eĊy= |]lVw٫U5`8Ly -@CoƊ/Z仾sE`׮UmfBwoa>A*#P_\kO?VrQMQ鍦emoE**)N 6=SYfh3a{bcj$AfD>~<8SKsЎq2& '6WJ3RK^8%AYUCkˠLFjC? B |% 1lnr| 1H"6o L"$s+O~ZC8TDD:ki]_,N{kÂC_PЎa2 aWH|gUFed"&dHwA#G;o󤹥)VYl>m^9ٗrD*c!{ . IqѺ?+pLM{^r <ܧ-ˆch$vMX+_3,P:&:vAgp6 gUFdP_I ,36Taɑܺ;.xokP E>|RHAВ ޻63e@VگЬ dwM6uOzًΝk>Ľ̚!y x'CvKiK;AgHЎ2ha2b8Ȳ ԳRBiOuM&aDS+NDž9<~!seEw|wVxt j3Rj_j(yZux-?5̑ =ȿ>t;֘()GxRe;;$Y,f$h401bʈ0(+5( ɤ6=`R_:%̻אq#8Rm[e4f|d1Q$s`r1tmoQޠ߹,hH#!ɫwgTsH3Gman:vA-cpX35B/*IGs6q;1}XcːO28yE +/ݼ<+S ]{lԶeO_K/8 l|zvI;hJA;ɠD pʰe; CRS a" Y4ye5 u eho3ݰD.KאO2WwEIOMhC_O~x[X^J2e;De٭?X-X5g']XUR1xD0'R )Ö|6 JM5Nڠ+Q q ܍HdJ>)O $5"r)n[xd`Yzq$Uec !LPN1Y-'2áua2&2uIm5|ASܐ(TJcXs2ȇ0ˠ>b0"+5&V2XQҝ~@:wC,]C>-C=u83 eʰeT{ЛpԔB D8<W%׹L`WƱrQ5RHiȖ`Pnh"ӺZ Iۇzp -"QxXYw]}}J̍wWS/} MT b[a說*$s'BLlPO呷GyM*Fv aQԌ0$Ҏ?oǮfT+s[>)UVb6XIsN8vĊcUf܉}njթF!l5e4Q"S&ᔖ-v2q'b.zn#DJ:\{KhbT.ð&!Գ 084&+ޚ)I-2jfEXl PRc2p5fM}^lTscWc?q[w"-C[m+SV,bj*AߧmHVWadgkU^}7ՙI3#oT=P̂NLTzLCFj^gܢQ=<21&+$:AV&cy/Ey #L*:vZ+k AUU:Fxe401+ue ek- e0yr/بG6MUE= ;Uxelĺ-Ɋ/Ʌ\lM!`PΚW)ϽF ju/0x8 &#A;,X0+aHl=\Tc?5(V$\dp3EL|ׅ Q}0L|"% #L*:C؆RRsT 5Da1.7gT{K <;n}Xq3aΓuaɁFxe0qm|!UE:\,2`XVHVLϯg\T|zoxT:G #|Uvj/cHXb`1^=!LVn~7l(3U,G!KjKSӋkN [ Ίw&^sU5C :agUxv}T 40aXwntrqː!D2,<+1I?|\"hbnimgk>C{I%$1[6&0ivrva/\o ّpt$N?F7cDE_J̨"ޡ6X"n{k O\OɯslGO2UrL4e8V|v^ +JaV~?]?f^߱ ;KFy* y+?e\=mUR`pz;vth;Ǿsq$¤^;);myi7"I~'9ݵ€c;zI+ˊ3R>px'YrÚ),bjwk>ė18:ɧO^.v3f}Ez=0?&AҐ-=1:IS3ruhf\R„k3gދ8{E 6xS>a 2.=s#5OI n\-|m|7w~nqv׿WWS |8%_wo)V/>L>riu#T_?xvC(`EmH!,ú#-Y5Sw|!+w|\kQjQ/j=2؀ٯ|4r6O[{nޗN;$_i$UØ;ĦWQ6X"CǂKcp9h`H+r2{ ioW#楫Vz*C:NcxΝ:UM"< +8|k>j$i~~豮,^PIʒo%G^p:`ykA)II 64 &}{1 op8p檁3[V7t46X"nӶ|+?Lw!P% J3qc И{e_|!#=2fS}")CQ[*')S+NDž9<~!seEw|w6C"&n 3D;`9~('[QV[F^r㟓-BK⯄y2n_/v$>x@!%da(vkSð8Y|kE, e$%oy2@2X(hۿQR\d Ha^2Xo5eeb:w޽GPQa8M2ً kk_EY6lښ˅B%%  $@2  ` bnV-# F}0'WG{,d Ha@ɶmF޽WUUUbIXkqEu,#Hd#"l۱+;'qS`=N!#QD(@X sG  ua@ ,Թ#:w@P@ A;@X sG  ua@ ,Թ#:w@P@ A;@X sG  ua :u쐟_JA!# ?@@~AäA:IENDB`hydrogen-0.9.6-beta3/data/doc/img/MainControls_Rubberband_btn.png000066400000000000000000000034711211146647700247200ustar00rootroot00000000000000PNG  IHDR,vsBITOtEXtSoftwaregnome-screenshot>IDATxPeǟ=~P (RZ$N!*eet")*h9ڠa860N0@DEeFE1 LkĐ;~u/^tL"po}i4D$.Xh'x<2_QQQ\ ߑq`ߧ״MfUƵQ;_q1ƆΖXpT|R?m'''q.8`/^ApitWbyjuzwv8՗`Iݝ]^ruu6eܹ~̗O}^|+0 Cn75LuU;Mlb"l %bG"{z/@,ax<ބ %?xz"#6D[uU@G8@9ImB&'7/"\m' BHdoo/ gx{~2la] hJb nJRGZKhKŤeSty%:(bK[] S999g$"veGiۛ@,-;-@ "$'?'=?'=$GPeg=T?qfݫSHܝqSȖk5-//d2 u#8ڬB۞/$Tj9m}I$DBi kڲrJCV\@]ҨVلdh&Ubےb}#ZH[VV l֬Hp6(?uz-mCVoOq 6K4,ۆXm&Ė6r&aTeH,m FJRmOIR q&i.hYF[ڊ~̒/woh"mh&)b+.ܴmYef_ɡ>I7zKBּ9چ6Vm^#/WaLu(fYoWʲ0孊K40p6D5]ܼ8,V_wm+iVd6⯄hHٱ33ŭM@ͺ6cmUlyv 3m,LjQmhKݕpNg׀Y`=֬T0$ϫꛍ$̠Fq3I3mKO嗗8.3I hګ666nsԟf]$UIU@f6oݩhoT3`QHDgWxcLY F)+-h ebw=R߸JoZV$K:plϜ%===Z*nt7Yd]6&%v st:N(i޴C3$谷w ϛ^"5kʳM8i*i$-^ Nf)[ #mϪNkHKp;;|2MfO]=:2xJ-]"A jNg-],l江umu6"شn9í;zF m,n yJ?TrF<(V[[bU*lcama0`8"y_hA-Nzv|^oX6+@aZ{&ubqP :'Ȱؓ1ΣѾNfjGJNK lyjzNIENDB`hydrogen-0.9.6-beta3/data/doc/img/MainModePattern.png000066400000000000000000000013031211146647700223360ustar00rootroot00000000000000PNG  IHDRZ pHYs 7˭tIME :SPbIDATxu1h[?3ŋ0༧,v;4lUڽR  #$p쀃sC$w0s_oHw޿κI*@0T@QNnm7\H_xb=esCƸ cofAj4wl=d(LQ0cZX2O)i6Rss2 y:\xƟe|}Vk+G[+Gywf;C03Gڂ(MxzlnsC8ELQXc<ӥVQ; 憨ae3ޚ\K D rJ[z[ j(s4YdW a0Ɵ$9*Ͱ~;PIm vlǙ9f.'>o3>Y맏@yũ~S=~bBé)OuJ*<tހ*Ù/uR5KoWJؔ͢msvg~m7|[:\4-9&B8! :`eJ1f?ӓIENDB`hydrogen-0.9.6-beta3/data/doc/img/MainModeSong.png000066400000000000000000000015461211146647700216400ustar00rootroot00000000000000PNG  IHDRW?PLTE{R]{ 0J$A(A ,J19 9 A 9)0JAUs{j18Z$99@RJYjbi{ZesZi{R]j1@R1Db{9Db{RYjAPs18R)4R),RZ]{Za{A (Jb)bZRbAsR]sAR{R1jbZR{ bJZbJsRZ9jjsAsbZZjZZ ,RZ{9sZ{)0Zjbj)4Z{RYs18b14Rs}{{}{be{ (RJY{(99DRZabZejZeb9DJ ,A1@bAU{(J9@J1@J1 0(:$ 2 $f@ d&,p;=ېH(h*OX8HL@$''m" SE22d0G&W3!߰K** kjòŲ0V2MFIENDB`hydrogen-0.9.6-beta3/data/doc/img/MainPlay.png000066400000000000000000000013161211146647700210250ustar00rootroot00000000000000PNG  IHDRW?8PLTE{R]{ 0J$A(A ,J19 9 A 9)0JAUs{j18Z$99@RJYjbi{ZesZi{R]j1@R1Db{9Db{RYjAPs18R)4R),RZ]{Za{A (JJsAsR]sAJ{J{J ,R)0Z)4Z{RYs18b14Rs}{{}{be{ (RJY{(99DRZabZejZeb9DJ ,A1@bAU{(J9@J1@J1مãyA7/od> }FWfIENDB`hydrogen-0.9.6-beta3/data/doc/img/MainRecord.png000066400000000000000000000012651211146647700213410ustar00rootroot00000000000000PNG  IHDRW?5PLTE{R]{ 0J$A(A ,J19 9 A 9)0JAUs{j18Z$99@RJYjbi{ZesZi{R]j1@R1Db{9Db{RYjAPs18R)4R),RZ]{Za{A (JR]sA])] ])J ,R)0Z)4Z{RYs18b14Rs}{{}{be{ (RJY{(99DRZabZejZeb9DJ ,A1@bAU{(J9@J1@J1}K@ŌC&6$ @}X("(R-D $e/ D0֭]K:2aF0.^$5%Y4%@ TU j҇o(Pޘ=s2׆, P0`*W]=-- =8 Ugy6?RIUVH!M4pl6+!(tQK6 Ӱjզy?͚5NV׌<2$^К~fVB}ڀ>l>ھR< J / BNUQ;Z/ ]nC8"oRZSzM:t3ŋ9vٳy 9{ _[Qa:q/K8Zc>3GOoڕJN]21DaLԥzUU{_rrrҡ!dhSj}u ax8ݖ/>~`h]nwrN U~_؈d$)))nQiOkh@.gr4 T z,4 6&F0|b-URIJJdֵqrssp†:uБ7O<#}ϡ@IDdʹs֯W}C>I1{lǝ?USVCriIB#} 7YeΝ;hڴ8BzT 4^p3K #O3qw?@JLFm YԵ:u;cͶv1E>0$ٞ@^iMa#xl-KCvq#fpbꜨQg0{ij$9%;;g8_K,I{$_0Y֓wu Uד6KVVYYY,Z#GR:m"?xzYUkz /kiܴ!}A Xn5GMe;*1l\zuE?uKO&MhҤW=2N Uۆ 4m! ŪǎDhټ+ ȿb(,V1/;:~3s<Կ:~-БϖM_3Ә>y83ao{!L??]3MgFY/Vd=|S:5ٱ7qݎxS1u<; dm@z鉬^0'>0ZT߬(oV8^ SצıC,}a 3Uf[K}]׆c֠,}a r/JW݋W]صƷcf<+br4G̝ܙ)̾}==FYe Sx =gђ9um'EmZ<_c=s2]2p^0{Λk He&M5{?P9;v\9~z+x˿Pp\k]',5$uhflZ˶hܢ=Ofӵgl\c' * H֝h֓m䓅q}=;6#۶lDǴ:mLyĥ}NX22VCuŢ,VP42 99}/Vt~Dzgr\M:lr9Ο>Α߷^_\WuvX,5iKF]a묝?hk85qFY ASݵz1S+Ҭ}̎1_9JQZ_̻F7ulj#ƒT7TY1o/ڍǿ^!!ʈbCp[[B_=r (/"> (+'rȟG?AOi IZx[ow y>8_=bϿ@QJp(~fKhkQv}o8EN]ߪX, o͟_B\|FJl`f[={Ylוy}}NΑ#vw(Da*fɿ t;fdqm+VϟɉC^T*$QA *nFŚHLLj= -nGΙ(Lm!sJdL.J {8X׺w̸ۯaQQ3^$&<όxo\vo<=MI Z{876ꩩWS )<ԵA!495:JXƃ;KXklm+}(~ktVdE>y3'QakFs.1e+PUkxjSxE9_ h$CBZ466} T,iң tSh2_:ѣG3zh޽BqVoawk3'S~Ka]ryJT?Sȿ؃?zpcHL.o(Ez|TUyv$&% +%lKOTZ:j}t_ VيU*HRRVDZ"2c3jae1[U$%a.k׶;k9*KLB~2W\^Z2^@rJ%bNt\"f2_~,_~K4]kᩮGmKԡ0].PrL#bJkoFu LeD%'/UEjbw+hy`#BQukWls3ywAvqQW{_0yrsAL^I(]kի+%tܼw,~_̞PXC}K{;4lE^j[>twS࿀oi 7lr*.^mneWYbU ]roZf#/[@Ū6iٔr?=PNf6RzN}$EaXЙZcZMEŪ+I,AQ'ɍz gOdՂ'mb2F=9=PU\(m; h,ĸˠW.aU9S2F;h0DaU%dE**bl:BZ1jڅhWbTwuRsrI2'w$?m^׋|] .ؾ_iu4V㡁n\ziY)cBLK޸(G >P[CM׭] &?T>*z: [xR =[`^=?~?srPd\F; [;Oڽ~[+ns0ߙ_?ԷaԽ5իפC>^rwKoSZjŲůϽ.n=9МoUUG1jͺ\H.YEVW7—.jw3UVgʏ|Oz24k۝m>9{ T_%͢nu;,אSbuW/wI)L琣T ϝUr>ԨXT|+Ք58y4?o\R(2*TjU Zik=Ǝ p9ėؿ)oYTwu(cZe۝XG3ݹP~no}]s9ʔɉ߷rq>:~lڅ//M u alhI=,z-hx,۷խ%#lywWqh٭P2a)gڷo_V^uBki$AEB@{ưv=_/ tqw~67=s?ƍ=0}2ǐTBa;^+˿$HIIԩSϾ 77{ν 5nQ~w"lVд2$%ƑP> t_q'1em Ub9omk9r]{ 9)]7o;$ >'Q(_lN8YW3MDEJ1x2VlŎÜC`,Sg77oͅSG9y;\2:)uI꤈Ze@dM$kѪPb'WGSݵM{Lx>GM(K[ǰ]k}$ђЯې шW%e6/z/^BV]\HI=,z-hx[ע*?4HnaNc6^I=/d0ɡKE9/uT5ʩcY >Oc 7=uܠeYNR$0o޽05aAxؑ;O_㪀իW{$,V0&zYV)c[qk.=Zp[}~Viiiy {qZ k~ڎIٳ$)]:~ϐ,yWTsOn}2HԨWT+@ktV 6K R4qQECoO|)\edU.Vu,X3IM&!KrmuFV݈琥TQFg T V)%V>= ]h֗x fKH6AReYc<7vFr bF y$xLS݋QYwF<8 Xh{ q9FҰc&֋T3m{279fn'N>H\1_D6(k/9^q1sOd9yd}c9tq r&;rL&ntW̰>̓`WP@ s(ZMZ<uǏ{Avvs^BQwE>Էo 77ȶJ0gũ RFqϿ/+N[&Xh,|_Zm,#6|ٿ_Q^-OXh#G,M+VP=eRnٯw[qV#ʲc8d5/ɋ۝/h\|d@9Dwyi3 Od1ϛ?TVwo%SyxNJ?̩S'T2F+v"޾/_ywkr_2BjT7],.U,RUF l`ɿ_QX%KW>|O7q,%v>i1g(:I7>^2YaLr&-rF1p]z\'}*7O /OJr; [T; -ȻZOO t8o6 EQx+Mi}?̞9JqSo8&M[o?K96m[Z_OdLFD|l|4]Q!0Cx-,ExX,K.eG]Onb޾ۻ/%~F$Gz|UEqQxrӚ[$Cumbh' 6S~p,ۡgNUϋ|Th@}6{_oFX1@+:=]YԼ"RWRg?H‹II$%%A/>Ok' n˿(G'^*|0e˖7\=B-Bl'ɿ|^a٢W5Ņ(˿?z EQ6lO7\\,]c/Z=xwG13dG<оIL^# Q5 jH'Sճu`m|wx)Ǿ[^?&s$On>Zbg.ǒ%K\w3^I <ث[G 1QX2/]=!3x`.]S}$V+%< =07ߤ>M忸N zvQvyrsOG_&g }8p'7/,_ Hx.iJL)*|hY ‰q5#rlM*nр{Kמo6b˦JL/إ-@Hɿ8s:rao$533EQ\  IDATi7_,Q\6niؓ|kM[*P.HjA~e-f2BΠhw4_u sgQ[Qf!se+;, +.}0lMGD٠:}X\sMvxkwDQ^P>}{04q{)?cgyPUz fyU0Ne]/*޽7pO֎3gغe#TqY̚ z;oQQc&;oOx1F9@rr {b괇ѵ )&Zn d[  łN]2wd]@kEQv}S&&YaE0K<RFF}:3llh4үw[~n>Mۮzsg/rt_Q{=@ orxijNӫ;~zmvwۍXQ+&Q\64HZW~c cܓל`ɋ_r=.Mͪ4jη_-I|+ס-Y|<ʦVbՂs즅 v˿,˘fr{;=zđ$ H]ڰ~Wt܅o-"%%d&kxFޝ5H||m~Tf3%7cF VpK+_5s'%s[yQ.O= K.~Zam{Gɳ$숪k8*<ޖ'xb9 H\6ՋgHHX6ݫdbZ44Gs6P~{]> CY‹#ki^s,S޼|e9~**f|C:uۆl;8s4a[e&;Ϙ(3i¾AQO@2Xf=q&/ `b?hgy[;ϣ[8עgKW<BI!祭!S˿bvY%Fpg[G̞FtCps9/X ~ZRoBۧsun#[XC3Gg|MB1G(\;-Gcy*49; ?]Mn* [Z_U)S~5[3l3([Mj$h?a[yXРA; of=1^m_f-nbHDmd_T[&qw nO 89'c_|ɶ5WKgǮRJ%bJʘHRR`K{D}1 Dɐؼ 6op{o$ھhC7)$v}.jm(! 8t`<tRAc!kSA'IENDB`hydrogen-0.9.6-beta3/data/doc/img/MainToolbar_V2.png000066400000000000000000000266231211146647700221010ustar00rootroot00000000000000PNG  IHDR-{O3sBITOtEXtSoftwaregnome-screenshot> IDATxw|]otQJ),e, a(SGQAĪs,E2,KTP ( ZJ[ \K]V.4}I޼y'oro}ށN2222222O3y ?` Sf 0vˏ f8,M텳f9 Sab*$##Stۭ_2x W!D:B5laj|wY;xg9 P=9Î/!ZM\t{ozd6r*S@#!###âD&'h@9eVV?;W=>tKŃB}DžLA6$dddl`f.6Oe_=[ʸCcb@+2QYߟ/"gE0:%t])omŵ_>"so IN)& !*<(AjZT7ux *##SI_0eۮQ3><4kށmz[AH_0K-mtS8v8SON޲[ Tʹ"󵩭1u>Rڋk#!wH}7xqVOˀN6(q}^;nXo&7 űwh/#=MHr^DƂW0y1g~' >>tظ"v5c3BW Nc6PG%omŵWcc-eFFBcjn~n)D5h .2 !ܵIFFPks SU_7^Kn] 0رcc !T5Bx2qU| 9㈛R2SJ& /b[lNZ꘷g0ﮍ(0}_Z{gsa_N_m=7dìeO6LK_0Ǫ^=!|9tŅb=EȆ ;͏ \߆ɏ$ å +HK{o7u7؟/>qiޙ4mEY5?HNKor H׼ܖ*Py-Ga<Ǐ-IrB+!NG n$`$L"bbpTԣ1 .e T2È>̄>" | A .N o]v$ "Tۥ冄/P 6oʝ =\j-!|6sa"]wP4S i=$TscFU>ͺ79h&I,Lȷ˔zFƟ"ʶ,쑒Fm$ 5PXHzxvC+>+lrASdwh4V"27̡Q BXuq̈́#t˲AҶOZ<ѿy;Kիi ,dA7LbeWPECVzUXݚ ߓD^9ֶu=s-FM 3^;9%Ϥy~ܠ[lfW^QSpLo-ƛ9/_v:cgfs~'CThVX0 G?_SkB $j܎]\[=bW[lC :HP ǼVT=IF_Q,uwDvj2es!Ms@[YI)XqILzV_wԀH;Oy5oA*b:ʮl]s»w#0Ӷ/n#A0@hWS;kʊKdcfA5cc#Aۼ\Db'&xSv+{$dd=G0AS=d6fm{$Q[8&M4ihgϞM{nh"n͌-_Lz$jJo,^)j cXwqE[-kPMihHoؤn7) کheEn^gL^Nb ҇7*ZVME$I1邻3j;d X͢33ÈF`TIa@c t<Tۘ0i[2A=7 ʡA(:? bBOf+uGTC͜)9M @qrU onoס3)///:jxcQ*2jq)c8}t6:\^aC5$HxхٿxtW NEkoGbw.B6N'\3zZGzTjK)փsd n֭E׳=pB|L;W;%=(Oj ; l4!D|\Yg=uh֧Og%%g }uSܻu@t]D9E)>;-BEQ tsWEٲO/YX_5tEFk*=_rww5`A=G Ȏ  O #᠍P8D].٭$aS n=ҧu Cd܅ ikO~V=+U ׁYE rӁq}-^m,h/-Rb}g{/˿v.7j׹Ӏv%WV!рQz$h)" 2ꏜkgroQG!(U`;Wˉ呈+l&F;=|OM ^#Pٻջ8}x7KÛ+ɮ4kXQDcAN+b_w.:A)$HԨ=_?u’=kۀ XՃ$>R~+v-M~v'Ҩ)KyŮ%w MŬ۷o*v֋nl)e? 익/n08rRWŖK#G28t/XN:UӜ"ΖBa{c$Q[\WbbOH8b/8m:vDV\u8ۋ)G~5놈ĥeĕD`ީ.wH@T:oz`V18 R`TM+S()k (*$6Pl$ymb-U4!~4(+ wY׍rǗP܇+t .(J"JVX I@ QL;2qp"ʘI(  a"CJc*(ɮ,~HaTFC _I$A$4zPBQR*r9IZi+޵}7aCb?HеiD;mM&L`m T޼n1GtTWH4Mc")^#{_C9`u2hZ!r\:h5ujXO&J*1` 0 {P 205nwV$尵G}w58'Exdq$Ϯھ#RCCF)^A$܆vz%6mʴ 1g;8nh;+TӰnwmapUKý'h5#!5!O;moٲeƍgJ@UnvuG2ǏoSpE-pƥ4M.\d3>ӶM˶mZ2{#4M3!#j `^ln,ϥɄ%}=R+Cҥn |Dyh뭴 ݺucNnT[HҮl-####G~1?.m7֝R*ySG`y<d(rPڥK9k>f:\B5 m÷oNn]ڽGj2s 7%gꓑg798+GBzw+b&9r$7wɆaWfd}SB  ]RxZB]ȷ'3~-- IDAT0@I5;96p]:mv|5-9BCCm1QCDN~9ZC\?*q^ִ 09V9v /@˗C0 0 !sB0@a@F*,ㅴZGDŵ_|*ڲu,HTGV Lة;#!%Iצy2DHLt)`b+W\κ:Z4<Z#&_k*pK͗_VmҵCOJHR#T`#fcB0A!Lfe ,i j N#={EVƑ!!q3j^A[`Z:' dñF 88<-:uaDq(ѷiy$'#Kʙ'gn =~Z!a0~;}7>){jVBR,ܺ^ 'H&pE,ՏO}}G'pC=9^e{zŎK8͸az,/AɳFM[lBj%EQF„!K؁z +сo+;+ӧ,Jou_qP||Sjv&>bGA0>ʠ=ڭ;~ `[5dCosD9AؓossDv~͙.@}$\h4ZF'N~ϛAƑCz;u@Fw¥6hH_jޖ׌ͺ#h̤Y=X|?#Ɲy?-}=U)~ؾG?m7e, lԲسe%a0G$IH`Xe pBlɾaX]8GfU_l ޸a )RS&>1{1 VdLP([wf'OLͳh#iSO39w̵K+'aφGv{v9/Py;±;bck9\!BB#B(p]8XGź; xkfdsL&s;4ݷX o-YP.nޅ;{kۄ*!/,s#Zyy6\˓֒mEN}RG>|RY6U HT*UPW2Chjv_ z^RA WGV<-iIܩg?w}y6my˜XiZ?t\GAh/1[iQ)RԾJq(/Q` 墽dyIѧN߹dl38yp'ԏ=^O'Ʉߴtz$p{Zc"vKw.\_mp<"Ց<Bq K77Zf&}Gþ'u#>`bn~lVB Q) zlR >$F(9;xA?:b;J h#֥4jbFG S= wz$(0oӦ~,AOa@ЦMԗ/{jl@oL|zCNqwT FƏq0 CeԧM^L{V`as0xАp]=ze)({M?@ P=V|kM|xZy0~I+w<+K>+8P5| { ķP;^6`蠐wM<}fZ>=3-yo5oFHt>ش.Dkw3xdGJq,go#w&={&ݰ {HfMt 4.IhS3?5X~=LN 8nԭwn!A0fw12v05%p`M$Mfw[k#jҮbOO^qwa GMI63{BTxH=&KGPcoAG(!mz$Lzl{wok(i,6\6_o'il 4f$f G/Of$vD (7UNq̓:1+di|v&Ydd)Cm {.Eg]¦6E D}*)PH MΜ9sz o`_cNMZ`'a:+婱Oʣs_ðgH_?yy9A( S.pӿ }Eٶd6F&0!$Vғ<_/lGQ&nJ nD C".y}}I"##S:Ӑ%p=TKRɮ68(8,8w>8AѺ/I 5I!HXodj5 y0H_PԱuZ _ȕ?aA>[4,T%^N11eR&Ls:g :HB! ϞJX%"5gwyGw K!pG!A8"oR呤 J0Ʌ\UxBtQIEb̹xA͙{w,"0˲sxC.R^l`8CQIEBb'%'32LHV=e(Ɍ#'=0EfFLB7J2 XH&߃Bo<$\N'zq)X!r`!B!%B{ʕ+:$w,G)W\M۱ʕ+_NdB.fs:|v&)`0 G5ye nO>DyfMmm,ۋĉ\kCSG'Oo޼Y{N ͛7k>#ՅBF:I%o3g.\iٺ:o?_z'55Ul e?o݃[zL4_tev;=2mɡȐs8g7>~fZI,c5ߵVzqҀy2 @ wBH|QI%ɓ'ۦ}嗵O>dFeɒ%X$ /?p233^o׮]~>eʔ %B3fL̙3O>Ddɒn7;&?z"\,{۶mXn/'k͛+WLIMM:B!Cr RT=$ 7n( ڔ;<֭k+1yT*N}veO˼ZaP(bS5DH?yx׵^4;QQ__/ גRKKK\!V+|knnfcUfYQ7NG@z?!$($tR/hgʪ*{O&m뮻_5u`L7|9V̝;ן4jla>,|yǖ-[4:N[=m[fMѣӕJeVfffFMG<OԄsʕɅ}Y1=ےfsd2̛n)f Deel)FѬj3?z[oQ\y啩III洴4`Ȝ5kpJf͚`\`ɓQ[}ᇪ+V$g1qĴMZ[[I&%sIMHH0geee:uZB5J2 -_ܫ-[h{キ>NٲewKO~??ڊ3ӯZaMiii'Or6lٳGUUU^{M&>zP.\П)lݺU";|w]w޽{/Lmزe7lؠ)))H/H|ꩧǎZ\ZZmذAӾ|>fÆ M6NFeq=qN |jnn-_ܣzz/+\ҽ`_KK~ԩ&\snk---lyy9wI Rmۦ;vl𪫮oSZ;w>۶mSN:5Ws˗{g̘8s #$.Ywg-XW_)322oSPP# E?A1LΝ;Us1ܹwgFkX3uSw_wߝ}P^^Εs֭ӭY&={ոrIDz"x,(fY5 fΪ5$u{H׿Zwm鸌h4bZZ| qȑ#{Zr@PT?-+VH?cG;{qm޼q\m3 #l~/l@z饗:75&jMKKHqsl>t}u| @z[?ٻP(Į1ITH+VpG۷:^t8jĂY9z>̜3g,7TT7:u4g_e:?o?Vr_|EΝ;G]]]3?ݾ{N ?#=6-~gϞm0L<7ް{L&߱HVrkkLMMHӟ+++kP("0O?鵷~ڵkW3Hwu1 o(۷/=y;pƏEӾmܸRVVuwݔ(0 #uݰX,uS :ۮ!IRb>s>Az\$ FXi&aV\魩lkk+;mڴ?o/_,~% I_z!ק~ڲwަeSON-W0 7|3j Ѳez!W^ye-[4EEEM6YO8Ѹs]VV]s5=UۼyGMxGvjꫯ^w `~ӟ&VWWd7n?k,޽{gΜPmUyyy|oB W^ye>fYX~lfoL&qF[䅅};wy^~emUU)_ȷ3g h'|бvGk]j*=_W|GfΜi/+L&ԩS- nvoAAA9s~8$I??5k8N}pcWBbr7o^߾} a ]ړ;sww)((ٳӦM r-{̰lٲ {Wm?#۞5kVj^͝;֟m;={Ϟ=Rnر<]z^Syt%%%9s꫖IW^j//ixW[i~rUWEye;vP>䓎}ݞ})_uSO=x74`;4NVSS#ZlL&Ceeeoh,Zȧ݄0aB56'|vGk՞Gy$fgΜኊp%J%X /ULMMFonb_^^~!d8LB.awu; 2̙3޽{ӧOL4~?=M7|`0'Oѣ̰o`@k֯_~Ǫ\c_=OjVc9`֭QH^uUhl2/!ojiƍI[oiYիgXE<3QFe\~nl2ˍ tv_=Mlkk5E;!qµ("*`Q;v,ϲ,^/ӟ855Uh4Q[;=F577?яRRṚGN_hQeˌ˖-3M10 ))I\zkʔ)IRI,bժU`4 v4M7V+ FNLLTq8l `׋zKTJ}ٖ6++OQ =5KIIH~Yt|o "q(--~% *JIR|%LB.aYYY‚ |;vP:tHi&RG-\05\`4E j  *.d4}\.  VK7pw͚۷+7lؠe̓S뮻x4 KNNof8,LFi7Ǐ9aΝ$26u]r1yoS 7K.-\vyݻW!"V+c{9=<3mpedd%%%}{@ղ+V$WJV+w4gV+=͟-Z n[\\9+cՋ/X, صk/Om5B׍~QVVָ\7|i.̓'Or>dڵk]eee%%%M}!B2 '|GEM?F3yd^VKgϞoݺ6/_n>C.)))3<ʲ,^}U 0oQn߾)z-}9s昴ZmfjjOPTҋ/hk:%F,'|;vlFxw4¿/lW /`2 8;wW^w\n?~8)##l02ϟoR}jzO!#5%[RRx뭷zyʕ+S*߼yNbL&yig}Vtk7eʔ@rrX]]͕rvR.Xk~hpoNrY{xB$!BHPM&!pdGjτl/UI*qBHQI!#%Ca;25sYX@|092r 7 KraQI!##It}kC^1Bz)WR;B:$9!)آ;&B!}SUUeeŹ/&sh>B9:̄A&x`/9]B]_ 8B];?J2Ѣ |xA!ߞ; Bz݀ڊBF&@!aaMJ2 !dD$B!J8ɤLB(ᴦ,g!Mw|f=} tj^t,e( YHI0Y&cVDd&A9&!N2!H2Ei=<: I0hr3F)iZܹZ rFQE8&#G"(Y%L`I;/Ld&4ʱ:VCD4-jn@K݆Y5&̘}8}m ti(;Q1dd=e*يʪ:bŪPzw3B>A:ۙHSSa2+a'$F&BF6.Aʄ(\y5L_fyEeTXˎcoq@2kBuj0jtdۑ#utd&)IND56O' IDATG@H QI!#dƙpfm`U+ \cW/ 92#Sc1޴9)*mM9ɳP΢05΀E7| 8\*=SM,w3vjp"&2?D+FseX\L5a=w9k*nY,Ke5i0}8()=Y"ogq>g+-`;=~nΛVG9~|bI`C^J}eB׭BȞ4EŽ;w`9]> `+vc1(daF+N|R=iuppIֳpY8&ad %xhY|0sL 9vGO{BHPI!#%Bà@e3'/`1Ű_{[@hEf/[M,Z ƹBkN#djX nb㳽6ыNBEaIcѨ8`Ǖ,FŎFi8 h:&ea9 > ml̚^ÇŅ _5rn} [ `+f☜tS.|N}i 7a TZ}xcEWc6+oFÄ2* }dL`ɍ(4Mu1;vbTr6&_}2ff\y5QIWAۑN82=L 1W~镻7>JA1o&@Gq`?\FqnE9=,Ʋ/aJSNSJ5 {\\(9t͉;!- cxoC-BMYZ59h"UdBH4[](.Yœ̢ bAO4f&zQSۂ6 :4q7vnZP@rF.OM*5UUMYǰyIVɃ8pN V\uV8.XhO jԶiEͩ3ki+b/8atHh; F ~Rs%@{tZQBWx]VTWT WV10 z0Qc&CI 1۱ɾ~n}?$ & w#5AIﰠ-m՟f  nㆵM-1\BaG$IFѹ1-4 ɠFى 4;}5ԡ\@}5ɈF52Qg FlEٓ(X\<sr(uP3<< 8 >/0D `؎ BO}'^[*'dlh$/AKA_ƍ1tA ]@KD[/d@CU%-^(S̘8m:fḾoJs !GjE1_?(!ae`9%_ClŹʺ^cJtD!̚[휔uԟ C Ηr32986O蜐AR<;dBFeL`ZtSk$$8($hXX"j?m* m(@C1N& 0kuH`i:Mup;)¤ׂcH)IAHNd@``% o@@FoVY0w(Gel3ung!7Xu Y2P&,z~*5{99FCrIe۲ĦAjo'I@z[GQsٛ(sF@fJ44  *ZF?xFtU^DlJ %2ĀN6Y27 `UzhՆ o@(5A0r 5dA52$#%2QM *qJ EceJC 0OhK4]T\Œ$$&1y\%m&!Ao@1H3HjjTJ^T9qE::t̸j> :4zBrUH RH5 T |R.&Y61 )iH1葞o|JpW'"%#jNqs"-i Ř;Ƅ$#rNѣz]/[1 *r>$!]ɾ~nQsCBZg@RJ22an߀s5{{:G9c'(9W8㲌ș>smhljL9\FeC VSbUa4!|!sRpIV44ay0,tA $($Mc; 2L͊TnҀ(v [HT&Ba؂.-}~F4h< ,TRP@FN pp(Fz }U':!=Ru>}WE4kwjQ2@K}#Ꚛh_(oqt1y6k+xڏq(Fء>SZ* uw8pZ[u9`;JDZ` 2'y[T:ܰ44LJnwDbqF豢僧gP%!ݨBn168]< FdhG SZ*Ro-8x vmnO&Ihr `U(ǹoM( :$''A܍es<$Hh<3~3`J תz+|;oqM4!88;}(QJ[:P[Z:Yiz s (w=/ 6[M!Aނ*iP8Wr+-wdAAE &+59  "%5c'Nw8Bb%Cw ca[ph$|`м#CA<{PyNYxN76ɜm>L/>E/ޑn귧x7ݳ/7s.sDt?^ۅqUBH;Ɍ deo>m`IcmLBZ,5f͜kiv.cӹP[Wד1q@Ӏqct} PsYB(ɌA_Hsض\":Xv_(i=#%2?BVjcBȈD5C,ކqB!dc=p$!WYʚxA!VPTBP94v;ZxA!Q9f|0ޡMQB9D147%Ch~wn(xC!S `"B.&D r!~F !3/UV0!$*sEuC BiKI?ø$.;$($B!CՎeq{lrlhiG9 z}"Tu:+ Z,++ceF&JB Zc@RRBw VdbiFFf6jlJcp\c7R{葔mr)-Ï7P=q! vTV \Ę Nהi(tMcscTZ:2ǀˡT*!s8Z >N݊ 'GeC]V NwAcnnw12wD@kBeA}9 Ņ pDM>BJ,lt:C`YX d`G @#B^݅ZBߝt?|@ yTJ4*%<7l4; ILNdn]mhn~6}LW]j j5ry8D ők̞=%<++ * (((̙3QVVIT;.ۿ?Zl۶I@Djy@Z:;{%Xzߞ VnkA[}_ ͣFo1W6II}mhODI *6k jn484j5gRICݏL&G0+SER&cHA/B(hK4!\Դ ۷oǚ5k" cײ2FH͆$&&Fǰ˺*,,~L$L4 2 YY9HOxK{_VVcj*Fc&oZt!8˿08?!ojFKAM*Fe VE46Y "|^7Du*&ϼ:a>r5BK]l767>canM4 4*H94!-6:^wm >w+f7[.5 1}lvʎUFhZwSۻm/\v&MnkYcykQc11={(dNFT*6I{4yvo`|޿|,v> 钣8[f޴T<wdB43|ӯc\G<8q؁c܄,lkK/ܾ}:۶~Z)HN^t B٭\m)S飥:`NuVAbLO[v2?a&_1ؿw'st;0^:&L'04*r%dQr I3Q[_VxAPj?Μ> O\}Lg#?:;Qn1nHhĉcam2 !=ӦL'éHFl"o1L1 $0m<(*J@0؆c_ЁP[V)݃d|/y`d `Sb|V+ > LBO7ej7J;r~ch8ʎ|O1'ߋoU&hTr-u2QnktyȜy3& `;(/iWSBNn~ uThZ0^ .bE4tyM^yeGLE"EˇE" 'π}$ĨqEHI`<'z.ȍ$*}j13zϹl%4Z"-V^Gmَ%  `s#R瑭.`4bBrJjx(?{ $";')ɉ_(=m4}2MGg{wI  (=}i_h \Θ&kM;EixL:rthm5 ?(zJ$Aυ)5:ԞiXddAΡCRX~Xa)GH%x55! A `R(lMj6n?r4VqXDcfNt'pP `l,g.9uW yarґa౴(# 1^0r 5RG!]iAMm9jOE~z.GQSVM,S5탵8)E) MBj cُ`c6@HM!3j52pr3$0yNCKE 4 iH9Pqd7|2r& )A- z@~J R.Evn*n%EI&!\b:Ŭ)Ha(Biٖ"=2CV E4begN@1D}-For>B "0bj3]-25 Ij8e9s6 Z!Hu (A FsX$*Eӊ6Gxda@03@cImDdAnJ2|X$ENgE R,$A^/4 YHI4C ¡-@؉`X/,2HI/RIr 2 @;kդ!%9*5P&>~&<%քKnw i$&5J^@mB)s29$ I~[Y EsS 2 n?8nоiEiAr m<9yȚ0 z/$NO 6I+Vk(  M): +7uzk%Kp|͚?.RM4hִ۷C&W߮ŷDʴ&|M\}]Bw;)2C@CU >fdKvm$7И__s }.I1"YvbƎ;1wqb^!ǧkbPkx=Nx=ݛ̎' (>}[A(U m6-i .:oVo"-ore9`;]ߣϷ1}lz'ՔJ0!ÜJGٙ9 1ȶ:hn7J 7ڧxm.+ ,dkJQPceH5T6BzeCyPB`CAk"(~A,8 4$2PB@I8*~> ''c!l/a=Q R"9LSeIZ 3x4WW9x|~EJ$9FmS@#(Ȧ IDAT( "D!Cɜ5NB QF7 B  d"BM ybڏrM$W[Ut?.ǃ'@# N.krd4y/<UCjYNEp!*:bp?K@9}_mݍϯ,cYZN%h ~K,l}9VaK @Z#H,L hy]6M1OfKO`I1O; >DeK͛F9 b{pn{~x);{@kk DX-0g$Qn`0m"` @== uXρK5@bdɉޟSTfd.Yؾ};⥗^?K/g,_VVf͚z^7<>ϔ Z5‚p hljASS MNc' T]7Lɨ}wLww2/"WEG*JPSUF3z Xr咈Z"sg=5Ath#Z TlI*,x]aV躅c ̽{r!8{,>Gy)yWxG8t $gebލHē|^FeO&P9CEe nOj5v,0gr66v:>8wÏ=qE$l6SSSTTg_$If3Psp@>G (=ztؘ-{%e3u|>_;y{X="lſcmҐez(IŌɬ ,cY]ahx[N6ׇ/0<^ζ-7G1y?9i!#`W,ٺσ"-k(+E1:ZoA$HxZq[$j5yw6U?]R\hYQ~pa )@@26stM76 KC:{wndCE6hzTrd>u0-yT7cqgL+ښac f3hwq{RJJ>I:]m~H8Z]X~D$:3JM~J}WdYs;P2 u`s$k:qb¶dv3\DLOs#K~R-=z(N^%gzj~CD(bssܺy=oy' ?\ )xLhɹq84S%Vd榸q!KvXSSf,7`V@0(?2W^ycǎͿH9cЀdjj48v9nq2S ag} ˊ&XgqzQO:q"jq)1'[n!K&NfUM?&%LMM'8vغGcc#gΜYz}%KfD,V'ӆm;Pxڱ7RvcJ&zLNVn+'PGDqLX-l:v1!ȊCnƢxiصՇc[yۈ=j(PQRbXTmkVT(a [1&4G %QgEqaSÎ췥tg5'b4&mS0v)8J+ 9jٲ VȊ /o-%m ad̈́XfEW10e@#;6|L J*ˈE$܁RtÌqj 'pCIbL唶>I-vgJ@p Lj'2~'*Q$ Lĉ'E,Vج-HGw{2+ EDfRr+ }q[r^\g++2bjo6}l3A0O佪 JLf"yW*a, ksFF&] UUI&-b$D̵TGy$gjeGGGQKN:;;Y Xj e[K H$qV*+ʰ͌@j6#)NƽR$+9VR.F ۀ>ON6aþjÐ$\[* KضRE .uoU@vмp.IvWbN6↢l<[##aot 2ahG14TɊr|$1$;_5%us2` 4"Ic~'_H $l8bh )R;`24 ɄzW00 YCYKIo˓(zIR0SrEO%R߶E}x(STt$CJ;t%}~03mTJ.Cؒ)̻: Tg1Q>uq|h 2,vq/_1YV+_>?y7\h#];~Q?tMC*QCCC홴c(f#f~ynĎ=$_GSnaߪ.X[ۏNK|1zx~Vӊ˨i9w?pb\]=uN_VWy6 LdnѩKU]ɾ}8x 2LǏёU>sWjN8ѣG9vX6߽$^ɬok/h:|Ny3Y9妭|N~9 Zi\oGŎ BAZC fq-u3}\.Z4jٵI_ަy ev P$Yw%8C:8uqza΃o-[ g#Ǟ_3ϱ_~ie&*+t*A$ΡF( Y<&F&s9uDV(D=@ԗO&-יMLn--V"zȷJV]R&In0R|%sBO2ȗoL-G̾JhP/ MJ[>:Rɤ˛+r+i)ԵH]7+ % \!o]b ]opgrIiU# rq8p8U׃\G8海%S KU^ٳ!Nf1 q(K'|KC$}5)\Ŕ1HnX\G>lf}C ۷7pL+d}IB!cen@K. p4EӍ S2;n^ݐz6s%`jrɵHll1P/aw255Ntᤦvf!6 dO&' }[Β%i+nǥy:Ko[|Vo#y,c:UPחϮ]->ֽ=&P5 @ ugZ =EuǗxblnjö]Nv_Hǭk(C`C(x"1[tU?W0M$qGI~3E |)2u KZ" Vvâ0J,wBD}%)wBɼ f?&C`HN$M[aH$D<>yXhf"QL&z\XwzE^TU~?/~ϥΧKWW>,GI&HJx HH8L-(^4ҝrc2RccY OeHD6(\R-nC}q7u-X6ΞyH9X\za%Fj ͵̩wx㟢^n\#Ddϒ'lu,p'-v{A[w?LI,eсTTؑ[L . 0;5ddR^ǵs?gk~bikpz|\9ywihhTw#zLj$jVf pIgϞAOO7f t0 ::nIJKN08,~&3CȒ5+aJɼ"  A(]@+/VZX[L4fs,IzaMJRBdp.FSUNR%Wƅg't2fspԕR+QZQUu롷R?7o\%87KIafp=Fض3ޡeׂ]9b޶L6;ԁ~ Ց5Tn8[hvƦNT5쒡bKG(n-@i $C]nllMרݺxxW$Iӷ )'DU@BOw0semPUdh\|Glm=';EXhF&\eH>> YvLmuX s)+ bXxƙ'yep`0HMTUcdh!*~4۷7gC54S xpW}7PaN bsjG昝$pSVsIZzى&Ȳ0c}M_vԤ;L? gɷVgI}u4m9JJOL,6=iwF- F5םK$4Ӈ5]H,) 026'-ul`ܮB1>w=t`{M辰iUյ|pW,I0w/z}5XO%&>_۶5v4McxxPpiMRGR]Vv#9Ȱ ~Kz8V~?٣Ecϙ$(P4>yJUuPpx-IFGabl>DTd35>t*Һbmxv9ݶeUf(-]^ H-E#Lx5Kص=z[q2e(X|[l=a:/mAvu3S..)L m=cݗ:8Xl:O;C~xʶʧ|HΚj)/P?ʥؓ;m)g=vUUuc{LWM,6+W iݹ7e~n.K_BYy>_ -Hju8>l @%>avbw#/f3榇>x$H<2G_Z9=ۥeW޿09E,rb-a6=ER}0anbC֝xWay+8on}̎ Ҋ N7U VLÉa]9|ӍZ/rt;WTtץDYoЂ6dfwȠ)DB |#]d"KL6M$z")Bͻ-$?ϐHK뎽,ޑL|ⓟ!HfѮ@ wJ}v sهX>\fU\YOgȤ_?M¡QBpg IDATQ(TI(8K8ڰ7p8n eCuS2gggD+X X٥klGU9վX,e=9~ϗ@`.g$IHDC*%hL[F2$DbeV9L&A{uX iǚ0+c:؋z*tN'o[HAs7B5df>p鿾>1וN&=%RpS] f'*ʅɷX)\ܷ4~b*ش+ϣ {s/cXWҞQ:rւ_87/,˘L⑜KgYIYeEYm =c|16 ff8ƆP7b o>E:-A [lBD}>w|L<6-KZyfp!I,YϿ!gv{hl}8?ܼ~,f3&Պl"E ,ԻNKsȖLۻ0A߽i@dn"vpS^QMyEf!9w]"O eceВIz0L-M&N&LMS w^~;.x^y[רoZEq2Д Yז@py}Eb,pP`ðDI|Kz )&I-Ð్>a׏~Nܠf@  d2XvRk2 #k^Q6o[lo&O8XIU @ V!߃yg,f ޓY^Y3`3ُ~SDVHEZ6[ @ 4~lf!QPg'HFɼߙpC44lnmY7[/ %S Jg?SO=dVIDN,>___/L]GC6&&& r]F]]-g6[@ M/d~iʕ+apeeec=xꩧ6X͆l1ntg}>*F`6[;7׃\U_ɬ ›@ d?d2dVbٌ??˿˂nu]S^sO?t[yg˺s\+_JA{x"8$K 8oRI.*D<$ 9orjɩt&֒ҸuA!  bUW u{HO~ӟٳG7|ww/}K}%_|żfW噜/O?31\G \re%kw;;nO<g?~G$ӣ6[t3Hg˴3"/ 1>ƃT`;,=&4!FB uS2?OE?O/>8x`^|_R2{zzLoؓO>hnn'RU}{^{m INX,_ڶm[֜Y}uc(ID5|w<-۝|82,U-I44K$ }#'g [[ub":y۞lG֍1 ᭮Fo[Ʉ鴣(M뒉$H`(^S+t")4{<{zcU{䯣_2_tdMKo;|\qHд yz9{i`pYT~SnyTy=0v#q|]];^Ő%XҪG)ӊ"ӷB)H&1w U43&ٕL~2>]OR,xlp0PTn S`3סDkކH陹+:@ dʲ\?+))MU">2 f.9}~ ].aKDִit&"\KW dfY[5b$v<+C7Xɬ^;6THMKhK%ΜИA<I/cFȯFGJ/b6+\v; YZ2 bB$b8I5. wy qFF|jqf::q YFv.a܇681_T_5dnH/3HVtP{'$&O ngWs V==c)L{I9U\VM3pH* 1g[2M3>4 |?9CC]AH-gnq;[bhGsM)$"h"TTKw^=P@"u\R҄eEV t`$BNJx$G: [j(n/SNz&> L(X]H:dŌǑ,6Ţ} ki[)ob!![=Tn7j'G;m:ZH:5 @$ff@ X׍2o}644LNNʺR?bmjll\/Q0vޭ}bbB0߿?iۍ#Gz-ۓO>YG>OF9rW8YQMdQfWkd569;!=xIRRJK$ifi>SJyY ^L"8MWq]PkNr(!8AIEV@TF"0RYB4CVdEIoڄr ;AEbKc#6EZO]Zf:aDfg 穣fCx:$Y(*>R2e+lQ!jǮ1:8 :nJ6\Jʼf%-x LO) AתkHȲ20Zh$ct=~'.SDߏ#:ʩuCSdBz:-h45\d;;!FB*6_Ɍ*bo@$km#Ebmnkm+N5)~/h=!6DwTಚN`p8%&,%WY`*c+FSy[ 6r,2̍369G8)sh\P5$Cbij:XDIdEI,\AC%@ponJf__Ouuu vÀcIqIֈĄKٿoo{=WUWUn7~;vWDΙ# auH  mo-g%]csT4䀣?|AKvu}vzc[?Nϻ;U2 @HㄣHMk.9(ɧPoa VZ{qmiсm;Z2ٮ8e}.ݜA?m8ؒq1W$JKKd||`0B ,ap\-C]Dyj]'q_Z(G*9A].?%~$-NDl;৪H{]W89w1&ѕZC{0ko2˵w {y7?v yefz:QW_g3]0)8jZ]xY:T+>^:zO2:2F.eǘN_O|x-/ß44.Rr6tA)a){Aw2GYth `R#@q5&Ki`4OMq~CJ齠Q]Ɣ őO+Lbo=1KIl۹z+̣ܻ?!ɸjTKEdÖ>\M7\?ޡ+Y[RB`zz`0HMM Vd2u@ ,M|饗]]]^x!77sW+*  .dte֭ڻ;~E~ۉ'lN7|/|a_w\fof8ʞg>̮pn:S]T]g1:3ZGm=խXB tyiupn0љ<֏nMzdJ:=QǾ'2I~J(tN}f;c`Hz^e.sk<;%oD.E RZR( x\p5nf\D4_ d$m>;Itv106G: ͋u 5I\ 3: ɘ%P<4kuc JmU lZ& `>~.!׾~|R14£]V{ۏaN=XdXYTRj}nANJ3Hhx$ i~ ĺf`kއpRidt1K~Oc7mxp[ )%R>foVp}c*Na:FS%oT w`b`p.H^xL@ Jm:(۶S׹$%LpR{JcA5",TUU^skO ɺd$1::|߷)ioo7w:MW5q/  rUs=_l[oYѨ( ;vX[;KmH0J,c-)o12@E >nkAc6 Gqd*H$B$p'$%7ag3Dl8H0=Ds^l L,,h̍1k$:3z0r]k5ѓ?7H7oZC|K|ꈙp'?zYB20B172=0L]C_Vp =zҟۇGu8|'{?$y78#ߢ-_%Edqy!o IxEcMNN`AɷFnrzszba<- '~rjX__EH$A7u]N%$R2eeu%X3}\nO2ϯRڃ]d$f0W‡`2xl%L~v `:P~;nx<:\]q@pY7?_gt]^{5oa76G?79b /?Sڟwر+20VTThG={}mAK߯ _?N2sO|']m|k_Rm0>yKv#4\#.KOdFd[ǹu~tw?멐%ss}_ac w~":>d 9-K?#d2z02; VT;yN%=qwbI;ɷ5[١ե.oz$x{5Sii~dƍ?=͛7M#<縧^{t i[n5zLk}}(#hwݡUڤ K%)uRdf7\UP(B(&@xiԻuhY{/3au^uR@ 붒V].JEQe7CYVc޽ɽ{NsJe}g`jrsJw;7[@ {u.+XqAbOl1@ l0&ng IDAT)\\ LLlӉD-CQfB:=-أy*Bw- p"^ :d`sB B7@ |6[ @ ˯]&H8B_σm3/L@ @+&I}7[;$I+ ztp EF5"(Dr!%exiteÍnl?C4'M&vI*轿GV$V>*"ϼfwݎȸfS.^.Sp Nd".]M&]%ITI7c#]fg%sn`S `aLPf.14pٻRB2a K:$'z[=ue\̲FxzDG \kfQ\5fA[x$2t 3LDۛ H2_9vo8xkimֵ 'IP6cDQ233SH_fjr E1Fo)%~z:iNJ-n4g%Im`V$̊L$t($5`3yy>I9^%rZɌETWWqg!=qM&֤d 3;fύewW;;L^YKWu[-uKQhVxyP8Lil?;~;3HB#QKuUY$3/ vw?~L2Jf _T1qvϽ;q*!O;>8DZTJ@˕4H!\5%*-. Ȱz맔Kd2DL!͆IVFSu}YdY=< l44 "cRBV #m[flvfӤa;CzJiW=y `f F!ɚZs8$<4sC _8ӧD,>Ot\$#ϼ\g!ﴔ]|Wfǘ3hB qt&FXYo/Rmr,|Fj~S?'p?oçZXF?Z#|L}>AB00ȱ F2%IFV T b8IJR5尹RrUa#Iа!+"O2;>ww?`O|,>øuvMF4~[k"`l|Ӭ2 R=&8} é05 & QMT$W!M3J CqmYb-ÃvE=l$ƭYA o\-k*:Dܗ/Ϗ~7dCOc7rSj'_͟v<||-~16 ՕIۗP6y!;nw2Z;s8??Jnn1pk;o|}.Ŀ 3瘈6 z CQ$,x%̯?|nh/_RrI $#6Rһ{čkdž ?"`OL23ڹǣEV E<& SXbM5JDjR,XX3{ $_gIRAM1X'ةhFˌ_fa=G7_C}/Fn+I7ӗphn;4\PC .㕏/+Ͻ5Zw?)7 !:0_5*_o1`D#ۘhk ]{h H}oNʼn'B~+W^0]0#ӿ7W^OGKyt=>~7O13{P(*TA^uݎ FR¶mΞk,8kMJC,7'QmBH 2m?ussQ,ۢ^iJ2g{n?I[iZGJZ> ?vC4FT[+9v7٪q@;omG&[;KˬU*LɢݩʂfJaAâHjl?b%l$#tIn%s\r7q'cDS^9ǝ(D d,ɥр?fE 9Χ~~h^*G:YcP8p%@[{Hjcǯ\$Ww [e*z@.ms:}dJG?m~IX۩11HdOc)c"׻MU쿳_ՉH̥Z\܄Nn-+ȥ:|7 w?[P"28zVOL׿ݓ;i}wYzPKqe7=} ?9saKg*pddIFBd@15?qlo]g7W`z!-.L*5l\T.ABFVó^;Ny)^!KPE("C_„CaFk5j^T5]S-܀IEjmWS)'>r5o׉6Fp(շߧѨs_219P0 xꀕތ/#5@~cic&?!3xmlyȕ39sr$soVylLgf$:$L$IbE̞gyy#l鸮"tf$|C\*bb aàBKp #XVUMOzGe^uA$#Vs Ii6,?0m[kHLqGOEQ֪\?rao?;ix6 )t]$-L4rz9V Q#6l솽<kQݚ;Mji vE!$76_~ IXV#B8%5s7:w)Jt[^ʢC7ﱳ˷lr=wRwҺ@ aΝӚ M3 {٪KeH2S{x/?a-@DW@ҟ0~}},-4}!MƶҫE}eolwn^@ dTk}?+l+~7n?8CeL ̐N%pVyFPcqTMEdp-/)QuQ4c1sXf I^1s 0B:VBQd犃C!zF*cRm7&yV+4Q!Dge{&>VBcZrhG&hl )6\Ǔ1MjI1bąEh Zp$LeskTuѐMSj onLv7W-`8=piXmXX)a!"hDE$Uh6hvJdwkKv@H h@~PTY01SݾP>l&CW7qw>Fq$MjEx1m D!qutY`͵`NBs`|3"`I՟SR)Qd{gnm`5s JG-Mb$ezU'dzAv1َp> $*ᰁߵF\*tH$JV90nnUU$ZQ.:BaQI&MVPD"M=B"*i"$F'Lb8yaDIwy "HpA( XݝME`GDZ;J!?C[E˶Y4Kxw -32z_wqPh $F`2 IDAT ? $af/oJ ,K2}$3Lfi<{HюRukg7r߼W>N<,#,IVU#D>o_4 X} O4u=?~r|+ |(ﶎq=xm3&\دw ] 3LpJx>-/vAP)6!9<1 {}˨&t"ca;-oVp*Ȋ||?H*8U1ka쏹IH]<עQ-S7+4LXڿZ=%J AW4 (9^7[VVLt$EGF$IJ@dA'+zBR=`2bxb 5K]9Xמ)I2XJ ١qI%%@wfR 0q,NEc`(4$G7X2\4ԥ+{qCXY?Je$ZDTU]6%**3;wvxMiyȾDP>coL(Ju/O<<0_շqBB((t]gphZ8RU]`xdsDPnζclRA1H ~~X G\YQ2UUc`pEQVLN1j@T@B$ɖ{WZק8> д miY;chdÌ01f~=":oQDaJ-")C H bnd|ZCL&'t7)X2"Cax8E'"3@1桱<8;1YfN%5@Rgmm{TPsFGLlor]pzJr&2Rg,#K22r'^d\+.&D]j?#:q$fie#EH%$z+=={7Ht -hJ(·(z*wE u50(tեȭq^NШ[Ϯu$JݱǬ~q_:s̍aDjx_Y t e.h1Gb6l=qʯq'1{o1>&Î# ]7~ (c3Z Yk܋YFJ;ni*!n5%dY(F[h ezvπߟNtOI7} #M2:6wCCc H>vmuzugk-ɯ.rY)7pw6~ŷr9RQuǷ*@ 7>! ͚CpFĻ߾JJuiTrt 趀=UŬ4) aqF`U!LJ jsɃuci§\AJ[5yhwm$,V)j(D?!E`u´8IIuJOy'N{ ;&Z/Ffj 4je :3%"E,;]xp8T90kY»!Tޥ\% ,ھMbqRm{'v<6.4cjbz xp_yTE4$\ #ȉg<Vw@<xUTՏaw^J>>u_x|١IǦHcDO(4P1,-}ON?y=Wc_WA*\>=c}4lbLY"J& |uޭ%v?L* J<)`ȓ[6(u^ zỈCR"-ˤ[iB~ !)2µڪO]?Hje9 VyIAv1?[?#l_ȪJzRHE梅BD:]bh0;"HH`74F- i-]86-KPwd4]'A؞@T$צlzDQ4ߡiؾB*i P H8DHvTm|$%Uxm;8 Z hoթXSv!^l<^T 1PJD"k`ʵݖ,c&;;/}+-/860ࡌ/af|se~qsfv>l6y/;J˜Oإ-jE8>cٯz| {/ qb+ nOnR8&mJE]K-:vscRwxBWpP &b+NFVn߬ѨW0]oCiݏ >۸W넠X|wÈbѧgyLEQ|JFQ綪 $S.ʗҽחCk^WYQ 4bcF'Sg^VB,.H}]DiK'dtz'M*v[=kd*eۤIvv_Ee/:misLaWɭUɭLu{I˶QVyjkO~JRg}d XO}P5WJ|Ab־;1'ǧG \Vs$"˸=^Cd)hRoB=Nc#}x>f Oԣi(d*Ikmby֊vl& judhq'ddlnOأ3"|88O ѣG/-66/ \ E6z1-N $2 !cy:UՎݩ'ddyU!z|!pl}t촻ңG= ?2޾=zx={ =!GאZiwG=z|Nf(ۗGבRqi=!G=zѣǩ8=!G =!G=zѣgwX\{ѣw: =zѣG=>S̞?.JS̗L(ܛolG"qUvwrO)-ɎpefQ]O*Gpq0Qb}#GA.ma^ cDw]۲]@H(zx,B>\˲]@ Tw?_Z#҄?9RmI?p,)EgDx̟%zW%R{m&"nTo,Q4Y&w"w1iϏ,1QABK ޻ocuš-jn Sx.NӢi;>R"A={f8i6񐐄i6bc"x|׶=@RTPO9Bx6rZABg|i4 E\=H@0:iaxdTR  OxKW877]病0an JXVO>oAۼ Hc?/n{WfÇ$^'Tvqm=*?'L2zf<Ïs|$+\79ۇ|?v(p?_?~#PBA3iN&K%Gb@%]=j8F2szXP{mzΩ"I^5fY _w/Os;/4ɿo1][*c//:r 40]H eW!_։G$v]&.fF ФTl`FdcVZLᓚ}$`R( CxaW)f,b'yVhBvk ;7Z(Ţwx1$IAWEk$D $W)_~Kj}h6ί]cX̀.x5WGqh UUN`W~?jowrgλ 壼%3ޓ%]ʕk3KgǓ ӯqU6/q&ݢ?aZATWܷ"̿U|?J#9;N6wn 3:8Nѯq룏ɝo+.&qMԆG/B@'_()k<{·h&cKij:O6zZ#ǑOR#IjjkG~Fmp$;&vq9ؕ5*5>"GQ0w6xHhQ!K<[١ h,z.R @b9L!ZoIAbzk,<%ԋonzIV")R,Jm[vtd+$?H\ V)kؾIdG@4XN`*f>TڡZإ\oY ?2E":1B h˗Kf]3µ;y$x7I6Rf[q$3[dMGt@a"Dv.p5j]St)%@6^,!\zxM pŪ#+=s$4BQl6CZ]s@٤I.ԫ&J<RxS:aYyQY@n;ܕbp`U:#|'Yl!4 4r;dPݼ>AFôcD>ċ_b:@X,(RT۷d0 'U^p1=L eGUe|/G2'$9Jtg'd*~_z,q#nY&8?T{G:BWN <u7[@"auO %`֪uxd3$dIAAa> epC㵭4A࿐EuT,5,1Uz.6 )C&\ 5Vnft;,c6/:Y2ic-GLG*o%FBS橘ubI"Fa!y<#Q&%rss i9ߴgGm5A|peK$<;mS$J`GTy揟lhz@ !pi>Ze"V91W[K~RvpOpotG-|fݛ7n:ŗ.L0<:۬S\^fĖuHHNY !%Ҽ IDATcY2{ѣG=z~Z[ka_-}YIKn6?{w$ywGW9 0(Q%$0$GxuzcXGc;;`^][$ǮJ+-EI$fstWwGVVޏ_TuwU_3t?3|_>W%FQuDi,º̹ԗ*44hiq*"ED<]n]xeffZ,~ m@iյ8E* tX1 3l:) 癞ginRH B:cfj,l-208=Ʋ 5K,4Z4VA+"c15}ׁ2\>A֓:>*J4722Hڞx( 2%I$I#尪j*/ے!9{Tx0PUʒ`:0($q6"P)+V2g_ӰJ bab/3{5VJ0wj{$+IMsX(^a{}m4shY{ؾJd8mi "F5ďB8pTe`NQɘً̤-Lc?k,4[m0FLdr\zK\bm^4x>q,P H'=k_kZ{LY]V$I$IauJVT 5s+6q%uS>> S 0KW(vl,XD/]\)?h2yi&a*ai{u^\{Ww8szy77ܩ4y94l: [.|c>CCmt:MV$I$I^:5I݁}+w>F54zxxD?H8A?)ĨMp2#LI:,ssI$p5[=+>‡<=7q5bT#3.•w0t pm %(ꨔ]A>*ye^ґ'D'ˇ I$IZ15]Gw&JS]~YI&U8H;A>.v dJ{A~:I$ |#]n v 4Yh$i%)Ҏid C zT*H/;"$IvV$I/&Q,*u:/Mc%=we2(I!A$t|g!I$1$Idy)$2y <%dcsV:(x~Ii*C&`ޡoZO3[T6%I$鹉xcvJ?:K$"d:T&FxA%H(q$2t΁H]z S3XFm;}Rɘ oyiw+$KD8YۥT̠kgZ$I7;SW6[Z¥8}{'I>i2sdMxm!2>]{@:}.D/☟_'C 2%I#N ΖyfgΔ[A$2AF"K*>,YsFHd1Փ;JAiڸ "][G[l 4xjlBGw?Yֈ$3蚎aȘ- T@!||G2>mfUzXO$I$!MY#ΒHlEI7ڭ:2;wz42<*DD$@S-R<^MoVUQ?E"b~('3ZQaKD KTH"Fer1PQǖD'8j -dvUi* Pq$Ȥ;$I$IG^$dyT%r,)ϥ?p 7r"&1aN^.Hd3):=YŨ,@*à(vz+6, U=JStqKf54r<˵6a0OYzٕ$I$I"##&mY2i,K79~]\o@.']:C2@`f@v rͶeZ_"ɎqKBQQzRQa7qh)>˿xx{ί~ANYyD@`rRP֠="fЭ2n^]{XZ͉F|Inn; NgnڍL{Ԗַ%M:UKHZOߓJ$Iq!+$gMznggId ^BaUYuqOn?{fJ$I!JR,bШ3 :E ?7+UiߺƔSeqBUS5,{v儍.mO,^. ;Y[ıwd3I$IZ3]V  F?c!N Ξ y0{ ,ۜ^i|JԭR)pT\rô;Nvf~m!?&XKKϿagE:&_;$I$2g뜍r㣻0;E"Fmg떎dYoXrAQV6 uxZ>/?.epcelX>G6{c^Z~mcUk6|^#֧%_ߪWcs6]xϛ=v<ئu*FQqm{ăxa_:^&BD<Ǜ>%}|£z opلOWۄ sQ5]S) +I$鄻}.f '9Y~},Vx壘&կ=Ԗs j"{|\;44_~k߮+\Dg7sy -\gHz2g'-(b5$I$ID5HҳDZȥqnE6Lcf8e`襋\̫4>{g?ASo^LbrΠ7J-})s"Ʉ9uih>z8\6⛗)<~%I$IfxSIFdX(اk@ALH&!Ro2݈8 s=oz W@1(LO,y=tdIQ\5f x,;&9K_#>'?;a66aSi}0Xjp/O?P44MC[C7V\S."1b3VYJ?~ y-~5 XOy(~?gz-~u~6yd3xe,i9yJީ ll@D}ۡMN-fYTf9J0- TuWJO$4ߧFt$M!#bE#S`EA$P #$ L)&KKZP^/N۫/ߢ8޳T<#c4Mܹ\xb[Vy9 !Oh6:DQ (3;W yJG;Z6Cl&"TU%Hk8sKp~$${17Qm|@ 8=?EZ9 x:U{߲psy Uz6ϧ|eW4|o=^[ J6ǟh}xB:+Um>K3 %nTxh;2ЗZeXUyȧ1{UD᣿SKI\/3x^$dA:_`6Vڴ c2Z&2щcJL[/{TtL2|ۦܼI]WU4-H`&_j,iKi $BBU:vʑA&jGtiL @'Ұ:Aw9{dž zi85_}OL%׊(T*,L0GLX EhN%IjqA@VlڰMCfggHRϵxs% Vsse]Or}BC'=O|qm7>p E'.oޘ6Cڕy^zH{iw937KAsK20dE6gF+K+lX]uKQE3AbM!p*\l:MkS46b~Ĥ3SQĠ?qcM KYLهLb>Ap",Lˆ U<=2y {RL`l|t &z$SL^ڨ Si>BV5xf>BrK,WtGzz_A+d)j*f*HhO[#pU!2Q 3\:.~_3 2sH?Phz*E`2WWЍV_ BU7WU0дB>aY(eiڱ_`h'a[D: Sy?W$鸑AQ""Z++SyJ3AgC^M# .p*O}m oc04Sm/P2F1B3SL?ޠOdݧLrL l?%q݀aL똆`c=?bB0drTs~oL>'y= Xտ|>G:<+˜>sX︥ 󇝍Sՙ.ȶ0 I$~]**Ob+z=:~;_I%&BKt#+<>AemA,.M uuWjx8Q[qmSlt- e6 Nڭz0A^:=Pc`ER?D望Z7,ȄkY־yTUG\H&?lH 4 dy">~bʨ7-$: zu3L^>Pj:Y^Æ ^k'$}*~(D.6 \M[$I$ LJt(,+4>Ga Xyڛ#I$I$I:L$s ߽>ꌱ6Wv6ƍkR6Nߜ~"gӶq6muu]o(mJymzktxbl3 8̥Z$I$߽ӷ;$dYT T^^e"x{={Q1.H&njfK6fs(0yMGTфkr~V+d\ F%y LuSzȱdK+l9\v [ނ+ )o ha <]*N,ǂ[m(A$It!L$xAaӳfQu,Pcd @ѹkШ529r C,S͖Jϣ4!:g߸̌f-!| B58}~b ׬ݢ4rK =ɫʋ%MԅMj!heֱNN$I:/v$IzN[a1BjX t`ST ((>B4 88d&抨Y/[ǂ0L;Lg TYX 7tT@)bbwdSMђ$Itxz=簳 IAazKmAa~W :+Ut '@L`%1V?b =7ϙ8}O39l٣C0JcJ]-o˪Ȓ$I v΂$Iۘ*0U1 2Y2%H%-R,ӥ, =!PתP*B&_d~&KBo8((DA3-Y IDAT0a$*9.B.|Zqh 6*SI. )oOI$i6j4Ά$IpZ;))i= ]Α74 Ce!`&&c겸#9ܢ{}8 HZ-A$@Q1LO9#×Ӡk*(MOi vBBU&I$Iz5U agCm[u 24%.K h[/7bL(ͤ) v^'4Yfa˭VgSz5\S FӸFdG3)@0cX/56M\:51o,[$I} ?2ϳӶ.lLzO[߳X M/}ɱRsC" =UwSo4vg; JM#MG{/^{Hr}q|yc$󰉐YZ]Qׯe8?`"ZK2ZB xtc`_ui>#6պfVluF.K,) k-=2)ktJ$IWgNmycn5 |\x@ TT8dy |mktM)sϼ|ؽN 8}8bIPUUR iaT晷~A0E4\Ko3AYoP}A?"G8E5W@4,23FcQj贛9 aPZ^2-|Z:vCp&5R=;pG, J>"_,a>C f*΁Ըø2 (UU!b@}4(*BD.eϢ0t$yqIΊ$I$\i%2KQub`3g^uia%`!pG4+ Ύ&@ =Z:Q#/^, `zu1gp3 4 |[r; g$/uEbӴݤN{=&}p]97;M$I$I[Z|@^Ŷz8sWF2s=ڝ6J7o;uA@rIWr zNߞw8s|Mq}ܽc}Jeazf.[^=eZm߯.3E6wĕWI/x>ve #JOR=\<σ!bkuԗ:8(2gӳ|[FUU֛3B+ln MXmеOKYve&WnX>Gvn1[-y㶁U7~f5S&{luX'FrYu׵4Ƕ'Ē"o]vuv]v#"޽JNVE_h/BpWMe:G"U8l X|n=1_ׯA:! #(´; b4-ݽɵ׾LUQw+"ܻ3|~y(&"ǴL}W_Ǐ"ql8FQ4aT:(* 8w,T{ٌʥ;$-Z_)~00.uyJ.nsr{6\%߃ޭQ_4WeJ2QCZ`B@$ #b=4Lt#I {_j^[2;;KͰ/Dl62t0Igr4 hR @h٫׈ELբfׂqӲ,;l{>Tf0tjyTqʧæxaT8[oa*P)ΕIk0p\Tuh!$I2TTU81#bT3SUp]01JJ%ijCmqZZF:cvYoSm;K1E3?"oQQ\zXޤҮ!ßyqi;w/P,8g$=3ynv}Zʳ8}?)ogZVU5r"txW^A@bjjZTiaiBHAnX l@ KWN'Hx7 $)N,QU#3@E4 D,d2kvGdzO&N$(~ (nѳ,,Xn/fƓ',nOzCS^㶏 Re# P :tt.CJT=zJ~̌h~js@0lSS@ AbmjA0 ٬K;UAR7MdbNJenVlMH6%KW$8yn0E!8=ܾW0oUT !b B8ϨVW+@0 :TU0o qn"DLAF躾ZuGseZ^UqbMC\Faq\hy k鍿؏T cuyF;_Ķ3cGALx}<'C-p\"Eaz%x.Ɗ qnH䲔sES5x:͘>1S,JǢN&=0R0"vʚYݰ0jaHÒOhlm|OI?NsPaX:v*I/ynvН+B:^[.˪bFqiA: 7?Da~PAcc31s)a\Q<`'hDZu[7oPpىFQ(*uqOl֘1ڣ5aq! arhϱGywfvl=BNVٹv{qA w ~Ꮮ[fczeEvd" i\{MN7=3;\H2V`*`?C^=Ⅾ]ı85M<{क़K"pmj6E=]OKYS:`cpx򤖦}G.jvsS -=ǡ7ݦ'L15] ߮Li7*6=12ut)ϭܻl>8ICqH:&|V+R,BdB^OtTw /NC"JS,? 0M8&A[^<$2Zkn|ʫsҕڶM%LG1.ﴉz$Ç\4Mv`Xڏl6ϯD 3kaOQV:v:]T*sP+q+_G~AaS3ze</@Oa1OjTU^RJe'~& o" 1i-dt{tR9?;)\8CF#B(*qjvD5)İ"YV-UQ/}zA϶ t*ӧfډ$IF޿zRweiig4rܽ˙3I$zA@xGöᘔ`nަz ?O3]xe.]4ׇr*(piL$=S8EQÐf8躎 t4UD?X,j\"K2>nd14Uār˦F"cr29b.'jL\$ "Ou䖩0aՅt4@DaLFUUL`mHfP]Z0o?jj:|yҙ՞sLⰝ;N޿Iro|;ƥKXZZ^"\+aQ*O3p,//( CUL&iMۼ|26ƯqΝu5|dT"P(ni6kFQD9*EY4~˗yͷXwمj~TeQo4uvMm!}GUT2'j6oЁ%`5<{X[;Ϯu׀XY$]i%~dy؄O2( ЧFiUV5 z],vD7hGiKC.IàYПh3h5`8q{1S'DW`E?=J/Z7C*i}PO]%޿/#DZIңKi7w.OAj$ `8\MH Q{8hԫ[}ki7yp]f"A$ |'µNRZ/a۴[ xLB3%bzQ_ N1DEU֪# a%0-~G<=֫%DZQSiV> &?>輐'Cm뗊2Zb-XGiztaZ-@Z;tW73Je: {]M1#Q$Ic0:H&\tw?_|~|{[+y/ы.] C4uua*ʰ}clTΝ;hFwy{wmj^b6d^(j (>)/>4Ν;;=R3W6|nρ?]r3g/P.:ѵ0FU5-^iv@d>Y~:]7;|'^ Y]Љ-.IzA珯$I$#{5huh 8{D,>Bl6eYÿʨ@@բlNeNA6כlݝVWM&S B|;wr`Y:̫3ЮVq6g]у/aGT箭^[?ڳ]b[(iz=yEkJ;pH24YJ lvfHNNj&eU݆3y~:,rv{%#ݞ|q k%[!O݈_s6_irRҘdY~Sh=}-cҹ]2lNO#j4|5:}=!e+V|~BV?G$QUPE@ 8 R&RL0Vw}'N 㬩(]Ke+rݽzn#tYSG#_p5uIy WFQQUH@9s`/`9]U2#6xT^IPBpVv$޲[#-;q#%PC<-TW7P9 Gůٵ}QTR(w@n.&o}}#EylٱIdі p1vd)9!XL0aQIe@ MwP!;f\ U~+l#+;zϏb0֣ @sť#A8*k`)j=G_xd1rZ.fP cTd4ҰIɦpVQR1#2Ȱ"Vu.!FY-J 6ȆwU$@ t%D@ +:?hJ0 M2;hIF 9dz_dMJ8hY-HDQA.&AU!~hv%< a==U-a!d1Z} -ʤt8j* UEAQn$&'FLS0L(w&96$:)"il"nKv"%qu! b#j|{._$EVmd -࡮ i9yZ}4$ [w!ɀI8$Wuz-[uzq~7n+Bj7T]5I4,ZYMS$OP i-]$hnryFC]+}ݍ^k= Mt~$ rs:;L`ػwv{&EBf# 5%f \F0du}ݍ^# /FGwa\pE#АcqGMLzzfH Gۡh!d0J(iт:k1|xP F1ps ײ`{&oܣm( mC 8XL3NxĘ8bCC=LASO;Yu ǨjYH\S bMf{6Tn&SKpY)?핍gdCJ(Զ}MU>ݶm Y6a׬ᤨ rV-eCX EiJ#]ɤokj9 =}B@|cV_B=JQA.vWR[J*Iqu'AJ$)ѯC?֌2UPB83dh0"a? P%! c0(J=`'Z̰w~Fc̸g=m2SO99;d1v55TNzGQyy÷ڋMBm'{+!m_6Q(nS/aߵ^<b@Џ>ϡj*`pg00[,"SudhP@ޯil8ZbRƪJvv65k2-rNkSWYM$a̴c8k<`@"#7|4f< 2Eeh,JsVFAvi L$ Lv j(O_kZ=n<*&l֦f<B!DCc\#UrJ_ZFp57$ΎEU7i?gxhb 8S),/0 "@ HRݪiNjeYh4aU9҅HDYXf8N(b4Zp 3٧i ھTQ5`dJ|[S(7_2Odww5F rSFRZ&E%: RZȐr$9E )) )ʥ8|J)K?ZdM#'/ p fB2Z/&nd0bKO0?<JvnYi?PfT5c>MKlt8rp\X,ʢO>'x'tCn駟+`Ŋ+ؼg&>˕$$ּ+`ƍ@Gʔ$ф HFg9"^Z/#dH thJHGo{gP$ FNOS55,VCCSe FCSUΐیIGc=>h@UU BO06/޸iK^ >{J}Nd6(1, ұj~fl L-7>UU:lGSw2^=ԾlOIOc7hnjdu{b&=F-wV&w$ 'ܴ5d^,ي--4zuͭ0bYB^Zj1eb:1#t A^ %2W@"Q\2!v R3~xwRMӨAÄB!l0Cn6ZZZiCw:ϘOmmm7H яl HMS rzTNcOXY})][ IFɂdh4FŁIBf?KUh·J(b.uwT ݌E ń 0Un׆&^x{}.9@+b 5iY5CY>Pelڴ *^ONNNC !??#8o1I۷o'O_6Gk<3{8g!?9c|87nd٬^ cܹl߾SN9 /z.]hO֭[)//]iw|7oԩSYhs=3go>|AfΜ4?v{/vzꩌ=FF D <| ʎ 9P{3OI2|{シ\tEzilݺ={xb/_Mr:^y,XС---eȐ!UVpB222xי1c{᷿m.++cٲe|eʕNK[nO?^{t <~cnee%O?4ogyf}R o_r=&l+JIq1\S;s,{>_/W߬eȰz{0g夓NbСTVVn:^z%~cϞ=d"ѧdm۶1j(.R/_9hii¿۶mbam^?;vt&Yu۷mYr>S'|ʕ1jh,+;lsݻk𳫮D$.zEګʒlf:l8۷o>仧ʓ<~rwbǎ{=8tV_0|<w}^OCC꿣9v1R Bh=-Ux4A B^7u!|)B4:k p75?(P5/MuL!Rʣ Ph*A_+ Z0 uuMXd@&4FՏ %^REatMx<rss9s8ꨣ8ꨣdddw}_]2UU5k+0tP-Z @qʕ+yS :7xc-E4?& ,W^O? ;87/B7M_#<L v>?͖4C婧b̙<3̝;7)i̟?SRLo޿| H]GSU4UAcđGɗ_eGivqG#Ϗ>_3fο'SUU>3} 7w|{Lv)l28V\ɤIG93i{~r]w_?Q{7W]y^ny߉AQBAxЃp.L}sϲoqԄ F4per/oa3JwC=~3lv4U7/GB]l?tƪU OOΤIذa|M@ 7^8P%d**l$̳aBl>C>#=]6ضm?ڗe'LkshOW)2RS>ǤItk+ݻp'|XcΌb01ƙtI~(7%?0֭WF, P/mr"IRL! OZÛ02fL&f#F0i$n&GB%K?Qwn2/|gqFJQoI%IbСQ\\CGVV---455YVV֡Kx`0Lh鉵;w`lx86l]edd3PL`00d% &3 Ç)S@l 9*|{ꩧ7n-7tVS IDAT2׭]Ccc{,ƍKS$d9g˓Oܤ}E_kUơK{&HPN%LJU *!7Pߣ+qȐ҄(vkXXmin&s؟_{5.~k2cƩ9O?Yf3c d9~#+iȀ EbCsС OjjJ2gl'dȰaÒB~Y";bPo^Qw/O3 !|ks3dHlbUbYY\ kqJBf 6͖݃N/@EžC;Hw-f}"(EQRBUNj?ϔk mOwNmÓW\qwyguė_&ҿW̾wR&8rxtϼTTTtZt߾}mwȐ!zTKUiyϫIss }f]3@dFcMv )i;l8 /))/W?ڵ{{<|A~ϗX!n2lE$QC ,$IXDɈjM#dd"y\*+!TUP''Nȡ ^iI"U5"oƞLEy0~!Yٌ5&riQ^{S[ٌsGF'%)(o|)65ѲqlV\m$mmyVm%kq[ԟ}1Mg8k&Ǽ&h.~'<ڦl׸FʮAKm;PJJvcܹ͐!CR D8ǿ %|) 1WLr,>f6lؐ`*%@l?j(0Q!7`XN$p&/!S7e8}.IRB?>Xp⡇]x7xu\wu;6QUP(VZHx"(h1> ,IhLt )"svʔ),[]j7VS4IHipU{J=h?A%T5$3thf֐Ҭ`0tك,˝MKKʤ>`m~vۉٰaguV?{w+V0{. v8te+IyS袋x'yYxq¾׿vZosՐnܸQ9woKTUUQTT '} cYgWhmS5]訄06K||܁Vwȑvvg;":>l3M8sYb`/-wߍno@UbVSqZhjjҟG$',dIĞ$'|WAA&֯_Y deeeyɱ,OTp4 Q6lH7pJh2#hME"U|!!@0lH6mk0ϬYtm^c=cdffr=z4_ ^{-o| 7|2w\>yW3gP(( vêMdS[o&ٚ=;X.5 DMM ~K`̙ðaػw/ .I8ib̡i!%0x~K/ܹsyg;v,UUU<쳼:̰0^x{T3(]/2 >άYg:nf]a͚5,^2g1+/wUM߉'W_CqI'adĈ@?]ZLBf_R-:(x[|tfM Pw f$W]3>`6$M -I7KHq"dGCQTrp6`˗8Fu[>a͛G `ȑ]izj.\֭[dʔ)yL۷3== /? 6`Z99sW\ϟOV@l˨ex_q++ᡇBerssu I?>rjB]O’%KXdtVu#>v@·+Vn:Od" ҥ+tFHcόTm@O:^/y晧y晧ugpg11N^G=kg}[~,]I9Wt)>&KpUx= dJ(l^Rq׷r rI3 "ЌO Pׄ!e+zʭխ4B!~N y[7(29ZŮ2f{챔N6-Ӡ($1sNé 2D7 ]waNp ]j/O>O>E7nn"ܖۑ]I1c3fݳ:+Tt:v ~*c1+_~tVqq%;v,wqFJYh;v/rԩS5j4W^y%ǏOkΜ9lذ?v0Hĉ;7n|TZ:>[ɣ/o@QOq$s?3f̘_~̘1#SEG:,N9^}Ul̷~,˔2a̙Ø1c?”͞=V?l1Q:}yQ cGR,'` /He5` ٬I2L_ srX0fT $ha5%' @pX=kv>_chۊia! 'IZiBQ!l6uBgPVHd2<~ A5LxL&=۶m(_"S^r2ȶְqW5IdftvP(.$ׄg*o1aε)~!$k:Æ90dȸZ6򭩯.ٞ ަFjZhfFQD;@kHg W%XA&ni&A/  2& M7L&#ާx1|dF-}NrP>~UU"i)6xEP( `PO~o"gjOnA1S3,& !/5-4z/ ]hfN8l4xwHa~.a2o&2}?$Ao#!QWPK($  ih¤ZST-$]⼌mv?;n;^/ !ݻwPPwuœ`Bf?S_^%H(GfĻ^'5^ZPA RWQC|l&# gW0eʱ}ݍ^c˖y举F?z8 0n|22z&άlAddIֵY"wnOP8|~5*ޚJI\r ަ:v4ճ3+6#dM 'n{8FZۨϣ[pSL[vF;ch!@ `6YhinBe <-.Y y ,)wν11D=R(~jq0s(fה@пbfՆ*-,4Lf j'a(lڸav'bw(֚&-z CGޢYXBfDM|AFUU^VsF_wE 2r_Ū;1a!\l޸76 "k_} cޝ46wR{q(a!d0Ng%=|>o_wE0HZm; @ $b'ddDKK%p]33SմX舨m{P gf:,;r9Ə#m;ػ#qAۑJ!d0N=LdYѕRm]ϩDC շ'%ESꋍd,ȆPmm|lm@̳jm®YI ZKǛh>-Ze즈ߎkOJ) f5{Xe#EaǎrkꨭP0L|T@";;mx I@ e@@Ax緽ktӦ-wVAz@z>bHfV:| ` KzzVc3fL沽g÷בf#~o[mƪU(.)9˗/gݻw<3f0).uO?{A9gx_ߝuE;~M2{ł$ SYA dlƍ447y͚tٌl ]kt„#6rDGpQ^CGia3#3P$ԃ=# 4 E麹رhi{+@ i*awitUU~o bVl̖͛Yt)zz}kFnv#7/MtÈFQIJ@ 7]X,Vf+~GFFߏld꾉Zͪ35Q,E uylO梋.-y^>s^~eFӠZdEQ{{zMfn^!y4KIooΫJyy9۶mb0n8&LUW]EVVr ˗[o9fϞ͒%KXbWfƌ<#y( iinR6 }B@' `u[[ ۷VLՋ*v3`@}ɒ%<\rőV3g0s挄/{kFQF].m !SCHFJ 'P{iV rHzWRL zAyxG^?O<\~ 7l?/))aٲe;N;-al+/'`ĈtM>o~xٴio&}2a~_SZ_|l߾'rI'qV$5#]Y٤g&O M u\2SOG8@]U uw(ɌcJ jjꩪ">d$cC46ws/tѣ"Kj/f7i .ƟR졭T}DAN,}/<أ\rʬ^E1j(f͚i(kx2e 7x^h"9 qի?|qb~?^{ o,[%K_ {1]#&[ꭨ؅zvJF)uT!7jU6cHi!CJL3aI&Ғr/ȣđCI`pSTIf!\ؚJK}#յx=xfT1+dCd vcA:sBcΏ8bAoj*qlf…԰~7x#MMMW]]jofѢE<#tI=@нI nini⢩GBHH=&`v',a0:?ާŞ={ٻݻpo>n֤2~_b>B}}5X!%%%|׼ I}kٲe wصk77of`޽+ 隆vJƩ' O>y4>`K/!۶sie]ر~~ IDAT;ZۢiaA8 (!}]d{D'A}>E\۷عs:瞤 >o`Ŋٽ{wwŋtޡAHN%{ݎMuSՖE^~.EYi،2A%@MmB "-Xd !4d5NVIታRH2y9Aq7 sك(kդxdXg)x ??я~f><<+]]]G}矟>Ix6mZw^ t;9X,V4UlbPUłŚlAU}""KudY^LJ/**bѢ(//>e͚5s1I\./8 =N;s `7}~O>\@8|-w/`d*X9 PUTdM<|CuM O<O<̚59sPXX{;v0l0.]{Ͷlu]TTTx̟'[I5MS;N~)[wz4iKD׈16*`b%b.* *h~DAHL1;sqpu3<3y>}MLW)W--(p w}i /0t,YoSOty/pE }ek2:ؑE$&[SPXLaĴTR:> A+HeM#~$&yik":HHJ&''.9{:L 9Ϗ~D|.(,*4^h 664KCrE(Ӎ,;nZ#Ysc~~~D3eL9"g@aaaD_,Y7Z~뭑}D4N t]vJ2ظz5wNfP0edǣ>J0^l'O+V}?S4MAtpef&M 1hF^^]tAug/bذa1-m~_н{D S5dJ +Aj 5/I^%S+vPw?Er]n<.J_cW>3ӘKJJ#1!CGk 2?N'@UChHh "<}:>-;woYx1˖-CQ?SVVO?y2|cs x<466{ngt',Y$N,!M3 9unَpɾ}(--fs(2x` bns[Bf@ҌXyYk`XA 94oCs9eҒPY)lOttٔD韍M[ڵk߲,2B]Kگs666G Kc٣WPjtS/3i20Le4ں:.6oJbB>̌ ׮EH X*t#7)DHM 7]5,_5KfoAgkz+d"@ اgϞ=ww'ꫯrm3h K(\vIaa3|B0CM>&rrօi][HqkNKϹô}2iOJ!%5n 6(G=P ݚ uAdn9YdFL~LȲ6z豫VHab'%&zxw:t<9C?nK.a[oi7wkׂ1V`UViYYTQQii0+Qi94MC5 aPDTIUEBG4zGf':}o YYY۷2ϥƢevvNS .Iu`0gCC0,[GDG W;dvW;fcdvPj()'-n.*(!hRv&DQtr"N5Q;diuXsrWt=kġٳYv}|Ww{آ(Ƒ=6ӉDDQU|_\ ܃AQU犪ukD}_ `B3rfOkB \EQёD)$H6h6CB. Ƃ9Æ \+Rem[cA //MIOO XP>ϐ6{ OϢZ b{1nض퇸:>vc `}-eEٳ:ʊK[XBaq%URY@U*PZJ *Qt4UeWSU)*A -xj*_RMu]Uר)dXx{)++?]8 k̘1b=z4'|2fҤIg̘q"oBv{mEd,*PSc{)..M3LE]g |D ֔6[)hS͛g %$16E5Ch8$ôee)h`8B9?8:gΜx1bѣ֭Cv Dwމ^"Ol6v5vi\.˘qD{W!h2ףA_eP nl_JR:¢JjPT؞*RӨZVYD5j*).5666qy⋭着y?$1uԨ6666Ah: aB& 9D}ykjp2UMMfnQriرc8pv;!d~|9OC׵PNΖZQĔɓPT -&Ok׀<餓}ߑ_#wѢE]z1cg?cg䰔"UBUc#h6Ո?OZZs!C9sk"Sp Q$>ӟ"K'r*g^pse˖-$%%`[MF5%ߞ_\q믿'sѧ~ݺu^}8唑\|EӇ~'x:xoB+3|p;_Υ^)$==kmtTjʎ*r(g׎mu>DE_զBe- > c*z&\[s:j @G=KdYT2~t8]\#So~:qʌU%ۧWll]v]vAsWrWtRLS Ȃ"ۗ/_|8II$Dl`<|g?f\wud7ػws!^-d:h!ziػs0Gx[[]3кҙ-))E8ƢSUǤ0 E+,i#FGnn*?s9s*))?$LTK+o.X:CӐ1rϙ* U-2 * h2D'! asF_ϼ<^{ߘ ~d.$( ~qILIIaٲ#4z33C-dl& Xå fbvY%l!#% ʨ @$%3U4*V*U8sr:$^N5u44f`uHL8"K2eFuUN@T]7L{M(6 j!…53OHV:=Yq8H ,4,#F?Ep/BٯV \N뺹l})[&1CہArTP8B>HJViu1LMׅKo*N ^It&%fjƺImjdohNqy^joE(*n udΘ/ ?oy_Le5]03=׫( ,[B%1H!5 hTx3b@Q4 MsҼ=MPI6I]o`G f0ᄇ@BJ*&zHtˀeW<8<2IT4*CBrBGCu#ebgrP|4c4' Sn-nGQl-2LXxV6!s>EqQj:.}{ ))ɸ.~B*n$G1W^aҥر222SOe\z8Σ#<͛Xדּbڴiqxn38zo۶I&1r(!a#߿6'͛7w1p@N>d||gdggq~8՜GeTM5%9(V=:Rh;9e 4_ ~57$J׍Y kjFECTtMt..餸eJPU J:,!(A4<("."4R^VKgR2I]xdhkgD'p8f,t֕L3\xB^ؿ?k׮eڵlܸ}>NV\0sA?(Hҁ5@]]MKr-rgС駟2}CvB-[83iQ A `O(!I )Ii8B欚t8D%dY 0st_ǐ2#mIسAqȲU&2}q9琐h/G}[oEϞ=sFU'*5UX},k=Ke`5LV^du m|!櫣C,r"KQe Qi`siӅ&(ȸlzj]xHO}#ڲ )%5=(~h ".4YNЧG"5#d?Zl$C69GN~?55~RSSIJLk,ya~OZ6}VUSElc҂蒓FNꢦXy&5 j(-NAiQI"ѓW_OYQ1u UA\=$$)Ak멩"Rp7Pt|5HHIVGYHNXu5UTR" !Kaq>2 IDATfͷݍÎ";+-[ң{ڗ͛7~zdY> +++b{vv6&L`„CA1\ - ן;!!ӱ׷Hxm.{uqy瑙yr4XWµZ(J14Uç ^Vo !<<ݛuM3g9h>m=ףm.{ k*^QvAl;NVt)ߋ6 m en@WTeS5a ֝aB!PYʈ kk'~ 4SjH~+> )lܸnݺE %??yaϠA8S4iRD=[nnG̛7ڵ3n8.䒸ꫯx7Yf ٜ~7@ wz=Ӧsi -blܸ~qgr-ĭcz);Xd Ugڴiڐ{=zXy饗Xf tڕCrM7ѯ_cZ pꩧr 7h">sV^MϞ=?Cacsӑ6? ڋUJSҼ滥iobx5SE χjHU/־EQT4]G ,£y&fTUCDkq9uAg^Ȓ \Ib5 ^@T:vN±-b:S8&##ݻwag'9sp]w؈,dddqF.\?> gҥ|}vmYظq#-gԩQ{{QMee%~)cƌ̞=Ç!Su~z)e-))gҥ=:~EEE̞=#GZB5kxW:nfKܴi_=t҅[|r^~ez)={6ر8Ne2ecYbhllZ5PĿ/?/˸>>l~-]v3d1>|Ff|2.\իٵk'f)BCC9˗)**"##~1vX=sՓO>IA^w$$$ozjlƒ>DA^vȑ#R PUO!XfBQVZŢEؼy 8>o25cRYYɳ>7|C]]zcƌ϶>~ 6m䦛n⤓w{֮]w4߿?SL8ڵkYp!6p3~x#%E8D=cp"۬^5[?/\ ~UUwa 5# t^4M3hwŦ 9$jkk7n7tW]uw͚5 8sL&O㡠dzrJn꫈ɴi>|8=  OC1c KX~=wu(O2i$L0o_⩧"11sr饗"֭㪫믿nu[<> II}/(\{l۶s99s搛KCCO=>(&MbС1Mr?#4M_f̘1?y lll~`V*֯9sp:]q̿<$$$Yt ov&ty2vUxxJJJp:jkk=|AϪU?>^{f͊,bݺu3غumY3g悘o0g.V @3fϡiT}w!ᄏ a޼Qc}vƎ;w"={Wg+/3{q+V,gٲe}'4s_726mĦMFbʔ'x?O("))o;dΜڵkw}v.vemYYyo P__\p23>k8peVv{956m###'xSϽg~39眘U>t]gɖF{| 8 6o ΢EwuK,a|3g:SLaʔ)VyVV .dРA44}^9s&Oèy/~ammll~' tr^KK%VD@6S`Q_E5k/s"I;wW_5s7x#MSk~9GG_~֢jCGϞѣ˖1yd,x_/3fL~>v ̪bȐ!Ajjjp̘1e˖QV^F.]"us_`ĉ#/<3ߟyȾ}Y<Ѓnf2a-ܹ ._t~?O<8&b-Jͮ'|=ԩSy<>GYkq8lݺk+W27SYxq~50q#waA|>~{2BtmX}23YY9>l@Ü 0}2Ps3̦bdFoX?Cݼo@Sd1BEOxЭM\>aQ^:Î{67F#V2G5O財TUeǎmQZZ¡p8Xj!љHMM{  X=U~(\s5 6'x>6nƍyW ./`ԩQ}e'?%K_ڈtXǏESOe޽ڦ:+V`ĉ1ছnC{~EQvٺu+򗿌:)Z UU#&_i:d.][op~kgQ[[k f={K.i`'otӦ-/g礥X3ύ~G>C~>1AtMGuVuZWW{ *olld\F;7,!C{qf ⭷޶ʓ6^96XMs_ٳxgvJr2K~dyKe,`{^{?7vwޜwy{d>`1z#K. \O~2zv5K,̋Ӊ8NxAo;ck㕛ۚ( 4?0ng= ,p C f|bw~T9|xzQP)l!0tDT֦}%YHeG; lrӉl1 ( k׮嫯b޼yl޼"J.]yYLzM3ݻ#l?PQQam/**3 @Fhd[)ڿb>|8VB+nRt:c iȑ#cAHLLB`?T{7:d z;Ƕضme·үvo`,CQ%8U"ꛑLeYoj+;;/w}?\̠A¶ǔ)SZ_ߏ >Iضm[5a$IM7ļysy~1ך&ǏJ_466rWЭ[c:N~_Ob^Ũn6Kl~L["Ed˖-l߾effrտfYt)?iS,z+کbٻg'U-oo.-GÌiM{ 2vvӦM/`ܸqp]wMBf׮au3ٳ'xy"pbI%OOO{pMaa!`Xţ5~Kkƽk׮l۶K49Q#ml:;|@ME%`*J봦ںftRChio `999$%%l\۵kWyyy-aӦMjh_[Zڵ dչieYnU]ӂBňfyNNNvEEE1o !?9ɖ+69K.-ĉ:u*K/'`+w _|_|br_⏃ 55*+]K$)ui~Lc@m߾}m[c'zdMul!XC2dX/u+*Hh2Y &8߱Ȩw 7]IJL2ӓ:X#˅^?444xӧ`J}Ȓ$YV5-IDQoGq)/ ++YcneG}j+㕛\})..!77smsoƌL8źFL&`E}Cx$'tT^^+**Bˉyx׭9 7']GS^ֲnKr!8uza9r =3pw_NA}6 iߏ@޽:+=2c5!LN[ >.p9"!\4$5u(AjҭRVQsPQRR޽ksd<5]r%`&p 믿&30r!5#y)é-y80`'Dm߳gHdzsx*K)(Ɔ:N=~dL [k[U\t4b77b~͛#e…~i͎e?f** Syy9~/ʬ瞵>7oÜ{Zs~Ǐ_^|&ǍG0xpѶ>lA`ѢZm5rrRʄ Dm7f["gZZ`u{瑑Ayy9ᄏ+"b{CCƶy_~m6_'NP&0S [(~j[H#+A!;pH"BJݳIrKq e>$o"d%pA Aۘv$QDq e=.O*B tDQ@ 8q .N yHMթVvr;6㑵pDᗸ)*OMMB.EEE$%'jSXXC=C=DRR}EQci.N?tK43f vfb̘1 8ݻwQZZJZZ=.iBZO>,X &"20b^|Eꪸ7>`{ĉY|9~)v#Gzj233ok }{ꫯgg!%%O?aÆK/M7SO=[oٳgδiӸ 4jt2xUUT QΌ=?<%46ԓyXSUZ()%JKKرX mAGeذaVFnvjjj83q;l0A`ΝW/`A@mf Ygŗ_~IAAN믿chrꩧ2n8Ν 7Y8餓"̟?믿p `˖-<碋.bdeeE 'x"4!уQF\3f Vc͚5dggssel2y049Gv].3g?dʕ1ff̘ի5j4IIIaԨQQ_/y7ٻw/UUUMK/믿fڵ,_L?|L%\n.]hs4u fvZ!#Ds)-@['O<￿.("LxfJ^^o.bFAff&| tڕ~&F|bW#=\N8zMmm{fϞ=ΕWY̚55?<~!Çg׮]lܸ{os_I#*'3|s83Yr%\r . YgŻ 'rJ}?| BFF&~*uƬY/tFFm 6$w~}zm7̽{wNOIe;gd!uBϏkI%Dbv.}r0nve#y Q#m|@mP@+ɔ7P ,PLJL#2^g }r #4_~1cX~4`ZE4-̙3e9;v,cǎ ۻ+oc'x#I?0?0DW\e0tP>Ӹm1#Fxܞ={kcK/Ԋ^ċT+rgy# 6`93=ivٽ-55QFq'׿>N^^+V,gdggsUW5444}={K/w^'|2=' /χ(+UIJJ")))McLG%1cp8An9d$''pỼ̛7|-[k׮WWseEE= IDAT7߰b N>ds뭷fiZ`!LCdR͛g~ o&eذa=7oN`ر< s#ҥK\G 'Ɔ e @ (ž8=.z `AvDrJ.}sh,ŕL?4PZZ нOOB<9)n|55TT58s_/%jM׭% .AO\ʾGՔH6|\ۉtzb~|>ӻw=ztq۱lZ^Åc%\ cRi|mڴٳg#b$|9Z&tצ`m,\AտꪫꪫG79>}:ӧOZ\{ʲ̴iw0m1ah!*|:nIЯ!H2 2:ēHf,˚R "Ndw Y;(ɸLM5^S%}q#xf(1 HDӁ \a5J8 ЯoRSR# ҽ{ЪdzR۴ SuQ cǎ%%% /޽{SUU_K/gx|6u}eYd-ċ88k4M 4 `]Ia k -/nDn fǐ6uvw[h`8ZmEh')sh_9RViYYhZ jjp;L-G¤7Z' dNZ`ztI&G~_R< s""N0E%D7g IzhnORRRHHLg^鍫c2o ĨȲġ<(x"ʝN'?0wy!4Jt6b]vd<h2ml:J͑ 9%02(}P4%@ȨJk*P} MՐdor:]PYJ'XL) (7TeU]]MK3͌fF̌$'XF7y@2Ȗc[a$8!!Fe$'Km#.KUuKtUwuKUw_Ddݼ̛Yy9yQ#2HbtD( d1L ](^brZ.,@ k T\Y(Σn3:T0UӦ`[[9g T[B۞22E G˞#Z'P2{IV>^ r@l[m]&1pE +&t"xDXl8󄼵 %v2!LچI0/AFU9A^WwDc1l"JNq%`&brϧ5SIL[MM14-}%n#$LI$-uDL+l X̜?ωdH cc 6zt{F)Tm"Qgɖ+RP@OA%M&'RdK(u/0aB&ϹTyOd*~/'39;:BUO2]6䧐洮ʇqz 5կᵊ*0<fh ce (8 6)yd_8L"CMɖd}(*q1 (m<;q΃>ȵ^V~OϟgxG?s?sBYز뗓'Or54-'Oj`M0?zB!Ƕ;L \ÄZʒmPի8~B>;?8/|;X2rWB2AnYi;6 ˳oB>a*cQ$+h>dTUF$U'r*LTCd0LPQ(- 9Pww,GEk=eUAQe|}dVں1 t[huҭױ kޝS^yE<䓼oG?w^w]^xᅦ)ecZ,'Np5״}n(4Q311A( IBdץR`;6(55ög}KE^yeҩ@Z{J(]Ƶ͚2(z=̳ԔOg62c;ؖa؀((2zAjm%e8eYXN=bY"1jiZ`z @8`/Y~T\lMTKSGJ˵]4=ԧ>Vu]T*xyt]77ygPQo>fffEe@k˴m'Nh*Dh>?|RxPIu1 uǶFpm20vrī2d;6_'Qyn#5k2tXep EǠ Tl*ǹt\@bymX-֙znkST1k"ku^_*\oF۷333.Gz&5;5Ц"8:)/a0@|6*Nj慳gmHHao ,݆B h\H1ez<<5O[(OӚ:.9|p}Cm׿fّ#GT2'L@pԝzJ8T,^Mx.L:P2{ӧL/'S)f>C2SR)T]\\$: S2 XR(FkN[UJ\WRf&eSul\B>bbPI|2s*KT+&b9c`SwAyxc稟Çk׎njdzsͫyG]oe,kCX[Klw=u}{ۅb)R۾Bo}f219H=&Ds߱oP,NM32  119ETuad$uxMuku!_w1!!ecQ- ɳUӲR\"]Ϻ4jJgOݜHMHK.9CE42Jyd *yCШmEf`VʳJE1W*bN7 +"8' >g f[ 4H$#@ km Z8Kr`^B`S),LLNs`{9" m[n*r% }Vz?##C %(J%$v7@tk dl߶$r[(2wSab ,,bL z;wRkmwڵ`X,.4_4{9~M^|U##C 5K[gPSGFC yW BP݁5Es$ ^|զzěLNM#Iep۷r`޶>z T/ W8K.fyWyE#cY3=&(p mկF{Wwh@ r$zU!_/dBZ3Gu6b̋/Ƭܬ{r=Zg%5''=洭jŗ5e_Ҝ^,9qT]n_^~k(eWTjgzjmQ/.^Q Xa^s!o}/JMs=pwK\@`)z]V^z{ؿo395ڿK/z9y@M)YïCm5d 0\ Fܺ͝涝-ryun:=>&D5ϵnuly4/"k2[t])n[)͹$Zv.ҶEhnse~v{Ȫsf5Eݖn[zVRmt95ʫ۲l׶xnO\v,M$3B*T*:傔(zk2tBUUTEf c[^m4r$msID"LNNrq4McǎD '>'>UT Dc}Dn";Xl(>?WUh?()T I*|<2$cS,6nyexEdp]n##~@D2zH&K#D2gμy:B2'L_XC1ˤIΞZ80ccCHBrf#?8I$F[:Edju$)z̾#xphK)=TUM;D#O2gAzTaGm}FhWaG蔮) @`` NK@ ~_(kiMpI\fެZ*%FS.X*$esLdžIUw|xR0`"FC3x ɲHyT-)_sR9P=3!,@ ,ƉcqC Xwl~ۮݽ>eR?>$-*癈op>$TrW...,(EPUU]ȔΧha^8͝Е0?9[_Uш5$IbU#^,a;V@.V A'F:d˶]E XwI-dv,)$~b\˓48Vd Ls.5c(C .x ˲pEt$EUx=5/rڤ,=@ @ 'b˳[lNNWp˓<8Yk,tϟhx]&98=?{ڇ|:I>ﮕ5=6% NqHh/1TzC:b&n~k!LӜ?Ywn_q3/o}_>Mɼ]olw= 5M94;vY&i4%(i` X3 㩽/{P2q6Eyt J#@ \To>.\жzz3gPTVF`@ Zyzw7yeLL$ַ<ϟ…~q>u IDATyp 嚵^Xb+d0i.p b^gfHXX q(hpE#$IG]Prۿ$ẝ]of4Mcxxx%E&kE| w'g!%wWgltcZ_e[SϒNOwjwAziqJt]3oYJ(+L>ǛA]]aksc2_ZGinY˖4Y)x~yGW5ne/PmӾnrܯ@8M!'ԑ@pEz<OyuyΦ9l6b JTX,( xgWB@\7X,k199Ɏ;ضml9LLL.CCC/ӧۉbۭUuN"-p*y՛;V06L1g"QdʆMԫ 44\s=E/K^TMRnxIRI⃃mkCױ,S7}ϹB3KOp /dKƼ%!'N`vصtdy ԃmŶ:\^?-vk6+Qk9O{:Z+;X.ǘ~v{Ȫs=ͲDlm3}Ħjl?roϓl.]c_Oy&3>L`cEQlpݺ}{x{˿l>v>,x;ؾ}s=<???^Z~~Bc={޶6.\o}+t~~}t__>/wڶmL&?Sz!*O=o{='k_h&_ìkWf,Y+-KeU(p?a׭w6#}mIzL|wϮ[$uUո88 {=۸馚Wm8N3 ;g4K?S6umMٱkqi9;/!/|__ikX1w֭|_殻{geӦ˳mگt~m o.ؿ? k_+~q?o__b׮]LOOuzCe{P6; ų [2ݺPo##\pQFGGYp-ZcsPНmzFF?~yRy[)e)9^[}|K_Gi*mwwAs凿>O?׾5nx TUs_Ů]x|djj_E[j[o~|d```1qyB!C,g(|eZN ]/u ryv}`||WRn[Z]rvrv/²s0>^B;ܶb4Go8!^th"Ax"L i&i&klè-KL&gJ0a2a2P*_g`ػw/oy[x'IO&&&_eB{n~~<~}Q>,֭[?y/>1r7;)l6M 6D0:(jL PbrI)@l|\۶΍(b1bؼAZFtd?@ba # 1>6D{K&:gt$NTrQ)n j)OPq&3X*VZt'Au,ˢT*u4w}7m|jåЪL>y8Ã>u׵y[Pqm˲0M08pǏjZݹw/I!zq3, QUՋn- <}J%3UUٌ֨"d$/[w\Àj. j{X*>]Z*S PrEgˮ٨z?Ŵ,4wU]O={ӧ I*>_ v 賒|CyG>w6oc}ܹ/~|'|}c5LJzzh>O8Q(Ip na& [{9z=l2!_YzquèMtZ bLz=74Ze7]MӜuWUU<OU2a+dv%@'adS;?DTl,kO(}~ӜE?gN'i?Q3Bac ?;Ih`2j*2@Sți"2(.O{[~8ˍ:d2emHIq'_&{^oO~]G>l?AsٳX5/IPo榛nZ͛7y. 8Y lFUޚjm C+&.q .Z3vz'mWuqر>q̞{ZԵjɜ{>箽{/圥Ri^?"Z&۳PVw +9ˠu@i Y53'-N?L!fx0jV8s. 12 0uKҼ|i m@sJqfIFFg}ɲJ,6BX*^:]wŷmy$I#Ȳ}{QB>,g>VoΝ@-<`Yby ?/n=G˲RWldYX.q #lЖFÙ~dK6TZ4ڵ[Z ۷ocmmuΑr djY|Ps> ZS︵mܲsm[2dvWgjj; 1'aUK2[2F.aPO[X#+HQQ=*J-3 kQHg)۸H}^|*Xǣ"I ^|>/:3b +B%\W,zY{ gӒ)By\w344r W_}*gx; q=s14Tw믿W^y??_b~NR`ޏT6\:u˪b^*\]/q ;JW+zKٖEZ!Z]%3`5ׯo |^~ C躎xD'x6rфR@&U`G Um&wޤD$&IM&ycDt6b`.WD H(sg[`Y&62f1sχGr1MȂ\Qi,EQdkST1W턇kuWF0$?ue33\:FDEbt>G'?,{~??7 ɲ|+_nyW_unJZ?[=z׻?ݼ`F?b= _P OJXwѰmK(gLp8J8].@7L.uP (̮#38>W*劅b?.ibK~b~ƽ$p'ͧ3XU0۶qD|B0#N@@a26Qk[}>شi8|-;VG}G}D"׿y'oSOqO;;<<޲e xRxlͨbyxnhFbpÇ2iSY5LlR?8\wu<}ݻevg||J$'7ޘvΝ<䓼>|cǎcm5eY²,.>_g%IZQkŮza޿tz7I-HL?mٺ껮HH{EYo yO wuC>(ɳULNa6BP|X㐛CDPo,An:EXr>O 5;FQ%_n+A!e r-\VH$`={pp sӦMlZ@y$}o߾<ڢ_QlۦZR*1K['8!"Ho*SB\azɅK>^Y`;5lۡ\.Q*ExEzSɄ= P2WZűH5eY̤S1~@ ލ.k& o+z=~r<׋8E ZqGEet@U$Y4-<v%cW֏m:^ESi1d,Ix<4kR.Ez x.Z{7umvKKQ~RK(j/_ ]IyǩVENk:j@  YvVv_۶d(LCw@u`|͛ǹff^z56m D"eoMɉoxC~ؿoS?|cܱ !/r9\Mb&Ȋixl6RO˕(fxd~9gjecv5s vk*ۭ7Bm< m!5\Y;ݞ{l`6mjYkEmMƵnsr6jkkWeO[hm^yr=HEv5l?qxKeΞ=RYrkx|`[; nXN,Yٯ}I-<#k.Zt~+G|cÌo~(,s-ogtd3{n4 @&c`Mó;Ri&LM'k=}~˲FŒ02`d$뇏q/t:ÿ?ٿo?c6i Uwu9w.6s>G\Ŷ힛02mqGml %cB~B>prLO`{C1v[?ȣSfr4d:Ǯ8gcۂAt~<~/|Y]a̩S˽^muVXh  g(u$^+?qA󫸍HJ "P$4BDB~TS訄 NBTb: { B=`&2AYȒF0# &)Wt絺Wq NL&:JikX,5@0Dy/<%+' t[`EDQdM X\"%H0}a ,N'9{.hccAD^d$* #` ߇dH'LTCTC7%KΓ8xB++(I)')Q4_u敵"Ĺ&/Z XCn ,UW_hv",.).+.LdFi\Wٹ%&mKpզЌcLe3PQ\(P7Ⱥ4h9Ts3("Ɍoo {90vv{N=h` )Xh>V61y}^C//k`^J<1@wv˿,z=x=BYn1,qEdU!׼ض=ۨ>i \V@'" %$'VXࢗrT6m01F Ӈc[$'S*ELlO"ש#@ $E(0  @ Djp%}%]߈﻾߷7*FIVJټ۪Wӗlf#QI&R zq}7o=JuIO}[(A^P%X{W-@ ؖI$ߌxy񫷣WE`#,CDAoβ55yIeS ,gμI0ahxa d<2}q R)P0Lì?ixz= @CX\Y&[n w'z2`j:}]-B% %VJBT^P2{IR|~>.rRJŔbv~aw[\eR) y%_BŶL&gzqJ 5dYx/˲u˲44MHjix xOkD{%1CG8/;~dǯf|8UpLOLqvB<`:>]Z$*S PrEgˮXs_Od1- ]UygϞȲ@ L2y]v222(oC`/t4cy\榛n+eQg$?L:}>x^%f̜|@纫{vpޝ@Mټ~d %HxPڱ Dt l8ce>vlƧJXTKf[DlgGD3:x"l=7fb2͌.f?_%R,~CQ\8C.{;$DZx\+L\*gPqfAz~$IX/uf+q3hImcǞGա14/7mXP0[ٻgzeM@6JfQBC.F6) $\rl}RkXɉ ,WB Fd_;GB8`p Y,Q0=lM)S5‘Û4gO[%Xd@mK*y*N 4 +Q&"g\*ez1WxdF-㹈aFǻ-bWq)Zo].NQ0A"s+X:V_DaTȑcgF4׼.bPF2Iv,2/.:ǧ$+JH Ru,{<"(µ[ƩTƺuxVGpeA4_IRvホ1(ex<+JG( HM7݀393@@ ǫC,ERy@g@ P23̣ Gx]TlW2m4M\yCmFr٠R $=eV+0g`|EA¹#=sEx@.GuvX(ד/r|D"B~ۯJUfxxlۼx%@Jf<{\=O^.Q,W1LLa(P4\ԄkDP$LT<պ>b l.3]iqdҼn^< eEП t[G4>|M-Ϊk7 WÇk׎Wh?s]ߕϽv.,+YrٙKnKWEyQ=~lۡضv &B\ƨ@R4fz ^GjZo阔yJF %CXZ9 @ \"cKn3Zq}IRh=ߏOR*W:W d29Ջt"">^вJ b(F,B!_$_4)Lr62W d2y H$y2Ek)D"ϓy#F,,71%&@Aض,JȔJ%.L,B Jtl["EW8UZMFBr:{y Z$@ёa}*cWlb6i"JU iN G]LɔTcP2WP2WZű;{n+;;W$Ap(rw؎=)g2SCC%U[2OgTRLƩZ)H$5$!ARR~$s ]=2):¶m,52|s"cQ`h~--7bq4?(UjE'zRrS3+R o~ 32ᘡ_M)Y &,S*L2~ߛiXSl謮$| %> e뭡TYYMͯFtÛX?R2h{zXU(7dBԮL 8[YYݟ^Hfu;% ՛LEzt瞞,f8ڝ k/sUnwoH$p8nPw2TtmV!(VZݳEyaNې{&ORbhLϥ[߳t%h(GزlWDD!C \_MU%:+YhpuƔdTe'hEt*Z^ƔHwt%D!(9wO/5ΐ33z^%#Uu 9^}pjoRsՓQ dfCg')c FJjS)I-dn?o|q11 WWnm=&mC?Mv{g_[x%YucmNͺY3flLi˼볶65,ibצ^ǻ뵝]gu]=}H =W^Iv~kk|ϼ?j0i߸W?0h_#וG&rZĴToWZ?TQi-ϖT6==x.4rU %N$ٚŽrZ^O\Ske-4[#P:G+;dJRNb^+UG K7.T'03S<żtc<-7m팩Gy WpžŇueȧz’|*:)φ5LB|~?1ϐaxC==3KJJnyפ󯴸f[0ŕ dfW'y`|Q~!rd9[11I~BAɓ yrje-/TU*F54:'\j^/P:3ڲW^É>k4=Asowm':t5a|RWY-2_3Y[ah!-t ÅżV,P# $ӕ|>ދ񏁠_ly)1-V7$yrT74Uh K]۩\y7N6ěkJ쏐 8Nj6;ݗh㏥IErVTDgU9z1*e.'MɕeR0D$jes:Uu+U]rɖIsS_|A*jXV})EmNY+}[ݝ{F6Ge9ySo}eknFݼ%yCq-n/(?LHϬo aŒ1E+eUKsꭋgYֺS)=`YF<%RL+\Z՝'Kv;dg0o)߯LRʚ. zP9Fy=N9B1H+I+* HT-Je{6Iv?,VR\W8Tn?mj㺞|LG`{ 8jŵ5-Wd|lg(.ܣq\bQj[/6_$Gs41~g3O< 5pR_,?׭;ZZk27Vf/gLhΎz[o駚PY3n܌z;Ү)U5ŗ@:ʦBRe^ 6$7\9ʺjW"䨼^jPo6`@TC}qPe{sX*D$ ǬTfmaSO:H/ɬT^2_\ꁗ{yim^Z=?}8ី)yrKnHDFPDryTG"جZ3 H$sW՚yDeF0dX~圦gr%c\Gg(>03I!u,f7L5 >WE˧ז噦JF3 UMm] E4) 3*.*ZV)P6ߐ!OQPBa_E)pw5pZ%|1;wIH\ahppLBX,vlj*'zT@_8*+W|x rkx#dv?ޯS\Q6 &uI-1 s _kZQU)Ba $B&b2!Io|>WsTVD)3W0K"<~FKg9d:@;;2g 5VF_|JU(Ou|o^U25uy~k ǭ\n|nr;'-NcM=nlcfES3+GܣU+ JI81!d: B&c!d: B&c!d: c#ݻ{]֣gw Yo=yGNȬY] 48tVgw"dLzv2Km2p1L&A@WEaEnwKX\UF@W]vSnwKwbW!GۺuwR-(yoFv!G dxnvw$-6 #g$+T˽*|~l 8rylW?xD\lFow B&c!d: B&c!d: B&c!d:&!CʅIj!WQ"ٳ~RQuxi#O)~X/I*NerP۳͛_RayuQȾ+./To۩Q]+.*w}!GX붬'm̿s9p\2HMkx O?;zo}Mm;Կ:woyi^F,vFZXܴ}LѶ*vL[mﹼRtt{BĉvG; |\<0v]?Uk}N~.ljkٶ?##z'wt!'O>;MJE 5lum۹Ν˶cc_Zqgk;HN48tFޏH\.mo Ba}岑HL/\RvpDnH$&۶e8N8c`z`cp~g k̗ؿKqY-ޜ'蝫7ߟ 'L5kBWwܾu`F/l*۶^k9:w]ٲ%%MM]ܥMm,Ӕifp2H"te~ ַ٦Xg׷]"vkv[,o&~ffV++-#IUp2pzrOo)Vco7žҽ# j1@eCt !1L@2Ct !1L@2Ct !1L@2Ct !1L@2Ct !1L@2Ct !1L@2Ct !1L@2Ct !1L@2Ct !1nwَ-\eu]y{Dns7̶m9ua {(g;vWx"d'PZQZуT_f5 уJex +K'X,V7X/jeyPGn+QZp6;=wAkKI/#I+'cI7kc^g Xo_VJ^^XYz#ʶAg<ft좦>GrҊWg&!7!8|~mY CM =ו8eiqӶe0 q}&]\$mģ]׃=-?~5"՚"U&he7Ht,0Έc2dv2_'3%pZM릖WbP\V90TIENDB`hydrogen-0.9.6-beta3/data/doc/img/MeasureSettings.png000066400000000000000000000026111211146647700224340ustar00rootroot00000000000000PNG  IHDRW,O9sBITOtEXtSoftwaregnome-screenshot>IDAThYLW-B+0f86LM4Ε!JWn 361s[7fdlqdSI(3Kc/Rp ʄ,wמ~xs>#`2}53!6qXwf\<\ :]ؔҍmH:]x@\NNWu Ux ${O:zYVk/O8(4PU X,Iƹ~v*d:6 pg\.#!e+7]-(IsIhυ9 N摁}~<)`ЍdOV H$c[o?m;d7d`nAIZXوdO`2zu;u;{L&-O-`0 oJ% *mZ@z ~n7%/ݞ_ ,cR;j4F|4H`P(;&ERQG$ ZzχdRZG0zGδ77@k[jXmjq"jb={h m ޑaVlƜBw\G/ذ* )~L/*-(+CHvO<s\vԉz/ xsp{眗/=Diܐ/ xτgt۳d0<3*/gB!'"k $LLNaٹwF/ &.G\/00S fԈ }J́ç^</*he-D5"Z#erŸ WF#Z`s糯̉fӨfw8g|n9;}fND Xh,Yr[0>:rhhH߃Z>Lz}=b[X4J34/h!Sh<̚?ϱ%.Tk&lfOIDATX혽O@s{"Q(D Ecآ0?f!qhn@L, b)4j- ·H ɻw=?;ot1&d]1D2滒L." gj PW obiMg/^WוtqP׎7A’ϳN ʚb?R &+ U;QZ P@ ħX,n1ZXTDmzSԌOƵZe@zf=9ki9r)Ig3鋫h y#_t\3ƢяkQ3 h$ aR*+b(}4vP)˫=wxv^7?7˅mSkbB!8D؋ :|qf~ph{Tt3)n #E)5MSiA)֩@2B=VR.Yr!'EinE"n覔 ˲6DWTػull=JQʤs7D;c91+ʟ\ӯL䛄o&|BIENDB`hydrogen-0.9.6-beta3/data/doc/img/Midi_Actions.png000066400000000000000000001112561211146647700216620ustar00rootroot00000000000000PNG  IHDR/=usBITOtEXtSoftwaregnome-screenshot> IDATxw\ =!*u qTq[mUjmjօ{o8P7CT@e#ِu9ܧ˓޻{Z?SlAe|6-~ᖩU[(753f.۳%]rslh%D Ws5273s/ D$(a6ν> $XlN2Naxj4uwWGUi1w\#D"YoD ǚ?V%[8zY5eEmím)R_`ߑq i5qHq\хԔdmݿwojyms˨J]dc \)yCqltJ_QAR7o]sƔ)eV 9;[]ظ|rΧ,yBuk7r wCu Do?xu^m6+Kgڟz?s Q]~̑hPNp?o[:k ER r_',*]fhMז*,i`۠Zd#ȕݶBlՈ"}״Ojt/"VinֺAChEBa]]9"W37 :]L^ے^ :wS2t`a"D*v42t}hh×n>թ2}۴[l{=Xi7irs]w PT% [סY{/S0&UGs|L茉{#yf'Q[$hm[AwŚ&.srgJL7k <ݲxX.1vI.FԧVuAldw Oa'W|yW-nojbM*ؼfwR6cGgp vի?sٕ4r& -2+sg7hX"xQ!d~YVD5khdo͖I?bQaRȵ;,\9ٔ ~>:G#--XNקvu~LTr"o~-wR1rwQLD\(g{#QQEPV>+'}L/×~AZy"|P. ,-s_](Xwދ r-ܛ\QavPT=CT:كc2=Ұu_o(t{6gێOfzV*|RrCkWya_HGIş9)QӦ-)=gL?gثxl-ّ75.ue̵R d뻌̻p"[zSZ9Op⿮mhW'gBXiuX!Kyx mj%J~421R+jmjމ\@v;w־q B]`x_|K }ljLVeN^$&$GglQi93:,a~"bՏ/ѭpSҩݛT,)}}Zdѐ*rM!k=zﶓNiDiٍƿ݈gN\ȲS i'Dfj/|vl'>-*.*uNXķA}(;:+}|SCe S2qU(?T֮Y3+nX-=i6PPWB)ɱa'o:Rҹ>C_yմwmBDY~*νU!ךadԴE⒳JT$5lгnF&s>0Uô⩫a Kְ֖d )|w0GޞƑHhKIƐNxSr8EL .=p_^ 7`MSۨPtγ/97^s/G/~hΝ:TFUx{-ZlaۏΉ3 DBPTa" //]|/"ŒWNu7J"1x16 ѭa 'hcž DKNHI娩ZwK]mzP@zm2\h*hQvbP2]W2P`,-۾'dQڌE@DwUV..*{^7{ZpZ%fxIo+N s=z%HD4ReEʽ''?m6]ǮvzgbnenJծuAb ?m  {82lJ.} g|HS](~,SQn"Ek =˩OE*("mZ$!]x+?>gaҿ wld4&>@qשOqڎueVQMM %Gm)SJNH J^\2  4ZPq4 jՎ/4 iRֵ0R/$2[ DMI{Jʄn\Nfi,&3|E^vl@]v}Bŋ8Ҵh}7KszD>7&[tUlܝՖ^6mq(B@ٴPD>orzZ?JDE/2"_]:weC[_:m ~mS]->=/O/욕O;trhiԜ׭<ZTv Ҷ0-*„&@H鿀&Pzt'fA铧E. H v  @ITrd_?3>5T@AĹ{vy?^D1Oo쇸r/yӣإ:TybK5²%'ߛfi-Zro+)KL{6-ixZ^[,BxjLAF|Z#nҐKA 2b(3eq U[¸BZJgIUSfOxv]5J4_#, :w|5ӒKiȾG▬V%Ac/G'FhBQʦj*M-K vvhҢu)絣Fཻ|'iw>{9Ywu`gFg @T.2ho\KSy3ۚr𨉑s#iy!Lbɐزg7SJ:EN3OXm1 #Ƌ҈AW[M6eM*慳lÁ$&..Q dֿMQ˾[r껎׊"@(#kcrR1aقJ' hw=s1'?+tV.WLe߮YKkQq4‹4v`d4!!@׼DolM[h7׵%aaZkL[]­Z;¢|'ҙ7׭9]>{*稳/œcԜ'-g#i+~"{J<7凜yB]7?|^<d?9jǯm{eъ38uC ΰ+5! C{X8 0,?'a~d6dՏӁnPG¾V-D592_S'uZ,u~gxR O;{!0uɰfaN*I,^<}⼌ClGRs?e}Q$5۽E=֧+oO`>I/ uHfOcpA^fp;w=:OZ?ul~-+2]1|h=U vԤ+J/Ȃ[tX5 G!ѫW.ڴsHJH RSCzφz ɷX퇊ŗRa<~ӠeNQ5MVn߸sʖut(o6r Gn\rs&i~E{䈢;#{O4Uتꚦ=)C7U 1{:^߃柛4RTFl,=&5B%mmk~Wv_5ח:4(|_E;Qʈ>auyJMIXaYmrkpE!Sz"e11ovT-ٲQ;pΙsoE_@+Qn I CUׯ_Vs(BMLW1OWPpr!I;(CаpEB|BRpHGk8S2)PuC¢c݋_^=TC5273i"pCMUtLEKI?7B!xXB)V#B!a5B!xXB)V#B!a5B!xXB)V#B!a5B!xXB)̿D bH=a5BIR];\;;<~*cmk3z2jL&ҴHAH.B2CVXj;dMcDc5Bqj:7uwWGUi1˾xW5ɍjDi/0ȸϕR_`E8.BZJ;bfbi;zhFT3U[/lR1k7{n=~h]?7VN8$!ˉ Ŧ6?s$Z.lAt?ކ,1QJ<9^)l^Vݼ ![ǵٕ J&#N|,2SgjHKA.ꈇLW^hl`iu>z@bqJh,M;?|^޾È[]L^V1|?n?|;aNcJ1SS[is4)P63g~~AUJ mU|az05>-*ݨmѰ0aqqI!>)pb|ك98bs#SeA*]FIx7YPm(KϿ}o) FIxNQ}G 9dd0Zn?3+RhaitYqeD3F.@{z,M!T{bp]=JٍrtavPTUvpI#刹IKAԚ{:2o]v]Yzd@-v=)a|!} Ԡ+1S5=R0ȉz14tM;Þk1H{7nVjMZ'װFW0o]Р5[jťjl'r8R{M9 ^͋vٳ4["! "AGJH(28񴐮nSo~7Eo@G#֍ZYI3M!T;ظ;j-߽,hIV5FEQ/2^]>weC[_JR;x)3k¼SGw])T1A铧E. H v  @ITr4Zx1QgzkAt]x>?uuкq'0;eRDܻXt=[ےnt(FՔ2\qRI\Fuj=a0j t|"$()?_1PSג۬m| :ѕ Κ-/-I6`] J}*r˓ظG?~ѯ`5ӷhUP\],47&!(ULF>ۊ:i%+ixS<< FRrsk3o[cj//}&K/bɏ-tޓ-Vd͚hDug7[KĬҏYZNl b_dQA9C;߸GbfgFv'QcQz/3;x"*]Pc(^Vb{95 P#Yo'@ک~l--ZJ Û!0.2BHajƌ$Ԧ[읻oý6'ۊ+ oDڳXPR}}Zf6-\fI>?zc1l~]}?eɏrzuѤ:L?6_]q3ݴY?=բnIV'g>,$[pܟT(zs4$H >6ỎJA,QWwn.uz@@$,RNn5i~Y 3c?lXU|l$Ly\rCżkncF%AR4Rot^ĩ)[ y'ʊU4Re}QvbP܎8dzm6lY5j^:R yM_)򩛫c@\(EdsX%|lYB֥aʝ ͚ o=JNJK?c"cwBUk¼SGw])T=-5 ڷyP-UMlAɁiXxq(s N7m J#ȌM;qő,m6q UkGψNc͠\8TS4O'VfQ+uhS-.]P,H}o= EZ\D"͵4UKT33 R(3r[w5<_4>Mg_4cxVF::ߘqzVH9 tX9{>&b?X(xs,lgި!'V@qgfwМ:n_A׎k1|Q^`sO[2L t@[S!ҸhQ.=Hyx{9.cSϥ͍Q6s`Hx,P2Bvjw0{;[K^ 10N!EU3Xb)=P&{3U &y!X#  XPcWsu-F1)>!Ew!EB/cc|BKjCQAH.Dē=ę/F1,8$LoBH!Ru58R];\;;<~*cmk(ejL&ҴHAH.B2CVXjPPㆿD=P]_S1|hnS[KGǛ`E 5NT~m.8'1rML~̷έU C\|P5nsnvaɂreDsR SeXVY',XYϪˀa {FGVݼ ![ǵٕ #*ȱs O~_}XJ|Jf̚Sz彿u)ZXhg;c5#jT!.]lFDqlgYCU /ri /FHs0I}Z^_!ܠrHFˍύغ=p50S ;s篺vD.oi8j9# -w}%gitYqeD3F.@{zx P1v (&z({+ժHO 1բnId>N,ԝ'7}O ǞKTTuT{[]oފ>,$[pܟT~nSNZ}9B_vՈ8*ST*Z֮Yԋ%A?f`F*^5khEg7I%J^dJ;^2gu?Rg@U1/]5joblҔrK4`CaݯB-DyOb hI^s@y"BD*dT(H^W~|FtDz/v(Fb5wYM^SvXznCI7CQ@IO(:bݨE~֗{Bظ;j-߽,hIr6zMw莲+ʿ<(Y&ot: m< K5yy\`7jNES^'[_wp NJݺrc%lnKuyz#@rWa9B E3zG=anP10_ZLo쑮m:8fV\IȌI&=t8@;Vy3ۚ!I%b5BI!a $"ɞ I̗V#&Dk?BH!Rt3B2sB+f/߭\8!7ݥ}7p]o]،Z+[o"`-(vlA7gf q4V[v˥/cVEpmػs=zs(1#}ZZ'7>G;xi*$47B_qK/k)~Ԧj=gڐ ƷV.o5/Ȣ=pʎ>Kg7g]( ZhAΩ={9EET7a3.~Xݿ=!Hٽ ,E CՈ&ݼo<-7=c!BOThݽ [eƟ;/%$ڿAlT|!E|.SNs-,!cCiv;kW]. E2,BB )҉xbJfd|Bfƪ$.$%_emٌi)↸FU^RnYlȬx&6xSᙒ:@ϔYG%*7B5%*|xH K@(:bݨE~5u(["X[&zP@> l!תA|n$H{6hVɏIV\`RUON{ *];Oy}`%%/4P,EEiqq)9"cBL5"5M҉҂N_6սu?/iUB|zJ716mdg+8/y{[3󶝇aD+%YH"D"͵4U)!cB0ԉүh_ Q{y |6Wh/?}O~qycxUֆ{eъY3mP<H$- ^ [;+eZBP.=Hyx{9cm.^OJ|u?7iީ"Bh)0plsGc>N,г0j4,E!`EFŐesVp[#~! }n$/#St7B)F!WB!jBH!RR30k:%H {LTY_[fK|\t(J6Wۦoe)s]%/g6çNqcF-22wa }1W1rq֏ƙȻ"9x_[T,\)'Yf q,-'pxA&-^*WXZBz4M:W1"`S<4%spE&jvs6P"@MOuPDҲ,|@dJzZ⋋'/fYzW@Kh~ӀW"ӎFJHc _C"Yjn{D'7,>%=+)7ʎ&JD< ]<I@xEE1RGi\ KL|dvV-Xj |R2]#fx(?Tԡ{;5BXGu<й)aO>*@`у}oGą}-ް{J )OM/1ί;SCѧ?Nӳ\Kw[+W҈k垟@[r FjRa߼߽/ 5l=\-~ QfLV,M[wIa2ĻFTS(RLOD2 u2DenQ{ /6Qќv͂+YP7bdcGҮ&O1Vƪh.2ؘd|?Z-;(:[+#?u(VEaY!SK>]s8ffeӔò4nX|>ͤsBD?( Y]Ui@t|Bo^NQڲ͢j?}RP9s_[BJ6n*p1܈c¬׷Fpߚ;Uڪ<#2CEUm.̈OXV9朄#7&:+J?d %Xjfϑzo蒷=Es]i?#&tBAHarTmNAf\:վֶhYc *һIiy^ۯa뷲0,Lt9 Z=FMߋ-:+ԃbS92mali5w,ZF3 ĠK;-6P]& we j̵;_4:PQ7'|OaOMuե gzhjʾK_l9)zu9c>6dz9cBی\Yy/O!)|v}Q[Ѓ[6e7ǡjǧE]!^\0c!iWxxT^qeu)G2zމPlZE+Af4\Kɣ5DxWXnO k!m3fܜc Ȏw(rN.%'DُGk RA#ލ|U҄Q.=Hyx{9ccn\ֽ`>OI8)4ڄW VK^=_lv-%5gB)C &j0!R%POΦP _5/CRidfb( iLYwNGMB4{xW2/ljwFw+\& \!н*?An/$~it7`;foD~Z &©!Lġάz_՜ Ո\k 05#%w/N'o4B9"M&d5" >e)ḒR~^6_78)p"r1[ƹgQ>ңl=a^Id6Za+W10QͺZFڍA4~R; (c7^u[|Zeպ;쁒|%]P/^f-o_]f\yñʳ(IKvaK| Pj7- NE^_zɿb^8s^bV |ovϥ璅Ư$.J秄ܹL1v Oc&:7}K= Ve61[H ?Vǝ(V8ŋ P!P6s_(c1yl`oŁ׻~ޤ׬i:/4 O@DQ)Z)ʢ"ȼr \2k^)^?)緒rUdi Ef UL:iqKb7-`"NuJ)0upquϛX繠 }@IX:OtaO@_Ə "P3Yxs۹WZ?Ke.8CxJ=G|?HYb`kuk^ʅB QfxBRq\bnj榭Y{?.U. IDATP+̷N? 9] (Qyǫgß!t[ՂT9HH֮ ȦK 5uu%qqԖEc_PVfYq1 4PPHV:,-R5Ee>?(*HU~Sj.v ןHL흂R{RM0[,p+^|gθĈgW89<PMK%izƷ+x`O.yR0m}1VTwku$]I}Yu0`K2ίf&[]/ ե~‚bR2IJZWIQ٣ۂySxP{FU-{V aQ6M?~PlPN2,Ӧ0շUO%(5$&\!c#IaD1.6mc~̣?F:D{DyDPC5q~yրgތ'syE{_:8CLd֟]axpM6Iw{cmۺMkKGױk^L,H7I`s{W%yhwӚ Wz#R8߼[Z vQOx1EW$/3EY}8Zn:nls͋9]R G7Dy㾇7ZC̬>^߸@Yjdw*CrƒA&d>|.VF\*J-lETltAZlL<~nTwy(bWVB|͂~jaP PH{ .jQ/3^]>ˆ572''Sbt0R [jKf@I^S~]{G9_8įNDWPL r32?*jwo+~$Ҳ"@'Abvu}a]}y`IBhOZ) xo|KL5UU^0!@;}.tȠx(hnƜxJîO/PMdbo'0OD4MZ(S2oyiު*YP)ytQH$yLDrV9IUSfIηjW;Sn PNl5MeD) :4Bi9Nn>Z 8ИSc]:]16!=&u'KVlO7dZujrD _~"͈-fA%1Fg |zC?UiH؁⟕޳w(C@@~{U߆Ty#;q: 9YT] 簚YX~rS3-_5[hj y[O/]0Ezz Ix#_|o>$|4V; q`$WxW,?h8ULF>ۊ:W()߲Χ r̸!W6?vEd:OC.ŧy.%*JRW?)wM7S>nOQXY.Fip"<+,(0ۭ_W+i"-<*F7Wd}HWP<`*kp(*?/%%X/3y*\rA+3Ŝ;}Fk)SscLq&-d/#:#ףE. (vk}ɽe֞hA`\;rȹԁq$45_s.07uG%% 4i*m:?!8cQz/33Y7IH☛J9߈y=2<}Ll.$}@Uխ?p);%VrP, D,,D~ڣg9Ct6~5^ eYJ ^;xdT,cy1J @ kv*j)Q.=Hyx{9cc8#4ؿ׵7NcyBuեGe .CvSP0"u\m0>e?fnogkiRR@Yƶ ˽C.+2c&/ \m0j&L V.F qm2̬ċWܨo)vr9W1|NL Pm75'~+[d0&\A'W|)_OP] /5˾`+cT^.^- )r6H$w䴺#d1W0s`T ]ZSDi KڵS:d7jywpH0#1jm«j ANLV#'G'#C/~-8OYEö^!^X5"+atY='fXͯzlx_ A _[ow8"(hMYeDR^u"a#Ѯ{‰G2Ko_z =v); NDե,CW~ouUf⶯ۛZ8t>(ħ}cmMLU_xƿJ|&,r|ÿsbu1XT1ؑ{¦l#)Oڥ{踨o/hbUN0 _Bݸ֌n=v+|[k_z$t][|RV#'&tK?FD/}}Y'1,Vcy 1uO=NwkZ-МGRqI. RwJfgbT)"yG\ ;[R@wQ/~{(C-K˳De L98+KiĨ>e})AOosi򀆲2.wc-> eR Vwm_gRyeho&7ωȼ_'_͑ ܔ[:UI z^S=3yzxG5yrs  ;ۉ~j#{JS90'`Ј ?,zZ3=(/Z2jZzMV?[aO\pёΞd:h]fS7]E)1&+) NϟAڽ rh\LN>[2jYZ5jӁ؁yn jo~[҂NQx]N ${T;CM}Ն\}E%( < #8wD q4;ѐrξ'L9unTTOGtkZ2FN_RǗIєך1(v^;%S_̪7ޘ[0g=}y3;r]+Q)̀*2n+D=N}N{6&nڲ%>;@v^PyRCyZ1DW,!kw)ϩ?XYn?jY[:ӡ<9Ww ~ȿCӣ*qs%" 5kO*Um;Vb5Y)N)]-Uf6KPKM'T% @[=׎הeL}͹;ポoВ[*?ObՉ&uZ\N91KzDJ߸ΌJn:!UߝE+0 */o(׾Ci;Zu6U*5Wn$*#. vdoǹ*Jo>5+Z"x8VrMRm\mP*uͬ:ű*MuX%wM~~~]<{.<51i[UJW<~H;VtwBs *іN3LsF?tӈEnlK:ce,Z{Z{H:՝T-Pz+}hxDuzʲ>7HK3TZ%xY @-XeSmi z0W Չ7siq87JNŅ^1ES>V:eOwqe›{~!ES~⤎):꣒S-/}p?ZݘDw:/lNSP|V՜I#}OPE_}@$‡9s~կ ah8Hӑ92NqnA~qŷ7`zΕ\eޙjO k/62[jz̞{ZUu8YC^`*MGfL /="Č2ƺyNLJ4mXTI!\cFL)ӭKObH%5{%)=Ё b,2ضn4h@?n]Hju aC 1)Q^mI 1a#Coܺc`d3km߯~_ƍ *vEsf #^eH&Bd׷kµmƹ'OӭKBd[U-oM߯~_^6eR֎ 2p,c />1mbgx#F3_1mDI~@-(s*TG-vդvꀴ2­=l6d46=1mUVSq3fs-5kvn;7賚jbBlRϭ)]K -K:";G {nXϭi{ꀨ\c6&60.ABή 7z3Xm CU2#1\F]^́\ezܞc4֌ȥ-}lEBZdƖ빅1#Ȟa&ߚvqٝA&֛>0\E;_\M4"z >ydZ&3a0By!i{x=,诙rI@hΣy8I[ٱ~nmT;OrlG^a86 1غYElVɘMOV1*+S\c[_Rg7#S(Fd+ok-s cY {FM觌w2'W͘=uMk,X,YY/H. &{`/ifju,#kRz5zznf $qC47}\,ѺjAw 2WNd]LyN#*-]b<n>ydPd}\߸/^읩Q/ߞ" y/A :$Zu׍)nۮ_;TI!˜rM>;Gڜ#Sկ(:$&)V-!`G!iRUMI*~-Ehjou|ɑV`TyLh빅Ak3mղ kNU_[PAhlmXj+FmXϭigxΖ qDuQ\d=?)Ucr\]B8hR̟W%lMq yāB,g?s c9uƜslő Qg!4as#9gDT4BQeYhfTmƁ6=u Ai r};?ω~owr9nhI~(pue"Q~}K(itgGxGFpτy@i v 4"񃩴s1 WFLuD DJ# OW7;$MڒC1񷫟{攈lڠ4BA7ּ{CwWڷ}}?c!Ɛt2 {I``HhI<7׋+`)A?X9} ;շͅV\&|p邯UO*O|vq:/z>nc4e3 q=4׿ݭ"DVY'\5'ujx]]Z-+$WNe[{ O9y7m;Z$ 73;eGRP\<괿*9iy M*ḑAi &Fm E{_1t}jȍsn{szܜv`7Ft.`a̙(}Sz?ѭW1Ryiw@Tl+О^;rrdlJՑu_\}a5Hs>\s^zq"P8qP(j$`>zA/Skv7Baro{c1RKk++] {i z#W4Zoq# _IjeߎvN[L+W*n.gj*v onQ!L}xڥ)匮 UɅ]%*K,_/Gȸl W_ON.j.wM麮J ~ (Ĵ۞H?YB/n_ܧ_?χ U&f\4!oUAm܈)4JYFbZm7/po$b.ZA'~xXZUCX"c}PꉎlKTؗn*?kC|=zqJ#11gyD}<-SdU5`\E,}>סMM/օKԗW]ʢ=Q9OA=Ǎ, J#m<5,)О#zondai-1@.}WN.e-dgV蝬^ׁዢɮmٟ&ơ$v˱f돓)b~jyz\}I#es[WXFbm83r˽y(iyv;/Y)>O/z(WHKXj;w ⚕%EM[8?5Oe6|z:qҏ˷fjYjz̞{ZU9gdfeW՚p/!8q,r,0 2Ǐ9zG@4~GS)x"ܸz*rggggGxgtu¬2%3e;;W.lJs„+Eh7}zg SAȊF@yx] ,H/<WpxϜ9B&G!/4z{zUU}7]Hk-@$5Og3kIUJDxqP/#K0Bhm+d 4>PԍFVtFx݇Չ>ҹZ9rk.1a=[uoO-BejXkBcNa6jP!H[Q7^x@1j(v(xqMt{"qa9B'g=;yXQ}] a8yMQ<{;ئ./NZRR'/{yo3w T[OOˬWCWc(t}Wc+TFڵFGO+` U]4B>NRUXXbSH9G=n+QtoH?*w<)MI4f[U-cxz r.9C4XwU?xtri==x܄t5ݩߒ{_]NKeW5.2 fasG/e: 1tDvp 71o.s;s-=T \{ߕDZ_I<3 ;~x;Hn={SzoOJ#i+b{{fGd'rT0wEM Uv TtWkJ?̏OL0-?FF>VҏlP/M- <ݞU%nU࠙m)%PSZ:ԙ»gbNh\*+LSeas쬳]eZ ̞ޫFeY;;гgFEM?|쬇$Wښ cS -c};ue-|LFCoޭ|>^:}>=}d@Sg hA̋%Ѵ4橔:E&eYe"""9RX}eY;Sj+k+ ,302䭕҄3G8B#q6ܻz׼0 ^UhoKpau0yDGGS4:l\]vDj+.RͳͳN\)pqwꯙ[W7wW7Nnn}dHh"3$r?bu8XXad,8Xo;Qk("},2 x"^~AͅV\&|p邯Ւj2CEO0Ǎs'ɨ(簕_P)Ⱦshgl^V`dܹsyWVZUQQ<8tlA~栐1R7j}{s-,n4j J#-;e3 q=4׿ݭ"DVY'\5'ujx]]Z-+$W llw / k~Ki8D yyy| aÆ>lŊ e آ`F~ 2{I_ֳWQvǍsКYЮ-<{&\ўm4j=ô@l{I`𐱭طD GasN4/?%ǚzbcN}lÆywyufg='ډnd`{{wK&~FGjoГ`Fд5}e%8a/rFW-{zBUrYYEz H59?=S\ɠAa{9t@_ ޽/xxnNz`X72mP[yg1D? zDJ#&PH#aZ,qA} _ß|XآG]PܺC/:{sb-3~Q\ۧFiƍZF?-Zi(z />Jǒ7 xШ9{&IDATV[no52')OOOO?suwg :C2}Ӆ}PV/Őz]YRҮ׋4MS_դ)McIohnN~@V֍moGGOiݾ qYUA ;9(qY3G}^1tD Up5_ <D|]~$6f](N^By6̩3vP7zO/z(WHKXj{B `aݨLmBykW7{УҁD{Xm0J0u9gعսAZ!U:Vzk+MNn yI9^=srr;0T"#P"WcYcս#FNN4-F^? &|jio̐hݷoNWwpK,lB uFHAi E<}DT:QWĨc 1ĭw_'{*i#Tк9uHAi &F<{d#97ཹQ=OnNoYGpPLF֢i#ʋm HDa{eYad &xvcü/Jݵ{#*`OzZw_ڣT|,Et^=|{;|_1[9gxgQm H(WOg Al֬~Ugz~9'=};"9oq &S{WZ\BFt#n];W3Qm=uAY?}c7'0zS:'lo}٠1nKX:W7BӢaPTWF&HYNQvאsm2w߆q#F5xsдP:q{xGFpτeբ2γ+-*(nUZ,s+8Z4BB7J!!;G鍼 zeĔQ^N;$~gf-EPs0Ź 輲nd-P!9݆N 3TԘOF=sJtg0'Y9r}(^ynJҏ˷f4h gz`%@mg1S ک(A@ HY F Mnd-P!4@i F!Px=(ֿX}z3e=&9g4za8Zn4#h.H0~PWG{A{u#k-Bo @o-Jbig pZ=ļ̙=v/!˱,0L:F"nL!h(mݧ~y܈>"q#k=u0]Y8%2#][ʴ/ оr7(K`<'g Wj=t܄f}H5W1`Rbฑ@in^I/w샯wf&:ɮuv&3oۯ %>4eP'I[ƕ1} 'q2;vז7XcD/طĹIG<*OVN'Ӏ#@iXCnGpd/ODͦ.3*ގ+bsY~( ۹`_~cZU\0,?]=Xn? *()ɺ{JȎŔ⢼[G)2UUGj-P7BlӀ/=;aDW@]g2WaˀT7 (~^ݨSYRkߥW9XL1&Ǔ I/>Y/Q-_ӮW_Y F1j̟-QS92s(;ԖJ/m &UTw]8/oT@o{y3{F=TZo팴 =BDZȦM:eEF $@o{&u#ؾ/ ԍJ#2zmCFb lֶ阠nd-P!%G7tp+ד6!7"q,r,˄m|!u#k1/Iw`!H ('00 0L Z;kAZ4BNb]Le!(8prءCm["nd-P!h(at%]Bw@R3U (.fΏ v޿r쩤R) a+x]?4W<ܮ@Z4BbeyD_"U|.^?uEo߲rKr'|ٜJ-s}ϛ#^oD#؜?ԍJ#1-Dz-#h8s{Ǽ.Ҁ>=0GZd7ڣO[XH'sڋ3{`\@N0^vtMiN=ٿ؇k΋=^iPY ẓ='dc:Bl_G \zC;hZn &z{zBUrasg2PAw;@5_nJ7W-F1!\wy~8*؞?7( 4\_x7Z^%Z=#/@*Z|>]e50:[c(iϭ=ڐ2_OlyP78n )_Sjrmc^FyfU\΢WMM__r)4ktwsv$pZ?;zIENDB`hydrogen-0.9.6-beta3/data/doc/img/Mixer.png000066400000000000000000001060441211146647700204030ustar00rootroot00000000000000PNG  IHDR<& pHYsutIME b)^ IDATxy|׹I,n` cv$ ҄I䦴$]n/-Mt{o6d&!MI`Vc*cٖ%Y4cxڬ}$3Gg|}49X~F@P( BEX( ͛BŕH BP(4m( BbM<1 M BP(TiCPTSck 1eppk&Ε`ɉ8U.!255ڵkbl4Ǒ99Y8z={$tT&͙9s @Yii $$$@NvA% h2|$%*fgZH’KlrB,9fMEQEIS֯^3fehE%q%\Ȥ9]+6uz7r"'r"rz)"Pd@m$G:@MC'fl6ǧ|_38]$1҆ |X >=d9?)f8|du***:[j(OʼqMxBNNsFrF38mXS.fX-g~.>o"#mSNwNwLP+csIJ|y\2x#'r"'rN4&^BE=xޛ u8K2[6'CF0C74Υ{sFNDN`N*7o񲠜(!'r"'r9' ] sӚtLD 9939QRX~ôQcuҲۢ-A8P|Q"'r"'r"'Q+ʕnYZv%J9'9m|mڰvSwkH7mX8kx1r"'r"'r BE vvg~[n "]MߤiZ'EqNŕbQ3gsaGNDN[N*#m;g㻻~.a<ösH8|-\4"mw>}}R6ߔϜ3Oȉȉ1ω7~T "m4=3鑟Էw.[Q7_6]ɶO~ 씩-?ÎȉGBOHMKj4CQԫ_‹/ n^1&Fn1e:FUpC>ȉ(TteDw76Uɧ<)Q;!'r"'r"' c>i,G]eA|ZZC 3'N=@e(C Z&^*ggpp×/_ҷ4]w?|t֋oXbMzzAȉ_R} /~r0|k?@̉3Ojn;7ݱ:,H~|4ԟsO8b0SW r"gr֜/m(x #WO4:8>էZv^՝2uW|h4S;V?ؓa{ڷlt:ciZ,MQpeeSYoi|LmS92>k8nۿp=~~?~CcgjMLpH9&N} ~l")|AϮn*=En:DTހ"k\~w^wh4Ě6N?lZ[Ys|sscanjuIK.j},rXr򆍛'BN NJN4ɾtyV{l!!@"y۟.;<{\~FN@=1 7ׯd#5T8MMg%P25-^r*DTh4_~uMoue `Kh9MھH>a J};\%PAoO}!+_hŝi3ͧO<ؿmA,l2l6˲@DrrrZZ3+fݷ3G[4Рb"^ENUΌYݛyωe9wC˹=MC dzu M!0g8;]}LZz$Ia4Mvvw}v.NKL]yc@8\\rm#'rF!d29pfMz񖵹 Ia⬯?wKKK]rFf}hOW^~IqWhnbU',&kqf,AaW~ <:uv <ӦM+))ikkkjjjp͋>YoH!Zvp?==+r"glp,q\NN3g͋/}V} KjK$#=3sG=>o=>s3ߠbCWt"nSLwez̈2_OwGQ_vCId$fΜYVVP(8n/QTT4}tLQhdvEbȉ)LfXE6ea|d:گEK}vv?L&K_4Nсmٸ xe83m]钦ܶveiQ(,ˊEEEiii&I&ɥEw^]'ɥTFBppp'qoeO}5k7EwzT8 :hzz:;I2,k2JYQX^^.< r8 ⺺,ͦhsO-!%&*i938ΎΎFM@3 M<,WwǏ~Yscٚ9nQX [=aFҴ]դ'(h(bج<7# Dz7;/Id&9O*&[}-'LBze \!<&R%\Jhzt?%IR(DH3 9rDH\3!j&?J)T?);;W.O;#rҊSs;&OQơ覲H>Q(tlqѣ$)#I1Q6QV4XF!7h0r mx ˂ 'rj8p'd?HO͘9㸨hB}F,BŒ|uZǰcskv|!e5y/==j666VTToGe)h42Lh4E%&&qߕ93&9? N3{qPf;-q Ml~T">[lfͺvZ]]xE]|ҥKjaJr9!'r"'rzIV}P9v3NQ w3aܩ3^$l\pv%99yΜ9%%%* [XX;44BQTC}X8_~w^tZ r"'r"gpPQu 3wRKI9Ϳ(nL6 .v455uܹ$IfRxTE++Uy#yJ%8璹=FEoD* 7GL gq չo6|=xW~ጌvSSS EZvFQTŢ+DOr"gLr*Ug~ ; 2<cQ7MCʹ90u%9YFh41x!IRTfef,PY_7r"'r"gps[+zFg{ P-w_?TL 55he,VU-ϟ2uJff&w$I0mmӋ> 9^ >uC 'r"'rF! b\ ._sTUh6b'[uT*MnɌtMA>Ks@}BNDθ|`{3uъE({}]ո2ߖu^ S$ȓi#x<]k9S;fF,$Q''etw O<߀ȉ!KN)xGŌw)?S֭[δ&a`Atudڀ'|{.{?sJde'ejݝ }>K/=׫#r"'rSљp3R8N1 AF;{Ӷk?`R7p}8\ngtHi1{=k-ZP0)IA,1vYm67i5dub~4r"'r"gq6; \= hTp/~/ۃ78Fx&Ϟrfe8jH􊹔z"QArvBNDN?Ntli-7g7e_H; .`Ԅ Śշ1 q <$s$IMifG{dNR&ZTP^ȉȉZJ&^8{lDNDq۶#A=DTy/5H4w2q[,CY9 x%`9c9#Tje xI?Bcr"'r"'rJㆴm~|T_B'mv?h IDAT{tm3I !#6<|6m2 amM60Kps<a:lq)bEśCR,c%.o'tZsùe>q{734EqmW??yN2]~bP>/hي%e2٘>H`ΰŬRkT0OGBRAXJ۠7]>coY|yi4i[.L4m[GU 'r"'r+g['fqapC?7 %ײ鳗ƒ҈+W;t`_ث%ݣ^ѣ5F7/5@',[`R AX#Y0~ZIWr}oU<-m}= 6 >="'r"'rg u>q7EyYY}4yM>bڵMOMKcYn3uMYqUx?7޹9##;0,FWK;ۺlV[jj ]>k<ϧ͚?B7PWC3!'r"'rg64ZA֮OR:|5Hgξy̝0 0vfI.]j?p_QpbaQ鉣o7)IKQG#Y0zLF2TRʳHxYe)n1v!}y`DNDN7ftmQ榺I+ڣܾ$IZVU\$IFsN2ݽotu^3Mj-]qR=*>QQrI,ϰvXNAxOȉȉqhm'8?۽"-]vv$0LUUUSSFh4AL.NLrU#xr]1c"{Th$k ( CWM0U')4qw聁^aWP}{?Sjkko%KTTTO6mҥfͲlZbϝ 'X#Yr[{[I-%H}$X<8xJ*f@o[x x ㉠"r"'r"gq^n-ڸ 1| .2$ݽr}Id$̙SVVƲ,q\AQА0R`LpK=j %l[I-5ΔOp6T]&0)隂I}:m{{[BȉȉyL]`z]* O<][yzZ8z;meYkjj EyylL&SVVl<41)ڧ!ݣ=Yl}9hk)ISuZL&Jp}{Jl:;Yt%+&N eK3>=kwϟ9h2d j΄>]FVvzv`q̥-}z`DNDN3lq ^lyY5G$'(h(bh41fUW(8瓒 JNI31 ,oE$t -U@tBRm~JźS?z/'77?d-53fϺg7_wpE *&%)(8N6|榳:mFNQYLVu'ýr"'r"gq6; :+ >uz8x,++)( v`ьFó?Vű < 8$I V !A!EQVa 1Xtm=*FE0r2썖*Td<+-u': m4-5IA0 k<ϧ͚?B7P;!q<+}B"'r"'rg6j~al"$:o9"FZR2J I ˉ S?r"'r"gqƚ4 Q8ze{axvZL.#mK?}ۿoڴIHaFTܖ&:z\zN]޿GRԵ[c<1 $^qC>'ȉߜ1i[;yݻ; `&XFGٴiI#m>o]-jD]66,m˶g&Lt_LSm"ma {/kN0mݝ\s*( s9+*;Fci@Q]gdG}oo;TVV 9ɷvyͥrU /@Ĵ6mwlv];g 'r"'rF''Ȇ1:t`ĒT*rO?=#Fî`=F H)b61 #m%&g\e3o qǟY0X-F4]1xss9Js.{+Ow/?r"'r"grTʘ.Z݌ d9\7K C1Ѡȃz2wΡ|uf>6 Q!r"'r"g|rL2m_Z^}}kׂX|jjNˡ7s\&5a os9EhA ^~qg淄fz/ۏǙ;dǼBGNDN9k2a}FgR:f Ea+nlϷgmw;{NqYs&:/'O,D5q 9PxU h V߲1J_4͛ aui"m]19jS+vOO(r99gC燾'Q]:.36vEg9-oLQ 9tw]K''e%)>ym[yڛX (oMہmٸ Sr|ra}"'rF׾$-H{]bx+V ӔU׫jeQ0tvv^vNRG{ʹy3IˏrP!SPztwƻC6Ar$V.~ M9۟3w0 vͦV &MZtV}5OG֋E'\ޤ$UMB߮&J[g0)'r"'r:\p6)c}ҺG[\jmnk`~onA$XA*wGFWL7ij:ͦ J'eq/Z,938AΡ&H{aY$¹6ZtuJSl}rvlsssssdl, @iii<Ϭu/սoc`hjZ6333'tmjB”y 993p61+W&H5G7&h銵ۿ$Ia4MvvF!d2tuutl^?eԕ*pxWsՕ i r.-DND txHRr*o;tP#VW/EQtrwqWP}{?sN:U[[;{bB,q999%%%mmmMMMZ699[pg6cGL;i`&Iȉȉi22mAıck.IcQRtwHwop;˲<(raw쯉6ɔe6'O.MLJFѬOi(q@P*:עB9&1B ݣ]4bqE566 6AN?).++fi4켮֯>uZy=tӧ&z+9938|s;??O,FQ$t,k2hINOP$4MQbh4,}OE|RRv@rJX<0̄6 Bb1BsE8G05X/_:Ɂm/?91(IiI+)( >ݶk-0[.-=y!'$I%$NqGQVa 1 MT7U"'r"'r!g k s.@IEB(sSv"e,EQj':BQ6}+fMK$r aZŢő6 |993>9i STA,-$F"{$e$)+x`2y~?)=jNmgT$$$OtWcYeY:;;5L&>5GG )drY,6 BڴAӊ2tWy1];pHYl  \9]vpqqqn^*hXe֡B^[,~Xlbb/dznl(<2 <#.s*>n993&9um1m6M~_i>&QFQgUJ&j[eY6k֬3gQQQ!˅ۥK233jJjh`R-͍N3Ce7ZH9'Bȉȉ1ÙܪQ=SD;X|z3&QkA}]]uڍ!ߊ0vJ`ׯ\Z PpBW]m%99yΜ9%%%* [XX;44BQTcv?~ڥ IDAT43E rrrzR9ABNDN܍ޠh.Sw7=D.X4vq,rC$F·"6^t`*Ow羂P*2l.\.55uܹ$IfRxa7Y>q$xɓl6uw]7D 9938}7Dy7D+/[0fLNR:eYaPpl. VdJ.%d)-`~_+/<4a0SSS+**ϟp L-Y$77h4F,Tq$I*le<벆#{ӅALte*ANDN^ΠTJw>KWe928y]w)c5+oIljjz᷿ێJff"$ܹUwJQU,[Uu ?)BOxѐ$I ihk^tuma-jL)zIxU%WGY99#2L1rL(r7&Q{%cAG߮T&4=Ac}J^a\n4+f߬R' $' תժTRI@a`0e\RZpVUͦ "ڿ/zi䁗P19ّ99S .Ej2u+ξ1&q% S2&1BL[t.^V#"!UЯiɚ$M!B7.%s#'r"'r"'*(yLco9/2$_xk~OT;MvI,A`Y01m톘8!'r"'rgݣ>ʞ'z[[_w<觘hURKڮ]^y?5##Ԭ,z0 nk4JXnL!L;`ݣ+W^juxj] {K99p(D9938 v>/}1U^h-`IL_|9?`RO8l9TZM|>D993880<<U1߰l]fLճol}"dsTA('E1m0zTxZ.ǟ].|*=CQa6m( B) ̣ӏWCmo `湱:'deIl6H'xwҔM1 #l3 c> v)Jw&v,Mb1P]=rȦM}Mi{~ A5miH`w-۞\Z2F.&Jqö_08!ϤۑN8ɐ99c3 բ98w XPt{ّfsi]ciӱ>bڵMOMKcYn3uMȌ3W Gs㝛32#Ѵaw r"'r"g8ڛ۶>{;.*7#W_:|5Hgξy̝0 0vfI.]j?p_QpbaQ鉣o7))8KFVhh&ANDNN/G$-H{]ϣ#A=AMu5 =;H;88hZy'$IFsN2ݽotu^3Mj-]+ vP(T,띷 PoWXw4e'kA,677777L&Ʋh̊Y__8 e333s"˴aw r5+TtHcڏ 9G6a y$|^׎˯ \ʚ#tA$0UUUMMM&;;[a2zzzt:]vv^2eUǎS8ZwEidz֭~]wRe\lڰ>38uplN*7|[X~aUrwqWP}{? N:U[[;{bB,q999%%%mmmMMMZ699[pg6cGL ~hNnaJjڴYzjJjZJW/y› 9MF X^|[Om ŋ >X(lwgmt>>*$mq2$ݽr}Id$̙SVV&5ƬAQА0R`L2mB3%5=4n斖{K3K>=KsO's[vSC|߼c}"g̷{ DFm!!ݣ=6β,555 \ؕL,))Iq$.Pk11 AM cZV90)nsM)s6ܶhttv?x\e?,l8~z ]}Pu)G b(9h U"aH8&I`X(E3 GZmDzk*7i_'*gzf9s7B~Gx] tQHRr*oE }zFz|\`WEB(sdSEd,EQjZL_O+p%Dz^.!Aai7mt:N7O<7_4O~q{Rw~a_ի7/~чM[)ZG¨(S}L<*ouX^82׳"pEK?0ۑ$e$9=lgX_'΂gXeYNF#Ʉ8#U$$2mbc}+e[O0rFѨ̨hPsak')3?E⊖~hY9ҷ_khb9,^F[[sr⦦~ TjwQ\[RvVX. %%*|&%ė1[=*6T*JPMz~ ٝc{wpfߞs9bD""(77O\U1p6C٫{`H7ȑ#r*q zҏ?}g*곺=eG䳗gerL}6%缰Y;v%\xo˓6z>N2(2Sק@ WΆf+|x?|{IS$ {~|W/z=VW 7ِX]SKnsvr4Xܸi,`ĠdkC*zgVD )",Q!C577;88;ΚKHH򲵵0ݽG -f.v\ׯh/ڱpC4lnU}u=*'#\| |iqeҕK"?dC%e< ~|*MnbVN2=ҫ>u%mr9t}ϖ!WZS^O_i5~*-UA'97ZܨI'T=>x%%%#F(**"I px<˽sVC]2MHW]]m:[U_zOɔ>I}Q΋1ք9v:;' bc'ŵurjin^ hX6W4M`vUG;/i'GP_g¼*>+׸D"'']DB6--%= {޵pbnz/Z3uElHHNɐH$sBgu*((,9rtjx>[t|wQ$5n}2 'UzmJK\QԎ'['/;GMMMip8<[n$==NJt,uR京էEsG@U$Ye*:/-=+-=O!"E}7i-`'R%_؟|eU_WӪue抖,QRciM NN.50vBD"֫o_\0p0  ?a-íF=vRIˈ>$/"h_ߵo>{Ih'hBQlZTBژ2_ɳ(e _S2Jvj~XpGʾbɦ3Ə9sTnP\Rs&|R 1 c4}ע„i?hwR\ uY^H E팝#++k'+kTZ_WUfaa`o#ޑ|"K1GGzҮO܂b8+;+{*dCS;{grD/Z߹{؟O!fkjɠ>=jwϺ hN"#X^ђ Oh}!uwsgk$P$ 2 k+k>U " i#ÇW;8::^͸{z>@1.#` I M..ΕUVV>(}QG^./HY}z|Y(PO!kjn,F" KM,$-YTh})&O\JXuK=]+**US5Hˈ>/\d= t\̠)x]edY ]\M/upKILNy+d=jQF1.Y{gV.q6<*D;ݚNfvW4R;iӈ0zqRTUUI,5`MFYи "gqI/Kk<^ӹF7?t>?$$0r]DV@LN!ƓRw;{W}ebj>av Y s~*UخL~0,GZHm"08P MbQD䤞J%oؾg*>(絘 k#NibWn{f=^ FDwߢLJ(nb5hT A5WL#%K,m_NiI=nqkU~_~GyB444Si> 6tn'…gv %"ĕq}7#p dǣJ!faȨL-&=2>1zL/Vd iٿgK[d:KaƬRG6KH=dC fil'˝8atu SR3&n2(00uBhHg>~ዯ\ŒE 6GhglRђmjLOQ-RwT|K[ Lg/=>3ÚSi>qT[|bggsGԟO!fQT&]r w(1#3g_ȵqwiQaB }lin܊=ƭN$ݥ#L1)-Ybi='K[oO¿l_:Ǖ3IBI^JSi0O]OlT ^#G 1|[Rj}տ&MpnKM{6JeHzQF2]]\ :G d0}b?poS ҖtW:y2ЫaðSp^tVʳOr'є%Hg&i~ j)YM(B64HSi0O]jPRlt㭊X2|?`ؓ'O;=rĐYE"Q 0|n8Ϳ,}{I2}g$*=eG1G/޵u&0.Qק [ZToNp#g  yOeG1hBjeax;F;W/Ѻ:5"QZk&%'TFO꓍r.Y4}; ֬z/?**dzAR4g_N^4?t~جwLN!3ʼx)&r?xF/ÒKQEBfSBlrIՅi'l|S@chZZ*[d~e[LGSSSզ`6#4o9s.:s֌9AٱkJlp1_;njj/|O Ɔ 2paCǩ=Gu#Qw {z¢Sg.%dR{X\針.fO`XoWHw IDATس fiC Zd| MSr\EP_hҦ)twҲL0=P_W\DiVvtt^AU3 >Qrz\+7<L'mrO6ի_`U{Կ-C(*F=N{8%Cedlm#t4,2Rwy'tJ>=`;-Xh'X,%D+at-YB4u꾐稓SOX͘I`˗ۓK_f>ǏxxombDAU3{(՛V>O6( @ d<7?ο|R 1[+SL3y OS#m@Ap6H'LEE{7RKL$BDBaI:g$,m~ݪȿ-b'7]EKBʬ{T.cet06lJ~TTTbo*հN6pZF5 13^ϒBs[VXF%K۲E*m۰-[#GBX47DHLlJXXI:i#[ږahh(eQMf(҆Smufo?2:km_2Q}0͑FIAuRŋ,/dP|>miQ`r|W>"LN Kz>Ǐ9sTnP\Rsʮ.rc243d>ޓYFQ i,㒱evv,9@gw@ Jar7営cy;fΜ)Ӥg9M!Uڥ W#6G]]]U FYKBj$m}xIdiD/:avvގ\ 3/__+ e'Fd9ug=NHؚk-_Ɋ9uv(*9׬,iDu}5~AHd-2EJ,m{ȴ˷s̡jKCQdѨRxՑqަ=`{WVaԎGY←JMMWn fV'7c.?;+H$"[YY͟|\L' /z3E\\uQAPʤit0{1f \L D6P.JuTK؊#b#cQ;=j (H$mk7|Ȭ>3/D_Ek+ƯYRR33TV>_#_teCWT>y6&33۸6nΗׇتT[&ׯÍ@Q31k(#5O*4z1*Y>y3k1qFXwŗdC1]j" "S'@&Xc{Lryc=z6F0jǬݣLdPNc'Sbo'…gv %p^)7MHln=&MݣfڬݣLdJNc'S-?RX%'P{yϝ33df蘄f|j:x_UU>z7(#m=썕 =z2$~Tv>,1[P]][iHcyE'M҆;Hu%ЭkHtoCGN{ 2 k؏ex6ťJOÃٚe=!Z<=^2,0O-R*0{YO{[.WsB=.E8z5m&|ߵ\~m|_"[p/4zn:$6/F6cqk(]NXdd>(g}g>=ndJNOsgtx9oh=j09媑$ݺmìRB0.\z~VF"h=J+FqL=:=`Rl\L쐠W/e$Z89%C$  w}SPXtŧ^M1 cѧ|^GKo;pb6FEEðW3oHL#²c^EݺֽVkZn%NkK U MSJa5cZyyevs%`ꄩɓ6k&fdfgdf\1+'6}R\2"! "|qDb45{rݟZ@U'j[[[~;++K~`XmMF^&yYXX;,xKwΞ=dkgockǪٷIQZswܽիj;fļ_W/W;=2ۚ3BQZ\'u%'X[[/]4wdUG)ʩcQ d8VW[z'[;o77 2nRK7q&N2 uiS3@9~|"koeeuN<Iҧ!a9)Z.>/K¬?-]V鳗X!'fNG!-q+ϡJK ݨJ@Yial̅ gb 8I%09cnz^=rr " Dr}R/gI/$Qþ|>$';5?,Xkb.SAkODƫʲ;D"QqKrAA;9;K$mUUs=~,;| 󬬹oE]t2vz6VYZVX^0+ǎC0wgT|Ux<^Ss n\YY9uv"E3nyH - wg?I%72z.bP(vvvn{?߃6f{ܻ}mf"R r@ڴ4$-~(vYܸzGAalHƜРGOK_l1ؿ{ϯH9Z|0n&*++#2ӓRko&R0cootٛ}O:.4@q˦ԇcOCNRD:AӨLԓXZ,LfDNE[6ɴӕ.9>Snz~ON|xi,pWoOHz40`ҙs3DuSw(p(68U(΍ I;PWyg{0 H$ |>_aT*?xSi@]muz>~\]2Q( MLI, <3.'ur:9:\t?.ZHT`2b,קX,jmxTfmm75>a]Ğ,.)eaZ{LˋJ]}ؾgҐMƫ?~w)z{@\EG? 1wmp8b8...==޾[n544WVVv֭׷)wbLKN 9d3Z 62)D˺59Os?DY XÿҊ;VXV~}(8~㔌Q#i~W+{oؾgvĄWAzBȦC8oc!ݾJZX~Op!CxzzZYYI$ݻ{yy秧:88#srT'{eZ -#Ƥ 4b^ج;[.\IrRĬ}TfDO*~}<} -w3.Ϛp-i,ܣLI^yxF^^*..nС~~~8]#jb!RSSb11r|< u]t5 FB~ }ՆQwC8;9VԒ[jj뜝&'MiiaJɆI|Y\Rٗߓ[~~r}(ȭicdZ>+qxZ J:*HRk]655y{pmx_U i#>Jڌ.*__DUM61Jo/ŌTE>ޞ/^AIHLxoD+WoBJm*HFdxZn[[[yY1IAZZqyzz&%%uڕwֳUU;.)7VftQc֭ ?rtvN. o%Ne61+kV._ˁ#Rؑ>)>8r}#gΘ KJcnܹ0S; wh?9F :GxJq%וH$ ޡH$&))10( pR`IqFXLic@QI`]!HUPPXr'lz&fSi|eg,su~}N2~Gyؚk}}Om&!"rKAa -ϧQ`={FT*b;M" ;^K+D,@ PSM"  Jr8VX \$e!m+`TQiYiY,8M̂moc$=N;}ˣg:B3E\\!}RA]}{ˎL^kkGz)#DM,$B*m#{B@ ;;J77mQH0 kbF&JkĤ uEeiƵmB4%}ڻ7M /kΖb.H⥘ȵˏ?bt -rj3=rHQq-e%̑Xp8aKSMUUU..>>>iii;]ZR$D"EEEA[Y[[XZc=*5iީ=]Tjs-.orROIm4hhx9kav Y s~*UخL~ņ-o˴@>|~`̖OO?gl>N,K$X,rssUU1v\ͿPJ=Ji3LzA=Wx>e{赘 k#NibWn"}jG=Nc`2f1!>u)P >^-ϟe=Jz8df1cYsy ^^^577VTTѣQ (xg.v\ׯdz-@ѣ62UF'Dv5= /'THT~rfjT0nNJ;{> ϑ#, ݻ gd.'QA}HE?SWRRbaa1bĈ,"iذaq;o5UMdI;ܣ60LcJ %Wk> ,)CgM/|\q{Nha3?*s8mk9pt{ɉa溺:K6;|;!!+Cv+uwn"6c0l@uu \]/QoZd\XI#rXkSxm7vx\Dz%8'-=:AKKD48Vl}'K@ kF͜6hܰ%Kȷ?%wϦNTT*ymitioH>n{kd`=0E I}xGe/Rim]#'jz^N@6Q4;{ਛ)"xNhP(ܽ뛂¢Sg.>}9M-z:ҏIM"#|>|~G{@׮|<} `;-X‚Ljb|_,גvl_nl {{H  e'z k+k>U "ht-oֿh۴t |-6Y5BX2W`m;gEGwΣ;'4h9;vynh3 YddfgdfZao 0-KB,1h 'TP{wwȿ?nb1)On?Taiz3^b4R6w֥h'0)$xU`\+ 0"gɏӣ䉾rcz$yҦw9-XZGe-m#G’%m"}mؖ-ґ#!, ۉFb"$&%,$״-m044H2ܨ&On?Tai :rFH|OOeFr\u[5]">X,_.;7j9;Eo_%SOL"^QTR/aU}CSS$~lHHA#r~t]9EgYS&srtoh¥6z#Ss< dHN?̞aK|( ݔ[ڎo7Vn9sLK`` OFAʚ6tJW2|K E҅HFxf!q3kEMZEm~Q&qh>s0O8GzsǏH$~,-?y#9MƨOmQQJX(39g免 ^=׭ .]AoKk%N\G[d;ًXDio!4CՖ6vɐ-Q;#7M{`Q.(PO ySF#<~o3YͰ IDATCkPRt~s)%mM?wIĒ[q4~]ľ#d6cJIFcUU;yg/ {BrH&V>*Qr[[Haʤ{svu+T6-451p2EYhuKBv%r@*YqDL=(Z q0ykjax77_&oM ,T9R)ݖ6ǽIqI֡'UԳb !9D={v/+(`VHN}S5%(׼~}}~}}CT5t)*}ZPXL{{t+VBؾ>|H>JIIy%wrrδdjw9!]MiY15fvhiYҴm[I9ظϒm."}ѻ GEeծ?&5/+3 ߷i0"}E|ػ ~.uImee5^sH_H$mĘ)ƍq#%vd>VxoWݢZL~|nf;8pIHH$Y8aѣI,D'L0E'mPT\zx)L5NNgJ6c(7S-? ;+~|zfe?'ssrrҧ3=#__?yB^mmmΛ;+%53SOiu }, Pm{Lryc=zfLGeN'U'VdIn\wr~slNE鵴ZX]SxGZ܊w_758xL:3%a8PN.B]`Jγ/?{"hUKmlxܼ/>z*9En\r -E =F ܣt:qĕ!hь_KemA[[ۑc;-~'N辛32<%j&E<&q1fllGϾK;- {W:JI(~QYO= sHN$'SrR>>]S+ĩ!T.d +Kb$Q|ѭ~|9(prve,.HN$'5%+ꀛ(Bdg(obҶ`~:qÄO7윧`o1ɉDr"9\NXlcBБ!n8ܶLk t/& W^_2P;HN$'ɉ1Ջk 4bl-7tJvє+by$'ɉDr" 0 pـ߄4\1=+̂_Off.kiIT.~SO'.[ɉDrFZ1 L-x<^\u:ܳ?[6|i u#Ef:tVDHKM{2tmǷŞHN$'ir4A1\n"_橘Sɍ(S1nP($> OݵBgl(W778v8&oM17NޚagI&&:&'v9賤iG˓6ִs%qOHN$'ɉD@`o}g$giD"ߍy#?N0aygBL$6|s= 12Ւwtt&p!9HN$'!={xJ;.4YrB ۾D'gsF+l֖Ɔ|Jl*5JG9{qqQS]RKO=]ɉ4s9 s(x1NZZ1%`"*bZ#.9m (|V+6Z,8D/%m"mmhC[mcj{U-FW*=.у!!t bEknL/Ք 8؃G`iZhC[5v+I)2diC[5|7N.(cjc2lH>-ڢ,mG}bhB@@L:Hу;519mطxTƣk珎ohHD@@ [ڇc 3c!iH!'io6G4G-ڲҦzo}D}JOBpxBI[A>|v)6j\nYmV/6GWُWoh(.tw~a4!#+*^!-i~ \ht6훀 mmYnint}sZ ťz膔Կ ִ+68Uִ!Kڢ'i2?zc&UQc^UU[ ACc#z KeDk,ee>Ai,mh4mcS=Jatm KJ)6" 3iӌvM[KSv҆hYf +"mtb1ͯM#Kڢ-`M"m:6G縘Qe m uz]QQ6qjHcC]cC0A3ppt:ŵڢ-鶩VO3J`ni~^=IENDB`hydrogen-0.9.6-beta3/data/doc/img/MixerDelay.png000066400000000000000000000006611211146647700213600ustar00rootroot00000000000000PNG  IHDR&̠ pHYs 7˭tIME .PIDATxڽOBQs7#liY`#6&#/`3IߠAh0`pf'` pwo޳/h]'MF'( 5*/J.Z]Pih*NV u~F?RpGcN:}q=zm p~G7x_uX L}w XpXNB2곳cb/;pήjh'`ǻ8M<`ZVA%HJ2O u^ѯB4/v8=fѼ(<0vZ?jVyIX*UKaIENDB`hydrogen-0.9.6-beta3/data/doc/img/MixerFX.png000066400000000000000000000726421211146647700206470ustar00rootroot00000000000000PNG  IHDRQ~bKGD pHYsnd tIME5 ŷ IDATxohWЁjB5(нxA<:0dH.23$=Ʌh< =/";#vɆ]E{80; M&vG"fJdHa$L ",ApSTuUwխ.xtUuS=8M[@!S;w`2_S1|S;S&$!wHtڸ^Q}S;S;HW>x@Pۣ_/b[+T0Gr6Nuch!6T׫a 2M[Šl2дf$Y`fjvjGKˋtjSqiE.\Vj~f?:N2`m6]T} 3!cj}a N KՖ멝کjr67ui9]R=h <^}e=5a;o0]]oUzjvj 6mGOI5@ B_@/DeeЯ,&S좷kSuZ2|q s86kT7j A΃;ZFsg< -l6mA27(_Ԡo2թN./RC+ݶ)WiƖC;ZJ^8Z&ǐiE_3܋wlj,\Ouoql (MҮa栂ݲҡZxՠYQŲ-gKYWmTX[2%Ckr~2?;^h;P3^I&"թuK='ڦh[$.`md)CCEd , (pG%,BH),c4KtHk<zu23EL#!'H/L(L Huoe>̉:#Q r1[ 9ڬa4 #Kq.AmJ}MB|B4 ([|@a@uq5-e_ႼA;"Qĉ~M7QFot.MDj-kݶ)Wb Q́-hl V2uғ͑%VSrN)aYzǫ46kdM9Ymm\" "ư9$8ž @A;D=omvj߲rua B412Kq`k.i9'0sG7k֫Tк)D-jp©T#NX#Nԯvj:vK(U dV7*Aλ0 ٝ'c ijRݨ K!;:R`m51s.'C&>'5ѽk{iIuoi զkZz936Ve.9@W%Gj+ Z 6-,!zkA*D~ljbsϨcj-k"'j+$t7I[jsj594֖E!_4sѤEz]4Uq9@ DfHAw[ifA('$1dZj&f+'jf nq7R;oQ;&'ڮMҦa8(` ;07v` _)P0FHs]N/J 0Ƅ;n:ar fQحm8JN[smJILѣ顿k+ N6-S]DS= $?@CzNf Sqݬ?y$KƉN) =IԾقVmSgM[l:R;vNyTOL ک} ۴DTu{ؑԃ.'ک6~N4NZx$O_Doj?ک;D3e?yH,L8|S;hCiBz;'/~jvmH6ʠG=MxLOکeJh"z v'募کHD{v>ջ1dRN4S6<'ڮa?s$szω'MMD]iӠK T>K.˿58QaKIvj'Ҧ( ȍ뒧*˿5=L+'zg,کaC8'ڮMҮA }woү}w~_qH;{T/DS;{hDݴ)W4ha7il534ܨ>/>?殮[7_)w29Y$ʿ!ߋC&'ک_>Ew, ay6p鳼+-A[WU/>?C&,tzDMΧvjnfjHT- #c` _{-_OSsLM][_U${_ʉvjІ~qnl MV->ľ[9L_ϩ'昸w}'=;e(w _ʉvjÉ&VC"?[j4᪃mm^߲\{=/j/^D2)'ک_Dh_I9NNtmm8:7l/^D2Ngz!];?$#hjvmH6J}Xn%MD!rIJhDS;cq۔A;T{h:O4S6ahw_M DB px_/ RMMM~x3'H\tHh:O4S6'ګy"O> {r=A=!v|=G1ޣz)'کCzωjnZƋ 0xs$M}5HDӵڻo?NTGM isM+Ѧ{RMΧvjІޯD׵ 4%[:oF.xMQ 8f )OW4N_NDZf|E:it9Y@1_/eЎH4DS;wߦ{NtpmH4L#?==m='jo.eAƢM&];ک=ۦ\DÐtdo?"Y'o<'Gƈ|~1ڔOjs牚97N?S;6ğ' :'~t%"t$'uG,A')B9ʉV5~J3?\fk,~)J*-ҩM `KFаGDau&  '?f vv))F@p4NuGԦJ\x%hh!0w[9MGQy'Ko.J#>&'*mZZJuF"vmJ؂r=BDUVN 6,Ew>gr{$'ښH"n&թKmƣK3UQt>3 Blz eϾ'ښH"n&թKԦݹ (NӴ]Lu~},/:ʠ}/5]rb0DLS4@rW:89ѯH4թH4%HRNDq3N^m=4&>'"TǍow8ʠ}/59ѯH4թMyO wu9QlR$T3 [MhSy;דzsK9TύI$^hRN4թX7'u/Iͤ:{IJhRN4թX۝ A?^jsa3'#JTRI%T:1$-RDY#|sK{w=wjs^TW~4pm6|ک-ş=M6ՋB sf3 dz$a腋o=^jtYQycèoT+S;}6kSD k-^HbHzx${sSS;S&Xji[u'ش|`L>P{]:CӥeQݨ`nv ʠ_/575O].sbjvmGT8Q%Vf a5mzS#u[ *QbÓ@9I^NR]=wɖz>UgdDJ%[Q=oH$ڮMU"| W+󔩨{1DiexH0F Q|3ˢ1G .j%bS;]TS'5߭qMIUH/"T9](Ϟ:`>QNh3Z3XAE7s$Ǐ99ڤN}GqdG6kNT5r_co{g$ꆶۅ H#P; 2?Ѣ7BבJG=/O[J*{\_$ED 3KM m7seɑs]_u.7=o'˯ c+:~_/mSTNKd#;HNTXM,14)-'/gOh̉.~ F&]<Ќ ~*{_&O#Et#hP۬Sߨb^lt5{ś.N.#w~xm8~λV+w^Pljǭ7F6dJ9QWT"ӸpQuéZju@UL^ClYn ڒ²0G LM)+|_:(/I]7?\P DDFFD@_{C98G~iCPo mY ~ h y)9ğMəZ < |Zss#9\ {5ӏ@PR߭yݾDȉ*0ajrj࣪ݽ΢u@-hlX~om+T>XQEŰi(uзT?.FDʼnct;^p7C86-ONq/OhiR;Kf[Ս- -t`)Y0ZNu5*!>FErO n!з#OC`q Q> /N4j>j~8=]oPa8Q7Mɳeu~d4(-`yyʧzR:0ƙ9JwdX5,"?3q8Սu+ﯠ:_Teiy˘ù~to#-m'5 5jkDrϜh ƉR*{K9Įxk\q!d >:Ùt3uFcӒ[ Y!C(d(K\yHd!,M"QVSPs{{W졡!_PDJD8=]o4'jk#Gr &dNk V8β~? `G3}8U*UYuNcv19V.p+V^˲5_/aX!Q4@gguFt|wo#WG;t|ODڗUrplL6}؁(nOĸkjs"eD"Gi5,bCt81DqI];߾ԙ^,` ԛ: Y gibM !QۗyMTHtgӗޅ_ʂ6(MOt,'r=8$>'*@lew+iys4o46_5&OqI8AA찿C۰j ("QCrZp)^u> ToTf^՛ 0?\0̛7no9 'u)^#.R/'麗u_tP~}Xuq^GD˦J^E:P,5^xYwe)ٌhdFIC6凧Y|s,r^azj DvV[ol(?$GRІ@l aρ0`Nj pe6󧅓 ^TNwrq%.'FڂdLU <5{YR櫮qSI^ _ZCpǟ޲s#[;ԛ d&'-M3{r{'Ŗu3@@qwygQXgt(~VN6Ygdh"[~+ frD]i!0mZHtw("([z#Pozts&f94'fo}L'W];캮LZx۱#`|UNẍ7_jU vlme-cAql /u}ܰNdC -B!-Ad9w;/7۲p~gMI4Ĩ곎:#Gx[q|zS)͵V${n;7O0hN4ʉ^o!$HmC˭-/1utB։O5JBn4s&>~ggN:<ՍzhC|Q!%̉&u|zcԛk++ug7xz9QCJeI 'Trhhђo*I5>Zt`0,㬮\#'rÒo zJmF!_`Pj`hlY}YYL=G∪u*V[!py]w.Uii,hbkVo%.W @5j1VXAsJANԑm@ˋPO~kzU*@Y`۹0`{m7fڕT:PtPN4kiWo@(%`Q!B IDATi$0`N`qy ec{•_^8,O('Ct4۬K/rӘfN6.f#a Pߪa9 àIl~ C8=DUzN('ڏp1$?Z@:ұ:O&0`N '#&Uwʯ^9&^eW 3GC}g5yIal'ʁK| #yĖfHȩ7/ҴO*]xdhhCӼ|>vˉ1ɜhbF/' sm ng7p6#Gb˂8: [/#CzUq""8ѡPnK4DwX^^"/PzQt VUj5-wEH޿ۏ#jgf89bL2'صt78g:PByVx}B(sX7ƽȍs-{5 Ð!hKYȹ|}e,zto޻D}Q> Dv^=Wo$'W4"ūl.d΢2G|z2̸עv\i[0^B-EG;C ~&Vi`%ë-}NaY`@yb"dh٧s3BTNTQ…QkNTC0N4kU4)M8ҝ*4m8QCqx ]i01ʂ3"؆v )vu6t.'*X7#\yEqߑ]Kҫ'3.>GfC΋ @ ?҈D5%q6:2.m8N?Cp88TN4k&DwƉN\ qFMUK+(.'*rF-;,ol=o?tV.#Б~{ Gyر#mI'v=OtpI^;9 -8Y BKx==\Qw'4_RNcC6ћTbpܻvDCIC/| $˹ " ~uEsd> +C 8ѾDÀ/;btxp8._OHgNTB~_INu 8|)x=LZm‰!E]l%]@: >Dpr7^;W{>Wm_16_H*Ea=@)~>z,4߂p=$ -pG+_ANtIN? k0^ߎ .vxwnWw(ܞ@m }kh/1e&y;usT''zԄ(N4y9@ rnAA$YzgaNv[nT}W=ZxvDvcP H80$K7^i1wz;zaxDE ''4Qq۹(uD 9 )@zqOt=$ ^z;<ы.pcn3ÿOTyR;6>ȻĉctޕH  0k(dLF_H H7BG6kNkc"Q7VNih][4m֩oT$ə#&|lx|^y2Ϝ¯tdSI)Wx|L$*TX.ݪÖTX{5ND W @XH2}EUďN/ϦŠ>sj`Iﮘ#Bp{ݮoT}]؂zhHK]_7jNs㣤@!_dcϦOX3/C;DuJ̑?FH}G9̈846j,Hj=T>wXݨ"Ydl|J+egN4X9N?~7B;*5T(cxZGCGv>v46,6o$[:0,a8+j:*++ר|jocYV=KuR41W^:ز~R`[S2nSpv Lū_}ѻ=zљwK~ѻa*rK̫#];O[[ V?Xp$0>{**Ԭ:N#tKwpWwaY>F륖H^DaG@3FxJ-=f byHO?z AFˉ&u|' ?}$O?+i,./RaG5#X^g*֦9,E&}G'7YpN/Dec&>ۋ,"-+]C$C߾#2g߄m}_>DW] `U`-cP\ǿkR:pQ6 ()WY[[C4sOOG-(hgN4X98 I/_z7"޵Q.vNз#gFmh<Ƞ8Ѥl50u2hAr5] ;2ڳ@a>\cY gŷ}eZ:0 ND ;x=gˮɮQ.3PXӹwWCwϯ`kUr@@kݲ[?VW֨~^Yiأ'0Mm[[|\Τ֨S=Oò-0Џ>olZfȶwHG3ȉ~RAB*38Tr1'ר|p?: #mAcӢyzFZŪYԬ;zG37֩~F QZf!}pl!Sys$Ga@Ar{3XNTr"pX(9NǫL?"ȁzޯ5A"eQ֠k5.БjrfPp@[GvXV 5G `evSv۴0 >ĽX`+Da_;ݴaLAp !eȌp$:`NThR." ]~o05{w}ۻVG(^/?uc6 5ʪ}(] HԹ;!EAk?&hRGϖsT<7UDh02k0vsqT C#yX$>'0WD] 8=4܇vs׮/?9g4\ʶ"fK"c0猲(kqĽKy <%&g1?XԿaY Klh]"Q%B4]$644w[X[pNToSX;_)`Y{e3H' ҁfmASX4mACXdRݐoє-/͏mI4,9 ?F:{@7ۓANT9V ^vwMLzu 'jY RN>cR*yGdU7DBPWt:'Rwk4UIse!71r(Y[[1{mUIe#m"$%{l$:@NT8]C@A+tt.;__:OvU>ӥNV(+@TB|$dw7Zۨb?J/Geܸ'F`[{`Q#];騍@e-cAqt>Zaq~2-ColY yo /Oql-3QsN=wͺ^[-ȵ$[˳Y#TCRiq3][e|t/eE8vKMXV)$ey q'*@lw6ʪhhmP^ckLaPD&ѶS.>3}kiq +L V!, #1VXJO 䆥3k zJmF!_`Ps4,>^,fi~ X|K( %N41x/.ItDs g/w] Ag/ו n&$lո-Kz]4qx-GQVl3Uņ,@Ozj Dvޑmqz:PAN/KH㯟st^yM fJwadV.9V,{K'T 5ᜨL;4wR>0ݤUK#}qQV2QQB>Oz:}!QQVAwǟsIDv>GKxHG:Yɗ^c1͜?A41[ U4sA k-G#_xȸ'DΉjE]wmCtF,·+~] Bd=ω!ea]obFY-ϞQN?MesL]`~ -=p];CXOP#5wN/ҴO*ya244, ˿· QZzlj#x;Dٍr3/{~TR -_ߓpN4ȗ{'[~[`r`/ ӳϒ6ozL6z"Qq_^t- G[pjS٩;̈|B9Q<9i2v$D>_$ AUWj5-w$5Gˎd3~Z~͉fZ9+3SI9vgf my(ꦟx߁(k9HT7NEeZ:H2'su :ΠX7ƽAHR`˪^ 0di+Yމan2~_˪nBxyʼnjR*{NZ8QMh7kPFY'Y]3XYֳQX2GW7T>8B@]$xɤr];AT&EҮm:+3aRVvslI?DqnTNDi7\GYcu4]:PIB9Ѥ?ST?dlpD#|_!A sھOL %K($i0{iy+(q2v+& PN4ѨY4Q^p*q^'MSpxh,]۴|u~(Xy+_sOFL~ϕ_s`MBʮlCwwggۏ(j|!v E}e5iz̉&u|^>0' Lpq -0n3bߖqtfc__FXJKFq8Nib(kIӎ 8$sI^;g5D9Rbz6q>z QBz FG4ʺQֈ-'svI'Ե^PN=5G!_d~$3OQ-2Iwp;#Qh'W4"b_,ACq·(̌{-nϕ+d?S_Sg#ӑ,& pꩳ{D$z#IN4qN4 u߇$NΛZ̍Q[]!`Ǽ5m~qvIhxsz,4'"\!_k$ D TAϫ6~m7I926H~1yꩌtm2vǩ'R~<1#d1{GBB?ֽW75Q ':*U:qFm-ܽ@PܪLl5ڦj{9>vÉ $r;7ďNtU^8W3aО9Ҽyۄ󥫅ST!HtPh ;(l(@4'_~z_`qxl 2Cdۆ}cU/EnEW+x/y<.`öJbb9;*,>ќ{Ǚou~{unn9DwvȪhU[(Qmި &h|TA 3@Nԭ5!6pst&X 'DlG-g[zi:|W]jzI;D֖"ӣ`ٙGMKW[hÒS?+fwy PKś;SGŋ fG59Q O8ѝ69jf6'{nY9O;N$껮|4h8]{WaiÉՐk }OK<95"؆v )vu.'*X7dſ\yEqߑ]Kҫ'3.>Gfn֍$(NT38ZrkC#|t6/t7(,jJ('y#܍K4|TKmm5§uÖ7\T>(SN8a={ly\"~~n8 Gu[DEө/nKf.tTn/y#/@G5-HΟ/;`V%<=‰deOf%WQ7D ~&D;6hÉ~k ~EO%'Ol7OTs yϝ;‘hDлgz.)6[NX> _{w' X wCN^Dm\0yx) -hP۬Sߨ΋W{sĔSlx|^is<+}D*GOD\×zF n!hRT,Vu8 _Dpr7^;W{>.v^Ш[FIH8Qn*[^!4>x@r9R`jLa_p>LgNԕ ':ZB IDAT~$CUCNvuZoljR㥂:zߣ0{'z @<c/72rcin;6Y]>JVqӲ,-/B&u " _t69RgN3Qh5:>s"Pqݖvt?O2~_wvR;a_|5ǑjmMKk/=$uʮoQHo98=c0WϹy%>Xt.ҡ܀Hhz5DS`8.Qtz}MzE&&ˡG('ثy?›KnN+RIezc k5,K⤗-VhH]y*@(LacR*y}ō/>9~ <ՠ{&X|kW< c|$JK/CSNNu; ;-@>oits8› ;Dk:&u0+9fa VW]J%&Yu3009r9ZN< bX@\Q<s>sm}"?h,kodV;L6^e%V?\ONg*+RW4M}z8Z{F`4_@۰h#4}D]Q_Z"^xuǫGR7t@W//JG6һ>v|+Ǝ8Q!bz M3/ݔr'ޯ?Ii=5manBŸUs?(- uzIt^^hJ-Z9T'BTs#^V"a)M?z A˺8ѝ/yS/[/ľ,ݠ6'gvSNVk4@.>a_b7e7S9 'nɩv;k>$n tC{oo;5 Y`9ѝVz<DƼ!]M k B##UcqIik !?e+tqtrB9`0N<9< I/_z7"Nh́t}o-ٌ<^^CWܛl@~d>͝XUN\`lYME8x`Lۺ _VtMbsL D1q2CS;yϝjĮVHPus M!_yM? sAdDDwv1l^6|^ʼnFMww )~}҉^h{Ɲ:Aj[B{f[z4-.[dTe' ƉR*{K\ECOhj <}kϪ-Dv!~Igh+,cOm+`llk++ug7xԴ=ZTȍfդ0R`_<d2<$ DmCrOTR_wyfMliRcuŒ@5џ+L V!, #1VXJO nSM!XVm( X[ -W#L>0ү`m*f 0'*3nR." ]~o05{w}ۻVG(^/?=?'*thh˯xsQc Ėp-Mzg('8u{}Bb_^ϡV-y^yI,0vA9p0`{m5v%('J'UKaIf/ (UXQ=1<5.hNDoJ.\| ks4$ [HuܵkQkPvy1$?Z@:ұ:O"';i 4sG{-@@}i0 '>Z 7z$NT9V*ހM&kקf/tHlb׫_n8QjD Ѧ݁-%ŵu 4gG̐M#h;Qh"px`›o0>>Aa$ԬcY"M[P비処y7?`--| kꂴ0~BJNKO^B/?)jWS+|tÉ95 :>$IIh]rQHv<~"V>^ang\$:44ʉ*9iA;,//(~(1ȚΓT+6j[DHk~YJ('u3sAܭ,hK]*:$řIqN7+^fI(r tP@8"*AۛRݧzZCvuj4-9ihp88k!>J/Q'X7ƽhF˪^ 0G!at坙a`9WƲj^$:@NT}!ȉzgv/_˧e/I|NT4Nq@7-a8֯Xp'Lӧ5E0,FNwwrC AQrPߡm]۔l}9WHMa%}Pޫ 'uh9ǝĉLA#p眫tq"}]|(B n&]b֯xgMre 凧Y|s, ح,s8(|412F%&ujy *mapyp!@ˋFhBighS5ԄsރϙvJ?i|aI%.'FڭkU <5{YR櫮q_@k4nEM:'Wk+rwI׾Mq] BdOuەOpDز71k-ϞQN?аv@ߌ Y&|z#1DZm+QAsn_v"n\?-}ݫDm]ows@eeʁ5/u}ܰ;k5]ܗw^,8mjS 1wwH4ʼnfZ9+3m2p r@T` ꦟx߁ڞh́V7 EEn"l̉d|GDݰ]W^㕗觞:K!/G9iϝSsۆSvX( 8Tp- U>[cJqV VVhGW7T>8B@]$rYr9~_yi^:|1 zBAZ|hCH?$'n%ډ#@//25К.(C~,9w>Jzvҧ:DA>',s/t"U6%.IҎa W~yQvΧ/(40D5K|Bw~CsBfmK ,/:3 }H"eʛlJU;D,,z`)\|־>x^}U뀱em-crmiaZy~LV L*:o=L \zKmbKX1Q*|j[r;V4&a[ F{͒%NsM+,n5LTTNְ@ D:Z dU}RU>Qc]ztKTOs]oeo]dH Pm w>D` 0nr{f}ZR1OX~ ؕ_~2ji N bhDm{f:znTPs*/ٔw Yx)8zZ' bu])0[cy=J7zx۾z{~ow|DeLԦMw;qNǫ݃뾿nEy9A^fX+1A<>}o;.c6JaHQouY޷~rߝ$ԍoWZo;"sJT0э;jN1Q50 DwwQ9|ebb/Cկ|T1э;jN1Qoދ'8q9 U{"9oײ ]LT`B:@**Eҝ2Ţ<:/*Ir[:<&l/޾Zw1!{n|G; 8]D&W^\x'_`Yn}ُ>DžY!ڴG; 8]Dm T}T7VĿ4+LMOATtڌ S&޻H|$e%w,=NRyc #^c5=رCE#K~>fAiVda`tS/!,6772"I&賦{г#\}LgUd2R\RprS30,Q2Kʇt,QR-d}~0t+}3o׭}pJWg>uΠmL;8E~I$0 2)k뒥K2 1$InL2-0f?a 4q߻ 9&s74uL.;&[0Q硺_Df)8rnSSzZPC{٦?ļ {)>%ӟa`wLt&E:"{Oyr0lRiV1>%G&ئ%Hmb c.U0Q|J)k_O:/>UЩ -Ov0R$!EM0;#n6EԬP'꣯/IR&}wiҟɀaJE;[_VORfYaDs1&X5-[zN]aBSX*]PC8L[)a VYz+mϡ60Q]/vQjR2 O3g IDAT5iq2,,8Y1ؚ2RJ䡶NR-D[ആvmh}a '~Jhg\SWںYʂZ(_'Zap{(B,-4ݎDTǵE0#.T>Ixa0L@Gm 9dw4Mz;6KzV@ 9&1ӕbkiRөULTF ”BX$JQ]W^@j{?i` !LAz6P AQI?!D#.p"LtȢm!id-J|o)|jL֡1Q?F,$ 077}^eʋ oΔ TUbm= "!0܆4(j|I[Wjv׊h/1QbȈ' A3~o]+SݟTk;䏉=pmi ?*`BfT?ǂe8}[D5fʒI:rȒ\,^=sҷ=g^882SX$h*VM%є Ϋ0+K&iL4ވ^@K/#ޓmvf'Ӎצ+\.gOӏ>­@ko[dT%-314l?c4=Eq;h濙'{OQZJÊvw>n/E3!EHwbg][濞c;sTa$癝3E/mEU!X())NOg0*$QY2b6O3 =4G3(e8o-QUf |;kqKzUDzًZTmũ˺Ut_.2(%](.)ȼTN=K"/U00lΉ08;)-h=fg.,3KYrbFL*C&rɏbZ.&+0c]=w>Dg%eL2 ?;XÒׇ -FK{p, L_-E~;mޛpoi0Nq5 l%bNd=LOOJUFlW]y)-5A~m'Q,RgPz]1Ѯ;Zu,ñDkh;GJT~'$tIjʒr'tk 7"?ũi~w\=M% ÐS\*wJq0V%i| v1QӟO0ѮηC!۝D{ne߃fioMG gЩdFF }6izBQԪ$!DzZ1Qo 9{ݽDkG:l/⟊iK TLÑPT2:u$zDz*2q by:Z g((8oz#/1|`=q?BBBpwz~U~>]Yb#GFe%h ;Z<ITiZPcLT ! +&s׈#?)%$R Og?k[L/1:lw_X][Ռݜ3wQX|؉k9-큧5 OHU)hMNʃGoj~5R Vj?ll)*Bcv؛Gv^* ]L10ѮηC)ԹF*/4X42Kv~51^ށ"{p$+E96N][`*HKԺϥ|URձ s;\2mБQ O}ujʪ j` 꺩D+i[:0Ff{4y~=Ycv>U~}A e6&Y2LηC~G|z);vZ &j(LTDH,&`)"kDʆ7 تݕ.`v4 XsY*⫗q9R˩gt}},2/vY{oز\qYHF%ӟ-"S$_EGi8Kosɾv0Q]z +&s;SBgcZ\8{ap?ޗƈ-~ܧZ&zLtkҚ#-Sf'vݹ&|؋{܉VY^GYpuʵ[')Koni 1"ZDv9{jw7ڤY.a+sb=CgZ]wIE}v>sM-Qf%~W*/ٔw Yx)8zZ' bYJy؊|q .kz>m;W{>-wWQShpY6?g(ˮFŀ܋Sط˾y?F7!+1?9]+~ up^nPL4{؉p?^e7H]l0N :Rr8[ڱV>yc)y}Zz>|3L4U}sWӟ3O*"GeYM~ϯVEh1CGP0s$ux(i<}N[`DǶm;5n;U;>Jm*pҍ/]4Vn겷ft/&!8AN5+;/&دzwė`z>XaM-Q\O>ы'8q9_Wx߆=nͷiP L* Tqc/WN#sw˳N%  6g?ڵD'>ʥ$zj/^h)7]ǿb vx0^鿿ampUZ: *;,{7HFూ<~P#n4&j He >ù?o`?d:*ENf_qE*x8h3Oٟd<чc7uOT/J='*j ;%߷)&3{88U!,86 }$aZgG3yyޕ_R]Rgc*rtʉCV2x W8_IR)R>nU_y;Ot!Y_H<}Պ<-*x2uc!ݖk%[q[5+pɲj,Nah}XrQֹi=tU8&jX[o2jhA&SEn >DMX;]og.OjC:44g,|LXQ<86vaq\}Gk% 6Ƶrd O Lw0NpkVVlx. .ӽ #9\&Ggn:ks*>4$FD"]xv*=ʟ|m#yc}5>:~XsFOq B9 m,ϖ.b{,S.}x̸Iy|WCn~r?yш0v $ Q4+^SIENDB`hydrogen-0.9.6-beta3/data/doc/img/MixerFXEdit.png000066400000000000000000000307601211146647700214500ustar00rootroot00000000000000PNG  IHDRbKGD pHYsݣatIME7 IDATxO$ǝmj! $P seFv,Q9,|Jvb>zz`Z^2UςdJz @ /A oUQȌȪWddfD2#uEQEmF0N((]{ڢs}Z,EQE|o(_p/' (Rp?˻(it矘~ >C7²ѽ#d_??9yiS7SSKYmߵ^vl|K}So 9(jW/RNt.&=r Cfe `!;}XD6Tp靉G}@Ӆ:i8|g1y.foK)2Q ZԩSF[zf?&xn7T,buj[uu>O澗k! 'EQ£p +Y#l}~a[b_pqC|8sfN8HN@6eQn;w>"[S]\jۊtLS_F29_})_9UG|\{^S?82޿Z,s)s)frdukXZU^%:]56C:Cl6ꌶ:MO͗g0KQvHv;#w~<o/opf7oM|O!+2ir:Zd3wR}EQͤ:xJ#lu}0=0 e":媁+aRا1wMY.&[S1;c]:(ǎ! |t{X|n<åwy< _Oe,-_I_ڜXVg&Ɩs.ԩWכ׃EQ*$B*޹pOqSF)0r 8}&kݵL2WSu딇Į]eb.1=핵s?bE<9n6/߲Qû9nKn(Ed:{~węE E$roCox<)V"?'Kn;TFdu}9ZU̸];"%S/{Yl[F3lYlP#W}_ufl*3!+ ]%.?.&oT z_U?j,51`G1w]Y2KNNca툺-{m?M_Gۯq]QLj{#,WQ1-3uz~[m}SmQu`mݖcjG:ʒ}Ȫ}[zv'{R?Ldp9S:{rwyub++|dNz֓}?UMUZc1;TB{캒zv-|qHaWיѹw_{*0Z-_EK}[[:jo)̙u ;^zS˩ϊ;eݖc7׬$"P2gjYzWm]*c=M%rwݙ{qXw5ո:ܿ-:f9ݷѬ2Ls jlZVK˺-vy||ئuL-JEvAUmlt]kYZAmaۮժj\gNNNN)u /2=ri1bS#!Xmٹ”R=9SL=<'MSL?j?-[8n]rk? qU몳o&s*z!SLTR{ Su{bm٩0ROsXOD%%cG%#@ʄS TV/ezt:{~:יq٥ԶHLd"{Y_^OqVqO^gE7-g TnlfcEu_}7>^ױqKC긽V^J#I^E d"v*z]8ux5;kE7BD[deLd"SL*8ȥpDڥ!2F?vi)5&uc]aD&2oD&2Dm d"SLBD,D&221r'a!D֘L)X2Ld dbN&2%B&2L1 1r'Rd"Jth=픹%_2m1wT9sk|TC&2m;q2):a*bˎ]LdJIJl0FVEgyqٝׯ<8{f 2ee r,>s*rOd~{O!Rr~oMԙ˾jO+O^k֘g߶#ڎ]ߖLdJIhMu"{~)빓vd"S*LB#hʖ U{h3HUW o\̩2uCu_Գ/s-;v}Z2)&)U[ Ⱥ1s7=隹%e.N0۷9,=u1]ϾmG-Ȕ P] Nq|s90;L?p4w {`.aJYm̋uqFƓ1j6;^[]bިg`} פss-Ȕ qF>*ӹ_{{39p4Q"<7:3|H_G^9/и"1O,{EG~o&Fga,zmCYDM&2`CF;JhE_^Ʈ{8s_uDI6da `|z'F/gӓ:T^́6o2)Ch}G H[>WO[Jrt Ym̋uXcQ<ϑ{G+6C9ըLdv&) xZw\,~gkvw \MΘ1,fv= s^,aC#+5:ZϾmH#DlP兿uh,6+/W3}`ތg6#erGc0{١=wyg4?f>;p {q\iϴZ1ճo"o2)$d4žV$}gVjF-\>W Yv0c1gEkfU3W̾6C9ըLdv&) xZr&dgC`֣f3r?9LN3zmCYDM&2`CwЊ?9SW.#rQ.3`rb~ox+c*'kzk(MzN5!Ih"^V$gfRU1cXztXQſ1r7V*w]fˇճo"o2)$d4žV$gf-QgC`6gD.3`rb>916"sWy_C9ըLdv&) xZLݾY$ڿce,{h=!,"&R!LBFS;JhEŸg-:mF2&w,oy؁urQz̡jTC&2m;DF HRsՁ Yv+ 亱-_U[>K&2$ e3fی]erGbb3PYLdJ2QB+\Ĭ|y_rG-j/oʙ[b7Ȕ a2lPmEߐrҐl;#fJU:d"0&"/5JhEߐrlHztht+]a嫘i) me2bQB+\ĬGg ܱ֓lyG9s9o2)$e4yQB+\u`Cb֣fmⶻ-}L)&-,#!0.3[#1 Eg6LdJ2QB+\ĬGg;l6[-Kx됹d"S*LBFS-HRs5B23`rb>%w-(gny>M&2`C&"/5JhEߐrlH'%w#,;g)G9s[,"&R!LBFS;JhEߐrҐl;7^-_Q;JoDa2IMD^kЊ!K&2$U[Yvl/)gnyM&2`|M( CyFHCbV>ɼ/͖^EnyG9s[,"&R!LBFS-HRs5B23`rb>xߒ;^kU:d"0&"/5JhEߐrlHzt~gny2) $d4žV$ )! Yv0c1㉊r斷s,d"S 6Ih"^V$ )ĬGg; ;l-mwW9s[,"&R!LB[5[^YF:C`֣]frGbt+˝aPϾmH7Ȕ !d4V$ )! Yvm+]!s'bDT8[.Tet?<q?y\HRs5B23`rb~kntr斷s,d"S 6Iʸ-%w檃7$ )y^,ĬGglļqQu$sM&2`|M( CyFHCb֣]fLX;w|U(Mf'$e4yQK2R Cy:!1N3[c=_"s=q[u2|"LdJI(lƟUߐrg#lD:C`֣]frGbޜ,|< *gnyM&2`|M(&su!\ĬGg; ;Vr斷XDM&2`C8[.TemTWo|9i2'c<2VyΘr;^&ɐ!_޾@v*w]Cٷ ibxDlDF .͖܇\u`Hc=l4xoE+J?OO:eV>ɼ/cE;^Άw=}ېF}L)&-|?6^+c#ԳFkdNJ"w|U:sQ ȴLBFS-.:EkG) )!H G/+:eEg ܱd:_4qIDATVW@&q=}ې&LdJ0IMDXl+y^;Hp3{kIo|RϾmH#DlZBҹfb2#_Mc|Tu\;QDfnE2wdc$rQz̡jTC&2m;DF .1[h3SdCJ؏0fo>b8ulEM2.̳o9q[uƌCٷ id7Ȕ a2bQBDy9[^ 6C;{^c6#Gwv6;lKY_̕#3&M$6fmZsC9ըLdv&) xlچH09=c^_\筄h0`9-*{H=!,"&R!LBFS;JIo+%[XAg!pnu}$n;Q˛2S_bVDfv{@ba߿J11[];JojTC&2m;DF e?#?[%[^3m]!e?г>SaV;C1-Ѣ@fu8DfFZdJe[wP%߭$[^Cg|*y~=/fỲ]5 ;JoC-7Ȕ a2(JM#s+>SGmJWy_b~l&wUu~D`v]"̌Ȕ˶2 M(LCf>0{i̊êg}2IDfv;JoC-7Ȕ a2(&ns͖6|sj gD*,4Yrv1-({@uF=̌Ȕ˶2 M(&+C-?wƥfq,Dm1&*;̾9|L)&) xZwnh/xSʄ;Yd=so&O$rev]ĊHLIl+ZWnyۻU3}3ݝ̀R3!斏jxDlDF H3;?޴.Y_@lo1[}W*:dfE$XIKДp r*13#-2%LBQffm͈Vژ-쭥?شYĺJ;`֣J3[Pfu؆f1}L) BF;J;__u^VpwsY'{:u\Xb2[^uh!&3#-2%LBFS->l`s{,#$W.c?Rv{_+}17݁X̀mSIfu\9'cP M&2`C&"/5J-鏹3̖[1ar̮ۢp̌Ȕ˶2 M(%t__奚Ζœ'.F-tFt^ ܩ2uyO9|L)&) x4C]?sqϛ<2#/fodw:1=I`V&!)%.-nKW^;j{=Ȩߠף]fLT}GJ+{f@(]~͹tjxDlDF .kRܹ$yMfhofX&E4fUyڥʢ̮0<̌Ȕ˶2 M( m̖}enlwGg}1y"3`rr!wncH5!Ih"^-?ok)|l\U̕VGk}3{+&/m|uVEM6dfE$XIh}G U=/ܹwU#V!rqo.[O.I0}͖c+wFl's&R!LRF%TG-¬1Y̒iD3Lng#02ffFZdJe[wRHG[}`xcgt9{AϦpI?ۘyFt5d0&K!C}G:kjTC&2m;DF .Չt/ܳωWӏν!&\ܨ;+Gk}33Kc2[Ζ}3u]ϾmH#DllRzHG[ϖ|AX(+ =MCy8]>uVb2.uV*bucfFZdJe[wЊ?1P|1+>ϗK>Y}d-_ò݊"0ҕRT2iۙ&"/5JhEŸ܏sC#+3*3[>YlᏕ-u0QϾmH#Dl/s0{?s oS6+U`ֹFm1&o"0]]sQ ȴLRF%=Nl]ۈzY,Ypcf+f/fM0~aK]ס{ۆ4LdJ0 M( g83A6zALc9>N+=:%߼F_̵;ʈ̀݊"0ҕRT2iۙ&"/5JhE/MȰǕvvw<ρQ&NO1+d^m?sou`V&!)%"!n;b/[kȱ|>w|>yg̒{י;UfQPC-7Ȕ a2(Ypskrz[eʌu4\ 63"If;Qp[̮p̌Ȕ˶2 :999N5xKȋ4F03LdߒLd*o'.G.-FұHLd"SLd"Su%hʖ dS` ԿMLdJI;Ȕ%D@&Fd"S",d"#w2)K&2LLDDXD&25&!Fd"S Ld"LLd"SkLBD,D&221r'a!D֘L)X2Ld dbN&2%B&2L1 1r'Rd"ȝLdJLd"ZcbN&2`D&2);Ȕ D&2$ȝLdJLd"S #w2)2LdjI;Ȕ%D@&?>.r|^WYg{; 8,p;uKv@wW`+J^ՎӂxNfw äs:|7v 7o#l~oA' aSvIENDB`hydrogen-0.9.6-beta3/data/doc/img/MixerFXKnob.png000066400000000000000000000621411211146647700214520ustar00rootroot00000000000000PNG  IHDR,I& pHYs  tIMEF& tEXtCommentCreated with The GIMPd%n IDATxw}]z@ S898Oc Mmplcۗ~򓟎g{>#bױKq 0 7UnBUU'hekn- 뚒G9-ָ.  KexSeMTEEqphccfb\1L(=*EBYV٬\Ţ0Ye.R@tPpo 9Q[_nkh:c!kf=!g6/|&M/^TsK 'zBLJ]s!(D YNB;?}sW֭߬m,˲#I,k]=.S5Q ̅Ѕ G>QނQZ!{ⱇ,˚NpGϯPXܰi?fH$.Čle_RJ(mjnv5YQ6gncYi=0}u!t!t3ȶ< Rdrey$fdˢvAgnBBp34fVA|欗HDbU/=^_]}&΂3t!)v3-MSqy$f4ͻrY<. ֔syôvfeYnif\.w.ٶ*Y.09@ر]7VcF(J RÇ&'g 85 lh՚[~R)d[~?5 t{6\mCˊW\/X?h :@X8q-4EQk^N (&d+r(Pu ¡$B>?66yl #sGa94W؅еgnH&:|x_TJ&ʥㅠյ [nv͋Q8Øضj0jnYq%cw~|.5}r|Cdyժ $\];rcGaMD Jv~ՕUU1MX,J%0@04SW r,Vyо>J,(N ƖY66iDoO>w,]ݱ~P(lv*rSA$I`0drA@f`V|>w8ޅе9,ύN$'QuQk-~1>>חH$,J&S jjbYUUAEm|>_ȎSJ02~i$Ifs=6J@xblFU7mzUpi{vttz#?< }>B(LT*lhl^r$mDOwGTp'е1fF*L'njRj(Hnܾ*dBGxh[Igrev l&=,Stje555Rٙ竪dY:: ,B!J)B(O(jSskv dr>5 B7udA`qfIB,hqc'HAEQ UUU$9b3!Bhm]8@)撹L0t0m[iX94fŢ|>=mزbfWW!$ J=:DQ `0Lb`0ITH4N5 !{#^b)_gMS %A? !zHA U`cz86K}RBȉN=P6KΆeY1I!4ʦq‚me7ԅ3I֭]ںQ6~5(9',QF12jBEJ۶me#(1rB f8E(2zc}bI7^r׫I O?䞷p fBS-dYkf=cRFq(BB(iB沙ݻ^_`29.D"56]}͍6\tw>#Ã_E"R4;r~Oshyp[Zo.ki+k7طg/==8[.>O3 d{vKz_LjgYf1˔%YV0ƕ]]]LRsS*0d2 $Ɂ1fLi6# : p8zrm/vW;Oٶ;ݲyOR9+ . 6\ڶx(㉉Ğ7wf3i]/oq-̉F3Pv>uP(bF},Xh(lؑD|T˗_qXڰiUzm ?Gۯ~!U;AQ3Tj9%c|~Ari`ܬi+Cp6ɤb1oũ?ytߞ]ljYt{Qk{4sh4!!R(FGGEQTUy R1K=%mv~|㭧y\6l{~qAX}ںUUo{z[o<#6\*I<| Guu N<ڶPwvAv"YfV.MN768^.FcP( ;~U[k/qMMm뻏8<>L0rY##C} Mٶt]O}}}b˲4n۶KR*JӔP($"q<B˥´Dϊ+ؾw `/C>F{T{0[ ;_)@pJ"!@㉱R =Gz#kn4OXxԧ?;?'On?uu7=OkKĎ:p7D0xzW^z~hhmظӟ%l'<@\.%cuI} 鼬0dspRg{z:kj-_L~BH<z8wڲB:0 y<GBN%"5t,s`,˼ƛ.]?_?n3:v,DciN yo ,s^%IU9'pϳ3F);drc?<^OsLp:_SU-e}O<m?{ߝ u&!!4p_OhU5Zzd2Lei ~ä(( $6@*h]i>7_<>hZ{HN$Q yόGwr6nk[:ĽOğ|@ʫ۸i(#C߿gy[^.@"1ߛ/ٲvSOMM |oOת3T*ܰҚzU͑"%HOEVJEQGQUnfu.3/˲,˹\t'K:uzo}-GPC&:xpK{ f>:ODUld ۳+]Ꙧ:SnlQk;e[otw^Wotk$ˮf*9q> K-YbhkotwX;V7\nz_Ï>y[ȶ ӰmKJ0Jlױ~j8@"sKS=ݝUv\NuLkl,{r? qxϼlNRm-J7ޢW`>>O~q+Vpӭ^AXGBۗne+#߼Yvt.JRmm=󆡛y UMML}Qc^Zo0 czTC(ˆR** Jh8(0] !1 T,f3i\8Ȳ(3fil_Veӧ1?[1fV_D|>k=:?tV+r$ B@PQxŒ't4PUa836.X>x|.NɲFy^ H(8?X[L)MNL`0 >cc"t]岹lx0(/XIg@s=s'<>lGG>pw=R0=׬!) dRƓr^kƌI=03ޅZAiOlV JWgetrtdK#C"n= x2ZB(JSR4>U("<!lYV\-,+#V3UM g^% ,+b!lxe#%F+x_YX K64З/7Y5S*ɉK‘hrb2vgA<˸۰53gF主w8%NjE9Ax2"h͋9xޔo* =B>S۳W_sZsk0, M:;JTTy<ޚjm[y<_a{MZ= (/YvB㚚_~?aEE߻U'{o]wͿhx29k ]OS9d/Ƙe\6M=zع΂#92 ^%Ma֖=FxMw?]4C"ub! PxUG\VմXnuJ\[oM|NÇ+Լ?EV|S UUU|7mӹEVۗmˢŚ^ںO[-xs>e7]uk IDATTUMM-)VF0>r=oz`G"ɜ$BB.N)*+ 퉉~3_ LT]h7##]~߻/ m[;Mrtonʕ]Xr?. tf`6͙2 lgmr>`Fg>t8I|>s|$;X}!^V۶,ӘX c3*ȪU4/21- ݠ3B=yXM}QxDHƶmYG2 QpFN=0xb=[Xz`Y`a_ڻm$76|/WG !%ݻ!l@ȦBM>8#8 C/K\6- !1Igz)zCP8|ACLm^.rt(َ<8 ܌s&օΝxx1&cnFJ@C |A;<|+׀` B%6]_YQ0&3d*>{"h!I&\M)ȀԲf՚Vd:, rOUJ(* t*9qw/8;:0-sbsK͢kp%u&`EUeW\uݪt#Ceh˜2$pB.8u4SWoݰY*M@QJ(`BY$I t23C9. 4?rsP|>$I˗{n"n.>0|%7]3ZWLd}vEcڗ75#!:N&cUՄb6{EYjm$[ Y`(Tz?t[P/O4>>VYSy4%0F'Ǡ(H>'F^?L04HG1!DȀ / )zCgP檪 o{#قJ4m},a:$zx @/^nnncB&W8\,ˊ"u6vmQdS F(Ŧe9Xz\ <'IR&4MGG1%hF\-Ud /H6';kb& "YYJŢ"rPR(әt0 ㉱bs!XױXu$KcB) U.3,__o^=ߊk"BP].'8eTx!BN {Ka蔮0NN$cںRZEum 5,2MuS׍rX7-CxDA" :ThTk"r*b56M0LC7u,R|dp7z>Yan %8/Yjld#LD1YRKb*9P45ʲe`f:%4/Z KXRU4bCS, |AðL BB RR(PPhEUT(sl [)%@(QTӴmÞZx4jX¶lQ$KUuVecGSTU%Ӵ-â2Č 5dbV5EyEeRB`rȋjʘm"Dӹ;iBJ2LUQeEYC(y ¦aD\]M*1qX6MK9A$IU=>Ι.`lض>9IbdKeڂċ"/R M-! [d.N\)CF@q< ԚRJ1?Q2dvL6eBq%2Bp*TpR#u. BbBF8ucZ'V^f6eB""F>ڤa..  2{aS\AGJ܎ Nq(˲kTjyyQRmۦa,_E @x}^o8 F" @n|. >#_`z`0ƴ@ܤoT*鴩zz'B)_ jmFgDЙ" R"|.H'xIy^ol^f][K+ d*, ߣp8\өd2~O]s!|x©hj۷]9<024P a"&!'K$)Hp\DG0YQ]yk(}]S61 8( ,)PAN⿮ 76mڴҵ+FH$ȶQL\.KbA%Q9[8Y~U[6e I_,8dR/g8K"ʼs( d>Ų%+-oy4ouUyxI`o|Y)J$ S577]BÇG^k<AR8rPȏ'ƲifUEKk.54.moWE߽862Tߴ5>I0T}4Iٖj$ $[Qtʟ?nҺd_.沚Dk.aΖDyz#:@ZZi[zW.]0Ä`,d0F(LM!LӣBPYUݼ5 b˺Xe)NVal#\*GG \02e'w,B6lA9u^$Tٲu.%u' fM  0! P 8wm_mȋ2ၮ>B?zbٲ8ik2ڶҶr&IQB1BH`O>@MӰ$Werf;Nq;#~{K!67mm..*usY/_w!`χ¡XETմtz<>: #HLBTU*j۔L=LCq筬|f<>Z.P,V(bq/aE0SsB8>>zW0Ǎg1wDݨH\sM.nbn>TJ <$ JUJ|>d7 0ᐢ<'X/asXY PDEC/NI9Q1Thd2}3Νxx̺X|zMpn7҅}AɆ,T EīLP ɒy)e[ۊ(J(0 Bf6񲢨rǯ3ϔ+y* v#/o9 y^N-Iӈb1sbȻ!;g:g7~ȅ܍.DPg}}ȅALdf&R0!Cx\wf3_4x4ߙʘsF.€|Gi<1t^yIk%ljgߍԟ{~kbc !I& !x߭s=UԊX|jPQxӟ|!c #dtB EQ%aJ(clcLU5;XwoE/O؇zYU5A0B#Iywb>9NYVw ;zU~嵳ɄN6ӘVn 8b!D8*1Y=WBsK-o?wu7mzEU/z7vrպ/?D"1~;!&P^rֶ%,#];_e3^va100B3ȘSqKlJ&ǻ90>6`@ TU#'c}צi,Z|vQ @u1z!4(1AzbB -^*+ xb"͝LZw\ ,sb<>::taIXg\N>v~R]U]itjb7FYVN0gCzъsunt+xe '?8Dl~^9H]}-ݵdJYQ_޲f<?-X,@+*ipd744C!pGygܼp&e*xڰiUzm ?Gۯ~f>EEU+^yc1|> \4@0>>O=*jޛL$kpb¶KOc#Q#mYf6M-(q*cc# M^y'N9(^O~(ӣڶPwvAvBA\691t1z466BTjYq4O>EV r4L:U*lX@Ay? /pd{q <[gGb1 㧟z="J:5o_}eW\iL&<9HTnٶ}ݺM#?_Bȡ}^>?ƫB>_z|>olDqbhRYyD+q&E6.0uxs;wO:wн5`x<1V*9ǷvYvyJ믽/>QϏ#?yWt۶[~Z[7_H$p$7O-Ƀ~O=+/=?446lUes>N a X.ںzEUO"z}+w\߾dP\>k,+ـbH̦KA9}ݿ|_<6/u1php?B(~aoh?3]/9||* Cg?56:\.rmYݝY7_ټ' 7^jmmmù_7Bx:gF;\~Up>E6*Nz}|Nˢ$*a\L̹cJ)`,Okj/*;<4w=R59c f26:JCSͷ ?Џ#_~ө N'^~skrl6ݲmӸ IDAT0Nomr~ s!ىW_*k.$y?BH__/>| 7/YF8rș8A+jJq4Z/}_z]Hly~届ʎ# ˮ #D-; ç^y=X&BȾ>Բ=U1Ӎc|l6ֶTy4Jx"?W^uM[DQ&89Nxl]塁Dbl77^e:k7 ޞU544g2T*aå5546O}葭ۮlii: 8O9NUT˶{vKzyxh`ddSM+*~` }SS6mVw໥R2gN\eA㪪JE-޹u1 nc}izU΃'v+?QѲ@~+5x(\=ͧ'W:ODUld ۳+]54C}O͗-jm44y덞η]MnDbW};L%'NG\r%V \sMn}#C+|~U=pӭ9/MGzG!B^V\snq;Z&I%'x_ftRDU7Ͼ}(V}KU J"hN9+sIvF'3V^ܿhW^} |',/Yv3 Xǎn3,<~ypם_w xHHɷWdWdIa|h+8ٸ֕HRZʎޔboTN*n֫HlEH$H\ w 1O5=w{ᇁ;xÐkSSܵ8{O&_(Jw:*-2,NQie%xY2{v TmJS4_m,Pq G!499aYVcc3EQmɲ*1KIL&d{GWcSsAtEaĐ.3qK}o{n峛yhY~%D/'BV3$. X+粙T$ɹ\60q\ %ܩkyTK۽pyFLAkkaWw#Hxa֟("&04 0M 0ZWWt¿o!4-759a?yI(\<⅋$I|tQ(Kvuz^k[9x9;ug >WHggCGbxahzA i( fykiQ6 +o?tmY sƿ"ĵ1 #O>?3=ͤ ]E !fFG]7;y'6:515Wa٪1ò<岞! 033qR5 p0ty0Dَ}Ҡi[(R%Q2${8-m( mIV=c]ȥv_vg7D1? U78cr lۚXR#R}}#EQccÚ+/c#WsZzljz쎝-{ǎ]fu8!)ʽuz^xAx>xaE!J,FE _xa o:dEy/uw!\rw4 WZu~!|0 ޾]VtGQG> "4M;3|uƦD 2]߹o˟+_?DQJ%)t|WWcgϞ,!$IrKK[Kkw۱[$G2M_?>~Ν;s|辰 !Dt{gc4' xټ{ttvk7d[{'M??Fķ|=++]wc'~3|uȶmς ym[;v$9vh[[oG33S}sO4Zi?;׹3V!K mg A;XoqTz-˶ȿ9?瞥(:^$7^8yb# ѿ 8?pFӲ޾L{?cI}V,zn,`M-Ew͐$w߁/~~w?~ =;W]}'^{O<~#euݭx`lmm흊Jْom[4446=WyRnrD+= W^_osR<^@dWw7g??ill_};'_$+==;S/wMW,$ss3ss34ZLXX'6Q]_*zΟ>zlή'xԔOR.+jss(I]=w쿓e9avz _6>b )YVEe={7(/?5T5<%?ߑeogBpjM$xD"7:R+! u=]][ #[wq|v[Q]wkumW<ǾrD]1]L$>sٌ MTK ,=~]Z.˰lcc)^E k·xeonN}ӏx]]}x B]?W=;H|uȊރm[$Wu;:Km≚oaQozaAUUaLӸ|i?+|B;pݳcrx lvԮ}ۛbu Mb `͎h6S41d?[ Wzocpewyg?"IjsL_+v~u]M˦y^xuٙ?;;}3_C7K{_xMąg޽p^t;bdgOv>vR+'WVϮmvf&DZGGDQRXx?}nR{[o666R(ǷwÏ<~[073|!RȲSgϜ2I%?vCwDxDiC0 Q%RCCcseC :zi9qx)і" 0L].Y>d$FzqAQaqv&!ߓu%1$7 Ax|q1d!DT}CSMq|}CSXwn@ۗD"ٴE)՚H$B4Mut(ut4un Dhtt(8,rm$9r]w\VrOz[~gܥ/C6q[Kv-a,axf@3-a֚r,\y !aAsZR [>B8՝ `Yt"⺮eQ&BQ$ vekYviiFeoڊ!py~.\llkI$+eɲ*;%I<+uDz~anjx%f=s]x=ϳ,;kF=RΝ;r9 Dx3%B$Q–p3cUPU4 sSg˲1m|a0a'ƆTEaYfB`#o#l1v]Ӯ ڵ+d]nvv6y}Csj8 &̄@,pZcec17C'f[V!b41,+48bY&! Hu[r)"=ẋ뙮DQ8^HBNg#3!ߗ$**-儶,rg# "jGmˁV8ZSBaFDlB,a1'<ϲ,!ؚTboMy~NHdi; X;'$HUUGָScj3s9aAW3iDBXjZ l۶s\Rii  "jH {GrAP=[@@ 8+Hq_e&i[8!^犵E<_짶y~yoy!5' MӊgrsղҜ0!*VYb9s{6fB`3huI*,eV&IJSDDlP%nuY8 "j=1.u9aPPfe*˲d@N\ " EQekmdu !ǣ/(ƙQ:}/2ˀM`e78գ(Ϝ*JGdDIrK5heDuEq<Nj 0 BFyk)s'AէʬL!S A•V&ߋ0Sfe DԚ˲Ų5"ZK"6,B$ID  B!9ᢕiqu [ZfK/a$AfIU㛚0ƊfsEl6yAhhe9`4ZL B`ShheEc޽tlgn~ncl B`3:DAM'u{) Qf iaW(8DNr"I (t]4 ,8 Dl E |<˃MǢKV& mq(ٶm۶1D"jGLgaQDhicu/TNZDiA`| B`pTDq}ˆ\60q`eQ!"H""IAA\-e B`h ,'ֆ1z7==c Dl Gl>"jFKL0"6.[8kjjr'bm[ sk DlB%V&UUbQfBdY!q"6"\2yn6ݐ "I"j$HE-մ\(XVa0A@-8uq\bA8.bN0ܬiZ^3MS$O!PCRle"6rghzBỳZS%+EQahނi2M021 SlyeZ O#A`YDԔXxokk$)> GFZ&!I '-+\ª|>1/Z"jGVP*[ L$  pzs\tS/A$A DX.a>ش,]-˒eXC .]2"|߃TDl:% EQX#Ib~nvzj"P`eGamkvfޝ9]-ϴZ:fggl.3#<enB ƖmYeecMOO^!nllbs٩˲gg'ss=1 4 2Ll&]2WOE9 #% $5hY2mD@X,V\a$A@L^fv>/5'V<ae4uK/a A@)ᒕiE}hN)I!P^`E FDԚku(>&˲r\%$DVXbDZW k B`S sBǡ",#WS@fTH,w"I2f=AD,de*8/^z #y3!1% EV[mG)xNUOO/ D"uu(KV̀ DlB[/ es=4K/a$A@("IDQUX2$HUUV&uTUdl<4V&!P+eV&ut]vVZ2ړV&u]׭ Dl]JH,2 tfK.)*=L B`S",29vQ vL B&+m٥V&ۂDl&+`e"0&xE7@ Br8 V&!pCUb>if=X@4ISXql}HV+S>!XnBtchii]W{who!ڳ9mzzl`zG_ϡ.]zhy`于*ZgEʬL00h~>mq5l?vWgf+<8*fB+S)f@ Ǟ].\4 5/\A-e+eZUUfe2Mq2nǴq >eƮ]===d#VYH$6he("yꈪmkKr/'U뢋Cqbj,I_)2t5aAbxi(Șv1.腍ZgM DI}h{kK3ЉJ5?9 V\Tcf@ehU͊㺎R4А "VE eX]2,Uf2+˱4 o:p22:W?IͅcArҢ(:՜eV&QKOJ@@ӴusX)RferaH "46wv)ډ{H^G&f+חYԎ[ n&!Bm-}]CC#y|xt7d"xJy/_ՆJIf}ȆLE3!44ERm;+q\(V& D/6S[@QTkkzaL\_ƯM'W~}bڤiZ|͏_PM,Ų5۶"ĭ_(BAsB:Z(HTz oprۿ ²+'^?v"Wdeȧ2eKx#@u4}k1 cbrbZXTuAp*p#R__赵3Qښ:`dtlk2!7=P4q[Q-w=+Qd+"n֯2f=̄e>ۧ&fJCġݱŗ~3xr2zAgX2Ll ==GlkM*Lw#|pLl=NM/_:zA !Gl'^q$a2m`lWY<|hzp͍ c=5iknIDAT$RYH^O B!q%ôgg֚CmT&C$8 D]|(yc+S{'8ZP<8-<+q]Kį[p:pFD LYuݢS.UOS@-3s 5d\ؒW_,3Y(7DD%lVL }A2lIesk?B `Dl$IHz'DQi0 BNf'?R \9kllDatxV,-m] A |^w$IYwL/M>Ҝj}Igri"FHNk1?7cFO8ohLRe+1$ E}y EI&MMͶU(}DVT%oDy3ʝssӦagBahEt!Ng B6A< 47 Be3iB`hm}\LyqW*MhmiWx2w;\1M3χM{R;vyW|\߇A!Ap+—I.l}enr{[d3!>Fq|я[YQ[dY*>Da7,B1?7#J ðfoOff& oh\"d}CaʦM-86t oeaavrr|nv&Ҕ)+` wF"dMC7D훰ID"bFcDU!A4x`DxBQ(F2b"nd"貂Y DT\ |}zLP@"OD pHYsutIME (-%M IDATxy\Mun6$iD"KY}߲ DH%ݗ'r%Ee眙yf<j,:̚zr0@HR,vfٹ& R ,T7H1'w.wn^rͬ1R!0Q; ~wll+?^pʤ1g/߹ )SƠBǸ:RsVh14}}<,vd ON_JeX2碑d2RjApwW'MMZBc!%R)8 s>IWݻuDc; (|P5ނYWr.v5rY./+@ѨPt?6%:RʰY'ï ڇ_PrRbн 651,eqw@4> we4oI4];,^| b* dLw73Wai)pF2Yci73Wuum;jz6]RRߥg8:>KN-;_Q1Nw2d5m-Qc6Ba2* vfIRQc\^eUih|CXwxkҩC|T*33mEIO{N$wvӉoցfq 5Q4Z]B2l!;usHlkfRM[6}8YCC[2Ac/(*+12G Urws"khh14]'yG(bq-^#~tdJRvGwwry; YgU"NjDT9t`/,\ЮHbPV&x!qpoHQm~iԺTFGavX9gQ/ ];3rV9zd Xc斝GL`kdryl|@*;:ehVvޭ;q;)ER_޺q&Q H xfddHsr 8y6=<_J|j^ݭ:gU];v RaaäW̌;@"nְgwk5K _neyjêo^ P#fh1ީ29{OUe׳M^v9Q9er䔗{*cG?HTM_bN[SW*Dd庁}[~l/sE+9/aǖ]۲9wԥ{$~o+ uyZp`ORޠAwur<ߦM|ZU??@__C㕽~\Ŀq^Glt9 ̙ѥs'.{!a2yY֥,.DPfK}Xw;?qdhy#-a__?)XHXYJN5?/ԡ;7.FGݻ+@$} )+k]HtuʟK,̻XB_Ɛ2232*\?;'5ѣ]&a[Ѭ FHrU9>H$"ΈL(Pi:D~}kwl  I{m[TTGS~*Csr=Mw@_&MWw-nѐQWqۮ5hYn8qܪXZtż{ѱR_ZXtߏmӦ5-s6&|@4.;oy#H$>t$dE^0B$N̬:=[iҢQ؄8D#yHV$uOQ ]Ѵ)c]]@6MCvD{kUi嚍1 BP(=pُp >|@.9g/O /&yzۼkOmZq+c17/wߨ1mmܥsB",P(r8+ryAaqrKob}~쀕%vm[u}@plƠ@Hq碑j0mL&wmX&xQRj\Jfff,B!^K&kTX񓱵׻\;p5j+xe PtS~W x>rX!9YlR`O?x$,RKvv6jhY"SzָI|0i`o3_&S)=.ZB3ir\ƂbXլX,Nv}kPT&kh&w 5IiGTVi - 7dmL?YL[}J֖%-"̜)3D{k@ rX6^W/3=̥!zWo㡃+RR -'vCR Ŝ9]fN_=mLbO`iY&=M<~T*]{IRVۥlXjlO X>Օ ӥSk7V[a EwcP(3\4xQ;SϳW654!K>;w.S.xs,|TFU@ \b=?;>B_O'+;*$)"}?摗5 xp8ܒE3Xla&ZbCF-6 pwud{Oqu=OL{L)ɫl*LR2t5iO7I}>Ycݝ6lޔJ,-eoy4/P9cǞXyoQ(- HcZ6v}bH$R8n6{F5שP"6;߽TRVFUYA6b#߬ukwJĒiS=x^r#%Zz撎v CJ]e%%g)M==ퟋSE_Ogns'E?H=8ejg\P(̝9" wQ_sLjPPP"IORss \9&ַOBP}1ҢSؙK"yCYbn]O^D,6l~.R(Œ*%srr UW.C{/Dbs*45iɣO=e-Ifsԕ'vعhte /ĊnPڷh7n~9,09e^~!p7,;*G\>R>NqE^Vw'$He2a3 3*.j!HW]bOr޷s [}qQSU$ ?wH[w̪ȶlg+6[r~E g ݵ/D9@k7:Q7V-8t:ͦUH@(Dӻ{u@ ~-q5_,aU9;^F:li8B‹ep훖pD (*.+T@aQ¢b&ZE%%U58O s {"\(f7w\htC?w1 .LULݠ1oLN\|'oz{ZR{fM>qMBuNǍ ;CSg9~ދoQ_U$p˟Pb XotL}&Znu@ $b;'$>ʭ2O.[KH2"ajp A:Z @ ~&v+(ZbX̬>6ݯFݭ s?Jz&HvnnM Tg8 bּlW;=]_c*.X߸psR)v*0ܯ׭aI)2nQAV}SO]lmKY2nSFfP ߋg>{|B"vv95U{@Ͳ@;*+yi+8r}VVU)}%es+UuUy;#(+;7s&fNKHnҢӳԴZwAas b_9hsasiSas8q"8SǶ3@D"H"F4of&>IE'p{ i14]PO~b(2Y>z k?ûe6U\.iK,mmc5g_ IJ*w{~Bq y&Z61l 4qJf mؓVy ETW9ձ܍Nd86.ByG(bqee6PO tڐPS. /D"۴ρS_5N9{A" ;|ZPepeRFa[X2Z]:;/P<_˓t?ed\| JC!n݉0ťQmٰ {c JJYQף1c׾f<ƭ;a%{oce1g"%ʐqrϟ356lym*ߵK?qY^3ne7|8gLr OT 8U3:ujklmx!cPT\z:Ҭd܂; ]an1c݇'>~+H xfddHsr *H%mLF89hTD2SjSRºy;vp,$"6IOYByǡm^M*%$>anRMc2XܼtNg7hYwG4I*<}e ͙ۛc~NqӦ-*.UNܫ_1 F@ߵfo=w7&=c[%IORF|4,ϻnkq9cFAخ? >ckH0/|;D$iwG:)!NN 4h ams:p4m-X,yxU4McBCcDboO.oپwMZZl+Ŭ҇v4stf2;ba=ƌ?]xg] ??/[oO>~JgO|"] .{e<jGwC_РJ(wR:ew?*qوKYT\d̬ٚl&S{Z4wيu ͝Ir&аyeA}ċ80N XfsFKP6_:)W &@4Zͻp=|߸Dl3P}dx/ HRI+#M:+#8x+H$^ڹS`2{v;t$D(X3h}B:RyQ8t{2 ߼3ex .ϫ^Sn@_&x<R!_Z/sgOӾGS= XZZ>W$H$B,<6)ґ_a)Z,ĴƈHB@`Æj14/( NUo5Z1&D"feo,*>Q|#4a˜]Rhf@g)GdF[1e\6|͝5}ʉ544/H$ xc͛'?MɤBH!lJ$eI6P(Ơ@g#Ynpqv?)Cw} ū ;|"*uʵ=H$N:Ԅ@ gdZgeE/yΨG zZƧ_"61 A ?zJ_P1~ZYZDg_+֬۬"H]FOxwld29wuѾ3++;gFcԔis>*ŕqAaQ%]'LQPX|@ƻB{x[9]:[d n\r~PN됮61L[jӦ54o̫sk IDATg8l; Р[Ze$":=#g}/AfΔK*憎[Yv5XM[S2YfLH|T [|:` (Q#MM+0"֭{CBz综g.ec[LcS\8blMM:cfkAGC"]2SFc\`/a :ij 9/~>٤UˍASf,^b|&/mmƬ;v4+,,u'NB4ͺ9@x$؉"//s/^Wn>}NVvށaYy۳? 4ζokwb :u4 ?oD"uj<| ] ^w5:ѾM3VJ$RU]Y1XVZ*BMn܌u1IZ M_d2Yl“ᗤR~quR)2:]U#cۨaEyԈyXthz4w޵Nݧb[k(}=YWߏI?IW9{\ ,;.8uǸU JW_>3+mLO/f^ndF \7{j7YmabҳXXv4eY9y|<ٞ;A&FF-״h'6D"eNv(gTByqIf- w+aD"bڔ5Rf͜ \c{3w/wx תU5U^/MnLKvI41k7:Q7V- ".DDbw1f~?r ʢә"F^4^Vg"P(uOHw? ˩vksW|D*u'YC8`޳M/@*d2Cf4*gԢPjm/ -:Q CT$eHfs/FUYxE J[8F|TU SPX}:fǸ:vhۏX,WR cWťAQq S[ǜH b:L-!(;;^Rʮ2[CX,!l*;νy&Ǧ{^~lnutq2rFPBc'wի}S CILdմ^ +_oCy@ƻ=kGW ЛN^d}&zz:yfsW~T d26 g92BXzT,67+;j(=Wia7.l?)"#?/`e- M~r.}?&kZ1T& VjڹMd wn]Wm_b }lQ5Suws"khh14]T>@3=4`[<2<c݇544R?JJE2鮒3cӃH$pL&CF'xv2mmYn}}K$"Q*bʦPLd!];J*CI5u\nYJj6e胸U:D@ g6ȡo|̬\eȽnjr߷JU֍K4鴇R_Ve۱V/c!O 24+;̰֝Κ1 lRqa\vlZF"KYc|Է|j]Mde]ǬjڳI><3^@=Ȑ9pօF?HMIIWjjRY q?{L.OR]+Hee+j"@ ~~vNjG9t9JM쇏l^}}ӾG2/J%95ֱVxDT7~5{O>AhzJXvѫmך]OѨot߃!įm@|cݜ8WÕ^A՞llY4DgRyF )o7@ as_O+hܤq"[{?bA,@ .ht@ ۘx W`^a!Nݎ#MhmbCyԇ+^@ n@S&{\x$L"bhM[o߼}mޝk1{9TgonᣔGBE"1zQ)6MMzyVs'x_rW߿z>/>PWG*2s -E2,6Ktj<| ] ^w5^uU0ѾMkwbVJ$R*}NVvށaYy6@ VF\p޴|{y8Lt\Ukuy:|Mo^>gJLf,j$<7g\Xox#bQr==iSƮ\=k:f4062LLzV]/߂-k:kX?oB^hәn6{F5F;*VCl\҄- r أ _/<NP,;sD鋕+h**VD*]kcPR\e=+°Tk#e)jĭ{XXS"L9c=6@|;5ln`޵Dx8t+Qwr=]嫷c[dعHHfs_6VѤqy@(|ö26\P$%T&lٜF?g51 Ԥë.Aą(H,K EsE"1ͽys@?kJ2аJ9VKNy5hhtM/3P(]ۧwS-Vę"F^SrXrk.~ /Hę*y7$9WrEo~#;ul=|>&yQQ vPXTJb/·o*#,))8]F䞑rWoxe))eWs8S[ [D[[ 뚭pr8nTFVnȴ .I<-BT,6Op˻GUU+KTY*3Օ[sq2Uxwu~C?:v,DP _innnvb,GP̚O<)9Dtuυ3L)i0emyoN^~!,iʫ)HD XYe>ųKv{c#1p łsV%u*^(D}]{^= z <fךF԰ /g2YCK6,pO}&kimiQŷjzݬHDT&&eH1A$p8\mM񬜌-KIM>ps 1Xw$RL,c/ .dOFҵs%>JJE2ApeϞƊt>_U+XRl(P;~/ؤqqMZ`o^sjk}ǑHDHuJQ)CcڡF]CX@ 6cY@lt9cxfh8 x?eyDKQ"oy#Q4ۼe~ff$w"hNΟվYvv}&&)(h['CE鿻nѪ*#9*Yx!:vS--Fݭ{t[lMlCe8BٹM:LMM6z߼>`"vo6kc ir8,'z0E5rӣAݿd⻐Jg#0q{ȩ3<]UihhD4pc'BD"NEMY}G}g,{¥`ںqgdxcDr<$lD/011VM&Oš>nVXgݮ_^=U޽P原8d2y# -[o c oQxn SܸuV$N&k&++Db E؛lm ctu؁yݰXS3332sP [_0S,( WKKeF>-+Pv`;T-4 nmb1(P$ \^XTv5ۯE;@D Zg+8t$$[m N"B!hT`s7))e)?|Rp@mwy޵?Mvr6rќ{+^tlew΋h/8pvr¢'#3g%?lXD}z[$$>K JEyR{<zn;649u~.pm355۷<./*3D͑M=az{4&zJ/_KhT@(0u//2I::ž}[cLrTL&\3=t5AR+(QFdaC05 J\_P  hB=tlIc; T y7xc'΋b n.CZkk1Dbq.jF-6 pwud{Oqu=OL{weokW6b⓴>];d؄'/I2A(t#J9g5ytZK--o,̻İS 3+JqX:gv*HO:9~Gw6mZ[Zt9}"XU*s2VGRkׁ!Z>vl*dH/,yXqcK$Ҡ!d 螺 u3jxs @*ղ5];s}G.VRSgOĝ)sxy9}|'6ڼpvN>Bnڨr>z:vws?)Aǹ,[JK[w/bhرʠ],Y3'y(E3ݜD\Ţ̻vX| 'ⷽ\qY[')vp.@( kڵmg!;1py511&\/==IrJԵ[Fd2@[(yUlEQ:7ټ+L,ŒI*ۉbDZn$"O|7uT Ԩpx Mz@WΚ1!E`glն|Eiڍr<)Q7cჱ䔗qy#opF E"b\;B6 Ѵ<(((\lfΫ2PtSּk@ƻzԤ_M.+rvꗛ_rzJxR(eq1ۃ攩/T8:TJ$jXF6S m qtuq8fB-?{Zp8 \9bE%ZR6!yץluaͻ ioޤ'z9tmg".DaToQt: L-.D?H1ulJ!wh]eiH^ IR]]W:}~*KIM>ps 1 yb٠} P(%,Λ}7wܻ.+(bE6<`;\mnq[G.W$?{sNb*H*j"J6 BQXX,5mJW;p/HR/ѐѣФDUfMO&k܉Nڥ=nގ]z! `kdryl|}@IM(a.G1۶&@ F7Ѹ0EMqh6⻨O޽Ng4knҸd.#znL_&?zu^zmڜ8nHLV]J1Əsb0x<ޙs*.?bA,@Tdɲ5CFKZ4R63П~`G g>JJFMhƻ ?"D>Y,Ὤ{|WJD"JMZi<^ٻwP" k mL[m߼}rJll碑j8XqaXL7vz4iexJ,{kQ|#4a˜]ǣEy3. Z̶-z̗8ΤUˑںr+OY&nR ai_+,,*̙2sI6V4F<-`֤kv|F$`;6ZWLo   $I3>ޕOiؼqTL*rjUckBH|rFslİAv{/{#KK5u_F7/ߴ-{nFf}3r`.#dԴG8.tJe;vme:as1z}mmX${|1l2>?ʭKo6ImV(Y 5s̰}CMZTk14}}<,vd ON_¬6c;ܺ̍J!OfO <~zyX\]|U*=BǸ:RsVTW4@ps:Z[!&8uAMNC휇k|kFݫ.+W3"{^lBIȺ|ZP IDATVߕH$N:Ԅ@ gdZ *y_zݸ޻0oDO=بEVv. d &Q"`lzu[FX?c e+@I)ss  N>aӶ`,^ M{/oD%7}BSufeR6@OOgڔ+lO}N6y~xWY3'y(E3ݜD\B+(T ) łS"lOꊖJ2аJ9VWb&>=]&ʫdɸ6w9g{FFv Qohk3hlUVW"h2־6f61l2/Og6$AD"H"\Vƿs/n̉FF@RtnzݬHDT&TUl)]:&\nYJjXd mmqg_cZZ)?JJEӰ.jWgL۲E3Rȝ:)Z__Ҽ#Hdb*+ DM<_ @Ѭ;fw?}bBP(O_s-;\&xe),*9~2"`Lλu'¼V>pX`EBqL㗯 q.[|W/4ϔ W( EaaɳԴ7Wv[ q?{L.O:~P fkZ٘\vlZF"KYc|SUWѐѣФDk*&܂=NWjJD4u( ~pDrvr y*QC ܼ}єg~ X5ֱVxDzuJQ)CcڡF]C*X:UlC2YjR@ Ճfױ*!ᮽ7MK1#]L<i@ 4ۼ=o@ ~;F 2u0lNr&,DjM=OIڟ~@~,@ VM@ Fm)vW~/&/Pۑkӣ:@ޔ.-A`s8ÝǪ6\H$l'##ᣤ(^YO@Qyuy7D&F!;6KBO'Cvx-.ġM:LmzDǑ {vz`vf?dEn7H4mm)=z[[}&t M_Ca̜)3 iXW;Xhhhi=a z6yq8ܦy?7h(fߏISE~#/XCâkLt%ƭ͘5}|ǎfNJPuA};2ry7B µ+s1IUePWG*2s v5i|{W5? m^o܌zTْt_v'cL X)H n='Nŕ[^(9Ӈ? htogv>-bc=\7^%̟gff{ߡ_ԕB!{yvʸ%@͏{2,/hD b859 |<$i>Xf7\٘6 N Cg*HϚ9[lSfn{O/f^nk^Vi){ΣSf.Y?T*C" څ>3crk˷]VW9mPnzMSVn(|U*Udl\q C,}^%)Ѩf_Q+jVC4"޾491tJ v6 Fغc$d?ZZ;NjSzf- 'z=KK$,E<:f*L@  Eǧ1R$-Zh^ڣM%$diO)-o%oRJmBѢH$NNe ss}=ˑQU+BLSgJ5bhӹD]=Htw &X$A"0+ ׾bL,Ǎ8L&U\K0 :}ĴSNҍWUʯmd-ps{s6za282(jPUR-ѸӢ؈Q#G #|݈<4X,;qi;ef6"0߸]@&:Sm]j?2VJ[0Vܪ7ik 7;zH+H7n ط?T9/MNy=f,I]дuc,7X<1ap1dzI*N$xP$Jld+J6Gubu56"Ie2Xܔ6-JWĞL?Kvw+%8MѨdҍ;w6j@Oq+װڶKh4*d2JW4YXT LC(h[ <|ty?1OU#8߻^V^x|Oq`A_lq@* hme9*#3'=|_PtE9$zVv]:-!gT7O NC㳲*=y4jjjj/jզ ;^)/~]p;][|Db^/ X)((--m3 /+ܼ󍧅;O ;mogwOd ^Koݱt Qv#=vk۴i8fA_p\,N3 'NsR?sK~֧ kMna!UkNv1'P;# J%Ӓ RO <lۣD,% M17m@k֦M5O!'BiJ|/X?xЫ{;]inddf%8p@_2fk%<ڵm@aX 3ߒD"KJ>xX._.ǖGgdd&|!JiiҊ@͑@ ~*1gߧ|Wof]XmZPzTSu+7@kG߸7‰CL&3ؗ lzN@ u[jjj|/ػP q J,3 y7?et1w Jm~詮F)_-Ǐe2YrA<¸zڂeթcUޞ3]K$ k7V ,_+E5jEXdbynW1Пj3P&{X 8}_^>[XWހ}@(f㖀LU'hhв6&3dPIsJYs:&n7e"+.WodC-`3Üx{[Tw6~6rn^@_|#Oy;L[záJ8n#!aee/^0μR*]]^=Ezod>{qG016Jy񦠠H,67`^~OR9w[NX8aC:q[ AeP(p He2ns*RZZHCΗI$kѱ`~:B(q1맢P#"X,QQN_M6-pMMZ7'N_\.|DHL+"G\_5!_jX=6hԾBr~}z(J9s.R$Œ@*d2fT L9BV[.m/ $Ri{ZÇZ{kVyg9Ĥs)kw;Ky9Ii4w?5lS)8o߿y(λyM4ab1`(<ĸ#x#6ݷwIV溺:x<Ñ$,\קGq1Tp;(S#0ikQN6ii!Ͻ|xX@,(k* lnWMV<&auzR~d ? ]Y((*݄qg[9ٻI1'`18nWE[5/پ'x&edx&Ljj˭}rUQگim.Ua09 B0$s:HII)\x=[+ߨ1ܟBD߸ݾ"J!P(!JQNE Ǝ# <ߵJ 23s 7|H _cڍb<}  eKsQ3DڥS+n􏟤xu4aؐn'`<\p ˯TĤIωD5+˖Μʫ(ؘS...usyrrT 093tlP;q{rx֍UUiɯjj_`m߽׭}?Qƌj۶͊U6rrÜ\VD"H|L&彶R|@HJB!}F|ЀT z?M;Lx==I u"@ "DᰦڎW$dwNcblt}S67f,IGt֙HTJe"X^j~BvNkX{JP~/|~ir6cI 娻Wx &@kL; e2Y|“GvNcG4Lq߭[E+=]Ԥ2X,/)Ň߽ oSվ}?;wz^ZRgEdAa!4o4/oZ~TЪn w\t=[҅!敖k[1TޮaO --D߈|; y]{=m6aê_ ;`3D̉gb.޼sWATptdDbaQqg)iS,[lA 22sv RQ%Յ&?{ozM ڽ'O_RQhe]:v8߻^V^x|T%a})ڶnػ7zx[XXZE cOA/ Qb Wmr In ԧX@6z9Z>C x}z]{}>yRtfTuq_Y-RM P7pt\| IDATv2B!t1޵gՉ+^9@*1hIRWW_5z>g@Ӯź-J3ӳf]jTWWi >t#7WwyM2Ps筡IN֦=')`hẕ722Ķp>iڌŕ&sصTqZVFfC9@ -G hʠkIGCY2ؿ v42ZFq=tv͸mU'@3mz}T ӕމ{h6ϧ`>wَ( c4ee+QDorK}CXYHeәle|^>(>X!6m 3QZzztb5oIJgs\|w>,FqA ൴X-t52l6su@`o[f0-cѺ;q;YLEn&8N%q9wS(dg[Tw6&sp8¿|7V]ğ@mlx|`',̹HH,Kh4jNFBPt9V>=@Sͤ3WDb1ˏ|Su5q2D*yPTPOef@(z&JKX6Hs&^nI-ZbnZZfOxR^^0T"d::ͨrYsZVUw^YXUKZ^BR˜/㗜nblTUӷ/Db.>"zϋ uEwI|l$wepwn^Vܮ^:O̷X|Dv"}bU0g;d18nv d@w~AՔbla7o',q~}{~^qrkĤ.n+dL '7?)`1'ss^M<6A}[#J]S}O8ӧML?=E)/)}3_VS#L{Xq8L*[~W}c0ʾ;5 „G-[TuD6ub~X@9xo-/aa>iZ*D*+:6IEim];3{΃?\ߤ'%ՒEˑfG).3ls32s綪yf4k;ʹ]}2,Ƶ wo]tzοSSG {j|lt&$giGo\;;&D!9T*ED1`׮Q,rjQ% 2:qP->DZQ1/Fo``A_ly@* hme9*#3'=3&\榩A qڌ}YIi'~NZaI$uX1} %m Y R)T?e<fϻF}/(:~{I=+;f.@aaq3 O8߻^V^x|ƅD*1u$X[Qc,F|l6k@޽z>^呶x/^-]N߻հ~u[iv`⛟m/8`jf1/E83g}˾سS f 2PlKJxbBiIwb,py<7ϥ'B-]g&6} :ڶ;ftdT$uui63ħ Tm=}^k,Y>y%?qu5ط N>?Peej?[B  'ɽzv۸~{4=>`. nj~Ke1aJ6(>0k7Կo^I3Ōo UDOw -SmH߃7s&PG   {9}!JU>پO:͛H_TZ; 6L;Wʙf2rWsZ:jiP7?}msZ/3CS\4PPXa ܭfvz^=@`P7p۱ͷXiiYFFQٳ%qVXTR?}8pJdR),7>XJA%vhILvl&&G&]|MzF&,^6bdx,d~6x<6mŲwAM?Əq,`C4!".GE\coޚwVSS  &62޿n-$hн!;V߳6Ο>nuʍV{{i4ash:?{ViyԬOIgmUEݻ,]8;}!ee*ܭkݍ$=)-4sjl+:5s f"Y^D nhw7WwyT'tur\e„O<)> GD"qV;޲4km-vZz^#٪sdx*ǡkN2n#JҪ3r,rKH1?|,//OypY[> 0l9B;o 1c8kiK}CXYHeәle|aB޿ KHIN֦=')Uk@4M˅GIiӚ9xy>rRAG*p{fX:g6]M:--@aQ[tgqز[vn]H-7S$.'Ik|َ?~B8S׮ߙ Fb#VPTݾ;8' ]Sv׾#).Wot}@(빆L!-[$RZ=}\W*/(ϟi7e\Uk@4'Bz]$uanaGw94j~=?[& oHvL"^m'NGE"XOR9w[NUFѽKhyHT=wuYI$RLۜJ}q_MߺUI/sr_r>⺉ԙs"X,hjҺtps@"\.o ';8/ƥfp[VĈS#qy<, KD)}{wde8Lz1L&`_ LFx<G9;٤e?ջ?M]=W)|Yl 27BWGm"nE;3PPPўu|~EXM" Ip-0"h ogx4lx2~`1w# 9o yrc._ R\d=%>H]:߸ ѵ8'&='լ,G/[:s2@k,t޷ؓQ۵>5.8kqXr|r?Ws'FIG޽ a" KI}]as:rjԈA55HT/yt X,FWUKR^H$H"r8]ʹ%=}`7DRg26޾sjnڜ:jRL$ѠԷ,IR69ʼz_6cItƄk|US#+ isE?JLqHQP51H$[}ܽg>bͦ-v l@QCǑۍkJ]ԧ!Nh?͆YRRrE_ n'x)Rԏs4yc|;oD#2PlKJxh sLRɴ䤻?Cc=}͛^bK1m>L&gFL ڍ;[zh6|<:6tO54h::߿OETЫ{;]B]M&mdM^]Zyߛw~H|qÆ b? Of 1B"fdjU+37uϽX{؉[6(N 5X"J޾}_RR,*@ j~['u !326oZZ% ׮^>cG%--;mSS?_^8P!=J|%NZf;Oo8 H+Vm2i'?{~1x׃TX:1?܅ˏ+Vn}4QbRޗ|E*Knn>C}Ri.G,ڜYNsZ_lsn  ,4шzy6OE !ӠAߒ@ dZ_DȮ-Y_9 ~M_+5@ƻxm ׭^rhl\ֻ "t r4pKMVިޫQ " =<״j۳Rwd8-+#3gB!M{ OR=+rMMtMX hj5/J}z=:j5g04=b;TRZ6F$rE*WjՌkDὯ|T$y\.ӭ;TXTZǢu6ݝb>\q_;kSJQw/tM O7Gg]ݳ s11b}_d2iҹ6'\Nwz\.g37n=Jb!%VA>ﶧӞ&k6얈%gMlo_~qu 6gMr|~<0Ơ֝2r)dRz*4jJҪP}@(빆L!-[⺉QUMMZ7'N_\.|DgEDbX"He2N3*\V&)|`M+H$}=8}L Jcn34fUڷwP(]կOJ 5xTfV.oRUh)vi'\\.?Jɰ5%n"k]c# OʿCW.={赫gO)iC xr}>pE>>,&yynޫ+/)&_F&L{Xq8L*d ?;/(d0ʾ;K g1ti"OsU%Uu{*X@,ׁŤpM^!@ZTP p宍&hbVPҪ\3CMɿ۪pU0mYΜ_xEVV=jX`6|NK%~H8bR=DD"m2=JLH$s=6#̭Gދ55hv3&OYn3Z-Z0bdXX\<ΞvlCtϜa;&뷷nߝ9GQ᾽{98͵6C.5>^<.ĩ 1Z/2gSׂj2Y8$G'7..Jp1iS-RA7]q[0Z#E ]r~sCä6W&2:"8T*E"|a߁ef8Z[ỶyϨ@~A=ؓHYy7cw oo\Oxp0fij磪0v==o(-DmڳJ8`gkVT̋[ՙ4|27M H$NxMjMPmVr<\b۵m]%UJ6rC 9#K$RT۷KJJ߿捉ư!*--Y{bnGcGHÇ-YZ<60п&BYzَףo9&+4pP( !'s=pw/d>E( g7m\[Ul#%%pTфcj8k*J >& k_ &Y6u>R?)#b"bX,afX|;6~x]{Ig&>YmT%%{CN>RT_&%T}A%+QDVܸUmcg;Kv;ZSM0rrl؍52۳RBJ" :zbtz߫ՄR5Z]*2[TI ۴& ?{ZBq1wŪ vS&!gϫ pp8ܑCIp5*z|Cdž XXX+ج/_[!7nJҘ'b水Ltɫr8\&ܼ/QjDJa 'GtC_ ~,8Mz)ߧ1707ly?V @F''W,kkieg Ç\~sAROwg^P4o ͛7+(,RG"BhƵikefec:UAar::+^j'޻ UDv4j?jJKJv噝0 m@ ?윐Г3._N^.Tx0fI$e2P(ݹ{OA61[NSzu-FP(:Bpv+))-))]sa5ӁL&1S 2IVx|3m-gi 5IN$:A\ry>vD&,֌v׮ݨ9nY5#=#cɓ&(Ooڸ\Vl_nǎl;o@!ɻާ<ܽ1͙d`O >a }?wr=c[7t}*,X]_xljO FF qMA!v>NL{'>N *}qR@:]#ǿh-Z6cO/\դKEo_u5tNn^ĥ]:ղY5jr_˖̋8.ɢcn=^mRd'*L&:y,`3 }ܒ]?i'¬C֜:cpI O"vF$ J%'hJoۦWo4gߺj_L 6tlο~eY zuoG"==sG)voaYw7mU/n?~ܼy3*/H=o'U./7Ys_@ 0\.zYCCcZo)bbn yW+jX_d{:pȘ}/e5@lܴߒ@ dc1huAδ;۰V8~DP-m۠ Q?4a_λ};Y3їdyy\0έmW+3^hk?ުM2K~QSH45iSmƭZ ̨;Z@4e pLB!8Ocڝ@?x|0(L$@4v~ X$h?0,==k{92vf_jjDBqܽ/_+((v{ۦp0(<=#[/GY0ϙL"ed܌31F"8T*E"|a߁J2=o/q;};?qc=w3~k}CU\XX}#~%p8L|“,wm!Պy7➿|w-As4A?eP vKо9Y.Xꋺ XP%(ZmRO8,kqeC=@ *@!>T*et:]C"r5d2?]yn=e.ҏ89hJ]@ƻ^=ߒ@ L= )ԟT9}%-D$(F@ oI@ 2F  j2ލnw"dG*h t6`E4b>SW'Db{r4OjӺL&_x|ԣĔa;7z9ZZE$"\./LNy}%6{%% d=~xvϫf&٥kR9z+8nQW'{RLƠ%I]A}LVZmo lu?WNK:FJeHdXP벜~+]GibWp+ LρЖz:,`_Lrr6i'?I9|H,FkhѠQoݾ/J cӘꎣkj8ۚt ?9~"faB޿ N^=ڌ22s ȬqCw\x) S9r H,Nxt4ǚᰙ)/9++]B\Bb-5]@`d+s IHJ~xMJϜbXmi:1m>/2xGք_R ؘ*_VS#Ip|0I@@+<| XLIWon1t/$  -1b QV&C_RBs,,wtL{Xq8L+-*"BvOa{Mj\.#a|#\_./^ us/Gg^m<pXas<RQ9E\\̺ۢAk,t޷ؓQ۵m"M hM7*_(1n"F&nܹ_?f uRjq)k8?H0āUQq-(GYlZW*.Z'j%q"*'ܽw{wl}}qcGk^"Fk'ui;o|.TC8铚5g0tH,ffc~!ԡJ{>fۦ b[)O?C"i1r6%ɞIZ'ZGՠ!\k8=o_ BH.;Ԕ٣Wu!y/~*i:M_K5kfZA,7o\gddgυ >6j,jQ`d2?7S-mZLןmBݍmj`Ak7qGUА=cs>͚5!I̺}޹:ugccGظжMp死I&M`lXv-\;KFTa޽쿛7ʪ^oeVZ.۵K'D|ۻvT(mvi?(}=ŭ͙[Bv9:ʍRp8nnmB__@Swdbm[۶ ںŦ_׶mc/^JLJo bXTo|Ϯ-}{kmMZ`0m+6f7`K= M8nck@g{qcKj~?cW_FM vm'{-`0N>7p `0NqF >l6k`ghڴIp-LWo<:=}n ϓu9w~ea0a" weVjȠNN6W}~0jvHXKMl⿟!cNRIعvsml~3RRyVvr*sk`llD%1rJJJ ԥޣáߦMKrm%/+/7LB5(&<&vEEfU4,;JАm`Lj|:hۦu+tn\Qԃr SY,ͮwGjߑkQNug鴊ԕZ:yt[:6n}&kNO7z9V͚YXCTXшr&͛UvԿ{msu(NMձzP҅B> ITEӼ'pfNшOX,>Pӕzi yWsڊI9li!"`ۚ!/Ɔ.߮1kJ>J] @^~QY71gNu_WXҪUK̡ǩFW.Nx͉SgM*N0΍3yL&ة^T*w{oS%Qyu焫!GVu<}CTHyy1uB0DpTnߍН:HЈi-Ֆ5mr*`L&Ade@Q1Y3PJHL{80YRR,.ݏyN@aQt'N)ɤR7iEb%?=}\&yu/^~̬8scZzղ׾y&ɟ>{hO$O|5؞ xvس?(==ko+{wi >hܘo K7/^X=K2^[ tvMă8lnU*ɏ>z/Ç:;:t_vOv6[4ojLbL<ξG'0pYTZq IDATAeR7 N7fH&cTt2U О pș̜K/izزq陛q=@ w׍  sPNm h4^|ij*zdls{vԽԕ8$//k5{2|M[[=%jeU5JJ$eKx;x䴹iVۚ8АH+P eXx@T}ݽC9cy~^3|&lyD5adԃɓF7m(;'Mph 'Irw'K}yK,ߠP(LФ@\ 'Юظ_55u AɾGq xy-22d;xP$%.ў Yl6TmӶ5sx IOrr/(9wNr% IO ޽ECCCϮABD"X,zw|.T"J2u٬NXIoT$U30h(GU{>/^rg9S%bɅ3楥 {޵󦎜M+ASNDMub̸Alݴ>ZNmmQC|e=~ՖWAΎO]os󘑃5iDnz)+,"s\О_w. ^|\A>ty &135!ܟCsT@ 6Gk5 ]9W-U{Ɩ@S|$.\㕿ABʃCooX;mvXKKxpsϟW8T OfMS^"ޟ2$I./|~Gdߦe OZj4 !TJyGϦNO"jҸ ()Ɩ|AIl\7#C6tlwځГTu?>F~3=?*))}N\nf?vhũ EdCQtl^h${tЮP3P( >:bD̵\j4 !T+r[K[v6m5%'N_wBݼa;x"=C5cw?¢a|ռ)NA $EƏ>+:~YYyb:vh[q°K?/,!V{>fۦ b[)OknI vu?c#CD,Uaa[.G32>^&!00 ]Fx)TW<xs_͑S]/)d\ϨlaRBxmD,Bգ!\kW#B U!vxMڹ#i H Uy3YZj\ k;BDT+{H&_կoU?-%g f 5zT*MJzfF\iH޵'3zIM4~6""cpGS1z^>I>l!Tߕ&&- +;ͳz*[:ytNm Gl߹w>S=LL8`0i[ LMo:o㡽VgլqoVn,[;sIJCضfȠ 2b^|5k-[~uޛΝөX[儷s"3g4\H1gB40П9vߔǭ nߍ3؉ ҵ;2A=ԣZMKϚ6{BH2Vq*}Ճ]sX~~bL<ξG'0pYT t:}ܘ!ڛp%RitlBsʷla鶝G&07sDnnϫ=39TÆ8uԟv6KΘpL&r) q=b[(]vJ] bbbqτ\cRO텩QF[5kL#|Sgn33׸?}fYjnۜY"dULfZ+ʰν16{7@Qrr9FfLضjȨ'nڤQvN>8@m& ayUZ8T햭L!S6wdT6g&`n㆝ .zq߇Pp6 uλK'!ۡgנS!"X,\ӻWw`Y>M%WX,g. "\~vG c89P_&zvs/F IK6)ަeihavHROr񝰘mwfgkHHz|A;w-;_Pߞݫ[X*@6Fm HRSFE3$)'8rjD/B{5V\ay?)dk4_r9Al_J 5LM2wY RWz}7z\S{;t6\kEĿ_h5/(}ǡLpI>q:Y+umpݻ"jxB ܼ'O_rv<~@޷Fn~y͚4hA0& |.םy/T_qiScxϟ47* jD/Bw $ɗ=~*p_@"I͚6~QNUW^=R݈ݺtp^l<>X62Σ40@bĤ =Q#}?ojum&177h榺Ƿâ\$XZGc<{|X&mJH|2kvIaPq8``` ĸk97`N_X@PzA!\N@(NDhe1 lm@]yu%B*W:NXa-GFUr3_c#hli1n̐0ɖ'W(R)W6QJ$t3'oG%%`4X"̸8B~2ꛎ܋YJIn^Ai}i4u̐JH˹ҤgT$3$<*wpa?RS_vwl#WT̿q+"s8t4e %itluS]J߸~b8|48#aqF?*)V:Ǽ<\6oXf_Z*yW(\[Y5hYy;ʫk۞As}' 6oӺƱL.?bç!8w~VvV0,167f_vΚ}H >3?KK7Gb11}x$9m4-m a-Y>9< H!];#hY"5mr `7#JEbTÌ9+*ΐ\ ҳjb}3w"UQֽ-;O׫cM[zykdaGSB'X*FD8| ?f` s3Bl"hepnlp̚ܥK{\wϳrjގ]G&Mf1׮߱ns +8I =j>p`6/ݵt'&>He Nρ1Bx=Vngkt9 Pu02~*@m_5}i*nŠOsnydH sӌ̜=Nddhn:wlphz xbL<ξG'0pYTJE1C7K؄!?Z#g"@;aF!Z~թnCګ><zv[Fiߧgd͚luvyLYJUGv{L]0wj69gO2|Mǔc`TC6o3r9SwkV{<~V(Œ hOut;qD"BVֻwx,X")Ϟ:zLX"Je+20_|~VVA56ޭ%i1u ;a1mXSog>;'PZ*O,CϮwŔ?O\9lhrN,drQ66-l[rhg7j*ۡgנS!"X,\ӻWw`Y> "znD"1RsP]SmN@}:\KI=o^TAeS>ϧ>H2C͸AgTMw;Y&4FLA2ff\ nZ ӣkb  \. QrMTs+,,|-['Is 4'7͹`aaFYklcwYLry~< 3]a^S,-#Uß>G(waÝ{' :u_=KGZy|~IfM_VYul$I./|~IE<$5m6wJoYY5~]W xGϦN@ƍ\G|q.ݨXY5zڷ}NDLnnn:ÙiAI)4l#U3Ȑ &]:/HNy|B.\눻U#լYwJmĤ'MLǍkq|?>F~3=?*))-;NXa-GFUryNn7"&ײ ):ղ*inJ?Hrw{sNP( >:bDΤSvRp/PCyX[- }-;Ns}ax/jdFiD,E~A?addܼѹ{Wz +`"5>}8zأg# pN4v=P c_~_RSx7ݧw)nkQ%p9r=k%%|Lectv=Z#K7w|jm5k\a!ۺ,6i^Ph-9$VMi4"-=ل#ԯP(ܠf:TR?6\AuehZp X*GƝ>{txX{Iٶum37[Rut6em]'kV7m 9+!BuY 6g#Qq_B9qBa!ҋBB!L5Ÿ B_n]&ov B_6&oBaF!0y#B7B!0y#BB!!BB!L!B!L!&oBaF!&oB7B!0y#Bz>gLV-EzDe pYK3/,33Kq=fz@Q{j\ܷ:*6jCT03j!WDwRqWex!B!L!BaF!&oB5W&oB\:3]FՄj᚟Q0bF樫!-X0.Q ku#ai:0\M!P}F!L!&oBaF!&oBkq`F!aF!&oB~UtPn]Z|eKSlZ[ZZ4E+H}CaFH'29 o:O묘s)"77B \= 0=|G"#W Mº&o!@6̥"qP pO"#NEFHbH{uWNn'?{HԽ~6 ¢n9ERm'oJT>}ęKYy`j/V(ܿ]{|aFݺ_8 v6G&G$o-YNnK'E8r&~]o[5[ߕm]F ޸yo_rC"z?rQԟOR_>I}I}Z3}r庭-5 9޶fB==N0{#]DqkSJ$x)}Ӳ u۶2F#j5݋ j]<P6!666.1)=)xIENDB`hydrogen-0.9.6-beta3/data/doc/img/MixerMute.png000066400000000000000000000005601211146647700212320ustar00rootroot00000000000000PNG  IHDR&/bKGD pHYsnd IDATxڥN0VGa`H־A11El 1L) D} FJ> $` 7(i;w$IN[IVU[E@~<=.Hl b6[N!xX:n^'zUdǺދ pQm7Wˋ9G2헀u|Y&_qZKE/?G^ZEp f?ڽX AİqmOd9'tᤧkϗiIENDB`hydrogen-0.9.6-beta3/data/doc/img/MixerPan.png000066400000000000000000000005061211146647700210360ustar00rootroot00000000000000PNG  IHDR&CnbKGD pHYsnd IDATx͕1j1D ),9AnRܦ 1n Sbe/v>Vd GYxg lJx -W$wo^?l;]$ sb𶧽oFf-k3T Xp~IդĪݱ6nq}?:URl"]T4B_j`7o莸AоϞ%CQA܋98ēӳq`?LQ$-s.{^@c .#4eCY^9G(@%p/X|sہ gd<%!7@֚ Zk}:!P`L^X>/ihUĬS5 46_Oy7"(L^)IENDB`hydrogen-0.9.6-beta3/data/doc/img/MixerSolo.png000066400000000000000000000006341211146647700212360ustar00rootroot00000000000000PNG  IHDR&/bKGD pHYsnd %xpEށbdp'bV {"p XƓ}`<Ѽ,$Zy%EhatgvoDFqiVC̍Sf MZ?|zd upQv~8x1;!0a(ogdvb'Ib+ fmQɂvɺ.1wa4vb1l'Iba\d]*$=IPm$aGwGwp#C=O!&sd`4c:>Y[T9P.=ԨԦ\.*}?gf(+G45?~_,(%xy^(ojd)'oߡTW%_yB zXi1)godg MmxIENDB`hydrogen-0.9.6-beta3/data/doc/img/MovePatternUp.png000066400000000000000000000012721211146647700220650ustar00rootroot00000000000000PNG  IHDR bKGD pHYs  ~tIME nGIDATxjA?-@ \ luI iِ*]^#ϐGyT!Ӥ 5DpW Mw:Il,;3ӷGL^2 14+>r#~L~o' CZc,*K/~xw'8PW"&Y쎽n <0F>8N[zBzP.*pQz>4M%֪ tCz` 蹽`omMp,jpE Lfβxq~Zu! Ҧv/W]p=WQ@Z\WB ̍FYWMV*QǪ桝]oQ䍷)x!wÿ)a(: {Fb+vrCzmS⠇?ސ $}C b98}[NK#޽ǨW#0PLeZf݄cǠ5ےO_IENDB`hydrogen-0.9.6-beta3/data/doc/img/NoteKey.png000066400000000000000000000073751211146647700207040ustar00rootroot00000000000000PNG  IHDRrmsBITOtEXtSoftwaregnome-screenshot>IDATxAhI[)P &K09 P7NjG"=lSNY\zB+Ѩ=ڵ(.]ڸbclZRr(K)$aYi4??Hi߾̛WGW/'}@G}K3nF]_tڵǻ67ղkjYE{ɳh/yVsun{¸,9Zspy%Ϣfb5w=ݞ65 U?ÜrKSAc16>{?3qYYj&^~~%:7gu&w;}Q3,{ԲCE{ɳø2`}gԲ˳h/y5{Pƽ9=-l0v@2.>}~әvw_867/]\]~M'Kh/y%Ϣf5]%CYWy%:{PƸ,9Z9xֈdYEj&CT@1<8WY=TCCCwUomm͍=˗/;/WeIr_Lf^#&5#} E|&&&=zUTt4ϋg^Jr'U˾o~+#4Ww [^ooQgS?qwj&uރnM};鸣(o7XTknnӮ>511UTԲ4ϋg^,Iұk}b9=mo>Of<׵ҧsgc?88_%PzIK >=q>_<9r͛7>}o{7Gw?m\}޽9Oz{Lg~Nn{(nܽd ,g^,Ҿ[^)gg;e<޲7=.ݸҍ[eWՕ)dE@썻7$}͖-)}wzRh25_~M~u&QŚ,Kl| /W9;aW:u/COրda!q{]_s0v{p\*(9Zspy%9P3q7CYs:,,KEIgkPsXY<+fkPF,zey%~n59j&1{= xN\E{ɳý91{7dzz鑕SSSffffgg{}‚NVZ]\\ g h/yVEqgG}Џd51hԻ=\$3677itP˪T*jYE{Uc?WEḮq7iB'`pw=ݞIDATxOhYL*iXib4CC-Z)RZXћ/"碂y +*Ze{b+UԭVclc6$5z^tN-|?0o7I?uSQvۺmKT{^;[ٴOVOFGg,ׅzzez g|$Ik dX,'u^g^g^{T{Ɓ Z*3h̔1'QmmMuud2500'yU'ːxDI""\.]B[K9yg Z ޳>`b3g(PC6-vum;Ȑx/EpS$DD<-ZDd12 -5=rt:(o*ǎX,-P%9DO,aT<׻wt/J?79IW./>4Y(?SST*5_o"d2x4XlӃssDmhhL^e^%ṿ/)S9tmhh>q- x/Y& ee;7%R^JxEE,,x/O -\H2ˎۿTQW77'^QQxV6eZu]%hd$)Z|yAs"Q"Ao^Bh|>\O 2mQC"(|?uZ_q#RHyym/~ⵜr,o_-M>؈Bs{JJ7 ?_x_Gg{#~ X|1,[;Zeq ?q?sӪk[U*nA:|o7lm̼'.Ge;< ??RfoOGc]Վ; Ύ۶KD#Ã;i3ts㥎-[wFFN{u,KJ7M "619W^}iiǫ&C w[HW'Ν92~e,>!ibɜ~`П?s`toR`_eũmM]nݡ騻T喝Qƚ;wѱß zǎV%"<㡄YNPC}X?xsӖEmffc_=tȠjEɫD㟾gf#pAgzk«"ЁwL"(]\s嘳sxܙ|(} >=wH-e#_<4اRŮt+?zfRc]O~/D4~UBhi{{Ư)ۭ*wVVVlo~;?uo[Yz8SDLΚ k6ʯ(RgOryȹGq@ vUVrbPG&_=`3PWUq*>1%)9;qUOD3ݷىs%j VqɰlSzZ,hItjk.t7wN&Xl\B(KLDD&d2yX-.3y؂p|5;sr0'&hp;I"+\UV[s8gpS"i7^{.TP[]s+ Wdt었 +]:;1>W8a+}w8n- OgbEhzF_{W?{{F<9jg a#>iY㗿Q΋~o'҈R䔌7m{9~e4:f#_}es&&DGDϞ!"TfQssp7{k422(ʈ(!1G;߫Sd6 ,u6clڄT wů@L_× J*? }n5lՊ[~K>x7\.V_~Ï}{CO{~K⨭7ݴL""#k.GLR|r J@ |ѹ3GO?pZGD֜WbZaݥnÑ97o@(zu_;s$aqWuhέ.H$6ͦޤ4"޲h6 B1sSDjnt D3] b톭O֜PAۿ'yzvU1jU1— ?V|DZ,+Hf37{{:y+cq3hbYb^7rZ{sCO{LEE)(%5KMsg1xxtyZF:YT$%"XL"}b|,)9]ӹ26lL&<ϱlDZ76:-hkn3znelԝ[]uZyEgO>~˿_̓ `Ӌf:եsi9oѰۉHEDڮHy>`]ǗD":ڬ6"Nfï@뾇⓽gNTsaDq޷z1$"7ݶka{9_Gl6]>U99Wy7r(٢߽Ěs)<,tw xD*Z-D$ ngs+q5tS}"myǻoV(qD"%"@y[quԴ;zo1gJez5~o@ D=="z(rr s5bv"ݷ1aef<'6.D꯿w/Srx;vv~b;g:;baσY&G&7߾q|Z[8}tjZ#s[xPb|"{![2kyryڀ_+ʤ DBPW\Njw?]tTTzXw k#3*R~^l{ /~5DNc,M7|9O R>e׼f܈+<;_‡b.5c};vR,K`ŅdĞPw(DS_"!ƥfGDs?Ft8%~|Ž W_!tf>q|~5]#Ee1 0pU P~5Ywx,fB] XN}e6߲kkf?xw_us'+ ھB3 @ b!PxAmIrɓ';::3ߌ{hGF%93>qe%w~Xqb[8 kZ[J֬uA;H$*_K Kw8dX{3BW'fo'&n爈a~f&GwgI~fdd]wlбX\ooZ@.,nZ} en? !ҮS00 zӧO;?_ߪZ}W+a144ұP uYWB0--;Ott/V;>   Ä/:^,=P$movMy57g2}`΁Ⱕ!#3="Bn0ヰybyo=ؕ?" pn?9!X YZ[ډ 9[oI DɊ+jt:P(\bP`kb8!!!''';e69~!{0="žZH d B1A(2B@ yw 7Gy2E WLHDy"81÷UXqSO>8s#DDSnfϜ)wym{&_7i[̖ƽ1XN^z8yu|lQ(E4QaaPc0P$>q$|un9}hLHD`NRlhPR>ki|'v-EXLnM~?}!3IDkjqZ&NێIyA* 7_ne >b?DoU1v$KOklXM=ݝ# ;On-d$+NgI`zby7#1Vb:yF lذ.^0_.,ةo$oؼ%&ܵ}0_:ݫ&W B.Nj!rZ zRADX#'7!  ڏfw`8̑vͯXVF=;o-~vW;3(y9iu3my9i7۟|xGz*U%\9/.>88wvvv7`~]X08<lX2rʁCgӜW 5׭<|JVdHڼaj;~pRGj~[nڸh^jHgg'9.ORz5JU<#$-=5e}ܰek{lqn. M.7[W/T6:[Jn.9{?5YJ4Y):vq$ɈhF3{cs@ض6e 2 nL̢w'wmߴecX,⼴jg=6\9s) 9^yͥI$.JDG+G<84) R1͚ k5pvu")y~]3}peM?#tƌЩiW4w2cʧܥ)Sf_.i_/W_)r>ԣ ^}^*.T- ξ|yhmW0?/|/֚:>yuQh b&oݾǾ_b+"JyۓDT__c4PL&C_{VX(!47>qdhPk/x8vXVR,g=g}"4ޠ8w8)%bh+."a#{^y⫠=dWxA ^xg 0T* 0O|`Q!ߚCUDTYڈ2/38_MDUӓ7fϧPL.n,%)^(͖ID?Z2<5uRDhbھ}%n(/H } ""dDtM7XeŹDTuuwKXc:yIJ~L8">k N?pw}_3DE##dsFcGOTzM8$&+\;Hꬔ^tm F`&"ᄉ`dbDX6(//<}n犋/T5;;Qu-WiRu?8?H.:3!Ng&*L>buUreY}B-buSYl6{~^Cj4\2 ;Y5 $QcsFw_ k:MJBTLa4>bLWA ^V^~'8;"0T*t" Y'h> nM.CuMM(2SDTz1;=8/;Hi>brtMe)IBlLtdK΃n!>=,}M=ݝ# ;On-d$+NgI`sm1ڎћ Y!N<# 6lX,C~>b߼.-5ዯOiT1e%.)Nj!rZ zRADX#'7! nXmmǎ}Ceff4 _OXrR\#<|QDtdyQQW:W;84/-d//8h2j+,=DtH!Kyk"fRS?%9 29LfnNDt__$;?xƗJ_HewdH[[}qDd߷G}033#EX6| L&\.}=e IDATC=~F+>Xrrl,~oP(o&37_Ͳs8e ׬VwtTj.K/.8ko SJ5Y Om]ZWNšJ+WULdyqsˉRG E”'O;z8Zᄈo۶[N _΍MH%.MnsF;DDk6RcתmZb"olͭDiȝ65n!+TQKs,sy>,S]^ΘQ0f:uL`@7.@#cY<[ ~/|*ڷyzZ"DˑA72 c۝׊ShT1 t9dq|Dr)ݳsc\}́*E&] Xt]i.˲U×'WDg,[S52z՗#vz'Y%j0385>˦pD}Fa}{߷ZljD$-=5X_̣3k:}CSG![eC. GY7FFvd25&֕I%3G.O0,sVP+K]cmPEd Xwpx|Yޠd=kK丩ꬔ^t")Vȣ>"@`eu#&E "m߰׵YfU $dUNUM Q輜oN{iPCD[7xȀK,ҧZ0UZJItL#LFDk4̄8AϷ؟)33c۶X@eY,֍kWReFssk ^:vjCyѮmzcmCM=6-7;lcM>ٿPR\eChnis^$DTI+Ԥs'(,KDeet2:ZqSqMIT( lnL7 u-|Bpe8+o||7?q,cM|{Бvhkw7(moY;{f*xrz:-?'z48P]$8:塝g_Ηp?Nq,J&6+Ơ|LfKvRCgB"ZB >>d2C]e%b2e+"QKsGv;ÁXVӘ0=g}"f>Wf:co̱B:}\q}O7=aƔOKkS3%}uR__(ot^r^_RZZZYY}4\Y//|8_3ټ3[k- ]qpRJW âP$>qd ?uY|,r&+ܠ^ /AK/V qI* NA B(2KND|W΍Dg_0TYڈ2/38_MDUӓT>S(=LD/g^y(֜67;%%)6*RƲdԟ>?R'GDzŃ=IJSlc[#of$*BVhҺ*H$ܺX%_+bꬤPkZDD:^T0MB1 X(VTqmqFG;tbj#o=q<{iuavT|ņ+ZtT2yMayچΎщщ9AH(Ҥs͖f';ѥxLb6[zGuJ_Hewd`X(&5}vf͛JX9qƱ4>V闧Vnt㺢?;ADܴ"f}Y''QvؗXZ(aK Ryb+1L&UN8]`*ӓXyXZ]BD ô޼$5%yiUmj&H9?3_ND5-&ԚnR&/Em;-.ʌ&5-Vac驱/3 /%qU {ۻW+-XR{#'H3~#"DĜ&\&JDC6"ZMUFɅ©C<[q*3-D$7023OZ:12R!"K=dJNMki{YZ*ryta;dJE0ѧ+maDgY$ uVW/äXe0J3&/--+VSkO527uŭ.OZvSEGV4* jcl^NM$5$Qv"MVJΠgre2"ZQg& zX)0ؑׯ:ǵ[YѨvs5C[1zxU^NjvfRqQ62funvʚM4Fc`vs2dmn^1̰VpTG\iR*Jb*5)k~}#}t/5t;o#MD0=ԅfolila+LO? Ԋ#GO^r,1s^o}G kK_ڹk[pz|8_ / dP6# C>3qd ?uY|,r&+ܠ^ /AK/V qI* zf ,4XTB&[cB]kjpmDZ&NێIyA*L)˥[o*KI feR#]2ww#mXG.O6tMPg jyىrSox'#)^Tvjw>McovތXETT pC)ui _|}J7.+,vӓ@TI7DKKB䈵H%%"JfGNnC7OXrR\#<|QDtdyQQW:W;84/-d//8h2j+,=DtH!Kyk"fR⥟_I_R8f2 2RRdnp$)I+2R"#fseq+ >ץaD%W Ri7Y | L&\.}=C=~F+>Xrrl,~oP(o&37_Ͳs8e ׬VwtTj.K/.8sbfXsS:)u uQFj\&uDEuQNV RlvRCѫ%K)@"عѱ DN'ޥpPQhZ{zH_S6>qfuQjrZյVTLBD6Y^aY&;3/;ffQ{׀fo$8~Qfz54kMfbmlsZjҊ"Md9_6:6aYƌ1`6&pc i*2BH"//lnrd vT%UB4݅D"v`2YC R"g&RӘsLݎRf c2[H*dR1fmQnv"v \ S\M5әg]eSQ8GdgmaY\:.?ߺL.:vo`eO=r:12B&y1!]}IXTwo4YdRX,2Ʃ+ F\&IsFcU]kVgiR9w'5Yi.9.ORzѵ3Xe0J3u#&E "m߰׵Xl չ37䖬ʩi8]-֚U&}pd!޾Ħ־D"wvjR R{v5W5iƼVp*-d$ :~q~&Ǒ\ufBΠ[OUK | ,Ƶr)˲F̅Zk;Uh׶ zsݖz[l6屉&omfufl!V-0)I+3&Ks[_[g?gWnOOۺlm_^S^" zG`ɊVFG+8n*#4) R1͚@0}peͼ)q:cƂW\b_紏+ξ!&Lq̘)wym{K==y՗}zO>W kK_ڹk[pz|8_K/][ni3)9ᤔ !P dX"Z.,E&1EXX"1 . ,-&/X,"!47>qdhPkc<e ^<0Uk"liin>\. ^}^JKK++?iii==^` 8_ΗL6OC'(DTXX,|E6Ze/]]XՖIV.av祺>˦pȢC1!I%z:C@ vh$hH$""2Dd/^N2JE#'l6 `&+\;Hꬔ^t")VL ŚzJV\j\]CDM-u]9)ݹD=/YSID}2h"&,iRu?8?H.:3!Ng-*L *YQg.Uյ)cv߇꛺MON1Mmҡ+Ti績D]U f œSJR fM h{ 1DdUԝ'}K|C3765۹K D˾&>cb7ɥ>ԣWŅ%ׁ/ܵ-8 fp?/|A 2B%"bRd2C]e%q0e2e+"QKsGv;XVR,g=g}"|u:co̱B:}\LkfL6~=,\W-5-͍ \VVVg_iii==.` 8_ΗL6vmݾ{!+NJ XaaP`y'y.C΄z+^%hzw#ۊ!9IA! Йx @^oʫBD|z2 _uMM(2SDTz1;=8/;HibB(7;3%Z%zʕϿ:HDyy=w%Ͼ f8mȒ*B>bz12B.Iz/ј\.%"LD1.}&ƮLV]j#ݵɱU05^}<<=wsšJav޶<#dhlw^#lȢOX{g_qZVS9`ˤR`IDZ{cW޴a{#"!&e4H~\&n!B݀4Yiz799.ORzѵ3Xe0J3]Xbk9*Y>pKvm*5MED6ܶ}$fSWbZzYi8;UMD}kVeWT2 f\i&+%QgÎ392Ѩ3t=orzr_ S(f2[>pɪܢ,k4G&f第ifFRT7+k/շZ{J4+kM=6=/'u=7lˣS[K[/0{wn M-^ۊ/:ZษHӤT*JT6k AkVbu{ ǏvʆFrH:uh:ODMm|řK>=xϿ8{ŃGkm[{|Bu ;塝g_Ηp?1(B@ȰDdXC] XL&=?X"1 . ,-&/XV=+,ZO8241\DzP`9c69+,,E|SG }X> IDATe:9㊮mw5w3|]z^r?if.i[̖F r^祴28JKK>$k@^8_Ηpg-W~m[2)9ᤔ ⯊ Ej7H)8}Ȟ~jY>LWA ^V^~'8;"0T*t" Y'h>Lݚ|-D'\W6'LKLe]SSk#ʼ|5U5vvNO*R`P{x?EymDd?9phzjO.ܵc=˲D媩繻sd'"MxRکl6 l-Fۑ7z3cQQ!+4 {(BD Y=?S^yQ9F UB䈵H%%"JfGNnC7oP2 fun~^f\7;kDtlMq:B.XJJ.6\p实̤."2;3\nPd&eg&Jb޿,?*"6HfkV++{O;֖8gXG_ڶuT"oT(6_a ],S(O0.svf⪂kW8[,?JM))_K*%Tل*<&  2R}fTFD.4YVm0Rj"Ja˓ ݽCꬔHYNfr{භ$"m6fmv3 ƌQRۘ ch 4xR.h"">TGȜ3fa_87u߶e 0/\&q7IV.av祺>˦pȢC1!I%zQ&^gTN#qmC}!dpP&Tš&+\;H{JE,b(̴P8oua΅E9Dț98N{UuDTI`Wi&+%QgÎ392Ѩ3t=bzr_ PeuvXQX]ؒeĝƖUEG+G794) R1͚@#{/Ssu*qj>o~|O>Z׻r]_>ƱKbs޾:t'z48P]$8:塝g_Ηp?1(B@ M^:9b f \LP ,kQ}}(`y0G}`~-B"jin<}Рn8p RB] ټc+/nT&.c XVDv)r^`<(--t"IKKqDw^8_ΗpgIVk-|(E4͙NJή8w8)%P%ZmY,'ɾ A}ak9beoEΙvX" `6H84:Dx6bSY 9 Bb4~łTd#UW H6Ӈ+ory:w'f-ݲN `s8|A-Ty3Js5òw|ӋO љiӚ8ՉMO;fu߿7m^?sPx]wpK^PzZ/ͻ_1qP(LJJO (0Q~5>ز(f,6#"8!Aez+^e+;DƑS,L/2uIbq%"B*E8Ɯ}9[+6dFH_ԙf<`aח|;HKK/Y,$O5"$Pz+,zʼfbI]]b14@S p(P$%і؉"DZ5$vNzN3NLdfw3Ng8ˎx%ˢd[)&BN"Q }EB  (蔪k{ߧ2[ȤF˙WiF*M]\)oa!vU *j+ٝwWsxV@w%ӿO%,KX$k\7(}/bӅ%gӦ!#Qaa"\.Ho^`=(qL&":=uAƊNW3LD\‚q K+1^W,i۽eKNvMŹi)H6I߱bWmVp&rsBLl8/E$%,KX5.eh_^پ˗/NԜ2.uu Z\rJkBԚ3oeymͯ ;/| a$ CD_~`CD_/]p8?8%IBDٙ ە:0ܼD nL)RZ^+vŁn pcPٿ}üqC<Om+^|EA׾aw ]}Tq_T(f9#R__?C8N)ϸ;/lh851CXPvV1V/`1H&SEƝuB\ .aA\‚^|5~ "v0H&.iY@(>WHFH]O|"z3z;?lZCDƁnGuIRS`کWދmU^"ӻ;؃D_Ķ;Pt5E*C4`dw5MR|AC0W=e*fXrYbRlĴb>_̢0'єx1l5L۵Z;uۈwjL+ѫU,&Ar9Ҕ,for[,)T0"zv6a( Pz<)'JR)U[M3(_nB[ϑ7_>o~#]v׎z?q<_4|ϟ|,ȫoVV[k'oe?v ;/| a$ CDN3Հf& I!"jRf=}})DKBD}gNL0ܼD nL)R]>vŁn pcPٿ}üqC-a Ê-l?G߮},׾aw ]}Tmퟣ  l׷SVqqؘ"qg\x_}qw6WjwMM>PqJ.4*%(d%J*jΟ9u_$.jY*%,KXxŗ^ bNJ!d2' qT a5{z{QVmWk800.)Wy, 7۴I^[\'Xٶ+wL-wFD~ߠ<"D!^IDh㭞Aد&&737 Tʁ?V:xi~2==aؐJ7)^y>;2;#7'5;& D\dDD&YR$ҳC`X,TlWN.Om5"̵Z/5DDQ"l{]Ffz _>A[UVUQ[ҩ&}jUmJ^4uߌ}LIĶ r{\|++.#Y"**tkyGߴS!ojkwTO^h;)W=KX9[2>BAپ_ M% 5QyBXLJDV^-NDrYe-m=5/])-UVUE)u.וzݶ*Mo*mr:]D)M&?r~@S8%x~Yb V*f ,5śj;ndQrRPȈз2M!lvؾ;E}_kѷbW8&EF- 3ݾgM"_ZC0W=V*6>9S)Z70D֢\"lSOf7)|f G>_̢0'єx1l5J.\2lͿw;&܍ܬ:aQwC +}j*[;fgVW6S(d1gz<ˉhG,/d1}*gOab?hUכdVm|bRo%>p_&bppey4ؕ]]QǾrݸ; UFYʴ،kyT*J\JVm7.hjH$Zøh|`xAȞ< _ycYoȯ_yW=?5G^}g⧬ƝuuSq}qwx_‚oP$ R1H9}?)fCDCՊOI 6OF- ϟ95;3v{8pÈs] d&sE3VHozd 0n pcPٿ}üq =[aŖ ѣo׾h~k; >cضQ l6G}{D)xl83./;+5&Fw߸v% m JmjNJAH%U5Ϝ:/]p%$gB\Bq oqkDX1aL&DP0| $L&~rHo<"D!?iuweeV}:#ݎ}pS1DUˊ2Tb1cnܸuV;4279}k˒9Yn~Kab"" []fg}MwD񩹚Ҽ Jdkՙ,"_G^x<ÓDT٪שGfۻ۪4ŵ5e 4GqE a͠TeDd8tue]2t._""#ܜ,X\m %bqnv&MLڻl6۱‚-.{fn!';3H!O%oW6(Rc&iRKYavz!TlhdRhʋzWXiir,leDflNkfza~vzɩk7kke.jJSLf CD8Ŗ}x+)I{ s2MyщdV*z gwtMx<쬺Z-D?4c{EmͶNcVMD}W' lhi5dS&k.#FDK'vl߶][3PfF]xT(d1gz<ˉhG,/d1#UaJlvǻ6V{bng/uD"zkVm6[/uv &&v7Ըݞi":abD415V{hm3p pcזPzPqJ.4*%pW B"TV՜?sHt]• q %,KScŐA@2|vICXBAB*01|G僀g½ S{Oo ʲj uF%J5OeabOzm6n%K=uDOǯ$;=pʈ"Cc-D~Ǐ~v)8/K$b[fA.>D>Ƕm٬gge IDATvL f5ةf>0/`]l%0Z5 UKW6fxJM u.o*m \cE:>GDyYglV޻a~㛳қ*Č˿q.-X Vu?g] bعM$Fb?'؝;.&mFL+)dD -{JWS$,e )R߳ffwږ, a:.hCE*C4`dw5MR|) 9U>D6l_&KmY[SYQtǒؔ&_c&4&M?e:>d=;2Y =s7ya9[2Y-3&{erw}XtFf,"T?b9쎦 *>j+E6VfQwu|b]`nکPs[$={tW}u;}lqXĈtU|sw`iqorWi|!=w@Mk~Zڌ;kܣX}㾧bjkjk# JX[Uh3(32TJg)b3}R*r) [ބk[[WaʰȤqodJXLDnǛ[ N{A|do Jk[;/e}a*V"W A[}!qu|{0u/ 9Ntdzye"$fMtCDCo{l'?a G"3?sjvfp.%LpfMV/MҪiø%nCf^92WwY!+^|E+_va0tSŶP(f9#R__޾uR\\<6濈nwx_}qŝ͕]S;o\ EĶi3V TRYUs̩"u WRNr&%4KX׋/OAĎCdٙ}XwqT aKKDӜ$aAe["0 w;K jM$^W.+PŌbqZ9Nد&&#"2;\/|:VZR)F&XMb+U`C +KI>Cs-n;7{v&ޕD\dDD&YR$ҳC`X,TlWv振.vz&fuŞѣDtB^IKQxVlkG"ܜ̌tѩoAڪMiEs[W5|TJJo]tu/u.y-m?YS~x{]UH^<15?9=!}һODowj#A;/ߠHb Lt5`=B$1Dd0tYDz' #^RϜp=aĹyE@29ܢxSKS71c1m߾a޸!Dxt^aŖ ѣo׾h~k; >cضQ l6G}{D)xl,'Ycϸ;/l(}pߡ~ڕ,(T]h.(*%ULKjD*9躄+)'9%,KXxŗ^ bNJ!d2' qT ab5%^{A\@Di_b,۪Qq``ĿQ]RTT?XV*7wfONϟk6[Sݷsnv^X+1mbr;spXiAJc5]o;Sg+Vi )V~D"*v7Rң'βW:6;0<;ˊ7vG3ss2괥"&'GȒ9Yn~KMѱs-"hOv߳겆 mu5e5wu\λC嶭ڪIc&$tvfK[<Bgm)qܝ=јf>0/`]l%0Z5 UKW6fxJM u.o*m]D'JhpxrLQiq.{J]OD=ƫ6nwW^/.kK-VWm#\h߳sA\&#VW{^INDwLK#MC2"zZzmRf-S)$;&kE*C4`dw5MR|) 9U>D6l_&KmY[SYQtǒؔ&_c&4&M?e:>dЛ>ז _a[mv,55%jH;b+ y kjS뵥ܵ.,U}쿘EaN&)/:fAw*+)hj]XW07j9-v?A_Kά(i2Z_v@aښADW4[ƶYښR]uIy* {vb[PczGmw|bz!^WU^oώ=RDJSc*gOw\݆ >;}lqXĈtU|sw`iqorWi|!=w@Mk~\.wDmMَZڌDdDE9nc]^:vӮ/,^nЗ몋R䐑Pz G'w?:B;0/`]+SeDd8t[tz3vpx⾦E9qDr+y<7`X NkrmJS "Dc;3}nJ]_0!l0ˣ"8 V1or-$Z(TlnJS29h6f~հzsRx,5<Р8{<ӳw[HDnw,DLHr] t\v{|sa.a%,㋌"!Z0f}Ϛ&)Eavz!TlhdRhʋzùrg['Fç{O MdffoT_DYw] ԔZnѷbԖ]b1mY6mJoSw|ffRvPV?oraR{ YdV*z gwtMx<쬺ZrJSݿ8pc̀!QN#f5[}OCohcZ0ɉ\^uUE&8{!\ND;4ey9&\V= QsVAadtw?lU4 cٯ/ vg;٩־{LfeÊAZCDk7ۻjf _+Ik&}O iUva=3(32TJg)b3}R*r) [(+3.X}29AZn c@7FHďv|߾>p`ISe/+^|E+/pKz?_ ‘Wx="m;),>;/{עqk/ŕbG`FS^HDׂ6$=КW~{0&T_}>161}e$uXk^ٸmbNS"@N_IB$1Dd0tYDz' #^RϜp=aĹyE؞qhO| 9MM;1v/+(T]h.(*%b˛A*cs`٘&NKa*0H@ H ;o#@ +3.41JX}3*;敟T f|Ax2tP$ R1A%@wSU Vg]>T |s`y!6 R1 R1B*0H@`WHWf|{mӕ>R1` \T •.NtƢ7 R1X<*3Οx55HnxCȽ. HbGG^}Z;y+g\|>:x oen4?[y 8?]Cw4@$7A ! 8Jd@wޗ6(tPnIqೃYzYvrbktPB%k|v d'/aIJA?ڵkUZVOY?#?<[\^g\;琒ߗW}q:z(?e!8ڲeKG]‚CaIX蠃 !.A~.Y;(AƝu'{y+ϸ;/a3.z' ?`B$ 4 :(Cwx_‚Ju ‚Jޗ$k%R1A*I ‚Jޗ`]C;txq%,Aw(<@A;v&D\‚^oawCqx_{0bsٝ`cCA nHWW}Gz<{utt;RBܻnaƐ .aA\‚K Jq ~SJ%,KXA C@R°}HmB\ .aA\‚ϸ<[YH IA^X .aA\AT a0V .Vaf!.aA\‚%jHT5IDATTYKX .aI3JA*I3q fPD 3q fPlH IA^X .aA\ܡ bh%,KXwA@ .aA\‚㳃KB siY=#..W ..W$_\孏]B\‚q KŅ"yaA\‚qqÌ!aA\‚qqR1Hh%,KXwq :(6b$ /,KX .A 14 %,;>;(+ϋ>q %,׋~s~B*q*m<A⊕ȫoSq fPlH I`Ɛ .aA\‚ JA^X .aA\ܡ`C@*I ‚q C .aA\‚C%%^!of%,KX/.IUq {O=[YHb$0cHX .aA\a%@0cHX .aA\a%T q :("yaA\‚qqJ ApDW֯tq 7]Q܅%^a 7]o.޾ " bذҕʌ8~aΩ~Sx$z] HBD)[] R\.:IENDB`hydrogen-0.9.6-beta3/data/doc/img/PatternEditorButtons.png000066400000000000000000000133201211146647700234540ustar00rootroot00000000000000PNG  IHDR._bKGD pHYs/pIDATx]]hǖPȐ d!ZbȘ5dI4 ;"p^G^H̓b!;` Ɓ5M x =xY a 3H }讞iI/3_sNs>4(:vU2C7f"lwǓ1}|70v0+IѨޜlihrW<hnpwAS#b[e=cvvg?޲SJIam[ v||ԓ]@(-PǨa-A.R2Kfʔ]Hz( +oLF %Fq+]0qj.2> ާ>ȱrQ-.O;gX,8lxηtcSO pDKXS|g%'Iws[(R2͒ǒFƖey#2FrD#]mKy^<1(]pvdg[MŘݼ_ ǂ,>(kzy lJ4VW{r},} :nK% :>۞xy||}*j/oˇ=:I W~~:bA:+}?A(\:Frat]mM ?h`cvØH;K jG|bKfݰbVOwkG.G,.s:cs-Cv`OMaiD7_4FL >m-|yaQ󊽊½ݏ xK{o|D#f?@2"ͼbVʍ'G#Ęy=w]m6`:E4 z.s5`Ao~&pFϻ>W7רU,+X,$=KR?/ YJ󮑲KV~o9_S+gݠb̯q{7wޙ_?~>ǘ: wy[-E*`髂^[@8rƥmomün6?[Td{^=41ѱғNȑ/:"G|d+mY1xTƓ3 fIk"c#Kz<#m9֞fvx9= ySw~ccN60WwϗxC,7^*K#xC'Oxzc|z'F G=Ƭ0V0fS:G^ld cq.Ƙn.3tXx;xZ{b1k s"zK^o`̇˼JJO6ܗHKeF9|?{'S|gC>c6i U2-}&1^`!18%ڰF1ˑ澉YE1'mS2~[9RzN=鑌cwlйܞk?==aCܯSĘzaJb1sFիW(sd+^aq^AIzXmxjbj&%0^s3y/->>wF>*0h[A!jv1sv`*U:( -J,*wXAp󶵧D:KxXmS?J:nsGF 8c+Loխ||ƇFx6d sNh+4kb[?>n7q{qwO dA [ԃVw5^R)~FIp$AP||]@Um ?a"6M0v6zlll;6e N{ sHǧh=`̇; 9#`HK3Q`xӐ)uK7bV/½ҘKcرt@2"R.r7'EeVgw&;7h[9z}Sb~ 8&<`c򰱔STGΎye!rU*U{#ĘcJcnub޺1S3eWF]p{~hfg@ȯw݊us|$RO'>j `n[m`ؠ_.oo=ᰵ/}| f?~n}9eM/w=b=fvw !ܘRB7.䉤ǧ^OƧ(|E1UǶ~O$4.'; 0ԭ[3 je9b=xWCK3?wiQ"n`Y<*!uvLP. ljL@˖8^}{ogRc>3U~=n\0f~+ jA-5m ^]i9=8)_Qcqձ*(t$:8kBzi1܊P0q~+ͼ 9PP{ t&=_us~{=?`mqN+b9:F)@[|h!J_]qs[$s-恴`oQeO _~Gk'4T2'c'~O{Xa̚d :x,-PTQ;?v@ o >s1f`[xZ_GG8u4+uf jp~'b淙6{=~c 8tZ'x Fm\]MMm[G:dRģq/G&b&lM^8ӡ"jtMQ -M@;~s S`KV=>%7|m2Ae^eYdh,lÞPP?]N_p' y%Ϳ^Z̵V:ɶf~JvtdԀ9*2 nP~c~`&.m83bPL+kS[Ƭ[;:5N;N_>ĸq<3 J99KN%sGҮaPsCq˜eoف3gWZ[zpIץ+܁sb8K__@j}tfOX0s .=.se962V093?od/Lsxe\֎vҙlٲμE1[FI??͘F<$tJ_ ci؈YNSzO-, 1y;m4{yn+cfLPv<'J ,-` 5 8'<"1 .{2ܥ\vGwŕO4"YveP^NOtcvk?sKO^0fh ~Ňd0:ۛ{cWW\_Yښ1 y,{ 5 +Yl g[HV0NcKi-ԩ `>- ,m}cvx {rSdAƘHVJOS:(l޼61f'ּucNd0d^u)LJBF7bNd0>Ncf]B;JOJ Ldv>u0pͻp|)c^~fț1`̺'O00vmjg޺13ܭ;"e`.u=b׊]XvwkCH˘מZQcV5//j̳uL}'ƌ=h+_W1x+߮ZнQXvc76`P|m+u^zG''r?阢=r_"2҄Ƃ {|/YkA+(Y阢ahh HY5xo7@u=^PT}AY阢֘GI!c4&l(Qv(aJ&e([Ӄ,)͵!=fG= qQ'|h̫aA P*W[(^2/vHU';J>>>>>>>OaOB>>>>>>EݧJFIENDB`hydrogen-0.9.6-beta3/data/doc/img/PatternEditorControls.png000066400000000000000000000136671211146647700236370ustar00rootroot00000000000000PNG  IHDR18(sBITOtEXtSoftwaregnome-screenshot>JIDATx\w\~ggKo *B =b bE1FK4^&&^?K%jKl+) Hw3s;;[iRי39g 5JZ6 mhCZܤy[FVvmCѿߛn-ͥUQViU+Z'.C͟qP^k\|Ա}۷|2r!!ZQkaf%<=nJlfb-Kqp@ЦUJLɨ+T`' *^V46ثcKJ_(n׮SҌAu}pҟBCMZAkU#WF &%VGccgt)LX6ћb,frVV3'{B"94z-k.^׵un +jJk.U]knJ3rq:h&i=IN>Bo&>x޽%KqM nExUx-ĔT|RЊ\]%bq3kv1# RH?_Aw帎ݸ&|0AȈ֪ XYp^e$4t,hV Ȣ-d; 5Q!H 9uu g^89d})sf1 ?\ vfj&7IRĶ 1 []Ϡ{W':%nDw9 <"ltʉs3+fEc鳯\@Ӭܜ'@Yi7n{uY9O3sk<w 7wOڠ ={#hUMXP&Y^V6pPH;tTs3?{2j%Jy9 w{4+#etX\;PG={ \`m' 0di'Y%0 r 1FFoSa uaeA}cB=i VPBZ$+Qƭe w֬0/bI*slcٓfO3Ξ<Ե[O4j5~hYY{Mu,YM@a+~`.tm #lX"=θ{:ltV%îm)&5+uŠb&&IǤݻI$"1j\Qϖpqq88ǙIVmIPTط ?RR$ Pl?J}pgѲu"]eEYbQcqQ,m&&R*-)LV)'O[Rn5:&xpG;:҇*99 LiZVY`LiΡ$n^}zzȽ;p) :x0^oO]e,|EEu47pǔ2)c,wX4cr+&?d[Ըm')l.y[68]Fj Ij'$2I3O{m ߼?ͳ%T8|PNvAnE8:yw>l}'+yGbT/Z"{iYyBcAh$*O;u2Ю;9@Zʽ1]Ygu *J23g6t裸JQ% SIOJĔJ_J09&$/-.In^FS:I:|p_QaqU\6]̒I}pG*\zHd;tonpm [p2%2^H_QzRWC@vI8y5U3Sd]B$lfVx?|72QL h?|3%i+T"i?nlͯ>-' pI۷/HwlH',4'H >~O;Utl֒)~Ds-v~}qHUs%kbWgoDlB7dwjNۻt8dU5뢱D(pNUR#T_?XkßO(wgqO>-x{G "KY}nVID$Uc `c A)BFj)Ε |pUq;'WLY]szGkS*ISYwȞ܊ūx xwo`6 hxة쳒4Pf?[L2JRTrdχgzs* .t4e6ZWdBF9x1Iؾy-]gOڵ: ͒Nήp0NqQpFZ-/ʊ2m$de=̡Hd <Ƿ K03l d]i "҇#)BtYp\F5 Px=mּ~.vdyzj^q%Ҳ|M wTD RY#/S/=i|߾2E'< A󟟾V@@cgay X9ߘDvP6{"7pb/qJ%c.2:㕘 9N:u0Z B"->W PqN6ԓ/e<;s!9dNvx k. Ԭ S'EDΝ>lLdo^޾r~w/˦)^}6髂dzHL+</FxyϟJ%;t,usLO Ui_D'I\ĕe]H*Trݓ$ͯ u{R}:qwJ"hH@a3~Eyv`a#dz$HOL $aqD QI2S ߫{iK"\w4EP$Yg1:4-`8eI!m`&Ժ䆐$$>ۙ!>'3)`zcJ~v<@rۺ j]B겜"3jdCC2ZKO+rRSZ)VxA](=NRdrNO^b.^<졩8VrR̾;DR u- D\$Q]B 73W+HRzK A e¸vSݕ2|\II}]._F`}+y>lXt]fW2XD)f+4d$]5T Sf3eo_ƀm2j"o+>nKꗱ ٧`YR&Ԩ"W7Og_.15_s|T[ԕ>!sj8>\iKEY;^YV?+CUWg(NʵˆUqosVw?J,47"S2$ZH"g Zq+ Ɋsɓ?Ztw'Qԩj@V^x4y{3yc+*XSfiVvEP@FW( 9\| وĝBLwz͙1:N|٩{jp9:F`խyRD'Yjf [LYN5&Z6B`ѹy2O,9N=kzHQyOg0Tk'SD*INjQi!e3L~Dz1t 2ڽݙs7؁4s@nr =7Lg/4'ˏ;q>+LC"dDN=6R+{m)1?T]L¸<ysG`3A3f6o\K;;V`1?[۷|}ǚ{wefWX| m5)+hOZI?ׯ'Us̓o߯1B(tx}zu؏Pjfu4@jRVQG &&(E59<!$4p!4$`<3$HE5F B~|QNlD͚'1\ScaּoݦӚMW,fnoVa ͌FD+ԫk& 䐟#.c u9}ji%B!I{jL-T@ kw6%4lJK!FDИoΨ7ܐk&0jьx(&HZ x1~j@g[6F`ދj]56@5 դ_RqAbǹ=졤 mxUh]5E%Æ]847XޟbB JMZ !>g}M !뷷46 ,1q{tҾ{Ksi(,*KxmZ F։#q$iIENDB`hydrogen-0.9.6-beta3/data/doc/img/PatternEditorDownUp.png000066400000000000000000000021001211146647700232240ustar00rootroot00000000000000PNG  IHDRfE?)bKGD pHYs/IDATx?hg -rd @dXC2D%S<N-\dM+ 1\-܁ 9p#%+зoG$K6~| B{,4fyܸ^dƄ= bw/P#x=740o,F ߛkLBcTXnB3_Fm9à{O" XbicY" U0%5P|At?Q"}\/9~([tD㧫1]DcLj +ޗj'@Bcm6I43\ Xtp9Szy XVg*? \5F2<#zR?hTfvuh㔃NgYcۙD)@fLm#ӳjqĜ_ oy}qfm>(9cC9:|Z*YfnaߕqrEf PIENDB`hydrogen-0.9.6-beta3/data/doc/img/PatternEditorInstr.png000066400000000000000000000224701211146647700231230ustar00rootroot00000000000000PNG  IHDRRsRGBbKGD pHYs  :ݙtIME  4tEXtCommentCreated with GIMPW IDATxwXTW?LcA^b/b5&f7$IvM6e&kvM_MWX"*-`E uaDy{=;=sιnfs)'*AkE&KMŔO7՚OW}W1uכW%FcFU?M6~=hhǵ|mxݱ<zNp޲cf4 lOh+NH嫅S0Qἴ^ZJ([ 6QO}$_@dx0Y9W U)oCMj t kNڱeiWUU=rNoZIN_VMTh%@tDWjnw'0a4nN>!}kCy3ٳ'=ѭٗ h=GwO:~.77[Mki+ ZmSٙ¸t9v>L;UwX]+L?G7->>FfVA1ϊ=냯 5N=m|[w$SK?_;cFk%9vVTo꿅EVYg8K hK'RVwD :adr܄V2wLfH|_ 1ZzdC|Z܎kݨ4gV^_} B-p JEVU[K"zcƃ؟buL'ͦ\ 6 qϨ{ @RҞ5V{\NW¥K c߽VB|(}IܟƒIrBWLaHu:jtNUU.BF-p.ST o ƪהK'oS?]f-Ofy -ef?Lͯ7 ]lc>!ÐddQTT@ii ii| @דvrƵh#Fs4{G1)iII{8{7ՄEJΝ \A@@y{PP8mhNoPIN_XxYg0Trb*j!!*.u*ܰbRͩTfgHz|}HOj4+TV6 :JC+(C&:^^}ZSE{ˎ~X(ԞZBC#qwp0 IeAYP"+>Rgd܂R/wBIy}Amee%mN(*RRбUUUrd2UU_@qq!>>jrjnL8Dևzt 260g#]נ7jS&OO/4榈y6/(mcHӵQ_xPTt6mѽuww5dgSYVLNWBnnuË0 $߷8GYʊ EZy/_ %~A*&4 \Ye \̨w>TA@КivEZpC7-U"Ȝ'2"̬:r";֛ \o׃gO$`h]Ml1wjoGV;>5hww _+֯O%ϼo,lۼ˾d;+Kώ_Z{gz㻯>e+4v>V{Κw^3GڙZ΄vq\%[Y#}J4_6Ə w>fY;i,\&#LLg01e}I:Σh"n5TƧ|g_ȰQn&-am((,+ѷ5!*7үoL^zSϢIܹ^,_y.6|ᢷ"9m}gZ&=4yM{wxDys#O&9nJϝ͐:\n#^aCx1AR]3e8|{7+-jWMd޲nZۖ$~}8w6[7bgz#_ _߶|{FS|%~~)"#Xz=f)G~A>X+z'5͋7}]e4]ۢޒFmw #B=̍KWkEucRlOw/W'ӡcxM.hv2S+@Тs:-p۶>ެ\Musۥ\loMx+⍘z*:QE( No"ZDӧٝobBx+pǭ"BF- ZrF}+\i:f)|6rD-)LnDMb5xSn\~w7/V27@/M@?yf?p/{z#'ersʫo1cdϝ*h~1_WΞKz#.G~3:jmv,\%%deessÏ/?fcFǞ29x{Lns(-/njZ.3dPO:vD2س8UU'i~hS72}bI$Bρ|\f 7.Q@Zz6iRNjtKLC [QQaVQ?=?[#́ 6?JuxyQT W+i=]{U{?y%lImO|'KQS_'gS%7AD;AN]dp9x$YeA"BoM- [ \ !Q Bx+p9-p9@ Z F}!aO|;􈍹aj yތru8ܠme@XP)\+SO`CӀ(]Бdoˤ r׬ZC*SQk_ǍtPMGÌ) l{Y$>BVUU{ -[yaYٶy5+}ɸ#-j[.d2 ˚ҏ-.L1}kgh@BCX}9ÆZucۅ|bbXl/;Mf񛯰mjNjx{KQ*{xxi( v;JFV.C˖=6e ǃNYw0d`OiΗ?-1o?v4o>c'ſgq%Os4oޙ3eyX'e”q$8γg?w6/*O?Oy>x^z ^x iywYvyI3e̟;j/[ɬYl5s?,_ew ]c#; 9¢"?ĘQ-9nKuH?Gޯw ѝ#w$FtƜu۷ɪ?~f^zSϢIܹű EFfɧ,\"Lc _V_}oq\65k7?xgΦ[irl*)n8d>f$~c1ockBB#q7]:w$0@=Cd{nhg z~+0cdRdIiMXj j=tvp>=77j !-nFMGǹG1A̝ }zDw-A+++k5m]hX3SYr-UUUvеi4ޔۤ]ќ8;Ʋ!VSUivcV)/\;7O>]=wM%(k/q.5s綱SΫZm\&LB¿?˿ޏ{ 27OW?Xa3#a^ͣkm?iSd̚9o_2Ō\L[U˲(WV>oJ ' JJJ6tn={0gXoeBSyrٸ9ߒOgۅ M[X"~ݺNP ]۶9cZˈ]ѥKGf=RN}eIDxr FyjmdXa̼s3o(HFFko'{|ʛď/CdVh>}_/kۋؑbC.ʔIyVG?r`-,_<>le뺌2Ya6_|د;~(rt 37qj777rC$*2ldߟEÇ fwssh4˫e͏րV){T~yN\JWA#e%;'o׮-+Ab7)0j09~% ЗO`^'. Q2\Ǣ<5<ģ"z]9p{K AK(_3As*CogBx+p5D[0hawo։5>d_@vQVUUQPXރ'Љo7/DIqs|l +vWoܘ9UڝM4Uwך"Yw)/j0͘iDZtlcs?v\|z#/L|zi{Vò2~^G='J_f`=(9^z5?>l[}D vJ|Օ VG+ՄSU5l'-v<#t0Rඡ ZA1ST,RbmoߖM0[T\#)dd]+kW6QZڤZӫ:=C4ow"ٶ0|S;v8ɔz-g~M x{1w(ZAZTK]EQܰ)/tv; @`@l ޜ>,TIz>]myWΥu]cc̚T y y&-0uLQp_Վk2v m&,kźX( ZE2(:F׵c3Ḏ|by۽3F|j  Ko5w<=r_~Gax 864X sټ-;G _/}EѶa`X~ bޣ'@R%Ep:Z2zϧgTHj.2< W? ]cd0{ll"m鄷r<=ԨTJaW^/+?KIDATE4Kq=RSCmEk4r#"޶NxKv! < }1&5NWff~|zkO~ݹrnn2^_ɡA?۷17;.\dޞI؎DtC-֋S oj]z2k8F#9Wu~իmj'+F)TJu${'~AVx;i@Mg1Բ`SL=Y[i{tOVk)%[ 3h!^Co LFV.+eY":'Q=pwBŪuɿV$ըFs>=|Ǫu59B۫+eeluR 9؎Rv;AqI'鄷&qmۆ'hSۃ'-^ ,D'п^j:GPHdfYh**=pHWNp2>6&NKo2jfQoWG5*Ȕ/!*=C0zT*%QYP7q131o7=RzvZa5NN^29W,u1-ٍL2f4ޖWI}*ڢV "qQF#1]"Pxs)E#ݕ՝yX$j yr\,?E$y2ΐ3sFDx)[MS;ꭩjzk0TsNWFz%2.Oɽ_@PjՕK*pgD***-:IdXz++'#36C;SPΩi ST(zN_ ,ğcmЮt1.%8|qRm!+ne`1Bռ1ɸTQo-&gU/SXTۋ:tru$$=.s9c'SQ)tFlt$?&ljoS1ToVF-WAo.gBx+pfG,7$ ,IENDB`hydrogen-0.9.6-beta3/data/doc/img/PatternEditorInstr_V2.png000066400000000000000000000600021211146647700234630ustar00rootroot00000000000000PNG  IHDRBsRGBbKGD pHYs  tIME o IDATx]gx>#iwuӫ)B $$$Bz)^^n4:ޫ 6U|?vmڻ.`"$4ͼ:sfhy9+CTl\BRR*PwN;zE‹_&tկο-w۽OfV5;;3?¯ "))Q\App*(8 e㸏KJ8 e㊀;,8pa5-.3."$5!^(((إ SEqEǁ@##|d<`:MCu-WcDǤE;1[\hX8̻;ÕrGAIdpkYMo*}=d28p9ϺjjP[H1JS}H$r4gZ zA.v&n?9$pݛL^J}gM3E(F39* Ǐ* }MI @_;1NYDRl)<9CÐpoXW^z6N-"29.)@"ƪszHψ}NgCso.j9MdLr=?VKutr2$G!zEN ޵kvV Z  oȴ$_Q{3U1 `Y*Q 2t;*J.rGO}G kOiGSSRC! -!vW_Dџr̀GtKYޡ<wԜ#)ADHU͠m]H_Œd_ V^@܄H! 'NևNOeun'>.ZVU^Qb&#qL/ mi/Gkͭ#C_qKm#&2x׻'(}\K_Be%-Z+}Opm=d`ϖT.B*05=WePz#F-|1E"7leێrџxEDLqk.-G*"o„r3.}UyVm~ĔIލ=yx$zUWw 镒VHÕO$ O$HY XcɹFx@HFjq)rM=rb8p.nQe/ĚTuYvnݛQe<,}vo#+ C.=mAsa}'S&(.v4}號o拾X,6 .͙3g׮].>|F? -//z5 :{8I"f87ڀw|wY]wϸG:b_V W:LQd]m%7rkw|`Wrnt@p# !o5Bl>,˶0+MsmG BVظcL48!Ňya},b ,˲,,F=]uo汳vN`f*lٛyщbLuy55>!vD@,A "Ap 8 鏔)d|Xb4h*kM(y)6\Q MdY0,6=.pt7ƵJ[rG+}|GO.y,%ߕla{2/ꬢz=%d ā ТP*NvBXB#БbccC(5Kt0,04M3 C 2c'0V;4Fa&0;9Ḟ|_hlK ZZZzݣ=D}" Hmn"0ϝ__}풒 6kHrAΝi329`qό>r`5i`u%uC|$m6c+=m"S`L?mayKk7flXZ6d7_(G$IEa3>ˌYi}}Kף)IcM&!;:cScyWoRG)=H0՝/2H`뒒@o>a}$,k14Mk5H 6ʋV+ ,BO_uM¹a0**uuY%ej@'HHh &v[@$++#r)D63u$rMZ+[j1p@zDGxPkS븇mf1 4M[_mo_xzDB7f̈y 8U%Tʽ[[ @l5Օ;izƚ_) HI1Y0O@KgZ_.5Ņh9?"RPX9نA8^&`:'^xee充2ivXP]l+_T eٕZZ(P`%[ҬҺf#%X:,4U1 qHTMwik;~7|׏q+XaY}G1n5];[{*,,t֬r}}x|.ﳋUXk,s*a!kRj:U: yök/G 'ݹbC;~vƁd_|pǃV 6aJ0`:/[y{U׿:WmFMe[WʣJsMo>ЯGs!=m .|~bCmWQѹ{{Rp:Sy\;R)m,- { J1?|*xן\}Ӊ/SC˾+/}qXSg 7>3#Rsz|?=IC_@[fbW9AˆwV OϾ:_:1 ͸ =cr 8dA]ǜqGVZbr2"Uo>;gXrۣ3s} c6f{n_]AʷV& oe3-P\f[yjŷ}/}o_; Ǟbk+f\ mL뜐s^X=jKܹrtmo/8+m?ݬ&'sׇVb?qG*vno|Iu>dŒ'?˹TiepޯT>3j'6g*׽9=ɾ"9SsT~e# 5%\p<>=_AfI\$߮uaBt:uK]v(./ejŲJVjMfzL *Sn2TQKuiQ tTJ0@չ C76;Qe+/6~-2؈n9ƇJٻ{S5|}ѓ'O۵7ruվӦMKo8.mG~b̙PZZEv|Pw&sΡ64 *겳v79E(ymb˞̪P#uaۇeT;;P2wqp cvʙ!㮿a<OMzf|7MRFM\ΨmMk#"|rɉ zуNLJA67qCv.P6lxlEKBo&ඵ,\߽C `j;+6|)K}_|_ۂ*۵O~,UƑEf)yՈh2`H }p@UEɭK!$V $N"BYt Lh<=*p5y`ڲdu}#2642PI)P5sà">uXmuA`'yKzh9쨛VH /)SNkgeLgà>̃.v8gbA5ׅz%FL?!\! u24 (-^ $I2>c(?y$WC"ߑؒwDB3}2˴Fz(B%/ VScuuvQ %ISHT[\Se\Zdm/!0\7V*#ʲu$V$Irmx Тi2<4(a|dS<RR"qԖ#Y:QQIV$GL5 BYRgu')icRB/7,r=L_նhI0 &Y8_gp6m "0cU^~v!1A6KЉ/u۲Q.m[2i Cq߽`Fn6s=~e`N)AA=Ifj XY)VWW Max8]nf"D)l,UwE%"0 |ABVVQd00d2rxtxûLN2!@BaK?ljQA!"&MN*"=IƨTZ[٬t?(yD; j;Ǣ՛A" =Bki&M'/Wq>n7\=vkY\\V4m! d膜k5 RGFKO(9SoƄGPP+:'3Yeщ:UInmgaF]q*4?H+vaFKKs 7 0` mjo>}>ٝ{b[yœ#<|\%B}_e&4mg\u~]<;Q$>`zeާbo[m f VeϾB{?pظ1T6rM9!~}9ajǃ~Wvtߡb@z;0t=@yI]aQi7Xn˦n"^7_*%5vù,T9eʴ 󟸷m=I̹m[f b@s^c &ex 65Gtݢ_,0{_4eON>!G aŷ(@ 5hߔN&z]Xݦ?~ײ"EH0fDO[&92~⍟|/U=t V7?tАg:at~1P ׽ |{?<]owtF.Ⱦb= p.#y dFK87X04p<1Sg֗|-9#:Y@Ӿ}{NeĬ AAkXyСI'Soa}&~ :jyszng__u:cY7ޱ޳cc?泱>^ܕ/LwQs^X=콧_>YȂ=TvvԐj#YC ([k,آV vsNG%-jͶMu~J/(w|W=4ኍ6+Xm-O-p4/Lfye?M :! IDATmIQ0~ɋ?*yடzZйǾqз0cls]Da?Nc!77K_N K}ܙ?`oP=0EYf$ 14睺d@~[aQIRM?0-'72ImžSf4>F}hY/åpuޏե]z[ tsaƺ_WY1`;z`v测XuyX,ISV̓XUU'۴^}"x߾?l]`={rR$#c)?`?xtsI 9mM]Rc?祧|mcwFUj ʮPo6yO?}5y:zTǎVjI"Zٹ{N?qK2;ؘ+z۩q4|mTox†?)L'?u֎?v8.so)\cl_FߟK,X7_/_~/IRa$EùH×m;AteB?LǏm2?:R\YҌ<4#Q3{~?%42W!@@*JOԙ0!)OLm5Vɬ7b(qhblJBj++IϩU! >)ccc}Ȥ.̩@}o{V;Z_DGo[xý7 j窫6|?7EdW ~aahcq!.ʋouQO't}-R `=7 !R{>PH;c4% &|#mD,ml0ND<ܘy@L7·yϺ:dg/K2 SSSsȑe˖X7߉K/BI2lA ~p%<8WhK.4,Օ8!RF_60lhnl,/)0 \!%κ*RBC2656>%@B|4p5EV\K%I HD]{]< .zFܻIUzIrOPOKUqi,f:d ĴO::8*[nY*zy>?yqժU|SXD^aVrIU"G}Ϗu\jx_0Mu(ޗFn۸@vM5sҋ;ð19*3"cj(}WnVˊ偁rʢmp,#W6;~(D}}%AU_hk4cB-Pp_M.(G2޺j̬s!W@{tM ŻGMcFjR57%RP$&GreW|yߡG̝u18pBm+={B !m8tfEb3";;d2r~}/^#]MYѕ >5cdXM߷'8kd]2+]*i}菓:C}ΰL'mIC&,yfs/V-l{@934`nFlF$ɉOx̉I>`6-mAjlN\b ٺe'uġ\PR}MĽHseMv l~W^:3w7&u|j͝-Y^z3jNz'x~?+%0|ˇ?->o ,H:_-xgkq7i W-pb6oյEܶsR,چg˺6RO¯Q_Bk#=^}iEH[ܻ?EN#[Rʾx[|yi_yq⛫.|;ytp3]0w̹gνqɫGl5dWoy`mvP~כuwBU=0&GdmӺ?MX`.D Ǟbk+f\ mܵbh3!Seig-}^~a^~a~I譏ڵqU>^c/~߉ܳ7)KtZsaR˾{;zpO~c<ֽ[wOē^cȇڿo῟H3zmmG@ˆkV}/_q0Ml=5^zqk뷭 +˲v}iѤָv.l<):zrty_̫)8{{7 η?۔UYYxl?\sSt'%[^SE%L>*ŷCĴbX,[+rMȦڗ۲*jjI*YB) F:L S{oVU. ,U c<',J1ޖG4;JGM3vt4\s^X=jKܹW30#XW c?mfيJLeiVuMxx 977q}v䭻(އel/}x ׍§^aM>]E(!UiCSS&Erd IפKtQ ޳rDg]`4<==M1"PgڜV<^ߟD%/  ]{LWVzcܖÄ'zd&订 wh|l="-ʽ7/&saSU bUoŗ.t¨i#,g~lÁDo"GewGHGpdO3o*c$O\8?ޗ9%N5i*o˨x~p_\#447k\7cn_O?]6qmu;76HTvAq#E *[gA B)\(6fܧ4\r\u=M. UxRZtqw;'2CL4ЪmocKt~T{$F,y{>&3XD/{C} `7.h45ݸi~ 2{zIxM[1 9 44wԄ,9QD7i)@BW +g Ͻ`;oS\|͝Q6_ a']|>#pdNħ]93>?4~ݿ8m:so͵AOҺ?p=֫<} رMq]G! Is}QwRiߐSN/[ls_M|ۓO|^ T/7~?M5XP;t~II~"֖?H]0_tՙz3ٕGƇ(<ssmMvNMa#$IX`}UB0EWhA򸔩a|P[؛+*Z,1S-jR}}ލ65byeǿtESы zڳB(dž羞}mK%k<#St{\0hmi i})-bY ,TܴBu [G@HQAba' "fUeYةu^/*>5F`sCYe{=Q 9v[]cOL6KJʄ9@פѳSe_cz$$?M?xn2Cvt\5m}}otiHr؍S=%y- آj88@@_pf_<eufn5y PB-V7H<׹m&%ީcBx`mJ/s!oXuu'4CAGHPcO[^@x "`}@].]\p Ӫ#xľ^J]sU-/[WD|1)~j 4FNåC=X?sÉ2[@=}QҬP$*xO*sd[֋V4PQݼ_.iy/֨iqH<82h;p7`97 soZv{fSuv,GK;m'ڵ=A{;_ХXyA3;q4B$څ2VoY]2#a;+ыF[zg_|Zh2P|N?f =Pwu3םC];qQ|;6䓫|s:#| swo_uT 'kqG:P˺Ρvl7 cQ+'̛xxMg"n٧1[Փ[9WEB~wshJ#|6g>?7i^.j Ǖ'YP|_.YC`s,ឹU.jfszVq7tsN ;WtCFB*YG{rRyiѺʚrzIM?_Z²K?3{7-CfEХd9V/0\.;IYM.)spƠ ]ֶtuevn' *;hb!κ^?Po7̚KU)9}n@7KxDx*W|pL݁Х#]q#}f+ؚ @9T\'1Nrϫ끅ӽκ3.s8H|}uBB!n>:w "K] szXq2Z:snpe;\wYws*}K6 ]~\ba,ɣ$sŠ坄.23Sх1_LTk?e|h:r]~ڸw;~ڒ]/DϞ&uZB$Y;s ]ɪ9=Vh%Yѵ&[A^Tsef-2&6:M2&_(S养mBػڴԔ?3g7gs+2 =x>ʤIdsq ] I-+tcu-uMꈳܓH<0jܛ*=`Uҁ[HYBe ^Bѕqiq&Su3#^AWws VkΙњjn.5ccCA-t9P8\G>6MCaXop6eEwy˭wXZJ[zq˞\_I%X7ZewўIYėwSOKcJL,9aIY RВux9#LF&>/|uPr@_j B$3 p/3?㦉l4nh]gTlsjΘ>-\tiw8s.Ѿ=Un\5-›[rS spAA}vwcv< W8!:cug7npbcnW!4TiF~O`n(rƦBACo<3jIDAT!bqe1Gnj5p$LfNTdm7;8/%2,cMX%Gl,ʀA`n b`1Ƙl 3::N]%tdU笿K?a$ t M5I@[7O$'>1'z$o)?~5{˟4E[94y℉!|0+G@$ L Bzz7B~AYPMѡʤ(8_X\^hxp@rt+8%A `iýKl3,~Ae~} S&54 եG\y2H;}L}k16Tmm cY,؎:U>}M `2VzxJ+笈iAfUARY'q,v ` ,{Y"t z o/1T FJB8~USږ""8Fq$:AE~aѓiݠSqf@e1K`_Y` ǡ!"@:*&ٓD9 !l$١;P7 e1B i$6QR^x* :}HS{C4DO""7ؖ+#pBHe !Ī_+.G~9/pХ0|\"9ǿWù-~xG-!#ti:eHB k~V Z  oȴ$_ eF X @0szÇ[Fv ZlIE3Dk-a|$ST`([1H; |SU ^\%63@oq*6rJr ]u^DIO~Oz5h` ]`Z[!D,L "G^}m0#WlcAnn7!Rα-{[t,؃b0C]X8">-N& Ӣ;Z8X#C_Rag+Grs $ʨ MRlVU5y*/\kPWCc0S[V\ݣyLñOSd1d;*x5 mk\]/=!-\V^RݢGh1M iH?[RM󔁉.mâV@.0הb@yxJX6L"@EMV3T`_~UykUfQgAR IfUT6yeIJˠģ#FS bFD鍆qlG9 gt/ty)B3iXͱY2\DMPxEt3}QgM GLݨcLBjNnWuP7RNb}N5!|GΉ">FaS}HYD`3*YeId%vb؉N@ d)wa K>K[˅l^ BӜqqeI43b[[~(I93O ڜXU JPKgweC\&FZ2cΟ6l)rA(V{>Uo άU?<ŒC[GYFQ1m^qH\sܩvAڨmhE˛-@BI>(Nk>bh[f7il,NW&.nJ"%=9.A6mJ+z_(_L[TB lsխ"}kztV矾P+I_Z3Զæ`wt(D6G*Wpxatm#߾}ɅEFű!ò,H^zfb puQI)iWŴX@ƭJ`Jz!@Q@xB.nĖVx.2ε蒉+UXW]e .J5Fi)*~yYuC?毼leya\B$~[nKn"ta";$j.Yq|[;ћxſw=Abt驡 elj0.`_! ދ5^iz!D C7c:.) E}=:ޱ`-v^_kr&&`ayf΅ewiF~)r"c&`tњ^qXo[:*aR`@5FDϢ*3!N6  Y(@Жufhe]캪rVcӯ-LiQfhu.8;x캞{lYUu2Lq-zeG.VkzA'Kڬx !.ȝou$I}wvD o~=񾁩骺K^{Gv^ݟtO?I a?8]~W݌.#~`;k'I};.q[`/~=]y|,FXQ; [X{ ^ @\J:QA+ ]څJ;SQJM!)DBĆKzL}sP `JVd%+`4wVm}ocyhwd_m%\nS#behILeq*lA@Ī+'UVO-)Ԕe2oiX[ÓZ-r{AULͽf%%[vm`no5).^Nh!~IkW,VX)˓xyLhVk7H) [te>p^7&hBP`Y&cZ.O={O̙W|CgmRwߙZъ s,a My$2I:J0b鍫B|sbD"C▮Y ,+uٰq؉ȫG[ at٣)Jݿo4~O'yѥV2/dgWvo@[d j4r6.$*%q-&:B&s04iNgkn\v>kI]=x"]sEo`/o;n" 8}7 rGLqAPªDpU&8.-J87KU3_ZxseDMѥk }r)^lt9j: l( O`DY(|AԴR* /ؘА~' :󹿩2JzĿ:E 6go/{t%U&\~J1B 9E+DbV_!n6BuS3LD7q~':T]Rog=YZTqcrbxSűcG.th`Ux6t׶Yx EGsfHBU"MQY[ :+XJ=_j@#wfՑgF5&i9@1Bf4"bU¼1} eu} ˨urj񥼀+č6]6HgUPnJfͪ\? 8ckuUik#om/[ڽZCFc nfo:g=W̬~**8P4'"0 KNWQNQ=8{.q7 v_7CϡGtUw}F=~^_w޿-?K[ G^>twe`inFO|ڱɮ}̝?o8-0VX.?:BhlGhŊN=z}LM5r7""Phړr}VG<DZ6fYVŲPNpBG 0 0 !4!Z!&5X_"d2ԍ' ac!CJP>PiO 5Ԭe d@RS} T 3 !Z ϫA}h"Ґ+S$85uqт_NV(\Xk 2+t}XiITr⒘VcKmUva+\/}yId~b55Yhu4#vx!8bW>asOkdi}7#dœF# gh>Y{Cd Q=ɗtQcG{Ǧ_;Le@h|&)wYLح7HtI۹"kl(BB9[Bx dvA%|=n`~`;@Eġ7#Q˟$l18oVKi(48bx|6\)J 4\4D3ƢC],^9^\}Bm^|byk7E:/:_R>šz]=>i#.##(}/ElXW(e!6= lh&Z !<@.[kB}qs-<=KV:{H˂4@OcJ xFoceK7kXgQEdRtW_:09ee\փVG3Y^oX|Q`?r%i2-N[>`WIu=F\w,:B `Xޢ P榪+E(”፩fߖ9IJ7/?Zy]b XaRN{AˁӤH[#M `Xh YfMP|J֝Nɚ*hޙL !Ljk~-mEs\ubzu}χjL{!l}/M gN6Nf+Qw\{4uۭxy?huA\k 7P9rG}ixFs6z*x&NJNzz r ҝ9;?g{|r宺Uvd}[<\yLe}\煼/A D )6+B @#a'\(l/NiZ!/huxz}؎4AU;IENDB`hydrogen-0.9.6-beta3/data/doc/img/PatternEditorPattern.png000066400000000000000000000044731211146647700234440ustar00rootroot00000000000000PNG  IHDR.lbKGD pHYs/IDATx]=hIlZP ,pp:n18@K8q̠`f؃uj`,6i/8t=68FƉ,X.`A @{~ִWɧWU]z+sw'806PM56v 0A :^XX00-08dIkDnpE6 w@HHxJC ઌl*Q&88#@CH8``g{y56}YAzv ǀK"'7+#[M$$o=vN yζkv<OC6g#$&9<ڿto |ػhק>=?@N.(?|.}$';>Y&F;x; +"@ϲפϻ|х& |8/㍛<x֮rő/}$'3>$>4=g>?O+3~oowFV#cazw}R7yƽPdʫr}Q>w}QR,"3ObN5*yQ[@ xt {lbc 3s*rY_4s/Dl @ip6lj +d]yCMn?aN6#84|s6$MIv;w[]ӵH}?N8`Qx#ۛoN8>B5. Torsx\LL_8n,\ D6kY)涉;;?v;X;GR3ވ7"?Km&'LyC|9hΖ(]|&%I[:t:oGq6J8[؄q҈sI.!Zm H_!$ rc%ن9>!ms Gp%$+1 Õ軑]J(>qy#Әc̗dINFVcA wMԦjZvvҸDm6%CGIENDB`hydrogen-0.9.6-beta3/data/doc/img/PatternEditorRecording.png000066400000000000000000000047331211146647700237420ustar00rootroot00000000000000PNG  IHDRn.,bKGD pHYs/ {IDATx_hSY?-p]HaZpa#)2Ј 2)#MKU>8 bw_*`tAiև2a>€]P0v V>77jvܗ{~N~}9tEG=V>Ia o"HdPv@Ĺ4gM1Y ,ѡm#A9dܣ,/yt݈8㉍(\=0txܣ,AnOH-1F ̩ƬKg::4uu•%Ҏ8Lzt>&Ʊ㘜d/S(]C@n/HN }=$99Cp^ce*|O Vr-_LT3O0NqC䷶7aaN^%m ~ԛ.L%iEӃ73Xf*O3ӷ36yyюj븮 _OIۡ͜M읺:E6:%QSja\ǨU8mO\7~c=_G?kol92kWY79OWi⁍gD?mHqccvwwo H%jA{ }óUvih>=Q|BqbYSOa)jACC@no<!`p*Q~Uτ}wW%Rs(5WihڎBa ?TKȱaW4:IPƮ@ j"8=V]ޤ~N>˕pkD{͈< AA0A\zCJSl#W~Q\ `\ص O/}2}wWs_kwA&II+dX]86ū\f{++h5o |8LcyJ6_;ɢ$N][D`Y( X׬2y A:E\yXm˓.4ؠߩ|I5{8Dx%! (Dr uσ:DbW3qim_8q.ITCU#.6r^9x8oq[yOϫG\n~S~~UJX_[q]t[N&XY˵W[Μx?﷊xI#ufٴ^:v&r˹>08mJWmYJJZKK9V=^2к'KxSgq~u3:u|;"*mUwm:TʵU|C7RvL~O[7qam>5/T\yg1`=e~]ފygM:I},}KJqIENDB`hydrogen-0.9.6-beta3/data/doc/img/PatternEditorSizeRes.png000066400000000000000000000041671211146647700234130ustar00rootroot00000000000000PNG  IHDR.2x bKGD pHYs/IDATx]=lI@i@ 'D G '!aQ _tEW܅@+] %E$s R( $JwLfk' ۙtJ*/vR݋qe|r8y힭iSI|Sޟ~POq'x&NǠ`t ˏN@<~#OT:\qcvX̗" 74`kl΍tRl[ruJǯQ'*7h@]o~4sɓgbp0]c9v9}u_OT#nv<䙘5pn { G}*[UvQg-76|. vfofܝ,Fr?1D]?gݭ3w'[^Y}~z8. 7x0 ZEdc!3_**1_x3|hz_u_xc5Vcٰlh='ѱ>Qx ,*'+(.y}Ξ[ut_N3)3l{B=RY]#RE<[?H#@/۳72D} R]Ҿ@CRewpӂ8s5V&K#A81#_ƊΐlY C:/jXYs :шO!C4;Ez :o%"n!rN+}t+<,!fՁhn#Eq:]BFs&:q:ѧ} 3T{.KDCL&se-޷Nwqךvqڋ ٭OT,ӌ~q5Dq_Nr[R8n睤Nөy:5O<dkDwr:LR~~ ?QԤ] >qq&o^RI)c !j^7a~ۍF~:F뻻C&,uƏ_čt?9E0O_&bj2 ak<ݾ9c5Kid j7;:H&pBb(jfR|ExhraoK /!v|ܓS( Хw :ݘM-6ŵH8C?egNoد^+d[Ԝ-s1xmP,c)6)t%H7b_+L#/5)R$qY Ld;n6)ZvQzf`YI2sv?c~c/ /u,o!_) ӹ3vԞΗP.L{R׬f笿_aٓyky\YcÌtbs Dӑ1J)* e1.ms:=/vñMq6`-U+p|q:1.@8|qf?^1?t' .ty@.ڔ"~9[w2l~b_+LKʇ(jNצvfR'bW:Ņ˖Œ@81Hgò,JV\5p. 05+5?5D _}usj bbkݜ:ԆwEPMt9,*>3|c&;)T2ܧ6~#+)u$WiSG*ƙ÷nU`doƞy^^ե\GJN?7jSm: [jۦ8&(IENDB`hydrogen-0.9.6-beta3/data/doc/img/PatternEditor_DrumMode.png000066400000000000000000001236471211146647700237070ustar00rootroot00000000000000PNG  IHDR;=sRGBbKGD pHYs  tIME !6fm IDATxw|TUǟ[LI IHE_w]u]uݵlvmXEP@$OzL[?&Lʄ$L~9s9{9{޼?AA적@VɤG Ҳ2AA%(8N`F (4AA%\2_@,vwFy:2ib9Wcbɸɩa!h!hm<]mRZq@6 yWknե ~ h2|~ᇯ>k^^s˯/^6 R% 9t(b̜Y?/fs0mWXj;ORB,Ҋe BHƔL}퀜=2g~%KwMҒa!8b0n{wܻtb@[ VVչ"p3)!XLx,5vSeO=rs${4ߕHԿo+|G|̎o'ī=w| 9#d]؀ra믞smʘ[>GߚL&q< x02!_|A^/c1]͏P>a1EARFock+l~0cWcXHs~UYcEȤPοUuiꠑJ3SwG=1C.*ʊvlСT-^rz܎7^y/TbDžB<۳rY}zqU?I+ۙ>'U*vToYo}[~;W^PYyۿ;r^WZ|rٕ@Muy|W{y_̄Tol\\3/@ 5'$4\.Kw_>~M[Hj'Y{;;ZA!9sJhkm?qx(UV.^2PuŧN,X+W(K /Ͻp9˛OUCX+ͧ:Ku.A0KlxW[ßMQsl/|S[,~ɝ5G?zӷF V~ MiT@i۫l'7}6'GIT1)}*J\txG'sEyx'C]rp\iӺ?@_]@w?C2zG\>yJVuUכ>6whu{nn놎VMpbչ'||>!;hVVV> _]Uk7./=bR|T:?lok;+~:~+F}ޑ=3g/hA${~I ͙ػ72EW*-#H$u2g9~d_`qkpOHϘ^Uq͟RAߑwd+VSXOZ R{[sޑ=nsu6;+μ+Fo-KY*X{Sw8C^͋'iE`k,Í̇-c<5NV?%7_|yFٸ?gil7^;'JAxڋz Sz.,~lkiմ`a4#+f,fIl{\'C1?*T_wNԯ o'A凗I)hߞ[@J#^yBܕ[3./0{AQn Ѫ98waXF1#{^\|P({H@Qq]uw?,H*Tgr\!ҙDog +]Օ?2k i2u+V[+YZ2f-b5Ǐ7=tŃb0:hxRقEcG-lp,$Yv`֜>!9]?)uE|z7?n߿!,?OPǯMb`w*z٬_L*|cTlM?#jonyS[_DŽک.V(vieIwɵ~6co}b8 #iUM/9 |5ŧ:bQλc}bv?6_A鴻+\[9P6TAy?ɽL1Aʄ͛lݽ[GLYIr&D d a8ZI唫ba>UcۻbCjn-ޔ/_:&1뎭?Ov@H`G^{ןtӟjIUfe?}S-m%MBszv:yyӹ7}T6=Rk5{q fYluG]m[>ex~޼NGJ-y(z9{c,er^|GDcQs/7vA?}$֖ƥ}ޠۉ#) 1^;u6GH21mC?P\~>mƜ-ڝyi+ESF8X+OYD;vV7YBM;ϻ4YCuJ5rT} fgӛ52[r]6Eq@}3f__O~/a=me&{_.sжY<7n[}_x?(SLwoԸ?9Se}- ͎1V^->zzhs24q=ʜaX͛]nvTpp'fتJ:_ޭu*uo|Ծsga/4^+$=:::"CCe>SZIsw] V8V%4cZ~}xJyVk#H[*ʊ>䭜ޗWk/?#8w a\/-׮ayw]涡}0gub+|'Nhl667ACkAA"aq :æV@Iz~Ys8v#e\fKr0놈^/RJ·mnpzw8K<3uQ}[D'ZgUyn3ƪE2v5̿:cyC#!^X[5XBnowvp-x?.ar „@ibCmRcЕ%bp=I8>7x6cCFOT}SeXNZ+BFg+ KBMKV. 82f+1;zceLS Mfjz$wT%}&`V30NHAҌpqQ]u;["|w':t~h}huGyY-Y{i?m_j!/?{7c̙9u!s9,}\u,^u=g"XG{/g4[1U /:&[zGgGw0`I,1 :n]iuÛ[ꪾ&&^q՚oZ@<'KvwYh@_<)cRTѲgnVCuQx:;`긍APl0x-xӃsY\ ,4DDXDmcѲ/޼vK>nl}go 󇇌O}w5} &A^㫯lbPLHS|i=p$Fd*N˲WpN,6A9KcfϚc%ͽ2o8eR@Vyҕ{28;d8?_dB٠{e3癌*r)nkvkpH+4Pum;#Q&>U_Yʻnsͼv *ԱYqGwׁv f`aY jZvFf mp\{4)҉[ort蹐I1GznuMg^5:k5pkտ7/v/kEltn`$`yAV(^u=S97 UvR{SEbDDuB<4>E6OѮo$T҅ L(OjQmMOWn]lZX([d ֤Ci՗]>3)^-ç]<}=fqy7'7=Nkh[K]$W)1+d,f_!0- {[Q'1O2-=0:%(7DQ R<7M*B|}cp]x[/sb(޻xFCg[16C܁xnFyY+xSz|p믟_(5b[Qtᝃ'gR*$=J$J+IDJaP"B"hT&Mk>ߞY,7 HX(IDGE N[vub~r}x7^C𧲪._kJsstZ2)1jn.2ϛyȉa~K`ڊsVmX0q<)q6aX(YP"d9ȉ1i|=<A/_AJҾ?riMM*GosͼKszޡ\-t1Ӓzl=ʾ3>L|wJOH[Ҥ9s t&Ф,gYnNnDJ,r@߀$pcO8t`(@ z<`Or OŲk^{13LvƟV" gq3'F7vPC3CsK…soyaY3WXhڊP wzzC{׮󈮤d$E8 A' DF5ťAXZ!fK(ŧ+msiE e  2,ie`Ͼh dP4UAA% M!hA䢂"EKH zAA8  26Ai  2FJ$)AAHZyZAAdLiV/8'|"#;$9Oz m9wPAYsM0 m/Yן^SQi49<4y8)DյLv'IiqVٸ5ה5-.)I*24w۩LдKX_2wQ :|ijDJ($x҂5O'ylK {ڈTʙ<1~BxȤபj'c8:"*%^%&]]' b8zxB))b!;k+O2yCΖ*BFT%OOU I!A v}xߓjƝO25Dͽ$b[]<~gm)ڿ٨[^zZ-9wnPޟO={jB\w2T4ۋ|ކ NDdZy@Udkmןywn`ҕsec~}{L莿?]aܖIɩӡ 9i>TaDKq5NѱR L.ոVj&fZ'#^hBz^+sоVE7VyW͉"8ojmnmni鳧A>#2U-vj=/>|IV*b']BA=.`Abz7ϳk ^،j%p^s4cRe$pB\ص#4}ޏ?nam̃ U"QB3;v.oϪدUA eI:~.:t]t1y[z.d=ң14M0T|||ktoޛAe%˿ ^ IDATG (4o΢Af&/Ɏ1!IRBrSmEʼny9 b K_qbφ;<ގru#_[er+`I!Q&@=<`GVv:[5i8! dp#V{>(>t[q$)S?poCb0~X`'fMf[3K!ϫ <3qD<=3&5gNO'bT~M>Y+QC ^g逳!N-~/o8NY@wc)z+44}kɅP,zR]'J ^xٶ;S!~כ g_8Kylus~3amng]V%R}!|¬HL9,Ad!\[ee"X;jDPvX.( $2R/Шb*܊hՙ_wM2^..͢Wfwiw(aJa׵7\hZ\h`LGN쫰@M+ U){TvߜSCEN7='#j+;K \Hs:ճO0gf@k4=]`Z֦L?_zX_KkEz7@Tڔ*+ [?@57܊F@A.*F7+G H  26  26jD AA8NAAda   c#F<:  q tZ4 W^)) rg pۡ{Ixl`w߭7(]BpI ?;Z@MloAS  pH$D@bI[k#AA+;24cHAd  2&-/|ddҊ&&!D|GzxNƀbO;F `sU*%СrнڑieZ?tcss %17޸F&b zYFH+jӖ]%m?y)Y` XZk/sRyUNT۱}pшn4 /e?x}yy`8H.!I\A&2VZy<#LʽR"8A FVVH}e9a"`Z`}\jz}gg8#88>!!A&2RZ Fԍ]Rjβ6$Ό.7OTJix'/.ؾJ+`pR#zkfd<_,# r#1Sbh `6jl?-0X w7mpQ`amM1?M Ն*ʁUJ6L gAFr#iW21)A8n^H*LUV\Զ/DiP՘\:..6TzFhhHxxx\\,V L e]#Yk_~if8yB߷W]. 2PO-2zxB Wv'tqsteEi]e.TWcO֔]nxJ$0#-%!\ksؽm=kGޣg EQwܱ _644z'H$ _"zYFQJ+tdchygoQ+OQI&-Zs4O4._;nJyG| ur)YXYtzl<*Zɫz R)U*e=KRw 11Zm( gAFIm=\biKLj.n589B,UJn7:go>IlN\eg(=]~޾O/8oݮvYo u|9=|55:J5veYx 3h=WNJn9sV{xɞ=[_}׳3ToX }  LlH'DA ,f#[x2.  Ç$8JJ N駫* rB@Ey鑃{Z9E қ£ 2LG~l۔) =tg pۡ{p`w ѩo gNq{JJ +KEkwT*n??׊ʅŊFxXuev^УSH(.TixW rQ>"hDd b  Ä(줌 vCAH+ۍV@Ah!-8g zA'n)\R^1'U S-ܥcH~qYԄ8YZYYӿ/).235 M  g%~XO9=!D!e5w4Q >wŲp[>AtOH[<=#T*eeMc}I@=Nv J  V;du?<̄; |}PNx{H}'\>srSRRXQ^*\äRn??wsVVV~~Vlll}}W.//////.V4T͍/p2'-GPZ]ҊyA|2:iE0@ h4"2Xڈv@AaBV2AAF '  @D"…G~qYԄ8YZYYӿ/).235 M  g%H~Xs2'(#?~.)tiTz6)ܗ2]+)î>>2LRV4ޗ[dT(z'MMͭ-A|QJ+Ƅ4 |")c("8%Ҙ{| 4bîR)]b;(.BVgnlnnq8b$&6dR4XZqwXBMj$ ZbrD0T) i#CggϊU)D$n[KMձ3@f*syI"!#R:RɓExm'O(aԌpLHqt65UlPA KgvV-,6xew1ӭCr²//0 o$z{HD!>_Ȉ v3s!V5r! YUZeʘ[,.;kVDnskKGs"S3/A)f 9秆EnCBJ’җgVB#2c{HBNS<2[VfsEnelvg5S XU {RGkXZ.Rt^q\GGG{{G]]=ABF MPRkl\6ku248U1WɊ d1!t"JbVZ:I,P'o=}q'IT%O{YR{y2,>E^hRpN DB!M)rb0j4xEϛ.07:xZ@X.N['=R!V3zl oD22irHz9yjJdtDZ$D%΋ ޹s_dih53v"D@(gNB};<q Ve% {2HA f$$=Iih֌pUwBgc) muv  )l>2B V;ʼnVT(~R Ӣ}/dJ +"tՕ+'RlhZ>9Bif56}єPpn:<5'Q GYf8 Z?+Y%XPN-!PNΎ 36+5:ygCicB(L-?U\=/c Rw?Bd Pm^ !qqh Z9c]u5]plH>wBBlGI]3#_h v &!%1%>{][xW* IgRC_5֟j.Ldnp 2adL#{;ʋ'brv:]Q]gPl 3&pκӍ ZRgJR)\DH;ﺭbbP4 5UTsN?p3t:lOA%Tq2c~ ❺w]2D*Ɔ&gs<k;Ve@-U}/X.ebR"& q ErX.k>^]v=ty /\QC0l>]RJAݛ-u-|{áV|˒ބ| MǾT2^_|D.PI"d.;2A5= J5z}h/qtcGAgVrD%.=˵Ɗ32! 2^y0P9FCMyMt53\.'AAF AKJ S&K$Ża53]w׷$I)AdҊi(/=rpO[k#a IRahA&ēynYN{222B ֭{3FAv;a_7v_x vc01A l@*̑N/|TDF}IR~~欬s \X_X_X_X_X_^\hkg{qIv|^УSH(.TixW rQ>"bbaGb  Ät\hd @ZDA#h7kAVd XpxG}i"sX 霸 ^~qYԄ8YZYYӿ/).235  A9+9C3"Y^97Xy#.rU?̜"eZBpN΂(?"va*1$XZ'PBCAK+z8j|@)"-H *>BilO5NvJ tb;(A䬤ÌEg+B0gvNZ)"wYuG ,j~̥EղX7*33$ttpt 57)M*wSqiab::Raa2ln.,8!$q!"uN7; KiLn V  ^IuCRuZ645uX<*=k S3yLP@ЊIΚ#QyX Y[v\gvp,]-␠A2!w:NN KIK7YLtea$f؂9**aQJh Kkp8 4;"E[n1~VBX@\*FO;}qL[wTW\FH%TLzGvW;DVj )gh2g\7sT@HRIc0fO|qٓӕTXJԩlH^^+A3ipchd_:U+Zݟ1*v|j=,וՖ9  @ AALZQA[ qhA>Դ/1k+9$)4  WZ, Gikm8\$h  ?=|6edd =1$$vL83{ Wg  Tgw…~3'=%%"j+IR~~欬s \X_X_X_X_X_^\hk=yeNZ@N!PNw_3_! EkdtҊ(4X,ikmD;  0!N vCAH+˅V@Ahp}91B*6&Qt;&dʚ|IqIx#  YI+Z(NҊ(F-"m\<޹Ԋ bO;F `sU*%Сn_L;pBAVic4A iEQ԰"LW]r EIVLE M# ]M_4%T\geyyOIC6H5q7ڬ@gv?j$OU(G`.qXhX1Q:iOm?B6HI޹ *|AlF.8{$;xPJ!#DFLTn*)dA2C 9^W]5=MND[j-F +;>Otwu78 H(J(QdYegcgNqzwfJ8XN8(c$?ɲXAH&AlW?7q6 W*t]]ZEկ~̢b 00z{vqU(? *.(v ʲp4*R"""J?ZY-L޲Z.]<6BI9ܳӧyL+G .ޛg.̱arywG+ zsr^E?7267K޵h3"#cIMiˬ˒e;)G5nQ?MPH^m9}/|-Vn23CQ\Z~\g"""JkkxBP \:947''+ok=8<#\@umggH@o{xb{Cy۳3]3JfY'zg27nE4R64c μk6'{oڱΟkiz#[X_/A˺:8"az2='^&'~3k _= .n8y\^]A1Nt_job}Rb%z??vwəVU6%$F P=wſB̏_J/ZM2 ndچXDDDk$dv@+a;""uD+vkEDDDYdIX [O֮ō ʶp{m цZƹo}c+}]{;у{]D D8LZ|~bT" |{Q|vl#""J?Zq*ǚjkp4(.rv|vMH=F6iV@_9d󫯷tA09Fe" u=wm(C_;TedScr߶ /~zR~@Y ^;q{4T'ً+v{\fZ?828 28Iu#5ErwbㄠTyČɞ#gbwXzܴWhsUB_U4|iyBRe-,o5Rݻ?5kdȯ|vSxLߟ#E-*{cxD 1 A#^0<3x(nz຃(JW?""' 6cʀ\ p/1 lZǹ_9z|H뱯ȒRX#Hٷ>8Q59&='s٥di7ɶp*nXY{O^x(Z/:ҠECӱl8^|voڱ}Ȗ`oE90@8Q9{ C$e"""PZ%:Q5ߝz0W#/]igᇶ-~UW4?^"""ڴho fdG_TeUVm7ZF\{V"`Q`ys5sf9e@gPaCczVȊ[]oP[D`Uxp?6q6Z%":KhUjxi\rJSx"݃ᾣk5; b*,*TֹN]CAMH5C:Uk,O 0"O 譩=ZpU? s<^BAFU+-yu<6Oney? OB[w*y h0٬3-s2bԁ$@4{=F0Q(6ݲo$)9<c_]Eh85VtlUW儣LFj)m Z ҃6~b-{g^qkQS@RG=䰙₫ _(&'`] . ݗo.?td0 icE{zHԒ嵳Vn23CQ\Z~\g"""JyMoMcU.=iňhG|<같4u[G0ԉC!ݮg)r<8r5PN>:: )% 葶SWbhɴLw &Yk_xƛvw9%ϋb}X_$ZNѱS'O "9q=13 ^pڅ <{lZwRE =:vإW:1X RNav+ߜޭĺN5t>rI6)Z$FK86zt@S%U8hQ:vmQ3DDDk%KC}4/zRn^ˁhj ~ڙ:,fkd ӝ8kpN$0RDXu[n~]Z~J ;\X4xR{[Ef#mohh9*..|[X_/,il5#Q0ݾPw_|Z|e.ل[?;=M8+G2r=m`˯*Y #>:_+oxὋZw:*Ui|޿UKI?mFґ fd{_D>ε~KƍTP ..ar]9"=}_\3vD#66Y q1z ;܏_aDDDANn8R' ujln%}BamՆnz7wPIT0U@DDh5L20P]Q9ph؄:j^_*pZauɽ[ˋpj:3`쫮, G#\<3ZJDDDG+Yeyp\xثJ T) F_DCӒVhM ]ʯuEw[GTsۭݮegŵDDDQz'b:l&-:;#؆DB[^vk5k>d*^|voڱ}Ȗ~j{Xm}'g[]3O+xm7GţW~zfή**JLx^L({Js=V9 cՙ}GiY[vyu,`*^P5#C"` V ̮ܞ\e4A1e'W]a!߂FFlѿ:+CCccc?u}dd--|^pؘ4s^H&x4 ~^QRR;;$ɥC?_yE"q(543]OiWa=^^[W>:5?%Ɓ.X ,ؐm`;b4sx:qnXd2ɢdYe63Vk+۹lC+l]aüRŇ-qn|}rrW6--|^sW,ĥYUe)7/sAѱ1bsv?윬H?l nM==We 6=~nr}O~%,m*(iccik%ggi hLaS}SIdKi'4hu&V@ 5,e}l_'&C^(_{l{]_)Y?3mZvN"{^~O[;U|V5|ן֖Tv?yG裟l0<ۻ5??47T,uu{~w~^?|CRUЭݻk~6"<)ܾR{%-+vI , 5]'m;C MmLw*dTʀҝ^@_Ċ]_y>46~`ǎ۶myx^g6\Gv:lb|*02#:60GO4z=8au{h )))~䑇=~>o/M;+[yX_/khb H멑V`[`pMN&íswlnS}x?zw7+m>1H6'ZA$ X7 s՛o;3J[~?zt]c\ܼ" Q֙&gW.xam,aӕ;~. 9a ׵姫2o'.XGMzmb}X_/WJLKgDOgZU$j2 CU?S !";3?~)h%j@6,Djc9h6Y 6#""ZGJ ѦSc6$﫰 rHg`.jkkFUevVѽ6_EIA]UhCʈ~MK.ǻbvD{ͣ?>\,#9{# Sk%r О~WZ(ǿYI3f3jG-v9,=""$V ص`^CO=Hȱ&шsRhъhCqՕ>x# Z+sW_o`r9E@2::{P vʊɦWm _JЁ|vThbנ$^\59bmN2տXuM ̷i.!UvrkȲm;vԜ#wݒ#ڱ_4N- ( ME1dsDDDA4ݾPGʹ/Vd^{gt[BqM8rCC0\.׹w<"FU+""MVໂ!>S+vZEw]V}qC X5Ӎ@ <+d,[3np/x4MV#""ڄhe btk`LwTf۞|l AAf./~ŝ/xR3E?lFDDhnF|7JU3*gn ,_]Eh85VtlUW儣T.H-%""U,foIÅr~c*9l&S]c-Vn23CQ\Z~\g"""JS֣>l같HWӛ4p^i:wlb}X_/ɺ(kA!ǒγ';N<7MOƉWW^jf6?5bn' ZjNa_= JDAX DDDDt $˂n,""uDT妦KeqТ\uۢDDDk%˲@{[Gtм-JyE,""5~܏okgjkLfpC% ^X&KltũΟ_ w,%$rWZ¢7OMMZ,R,0Dnos}}}CC9Vqqzb}X_fIc{?;δIN/!1ZmheF٧-BDDwg~RzJ:đdh Vmx@DDF̱Mh%l~GDDhehvhsȂi]VmY bKGG|%uU,:"" E+C\󪮂UU2=>9:vJo&]mU; ::>d$O|6[+W&>8=5,O5~'j}t{҂\Equt= HX U;|oi~䧂(h%Z30Ѭ-*ls ʱ&ш5 C$e"""P2[Ќ]r\M?8u/*:?zpW̽ݾcaarbWQv76hLۥ=5uDdI OܳÊ"I5]=d Zӹi)&>?ZѦ1} ɪSWΟh@24txG\U=ն?{f=TG&D{=_0c)jv{ H=)QSQXrA%wl*&M1iy߂:jd&{y呈h0VJ8@~kSLkLnO/=z_6/)P"W;q~y=xajfwS9=e{˻r{4[jRWlm*{eZ*a+Rnd@^"""ڴheZ7qwS:4ANCnow}]sZ2fUdJTC !%_np/<&FDDgmBZ3-<BRfCL]\ٙǣL5go-u.1׹S!@79˙~BP}w?XtU'={܉W? s<^BAFWV_T~\=||oDp@{:ܩ5%+ScPʶ 8ҌX;yn0a@$ SlYU]^Sc^4 m6+rHFj)dy [iǚKR-z=}s VkDaIכ0sqPyCe0+ i/'_gVn23CQ\Z~\g"""J'ckY/>r_~kcSԅ԰܇y90?M^9$ pxo`D;yدJNVAC O\M[|{oڱΟkiz#[X_/Ah8l `v:#>|pOㅞ ɳvm[4=v63sj': 7,~/DDDDQy &EpLLE9-!SYDDDk'[VMMkl6{INx_?卷-y[%ZUǏ:<9(HJ=?yLmml¢6KO7c_&KltXЌ}} `45vtvh~DSӥK7nG"\__psU\\yX_/+%YjG5EgZU$j2 CU?S !";3?~)h%&QIf!ҍVPˁhĸa) h*8KhSȿ$a䕓EulH]֋GE Q2 mw;^v-nTXUng%-݋oUUU#ADDh}JeY[!Zdb\˸ʑo=]o?]B*a" |{ٱvl#""J?Z_j}sݓ[/~c| bXlv hDQ\XhъhCJ4tEsé\v>}u<6Or fs]x,_ ݃*;h=D瑏Nr(: ;wسaJ}M纂T.lEkK}#A6^ךMK1yъ6'Z7%wim&DZOmO@=:1t^JԐ*;l9_ʶVt,őe&-,SvU׳r1czZ\`3 ','Obc1ǕS^Cl\bZ)~J^S"" ZA0h#=7< %@?yݎ)w/pUxёD(T^[ 0Wܙ,tHG58w~k~(u]됷Ueʶy2~|J@ş̕SRbįJXW6-Z% ~ ofLvEt U˫;.Fyp"1/=8ixXmK]0<Pvں: @DtaNd;왜#}.Z9rm!? RMF4#>5!6tH€ Hfw!6ZIp4p:lUW儣TH-%""d]}-=xhCW-{*wxW. VJ @B̀JICr @ kSH*HF `P<~>|jhtrWn7UPws4\mmZܨl[J[::()`m(XCgk_3O5\'>&w>|o @l=Z|~bTn6DJ r7+ ic1'T.GDD~tbYTsח0@29qo`˗cM ^+Eqk@)H4hEDDh%X} wGVdzB $y.!(sڳ+φbh'dwlU@"2uMsa],0ё^嶱ɻr ֎e.= _WN\WtnZɫϏVDDD9"2LuHEǮ9X e@Q͙];7O WdWÒlr˫ H&Q@0٭0TH -!JqU?"" ZIճ~wV &z>>;z%/[ @>;QKq̟t$K@O&4U+*e!bѣ?mM f,IΊK-,gk00{^AL+S׺G >`zh˯JX{2W6-ZE7*dptU&Sۦ`x2VأsY\2+6L+=4YL3?w:@l|ў]_bC];1XoP[D`U8Qp?6q6Z%":? DDDzV[]}Ll.lhӍ_utz0WY~DO5”]Z͂d'ݻ'|'UCcJzlj@3Uuyo.|0g!^BAF$7vMpaV}Y]G.OL"( IDAT &egV :F<0;BALނL+>\(fᤜ3&^qWu08'VDG5OIwU凣XӥonW]YFRg84RK(h% uo[GH^H{ew{M{>e;o:qqsFaìd2SoLẗOU8R޽eIWy\^W *zQoYGYtrOߝqۭݮegŵDDDQ`D|-*dok>=x+ê!fXW{緡2'N~22JvVACL\oK.ȩ=$'N5u8 ٧:³ ;XasVQę`m~S7X5޴cΑ-y^/ YpB5gٖ]뉙EGξ?|v ~%aEMIv9 TXշ; zl|ҿ\݅ 37b#mbCܛ;CZW0Ɋ""""ZYlfDR6ɷ{ӣc-GeT:U(tfoP;><9v!+ꗔy[%Z`ZN?:<ԧ戢Wr ""Z#w_}'3MXذ|ֶ;]ifFtL\ ׵姫ÅEo'.XXڿav=ܜsbϷ΋b}X_)1͒V}=owϴIN/!1ZmheF٧-BDDwg~RzJT[ ;VPˁhD:$ZX DDDDBN$n8%/]iSE9F4\mmZܨl[J[::()`m(ZkV-sgڲ "c=mZU[OkOlH5$*oV@fbN{K]N'K(hLzٽ_/y(=5:$ β%˱&ш5 C$e"""P5d":E7X5޴cΑ-y^/ bqU=:tDiS$'N'~Nճ6ͮzyfُ.܉ 7}E<ֱsDi""""X @2i kyʁUTMhjQ-Uǎ-IDDVr$r>]'4/zRn^ˁhǾğkgjkLfpc i%6LwϯqÅ;Hue`ijnuj+-pa'≦Km-)onD"7緹mb}X_/WJL@_pWgZU$j2 CU?S !";3?~)h%J@6,Djc9(쫓VwDDDV'"""$y˞CP v5x:9+7؛/s:)cס3BM'ǷPy W[[7**VŖŷ*J * ""P,54_}t58~?5Ѿ{\^jbi}Rw{ {҂\Equt= HX U;|oi~dbi5΢ɉ?Cg,Ş[V}*s^]5f'xF@ΎϮi"(ц'[]xs_;Ê\U$7E{C{v\DS HDz_\]x@5gxxWLEFHmeUEnY 5 d//QV,E &T_6Amhm^kr:7-G+"""ڜhe[ z2  /dItz=^HΚu c ֊*u|D5g*w=<1^В a5a%h\Y%ܦO>Mm{w˖XD7ex6s,YEԸM;. >Ӌm,i,ygzZKeƯfM||v4~|7t_ DaoN8?{"KEQEg|ԙq^i2ә4m'63N=84N$-KaJDHx")č~"AArw㪷Sj|囷zgMæ#GEt%XWD[鑻+\m=%[/q4jvK龊}]b ^l b4G*>8qVdD"_s8d/8Cw[\ "20D=}Fņeb/.vv<莉k VvGxslxZ"UvStjS.FM1VΒb u]ƭ_W f"22?m[.5YZE^ U8:>|g=w?gu-{:zsps7L]{G QDßbbp l6vw/sK9b]AkvVW~/+qgM_~k kK|>*nγ&9WԊ]5kZ?|td8 R~ROLY=1ˌ I[pSQSEZZGhinذwGRu}qץx\,utuE4ߚ2P(JK + {.L \Z(k|dc۷s𩮁{gmX^7єKDvl*/  ij JdhpZAMlܴomC\ 8K ':t̕{7?pcݷ֮iP3#4mO,Vqʅ{J k]Dzqjͻy အn2ccg.X\cXqJwQ;| 2jf9$"+ 7O 1xBn!3xwBdB-0ts : ^nZqK[ <{u1=rȱ[w23 jlޭ8 yBi/C==b;֏=VߤB¥aY*l]DbQnˇ!yVfH}P(Hs`Z]៫FS&ݮk"p7z `J]Vv o;/_{|ǎlvLX>);d3'?Nϲ0lLx4y_i }x4? @n>лwﮫ{UVVvttX/.E"_ #OWCMϬBjief(|߿K!+/|28?2vm:9.tK+QY.0\zd}b_SF;Vv Qwu­6ܶFDN7Mۼqm[7t,*yUuv۶Jָux`hdõP u{o\tH/ZެkڢIp6E$Uk|>oK[?,Zp ~kCum."z?v\?梯 p?:pǞ;6yў֋?jK+J 4G.={ubΗ^yΏm [s܅GݹugmWEČϵ\V;JS5m|hj۔xQ7Ķʘ\ZV6ZQՎ""co_(Fp|(2no{$ G㦈9"#="]VRǕO͢M]stH\/,WxMV[xc׺۷S4O \sujJ͆13 9Ql""a小o-Օ}*`Jt EDSqji~qbw9-. @DGkꋈa$oU~)W*8UcZh+6ͦ鞪ڻ6]e=c޿(mrH[Gg4B'>UEUܵ.4EQ,&H' HY+-kh0DQ>prbw9T\0J 6>F8080vqH\?l8"v횒57&aV-(ٽ#m=:K,!/Vv{YH=n ~ܘp56Zбndi 09lV9wE|thTʽVlf븊lC8hnlUYLT.X[oX]X-Xrͺ"'Ư۬9BcKMᎎuӫwR]B2S{M=M+UR[]ק/8z/5}%>~Xhi{|~pݫ?xژjWζ^K7Q )!"O^֮1q9gO|kUwY֔" &" =1jI͵iWMK$xXuK$tFEDvשּׂ^_1KܫF~L)pDdWmͦұ` g@楕fݺ_]pV`]#?=:XϥuXMz|:r}x,"|@ Vz޸j1gŪپg)֏VU""j]l#^Nj|EEYn,>~_g 5J(6t篽N}@ qeP:8˺7NocU{ u]5e>=pl^'L_>48fbkR`|7EIewQDΟQ}rƏxQ>~gog\R²nh(fH_]RnS?ig-&_`?wȰp8Vҏ8c׍Q]V4TEcip\֖,aJ+[k\5Cyw:sUh -lCDf_oapLPU|=@G>=KB\jWUP]'ʌY* kjTZ9̵Ri(4)TZb /d5v=,/C 窱\n}w'xFdj"zWs^N{:xؒq/EZ _/}"6+Nd* Kb"_|/@3_yg@)0 7 TX ;T1+(?|"_kR/G0 2 800@?j;Jks/2;PWTz֬YC#d L;++\"_~/eɿʗ OiW,uLks_!3 IeDʊ+_|Yy>ɀ R`@0O0 I}SMUx_Yq|wÒq)_?D  ̗{24 O^__Z Șnf(]nV>u}WƺC?hn+q_|֋˪CʀY߈kY]rvsH{8*΀ @J+AXWl!"_+dX5/*N7Y*4]` tlsHWJ+] A8q͆A>|宴DBBwUW%.!* XlY_ _96dRi)`\C\3_?z3Eci21ĕoqq"_˱| ʦjpʷ`"_kYV:W:+b|XZJS2@vJ+äEN\L|-Cfg]nVڴ>q-m\<"_+?ndRZ*sX}E&_ _ _ B+'|&E!f+䔜{(ܿ1ĕoqq"_˱2^O=5&/or=H0*nLRش=6ٞo_{jW^Jnjp8x BVיmOӎ BPxnߋB⩕!|+ZtU3ҷ+/%'6M4Lqԯx?RVO>L,+7{O>Lpʷ`"_k9Vx)+쬚o%0ɮ'>[X?'zVbc{E\ _ _)Q!ePIDAT~ˬ]S|sxO|.%VY7WX,ng|-2\LJĦTz2~9 M'mY-.Zt1`lrlxă`%y+ {h kwdo=L{6>O:}t[[l|if<ʷXk9V%IvܗgE8q[\ 0q-JF TEa5vXKWE\˱r:a tWŀ qr,"Qn z4Xݛ 䋸R8ŖUzk"j+O6F+dRJ+XWWE\˱D)`\C\yjj:A".Zngd,Vu`tqqҗV k2MֵRiebp".".Zr9%cfުMs0qqqY;LJ+MQ9cj+˥}kEa5|ڸ p".".Z0Üa \C\E\E\K_Z#AN)tV5N\E\E\K_ZLcUN\E\E\K_ZŸ @J+CatqqҗV6U knb-sSZ6cfS'4|r;Zfʀ**"'."."/T] J V5pE qqq-}i*Z"'."."/L K!V:kK+S18%'."."/1dvZՇ+_J+Ӥ .7u%ǫk&_yB3L+du!".".ZJUuNɰ!."."/~?dVw!kRTEN\E\E\K_ZEQNY|l=+Cxf "d?2o3 oyEo"_/$qºVCscOۿ3 o%t~IlO7l׾D$].n]dsV>dsCݜ{]98)qX;9u!9%7߽gdv=c l;D[bp̹\u̼Afϝg/6acSﺥO80z̠-JU1 /s!Kh$zS-3nVEPWV%uu B- P$|iRm38z,!V_RTW:;2yg|OW%Oq`7QZ9lLa>}-}>%΀ dsee׾ܗ28JD2>P8[>~OrolŜ4;x76piXQxi,1IENDB`hydrogen-0.9.6-beta3/data/doc/img/PatternEditor_PianoMode.png000066400000000000000000001470071211146647700240420ustar00rootroot00000000000000PNG  IHDRhĖ5sRGBbKGD pHYs  tIME 7 IDATxw|ǟzER b(VX  hz'7f $$~YfgΔ<"6f{_*X ANoHIM<=A+pWM(p PAA$b^5.j3 0Mف/yuS"2zH#FJ*ӲcX!=Uؾ‰ÿ-\I>x\u>/.X~~'M1 :\!uuq<}?-2Qc#_b#.{ZLcrtuqQҦ fA~vJⵙw 9Yi9icmB"Bi)YFKr[mycUcfq]K87e5M6Fdxߗ~};g2}kVy'fW/K>R>q /?167rnҦ ^#}*BuPdQR17VKVXx^vKZGg2cā EY4&a >A|@Z"R qR=H$*'g[~&d2u[֮VS-[l/bTEZcnb0kkkd4#i+eEF']W/9vwlw_kEgsa/ Uk%7/;1X6$c=hNraFێjzBibwK*n{b"_u8!usث}Hb)}p"`ko.xG<£#+j/.}z^s;(gnZ/4=o5sۂgV?y˓}kOMnNVcrnǏm4:Oz <[/˼yw{yeX^^!iLƪԵwO>6_u7g0^+GS`hy\0xu=]&/~_eo0VbnW\BO ݟePzZ_: BT3^ ]tCf=dY| f͵"O@ͥ}i\U9PW  =2Zsһ4_dc壄GHgyJ;%yWY;ɲЧ[jּ:=7W h[詓1/16j̻_:&ϴמNf4{e[f}_U8b֞uu&MS}uZ"/+։ /zx8-hj*[]?}EdiIkC~`h~,{^e{DQG@ [h_ZQ =|&[;V@50ж뭝j,w{~woX(3m@5W)VKjk+ HհQo=QH@\3s,tkssӌ_v|ܺz.ö\=zɄF/pωO}T e<8?wD2يlh?a ;pxgsUl>7J绿Su,;x}ڃg5WRW CI9a"=f(-,-}؆ҙYQK09 F -4*(hNxg՗mk.տ9&YjOJ/_eXhcY^EfkhV1n{tÜUUGEFv ,5.7IOM/#OXҿ^rmQ(uqX34&ܷޢO ,zm 5um5\Q{;e:;N&$2Y__`Y0m#[XbnTQhnY%k8\u7 =P(F7ELcNiXu5S=HFE`,ThiؙIPM`!8=8N"{H] L5fc=-2kW⫨ڒJs^HWaB㽍13lͺNCCuƒf*Ä)5<[XYן >fLdeI RN ?= K]:dM=R-X=ZgHJ&S^mڝ][Gh4G*wǺYp80</bxyYjwG'K&f " ah ;aꥳ'† vx)%6 2L}ahzvKdP\PR/Cp8ѳS STZZZD lCS>,EMJ%ZƆ,,x36xI̅R1a{j^3ߛNjsșçih6v黦mmo*tvSI2`fMd[im3f75aLB%ffX(hD5liU\ HiOD|78e)3C [Xk|Ueұ K@9gJv"D;d'xL*hŊ}}»in͆fY(#PH[?v;}D*ϙ椱, jQfs?Mӳ6FUmb_(/ݻ{kU0_~ub.W ^~?8g凕GMBQ,t {LXxj+tB<ePkEF.y :=aƶ6۳VUSrR_I:p.(੼]D]c;S Rz#qreXh"oeǝۻ/OL_]#'HNo24 @{[qZoo<Ӷi#_eƤ2:ܓd?D,1̾"v6F~%ʻis'HbYED6fclFزzÊfiyD:FJGYAT-%?Te@89Z+Z6m)+3Z`g*[gh/b mmn ow?͘c{LO"cELb,N_պtU<”N4N_1ۻfWRmڍOY{0yMr,~x50Jv }Uc4ӗOmKr# )ʚxzjcݚNkbXf<|MSE7W UZ4,3%Ա3&GƬ7wxTՕv^{_OԾuibC Y j!9+fU$`Aux:9>9I5NBH-H+Trh8f0S=R_xhvmcm{϶h?72u1q6kd,j윗; Te?)ma'0i,~3l hϯ}vG8#7 m "&?X7`)OٗNO=̻Sx$xF[heܪ`8 8yd'9}r;0pc#b^x`9zbŢX"9 4Gj$ )$Gn9V'  0q% @"m*UO0pBC(*ॻU}=?`UuWf7_Yq[0gA'sthu.o>:NޭZ2V8 j >Aw=:){J߳XM:EzZnz ΤWԃ{uO,*R!n&*MbubfFCu tqv/dow[c5Pc㋟RL%׏~ul)YI(N K!ޘBڷU^{b@FQG#ڿ"ԽZ-^)3jMnI&L~cF DŽj\PUH/Ulʔ*NѴbbYgƪr ^@p4"6f硳IY%&<Ĉ0?Nа w7'F"1%0V]30_t4$ec_MLNOLNXtG W! tW;@XQ֙aASnrt_~  (8g+;AA*AAU  AAW!  m}y6T_>4t"!$~qը5$EF@//FQo5<'=RSk c|e+S,8(YII-ԛhRt T?,Rb~(gԫ$_R)՜n6Co V/g!y|b1"!c#պZ (xx:=&3ˈ?#*Zk9z1_!xr !i(!|n$= c!#B|@<17Ud[߮+Fx_>20ڒuXigrsw]Kq7Nsr<1cԽKzKï=JWC{%`<J 8u.<4Wi,mUO=?X-"[Ru')q9nQ @f00luGр?]2͜$[jΩr9E'7o:rGv^HWLɮde>NϞwmǩްGȓ\[)bLzGWt[s+)NO:3&&yb P=N8́c7D'_BfVUJd-ڊ*B+W(6~L Do_*Z)6/, d_=ݩzwW|?+tytL.; HKn9lՉgZީ}†zU[~t= B2pH[fV_ox0 jp]GGzXь*8Ru%U@M浚y"1RcEp9<@pEJ1~z aԫ8*;1sPn* bcv6H{<AEt82  }  *AAU  AAU  Nt  Hl{.GYݮ\ؽ{… fz^X6S5?q7"@ BQYiaWKJ2.j$SB j.0&v ~HG0 m>oSO=7Wc  "Jm?CMHH}?~|P BP/ j 2 c G?.Jnh~)ek}aGxK1Ad2l ߰&7u4WIԶg2 B;?EǠJ3C"‚ZJFFNֽNK >6z\eRjƕfњ؏.^3ϋ@Ab}G܀"=^Pye9Z }W Tiǫ0frj_Y[(C>I.uxfsN"-E`0hajnC5[s' gA)ZWS_ B6P'貤?dTZ0~dBAPdn:]Oбl=P=[)XTMxaxO?~}{'G]"*65mڴAY/ BP/ԫ-_p9qF{ëoW|Йw9@'q8BW5E; G;<|DKsOLlR1+ETѕ Yzl騅Tij U]=,&vurO=y*ҫN|KEf2ؙg[X^z!a~޾n\3<< p?[ڴ^)Sn "Y^O\Ԓf;!a3#]@\x*KGbG+xgm\5UwIϝm_񻫒 Ub)ma!x{Ͽ z^z^mXejwc f8Zf6Gxr&3Kr.i̔8*, - CjN٦/_rV1@j2Of& Wi7k֬6VV^gZl٠z^e6:1P5;,;rhSk,:3x{tWS@% I37KW|iU[bϟ?ذaÍ{>ז-[eP/ BP/+/Yzk +H%4aNy(Ozm~@q䓃^z^ ҽ"k,?iCSXdlQTuB)\\Twsy6dv"^=[5m)DvFT*Jy;]BPas{7<̒ϿQoOVtڵkQz!m]mw̟g@2}D/a>R!ɣFb/n1:/>}"Bx{_Q8P æE+x)tYݧۋ>{}YݻQ/ BP/ٳ| \v`GqCBTtcSI%@1d]UxN! BSP(*+ k9m*PM(rVE>nV抌Jy RQrƳ A _>#ܱ_ecRKOn(Us ;2O/5@! 2@V7} 璈M qw= KH7+?k͢5sE}]fOFw}\BP/ԫ?U\ՄDv|_9qBP4=Mjbjjv~!~^aAp-%##75&Q:W87iV}( 8Ha,DP/B|!p1QƤ(={>o왮\ߡR Hmv fwB!)~<8%#}lk\&`X)0T`͵UTMxaxO?~}{'G]"|e BP/ wU8i"B/;u*w,ڥlQ-LS[Ԍ"(d;m {eĉCmfW%!QAd_L{%_04 @BR-5[U@ҺzL&0ZXZkdWI&yp5 _欖Pte'n!3: .~t\7u7_|y{Bn;V+Θ5kVW}-[lP BP/ bowU披)Zp˰eXFJ ()5I\X.5}H1rrXZ54MgYܠ bF: zm|)4k]ڑ5]|şꗪlAd;/?(fsMٵ6G/\;~ƾ]skW5t Du'^olzb͚S;zIeGGIYf5[7Yzukٲe^z^N|m%e CLqq|g.ʷ}M5r>7e/GG>YݮfT/ BP/nꪲk\ `1σl6kbO?;Zl~+- M:t6g煚b-fKRR\zZiFՔ韬>K Í t5ǔw  z8zxxC\7$tHeyIӬ{+ xBY^|67>抌Jy RQrQ@ݜqP/ BP/{zпy%q U5_e\soݕ82~ݚ soؑalqL (eΟqhO~˛?YcWMU_>g:~z^u*+ =[5g7o!Ӛ`Qx ^{q3U w 4&f緘R22r [, q .HՄ6^ח'~~|! > 2h|!p1QƤ(={>V @'&͊9S0R_[Y[(C^l1Ƕ9eR^t[*2k<< 2|)}$[O,R Uz/D_Ep8à?i8 -6j!ΠW(u2J'`螯b)mb!xG0/ BPWw-pdR刔jOwITqU:DI3}|Zwd E}Ǎ뭐 H`ͺ̋q%u G1nNTҒrd~bshkHP_,?ZrY] wH$CeQQBFo8G~s|i'XL2r۩Tij U|r;d`#$ WD;@P/B[b B-*#Fj5P$>G +>qpRu'vvDA~PL,!7ލ `0 R"|i'n>A%r O$OղNk@ 4 ,mә<O;e ^GnF󍓆PۧEDݰaCj/2޲eK½/z^zYyaͺ^W+håбCSuIQjBZR/I{ ]{(7Bȿ^O9@|PCJq;1Ȓ$I*q ).ihR}7H^Wۡa.S\74қ/rQ2gsXW@]N~e҅2)#G9 QGj#\]zJSWt  ^zRtŁÂ=áC'l'/(fpW!p2bb2򉦋!? BR >%iTGHpU~#͒(<+)v5U`*;a)rpmX@4tҙy`]EWYL[d4'Z^|K6n\AL_R5yiyiA f*UZl)sC356uʌ 35$_̼T|8L0Zm')wl& sԥɇq)1`m$x^`jKךBz^eO/?(fsM7α"sddX> وǗzDnPYcyrL©S:QG=lO)-uowȆڐWU4dd0cK.,6.VJB~@P(  4&z^tzB{YZo07QS2tciB/\MdG13i)wT9I8zMAzQŞZeXZw1FǀSMۊdcBT$r$1H%BD(ظuٰaC/߽e˖AY/ BP/˞W1%) @՜ei\?4(KkRӊik/Eۦ<>?1>?~DnOɕH,Z*+pVCa r2W,H:PhnE}ZLq}>  HIF66hiAA^*Bqy`1MuNZNz-d5L&#DEE5{aքf͚r^c}e˖ z^z^Vz<:=BBDbh]g][{b[;m+nlOw{]}Zڛ֦P-;_h4?'r|aAP/BX[*KOF|m%e jH$qq߶0 ?WIen5? <|U#-IIqi)癥wrmկ>4JI; IDAT3|FP/ ҃U$G UHqCBT42o]u$f·׿wH! nR;4*4UHҦ7|q|rۃe1N SrG%la|uFD& 2_:8rW[{qX| k`z^*jѾ<\?e_1mӮ6b3C"‚ZJFFNa>!oV4wvL\qnB 9U;6TAu|x`z^;$[ԣ /mhM pGCg193)#ljEjvk_;lV靖SP[[9яD?{ +dG-+̘~ekZCub}X^z^=G>aRk#2_ބV8 --0j!ΠW(u2J'`d7Ɯ˻^8z^e _EE*X8;:?wbR$2>/H;ZG"QaaBPX`8hTS )+=֦݅ "I`-⤬ ]AaQjp3j0MmS3cmlsYݧngOBBBヲ^w^z^_z<~Uiط"4/'y/(]EWY]9k՟Ӟ4Ӕk) Nvdg~^y;9ꅠ^Hۿʎ?r,A\w lh }r3=l|EN0W䵺w5gNh}T ծRnymǭV\XMAAn s w숚!H CBaw :a qG7}Yf(oݻ~JV}v֗wo^zzY%*B .|%{x j:(E vWr,\댶,{cquȔ^ʬÓx@kRK+(w Z:z JV3wn0,E"3ƗB֥͒09AvؚbjnC5[s'7; Ȁ<k4P8.'QaFkS5#<߉DKzLI ty~@BT(rmMV8 \78VAT͐i ¦ګ~rOޏ^"D}> 4zyv*_- rB]Vctɧ'XR(ФdQGTk2KII-m< ][p)FπCM6ޚ.77"ITXIX\?\PewHTW+e3Å  tzy@F{]%Q%: AKLh*r69s Aל-m +DZئ:TP`+I= N?m[^I4|i.KRsm BvnL, W۝$)mb!xGIȾ?<|e`z^Ay%jfS:l6+ n\u\Pmf|3FjcX:t6g煚|:Mg d03  xR[.P1LF8|[ ɛ~gCoaÆ }Ѿ|f˖-} z^e5&%Ņă)кث5Suȟ$P  Lz<`zZSJ  "6Hi7ѥ[9)p ! 櫂C/X`§_e1[Rbbvͽ_h T?{G}lﻒV]V;n\0`it%9H ` /\  lq6]%KdוVXu^~k4;j}o/A_əJUD?$RIFfvKS}wٗ{ ~t[޿O_V71"L"H/kȨ"DP66x=SguEdvثiҋ"H/7c_RC;Ӛf[ Gc 6lڭ1믿"H/ҋ"z['f {>9d_G] a.M+N5'5^GEjD詒~+3f8V\VVYokʤĮ̀>]{Ũ5Nnj' ]pXyXܩӒµR\wn*-Lvfguמ*i (zrE*΁8} _U%DʚeYNimܹN >ԝ,_|/ k׮ ڵVZ"H/ҋ"򭏡?ƱYn^۷Pl{{/VAGgSϝZlƐgA篚yϯ^k v=aՂ1QQ|}/{l~z(c+/䛶._y3Z)uyyNf{UQ0)3 :#N4h}@33S'ZvDg+ꥼ^e=Sﭜ$&^bk9+YG~k_Ke-HUft> Z v;vdH/ҋ"H>NK_m>ZlO2#<ڒ3E}]3u|YB?#S*.㪥 u|D{kvu-,SDKW'yVd]dbu>iIL"[ӱbQ, *mySsV̊7+¦7e7ti6̧e:^7X/|`5qVmbk.S#d6CGh2 H/"A@āgq#O~kOo-%ۏ7xF?)1Y~6̅DwžߞinpStsWֶu*/6*5B OձSGY>QIo{}Cm~@֞,9vjTRnw .N {M =UF_&VH/ҋ"Hތ_5C :P1s`GoyW![G˗o޼98Oڵk_x\kժUN蕋"H/ҋ ȷGeZ%H | sh ZzH"H/ҋ cO_d= +QW";ngT9rWzy}/Yd-r2ȃdH/ҋ"Hތ1TP#< "O]ů폯ΗRtOAv1WgdݱL [}^_Qщ3u*lm/~xM>1gT6lX~}p+_O`"H/ҋM}mei1u5熝yILH)D*޻{{ZOQAWEׯ;Ӯ"B3 Vvo"QJuCA\)<h{;[ޠg=0L;e-K5{:(*:! *b(~c_]:.'L,H/ҋ"BR/ʷqG K*)?5+ Ҳʚ~[S&LH.:+SEGn* " [9#l<|`F2Ri+<*{i:ӝuNd#%UOH0DNWU1zf)A}n~_#tZgs8]Kp~ɊI^^|R?3֚5k^{+Ez^ہ>pISDx5]EAEG[Uݼ|.]`&y4Qj8xl\x.mzcVʓNV{U6FT )Y F7{4jv|sf^'W8vgNv s[x0]M 4Rۮ Ư?6ISoaoAAԮx#]byꬅ JnFiNY.t馮>gڬ&rR].N&;FܝQ$͞1𸼜RnK(۹\G[jRg16( 1lh48[^1 vUi=UfG^+75" cșRgJvW~_u%ϊ0?6|١߾A4Fcp3MnֹcRnPLW"SI%Jì-nZ{M{[8Y5MaO]gљf`ɠ5Z0AEz^Ez}'v#7`-q 5D_5^as|EG{@"®b:2pFΤ`ygCGohAY@t69k6+x%gpն>vOΚWdL.W Z&qQ H/"!s^^DAnc.D[*",nkpA+8+NM>:>Zqկ6Ěiq[^lu`lkc"#:3|ު7 Zv5kքdH/ҋ"Hq2I }F% W<oð,rbgV)Q|.$FʫVr7Ej0 ] ]̧ыz^,PnI[z Z' qU%wgLj6j]M+:4)Dw|VJVQXNY`h!Jdp6(5xQN* =#{dc/_KڵkvUVdH/ҋ"H|cƱ qlQ[xW^ѣ7myMǗ[K$(((Bҋ"H/"o1cC. O}32y˝F c*E^8a}~bKY}RY?zmc׼e-HUft> Z;vr^Ez^DDFfR"KmT9ɣ O\zbMzmV0~?$'~NHA\QH)޻{{cC T#D7,EFM59\lonMȌyqvӶh{6?iP@HA\ivUzF+ʤ.(n(=Sʝ~T2p0/mxN SKxi/ 㕱t9)߼u"""|Sy晠]^ r^Ez^ddFb=%NU#SUn!))rD sV6zHLYsr*eo.DK8UBvznRAj<_yt",wVzzq[O7pd1 |U 5Fthf<ׇ?2z[\7𻷄 e"ҋ'8CbN8Km/jqW[é ӳ3E.6KIY7ݐ!gH^tUYZZjNN3H;kiXedjsU fFYϨSgdJGgavM]R^/&{xidyw\&cXM]m*^>L;p^^^ЊkY&$Ez^EzUƨuvΔ<3}۷uK9wܐ&͈ժ8*iaXZ& Sc$Nx )Ȥt})66@l9qsnYL‡t]8ڸB^9 -=Q??7.jqh`n  bvh`e5.RWNP0X"#Un\9I8---eNF7@}S)µ)U\[nnh£)*9 c9j!Sv9"]ǟvV>o=0\-'^S^cҹv/gO @h-< wS_^CO}3r;#& 0GUu_6˜`^OMum6"eV}- J>DJ/A?O\%1^~_"{y{IS +@Q EuA3vle{U+W6mS8_}Τ镧W&˯5Z0AEz^Ez 3{woolmt\dTObzQfj#Ӈ)vж vi΄O V&qQ"ҋ]u{2)0@Tq#:d:jso$@@2(K-Tχߩon~N)1T#R^kK8ُ܉eO9O.[oe"H/ҋK@NT"[RIFfvKS}Ylg{"o+EW+_sE!5R@  A" Q( =#0ʌQ>w'%c5 jǩaABq$ DȢ"BիW_ybGrMVE}8u˗/KڵkvUVdH/ҋ"Hcη#gk(*D'j_oS熋u[7w[v㕗y:Q H/"\ӝj-~%wF{m_i-"足qK$(>#^OS%%UVf$OJp֔I1S3R;h?gS_̐}X^Azd8W=5?{͏~w=;r?wqmދ*%w(u»o[xmd$TT="u+ׯHZ"i g*e5OY&:%|cK3͍P%m뚧}RZk֬ r^Ez^2WIcbm="X4C돷غDQ YnwISDx˥j8hЦ<~߽TA1}`XE˗OKjK3 6xi XҦǫaoR9k5\oH!FQ_XqY {3ZZH"H/ҋN*Fn4ZZokmkTuk6koD&­$zJݐ$L3piD U5z&@fmlWbJ,m}Q 힜5#:*%gk]:mC/ ҋ"H/b@urN ,:X\thvU/hM~// wEtVԜmA@ЕIt37UίjUTk6%myvӳՁi[^oMv?ߜy-7Da/\Ez^`̜de?m8`RC(wIbF'E}QQ֑3]7VW9E MﰻU@T7Zo~fLLveP)g%E.g(JZ*^ZKPV"8;_~Kʌ]|y/%k׮ ڵVZ"H/ҋ"˷>m~_gQwgɳv*-kJbinN8\/]q'u~Cw4If*ܲp $:z^>X`urr\GK=C!p)u4i|]Kvv7Ww_ٙ+o5I^>'g:# Үb1ޯXPWo}6O8+}"V03$zTMn!EuLSN%'GMzjɑfnm|#:E ry1Y8)%%NIo=ְ)R!h[}:'tO\{%hLr^Ez^1sΒa1vR]ܔ0y%U" m7`I|-M}r>.=FKX"[jj[aڈDeDrY#cQ')j m)iQð `(7W{M6V]k͚5!Y.ҋ"H/k_JΙXEth<;Y|y/k׮ ڵVZ"H/ҋ"_bj xwv(uzyR(** 2 xNM$#bqǍOOQYWOtʷ>jsh.0"H/ҋ pa UÜg6rZګZ]WTRbLʕv%ZC/wPKXSlAv8C4D2^DĂ"ҋ'@%z,NkBcjL+2 Fj<+GpTUַy( FIb\x7jDsDĤYܮ~gA7rQ~O^Ez^a^"Tiw{Y-uݟzm;KN7v_r}ss ^is 0Ê  ̮/;yuUR)E}M|?v6:t4wĽ\(TsAz^E9K3]EA]$3XyT&0p>+Fvu>#Z^5k-_K0Ez^Ez j$=RIFfInt=/x Or^Ez^Ɯo{Gv"U/0Гg~>oROWiozW=[½߼;8߁\kǎ/r^:qF*ׄx Ez^7~cn$]ȝy˝KpM߻>~oY!z rq9C>bs˦0/FCgE)5A~#@~\+TC~^UN~z#[]r0*)]>#)~jVcee٧L2UUVmyqi?_"{y_>~O?9W@fVЮ~ΪCeF%".]uT[Z ŻVt4V:9Io:D(zrE*@D_*1&RוU,?/vէoKubtN}_;IBu=t)gȋF{c)wM=/EAA(`+P^ׄ.#x= '݆L pz$۽8]*it)BIh҆wުv&|2  $G[Uݼ|.]`&y4Qj8xl\x.mzcVʓNV{U6F}ӨpdNi &]5BXQmwvw`}qϝXSf;7nMߛ7n) ?<~U,<ϋ L4(9+n6j1LN9kշ.JV1N&G;Tne9 Lz)zY@5ݓKL#'K#yCJ]k.S#d6CYJL,72A1*șRgJv/]ܻoJQgŞ;$^ys|١b.&UGULm0W!}ŭx9 -=fU"/=VOYzo{u5a?Uj6E/c&^p<\C\ "HKjW1rI Z[NRHeW4{EQ6 {D&aFJ'FIUY37+2%mWCL1(-)}:/{͛I`=\!"KĘ7n}E@n`[:2  Y5 iq[^g!&B?@~ҷvr;&VH/ҋ"HqfW6&5qr$,6^@hot=`̘p9;5R*LLK2;\΀Q5ȎJAĘ+o)?\0VOss@GZHve7t^$p IDATXp0y'WZm#j  zk|,پc[Qc Rʻ*6}qGU}V4gHm  `fd>+|XCm<ȋ55s끗GuGoyW⡆@8>8^ïbGwu?\6U!H/"j-~%wF{mk\t,` ö"?Ez1NX~*#U;;_[CǰDvA֚5kB\Ez^EN.2#~FՎlOQՔNM<)/x}Cj" ^H)޻{{cC T#DrQq߼5yݜ߅s]c:" ~vUzF+ʤ.(n(=SV_88<|$]6hZjUH"H/ҋ 0|̮/;PH%~s7_<2GoU/c>p7GIPPPpwϗEzØJ4P 1 am}2gdԗ;#" ҋ"H/bPb(Z~Jk֬yѧkE)5̒gA ]kǎ!Y.ҋ"H/k1O_y0?~qPeU2}/o[Y %/z?ϩ + BJJ*HXqYYeֽI1S3R1t殺mY@y8iۋo=vrߴR( 1 O3mFFF|^@ZV;QUf,=E m.|UIoݳLHfzV|%`r͏J QRQTR"᫪ĘH^WVYp| >7/Չ:v &깇~ +\L_0 ̓o% #&fvyubVn &8\N^@Sz.v;԰8~N,{ju̩W~r{3/rnnnЮx,Ez^u*0}qc_;TbQΟfb#g̭qaXpl%OVR&ǩ%>[{JS'NɞaT09+bNgNW4RUStj'&hImWyʗ 6\sknh5Bk.o3݇PEz1N2tQxPClHTwB=%Shx!&]5x9Q\`Q٨6u)7_]FvItN7%'S?]1,&e܁aa+VWKyg꣩$&^bQtO]?0{u5԰ !牠/\Ez^8_ũ[ݯ_OrP)9tyOs6rn^:/L>6&ΌS_9bY]ʭѩ#]8Yu'UIZ؏OY|j]u'lqs[zF_zV;+wiݮ?( >^|A]6hZjUH"H/ҋ 0|3UG]SDwCF &5&xêtڦm'\GEƶz%,֧FY9dOqؼyx0BN蕋5Ð~ѵS_;Ԃ puրˊEqhu茧nSSVo0`6{O/pA Fg@"_um 2m~̕H"39!S< fc`!-9n -Eo lx˄P-1Ç=wñUUg:2g˝uUNF}5iZ(=`쩝c,h>)^ 6;/z-`ܵ}"bA闊3.G`.TJ%iIQfhP lw'wTY]}ֿ'I/RI5\gƍ!Vn*KH/~\}KIUۏ8=8l)lfե/\+9E h;w.aA,uѢvd0gcLK7t ^yG_oI3Hwa&OP-Wo6mDߝ9mTuV*b&} 3C0t=xpq:mzަ*~{}="U{Ӎ77ǘ5\f `8N~x5²䚸֭[rX"$@WzI+E1#GuGw{>zzS~ǹGs t5g1יߜӵ+w.۵ t,czvMj RwX/]EDLYvEq@3v;C\D|5:z?KCVg8|`wu> !'qس+k-9pBcwA@ ĀJD&%]l$s{ot #3[T_##8d:j3  ,Ի 6^թSX~vvl|oZ]a_x? qb`B\VXA o ,$$fV+\5cv}/~F@\dT\i "o]5mm#7jIgdݱL WuA*WTtL_7v Vxk^Ik3[3D 6_>8߁ k?W.ҋ"H/+= `TFFkαrrJNA"ddf4]-y-_է<̟~2UAhU v[Ȩ"DP66a8㤚曬͔ܕ QFﯺ.`!wٓTIADh2yQ;= `|f|5Z0AEz^Ezf Uߵ]g/pg(NnjcϺDN3uQn3ǿ9zʌYiUoK35#eN//o?2?;S M@z^EfTs%y; ˙{nwW0%%UOH]"y+֯HZ{c™j@YeͲSIiğ=_g%&~Mgv؇HZaÆ hzC\Ez^Wo_5"Đzӭ3z"i812{lYk-_>'MISDx˥j=(>7JK9\γKҙ'Z d; ap_oẗWmܸ-;_S}m|Ӗz|{y'Z/r^w\իW;Ơk͡W~{.2rSe5NZjə `VU61̅EiZOrLaFD[MG^`s+֫z*Pd.\sQyUCRmcUr rxttBd*h:b[DJ,OcXy˜KL( >̡ Ez}^4.i.5upI6;pDp{ޖZ;MLtbֆsvȌ *͖Ƽ{+k*j@bAfrBu_uWWjbִ-/nz:0m~zˋ1U$zB]7E־:xZti2_sY>, nߍ ]kǎ!Y.ҋLSn2}.Y晠ʜ}%U#Ӓu'*Vjc.)6N@hor JäTvjGrJ ڜB]3-Y:S4?0iׇbh߹R*LLK2;\΀-5(:[56oN]0}/o[ˇ'N%9Sgڵz or4Gco W$]1vpmX.7iR#1嵷5|KzZnsC;s?>0+DY.Z[^j7{[ܫUkڛ6n$f } va`>W^Ys>>_\5M&>fQ$a"}KuJ6Vj<6 S2i4jFQ{ډsS7!i^qADnv,jYFΦVʹԨ5_`,8vl':vlnHpX"r9Ѯnr+5+JӅnһROTڈj  a=ߧn1eT ~,]vq:vl/htљԴtBIh$g&};f=٧ZDnذA(l+Z6mJ._z# jk*DT\TpCˊ Q_]ɿ>FRs.geeegg{sΠ_K٭&NOqƇ$R UWy^g~⢂>5g*4qO.-^e N_1[,Av DX'>EÌ>u>3} >A ~/7~b'(\P_klKg^/d ۶mm@/fD3? rg-P[:y#>;Z{(iVVVj Fܹ3(u/|Âwsƺ:$nšj' ď| u+X ӅCu^Nv۷&Iϋm<, 9yU}V&͞BD JJ*jlM3;uYgxOOw8m 2DqT,yaז!DDn:˟|E tAWrUlԾ2DsPw"N"ODz9QբѨHw,Vk>iWLJuGQߝ}OdS|2_ ~<4_`_Ejr 1䌩C[ֻU kkDʩ3f%F 9-sچ,GHΘ*ewZ5$O[4Rkokri❋#z*(Lܗ^ B*,Ys?ZtW/ FUo}UNGg2z,=Q/+ȓ/[1ELdkiIôQ)kU'k;}?:,Tl28~}R} u%j^Pj1AKdU"\x|$jY踮@FӅ)2ܑs<\-&>D?-mAN}AL#4,X8EEd-.UbE;]XUXNV^;Tz*eXuO_g%"FM_z8J)EI0QU_ԩ23?L;}ϋOJ榥$FEvZ-B`м!֨ kU~tKcQozt1CT ҉8[ŕʚQThj {4FR1$ _ċm՟猧^]*d^~_pBY u9 *?-U6"M߷M3>`ِHYk^ғ4m&"<&2Td1^+nv3b<姯trl/ƈ߁L UB*R2 ۝z+dNU.ZmYYZ"bu˞-|fǛK/xշz-x,`AUnn9rQW ނ_ ~K:r>E!"Fhcs6Nӓݛ"R`YϚ2 ;]ιv:ӧ#bCf'"WsIޗ%Le_5)^] &4/^=V IDAT烷ώӊ]k%V;Xu6jEHMFH  Mꭏ[>mZkYc ;~s|߿#Vi6{ReB]]MqC#◄ 7`bg*%K J nLsmDyvT\:TqnU'"ǿ$ 68|tٲeKiӦ_Kz{LjZB-sZ1C8W_{wWaijסwWЇl#_}W&^୕_:W&64n`よAmۆu_@٭F*.?XP_qnJeE?+U{{]뚟>p.?Z @U*݈kk*D4=uH%|'/3UN3?rqQA=i;?f>}{KD$k@νs΀MH] ~/KD_*pKĩi͍u5ʓy#d`D:FW!"+{ r4L#e\5u֭[K9V+zr*d6OD$Y~sp~BuF(D F ֙w ~M ,\0ENyY'~cFN^aayUqgł>[NM}ZV'ԉaskG]wqڰ)y @νsΠ_˛W3/^Y!R se%->2"qos;xOO/'"Z45#=jUTOdɒb):Qѩv 66le˖-֦MR_ ~/#bUV A<;dac:ô$#V<2]AmyJ5)B-hV%cwtԕR&"~Z\֎SzFCdΚ )97vZr]=٢Y7&H~r7cײ_o{Ĵwޞǘ܀]ȑ#A ~/!HFDd)<}8I pVc}^1L9g>mv'bH^$!И9k9&^xۂX-nqN^鉫i3t]X1%3=\*/]X_7?1c+VERjwIJ mNٯڗSaYsկ_q1R\.k1]ljWDd:uA ʔR#̃b=uQ45):RD%Wvtc)6 rL;3{ˈ$:GSI: u6hR"V͜93`ZjUP_ ~/͘䫆pna%sWdFz?~ Kf.Ҡ\QRQUWR]h9lrNJbTY%dٻTu*XO\HF3c%6""S'q߂u s_1W;&QdFre<%U3#d569$i`|?3RBje)Z˳Ec]v0G`_Ғ_o):a!%)+},DhwnW{ Ib6ۿ?۱ЎMnWqw:z_(s9̑#G-_ ~y3&*2uR=)Ӗ6eSɱ !%)ryg0U2"r7^X^dl(g0DRΉaC "O\nyiIѝNa~.xR*D47-%1*j,8aHP3z-kw`""=}4~  /L\f< gr8g?͋ɓLptT[>Po3Q KWt6VfMft1J%"k=GVժy+l§eh+IVj-{vҎ7^c^K?Uê 2~cuag55^)oLMH 1{b.íDE4b"8[5"ΦRvzw@YO1 CWrOӓ=? ѓ!|~Wt֝=ZwIvyָ}q|>`uTWSȫ%!7gIX/ˏ|s e.`*fa$DBg%|[ѩzm}{݄So}DUmM\NX2/v~vGl?IՕ*+++`SrΝ;6{ u/xvS %" TK^-x~Vjz" RZX\Tps&,+2DYɈR}=~櫦θCпr: {`rG%_ Sқzv֬Yf͆'RGo8sD3 ~/5ya\h3dOr5CĈCuCu X'M0*/|ѿ˝TWgeeݻ7`ڹsgP_ ~/*U0E[t.(r۾4IB|^lodH*|Pr ˫LM=#.Tiݣ1S+xs<6_Y̵ŧs]eV9cj-M՗ ]0z ˫^{Yy"8ݯ|Uch%5kH&3ɲ>~uBtZ%KlذcƖ-[vM6._zԯq#WŦ_O{Θ\.?;MD _˃K;K%Dnc屳M~ z"_l֭R\0wȚU'ݽ.E1 7Nkm"+ &'X!"/眮q/VDψ;cN7N(XwO)D/L)k--ɩqLpj(wkϬ݅_%Ʌ1onjlПJ)K-iNBDXsGFApLg2xdlD$QDDUv eT:\6]pD;-"鎫:"ՔTYc!Rmf}y"tu^'iw'rZs~/+I U_ԩ23?L;}ϋ2G ~X/kU]R"EʄyE_N|Z+[%ɫnQZQއ]_#M&S'/ՄCDm?k4JYʋ3Xy CګMQ#DK21u4:\}aS:9}m‰Cd G3S5ŢyؼYK j5Z&!|^&FѨ"~](>b,X/&0򖪂bΉW9g=|6Ƴ!ёܫ !ZzԱFDD,k!缭Z^yr˔2avtUW_;WnlwT"'ܻl/յĨg8ukyk>~2t/Ə{.aZ,<{BOC K-TSU^_oT_xS^Wb1֋D&(~ϿlYq@_zaYHYß*{*_8J)E7/1D/g_?:q@7,+2DA>gAJASinu1 :11 /#WZ1MOqƇ$R U7_t8/ĉZ9V7?۱ЎMnWqw:z_{T? ~/'_en7e<@D5>^&ZWedF*7%:qNnJR1ڑTV!""GWZqY`\`n7M+8G OP;\P_cW Mʔinٳ;xscO[*9ZyF~,X||ѿs9K>GJU3-Bl*5jGb@sqD$5$e/Wg Cj[By5$$e1eb_/ㇿ *.Z0ENyYy[~r ˫87{F ],(.ۺ<5fvj[&"Bښʕwnt9{Mۿí}Y-XE،32#CDn\AVV13UDmeO`~? ˫^{%ODb f$r{&Yv܇߯NPTϖݽ_:6nuo޸ deel@ٹsgp._nWp{B=Ap.N[2C8L&AdsӉ;.ܥrwj24!ֻ%anI[VL!"XSV}t| htN*Oo'd|jy2"gg,lpBgqDb݊V+-R&ev\EMժd,񎎺3WD$OK[\SzrS#] sTm^pLy6#L͌ D;ׯ疴tIKcQDdT5YaUKWQyE$ =H #P[y1RL~%yGy7=gqHFDd)<}8I pVc}^1h2'tDX9Z$6g c4ko["-i+=q:m悮 +d67ψT0""aR~w9;lrR&cH|ƻv9CD$QȤ W|~t KbVuJ+3# %B;C>3WB܍mNٯڗSaYsկ_q1R\.k1]ljWDd:uA ʔR#LCg=uQ45):RD%Wv_1g+?}HdHJH[2U0;OS0$-_%#jlv=0bM)Zu+OL`D4x.3 œP,q04sD3 ~/5QnjX*ʪ,1 V>wEfDw"UXr75s5O抒R8KuM8A:)"R%kג$?ʈyTD.a#=Jh̩xfV)cu:z:Tz*2kA& WIk~c(2Aԣ<%U3#Bo.)u-|g͑\\fuISҸna0U i g̹T{+蒨'D3՜j^d$9q"ك0-)ϫs]{>kDꄭ)I_K¿/^>zLƏ 99Z=+|<+++`kܹ3(u/ !%CUKL[ڔMaK'*t-= fdj܍.׺$11^Bn| C$5~6**^# UJmZXGF$l)$(M/7Xy¬xbnL DD2Ӓb;B) "iuⅭxngmrx64tZWgr8g?͋ɓLZҽQYn@MthF!2,Y^ҥ&Xuš5ql{(~CooSL9sj[0G<*1CTgD g+R٬OӲDDlhD*Vj<dɒ[NZt}aÆulkmڴ)(u/꭫ZpP4++nY$r<6AU/zz>5.HOsVksw86|-w~'{uMPZ~/0y=DT[S9'T#Oeܮ֊ 7qz}׳^s쒎B*J,zbC'&X/;7sϣ.Ěsq{L{&;>*{JT=@݄h*iVΦMJ8c7rssv#G._ᇁ/+meN l":,Qw̕PwW43c%B&OV-; `B]FaHDT\Tps,+2DzmZ-β?۱ЎMnWqw:z_F-F^o=<2:<2.OTV0pwOB2W<}í}֠.Ҙ9S<[7(-l3;tތ ?IDATX~ӯkȷ7s̀]kժUA ~/@q{=\z눫paB3[+Zmܾ?U3-Bl*5jGvU_~.G~Ż:*OmnJWon{gzXkP먮ꨩؐƿL,] ~/qÛ%7=뽒ꀅ)Hl޼y-KѿgE(/6lQf˖-֦MR_ ~/޺@=W!VڵsW92V, rlVVV`sΠ_K٭F>a'y3/}p4o,;/Ϳ=,0-vd>?S3na8y{O._҂so85t`P`;_]5! n @\_` tM6]_* 佡kB_U H@&.+/ yolЮ*uAuxL~*0 L^A8_7 Wƿ@dӅe ~!`l0 ~/UA *$ ]MڕB\X7tM6]hW_ q@Ђ  {CdӅv%! ƜMH p ӥ_MuwZ ~Mοx'_7A7tM6]hW_k|dwXv ' _k2u\u"b>k3CKcq5vٜo<ϽsD9ρ6 ^Y9y<̘)dDddD(?w)(At ,n޹WX߆_ 8li󵵤d"j佡kBtA8&cfv _5:xmߍ<쿩9el6zfz{Oo&]MƗAtCkݫ{]yxKGWm.G}3{CdӅv@.UA0T# n$')uu\ߍ~+|/ ]z t%nr ?NJm;n{=|U`~HD9пjЙG 5Z+3䁶ެYϚh 5tk|ը[?ճ~}dz^Xߕ!W'=92dc=\xbf"~Q&..qg,u?>>N5tk\U`RV ~ H@&a `"}!U0ʠ㊋/VTT Fs"W]xˋ?QDЏxۇHG{\N@ /R EȲ[>qs/|FG}g2v,3WZIENDB`hydrogen-0.9.6-beta3/data/doc/img/PreferencesAppearance.png000066400000000000000000000516471211146647700235500ustar00rootroot00000000000000PNG  IHDR*: pHYsutIME/ r6 IDATxwTY7 5"ڻ" EQ+mkkW{ RCM A$;7w3s'!DClb'teg(|@J9 r?JY?0~""9 ԫ[ۮ-A{?PsutmZ7'"$P3h.7aG "򭣃=p\Qu$Sn ~|-fOos8™K 1?C ?'9?Yq 1]l_UpF{ dRII㇈\^ۿ00 ۄ8~)BN= E aͮ힭˹\n%ۓVz/_G~tu~)4rr޵CW}==X&":Q8%-IT ߣ[=yڣL`_Q&%$&;5g{;yO?zSlcb}2OvUAzW9y^q%v눮}P БHp1~aFJZGlYBCC5ԩ]ç?:ڲH,lg<U{{yX[Y[b4_qwnFlߦiNm,er'/l;Z^nӨAmFlvp1&FFDĶo{>GDff&T☐|uvF*(ʛST& qw#*ijcmelĿx{NԱU f}XqCFΑH$:ֹ1?+3!GD&M[б[ݳT&[~G%zѪu;>{*w+Z7oZj-o/ɳq/iKW?y1[(jܨpCCK6gæm>u<˙fת D]ϧS Ԛ9wibɳ|/=n.0)%+6 :eܤC-hUaiצIͻ/^E&%hPfp¡#g-ZӪyOӕ CDfMCT(am sSv*am$Xlia6x皍|܌o)hQ0}ذ~ͭoˈ##ƍ{$;;[(?uizӓ=efeIsB,IH$HĤ:RfUnemjTs q ݾMSgUfDD njEA>T`c"H H;|lTf*g+%E0_MT/AMC&Խx#Hd2Yre|̬rPsǞ"{liav*{߮RI"JIM}[vV-޸#r W{I+]=:s" 9wreZ5+N\Vg5! 9ςFFs_q-37TԓXJJ*{G$Q2\.e|6}4%' }ODw 6 2 Yq8yS).! XgTEK5ݣk m\.10~@6M?~Lz*]ݻg'Wg"s^gQBb ;%!!YɊf9[!.aDdaa{Ӄc?ִqq QHM|ykg/ިPsǦg0 XiiD$Hutxt6=hnޮ’y>a #37m[5ٹH 0LyG%[dB_k޹X"VǬAm;Av6-7]m=!HH_O/3+mDdei!.ʵE MCKS4k,[WYYukWoۺ+7/{{Otuuui?!Ȩ錜Q m:Vq_yilm?7>>1:}e;'g者KhѬߐ@NiٲYtgeMҮ^ 3j_6gXYY:T}羞ʖH$6eȵ%Z~Qq6:N^leU;px߁ÊG"W#vo1ov-Q,?8N&v\{WߊEm܅riݢk+=)'//ҠJsi͕j!OqrN/jլ`iKegOjM_;w7'|?7 ^Fi$++?IIw7 |%zI*9c-(uo_CY,7+¢Kwm]-\v#,gspLt?wY ,.z +~rx[/W(3~u2:&Vހ=~۽+fzJޛOOKnK BkntHDE@ KeVSnm"|:: -""%OGyǏ]%<+P)""::سEw@C?@ ~~4J\r^vl9P(k?7J\y*Mu[Ex Jc9J#vD%,?QWepq(A'@\?E" \\_9r6 Aܾfogw .[5why݂m[`~.~kGmVxLy! ilO w#]Y.\3`轉/ 3m -427jXiF*񣫫#Hlu3Bo8wTFfcSgFFkW-yl#;7ZLP^7܌DǼ)]DCH_GGg@owB+WwrtP9}b5=G}Kw\+dM5eDFpiTT4ko86`DMx<޵ЛK E:'9%.Ύ\[feegeeH.n)~\)cilĿpX*!7ъ  lX˽}mDb1ۇ 1 1 "٭cLMDbq{ =LDۺ?4ZU>*Hdjb<ԯOU2wwW*U]<ʲU򰶲xav'jk?f1͛2in=]tMt0n[{ĤiɳoFF)T^Xm׮0 㫹V-9έKȨ詓57Mzhei1b7tKٲeD_~PqqOG6nXLC &;̤_/CC_FҍC&N=D:+h ;dr3zA8fMWOwŬ55sr뫹f܈ S0:w ^2m eee?xXi_nܴM(%sPT؍[1b(5UmF Tn`h@DYYY͛CSټeP(Ě+\qkFFD"9rdfbbܶu57gffeggw]V3|C" l!oX!p&g+%E0_MT122lܨήGBS6t%[m#AV7n> xB"Ą_v=D" ѳ-7RٳXfVD*9w!NK{`\=$øx3Ur\911aʲ^ֹ7;(M))HaVg5CqttemDADYY٥+|0q 6%" 3cFN^ 7Zx<0p8bUz[G535%dvbBBA:{G$(7 !~G"ЌL"OH{^G¤dv=/)[ֆnaa>sC'H֩vfdd{ǵBm*Ԧa) x Q$ַp#"rvr*e~$%% KĤ ;i -=TW]]m+D}u(h:=M"HWkSsNj}!==óGW.kSzo?EB:snڔqv7Sr=AڭÆ[XNgʖH$6eȵЭ`~fflء0φ iW5Ę,6gw'Ul\.?s ~|ak>^=N>W~pSYZZt҂aȈߡ]o2n~8>0dnfZzS u22/]oo*/0d_Չa(==PJK˸izz&ݮR)0ϚK g?Bȿ{ZnsЂ%G ѓk`]| K盙fg /\rg¥fL:yt?ի'n9}wOiPNf~1t8Awm`h` x5mhSa #9d-zzɇ}.;|L [&O 8.TzΖk?Hdѹ/H<{rVn9fꦤΜs -j Цz 'P!@i\qC$ ? "|(lD|P(g?'0Px䪇s1j9\ Ҧe1?ׯF,A{!:JXvDZFP:+-@0 ~^ ի[ۮ-J!(I<#!:& e.?Ȟ)*>|PȤX~aDڎ? ~Ԓb7k(1k+3`a}m?%gu.ȕ䛋+y<.!Fޞm˹UcFlф] tjP%%}>Bfffp}/G C4ܩL.m3SV:32gef%8kʿ, ZWF|CkkKD2+hSO'JFퟝ-:r >MWrch~\.'`B0tٶ0rG)W0#G4ט/_W R)q.֮mbILL۶nѧffwh֌I =hӟD"}ͪӟE 6i#Hd2Yre"b22TO֮6nÐ -<~ޣ^Q~r%fDNIHHV)R܌ϛipx<>+j~<3 s IDATπ|=11iϾCkWkմI#O Qy699ao!))XP"s~ZHݧ3S +nsD"Vc?wN.'=0JmL ?%5/2DJDzYDdff(0IiX^p`jk~ {?66e{)CD&=u~% ҈Br_<3TҮ^ 3j1YYY6lPJ1'tttxÐiU}ԭ*7/" B: EժUill,87h1}LH<|+hlޜ>s~AWv5Ѳ#߽EOO711. b}QILJ޾b_V+qRb9>~嚭DLRrJȹA[l5vݲqQBBrk.ΕTj={żp|h*Nn9fꦤΜs,:PBeI f;i(ѽ+ii|w } p?d]?~+l_q{ߩEa>g7zijVwt?ztز3EOw:y=,$׺$:ZO/$Ϟ:=on0E()kr~V?^w KJ!`#|2g?%O0>!~Ĭ2#~~zx@*I- lZ':&P4oٴJɏLˮ"K<7B  ~?@ ~(1* ?/ ] ~?@@S \r] \9'֫[ۮ-:J{FJ\y*Mu["Ҝ@:&ĮgFÈ?Eat?QWepqI4Jhty)Ճo͛5~tre 6Y2=r=u޴g_>l͓&Xh͟i>b꿂ϝ>km-!Vn)%\.goݻvսwoʳGWg'O ٹ\JջljS!4%81cSv'jѢy.v#|LD]e[|BB]m{hN|a#,tMqعJe2 f':=H|gؐw}^ٲ6ZoO7oE-FMM2n۾G,8;;꯫*5V(oS:ƭ<4 ߾sD"Ѧ?fO=wV0l¸QSs{:6`{{PV2.^A LKc#+7R Vd/)Zxc>"౵ߠ.xڬ3޶}U6?Z"}rOG^rCs A L cʝ}*/>@޾D"b)~ç"{ʳ%fO<«'Ԛ9wX,PsP3hyԅg'##ˡysv )\zIremF kԠ)a' i_-I%RŔK6lP $"3<~SQ8"򭮮ir6`jjr >u]D/5ӂD"=nS*"2z=1;)(;;8zĀm;}C0F|öO$}e _V|uG_511[ڸE"H$:|{g,3+]=#@B_`𭰘Qj b&D$H'kX,^a˻wbq:F9;]짱+uj3\${FM^xlffJD7TiH*{|Kذy/YX3w`bL)wÐ]lJokȂfDNLHH673UP Hgb]&ab𭀱C[Sž;-=btv(fnnީVJ 冎 vJ*.V6++a=aYk_mfm> Hk'MRRṞDL a sNuS`9 LDV"U*j&ޏMl+T`֩SuDFff6-4͛ȬVJ$nӪ섈d?r;uȵTzة>{V(}˵_6zaei+T*Ūn*7KK[ZZ0 ;kM4PZZƭLkV|@Ff _e :1 gQ2ZX@ii{>ubH%RϞڶjVۼqCG=~& ˔&H%jv_6K$fffzCP\ٿVm"WlZWqu!Mgg-!5Hdѹ/H<{rVn9fꦤΜs -j ЦzgxncScB}{GOO7nϙZ5;ɱ@v셧^.Qft{{vC{J<7.c{9ĩ̔啿ҤDԡ}޽R7G:rA~SlJLP0P[[rwuD,¾JIUWݺkլ`egJuBBa?vA\1Eu>Oi>Ag>AI rz}؅7"[õb;sbAAh٬ntLl!O](nťZbA{u F3(p@ ~q‡.( b _;~QꞨW]%[t6P=O_š+hҨZbKy(lvl>{e (dRD,Ҳ݇k;"~.CY_?P,~pJ\+s@>gNopqv~4S\gO:u|? u !:9V6~{mƶP<҇"Uسm9[iisT0 wl]bhhx!_ͻH-tؐc'ޭ/BssFLܵ~㦶w&";jb\*FޘO7J{X0g8S~써fnLޏWoM?&U,؍YWWG"{]ڊ~YP󵶲p8Q?r(?JaTڲeWBo)œV::pl-xk7._-7[ADgOCD:{RbBqۖ,1tսަ&&w!f4jPolɩ^ytdzL&}o5ug9S&4lPO*?yMTB"pDt!߄$C_al/oɅKז._#HrPaԮIl 3}޽ܼu_$9)!251קV WLvνGRYe;nݻO޲`2;*ٖӍVk"jߦiNm,er'/l;wXɂrbvy<^6* xMzhei1bD">j<uܻ[ϳ.ZLQCÆ|Fy)c=.pļKۻ4<=f߹٫%&%OGN}}~32O-̚18n>|GԪUT*l֓ޭJhhXF ||{wuqm><} YY] 7ݭ=6s1DtrXzFfw)쓣Y-лg'EZ5\'O_Z~˃5U˦TrCC\YYZQ\G1oei{а[YYjxjR=رr; C|yݏ8N135%dLBB)mRrD0^MK$"DcmԠv*r@_Qw^QZ 5VsڍbcGFuqvd'&'0 3$%%Uؠb9ݸ~fOw_Ca ̘z?DRN͵Z2)9ʕaOʕ+a:˖aTfMWi[ٲ6ϕ& sϿ˂?{񚝒*H#"k+q Ddmm*H1*51f&WzcDZ3Ǫ yp`jk~!X,?mμƌbbbLDVV %4AUPNs1ҨL& E<7񲲲%Mkԕn޺=lŠ!!c`onn6h@_*7al,,¦PUNA>%9wo씴gjjj-|󾎎RK s6 nsu "/…CD/^9qeGٿ{nbb#'n߹1!7$eמ=)b-[{3'h\v F;~Lu` c#Νe.߸߾gLMM.]ݲu>4}Y3&<[Ug/>~T>m{u_Wo1{Ӻ2<4,9PK871)ycF ׋}rX+ /1ZTpj6ݻ_r]['K]?~+ Ph04'LUWjVwt?ztز39>ZO?|3ħ>8Yګ[J! 3dO9gpP+g?gE@X xeF(1j9\]%T&H%ZnٴNtL,0DUF/oٴJɏLˮ(ύt~ ~?@P|-d?" Bt?P2t??\tJʈ@B ~?(* ?/ ]?PBpǠ ?9*0[KB >(d ~?(MRg.@\t ~񤥽?EAw?@ ~??@ ~ ~?@ ~?@ ~w:@@ᓢ @@.T#~ ~ ~J肢JDB,)@)]PT̉K vBtACc.Pvb E?OwU\'¼KwN^Z+8sJmIf8ȟg_34mëC ž=fpqq|S5`_XlO!_ z*mZ+zuk]r],{/_k_H$oKs-P "mmd[^nbŷS|rF|~D.n߶Œ^z)epGc*Ίؿ--,5?WOOwD4s7mfOSRlz5ip/^vǏ FWEOOo5W555bnQs?h`UU|X{"jެqg^fmey&BoSnrM~i8xP?'G\~Uk68׽g2!g//YΗܫW޽]{~]Dk)l~Mʳ* ^.IDATnԠެv=իK/ꦻ8FH$?vd\g}1 \Og_\*]Nh}WYfNHL٭iF'b_jEKW;Uj\ >~Lp釸x 댫S\Ǟ;fjjrk7i,rnD&ݹ Ū<*oD]#wK\|ڥz)~7`(yynױGЂ?#"ڻlp.nF_zX~)&DTչ\9^}<c#Sk¥S'4Cyz6ip@9A:ܻ Br6._ %"g'2֣֙Ηz{v1nN^YYڴ| "mVפ~0xG~ ;TI@W/_ibbbys?h^g\^GNѴI#-V%4IbUQT^n;{s;yxeffھ52~LMMy.PɁ*V"ŧ7 =tϞ$a%':9Vf_rҵdWWnSRB2ū|>?gcs411>d칋DD1 sY!m"ruq>rsr<:\.cJ N?feg'ԙ'Ndkg522h¥ocrS!:::^Eh""+mεIʳ{/] wT*|ѓJ+j}>T7Sq̹!r]]6%$& w>]XruuVBrrem43l;ѓ2=qtP tuuսD&74m6O>0`̰"#'uo?Be ieA))QD[}}={JoU\q9-~zuf(*b7ڿVouF[5ӻx*aؠ~ݏ^tohrSi_RY*-T֠~[wU8:|vPisMjִ^Ǎ9I26JJJ8iÊ]GOiC}R'ߋU%\o"?ϞWپҋg?U\Fǰ-Z/^ٸiGO53l?,ZBЈOJJְ櫴Shx6MR_ohlIOKS H?yܭkgX|."]?Ǐ@iێ=}+K :clT|9a&5gᓧ% cDbIn4G3S/[u_zbbb\/UzF.gTZB2̴uT7_+K/; u]s?h&iSfUJm+wvry붺l7ccrʾ|Z]jXKoX*kEQRŊ_vp>ijӛ6iX>}1yF :ruԦu%[ѶwZhP 4,ѕfffWETڬIT.ΎE߾s.:+FrCu3Uy_w~} quqZ~"-ؘyŵ7wo>'/Q:'mbb}5607ǛݖdD>kA-{Qmڨy[tAzFgcޱg?e4*`K\p(M]/_.HKCgݵWA"7.pX,^o-VG[vPmDT=d8;%Vu i ӈa~zzzĩ!"2JGi֥w o䙋. ~?@8@@cE?@ ~?@og6GDEgpt6~Ⱦ#:&M GZ @nQ= ~ޝEYq=a#RWI A$D;Ʀuf"Z4ov"m>.-M^(qWeʂSw=ev)\5_8:gZQUu3 d .=G'̍zCKs 4Z"7~m`k:x;-ߟ "QvPW"e sw_644466ufQ׊_7׼e[$R}ǺYSb#b17tȠ% 0FD,544-z{Ϙd;X]a톟~„b\]\>'%Nwssc<=Ft<ٱdެ/&},B$Ii'9tƗTXĢy8> bO~@Q!=sIK+SiN|sUlYrʳ?g1g6d{@+Z*765eϹ,!{qT*ӝkEfӷMI^`2o\R[uoLּ.=T53_Pŗgi]MĎ;mR^&&<&"[3V n0eq)4@DG?@ ~@epf>\xIENDB`hydrogen-0.9.6-beta3/data/doc/img/PreferencesAppearance_V2.png000066400000000000000000000700571211146647700241130ustar00rootroot00000000000000PNG  IHDR- IDATxuX[wQ֫\;Q1-vw^*ڊؤJ( !lXPjaAdQ33gμ{vf9cBC j0!%C!d B!Y<BH0!%C!d B!Yb:PV-L eE}"(Pm